如果你准备过电商公司的数据岗招聘大概率绕不开“唯品会2018校招数据岗笔试题”这份材料。即便过去几年这套题在圈子里还是经常被拿出来当模拟题用——不是因为它难到变态而是因为它几乎把数据岗笔试要考的方向都覆盖了SQL取数、统计概率、机器学习基础、业务案例外加一点逻辑题。我当年参加校招时认真刷过这套题也帮学弟学妹们整理过解析。今天这篇就把我对这套题的拆解、答题思路和踩过的坑一次性说清楚希望正在准备数据岗笔试的同学能少走弯路。1. 项目概述唯品会数据岗笔试到底在考什么1.1 数据岗笔试定位不是纯编程也不是纯业务唯品会2018校招的数据岗其实不是一个单一岗位而是一个大类。信息发布时通常会分成业务数据分析师、数据工程师、策略运营分析师等方向但在笔试阶段往往共用一套试卷。这就导致试卷里既有需要动手写SQL的题也有偏业务分析的大题。它不像算法岗一样要求手推公式、现场写模型也不像纯后端开发那样考一堆网络协议和系统设计。它的核心目标是筛选两类能力一是你能不能从数据库里拿到数据二是你能不能把数据翻译成业务动作。这个定位从第一道题到最后一道题都能感受得到。我记得当时笔试大概是90分钟线上系统作答。题型是单选、多选、SQL编写、案例分析混在一起不是纯客观题也不会给你IDE。SQL题要在指定的文本框里直接写案例分析题要手打一段分析思路。这种形式意味着你不仅要会还要写清楚。很多人喜欢在本地编辑器里测试但笔试系统没有调试环境SQL只能靠脑跑。这个限制其实很关键因为平时写SQL靠explain跑错再改笔试现场没有这个条件所以对语法的准确性要求更高。另外唯品会做的是特卖电商库存周转、限时折扣、品牌合作这些业务特征非常明显。出题人在设计案例分析题时会倾向于把场景放在电商业务上比如“某品牌日大促流量上涨但GMV下降你怎么分析”。如果你对电商的核心指标没有概念这道题很容易写成一堆正确的废话。这也是很多理工科背景同学失分最多的地方——不是不会算数而是不知道业务上到底该看什么。1.2 题型分布与时间分配先看卷子再动手拿到笔试系统里的题目后建议先花两三分钟扫一遍全卷。不要看到第一道SQL题就开始埋头写结果到最后发现后面还有一道20分的案例分析题没时间写。根据我整理过的试题和周围同学的反馈2018年唯品会数据岗笔试各模块的题目占比大致如下板块大致占比建议用时SQL与数据处理30%25分钟概率统计20%15分钟机器学习基础20%15分钟业务案例分析20%25分钟逻辑题与开放题10%10分钟这个时间分配不是固定的但有一个原则先做有确定性答案的题再做开放性强的题。SQL和概率统计通常有明确答案属于稳定得分项机器学习里的选择题如果不确定容易在两个选项之间纠结半天反而浪费时间多数情况下差的不是能力而是“好像会”的干扰项。业务案例分析虽然没有标准答案但只要框架完整、逻辑自洽阅卷人就能给分所以放在中间或后面答都可以。逻辑题通常数量不多如果卡住可以先跳过千万不要因为一道怪题影响了后续状态。2. 核心考点拆解SQL与数据处理是得分基本盘2.1 高频SQL题看起来简单实际上全是坑SQL几乎是所有数据岗笔试的必考项唯品会这套题也不例外。它不会考太复杂的数据库原理更多是让你写查询。比较典型的一类题目是“给定用户订单表orders(user_id, order_date, order_amount)求每个用户的最近一次下单日期和对应金额。”这道题听起来简单但很多人第一反应是直接按user_id分组然后取max(order_date)。紧接着问题来了order_date拿到了但那一行对应的order_amount怎么拿如果直接用group byselect后面只能放分组字段和聚合函数不能直接把order_amount放进去。这时候就得用子查询或者窗口函数。先给一个用子查询的常规解法找到每个用户最近的订单日期再去原表里匹配。具体SQL可以写成这样SELECT user_id, order_date, order_amount FROM orders o WHERE o.order_date ( SELECT MAX(order_date) FROM orders WHERE user_id o.user_id );这个解法在逻辑上是通的但有一个隐藏问题如果同一个用户在同一个日期下了两笔订单这个SQL会把两行都查出来。如果你的题意是“最近一次订单”而不是“最近一天的全部订单”就需要再加一个条件来唯一确定一行比如按订单ID排序或者直接上窗口函数。很多同学在笔试环境里写第一版时不会踩到这个点因为他们脑子里想象的订单表足够干净、没有同日多单。但真实的电商订单表里一个用户一天多次下单非常正常。所以在写SQL之前先把数据模型里的重复性、时间粒度、空值情况都默认考虑一遍。这个习惯在笔试中的价值不只是解对一道题而是体现在面试官看你答题思路时会不会眼前一亮。2.2 留存率、复购率与窗口函数业务SQL的试金石除了基础查询唯品会笔试里更拉分的是业务指标计算。留存率和复购率是最常出现的一对组合。比如给你一张每日订单表让你计算每天的次日留存率。核心思路是把每个用户在某一天活跃的信息提取出来然后去匹配第二天是否也活跃。常见的坑是如果用户一天在订单表里出现多次直接join会导致数据膨胀所以先去重。WITH daily_user AS ( SELECT user_id, order_date FROM orders GROUP BY user_id, order_date ) SELECT a.order_date AS cur_date, COUNT(DISTINCT a.user_id) AS cur_users, COUNT(DISTINCT b.user_id) AS retained_users, COUNT(DISTINCT b.user_id) / COUNT(DISTINCT a.user_id) AS retention_rate FROM daily_user a LEFT JOIN daily_user b ON a.user_id b.user_id AND b.order_date DATE_ADD(a.order_date, INTERVAL 1 DAY) GROUP BY a.order_date;这条SQL用了一个简单的自连接核心是把“当天活跃用户”和“次日活跃用户”通过用户ID关联起来。这里需要注意两点。第一DATE_ADD的间隔和时区在不同数据库里可能有差异笔试题一般用MySQL语法如果写答案是Hive环境就改成date_add(a.order_date, 1)。第二被留存的那个b表禁止重复关联所以子查询里的GROUP BY user_id, order_date一定要写否则留存人数会被同一用户当天多笔订单放大。当年就有不少人把留存率算得超过100%问题几乎都出在这个地方。窗口函数也是那两年笔试的新宠唯品会这套题里出现过与排名相关的题目比如“求每个品类销售额排名前3的商品”。这类题用窗口函数可以很简洁SELECT category_id, product_id, sales_amt FROM ( SELECT category_id, product_id, sales_amt, ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY sales_amt DESC) AS rn FROM product_sales ) t WHERE rn 3;这里特别要区分三个容易混的函数ROW_NUMBER()、RANK()、DENSE_RANK()。ROW_NUMBER()不管有没有并列都会给一个连续且不重复的序号RANK()在有并列时会跳过序号比如两个并列第一下一个就是第三名DENSE_RANK()有并列时不会跳号下一个还是第二名。题目问“前3名”时需要判断包含并列是不是合理的如果要求严格取前三行用ROW_NUMBER如果要求取排名前三的所有商品用DENSE_RANK通常更合适。这个细节很多人在准备时不会注意但笔试里一个选择题就可能卡住。3. 概率统计与机器学习基础别被公式吓住3.1 概率统计高频考点贝叶斯、期望与假设检验概率统计在数据岗笔试中主要解决两个问题一是给一堆数字让你算概率或期望二是给一个业务场景考察AB测试的显著性判断。前者通常以选择题形式出现后者可能是一道简答题。2018年唯品会这套题里就有过类似于“某活动页面点击率为5%需要多少样本量才能判断改版后点击率是否显著提升”的题目。不一定要你算出精确的样本量但你必须说出假设检验的流程提出原假设和备择假设、选择显著性水平、计算p值、判断是否拒绝原假设。比较基础但容易翻车的知识点包括条件概率与贝叶斯公式。比如一道经典题“一个商品的购买转化率是5%其中来自男性用户的概率是60%现在随机抽到一个男性用户他购买该商品的概率是多少”如果你没有看到联合概率或独立性说明这个题是缺条件的。很多人凭直觉选了一个数其实是错误的。这类题考察的不是你会不会套公式而是你能不能识别概率条件是否充分。真正的数据岗工作里拿到手的数据往往也不是齐全的你需要先判断信息边界再决定能不能分析。期望和方差也是常客。比如“一个抽奖活动中奖概率为1%中奖可得100元参与费2元请问抽奖一次的平均收益是多少”做法是E0.01×100-0.99×21-1.98-0.98元。看起来简单但考场上经常有人忘记把参与费算进去或者算错概率的补集。这类题目没有技巧就是提高熟练度。建议把概率论教材里的经典题都过一遍尤其是放回和不放回抽样、独立事件和多阶段事件这些几乎每年都会换皮出现。3.2 机器学习基础题不手推公式但一定要懂“为什么”机器学习在数据岗笔试里的分量虽然不如算法岗重但基础概念肯定会涉及。更准确地说它考察的不是你能不能从零手写一个模型而是你有没有模型选型和评估的意识。比如给你一个“预测用户是否会在7天内复购”的二分类任务正负样本不均衡问你会用什么评估指标。很多学生脱口而出Accuracy这恰恰是陷阱。当负样本占到95%以上时全预测为负样本也能拿到95%的准确率但这在业务上没有任何价值。更合理的做法是用PR曲线、AUC或者通过采样、调整类别权重来缓解不均衡。逻辑回归和线性回归的区别也是一个高频问题。逻辑回归虽然名字里有回归但它做的是分类输出经过Sigmoid函数映射到(0,1)区间可以解释为属于某一类的概率线性回归直接预测连续值使用最小二乘拟合。两者在数据岗面试里的延伸问题往往是“逻辑回归为什么要用交叉熵而不是均方误差做损失函数”这个在笔试阶段可能不要求但如果能答出来面试官对你的印象会明显加分。过拟合相关的问题也经常出现常见问法包括“模型训练误差很低但测试误差很高怎么办”。这时候答案一般围绕正则化、交叉验证、增加数据量、降低模型复杂度、特征选择等几个方向展开。再举一个唯品会场景的例子如果要做一个“七天退货预测”模型正样本极少你会怎么处理思路是先定义清晰的标签窗口期再用过采样或SMOTE手段构造训练集同时考虑时间序列切分避免未来数据泄露。能把这些讲清楚即使笔试只出一道选择题面试阶段也会继续深挖。所以笔试阶段的机器学习不是背概念而是理解每个方法在什么场景下用、为什么用、会带来什么副作用。4. 业务场景与案例分析拉开差距的关键4.1 电商业务指标拆解从GMV到漏斗转化前面提到唯品会做特卖电商所以案例分析题通常建立在电商指标拆解上。最经典的框架是从GMV拆起GMV 流量 × 转化率 × 客单价 × 购买频次。其中流量还可以再拆成新用户和老用户、不同渠道来源、不同活动页面入口转化率可以拆成浏览→点击→加购→下单→支付这个漏斗客单价则和品牌定位、促销力度有关。拿到任何一道“某个指标波动”的题都可以先把公式列出来再逐项排查。举个例子笔试题里出现过类似问题“某品牌日大促当天整体流量比上周同期高了30%但GMV反而下降了10%请你分析原因。”如果只写“可能是转化率下降”会显得太单薄。一个合格的回答思路是先确认GMV下降的数据口径排除数据统计延迟然后把GMV拆成流量、转化率、客单价、购买频次发现流量上涨但GMV下降重点怀疑转化率或客单价接下来按渠道、用户分层、商品品类三个维度做下钻看看是哪个渠道流量质量差还是因为主推商品价格带偏低导致客单价下降又或者是新用户占比太高、缺乏购买信任导致转化不足最后结合数据结论给出下一步动作比如调整流量分配策略、优化品牌日主推品组合、对高意向用户人群加大召回。这种题没有唯一答案但阅卷人能从你的回答里看出有没有业务sense。所谓业务sense不是你背过多少术语而是你面对一个模糊问题时能不能快速拆解成可分析、可验证的子问题。一个很实用的训练方法是平时看任何一家电商的周报或月报都要问自己“如果这个数字涨了或跌了我下一步查什么”。长期积累下来你在笔试里看到业务题时第一反应就不会是慌乱而是条件反射般地列出拆解路径。4.2 业务分析题答题框架假设驱动加数据验证案例分析题里还有一类更开放的题目不给你具体指标而是抛一个现象“某品类近两周销量持续下滑你会如何分析。”这种题的解题框架可以固定下来明确业务目标、定义核心指标、多维度拆解、提出假设、验证假设、给出建议。我习惯叫它“六步法”。第一步先明确品类销量下滑说的是哪一段时间的对比是同环比还是连续下滑第二步把销量拆成新客购买和老客复购分别看是哪一类在跌第三步按渠道、区域、价格带、竞品活动等维度做交叉分析第四步根据拆解结果提出两三个主要假设第五步用数据去验证比如看用户流失是不是因为库存不足、价格优势下降或竞品截流第六步输出行动建议例如调整商品供给、增加复购券、加强流失人群召回。在笔试答题框里最关键的是把框架写清楚。不要只写结论至少要把“我需要哪些数据”列出来。比如“我需要订单表、流量表、用户标签表、竞品价格信息”这本身就是在展示你理解这个问题需要哪些信息。面试官看到这种答案通常会觉得你是有分析经验的人哪怕某些结论不完整也不会扣太多分。这里还要提醒一下案例题不要堆砌名词。有些人为了展示水平会把RFM模型、用户生命周期价值、漏斗分析、A/B测试全写上去但问题和这些概念不匹配。写分析思路时每一步都要有因果关系因为看到什么所以怀疑什么所以决定去查什么。思路清晰的人即使没有深入的数据也能让阅卷人感到你是有章法的。5. 笔试实战经验与避坑指南5.1 实战策略做题顺序比熬夜刷题更重要准备数据岗笔试很多人只关注刷题量忽略了考场上的策略问题。我总结过几轮笔试经验最重要的一条是拿到试卷不要顺序答题先做自己最稳的题型。比如你SQL写得很熟那就先花20分钟把SQL题全部干掉这样心里有底如果你统计题目容易纠结就把它放在最后避免在一道题上消耗太多时间。2018年唯品会这套题后面还有案例分析大题预留时间至少20分钟以上否则即使前面答得再好最后一道20分的大题空着总分也很难看。遇到不会做的SQL题千万不要空着写一部分能跑的代码也好。很多笔试系统按点给分只要你写出了正确的思路关键词比如用到了LEFT JOIN、窗口函数、去重阅卷人可能会给步骤分。案例分析题更是如此写一段结构化分析过程的分值通常比一句话结论高得多。这个规则不一定写在试卷上但在人工阅卷的体系里非常真实。我自己有一次模拟答题时案例分析只写了结论没写过程后来对照打分标准才发现结论只占很小一部分分。5.2 容易丢分的细节清单考前再看一遍结合唯品会这次笔试和同类校招笔试我整理了一份高频失分点考前可以拿来自检。类型易错点建议SQL同一天多次下单导致数据膨胀先GROUP BY user_id, order_date去重SQL使用GROUP BY时select非聚合字段报错改用子查询或窗口函数统计混淆总体方差与样本方差注意分母是n还是n-1统计计算条件概率时忽略事件独立性先画概率树或列出已知条件机器学习样本不平衡时只看Accuracy使用PR曲线、AUC、F1机器学习混淆分类和回归的评估指标明确问题是二分类还是回归业务只写结论不写分析过程和下一步动作用“拆解-假设-验证-建议”框架业务宏观名词堆砌不结合案例数据每个点都要落到具体指标和表格字段我之前帮别人模拟答题时发现很多人在SQL里写COUNT(user_id)来统计人数一旦user_id出现NULL就会漏算正确写法是COUNT(DISTINCT user_id)。这种问题看似低级但在紧张状态下很容易被忽略。建议平时练习时就养成习惯涉及去重统计一律写COUNT(DISTINCT 字段)不要简写成COUNT(字段)。另外几乎所有数据岗笔试都会涉及时间。一定要看清楚题目里给的时间字段是DATE还是DATETIME。如果订单时间是DATETIME直接按日期进行GROUP BY时可能需要先转成DATE否则同一个自然日的数据会被拆成多个时间点导致留存率算错。这类细节不需要多高深的技术但决定了你能不能拿全分数。6. 考后复盘与长期备考建议6.1 从一套笔试题延伸出的知识体系如果你只是把唯品会2018校招数据岗笔试题做一遍对一对答案那效果有限。更好的做法是做完整套卷子后把题目背后对应的知识点整理成一张地图。SQL部分对应的是取数和数据清洗能力统计和机器学习部分对应的是量化分析能力业务案例分析对应的是业务理解能力。这三块正好对应数据岗日常工作的全链路拿数据、做分析、给建议。你在校招笔试里训练的逻辑在入职后写周报、做专题分析时依然适用。我见过不少候选人笔试前把SQL刷得很熟但案例题写得很空。原因是他没有把技术能力和业务场景结合起来。其实数据岗笔试的案例题就是一个小型项目你可以用处理真实项目的方式去应对先理解问题再拆解再找数据再输出结论。这种思路越早培养面试和实习期的上手速度都会快很多。我建议在备考后期把每一套真题的错题都按“知识点业务场景”双标签归类考前只看这个错题本比反复刷题更高效。6.2 最后一点个人经验这套题让我印象最深的不是哪道题特别难而是它提醒了我数据岗笔试的筛选逻辑本质上是在找“能把模糊问题变清晰”的人。你不需要背下所有算法公式但你需要具备把大问题拆成小问题、再逐个验证的能力。这个能力刷题能刷出来一部分更多来自日常对业务的好奇心和动手习惯。如果你现在正在准备新一年的校招不用被一份几年前的笔试题吓到。把SQL常见题型、统计基础、机器学习常用评估方式、业务分析框架这四块吃透再找几套同类电商公司的笔试题目练手效果会很好。我个人踩过的坑是前期一直刷高难算法反而忽略了对业务指标的理解后来发现数据岗笔试里拉分的往往是那些看起来不“酷”的业务题。希望这篇复盘能让你少走一些弯路。