📑 本页目录(点开跳转)
17 · 面试与求职
⏱ 25 分钟 | 🎁 不找工作可跳过
🎯 一句话
推荐算法面试考三样:架构理解(第 6 节)、模型细节(第 8 节)、实验方法论(第 12 节)。 数学推导考得比你想象的少,工程判断力考得比你想象的多。
📊 岗位地图
| 岗位 | 主要工作 | 需要什么 |
|---|---|---|
| 推荐算法工程师 | 模型迭代、特征、实验 | 本教程全部 + 至少一个深度框架 |
| 搜索算法工程师 | 相关性、排序 | 类似 + NLP 基础 |
| 广告算法工程师 | CTR/CVR 预估、竞价 | 类似 + 计费/出价机制 |
| 推荐工程/架构 | 在线服务、特征平台、训练框架 | 第 15 节 + 后端功底(C++/Go/Java) |
| 数据科学家(推荐方向) | 实验设计、指标体系、归因 | 第 12 节 + 统计功底 |
| 推荐产品经理 | 策略设计、指标定义 | 第 2、6、11、12 节 |
💡 转行建议:后端工程师 → 推荐工程岗最容易;数据分析师 → 数据科学岗最容易。 直接冲算法岗需要补的最多,但也最有竞争力。
🔥 高频面试题(按出现频率排序)
第一梯队:必问,答不出直接挂
1. 讲一下推荐系统的整体架构(100% 会问)
答题框架: - 四层漏斗:召回 → 粗排 → 精排 → 重排 - 每层的候选数量级和耗时(1亿→1万→500→50→10,总共 200ms 内) - 每层的模型复杂度和指标(召回率 / 一致性 / GAUC / 多样性) - 核心权衡:用计算量换准确度,用分层换时延 - 加分:提到用户反馈回流形成闭环、离线在线链路一致性问题
👉 详见 第 6 节
2. 召回和精排的负样本采样为什么不一样?(⭐ 区分度极高)
核心答案:训练分布要和线上面对的分布一致。
- 召回:线上面对全库候选 → 负样本必须全库随机采样(+少量困难负样本) 用「曝光未点击」当负样本 → 模型只学会了精排级别的细微区分,从全库里挑不出东西
- 精排:线上面对的是召回/粗排给的候选 → 负样本用「曝光未点击」或从召回结果里采
加分:提到 in-batch 负采样的 LogQ 校正(热门物品被过度当负样本)
👉 详见 第 8 节
3. AUC 和 GAUC 的区别?为什么推荐更看 GAUC?
AUC 把所有用户混在一起算,会奖励「区分不同用户」这种线上根本用不到的能力。 GAUC 按用户分组算 AUC 再按曝光量加权平均,衡量的是「在每个用户自己的候选列表里排得对不对」——这才是线上真实场景。
加分:说明单用户全正/全负时无法计算 AUC,要跳过;说明还要分层看(新老用户、活跃度分层)。
👉 详见 第 12 节
4. 讲一下 DIN,它解决了什么问题?
问题:传统模型把用户历史行为做平均池化 → 得到一个「四不像」的用户向量,无关兴趣变成噪声。
解法:注意力机制。根据当前候选物品,动态给历史行为分配权重。 判断你会不会买键盘时,重点看你买过的电子产品,化妆品的权重压低。
核心洞察:同一个用户,面对不同候选物品,应该有不同的表示。
加分:说出注意力单元的输入是 [query, key, query-key, query*key] 四段拼接;说出 DIEN(加了兴趣演化 GRU)和 BST(用 Transformer)的改进方向。
👉 详见 第 8 节
5. 双塔模型的优缺点?为什么不能用它做精排?
优点:两塔分离 → 物品向量可以离线算好存进 ANN 索引,线上只需跑一次用户塔 + 向量检索,10ms 内从 1 亿里选 1000 个。
缺点:用户和物品只在最后点积一次,无法做特征交叉 → 精度有天花板。
所以:做召回(要求快、候选多、精度要求低)✅;做精排(候选少、精度要求高)❌。
加分:提到三个坑——负样本要全库随机采、LogQ 校正、温度系数;提到 ID-free 物品塔能解决冷启动。
👉 详见 第 8 节
6. 冷启动怎么解决?
分三种说: - 用户冷启:热门多样兜底 → 人口/设备画像 → 引导页选兴趣 → Bandit 快速试探 → 正常个性化 - 物品冷启(最难):死亡螺旋(没数据→低分→没曝光→还是没数据)。打破方法:内容特征 + ID-free 双塔(新物品一发布就有向量)、分级流量池、作者继承 - 系统冷启:运营 + 外部数据
加分:提到分级流量池判定时要用置信区间下界或贝叶斯平滑,否则小样本 CTR 波动大会误杀好内容。
👉 详见 第 13 节
7. 离线指标涨了,线上没涨,你怎么排查?(⭐ 高级岗必问)
按顺序排查: 1. 一致性校验(最常见):取线上真实请求用离线模型跑一遍,对比打分是否一致 2. 特征穿越:离线用了线上拿不到的特征? 3. 候选集差异:离线在小候选集上评,线上是全库? 4. 约束差异:线上有多样性/频控/广告位,离线没有? 5. 分布差异:离线是历史全量数据,线上是当前时段? 6. 统计功效:实验跑够了吗?置信区间包含 0 吗?
加分:提到曝光偏差——离线评估本质上是在问「新模型有多像老模型」,一个更好但很不同的模型离线指标可能反而差。
👉 详见 第 12、15 节
第二梯队:常问
8. 多目标怎么做?MMoE 和 Shared-Bottom 的区别?
Shared-Bottom 底层完全共享 → 任务冲突时互相拖后腿(跷跷板效应)。 MMoE 用多个专家网络 + 每个任务一个门控网络,每个任务自己决定用哪些专家 → 任务冲突时能各取所需。 PLE 进一步把专家分成「共享专家」和「任务专属专家」。
融合:最终分是各目标预估值的加权组合,权重是业务旋钮,人工调,不是学出来的。
9. 讲一下 FM,它比 LR 好在哪?
LR 无法学到特征交叉(「女 AND 化妆品」),必须人工造组合特征。 FM 给每个特征一个隐向量,交叉权重 = 两个隐向量的点积 → 参数从 O(n²) 降到 O(nk),且没共现过的特征对也能通过其他数据学出权重(泛化)。
加分:说明 FM 是矩阵分解的推广(MF 只有 user_id 和 item_id 两个特征)。
10. 位置偏差怎么处理?
排第 1 的物品点击率天然高,和内容好坏无关。直接用点击训练,模型学的是位置不是兴趣。
做法:训练时把位置作为独立的特征/塔输入,预测时统一填固定值(如位置 1)。 这样模型把位置带来的偏差归因到位置特征上,主网络学到的是真实兴趣。
同类技巧:YouTube DNN 的 Example Age 特征(训练时输入视频年龄,预测时填 0)。
11. 多样性怎么做?会有什么代价?
方法:MMR(λ 调权衡)、DPP(行列式=向量张成的体积)、打散规则。
代价:短期 CTR 会跌 1-2%,长期留存上升。 所以:必须做 2-4 周长周期实验,看留存类指标,不能只看 1 天的 CTR。这也是多样性优化在很多公司推不动的原因——它和短期 KPI 冲突。
12. Embedding 表太大了怎么办?
参数服务器分片、哈希分桶、低频 ID 过滤映射到 `第三梯队:加分题(答得出显得你在跟前沿)
13. 了解生成式推荐吗?
- 核心:把推荐当序列生成任务,物品 ID → Semantic ID(RQ-VAE 量化的层次化码字)
- 意义:传统推荐模型做大效果不涨,HSTU 首次在十亿用户级线上系统展示了 Scaling Law
- 落地:Meta HSTU(线上 +12.4%)、快手 OneRec(把整个漏斗塌缩成一个生成式模型,成本约 1/10)
- 清醒认知:需要海量数据+算力,小数据上打不过 DeepFM
👉 详见 第 14 节
14. 反馈循环 / 曝光偏差怎么办?
模型推 A → 用户点 A → 训练数据全是 A → 模型更确信只有 A 好。 解法:留 1-5% 流量做完全随机曝光,产出无偏数据集用于评估和校准;探索算法(Thompson Sampling);Off-Policy Evaluation(IPS、Doubly Robust)。
🧮 会问的数学/代码题
手写代码题(现场写,20 分钟内): - 手写余弦相似度 / AUC 计算 - 手写 NDCG@K - 手写 ItemCF(给定 user→items 字典) - 手写 Top-K 堆排序 / 多路归并 - SQL:算每个用户的 CTR、找出连续 7 天活跃的用户
概念推导(口述即可,不用严格推导): - 交叉熵损失的梯度形式 - 为什么 sigmoid + 交叉熵不会有梯度消失(对比 sigmoid + MSE) - L1 和 L2 正则的区别(L1 稀疏,L2 平滑) - 过拟合的表现和解决方法
💡 不会问:矩阵求导、凸优化证明、测度论。别在这些上浪费时间。
🎤 项目怎么讲(STAR 框架 + 推荐特化)
面试官最想听的不是「我用了 XX 模型」,而是「你怎么判断的」。
❌ 差的讲法:
"我做了一个推荐系统,用了 DeepFM,AUC 0.78。"
✅ 好的讲法:
S 背景:MovieLens 数据,10 万交互,目标是 Top-10 推荐
T 任务:baseline(ItemCF)Recall@10 只有 0.11,要提升
A 行动:
· 先分析问题:发现推荐结果 80% 集中在 top 5% 热门物品
· 假设:热门偏置。加了 α=0.5 的热门惩罚
· 结果:Coverage 12%→31%,Recall 只降 3% → 说明方向对
· 再上双塔召回 + 排序两阶段
· ⭐ 关键决策:召回负样本从"曝光未点击"改成全库随机采样
R 结果:Recall@10 从 0.11 → 0.178,NDCG@10 +59%
⭐ 反思:一开始随机切分数据导致 Recall 虚高 3 倍,
改成按时间切分后才发现真实水平。这个教训让我理解了数据泄漏。
「反思/踩坑」这一段是最加分的,它证明你有真实的工程判断力。
📝 简历怎么写
❌ 熟悉推荐系统,掌握协同过滤、矩阵分解、深度学习推荐模型
✅ 推荐系统实践 | github.com/xxx/recsys
· 在 MovieLens 32M 上实现召回+排序两阶段系统,端到端 NDCG@10 达 0.121,
较 ItemCF baseline 提升 59%
· 通过将召回负样本采样从"曝光未点击"改为全库随机采样,Recall@200 提升 34%
· 引入热门惩罚系数(α=0.5),物品覆盖率从 12% 提升至 31%,Recall 仅降 3%
· 用 FastAPI + Faiss + Redis 部署为在线服务,P99 延迟 45ms,
实现多级降级保证可用性
三个要点: 1. 有数字(提升多少、延迟多少) 2. 有决策(不是「用了什么」,是「为什么这么选」) 3. 有链接(GitHub 仓库,面试官会看 README)
🗓️ 三种备考节奏
🚀 一周速成(有基础,临时面试)
Day 1-2 第 6 节(架构)+ 第 12 节(评估)—— 背熟
Day 3 第 8 节(模型)—— DIN 和双塔要能讲透
Day 4 第 4、5、7 节 —— 快速过
Day 5 第 13、15 节 —— 冷启动 + 工程
Day 6 刷本节的高频题,每题口述一遍
Day 7 项目一 + 准备项目讲述
🏃 一个月(零基础 → 能面初级岗)
Week 1 第 1-5 节 + 项目一
Week 2 第 6-8 节(重点)
Week 3 第 9-12 节 + 项目二
Week 4 第 13、15 节 + 本节刷题 + 项目讲述打磨
🧗 三个月(认真转行)
Month 1 第 1-8 节 + 项目一、二,同时补 Python/PyTorch
Month 2 第 9-15 节 + 项目三(做完整、写好 README)
Month 3 第 14 节 + 读 5 篇经典论文 + 复现 1 个 + 密集刷题面试
📚 该读的论文(只列真正必要的 8 篇)
按优先级:
- Item-based CF (Amazon, 2003) —— 理解 ItemCF 的工业实践
- Matrix Factorization Techniques (Koren, 2009) —— MF 的集大成综述
- BPR (Rendle, 2009) —— pairwise 排序思想
- Wide & Deep (Google, 2016) —— 记忆与泛化
- YouTube DNN (2016) ⭐ —— 工业落地范式,工程细节最多
- DIN (Alibaba, 2018) ⭐ —— 注意力,概念最重要
- SASRec (2018) —— 序列推荐的标杆
- Actions Speak Louder than Words / HSTU (Meta, 2024) ⭐ —— 生成式推荐
💡 读论文的正确方式:先读 Abstract + Introduction + 图,搞清楚「它解决什么问题」, 再决定要不要读细节。80% 的论文读到这就够了。
✅ 自测:你准备好了吗
能流畅地口述以下 8 题 = 可以去面试了:
- [ ] 推荐系统的四层架构 + 每层的数量级、耗时、指标
- [ ] 召回和精排的负样本采样为什么不同
- [ ] AUC vs GAUC
- [ ] DIN 的核心洞察
- [ ] 双塔的优缺点,为什么不能做精排
- [ ] 冷启动的三种情况和解法
- [ ] 离线涨线上不涨的排查顺序
- [ ] 你的项目里最关键的一个技术决策,以及你怎么验证它是对的
🛑 最后
推荐系统是一个「工程 > 理论」的领域。
面试官真正想知道的不是你会不会推导公式,而是:
「把你放到一个真实的、脏的、有 bug 的系统里,你能不能做出正确的判断?」
这份教程里所有的「坑」「陷阱」「实战经验」,就是在训练这个能力。
祝顺利。 🎯
🔗 这一章连到哪里
| 去哪 | 为什么 |
|---|---|
| 上线之后 02 | 「离线涨了线上没涨怎么办」是推荐岗面试的高频压轴题,那一章给的是五道坎的完整答法 |
| 数学原理 08 | 被追问「为什么集成有效」「过拟合的数学定义」时,能写出分解式的人和只会说「记住了训练集」的人差距在这 |
| Kaggle 22 | 简历上的比赛名次怎么讲成能力证据,而不是「我调了参」 |
✅ 检查点
- 推荐算法面试主要考哪三样?什么考得比想象中少、什么考得比想象中多?
- 「召回和精排的负样本采样为什么不一样」——核心答案是什么?
- AUC 和 GAUC 的区别是什么?为什么推荐系统更看 GAUC?
- DIN 的核心洞察用一句话怎么说?
- 双塔模型为什么能做召回但不能做精排?
- 「离线涨了线上没涨」,排查的第一步是什么?为什么它排第一?
- 转行进推荐领域,哪条路径最容易?
👀 答案
- 架构理解(第 6 节)、模型细节(第 8 节)、实验方法论(第 12 节)。数学推导考得比想象的少,工程判断力考得比想象的多。
- 训练分布要和线上面对的分布一致。召回线上面对全库,所以负样本必须全库随机采;精排线上面对的是召回给的候选,所以负样本用「曝光未点击」。用曝光未点击训召回,模型只学会了精排级别的细微区分,从全库里挑不出东西。
- AUC 把所有用户混在一起算,会奖励「区分不同用户」这种线上根本用不到的能力;GAUC 按用户分组算再按曝光量加权,衡量的是「在每个用户自己的候选列表里排得对不对」——这才是线上真实场景。
- 同一个用户,面对不同候选物品,应该有不同的表示。传统的平均池化得到一个「四不像」的用户向量;DIN 用注意力根据当前候选动态给历史行为分配权重。
- 因为两塔只在最后点积一次,无法做特征交叉,精度有天花板。但也正因为分离,物品向量能离线算好存进 ANN 索引,快且能扫全库。所以它适合召回(快、候选多、精度要求低),不适合精排。
- 一致性校验:取线上真实请求用离线模型跑一遍,对比打分是否一致。排第一是因为它最常见也最容易查——特征处理不一致、模型版本不对这类问题,一次比对就能暴露。
- 后端工程师 → 推荐工程岗最容易;数据分析师 → 数据科学岗最容易。直接冲算法岗需要补的最多,但竞争力也最强。
⚡ 走神救援
⚡ 走神救援
面试考三样:架构理解(第6节)、模型细节(第8节)、实验方法论(第12节)——⭐数学推导考得比你想象的少,工程判断力考得比你想象的多。必答题:①整体架构(四层漏斗 + 每层的数量级/耗时/指标,加分点是提到反馈闭环和离线在线一致性)②⭐召回vs精排的负样本——核心是「训练分布要和线上面对的分布一致」(召回面对全库所以全库随机采)③GAUC 按用户分组(AUC 会奖励「区分不同用户」这种线上用不到的能力)④DIN 的洞察:同一用户面对不同候选应该有不同的表示⑤双塔只在最后点积一次无法特征交叉所以只能做召回⑥冷启动分用户/物品/系统三种说(物品冷启最难,死亡螺旋)⑦⭐离线涨线上没涨:第一步永远是一致性校验(拿线上真实请求用离线模型跑一遍对比打分)。转行路径:后端→推荐工程岗最容易,数据分析→数据科学岗最容易。