vinqi.com

推荐算法工程师面试题及答题要点

推荐算法工程师的面试通常 3-5 轮,技术面重点考机器学习基础、推荐系统全链路认知和你项目里真实做过的事。最容易挂的不是答不出八股,而是项目深挖时讲不清自己贡献的边界,以及线上问题排查类问题暴露缺乏实战。

专业基础

讲一下推荐系统的整体架构,从用户打开 App 到看到推荐结果,中间发生了什么?

考察点:考察你对全链路的理解,是否有系统性认知而非只会调模型。

答题要点:
  1. 按「召回→粗排→精排→重排」的漏斗结构讲,说明每层的数据量级差异和延迟约束
  2. 召回层强调多路召回并存:协同过滤、向量召回、热门、运营位等,说明为什么不能只靠单路
  3. 精排层讲特征工程、模型结构(如深度排序模型)和预估目标(点击率、转化率、时长)
  4. 最后补一句重排做多样性、去重、业务规则,体现你懂工程和业务约束

别踩:只讲模型不讲系统,漏斗各层的量级和延迟要求说不出来,会被认为没接触过线上系统。

协同过滤的原理是什么?它有什么问题,怎么解决?

考察点:经典基础题,考你对传统方法的掌握和问题分析能力。

答题要点:
  1. 分 ItemCF 和 UserCF 讲清楚相似度计算方式,说明各自的适用场景
  2. 问题至少说三点:冷启动、稀疏性、热门物品主导推荐结果
  3. 对应解法:引入内容特征、矩阵分解、热度打压和长尾扶持策略
  4. 可以补充协同过滤现在多作为召回一路,而非唯一方案

别踩:只背定义不讲问题和解法;或者反过来把协同过滤贬得一文不值,显得不理解经典方法的价值。

CTR 预估和推荐排序是什么关系?为什么不能直接用点击率排序?

考察点:考察对预估目标和业务目标之间差异的理解。

答题要点:
  1. 说明排序模型本质是在预估点击率、转化率等概率,排序只是预估结果的一种应用
  2. 直接按 CTR 排序会导致标题党、低质内容霸屏,伤害长期体验
  3. 讲多目标建模思路:点击、时长、点赞、负反馈等目标如何融合
  4. 提到 E&E(探索与利用)或长期价值,体现你思考的不只是即时指标

别踩:把 CTR 预估和推荐系统划等号,或说不出「为什么线上指标涨了用户体验反而变差」这类矛盾。

AUC 是什么?线上 AB 实验指标涨了但 AUC 没变,可能是什么原因?

考察点:考察离线评估和线上效果的对应关系,这是实战经验题。

答题要点:
  1. 先准确定义 AUC:随机取一正一负样本,模型给正样本打分更高的概率
  2. 说明 AUC 是全局排序能力,线上每个用户只看到自己的一小段排序
  3. 可能原因:模型对头部用户改善明显但整体 AUC 被稀释;或收益来自召回而非排序
  4. 也可能 AB 实验本身有干扰或新奇效应,建议观察更长时间

别踩:只会背 AUC 定义,答不出离线和线上不一致的场景,会被判定缺乏实战。

项目经历深挖

挑一个你最有代表性的推荐项目,讲一下背景、你的方案和最终效果。

考察点:考察表达结构、贡献真实性和技术选型逻辑。

答题要点:
  1. 用「业务问题→技术方案→我的角色→量化结果」四段式,控制在两分钟内
  2. 量化结果要具体:指标提升幅度、实验周期、覆盖流量比例
  3. 主动说清团队分工和你的边界,哪些是你做的、哪些是协作方做的
  4. 结尾补一句踩过的坑和迭代过程,比只讲成功更有说服力

别踩:讲成流水账或把团队成果说成个人成果,后面追问细节时对不上会直接出局。

这个项目里,你的模型上线后效果不好,你是怎么排查的?

考察点:考察线上问题排查能力,区分「做过项目」和「真正负责过」。

答题要点:
  1. 先确认问题定位:是数据问题(特征穿越、样本偏差)还是模型问题
  2. 讲排查顺序:离线在线一致性检查→特征分布对比→分人群分场景下钻
  3. 给出具体案例:比如发现训练和推理的特征口径不一致导致效果衰减
  4. 最后讲修复后的验证方式,形成闭环

别踩:只说「调参、重新训练」这种泛泛答案,没有排查路径,暴露没真正处理过线上问题。

你说指标提升了 X%,这个数字怎么来的?实验是怎么设计的?

考察点:考察实验严谨性,验证项目数据是否可信。

