唯品会校招笔试B卷详解:机器学习考点与电商场景题全解析

发布时间:2026/8/29 16:02:48
唯品会校招笔试B卷详解:机器学习考点与电商场景题全解析 拿这套B卷的时候我第一反应是怎么一股“业务味”这么浓选择题里大量选项都往电商场景上靠算法题也不是那种纯LeetCode模板题反而像在替你提前模拟入职之后的日常。很多人复习校招笔试有个误区觉得机器学习方向就是把西瓜书背熟、把LeetCode刷完就稳了。但你要是见过唯品会这类电商公司的题就会发现他们真正想筛的不是“你会不会调包、背结论”而是你对模型原理的理解深度、对业务约束的敏感度以及在一个半小时里拆解问题的能力。这篇文章不是押题而是借这份流传出来的B卷把背后的考点和复习逻辑彻底讲透。我会按“卷面整体风格、机器学习基础题考点、算法与数据结构真题复盘、电商业务场景题、开放性设计题、复习节奏”六块展开。无论你是马上要参加校招还是正在准备明年春招按这套思路去准备至少不会在笔试场上被问到怀疑人生。1. 拿到B卷先看整体这套题在考“能上手”而不是“背过了”1.1 从卷面结构看唯品会想要什么样的候选人从笔试圈的反馈和我整理过的历年面经来看这套B卷的题型分布基本可以用三块概括机器学习/统计基础约占一半算法与数据结构推导和手写约占三成剩下两成是业务场景与开放性设计题。前一半的机器学习题看起来都是“熟面孔”偏差方差、正则化、模型评估、聚类、朴素贝叶斯、逻辑回归、SVM、特征选择这一类。但妙就妙在很多题不是直接问“L1和L2的区别是什么”而是包装成“训练集AUC很高但线上点击率反而下降以下哪个原因最可能”这种形式。换句话说考点还是那个考点但出题人假设你已经知道结论想看你能否在真实业务里识别出对应的问题。后一半的算法题据经历过笔试的同学反馈KMP、排序、最短路、动态规划、贪心都有可能出现而且往往要求手推复杂度或者手写核心代码。这部分和纯互联网大厂的风格差异不大关键是速度和准确率。至于开放题比如“如何设计流失预警系统”或者“怎么预测大促期间的销量”这类题目没有标准答案但也最容易拉开差距。后面我会专门讲这部分的答题框架。1.2 为什么说这套题“看似基础实则挖坑”这套B卷最大的迷惑性在于你猛一看觉得每题都见过再仔细一想发现每个选项都像是“半对半错”。举个例子考过拟合的题里干扰项经常会写“随机森林对噪声完全不敏感所以不会过拟合”或者“增加训练数据一定可以缓解过拟合”。懂行的人一看就知道随机森林只是通过多棵树平均来降低方差噪声大时照样过拟合增加训练数据也“不一定”有效如果你的模型复杂度不够数据再多也白搭。笔试里很多人就是栽在这种“看着眼熟、没深想”的选项上。还有一类坑是概念混淆。比如“偏差”和“方差”这对概念很多人背了“高偏差欠拟合、高方差过拟合”但题目换个问法比如“训练误差很低但验证误差很高说明什么”就开始犹豫。所以在复习时不仅要知道结论还要能把结论倒推回具体的训练现象。另外算法题里KMP这类字符串题特别考验细节。不同教材对next数组的定义不完全一样有的叫“最长相等前后缀长度”有的直接定义为“失配时跳转位置”。如果你平时只看一种写法考试时遇到另一种定义可能整套题从头错到尾。这种“定义坑”我在后面会专门拆开讲。2. 机器学习基础题不要只背结论面试官喜欢问推导2.1 偏差-方差这类题怎么拿满偏差方差分解几乎是校招必考公式本身不复杂泛化误差 偏差² 方差 噪声直觉上可以这样理解偏差是高矮问题——你瞄得准不准平均落点偏不偏方差是散布问题——你每次射出去的弹着点分散程度。一个模型如果偏差大说明它欠拟合连训练集都没学好如果方差大说明它过拟合训练集学得太好换一组数据就崩。笔试里常考的是让你判断“某一现象属于高偏差还是高方差”这有几个实用判断规则训练误差高、验证误差也高高偏差典型的欠拟合。对策是增加模型复杂度、加特征、减少正则化。训练误差低、验证误差高高方差典型的过拟合。对策是加正则化、增加训练数据、降低模型复杂度、做特征筛选。训练误差和验证误差都低但两者差距大说明模型方差偏大但整体尚可重点观察泛化能力。注意一点笔试里经常把“增加训练数据”当成万能答案。这本身没错但它只能缓解高方差对高偏差几乎无效。答题时一定要先判断偏差还是方差再对症下药。2.2 正则化“为什么L1稀疏、L2平滑”的几何直觉L1和L2正则化的区别是另一道高频题。很多人背结论L1产生稀疏解、可以做特征选择L2把系数压得比较小但不会变成0。但笔试如果追问“为什么”光背结论就不够了。从几何上理解最直观。不加正则时最优解是损失函数等值线和参数空间的某个交点。加了L1之后约束区域是一个菱形二维情况它的顶点在坐标轴上。损失函数等值线在向外扩张过程中很容易先碰到菱形的顶点这个顶点的某个坐标为0于是对应特征就被“干掉”了。L2的约束区域是圆形边界处处光滑解不太会落在坐标轴上所以它只是把系数整体往小压但很难压到正好为0。还有一个常考角度是“L2为什么能防过拟合”。系数变小意味着每个特征的贡献被稀释模型输出对单个特征的变化不那么敏感相当于变相降低了模型的复杂度。笔试里如果让你口头回答可以这样组织L1正则化通过稀疏化实现特征选择L2正则化通过限制系数范数来降低模型复杂度两者都能缓解过拟合但机制和副作用不同。2.3 类别不平衡与评估指标选错指标就白建模电商场景里的机器学习题十有八九绕不开类别不平衡。唯品会这种平台用户点击率、购买转化率、流失比例正样本比例经常低到1%以下。这时候用准确率评估就是典型的“垃圾指标”——你只要把所有用户都预测成“不购买”准确率也能到99%但模型毫无价值。笔试里会问“这种场景应该看什么指标”标准答案是AUC和PR曲线但很多人忽略了这两者的适用差异正负样本比例极度失衡且你更关心正样本找得全不全时PR曲线比AUC更敏感。AUC更关心排序能力对整体正负样本顺序敏感适合CTR预估这类排序场景。在风控、流失预警这类“正样本极少但每找对一个都值钱”的业务里PR曲线的提升更能反映模型实际价值。再往下挖常用的处理手段也要能说出来过采样SMOTE、欠采样、调整类别权重、用AUC/PR/召回率等指标代替准确率、做代价敏感学习。如果笔试里出现“正样本0.1%现在用LR做分类你怎么评估”这种题先讲指标选择再讲数据处理基本上就能拿住大部分分数。2.4 聚类、K-Means初始化和模型融合高频考点聚类算法里最常考的是K-Means的两个痛点K值怎么选、初始中心怎么定。K值盲目用肘部法则有时候不靠谱因为“肘部”不明显时很难判断更稳妥的做法是结合轮廓系数、业务可解释性和下游任务需求。初始中心如果随机选很容易陷入局部最优K-Means通过“距离越远的点越容易被选为新中心”来缓解这个问题。模型融合也是笔试热点重点区分Bagging和BoostingBagging如随机森林并行训练多个独立模型平均后降低方差适合高方差模型。Boosting如GBDT、XGBoost串行训练每个新模型重点拟合前面模型的残差降低偏差适合高偏差模型。还有个容易被忽略的补充考点粒子群算法PSO。它不依赖梯度适合特征选择、超参搜索这类离散或非光滑问题迭代公式也很简单每个粒子根据个体最优和全局最优更新速度再更新位置。笔试可能不会让你完整推导但要能说出“它和梯度下降的本质区别是什么”“什么时候用元启发式而不是梯度下降”这类问题。3. 算法与数据结构真题复盘手算、手写、别翻书3.1 KMP的next数组最容易栽的“定义坑”字符串匹配是笔试常客KMP更是因为“理解难度适中但极易出细节错”而备受出题人喜欢。网上流传的B卷回忆里有人就提到过让求模式串 pabacaba 的next数组。这个题看着简单实际能错出一片。我先把求next数组的两种常见定义都算一遍你对照着看自己平时用的是哪一种。模式串 p a b a c a b a下标按0开始记。定义一next[i] 表示 p[0...i] 这个子串中最长相等前后缀的长度。i0子串a没有真前后缀长度0i1ab前缀{a}后缀{b}不相等0i2aba前缀{a, ab}后缀{a, ba}最长相等前缀后缀是a长度为1i3abac前缀{a, ab, aba}后缀{c, ac, bac}没有相等0i4abaca最长相等前后缀是a长度为1i5abacab最长相等前后缀是ab长度为2i6abacaba最长相等前后缀是aba长度为3所以按这个定义next [0, 0, 1, 0, 1, 2, 3]。定义二next[i] 表示“第 i 个字符匹配失败时模式串应该跳到哪个下标”也就是把上面的数组右移一位并在开头补-1[-1, 0, 0, 1, 0, 1, 2]。笔试里最坑的就是这个。题目如果说“next[i]定义为前i个字符组成的子串中最长相等前后缀长度”那答案就是第一种如果说“失配时跳转位置”那答案就是第二种。你平时如果不注意区分遇到定义二的卷子第一问就算错后面全跟着错。注意有些教材在字符串下标从1开始时失配跳转数组会写成 [0, 1, 1, 2, 1, 2, 3]本质是定义二在1-based下标下的变形。考试时先看清下标起点和next的定义再动手算。3.2 快速幂与“O(log n)到底怎么来的”快速幂是笔试里性价比极高的题代码短、思路清晰但很多人写不对。核心思路是把指数b拆成二进制。比如求 a^13因为 13 1101(二进制) 841所以 a^13 a^8 × a^4 × a^1。我们只需要对b的二进制从低位到高位检查如果当前位是1就乘上对应的a的幂次同时每一步让 a 自己平方。参考代码Pythondef fast_pow(a, b, mod): res 1 base a % mod while b 0: if b 1: res (res * base) % mod base (base * base) % mod b 1 return res为什么复杂度是O(log b)因为每轮循环b右移一位也就是二进制长度缩短1位而b的二进制位数为log₂b。无论b是多少循环次数可控完全不是O(b)的暴力乘法。笔试里的变体包括“求矩阵快速幂”和“大数取模”。矩阵快速幂就是把“数乘”换成“矩阵乘”代码结构一模一样但复杂度分析要从“指数位数”的角度重新理解一遍。3.3 堆排序的建堆复杂度和“不稳定”考点堆排序是排序算法里的重点笔试常考两个点建堆为什么是O(n)而不是O(n log n)以及堆排序为什么不稳定。先解释建堆复杂度。从最后一个非叶子节点开始自底向上做下沉操作。大多数节点在接近堆底的位置它们下沉时最多走一两层就到叶子了只有少数靠近根节点的节点才可能走到全树高度。把所有节点的下沉次数加起来经过求和可以收敛到O(n)。直觉上可以这样记越靠下的节点数量越多但下沉深度越小越靠上的节点下沉深度越大但数量极少两者一抵消就是O(n)。堆排序不稳定则是因为堆调整过程中元素会大跨度交换相同值的元素相对顺序没有保证。笔试如果问“稳定的排序有哪些、不稳定的有哪些”要能脱口而出快排、堆排、选择排序、希尔排序都不稳定归并、插入、冒泡、基数排序稳定。另外堆排序空间复杂度为O(1)这是它和归并排序O(n)空间最明显的区别也是考题常出的对比点。3.4 Dijkstra、DP与贪心的边界图论题为什么那么爱考“为什么对/为什么错”Dijkstra是校招图论题最高频的算法之一。单纯让你背模板意义不大考官更喜欢问“为什么Dijkstra不能处理负权边”。答案要从贪心策略说起。Dijkstra每次从当前距离最小的点出发并认为这个点的最短距离已经确定不会再被更新。这个假设在边权全为正时成立因为通过其他点绕回来看路径距离只会更大。但如果存在负权边就可能出现“先绕到一个当前距离较大的点再通过一条负权边回到当前点反而更短”的情况。此时一旦某个点的最短距离被“确定”了后面就无法再修正最终结果就是错的。同理动态规划考的是状态设计和转移方程贪心考的是“怎么证明贪心选择不会错”。笔试遇到贪心题只写“按结束时间排序然后选”是不够的还要能说清“为什么这个局部最优能推出全局最优”常用的是反证法或交换论证法。如果时间允许还可以了解一下二分图匹配的HK算法和规则引擎里的Rete算法。这两类算法不是大厂必考但属于“考到就拉开差距”的知识点因为它们考察的不是背模板而是对算法匹配过程的真正理解。4. 电商场景里的机器学习题唯品会的“业务味”从哪来4.1 搜索排序与个性化推荐特征和样本怎么构造电商场景题里搜索排序和推荐是两大支柱。这类题不像基础概念题有标准答案但评卷人心里有一套“合理思路”的尺子。记得基本链路召回、粗排、精排、重排。召回阶段要解决“从几百万商品里找出几百个候选”常见手段是i2i商品与商品的相似度、u2i用户历史行为关联、热门兜底。精排阶段才轮到模型上场用LR、GBDT、DNN或者现在的排序学习模型。特征工程是重点。用户侧的年龄、性别、历史点击类目分布商品侧的价格、品牌、折扣力度、库存上下文侧的时间、设备、页面位置。这些特征要花篇幅讲清楚来源和含义尤其是“时间衰减”这个点——用户三个月前买过什么和昨天看过什么权重完全不一样。样本构造也容易被忽略。搜索排序的样本通常是“曝光→点击→转化”漏斗取曝光日志做负样本点击日志做正样本再用转化行为加权重。如果笔试题问你“为什么不能只用点击日志训练”你要能答出没有曝光样本模型学不到“哪些商品用户看到了但没点”上线后会严重偏向把所有商品都推给用户。冷启动是另一个加分回答点。新用户没有历史行为冷启动的办法包括推荐热门商品、用注册信息做粗粒度偏好、配合Bandit算法让探索和利用平衡。新商品则可以用同品牌、同类目的热门商品做桥接先把流量导进来等积累一定曝光再进入个性化模型。4.2 销量预测与大促活动时间序列和回归的边界唯品会做特卖销量预测的题目一定会带上“闪购”“限时折扣”“有限库存”这些业务背景。这类题的本质是让你在有限的上下文里做出靠谱的预测方案。预测大促销量模型选型有两条路一是时间序列模型比如ARIMA、Prophet适合有长期趋势和周期性规律的数据二是把问题转成回归问题用GBDT、XGBoost甚至深度的时序模型把日期、星期、节假日、折扣力度、流量预估、去年同期的销量作为特征。实际笔试中更推荐第二类思路因为它的解释性和可操作性更强。你可以直接说先按商品维度构造训练集特征包括历史销量均值、最近7天销量波动、价格折扣比例、是否参与大促、库存深度、预热期的加购人数然后训练GBDT回归模型预测未来N天的销量。如果面试官追问“为什么用GBDT而不用LSTM”答案是表格型特征在GBDT上效果通常更好训练快、可解释性强LSTM的优势在长序列依赖上但日常销量数据未必有那么长的序列依赖。还有一个容易漏讲的点预测结果要反推业务动作。比如库存准备、物流排班、推荐流量配比这些下游动作才是销量预测的真正价值。能把模型输出和业务决策串起来已经是你在开放题里的明显加分项。4.3 风控与用户流失当正样本只有0.1%时怎么办风控题和流失预警题本质是同一个问题在极度不平衡的数据上做二分类。这类题目的答题思路和2.3节提到的内容直接打通。先说流失预警。首先流失的定义要明确是“30天未登录”还是“180天未购买”不同定义会直接影响正样本比例也会影响业务上干预的可行性。特征上可以用RFM最近消费时间、消费频率、消费金额做基础特征再叠加访问频次、优惠券使用情况、客服咨询记录、浏览时长变化等行为特征。模型上LR、随机森林、GBDT都可以关键是评估指标要选对不能只看准确率。风控领域常见问题包括“薅羊毛”“批量注册”“异常下单”正样本同样极少。除了二分类的思路还可以考虑异常检测和孤立森林从“正常用户是大多数”的角度出发找离群点。电商风控还有一个特色解法基于关系网络的图算法把用户、设备、IP、收货地址连成图批量注册的小号会在图上形成高度聚集的团伙结构这种图特征往往是模型效果提升的关键。4.4 A/B测试和因果推断笔试里最容易说漏的步骤A/B测试在电商公司笔试中出现的频率极高因为它考察的不只是机器学习知识还有工程和业务思维。最基础的问法是“怎么做一次A/B测试”标准步骤是确定实验指标、设计分流方案、计算样本量、跑实验、做显著性检验、得出实验结论。很多人在“分流”这一步只说“随机分50%和50%”这不够。分流要做到三点一是随机性最好用用户ID的哈希做分流而不是简单按时间前后切分二是均衡性实验组和对照组在用户属性、活跃度、历史购买力上要基本一致三是独立性不同实验之间要避免相互干扰同类实验不能叠加在同一批用户上否则分析不出是哪个实验带来的效果。显著性检验也要能说清楚p值小于0.05说明差异在统计意义上显著但“统计显著”不等于“业务显著”。实验组点击率提升0.1%统计上可能显著但业务上如果流量大、成本高这个提升可能不值得上线。这类“显著性陷阱”是面试官很喜欢追问的点平时复习要有意识地积累。5. 开放性设计题没有标准答案但有高下之分5.1 拿到一道设计题先做“边界谈判”开放设计题最怕的是拿到题就开始堆模型。比如题目说“设计一个流失预警系统”有人上来就说“用XGBoost跑一下”这种回答基本没有亮点。更好的做法是先做“边界谈判”也就是把问题问清楚。举个例子你可以说我先确认几个问题——流失的定义是什么正样本比例大概多少目前有哪些数据源比如登录日志、订单表、客服记录预测出来之后业务方打算做什么干预动作这些信息会直接影响特征和模型的选择。这笔“问需求”的功夫在笔试里很难真正提问但你在答题时可以把假设条件写出来比如“假设流失定义为30天未登录数据源包括登录日志、订单表和优惠券使用记录那么我会……”。这样既展示了定义边界的能力也让你的方案看起来更严谨。5.2 一个“从0到1做流失预警”的完整答题框架下面给一个可以直接当答题模板的框架遇到类似的业务设计题都可以往上套问题定义流失口径是什么预测周期是多长是预测“未来7天会流失”还是“未来30天会流失”数据与标签正样本为“周期内没有发生任何购买/登录行为”的用户负样本为周期内仍有行为的用户。注意做样本时间窗和特征时间窗的切分防止特征泄漏。特征工程用户基础属性注册时长、城市、年龄段、消费行为RFM、客单价变化、品类偏好、访问行为登录频次、浏览深度、活跃时段、营销触达优惠券是否使用、Push点击率。模型选择GBDT跑基线配合逻辑回归做可解释性分析。如果样本量足够大可以上DeepFM等深度模型但需要说明可解释性会下降。评估与监控用AUC和召回率做离线评估重点看“未来会流失的用户里模型能提前捞回来多少比例”。上线后监控AUC、PSI模型稳定性和业务干预的ROI。干预闭环有了预测名单之后做什么发优惠券、做专属客服回访还是调整推荐策略模型预测只是第一步能把“预测—干预—回收效果”闭环讲清楚你就在绝大多数候选人之上。我当年实习的时候导师教过我一句话模型上线不是终点监控才是。后来自己在笔试里写这类设计题把这句经验转化成“上线后要关注模型效果随时间衰减的问题定期重新训练”的表述面试官反应都很好。5.3 开放性题的三个常被忽略的加分点第一指标要跟业务挂钩。不要只说“AUC达到0.85”要说“0.85的AUC对应多少召回率能够覆盖多少流失用户这些用户挽回的GMV有多少”。这个思维是校招生和社招老手最大的差距。第二模型可解释性要主动提。电商业务里运营团队会问你“为什么给这个用户发券”如果模型解释不了业务很难信任。所以方案里可以加上“用SHAP值分析关键特征输出每人维度的召回理由”。第三要主动说风险。比如“样本不平衡可能导致模型偏向预测多数类”“训练数据可能存在选择偏差只有收到过优惠券的用户的转化数据没有收到过优惠券的用户缺乏反事实数据”。能主动暴露问题并提出缓解方案展示的不只是技术能力还有对数据和业务的成熟理解。6. 从这套真题倒推校招准备节奏6.1 我建议的时间分配准备校招笔试最怕的是平均用力。基础原理还没捂热就去刷困难题回头基础题照样错或者只顾刷题不碰业务遇到开放题直接卡壳。我的建议是三段式第一段用2到3周把机器学习基础打牢。重点是西瓜书前七章里的每一条公式都能自己推导一遍比如逻辑回归的损失函数和梯度、SVM的对偶形式、朴素贝叶斯的条件概率计算。不要只看不推笔试里“写出梯度表达式”这类题你只看书是写不出来的。第二段用1到2周集中刷算法题。不用贪多LeetCode hot 100加剑指offer的高频题就够。重点题型是字符串匹配KMP、排序快排、堆排、二分、动态规划背包、子序列、图最短路、拓扑排序、贪心。每道题刷完要在脑子里重新走一遍复杂度分析这样才能应付“为什么这个解法是O(n log n)”的追问。第三段考前一到两周做“公司定向”准备。想去电商公司就重点准备推荐、搜索、销量预测、流失预警这些场景题想去纯互联网平台多积累用户增长、内容分发场景的题。这段时间还可以把自己对推荐系统、A/B测试的理解写成文档确保开放题现场不会语无伦次。6.2 做题策略和心态笔试时间通常是一个半小时左右题量不小。我的策略是先快速扫一遍整张卷子把有把握的选择题和填空题先做了它们是基本盘不能丢接着做推导题和算法题遇到卡壳超过5分钟的先跳过最后再回来开放设计题留足15到20分钟因为它的分值通常最高而且答案组织得好不好一眼就能被看出来。写算法题时如果实在写不出完整代码不要空着。写“思路伪代码关键复杂度”也能拿到大部分分数尤其是公司笔试人工判卷的时候思路和沟通能力比一个无bug的最终代码更重要。6.3 笔试到底在筛什么人我带实习生的过程中回头再看这套笔试逻辑感受特别深校招笔试筛的从来不是“已经什么都会”的人而是“在有限信息里能稳定输出合理方案”的人。机器学习基础题考的是你有没有底子算法题考的是你的逻辑基本功业务题和开放题考的是你有没有“把模型用在真实数据上”的意识。我自己当年复习时最吃亏的一件事就是一上来就去背各类模型的优缺点结果被一道“训练误差很低但线上效果差”的问题问住才发现自己对偏差方差的理解只停留在字面没有真正理解它在业务里的表现。后来把每个概念都问了一遍“这个结论在什么条件下成立、什么条件下不成立”再去笔试明显稳了很多。如果你现在还在准备期记住一个学习原则不要只看“是什么”要追问“为什么”和“什么时候不成立”。把每个机器学习概念都当成一道业务题来理解比埋头刷一百道题更管用。祝你笔试顺利拿到理想的offer。