京东数据分析岗面试经历分享:SQL+Python+业务洞察全考察
2年数据分析经验京东面试全流程复盘,包含技术一面二面、业务面真题,涵盖SQL窗口函数、Python pandas、AB测试、指标体系等考点,附面试真题汇总和备考建议
背景介绍
先说下我的基本情况吧。我本科统计学专业毕业,目前在一家中型电商公司做了2年的数据分析师,日常工作主要是用SQL取数、做报表,偶尔用Python做些自动化脚本和简单的数据建模。说实话,在原公司待着也算稳定,但总觉得成长空间有限——数据基建不完善,很多时间花在取数这种重复劳动上,真正做深度分析的机会不多。
今年3月中旬,我在京东招聘官网上看到了京东零售-数据分析岗的社招信息,岗位要求3年以内经验,JD里写的主要是用户行为分析、活动效果评估、指标体系搭建这些,跟我目前的工作方向比较匹配。犹豫了两天还是投了,毕竟京东的数据体量和分析深度,肯定不是我现在这家公司能比的。
投递后大概一周,HR打电话来约面试,整体流程是技术一面→技术二面→业务面+HR面,三轮面试跨度大约两周。下面我按轮次详细复盘,希望能帮到正在准备京东数据分析面试的朋友们。
第1轮 技术一面(视频面,约55分钟)
一面面试官是个看起来30岁左右的小哥,开场先让我自我介绍,然后直接进入技术环节。整体节奏比较紧凑,问题密度很高。
1. SQL:求每个品类下销售额Top3的商品
面试官给了一个订单表order_detail,字段有order_id、product_id、category_id、sale_amount、order_date,让我写出每个品类下销售额排名前三的商品。
这题我比较熟,直接用窗口函数写了:
我的回答:
SELECT category_id, product_id, total_sale
FROM (
SELECT category_id, product_id, SUM(sale_amount) AS total_sale,
ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY SUM(sale_amount) DESC) AS rn
FROM order_detail
GROUP BY category_id, product_id
) t
WHERE rn <= 3;
面试官追问:如果用RANK()和ROW_NUMBER()有什么区别?我答了并列排名的情况,RANK()会有跳跃,DENSE_RANK()不会跳跃。他点了点头,没再追问。
2. SQL:求连续3天登录的用户
给一个用户登录日志表user_login,字段有user_id、login_date,求连续3天及以上登录的用户。
这题我之前刷过类似的,用ROW_NUMBER()做差值的方法:
我的回答:
SELECT user_id
FROM (
SELECT user_id, login_date,
DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) DAY) AS grp
FROM (SELECT DISTINCT user_id, login_date FROM user_login) t1
) t2
GROUP BY user_id, grp
HAVING COUNT(*) >= 3;
面试官说思路没问题,但追问了一个边界情况:如果同一天有多条登录记录怎么处理?我说用DISTINCT去重,已经在子查询里处理了。他确认OK。
3. SQL:留存率计算
给定用户注册表和登录表,计算次日留存率、7日留存率。
我的回答:用LEFT JOIN,将注册日期和登录日期做差,分别筛选差值为1和7的记录,再除以当日注册人数。面试官让我写完整SQL,我写了大概5分钟,他检查后说逻辑正确。
4. Python:pandas数据清洗
面试官问:如果有一个DataFrame,其中age列有缺失值和异常值(比如负数和超过150的值),怎么清洗?
我的回答:先用df['age'].isnull().sum()查看缺失数量,缺失比例小的话用中位数填充df['age'].fillna(df['age'].median()),异常值用df.loc[df['age'] < 0 | (df['age'] > 150), 'age'] = np.nan先置空再填充。面试官追问如果缺失比例很大怎么办?我说可能要考虑这个特征是否还有意义,或者用模型预测填充,但实际工作中一般跟业务方确认。
5. Python:groupby和agg操作
问:如何用pandas实现按用户分组,计算每个用户的订单数、平均订单金额、最大订单金额?
我的回答:df.groupby('user_id')['order_amount'].agg(['count', 'mean', 'max']),面试官说OK,又问如果想自定义列名呢?我答.agg(订单数=('order_amount', 'count'), 均价=('order_amount', 'mean'), 最大额=('order_amount', 'max')),他满意了。
6. 统计基础:p值和假设检验
面试官问:p值的含义是什么?0.05的显著性水平怎么理解?
我的回答:p值是在原假设为真的前提下,观察到当前或更极端结果的概率。0.05的显著性水平意味着如果原假设为真,我们有5%的概率会错误地拒绝原假设(即第一类错误率控制在5%)。面试官追问:那p值小就一定说明效果显著吗?我说不一定,还要看效应量和样本量,大样本下很小的差异也可能p值显著,但实际意义不大。他点头认可。
7. 统计基础:大数定律和中心极限定理
问:简单说下大数定律和中心极限定理的区别?
我的回答:大数定律说的是样本量足够大时,样本均值趋近于总体期望;中心极限定理说的是样本量足够大时,样本均值的分布趋近于正态分布,不管总体是什么分布。前者关注的是"收敛到真值",后者关注的是"分布形态"。面试官说解释得很清楚。
第2轮 技术二面(视频面,约60分钟)
二面面试官是位看起来资历比较深的女面试官,应该是团队负责人级别的。整体风格更偏业务场景,技术问题也跟业务结合更紧密。
1. SQL:用户漏斗分析
给定用户行为日志表user_action,字段有user_id、action_type(浏览/加购/下单/支付)、action_time,求从浏览到支付的每一步转化率。
我的回答:先用CASE WHEN统计每个用户是否完成了各步骤,再汇总计算转化率。我写了大概7-8分钟,面试官看后说思路对,但提醒我注意去重问题——同一用户可能多次浏览,要用是否完成过某行为来判断,而不是计数。我承认这个点确实容易忽略,修改后她认可了。
2. AB测试:如何设计一个优惠券效果的AB实验
面试官给了一个场景:京东要测试满200减30的优惠券对GMV的影响,问怎么设计实验。
我的回答:首先确定实验指标——主要指标是人均GMV,辅助指标是客单价、下单转化率;然后确定分流策略——按用户ID随机分流,实验组发券、对照组不发;样本量用功效分析计算,确保能检测到5%的提升;实验周期至少7天覆盖完整周期;最后用t检验或Mann-Whitney U检验比较两组差异。
面试官追问了两个问题:一是如果用户之间有社交传播效应怎么处理?我说可以考虑按社交圈簇分流,或者用时间片轮转实验;二是如果实验期间遇到大促怎么办?我说要么避开大促期,要么把大促作为分层因素。她说回答得比较全面。
3. AB测试:辛普森悖论
问:什么是辛普森悖论?在AB测试中如何避免?
我的回答:辛普森悖论是指在各分组中观察到的趋势,在合并数据后趋势反转。比如实验组在iOS和Android上分别表现更好,但合并后反而更差,可能是因为iOS用户占比差异导致的。避免方法是在分析时进行分层分析,或者用CUPED等方法控制混杂变量。面试官追问CUPED的原理,我只能说个大概——用实验前的协变量来降低方差,具体公式记不清了。这算是我二面答得不太好的一题,面试官说没关系,知道思路就行。
4. 业务分析:京东618大促复盘
面试官问:如果让你做京东618大促的数据复盘,你会从哪些维度分析?
我的回答:我会从四个维度展开:一是整体业绩——GMV、订单量、客单价同比环比变化;二是流量分析——UV、PV、各渠道引流效果、跳出率;三是转化漏斗——从浏览到下单各环节转化率,找出流失严重的环节;四是用户分层——新老用户贡献占比、高价值用户行为特征、沉睡用户召回效果。面试官追问:如果GMV同比增长但利润率下降,你怎么分析?我说要拆解成本结构,看是补贴力度过大还是低毛利品类占比提升,再结合品类和用户维度交叉分析。她对这个思路比较认可。
5. 指标体系:如何搭建一个品类的经营指标体系
问:如果让你负责京东某品类的数据,怎么搭建经营指标体系?
我的回答:我会用OSM模型来搭建。先确定目标(Objective),比如品类GMV增长;然后拆解策略(Strategy),GMV=流量×转化率×客单价,每个因子再往下拆;最后定义度量(Measurement),流量看UV/PV,转化率看各环节转化,客单价看人均消费。同时要区分北极星指标、过程指标和监控指标,形成看板。面试官问:如果多个指标之间有冲突怎么办?我说要看优先级,比如短期GMV和长期用户满意度冲突时,需要跟业务方对齐战略方向。她点了点头。
6. SQL:同比环比计算
给定月度销售汇总表,字段有month、category_id、gmv,计算每个品类每月的同比和环比增长率。
我的回答:环比用LAG(gmv, 1) OVER(PARTITION BY category_id ORDER BY month),同比用LAG(gmv, 12) OVER(PARTITION BY category_id ORDER BY month),然后计算增长率。面试官说没问题,又问如果某些月份没有数据导致LAG取到空值怎么办?我说用COALESCE处理,或者确保数据是连续的月份序列。
第3轮 业务面+HR面(约45分钟)
三面是业务负责人和HR一起面的,前30分钟业务面,后15分钟HR面。
业务面部分
业务面主要聊项目经历和业务理解。面试官让我详细讲一个最有成就感的数据分析项目。我讲了之前做的一个用户流失预警项目——用RFM模型对用户分层,发现最近30天未复购的高价值用户占比12%,然后配合运营做了定向召回,最终召回率18%,贡献GMV约80万。
面试官追问了几个点:RFM各维度的阈值怎么定的?我说用K-means聚类确定分界点;召回策略是什么?短信+push+专属优惠券;怎么评估效果?用对照组做对比。他说整体逻辑清晰,但问我如果重新做会怎么改进?我说会尝试用机器学习模型替代RFM规则,加入更多行为特征,比如浏览频次、搜索关键词等。
还问了一个开放题:京东PLUS会员的续费率下降了,你会怎么分析?我说先拆解——是哪类用户续费率下降?是新入会用户还是老会员?再分析可能的原因:权益吸引力下降?竞品会员分流?价格敏感?然后针对性做数据验证。面试官似乎比较满意。
HR面部分
HR面就比较常规了:
1. 为什么想来京东?——平台大、数据体量大、成长空间大
2. 当前薪资和期望?——如实回答
3. 职业规划?——3年内成为能独立负责业务线数据分析的资深分析师
4. 有什么想了解的?——问了团队规模和业务方向
HR说大概一周内给结果。
面试真题汇总
下面是三轮面试的所有题目汇总,方便大家快速浏览:
技术一面:
1. SQL:每个品类销售额Top3商品 → 窗口函数ROW_NUMBER/RANK → ⭐⭐
2. SQL:连续3天登录用户 → 日期差值法 → ⭐⭐⭐
3. SQL:次日/7日留存率计算 → LEFT JOIN + 日期差 → ⭐⭐⭐
4. Python:pandas缺失值和异常值清洗 → fillna + 条件替换 → ⭐⭐
5. Python:groupby多聚合操作 → agg函数 → ⭐⭐
6. 统计:p值含义和显著性水平 → 假设检验基础 → ⭐⭐
7. 统计:大数定律vs中心极限定理 → 概率论基础 → ⭐⭐
技术二面:
1. SQL:用户行为漏斗分析 → CASE WHEN + 去重 → ⭐⭐⭐
2. AB测试:优惠券效果实验设计 → 实验设计全流程 → ⭐⭐⭐⭐
3. AB测试:辛普森悖论及避免方法 → 分层分析/CUPED → ⭐⭐⭐⭐
4. 业务分析:618大促复盘维度 → OSM/拆解思维 → ⭐⭐⭐
5. 指标体系:品类经营指标搭建 → OSM模型 → ⭐⭐⭐⭐
6. SQL:同比环比计算 → LAG窗口函数 → ⭐⭐⭐
业务面+HR面:
1. 项目深挖:用户流失预警项目 → 项目复盘能力 → ⭐⭐⭐
2. 开放题:PLUS会员续费率下降分析 → 业务拆解思维 → ⭐⭐⭐⭐
3. 行为面试:为什么来京东/职业规划 → 动机与规划 → ⭐⭐
心得体会与建议
1. SQL是基本功,窗口函数必须熟练
京东的数据分析面试,SQL考察比重非常大,尤其窗口函数几乎必考。ROW_NUMBER、RANK、LAG这些要形成肌肉记忆,建议每天刷2-3道LeetCode SQL题,保持手感。另外去重、空值处理这些细节也容易被忽略,面试时一定要主动考虑边界情况。
2. AB测试是加分项,一定要理解原理而不只是背概念
二面问的AB测试设计题,如果只会背"随机分流、假设检验"这种泛泛的回答是远远不够的。面试官会追问分流策略、样本量计算、混杂变量控制这些细节,建议系统学习一下因果推断和实验设计的知识,CUPED、差分法这些进阶方法了解原理会加分很多。
3. 业务思维比技术深度更重要
从二面开始,面试官更看重你能不能把技术应用到业务场景中。比如618复盘那道题,技术本身不难,难的是你能不能系统地拆解问题、提出有洞察力的分析维度。建议平时多看业务分析报告,培养结构化思维。
4. 不会的题别慌,展示思考过程
二面CUPED那题我确实答得不完美,但我先说了"具体公式记不清了",然后讲了我理解的思路和用途。面试官后来说,比起背公式,他们更看重候选人面对不会的问题时的思考方式。所以遇到不会的,先冷静分析,说出你的推理过程,比直接说"不知道"要好得多。
最后说下结果:面完三面后第6天,HR打电话来了,offer到手🎉。整体体验下来,京东的面试流程很专业,面试官水平也很高,问题设计得很有针对性。祝大家面试顺利!
FAQ
Q1:京东数据分析岗对学历有什么要求?
A:社招的话,本科及以上即可,更看重实际项目经验。我本科双非也过了简历关,所以学历不是硬门槛,但统计学、数学、计算机相关专业会有加分。
Q2:面试中SQL考到什么难度?
A:基本是中等偏上难度,窗口函数是核心考点,JOIN和子查询也会考。不会考特别复杂的存储过程或性能优化,但逻辑一定要写对。建议刷题平台:LeetCode SQL、牛客网SQL专项。
Q3:Python考得深吗?需要会机器学习吗?
A:Python主要考pandas数据处理,不会考算法实现。机器学习不是硬性要求,但如果你的项目里用到了,面试官可能会追问。建议把pandas的groupby、merge、apply这些操作练熟。
Q4:AB测试在面试中占比大吗?
A:非常大,尤其是二面。京东作为电商公司,AB测试是日常工作的核心方法论。建议重点准备:实验设计流程、样本量计算、分流策略、辛普森悖论、CUPED等。
Q5:从投递到拿到offer大概多久?
A:我整个流程大约3周:投递后1周约一面,一面后3天约二面,二面后4天约三面,三面后6天出结果。不同部门节奏可能不同,供参考。