答题要点:
  1. 讲清实验设计:分流方式、对照组设置、实验周期、样本量是否充分
  2. 说明核心指标是什么、护栏指标有哪些(比如时长涨了但留存不能跌)
  3. 主动提显著性检验和置信度,以及如何排除新奇效应
  4. 如果当时实验有瑕疵,坦诚说明,比硬撑可信得多

别踩:数字说不出实验依据,或只报好指标不提护栏指标,会被认为数据注水。

如果让你重新做这个项目,你会改进哪里?

考察点:考察反思能力和技术视野,看你是否停留在「做完了」层面。

答题要点:
  1. 准备 2-3 个真实的改进点,比如特征体系没做充分、目标定义偏短期
  2. 每个改进点讲清楚当时为什么没做(时间、数据、优先级),体现取舍意识
  3. 至少一个点要指向长期方向,比如从单点优化到全链路联动
  4. 避免把改进说成「全都推倒重来」,显得当初方案一无是处

别踩:说「没什么可改进的」显得没有思考;说太多则显得当初做得很差。

算法与工程能力

召回和排序的特征体系有什么区别?特征穿越是什么,怎么避免?

考察点:考察特征工程实战经验,这是推荐岗位的高频深挖点。

答题要点:
  1. 召回特征偏内容侧和用户长期画像,排序特征包含大量实时上下文特征
  2. 特征穿越定义:训练时用了线上不可知的信息,比如用了「用户当天总点击数」
  3. 避免方法:特征快照、按请求时间对齐、线上线下特征一致性校验
  4. 可以补充交叉特征、序列特征的处理经验

别踩:只罗列特征类型,说不出穿越的具体例子和防范手段,暴露没做过线上特征。

冷启动问题怎么处理?新用户和新物品分别说说。

考察点:考察对推荐系统经典难题的方案积累。

答题要点:
  1. 新用户:利用注册信息、设备信息做粗粒度分层,先推热门和高质量内容快速收集反馈
  2. 新物品:利用内容特征理解(类目、标签、embedding),辅以小流量探索
  3. 提到 E&E 策略:如何平衡探索新物品的代价和收益
  4. 说明冷启动的本质是信息不足,方案核心都是引入侧信息或加速反馈收集

别踩:只说「用内容特征」一句话带过,没有具体机制,显得理解停留在概念层。

线上推理延迟有要求,你的模型太重怎么办?

考察点:考察工程落地意识,推荐岗不是只训模型。

答题要点:
  1. 先分层:召回用轻量模型或向量检索,重模型放在精排,控制候选量
  2. 模型侧手段:蒸馏、剪枝、量化,说明各自适用场景
  3. 工程侧手段:特征预计算、缓存、并行化、批量推理
  4. 强调先测量再优化,找到真正的延迟瓶颈而不是盲目优化

别踩:只答「换小模型」,说不出蒸馏、缓存这类具体手段,或没有性能测量意识。

多目标建模了解吗?点击、时长、互动这些目标怎么融合?

考察点:考察对主流排序技术的掌握深度。

答题要点:
  1. 讲多任务结构:共享底层网络加多个任务头,说明参数共享的意义
  2. 融合方式分层讲:样本级融合、模型级融合(多塔输出合并)、排序级融合(公式加权)
  3. 提到任务间冲突(比如负迁移)及处理思路
  4. 如果没实际做过,坦诚说了解原理但没上线经验,别硬编细节

别踩:只会说「加权求和」四个字,追问权重怎么定、冲突怎么处理就答不上。

情景应变与业务思维

老板说推荐结果太同质化了,用户刷到的内容都差不多,你会怎么分析和解决?

考察点:考察从业务现象到技术方案的拆解能力。

答题要点:
  1. 先定义和度量:怎么量化多样性(类目分布、embedding 距离),确认问题真实存在
  2. 分析来源:是召回通道单一、还是排序目标过于偏向点击导致马太效应
  3. 方案分层:召回侧加探索通道,排序侧加多样性目标或打散规则,重排侧做硬约束
  4. 提醒要观察多样性提升对核心指标的代价,做权衡而非单点优化

别踩:直接跳到「加个打散规则」,没有先定义问题和分析根因,显得缺乏方法论。

AB 实验显示新模型点击率涨了 2%,但用户留存跌了,你上不上这个模型?

考察点:考察指标权衡和业务判断,没有标准答案,看思路。

答题要点:
  1. 先质疑数据:实验周期够不够、留存下跌是否显著、有没有新奇效应干扰
  2. 分析因果:点击涨留存跌通常意味着内容质量下降或标题党,做下钻分析验证
  3. 给出决策框架:留存是长期护栏指标,短期点击收益通常不值得牺牲
  4. 结论可以是「暂不上线,先修复质量问题」,关键是讲清权衡逻辑

