尧图精选

京东2019校招数据分析工程师笔试题全解析:题型、思路与避坑指南

🕒 发布时间:2026/8/31 21:15:54 📁 来源:尧图网络
京东2019校招数据分析工程师笔试题我前前后后刷过三遍每次都有新收获。这套题不是简单的SQL背默也不是单纯的统计公式考查更像是对“业务Sense 技术落地 逻辑表达”三位一体能力的综合体检。如果你正准备投递大厂数据分析岗或者已经在笔试环节碰过壁那这篇文章值得你花20分钟慢慢看我会把题型分布、解题思路、常见陷阱全部拆开揉碎顺带附上一套可以拿来练手的模拟题和解析。1. 笔试整体考察方向与出题逻辑1.1 校招笔试与社招面试的区别京东2019校招的数据分析工程师笔试放在今天看依然很有代表性。它的目标群体是应届生所以不会像社招那样深挖某个业务线的历史遗留问题也不会问“你之前做的那个模型为什么线上效果不好”这种需要大量项目背景支撑的问题。校招笔试更看重的是你有没有做数据分析的底子以及遇到问题时的思考路径是否清晰。我见过不少同学在准备时只刷SQL题觉得笔试就是考SQL结果上了考场发现还有大量的概率统计和业务逻辑题直接懵掉。实际上大厂校招笔试的题型分布通常可以概括为SQL和数据提取约30%统计学基础约20%业务分析约20%机器学习基础约15%Python编程约15%。这个比例不是绝对但足以说明问题——只会SQL撑不起数据分析师这个岗位只会调模型同样不行。另外校招笔试和面试有本质区别。笔试没有追问机会一道题只有几分钟考察的是你在有限时间内能否给出“结构化且可落地”的答案。面试考察的是深度和互动笔试考察的是熟悉度和稳定性。所以很多题目表面看起来简单比如“请写出统计用户次日留存率的SQL”但如果你只写了一个大概没有考虑去重、时间口径、分母定义就会被扣分。这就是校招笔试的出题逻辑用最基础的题目筛选出基本功扎实的人。1.2 核心能力模型拆解从京东的岗位描述和历年笔试题来看数据分析工程师的核心能力可以拆成四个维度。第一个维度是数据提取能力。你面对的是几十亿行的订单表、用户表、商品表怎么用最清晰的方式把需要的数据捞出来。这里考的不是多么复杂的窗口函数而是你对SQL基础语法、联结逻辑、时间处理是否熟练。第二个维度是业务理解能力。数据永远是为业务服务的笔试题里经常给出一个场景比如“优惠券发放后转化率下降”让你判断可能的原因这就需要你有业务的整体观知道从流量、商品、用户、竞对、时间等多个角度去拆解。第三个维度是数理统计基础。AB测试、假设检验、概率计算、分布判断这些是数据分析师做决策时的“底层语言”。笔试不会考太深的推导但会考你知不知道什么场景用t检验什么场景用卡方检验以及怎么回答“样本量不够怎么办”这类落地问题。第四个维度是工程与工具能力。包括Python处理数据的熟练度、对常用库pandas、numpy的掌握以及是否了解基本的机器学习术语。有些同学会问“数据分析工程师需要会写模型吗”答案是至少需要能读懂模型输出并在笔试中展现出你理解模型的适用场景和局限性。把这四个维度放到一份试卷里很容易出现“每道题都见过但每道题都不确定”的状态。所以备考的重点不是背题而是建立起一套完整的答题框架看到一道题能快速定位它考的是哪个维度然后调动对应知识储备。下面我按实际考试中出现频率从高到低逐个拆解。2. 高频题型SQL查询与数据提取2.1 典型SQL题与解题思路SQL题在京东笔试里基本是必考的而且往往不止一道。常见套路是给你两张表一张用户表user_id, reg_date, age, gender一张订单表order_id, user_id, order_date, amount然后让你统计各种指标。我挑两道代表性真题的思路讲讲。第一道是统计“每月新用户的首单转化率”。注意这里有两个关键点一是“新用户”要限定为当月注册的用户二是“首单”意味着每个用户要取他最早的一单。很多人的第一版SQL是SELECT DATE_FORMAT(a.reg_date, %Y-%m) AS month, COUNT(DISTINCT b.user_id) / COUNT(DISTINCT a.user_id) AS conversion_rate FROM user a LEFT JOIN orders b ON a.user_id b.user_id GROUP BY month;这个写法有两个问题。第一LEFT JOIN把订单表所有订单都关联上一个用户买十单就会产生十行虽然用COUNT(DISTINCT)能去重但性能很差而且后面如果需要带金额字段就会出错。第二没有确保订单时间在注册之后可能出现用户先有历史订单的情况虽然注册时间通常最早但严谨起见还是要加条件。更好的解法是先取每个用户的“首单时间”再与原表关联WITH first_order AS ( SELECT user_id, MIN(order_date) AS first_order_date FROM orders GROUP BY user_id ) SELECT DATE_FORMAT(u.reg_date, %Y-%m) AS reg_month, COUNT(DISTINCT fo.user_id) AS first_order_users, COUNT(DISTINCT u.user_id) AS new_users, COUNT(DISTINCT fo.user_id) / COUNT(DISTINCT u.user_id) AS conversion_rate FROM user u LEFT JOIN first_order fo ON u.user_id fo.user_id WHERE fo.first_order_date u.reg_date GROUP BY reg_month;这道题考察的点很清晰你会不会用子查询或CTE知不知道去重口径能不能处理时间边界条件。笔试里时间有限不一定要求写出最完美的版本但至少要把去重和时间条件写清楚。第二道经典题是“计算商品品类下Top3的SKU销售额”。这题考窗口函数。如果只会GROUP BY很难优雅地取每组前几名。用ROW_NUMBER()可以轻松实现SELECT category_id, sku_id, sales FROM ( SELECT category_id, sku_id, SUM(amount) AS sales, ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY SUM(amount) DESC) AS rn FROM orders GROUP BY category_id, sku_id ) t WHERE rn 3;注意这里有个小坑PARTITION BY和GROUP BY同时出现时窗口函数是在分组后执行的所以ORDER BY SUM(amount)没问题。另外如果想并列也要选进来可以用DENSE_RANK()。这个区别在面试追问时经常出现笔试里如果能在注释里写清楚“此处用ROW_NUMBER去重并列不保留”会是一个加分项。2.2 常被忽略的SQL陷阱SQL题能不能拿高分往往不看你会多少高级语法而看你能不能避开那些低级但致命的错误。我整理了三个在笔试中最常见的陷阱。第一个是去重问题。很多指标是带了多个维度的比如订单表里有子订单编号一个父订单拆成多个子订单统计用户数时如果直接COUNT(order_id)就会数错。正确做法是明确“这个指标需要按哪个粒度去重”然后使用COUNT(DISTINCT user_id)而不是COUNT(user_id)。笔试中时间紧张我习惯先看题目问的是“订单量”还是“用户数”再决定是否去重。第二个是NULL值处理。LEFT JOIN后右侧表不匹配的字段是NULL如果直接SUM(amount)会把NULL跳过但COUNT(amount)不会计入NULL这就会导致结果差异。很多题目故意埋了“用户有注册但无订单”的情况统计通过率、转化率时分母要用全部用户数分子只能用有订单的用户NULL要处理好。建议在答题时写明“分母为活跃启动数去除无效数据”这样既展示了你的严谨也避免了边界问题。第三个是日期格式兼容。题目里日期可能是2019-01-01这种字符串也可能是时间戳也可能有精确到秒的格式。我见过有人用DATE_FORMAT处理结果题库的答案预期是SUBSTR(日期,1,7)最后结果一致但代码不够健壮。在笔试中如果不需要兼容多种格式就直接用标准函数但最好先观察一下数据样例再动手不要上来就写死。SQL这块我的建议是每天保持手写3-5道练习重点练窗口函数、CASE WHEN、日期处理、多表关联。不要依赖IDE的自动补全笔试环境通常很简陋连报错提示都不一定有手写能力必须过硬。3. 统计学与业务思维题3.1 概率统计题怎么答京东笔试的概率统计题主要分两类一类是纯概率计算另一类是统计推断的应用。纯概率题比如“某活动点击率为10%随机抽取100个用户至少15人点击的概率是多少”这题考的其实是二项分布或正态近似。小白可能会去手算阶乘但正确思路是把问题转化为标准正态分布求Z值再查表或估算。笔试中如果给数据通常期望你用中心极限定理估算。我建议遇到这类题先明确分布类型。比如“用户是否点击”是伯努利试验n100较大可以用正态近似如果n很小则直接按二项分布概率公式算。答题时要写出关键步骤设X~B(n,p)计算均值np标准差sqrt(np(1-p))然后标准化为Z再根据题目要求判断是否做连续性校正。哪怕最终答案略有误差但思路完整就能拿大部分分。另一类统计推断题很贴近业务比如“某功能改版后次日留存率从40%提升到42%这个提升是否显著”。这题考的框架是假设检验。回答时要包括原假设H0和备择假设H1选择Z检验还是t检验样本量大于30通常用Z检验计算标准误和检验统计量根据显著性水平通常0.05判断是否拒绝原假设最后还要说明即使统计显著也不代表实际显著需要看效应量和业务意义。很多同学只回答“算p值小于0.05就显著”这是不完整的。笔试的评分点是结构化的你应该像写分析报告一样把每一步说清楚。如果对检验方法的适用条件不熟就背一张常用表Z检验用于大样本均值或比例检验t检验用于小样本均值卡方检验用于分类变量独立性方差分析用于多组均值比较。笔试前的晚上值得把这张表再默写一遍。3.2 业务分析题的回答框架业务分析题是京东笔试的重头戏也是最容易拉开差距的部分。常见问法是“某商品详情页的UV上升了20%但GMV反而下降请分析可能原因。”或是“给出一段活动数据请你评估活动效果。”这类题没有标准答案但阅卷人心里有一套答题框架你的回答是不是有逻辑、有业务深度一眼就能看出来。我总结了一个四步回答法简单说就是“拆、分、验、答”。拆是拆解指标把GMV拆解为UV × 转化率 × 客单价再进一步把UV拆解为渠道流量和自然流量把转化率拆解为商品详情页转化率、下单转化率、支付转化率等。分是分析每个环节可能出现的原因比如UV上升但转化率下降可能是流量质量变差、活动商品不匹配、页面加载变慢、价格调整、竞对动态等。验是用数据验证比如对比不同渠道的转化率看哪个渠道拉低了整体或者按时间段拆分看异常是否集中在某个小时。答是给出结论和下一步动作比如“建议暂停低质渠道投放或优化落地页首屏内容”。应对这种题最忌讳的是只给一两个原因就收尾。即使你不会写数据公式也要把你想到的原因按照“用户-产品-渠道-时间-竞对”的框架列出来每个原因后面跟一句“可以通过XX数据验证”。这样阅卷人会认为你有足够的业务敏感度而不是在瞎猜。还有一类题会给你一个具体场景比如“京东618大促前期某品类备货多少”。这题看似是供应链问题但数据分析师的角色是提供预测依据。回答时可以从历史同期销售、活动力度、流量预估、库存周转率、断货成本几个角度切入给出一个计算公式比如“预估销量 日均销量 × 活动系数 × 流量增长系数”同时强调要预留安全库存。数学不一定精确但你的思考过程是有逻辑的。我在看面经时发现业务题的高分回答普遍有两个特点一是会主动“定义问题”比如先说明“GMV下降”是指同比还是环比排除季节性因素二是会用“排除法”先排除最不可能的原因再聚焦到核心假设。如果你能在笔试中展示出这种严谨性哪怕答案不完整也会比那些直接给结论的人强得多。4. 机器学习基础与Python能力4.1 基础算法题要点数据分析工程师的笔试中机器学习部分不会太难但你要懂基本概念。常见考点包括监督学习和无监督学习的区别过拟合和欠拟合的表现及应对常见的回归、分类、聚类算法适用场景评估指标的选择。尤其是评估指标考得最多。比如“在用户购买预测场景中正负样本比例为1:99应该用什么评估指标”很多人会选准确率但准确率在这里没有意义因为全部预测为负类也有99%的准确率。正确回答是用AUC、召回率、精准率或者F1。也曾经出现过“简述决策树如何选择划分特征”这类基础题。如果你知道信息增益、信息增益率、基尼系数就能拿满分。不需要手推公式但要能说清楚它们的区别ID3用信息增益偏好取值多的特征C4.5用信息增益率CART用基尼系数。这种题考察的是你是否系统学过基础知识而不是靠背题。另一类高频题是“如何评估一个点击率预测模型的性能”。这里需要把离线评估和线上评估分开。离线评估可以用AUC、LogLoss等线上评估可以做AB测试看点击率是否显著提升。还要提到训练集、验证集、测试集的划分以及时间序列数据不能随机打散要按时间划分防止数据穿越。能想到时间穿越这一点就已经超过大部分考生了。我在准备这部分时会把所有算法都整理成“一句话定义 一个适用场景 一个缺点”的卡片。比如K-Means基于距离的聚类适用于样本分布较均匀的情况缺点是对初始质心和异常值敏感。这样在笔试时不管遇到什么算法描述题都能快速组织语言。准备笔试不需要做太深的推导但基础的“名字-场景-优缺点”一定要滚瓜烂熟。4.2 Python编码与考察点Python题通常不是让你写一大段业务代码而是考察基本的数据处理能力。常见题目有给定一个列表统计每个元素出现的频次对字典按值排序去重、合并两个DataFrame用pandas实现分组聚合。给你一段代码让你写出输出结果或判断是否有错也很常见。举个例子题目可能会这样有一个DataFrame包含用户ID、商品ID、购买时间请你用pandas实现“每个用户最近一次购买的商品ID”。代码很简单import pandas as pd df.sort_values(购买时间).drop_duplicates(subset用户ID, keeplast)但很多同学会写成groupby之后取max这样得到的是最近时间而不是最近时间对应的商品ID。这道题的关键是能不能想到drop_duplicates的keep参数和排序之间的配合。类似的还有“每个类别的数量Top3”需要先groupby计数然后rank方法取Top3。都是非常基础的操作但非常考验熟练度。Python题还有一个小点是手写算法比如“手写快速排序”或者“手写二分查找”。虽然数据分析岗很少需要自己写排序但笔试就是想看你的代码基本功。我在备考时把这些手写题整理成了一个模板考试前默写一遍确保不卡壳。如果你时间充裕还可以准备“手写K折交叉验证划分代码”这个在笔试题里也出现过。另外笔试环境里的Python通常没有提示所以写代码时要注意缩进是否一致、函数名是否拼对。我在考场上见过有人因为pandas的read_csv打成read_cvs而浪费了时间这种错误完全可以通过检查避免。答题时如果时间允许先用文字描述一下思路再写代码这样即使代码出错阅卷人也知道你的意图。5. 实战演练一套模拟笔试题目及解析5.1 模拟题一SQL取数我按照京东2019校招笔试的风格编了一套模拟题你可以用来检验一下自己的水平。第一题是SQL题背景如下订单表ordersorder_id订单ID、user_id用户ID、sku_id商品ID、order_time下单时间格式YYYY-MM-DD HH:mm:ss、pay_amount支付金额单位元 用户表usersuser_id用户ID、reg_time注册时间、platform注册平台取值ios/android/h5问题统计2019年1月份各注册平台的新客中在当月末之前完成过支付首单的用户数以及首单支付总金额。这道题的重点在于“新客”和“首单”。你可以这样解先在订单表中找到每个用户在其首单时间且首单时间在2019年1月31日之前然后关联users取平台再筛选注册时间在1月1日至1月31日之间的用户。第一步用MIN(order_time)取首单时间是关键但要注意如果一个用户在2019年1月之前下过单那么他在1月就不算新客了。所以正确做法是WITH first_order AS ( SELECT user_id, MIN(order_time) AS first_order_time FROM orders WHERE order_time 2019-01-01 AND order_time 2019-02-01 GROUP BY user_id ) SELECT u.platform, COUNT(DISTINCT fo.user_id) AS first_order_user_cnt, SUM(o.pay_amount) AS first_order_gmv FROM users u LEFT JOIN first_order fo ON u.user_id fo.user_id LEFT JOIN orders o ON o.user_id fo.user_id AND o.order_time fo.first_order_time WHERE u.reg_time 2019-01-01 AND u.reg_time 2019-02-01 GROUP BY u.platform;这里有一个细节SUM(o.pay_amount)只关联了首单那条订单而不是所有订单所以统计的是首单支付金额而不是新客在1月的全部支付金额。如果你写成直接关联两个表就会把后续订单也算进去导致答案错误。这道题拿满分不容易但能写出“先取首单”这个关键步骤已经能拿一半分了。5.2 模拟题二AB测试场景某App将结算页的“提交订单”按钮从蓝色改成红色经过一周AB实验实验组和对照组各覆盖50万用户。实验组下单转化率为5.2%对照组为4.8%。请问这个提升是否显著如果显著是否可以全量上线此题考的是AB测试全流程。第一步建立原假设H0红蓝按钮转化率相同备择假设H1红蓝按钮转化率不同。第二步计算合并比例p(p1n1p2n2)/(n1n2)然后求标准误SEsqrt(p*(1-p)(1/n11/n2))。代入数字p10.052p20.048n1n2500000p≈0.05SE≈sqrt(0.050.95*(2/500000))≈0.000436。Z(0.052-0.048)/0.000436≈9.17远大于1.96所以p0.05差异显著。但显著并不代表立刻全量。还要考虑三个问题一是实验是否在时间上覆盖了完整的用户周期是否只测了工作日而没测周末二是除了转化率还要看是否引入负面影响比如客单价下降、退款率上升、页面加载变慢三是是否有长期效应按钮颜色改动可能在一周内有新鲜效应但长期会消退。所以答案应该建议再持续观察一段时间或者看更多指标后再决定是否全量。很多同学答到“显著可以上线”就完了忘记评估业务影响这样会丢分。5.3 模拟题三Python手写代码题目给定一个整数列表nums和一个整数k请统计nums中每个元素后面离它最近且比它大的一次出现的元素距离。比如nums[2,1,3,5,4]元素2后面第一个比它大的是3距离为2元素1后面第一个比它大的是3距离为1元素3后面第一个比它大的是5距离为1元素5和4后面没有比它大的元素。请写一个函数实现。这道题考的是经典的“单调栈”可以一次遍历解决。思路是从右往左维护一个单调递减栈栈里存的是下标。当前元素比栈顶元素大时栈顶元素不可能成为当前元素右侧“第一个更大的数”所以出栈直到栈顶元素大于当前元素此时距离就是栈顶下标与当前下标的差。代码def next_greater_distance(nums): n len(nums) res [-1] * n stack [] for i in range(n - 1, -1, -1): while stack and nums[stack[-1]] nums[i]: stack.pop() if stack: res[i] stack[-1] - i stack.append(i) return res这题思路不常见但笔试中出现过类似的“下一个更大元素”。如果你没接触过单调栈很可能会写出O(n^2)的双重循环。考场时间有限如果写不出最优解可以先写暴力解再说明能否优化。至少要保证代码能跑出来拿到部分分。我的建议是笔试前把常见数据结构方法的模板过一遍尤其是单调栈、双指针、哈希表计数这些都是笔试题中经常出现的“隐藏考点”。5.4 模拟题四综合业务分析题目2019年3月京东家电品类GMV环比下降10%但全站GMV环比持平。请你列出分析思路并给出至少三种可能原因及验证方法。这题很开放。回答的核心是“拆解”。家电品类的GMV可以拆成“新客GMV 老客GMV”老客GMV又可以拆成“老客人数 × 人均购买金额”。环比下降10%可能来自几个方向一是季节性因素。3月份是家电销售淡季2月有春节促销和年货节基数较高。验证方法是对比去年3月与2月的环比降幅如果大致一致说明是正常的季节性波动。二是流量下降。全站流量持平但家电品类的曝光或点击可能下降比如首页改版、活动坑位减少、搜索推荐权重变化。验证方法是看品类UV和点击率按流量来源拆分。三是商品供给问题。某个大品牌缺货、价格上调、主推商品下架都会导致转化下降。验证方法是看品类下Top10商品的销量变化以及SKU动销率。四是竞品分流或消费者需求转移。比如3月是装修旺季家电需求可能转向线下或者热卖品类从大家电转向小家电。验证方法是看子品类的销售结构变化。五是用户体验问题比如售价异常、优惠券门槛提高导致下单犹豫。验证方法是看加购率、下单率、支付成功率是否下降。答题时要强调“先用数据确认原因再采取行动”不要把原因当结论。这题没有唯一答案但你的回答如果覆盖了“流量、供给、需求、价格、季节性”这几个维度并且每个原因都给出了可验证的指标就能拿到一个不错的分数。我在自己模拟这套题时会限定自己每个回答控制在300字以内强迫自己用最精炼的语言把逻辑说清楚。因为笔试时间有限你不能在某道题上磨太久结构化的表达能让你把答案写得又快又完整。6. 备考经验与常见问题排查6.1 时间分配策略京东校招笔试一般时长在90分钟到120分钟题量在20-30道之间包含选择题和问答题。我的建议是拿到试卷先花3分钟浏览全部题目对题目类型和分值做个判断。如果选择题占比较大可以先快速完成因为选择题通常只需要计算和判断问答题留在后面按分值分配时间。我个人的分配策略是选择题不超过总时间的40%问答题余下25分钟每道。比如10道选择题每题1.5分钟约15分钟5道问答题每道10-15分钟约60分钟剩下15分钟检查和补充。实际上很多同学在选择题上卡太久遇到不会的题反复琢磨导致后面大题没时间写。碰到一道选择题超过3分钟没有思路就先随便蒙一个并标记回头再想不要因小失大。问答题的时间分配更要看分值。一般一道“写SQL”的题分值在10分左右你至少留出10分钟来写和检查。如果题目里给出多张表先花1分钟看清表格字段和关系不要在没看懂表结构的情况下急着写SQL。业务分析题分值高可以多写但也要控制字数关键是逻辑完整而不是字数多。6.2 踩过的坑与避坑技巧我在刷这套题时踩过不少坑整理几条最典型的希望对你有帮助。第一个坑是“忽略前提条件”。比如题目问“统计各渠道的新客首单率”有人直接把所有用户算一遍忘了限定“新客”是当月注册的最后结果对不上。我的避坑方法是答题前先圈出题目中的限定词时间范围、用户范围、商品范围、是否去重然后在草稿纸上写几个关键词用完一个划掉一个。这个方法看起来笨但能有效防止漏条件。第二个坑是“SQL写完不做合理性验证”。笔试环境没有真实数据但你写完SQL可以自己代入几条假数据计算一遍看结果是否合理。比如统计转化率你可以假设100个用户10个下单那结果应该在0.1左右。如果算出来是10说明哪里除反了。养成这个习惯能救回很多分。第三个坑是“Python代码忘记处理边界条件”。比如写求列表中位数的函数如果列表长度是偶数怎么定义中位数统计频次时遇到空列表怎么办。笔试题的测试用例通常会埋这些边界如果你在代码里没有处理可能只过一半用例。我的经验是写完后把n0和n1的情况手动测一遍避免低级失误。第四个坑是“业务题不写结论”。有些同学分析了一堆原因最后的建议却是“需要进一步分析”。在笔试里你最好给出一个明确的可执行动作比如“建议优先排查大促后流量回落的影响若确认流量下降则调整品类曝光策略”。即使你的结论不一定全对但数据分析师最重要的能力之一是“输入数据输出决策”含糊其辞是最扣分的。最后再提醒一个容易被忽略的点笔试前一定要提前熟悉答题系统。京东的笔试系统可能会有代码自动运行也可能只是文本输入。如果你不确定提前找一下往年真题的模拟环境避免在考场上因为不熟悉IDE而耽误时间。我当年就是在模拟系统里发现代码编辑器没有自动缩进提前适应了手动缩进考试时才没慌。好的准备不是死记硬背而是把每种题型都内化成自己的条件反射。等你看到“统计”“分析”就知道该往哪个方向想的时候笔试自然就稳了。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →