唯品会2018校招数据岗笔试题复盘:从题型到思路,一次讲透
每年秋招,电商平台的数据岗笔试题都是求职者绕不开的关卡。我当年投唯品会数据岗时,拿到卷子的第一反应是:题量适中、方向明确,但每道题都暗藏业务逻辑。和纯考“技术记忆”的题不一样,唯品会这套题明显在筛选“能用数据解决业务问题”的人。这篇文章就把我对这套题的复盘和拆解完整写出来,给正在准备电商数据岗位笔试的读者做个参考。
这套题覆盖了SQL技能、概率统计、业务分析、算法基础四个方向,整体难度在互联网校招数据岗中属于中等偏上。适合正在准备秋招的数据科学、商业分析、数据分析类求职者,也适合刚入职的数据新人用来自测基本功。我会结合自己的答题过程、后续工作中对这些知识点的验证,逐类拆解题型背后的考察意图和解题思路。
1. 唯品会数据岗笔试的整体画像:题型结构与考察逻辑
1.1 这套题到底在考什么
先说最直观的感受。拿到试卷大概翻了五分钟,我心里就有一个判断:这不是一套“背多分”的题,每一道题都能在真实电商业务里找到对应场景。考察维度大致可以分成四块。
第一块是SQL题,这是数据岗的看家本领。唯品会作为品牌特卖平台,订单、用户、商品、活动数据都是典型的关系型数据。笔试里给的表结构基本就是真实业务表的简化版。第二块是概率统计题,这部分考察的不是纯粹数学公式的记忆,而是和业务决策挂钩的思维。比如有一道题给出某活动的点击率和转化率,让你判断某个渠道的投放效果是否显著,这其实就是工作中每天都要做的假设检验。第三块是业务案例题,比如用户分层、促销活动效果评估,这道题的场景直接掏自唯品会的核心业务。第四块是机器学习基础,考了特征处理和模型评估的选择。
这四块的比重和典型题型,我整理成了一张表。
| 考察模块 | 题量占比 | 典型题型 | 对应业务场景 |
|---|---|---|---|
| SQL题 | 约30% | 留存率计算、复购率统计、订单明细查询 | 日常数据取数与指标监控 |
| 概率统计 | 约25% | 条件概率、贝叶斯、期望收益、显著性检验 | 活动效果评估、渠道质量判断 |
| 业务分析 | 约30% | 用户分群、促销评估、漏斗分析 | 核心电商业务分析需求 |
| 算法基础 | 约15% | 特征筛选、模型评估指标选择 | 用户画像、推荐系统优化 |
1.2 从题目设计反推岗位能力要求
很多人觉得笔试就是知识点的堆砌,其实不然。企业出题,尤其是校招数据岗,本质是想快速筛出“来了就能干活”的人。唯品会这套题最让我印象深刻的是,它几乎没有纯理论题,每道题都给了一个业务场景做外壳。
这背后透露出数据岗的真实能力要求:第一是数据提取能力,指标定义得再清楚,拿不到准确的数据就是空谈;第二是量化分析能力,能把业务问题抽象成数学问题,再算出可量化的结论;第三是业务理解能力,尤其像唯品会这样的特卖电商,活动节奏密、品牌多、用户生命周期短,数据分析师必须快速理解业务方的真实需求;第四是模型应用能力,不一定要求你从零实现一个算法,但要知道什么场景该用什么模型,以及如何评估模型的效果。
了解这一点之后,你对笔试的复习方向会更清晰:做SQL题别只追求写对,想一想这个指标是给谁看的;算概率题别只套公式,想一想这个数字能支撑什么决策。有了这个视角,再来看具体题型就更有感觉了。
2. SQL实战题:电商数据岗的看家本领
2.1 从取数思维到业务洞察:一道典型SQL题拆解
SQL题是这套卷子的重头戏。我记得有一道题是:给定订单表orders和用户表users,计算每个品类的复购用户数。表结构大概是这样的:
-- 用户表:users -- user_id, sex, age, register_date -- 订单表:orders -- order_id, user_id, item_id, category_id, pay_time, amount这道题表面上是考SQL语法,实际上考的是你如何定义“复购用户”。我当时在答题纸上写了比较稳妥的解法:先找出每个用户在每个品类下的下单次数,再筛选下单次数大于等于2的用户,最后按品类汇总用户数。
SELECT category_id, COUNT(DISTINCT user_id) AS repurchase_user_cnt FROM ( SELECT category_id, user_id, COUNT(*) AS order_cnt FROM orders WHERE pay_time IS NOT NULL GROUP BY category_id, user_id HAVING COUNT(*) >= 2 ) t GROUP BY category_id这道题真正的分水岭在于:你有没有考虑订单状态。真实的电商订单表里会有“已支付”“未支付”“已退款”“已取消”多种状态。如果没有做pay_time或者订单状态的过滤,算出来的复购数会有明显虚高。我后来和几个一起面试的同学交流过,不少人在这里就丢了分。
另一个值得注意的点是“复购”的时间窗口。如果业务方的定义是“30天内再次购买”,那就需要加入时间窗口的过滤条件。笔试题没明说时,可以在答题纸上补充说明你对“复购”的定义,并给出带有参数定义的SQL。这种“主动定义口径”的意识,恰恰是面试官眼中区分数据工程师和分析师的关键。
2.2 窗口函数与留存率计算:“看似会做、实际拿不满分”的题
还有一道SQL题要求计算某月的用户留存情况,准确描述是:“计算2023年5月新注册用户在6月、7月、8月的留存率。”这道题当年难倒了不少人,因为它考到了窗口函数和回刷数据的处理。
第一版解法里,很多同学上来就用GROUP BY粗暴分组,在做留存时确实容易卡住。正确的做法是先定义一个“首购/注册时间”的标签,然后拉出每个用户在每个月的活跃记录,再用时间差或月份差判断留存状态。我当时的思路是这样分层写的:
WITH user_base AS ( SELECT user_id, MIN(pay_time) AS first_pay_time FROM orders WHERE pay_time >= '2023-05-01' AND pay_time < '2023-06-01' GROUP BY user_id ), user_active AS ( SELECT user_id, DATE_FORMAT(pay_time, '%Y-%m') AS active_month FROM orders WHERE pay_time >= '2023-05-01' AND pay_time < '2023-09-01' GROUP BY user_id, DATE_FORMAT(pay_time, '%Y-%m') ) SELECT ua.active_month, COUNT(DISTINCT ua.user_id) / COUNT(DISTINCT ub.user_id) AS retention_rate FROM user_base ub LEFT JOIN user_active ua ON ub.user_id = ua.user_id GROUP BY ua.active_month这个解法的关键点有几个。第一是用户基群要固定,只能用5月的新客,不能用后来补录的数据刷新这个集合;第二是活跃月的数据用LEFT JOIN保留,避免新用户没有后续活跃而被直接过滤掉;第三是分母保持恒定,这样才能让各月留存率之间有可比性。
这类SQL题的坑不在语法,而在数据口径。比如用户在某个月下单了但后来退款,这笔订单算不算活跃,直接影响留存结果。笔试题里往往不会把这些口径说得很明确,你需要在答案里补充假设,并和面试官说明“如果需要,我可以调整where条件来适配具体的业务定义”。这种表达不仅展示你的技术能力,更展示你的业务意识。
2.3 笔试之后我才悟到的SQL能力边界
现在回头看这套SQL题,我有个特别强烈的感受:笔试考察的SQL能力和工作中实际使用的SQL能力,差距体现在两个地方。
第一个差距是“取数的准确性”还是“口径的合理性”。笔试答案只要逻辑正确就能得分,但实际工作中,你写出来的每一个指标都要经得住业务方的挑战。你在唯品会做用户运营分析,业务方问你“这个复购率为什么比上个季度高了2个百分点”,你不仅要能写SQL,还要能快速想到“是不是新用户占比提高了”“是不是大促活动影响了购买周期”。这些思考方式,做题的时候就要开始有意识地训练。
第二个差距是“单表查询”和“多表复杂查询”的熟练度。笔试里的SQL题虽然也有多表连接,但数据量小,跑得快。实际业务中,动辄千万级的数据表,如果不注意索引、分区、查询效率,一个看似正确的SQL可能跑几十分钟都出不来结果。我建议求职者在准备笔试SQL时,不要只刷LeetCode上的数据库题,也可以多写一写涉及窗口函数、多级嵌套、CASE WHEN逻辑组合的复杂查询,提前适应真实数据场景。
3. 概率统计题:数据岗基本功的硬核检验
3.1 条件概率与贝叶斯:一道让人翻车的经典题
概率统计模块有一道题让我印象非常深,原题大概是:“某商品页面的点击率为10%,点击后下单的概率为5%,未点击但直接下单的概率为2%。现在有一位用户产生了订单,请问他点击过商品页面的概率是多少?”
这道题本质上是贝叶斯公式的典型应用。设事件C表示“用户点击了商品页面”,事件O表示“用户产生了订单”。已知P(C)=0.10,P(O|C)=0.05,P(O|¬C)=0.02。要求的是P(C|O)。根据贝叶斯公式:
P(C|O) = P(O|C) × P(C) / [P(O|C) × P(C) + P(O|¬C) × P(¬C)]
代入计算: P(C|O) = 0.05 × 0.10 / (0.05 × 0.10 + 0.02 × 0.90) = 0.005 / (0.005 + 0.018) = 0.005 / 0.023 ≈ 0.2174
答案是约21.74%。很多同学一眼看到“点击率10%,点击后下单概率5%”,容易直接答“50%”,这就是混淆了条件概率的方向。贝叶斯公式的核心在于,你要结合“先验概率”和“似然概率”来推断“后验概率”,而不是直接拿条件概率当结论。
这道题放在电商场景里非常实用。数据运营经常要根据用户的行为轨迹判断其购买意图,比如一位用户浏览了某个品牌专场但还没下单,系统要估算他最终下单的概率有多大,就需要类似贝叶斯推断的逻辑。理解了这一点,你就不只是在做题,而是在理解用户行为预测的核心思路。
3.2 期望值与业务决策:从概率题看产品思维
还有一道期望值的题目,大概描述是:“某平台准备对用户发放一张满200减50的优惠券,已知每个用户领取优惠券的概率为40%,领取后使用优惠券的概率为30%。假设符合条件用户的平均客单价为300元,平台毛利率为20%,请问每发放一张优惠券,平台的期望收益是多少?”
这道题要拆成两步来做。第一步,计算优惠券实际被使用的概率是0.4 × 0.3 = 0.12。第二步,计算使用优惠券之后对平台利润的影响。不使用优惠券时,平台从该用户身上获得的毛利是300 × 20% = 60元。使用优惠券后,用户需要支付的金额是250元,平台收入减少50元,但前提是用户因为优惠券而产生了原本不会产生的订单。
这里有一个隐含的业务概念叫“增量成交”。如果用户不管有没有券都会买,那这张券对平台来说只是利润损失;如果用户是因为有券才买,那这张券带来了新的利润。题目里没有直接给出这个参数,但我们可以算两种极端情况下的期望:如果所有用券订单都是增量订单,平台的期望收益是0.12 × (250 × 20%) + 0.88 × 0 = 6元;如果所有用券订单都是存量订单,平台的期望收益是0.12 × (60 - 50) + 0.88 × 60 = 54元。
现实情况介于两者之间。这个话题继续深挖,就变成了C端电商常见的“优惠券ROI测算”,你需要靠A/B测试来估计增量率。笔试时能把这道题算到“要考虑增量订单”这个层面,就已经比大多数只按固定公式算期望的同学高出一个段位了。这样答题,既展示了数学能力,也展示了商业思维。
3.3 假设检验与置信区间:一道判断投放效果差异的题
印象里还有一道统计推断的题,问的是:“某活动页面的点击率在改版前后各统计了10000次曝光,改版前点击率为5%,改版后点击率为5.5%,请问改版是否有显著提升?”
这道题表面上是让你做假设检验,实际上考察的是样本量、效果大小和显著性之间的折中关系。两个独立比例的z检验可以直接套用公式,但更重要的是理解:样本量足够大时,即使是微小的差异也可能统计显著,但业务上未必有实际意义。我当时在答案里除了写出z值和p值的计算,还补充了一个观点:如果5%到5.5%的提升能带来百万级用户的增长,那这个提升就是有意义的;如果只是千级别的小流量实验,那这个差异的置信区间会非常宽,需要谨慎判断。
这个“统计显著性≠业务显著性”的意识,是我在后续工作中体会最深的。笔试里把它体现出来,容易给面试官留下深刻印象。
4. 业务案例分析:电商数据岗的“行业壁垒”
4.1 用户分层与RFM模型在唯品会场景的落地
这道题的场景非常唯品会:平台有大量品牌折扣商品,用户购买频次高、单价差异大,如何对用户进行分层,以便做差异化的运营触达。我看到这道题的第一反应是RFM模型,即按最近一次购买时间(Recency)、购买频次(Frequency)、购买金额(Monetary)三个维度给用户打分。
但如果你只是把RFM的公式默写上,分值不会高。你要结合特卖电商的特点去做调整。比如唯品会的用户购买行为有明显的“活动驱动”特征,大促期间的订单和日常订单的金额、品类差异很大,如果直接用全量历史数据做RFM,就分不清“大促型用户”和“日常型用户”。更好的做法是把大促订单和日常订单分开建模,或者用“大促参与度”作为一个额外维度纳入分层体系。
我当时还提出了一个具体可落地的分层方案:将用户按RFM得分划分成八类,重点运营“重要价值用户”和“重要发展用户”,对“一般挽留用户”做定向唤醒。这不是新知识,但能体现出“我理解这个模型怎么用”,而不是“我背过这个模型”。
4.2 促销活动效果评估:对比组的选取思路
业务案例里还有一道和促销评估相关的题,大致问法是:“某品牌在平台做了一场限时折扣活动,活动期间该品牌销售额大幅提升,如何判断这场活动是否真正有效?”
这其实是一道经典的增长分析题,考察的是“增量”思维。销售额提升可能来自三个部分:品牌既有用户的自然购买、活动吸引的新用户、以及原本会买但推迟到活动期购买的“透支”用户。所以评估活动效果时不能只看活动期的GMV,还要对比活动前后的销售走势,以及和未参加活动的类似品牌做对照组比较。
我当时在答题时画了一条“活动前后GMV趋势线”的思路,并提出了一个最简单的对照组方案:找一个品类相似、客单价相似但未参加活动的品牌,在相同时间段内做销售趋势对比,计算活动品牌的“相对增量”。如果笔试时间允许,可以用双重差分法(DID)来做更严谨的因果推断。这种从“归因逻辑”入手的分析方式,是我后来做营销效果评估时一直沿用的核心方法论。
4.3 A/B测试:样本量计算与显著性判断的实战注意点
这道题把A/B测试放在一个实际业务场景里:“平台上线了新的推荐算法,需要评估是否全量上线,试设计实验方案。”这类题考察的不只是统计知识,还包括实验流程的完整性和业务边界的把握。
我的答题框架分几步:第一,明确实验的目标指标,比如人均点击量、人均GMV,以及护栏指标(杀体验指标,比如退款率、投诉率);第二,计算所需样本量,这需要设定显著性水平α=0.05、统计功效1-β=0.8,并预估实验组和对照组指标差异的大小;第三,设计分流策略,保证用户维度分流、且实验组和对照组用户特征分布一致;第四,设定实验周期,要覆盖完整的消费周期,避免只测一个周末带来的偏差;第五,分析结果时不仅要看p值,还要看置信区间和实际业务收益。
这里有一个容易被忽略的细节:样本量估算。简单比例类指标的样本量公式是 n = (Zα/2 + Zβ)² × (p1(1-p1) + p2(1-p2)) / (p1 - p2)²,如果你在笔试时记得这个公式,并代入题目假定的点击率数据算出一个具体数值,会明显拉开和其他人的差距。
5. 算法与机器学习基础:数据岗笔试的次重点
5.1 特征工程:从一道特征筛选题说起
机器学习这部分题量不大,但有一道特征筛选的题很典型。题目给了一个用户购买预测的二分类任务,包含年龄、性别、历史购买金额、最近一次购买距今天数、用户注册时长、商品页停留时长等特征。问你会如何选择和使用这些特征。
这道题考察点在于特征工程的完整度。第一,要区分连续特征和类别特征,年龄、金额这类连续特征可以考虑分箱或标准化;性别属于类别特征,需要做编码处理;第二,要检查特征之间的相关性,比如“历史购买金额”和“用户注册时长”可能存在相关性,共线性会影响模型稳定性;第三,要考虑特征的时间有效性,比如“最近一次购买距今天数”是动态特征,随着时间推移有意义,而“用户注册时长”相对静态,两者要合理配合使用。
我当时补充了一个建议:可以用基于树的模型做特征重要性排序,再结合业务认知筛选特征。这不是唯一答案,但能说明你有“业务+算法”的双重视角。
5.2 评估指标选择:AUC、F1还是准确率
还有一道题是:“信用卡欺诈检测场景中,正样本只占1%,你会选择什么指标评估模型?”这道题我是实际经历过的,准确率在这类不平衡数据上会失真,因为全部预测为负样本也能达到99%的准确率。更好的选择是F1分数、AUC、召回率等对少数类敏感的指标。在欺诈检测场景里,通常优先关注召回率,因为漏掉一个欺诈交易的成本远高于多拦截一个正常交易。
接着我又引申到业务成本的权衡。如果欺诈拦截会导致正常用户被误伤,你可能需要在召回率和精确率之间找一个平衡点,这可以引入业务成本矩阵来定。笔试中把这个层面的思考写进去,会显得有深度。
5.3 这一部分真正想考察的能力
算法题在数据岗笔试里的占比往往不高,但它的存在意义不是让你拿高分,而是测试你是否有基本的机器学习素养。就算你投的是偏业务的数据分析岗,也需要了解特征工程和模型评估的基本概念,因为你日常合作的数据科学家或者算法工程师,会和你说着共同的语言。这套笔试的算法题,考得就是“常识级别”的机器学习能力,只要系统学过一段时间机器学习,不至于拿不到分。
6. 答题策略与备考复盘:从笔试题到入职准备
6.1 时间分配与答题顺序的实战经验
整个笔试的答题时间我记得是90分钟,题量对于多数人来说是够的。但我的一个朋友就没答完,原因是他在SQL题的优化解法上纠结了太久。这一点我特别想强调:笔试里能写对,比写得“最优”重要得多。哪怕你的SQL写法是三层嵌套,只要逻辑清晰、能跑通,得分和窗口函数一步到位的写法不会有本质差别。
我自己的策略是:先做SQL题里那些逻辑最直接的,再做概率统计题的公式推导,然后留充足的时间给业务案例题。业务案例题是主观题,没有标准答案,但分值高,且面试官能从你的答案里看到你的思维过程,这比做对一道选择填空题更重要。时间分配上可以参考:SQL题35分钟,概率统计25分钟,业务分析25分钟,算法基础5分钟,最后留10分钟回头检查。
6.2 我踩过的坑与复盘总结
复盘这套笔试,我有几个特别深刻的教训。
第一个坑是“过度追求SQL的优雅解法”。当时有一道题可以用窗口函数一步搞定,我却在下面写了一大堆子查询,花了过多时间去验证逻辑。事实证明,只要答案正确,子查询并不会扣分,但时间就白白耗掉了。后来我总结了一条经验:笔试答题先求正确,再求优雅。
第二个坑是“业务题答得太空”。我在业务案例题的第一版答案里写了大量“建立指标体系”“完善数据监控”这类虚词,后来意识到这是最容易给阅卷人“减分”的操作。业务题要落到具体可执行的动作上。同样是分析用户流失,说“用最近一次活跃时间和活跃频次定义流失用户,然后按渠道、商品偏好分群对比流失率”就比“加强用户挽留”具体得多。
第三个坑是“忽略题意中的时间口径”。概率统计题里有一道关于留存率的题,我没有仔细看“新注册用户”和“首单用户”的区别,差点答偏。后来养成了一个习惯,拿到题先圈出时间条件、用户范围和指标定义,再动笔。
6.3 基于这套题,数据岗求职者应该怎么准备
结合这套唯品会笔试题的复盘,我想给正在准备数据岗校招的读者几条更具操作性的建议。
第一条是打好SQL基本功,但不要停在“能写出来”的层次。去找一些真实的业务场景,比如订单表、用户表、商品表,模拟真实的取数需求,练习留存率、复购率、漏斗转化、用户分层这些高频指标的SQL写法。我会建议你用一份公开的电商数据集来练手,不要把时间都花在看题解上,亲自写出来的才是你的。
第二条是概率统计题要结合业务场景去做。单独做概率题很容易,但要反复思考“这个数字在业务里意味着什么”。比如算完点击率提升的显著性后,想一想样本量多大才能让这个差异显著,成本是多少。这种思维方式的训练,远比多背几个公式有价值。
第三条是业务分析题要建立“框架性思维”。多读一些电商、零售行业的数据分析案例,了解常用的分析框架,比如漏斗模型、RFM用户分层、A/B测试流程。做题时以这些框架为基础,再补充场景化的细节,答案的完整度和说服力会超出平均水平。
第四条是算法基础不要忽视。虽然占比不高,但一道简单的特征工程题或评估指标选择题,就能反映出你有没有系统的机器学习认知。如果面试岗位偏数据产品经理或商业分析师,至少要把“精确率、召回率、AUC、过拟合、交叉验证”这些概念搞清楚,并知道什么业务场景下优先选择哪个指标。
就我个人而言,这套笔试题给我最大的启发并不是某个具体知识点,而是它让我提前认识到数据岗的日常是什么样子。你每天面对的不是抽象的算法题,而是一个个鲜活的业务问题:这个活动的流量质量怎么样,用户为什么流失,优惠券的ROI到底怎么算,推荐策略改版之后有没有带来真实增量。笔试只是入场券,真正考验人的是入职之后对问题的拆解能力、对数据的敏感度以及与业务方沟通的耐心。不过这些能力,确实可以从准备笔试的这一刻就开始有意识地积累。