别踩:不假思索说「上」或「不上」,没有验证数据和分析过程,暴露缺乏业务判断。

如果推荐效果突然掉了 20%,你会怎么排查?

考察点:考察线上稳定性意识和系统级排查能力。

答题要点:
  1. 先看时间和范围:全量掉还是部分人群、是否与某次发布或数据更新时间吻合
  2. 分层排查:数据链路(特征、样本)→模型服务(延迟、超时、降级)→上游依赖
  3. 讲一个具体案例最好:比如某特征上游表延迟导致大量默认值填充
  4. 强调监控和报警的缺失也是要复盘的点

别踩:只说「看日志、查模型」,没有分层排查路径和时间对齐意识,会被认为没值过线上班。

行为面试与反问环节

说一次你和产品或者工程同学在方案上有分歧的经历,最后怎么解决的?

考察点:考察协作方式和沟通能力,推荐岗需要大量跨职能配合。

答题要点:
  1. 选真实小分歧,别编「重大冲突」的戏剧化故事
  2. 讲清分歧本质:通常是指标口径或技术可行性上的认知差
  3. 解决方式:用数据或小流量实验验证,而不是靠职级或嗓门
  4. 结尾讲结果和你的反思,体现你尊重专业边界

别踩:把对方塑造成不讲理的一方,或最后靠领导拍板解决,显得协作能力差。

你为什么想做推荐算法,而不是纯研究或后端开发?

考察点:考察动机真实性和岗位匹配度。

答题要点:
  1. 结合真实经历讲:比如做项目时感受到「策略改动直接影响百万用户」的反馈感
  2. 说明推荐的技术特点吸引你:数据闭环快、问题定义开放、算法和工程并重
  3. 如果有从其他方向转来的经历,讲清转换的逻辑链
  4. 避免空谈「热爱机器学习」,要落到推荐这个具体方向

别踩:答案换成任何岗位都成立,说明没想清楚;或过度贬低原来的方向。

你有什么想问我们的?

考察点:考察你的关注点和思考深度,也是你判断团队的机会。

答题要点:
  1. 问业务:团队负责的场景和核心指标是什么,当前最大的挑战是什么
  2. 问技术:推荐链路哪些环节是团队自建的、迭代节奏如何
  3. 问成长:新人前三个月一般做什么、团队怎么衡量算法同学的价值
  4. 至少准备 3 个问题,别问加班和薪资这类留给 HR 的问题

别踩:说「没什么想问的」直接减分;只问福利待遇显得不关心工作本身。

面试准备清单

什么时候要做什么
面试前 3 天把自己项目按「背景-方案-我的角色-量化结果-踩坑」重写一遍,每个数字准备好实验依据,追问答不上来的地方提前补齐。
面试前 3 天过一遍推荐系统全链路知识:召回排序重排各层职责、特征穿越、冷启动、多目标、AB 实验,每个主题准备一个能讲两分钟的完整回答。
面试前 1 天查目标公司的业务:推荐什么内容、大概的产品形态,把通用答案往对方场景上靠,比如短视频和电商的排序目标差异要能说出来。
面试前 1 天准备 3 个线上问题排查的故事(效果下跌、指标矛盾、特征异常),每个按「现象→排查路径→根因→修复」结构讲。
面试当天准备纸笔,算法题和系统设计题边画边讲;每轮结束前留 5 分钟问 2-3 个准备好的反问问题。
面试当天遇到不会的问题直接说「这块我了解有限,但我的思路是……」,展示思考过程比硬编答案安全得多。

常见问题

推荐算法工程师面试一般有几轮?
通常 3-5 轮:1-2 轮技术面(基础+项目深挖)、可能有 1 轮算法编程题、1 轮交叉面或主管面、最后 HR 面。大厂可能加笔试或机器学习基础测评,小团队可能合并成 2 轮。
没有推荐系统经验,怎么准备这类面试?
重点补全链路认知(召回排序重排)和经典问题(冷启动、特征穿越、多目标),然后把自己项目里相关的部分(比如做过 CTR 预估、NLP 排序)往推荐场景迁移着讲,坦诚说明没做过线上推荐但展示迁移能力。
面试会手写代码吗?考什么难度?
大概率会。常见两类:LeetCode 中等难度的算法题(数组、哈希、动态规划为主),以及推荐场景题(如手写简化版协同过滤、TopK 问题、AUC 计算)。建议刷题同时准备场景类手写。
项目深挖环节最容易被问倒的是什么?
三个高频死角:指标提升的实验设计细节、线上效果不好时的排查过程、你和团队其他人的分工边界。这三点答含糊会让面试官怀疑项目真实性,务必提前逐条准备。

继续看这个岗位

相关岗位