ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

网易推荐算法笔试复盘:考点拆解与高效备战指南

网易推荐算法笔试复盘:考点拆解与高效备战指南 今年上半年帮几个学弟学妹做大厂推荐算法岗位的笔试复盘聊到网易2023校招提前批的推荐算法工程师笔试时我发现一个共性现象很多人不是技术底子差而是根本不知道这类笔试在考什么、以什么方式考导致复习方向偏了。推荐算法工程师这个岗位笔试考察的范围其实非常固定核心就是机器学习基础、推荐链路理解、代码基本功和业务场景设计。这篇文章我就把网易这批笔试背后的考察逻辑完整拆一遍结合我自己备考和帮人复盘的经验讲清楚每个模块的踩分点、常见题型和复习方法。这篇内容适合两类人一类是准备投递推荐算法工程师岗位、尤其是瞄准互联网大厂校招提前批的应届生另一类是已经入行一两年、想系统梳理推荐系统知识边界的算法工程师。提前批笔试通常比正式批更看重“知识面广度和反应速度”不像面试能慢慢聊所以这篇文章的重点不是把某个算法讲成论文而是帮你把笔试可能涉及的知识点串成一条能快速调用的线。1. 网易推荐算法笔试的考察边界与题型分布1.1 笔试和面试最大的区别筛的是熟练度不是潜力我见过不少候选人面试聊项目时讲得头头是道但一到笔试就拉胯。原因很简单笔试考察的是“你脑子里瞬间能调出多少东西”而不是“给你一小时你能不能查出来”。面试官可以听你讲思路笔试只有答案和得分。网易这批提前批笔试整体风格偏重基础覆盖和快速推理。题目不会故意出偏题怪题但覆盖面很广从概率统计到机器学习再到推荐系统甚至还有少部分数据结构题。出题人的逻辑是你不是投了推荐算法工程师吗那我先看看你数学底子、机器学习底子、代码底子和推荐sense是不是都在及格线以上。任何一个模块有明显短板都可能直接挂在笔试。所以备战这类笔试的第一步不是去刷最新的SOTA模型论文而是把本科研究生阶段那些“基础但重要”的知识点重新捡起来并且练到不假思索就能用的程度。1.2 网易的业务线决定了出题偏好网易的业务线非常分散云音乐、严选、新闻、游戏、有道、Lofter每个产品都有推荐场景。虽然笔试不像面试那样直接挂钩具体业务但出题人往往会从这些业务里挑一些共性问题来考。比如云音乐的场景会涉及歌曲和歌单的召回、用户听歌序列建模严选的场景会涉及商品点击率预估、用户购买意图判断新闻资讯场景则更关注冷启动和时效性。你在准备时可以多想想这些场景里的共性问题比如用户行为稀疏怎么办新物品上线没有行为数据怎么办用户兴趣随时间漂移怎么捕捉这些点几乎每个业务都会遇到笔试也很喜欢从这些角度出发。没必要去背每个产品的具体玩法但要有能力把“业务问题”翻译成“技术问题”。这个能力在笔试场景题里特别重要因为你能用推荐系统的通用语言去回答问题而不是只停留在业务描述层面。1.3 常见题型结构与时间分配根据我的复盘经验这类提前批笔试通常包含四个部分客观题选择题、简答/计算题、编程题、场景设计题。每个部分的权重和耗时我做了一个参考表格你可以对照自己当前的水平做针对性训练。题目类型考察重点参考分值建议时间分配选择题/填空题概率统计、机器学习基础、推荐算法常识30%-40%20-30分钟简答/推导题公式推导、损失函数、复杂度分析15%-20%30分钟编程题数据结构、算法、代码实现能力25%-30%尽量留足40分钟场景设计题推荐系统方案设计、业务理解、权衡取舍15%-20%最后一个小时前完成这里要提醒一点选择题往往没有你想象中那么简单它最大的坑是“看似都对”。出题人经常把相似概念放在一起比如问AUC和GAUC的区别、L1和L2正则化在不同场景下的选择如果你只是背过概念没有真正理解很容易选错。我后面会专门展开这些高频考点。2. 机器学习与推荐基础最容易拿分也最容易丢分的地方2.1 损失函数、激活函数与优化器能推一遍才算真会推荐算法工程师笔试里机器学习基础几乎是必考的而损失函数是出现频率最高的点。别以为出题人会直接问“交叉熵是什么”他们往往换个角度给你一个正样本和负样本让你写出模型的损失函数甚至让你推导梯度。最常见的组合是sigmoid激活函数加logloss。很多同学能背出公式但一让推导梯度就卡壳。其实推导过程很简单假设模型输出为( z w^T x )经过sigmoid得到预测概率( \hat{y} \sigma(z) 1/(1e^{-z}) )损失函数为( L -[y \log \hat{y} (1-y) \log(1-\hat{y})] )。求( \partial L / \partial z )的结果是( \hat{y} - y )这个结果很漂亮也解释了为什么梯度下降在逻辑回归里那么稳定。这个推导过程建议你亲手写三遍以上能做到完全不卡壳。除了loglossBPR损失也是推荐场景的高频考点。BPR的思想是假设用户对“已交互物品”的偏好高于“未交互物品”因此优化的是一个pairwise排序目标。很多候选人只听说过名字说不出公式和梯度这其实是笔试的典型失分点。2.2 偏差-方差、过拟合与样本偏差背结论没有用笔试喜欢把“理论概念”和“工程实践”结合起来考。比如问你训练集AUC很高但线上效果差可能是什么原因这种题表面问AUC实际在考察你对过拟合、样本分布、特征泄漏的敏感度。你需要建立一个分析框架先看训练集和线上数据是否同分布再看特征是否有未来信息然后才考虑模型容量问题。推荐场景里特别容易出问题的是样本选择偏差——我们用曝光日志训练但线上要给所有物品排序这之间天然存在偏差。如果你能在笔试里提到这个问题并给出修正思路比如用全量物品采样做负样本、或引入倾向性加权会是非常大的加分项。正则化也是常客。L1和L2的区别、为什么L1能产生稀疏解、在推荐特征维数爆炸时选哪个这些都是高频问题。你需要能用几何角度解释L1的“角点解”而不是只背“L1稀疏L2平滑”。2.3 推荐系统专属评价指标AUC和GAUC不能只会一个推荐算法工程师笔试里评价指标基本是必问的。AUC是基础中的基础但很多候选人只知道“AUC是ROC曲线下面积”再深入一点就说不清了。你需要知道AUC的概率解释——随机抽一个正样本和一个负样本模型给正样本打高分给负样本打低分的概率。这个解释在面试里也经常考。推荐场景更常用的是GAUC即按用户分组计算AUC再按曝光数加权平均。为什么不能用全局AUC因为不同用户的打分尺度可能不同全局AUC会被“容易区分的用户”主导GAUC更能反映每个用户自己内部的排序质量。如果笔试里问你“推荐系统为什么常看GAUC”你要能讲清楚这个道理。除了AUC还要熟悉召回层的RecallK、PrecisionK、NDCG和MAP。注意区分“精确率”和“召回率”在推荐场景下的业务含义——召回率低说明好物品没被捞上来排序做得再好也没用精确率低则说明热门但不相关的物品占了太多位置。2.4 从协同过滤到Embedding理解推荐算法的核心演变逻辑推荐算法笔试不会只考某个具体模型而是会考你“为什么从协同过滤演变成了Embedding”。这个演变逻辑如果你能讲顺整个推荐系统的知识骨架就立起来了。协同过滤的本质是基于“用户-物品交互矩阵”做相似性计算UserCF和ItemCF都依赖矩阵里的显式或隐式反馈。但它的痛点是稀疏性和泛化能力差。矩阵分解通过把用户和物品映射到低维向量空间解决了稀疏性的部分问题但本质上还是线性模型无法捕捉复杂的非线性关系。到了深度学习时代Item2Vec、Graph Embedding、双塔模型本质上都在做同一件事把用户和物品表示成稠密向量然后用向量间的相似度或内积来预测交互概率。如果你能在笔试里用“从共现矩阵到稠密向量”这条主线串起这些模型比零散地背模型结构要有效得多。3. 推荐链路必考点召回、粗排、精排、重排的串联理解3.1 双塔召回模型为什么它成了标配推荐系统笔试有一个几乎必考的考点为什么召回阶段普遍使用双塔模型这背后其实是工程和效果的双重约束。双塔模型的结构很简单用户特征走一个塔物品特征走另一个塔最后一层分别输出用户向量和物品向量用内积或余弦相似度表示匹配分数。训练时可以用pointwise的logloss也可以用pairwise的bpr loss。线上推理时物品侧的向量可以离线算好存进向量检索库用户侧实时计算然后用近似最近邻搜索ANN快速从几百万甚至上亿物品里召回TopK。这个设计最聪明的地方在于把“用户和物品交叉”留到排序阶段召回阶段只做向量匹配。代价是精度上限低优点是可以服务海量候选。笔试里如果问“双塔模型和FM的差异”或者“双塔为什么不加交叉特征”你要能答出双塔为了保证线上可扩展性牺牲了特征交叉能力FM在线下训练时可以显式做特征二阶交叉但线上全量计算成本太高。这个权衡思路比背模型结构更能体现你的工程sense。3.2 CTR预估演进从LR到FM到DeepFM的逻辑闭环排序阶段的CTR预估模型也是笔试重头戏。这条线的演进逻辑比任何一个单独的模型都重要LR是最早的工业级模型能处理大规模稀疏特征但缺少特征交叉能力FM通过隐向量的内积显式推荐了二阶特征交叉解决了LR的痛点DeepFM在FM基础上叠加深度网络把低阶和高阶特征交互都纳入模型。你需要会写FM的二阶项公式[ \hat{y}{FM}(x) w_0 \sum{i1}^n w_i x_i \sum_{i1}^n \sum_{ji1}^n \langle v_i, v_j \rangle x_i x_j ]这里的核心思想是即使用户没有同时点击过特征i和j它们各自的隐向量内积也能估计出交叉权重。这就是FM相比LR能做特征交叉泛化的关键。如果笔试考到DeepFM你不需要把结构画得多精细但要能解释清楚wide和deep部分是怎么融合的、为什么比单纯的FM或DNN效果好、embedding层是怎么实现参数共享的。把“低阶特征记忆、高阶特征泛化”这套逻辑说清楚基本就能拿分。3.3 冷启动和EE问题答出业务感才算高分冷启动是推荐系统里最经典的场景题素材也是校招笔试的高频题。网易的业务里冷启动特别突出——云音乐每天都有大量新歌新闻每天都有新文章严选随时上新品。如果你要答冷启动不能只说“用内容特征初始化embedding”。你得有体系第一基于内容的推荐用物品的文本、图片、类目等特征算相似度第二利用物品所属的类目或品牌的热度做加权第三借助用户侧已有的兴趣标签做匹配第四通过探索策略给新物品适量曝光收集少量反馈后再切回个性化模型。EE问题Exploration-Exploitation探索与利用和冷启动紧密相关。笔试常见的问法是“如何平衡推荐准确率和探索多样性”。最基础的是epsilon-greedy简单有效但有随机浪费UCB和Thompson sampling则是根据收益不确定性做探索更聪明但不一定叫得出名字。答这类题时要始终记住探索不是目的探索是为了更快收集有效信号所以设计探索策略时要考虑曝光成本、收益信号、实验周期等多个维度。3.4 排序之后的重排多样性和打散很多候选人完全没意识我复盘笔试题时发现很多候选人对重排阶段完全没有概念这很可惜。推荐系统的完整链路是召回→粗排→精排→重排前两个阶段解决“筛出对的东西”重排阶段解决“排得让人舒服”。笔试里如果问你“推荐结果太单一怎么办”大多数人会回答“加多样性约束”。但加多样性不是拍脑袋调权而是有经典方法的。MMR最大边际相关性就是其中之一在一个已经选好的结果集上新加一条item时既要保证它和用户相关又要保证它和已选item的相似度足够低。评分公式类似于( \lambda \cdot rel(item) - (1-\lambda) \cdot \max_{j \in S} sim(item, j) )其中( \lambda )控制相关性和多样性的平衡。如果能答到这一层说明你不是只懂模型不懂系统这种全局视角在批卷时非常加分。4. 编程题与数据思维推荐算法工程师的代码门槛4.1 算法题优先级先把高频题型拿稳网易这类大厂提前批的编程题整体难度通常对标LeetCode中等题偶尔有一道偏简单的hard。推荐算法工程师岗位的编程题不常考特别冷门的图论或复杂动态规划更常考的是数组操作、哈希表、二分查找、TopK问题、排序、链表基本操作。我建议优先级这样排二分查找类最常考代码量小容易验证、TopK/堆排序类推荐场景直接相关、双指针/滑动窗口类处理序列数据很实用、哈希表应用类。这些题型练熟之后至少能保证编程题不挂零。但有一点要注意笔试编程题往往不是让你写一个正确的函数就行还会看你的复杂度。比如你写一个O(n log n)的排序能过但如果题目的n是10^7以上就可能会卡超时。平时练习时就要养成先估算复杂度的习惯尤其在推荐场景数据规模动辄几千万O(n²)算法几乎肯定是错的。4.2 一个Embedding训练伪代码怎么拆解编程题偶尔不考传统算法而是给你一个“描述模型训练流程”的简答题或代码填空题。比如让你写出一个简化的双塔模型训练流程如何构造训练样本、如何负采样、如何计算loss、如何更新参数。一个合格的伪代码应该包含这几步先从曝光和点击日志里拿出正样本用户点击过的item再随机采样负样本用户没见过的item把用户特征和item特征分别过两个全连接网络得到用户向量和item向量计算内积得到logit过sigmoid后丢进logloss反向传播更新两个塔的参数。这里有个高频考点是负采样策略。随机负采样简单但容易采到用户不感兴趣的item导致模型分不清“不喜欢”和“没看到”。更优的做法是batch内负采样用同一个batch里其他样本的item作为当前用户的负样本。这样不但省了额外的采样开销还能因为“batch内item通常都是热门/偏热门的item”而提升负样本质量。笔试里能主动提这个点说明你不是只看过论文那种候选人。4.3 手推梯度SGD的“肌肉记忆”推荐算法笔试经常考手推梯度尤其是逻辑回归和softmax交叉熵的梯度。这类题的难点不在数学而在“熟练度”。如果你平时用框架用惯了很少有手推梯度的机会考前一定要专门练一轮。以softmax交叉熵为例很多人觉得推导麻烦但其实只用记住一句话损失对logits的梯度等于预测概率减去one-hot标签。即 ( \frac{\partial L}{\partial z_i} p_i - y_i )其中( p_i )是softmax输出( y_i )是标签。这个结果和sigmoidlogloss的梯度( \hat{y} - y )本质上是一回事都是“预测与真实的差”。能把这个统一性看透说明你真的理解了而不是死记硬背。演练时可以再进一步假如你有一个双塔模型用户侧塔的参数用( \theta_u )表示item侧塔的参数用( \theta_i )表示损失是BPR loss你能不能写出对( \theta_u )的梯度形式这种题并不难但考察的是你对链式法则的熟练程度强烈建议考前手推三遍以上。4.4 数据卷子与SQL别忽略这层基本功有些提前批笔试会加试SQL或数据计算题给一张用户行为表让你统计每个用户的点击次数、最近一次点击时间、连续活跃天数等。这类题对算法工程师来说难度不高但因为平时用得少反而容易手生。你需要掌握的SQL核心能力有GROUP BY配合聚合函数、窗口函数ROW_NUMBER、RANK、LAG/LEAD、JOIN去重、子查询和CTE。推荐场景里一个特别典型的题目是“给每个用户返回最近点击的Top 3商品”这就涉及到窗口函数如果你只会用GROUP BY基本做不出来。另一个常见数据题是“估算类”问题比如“估算网易云音乐每天DAU产生的曝光日志数量级”。这种题不要求精确答案但要求你的估算路径合理。正确思路是先确定日活用户量级几千万再估每个用户每天看的推荐流次数比如十几二十次每次刷出的item量比如20到30条相乘得到百亿量级。重点是展示严谨的假设和数量级意识而不是背答案。5. 作答策略、易错点与复盘的完整路径5.1 时间分配建议先保得分点再攻坚难题网易这类提前批笔试题量通常不小时间很紧。我见过很多候选人犯同一个错误在一道编程题上死磕一个小时后面场景题根本没时间写。我的建议是拿到试卷先花1-2分钟把所有题目扫一遍给题目分优先级。第一优先级是“看一眼就有思路的选择题和基础简答题”直接做掉第二优先级是“有思路但需要算一算的推导题”第三优先级才是编程题中偏难的那道。场景设计题不要放到最后因为它不需要完全精确只要按框架答到要点就能拿很多分性价比高于一道hard级别的编程题。如果一道题10分钟还没思路要么先跳过要么写下你有的部分思路。笔试是按点给分的写一个正确的公式、画一张清晰的模块图都比空着强。5.2 容易扣分的几个细节别在常识上丢分我每次复盘都会整理一批“本来能拿但没拿到的分”这些丢分点非常可惜因为它们和技术深度无关就是细节没注意。第一个高频问题是不写推导过程。笔试批卷的人不是你肚子里的蛔虫你直接写一个结果哪怕结果是对的也很容易被扣分。只要时间允许把关键公式、代入过程写清楚这不仅让批卷人舒服也能在结果算错时让你拿到步骤分。第二个问题是公式符号混乱。比如把用户向量写成( u )、物品向量写成( v )本来没毛病但写着写着又把另一个地方用成了( w )前后不一致批卷人很难快速理解你的思路。建议做题时先统一全局符号再动手养成好习惯。第三个问题是忽略样本偏差。很多场景设计题候选人高高兴兴地讲方案但完全不提样本怎么来、正负样本怎么定、有没有bias。推荐系统的笔试里样本设计的分量非常重你主动讲清楚这个问题几乎等于告诉批卷人“我不是只会跑模型”。5.3 模拟练习与复盘模板笔试复习最大的误区是只看不练。推荐算法笔试题的知识点边界是有限的但你如果只看资料不动手到了考场上会的知识点也很难快速转化为答案。我的复习节奏建议是这样的考前四周左右进入笔试态每周至少做一次完整的模拟笔试严格限时、不查资料模拟完再统一订正。订正时不要只看对错要记下每道题为什么错、卡在哪里、正确的思路是什么。用表格或者笔记记录一下当前薄弱的模块每周翻一次。复盘模板我一般会包含四列题目类型、错误原因知识点遗忘还是计算失误、正确思路一句话总结、同类题训练计划。这样坚持三周你会发现自己的知识盲区会非常清晰比盲目刷一千道题都有效。5.4 谈一点我个人复习时的体会最后说点题外话也算是我这几年反复验证出来的一个经验推荐算法工程师这个岗位笔试通过的人不一定是算法最深的但一定是知识体系最完整的。很多人把大量时间花在深度学习的SOTA模型上却在召回、特征、评估、样本这些“没什么噱头”的地方丢分非常可惜。如果你目标是网易或者类似体量公司的推荐算法岗位我的建议是先把推荐系统的整体框架在大脑里搭起来数据怎么来、样本怎么构造、模型怎么训练、线上怎么做推理、效果怎么评估。框架有了再去填充每个环节的细节就顺理成章。等到笔试前一周你已经不需要再学新东西而是把重点放在快速过一遍自己的知识框架图确保每个模块能立刻调用。笔试说到底是一次“把学过的技术有效输出”的过程输出效率越高优势越大。希望这篇复盘能帮你少走一些弯路在真正的笔试里把该拿的分都稳稳拿住。
返回列表