2026-10-20

推荐系统业务岗:12 周准备路线 v2(从学习清单到投递闭环)

2026-10-21 修订:v1 把"学什么"写清楚了,但漏了"什么时候拿 offer"。这一版重排了时间线(4 周 MVP + 8 周迭代)、给每个项目补了完成定义和验收口径、把"实验与评测"从三条 bullet 扩成一章,并修正了"主打系统工程岗"这个不太现实的定位。

先把三句话钉在墙上(v1 这三条是对的,是全文地基):

  1. 业务岗考的不是论文,是你改了什么、指标动了多少、代价是什么、怎么证明不是噪声。
  2. 离线涨不等于线上涨。样本偏差、位置偏差、特征穿越,任何一个都能把 AUC 的 +2% 变成负收益。
  3. 模型不是唯一杠杆。重排打散、多样性配额、生态扶持,经常比换模型收益更大。

0. v1 缺什么(这次改了哪八处)

  1. 终点错了。 v1 的终点是"第 12 周学完",简历整理在第 11 周、投递在第 12 周之后。求职计划的终点是 offer;正确做法是第 4 周末就有一份能投的简历。
  2. 没有岗位画像。 四类岗位只是分类,没落到"目标公司 JD 出现频率 → 我拿什么证据回应"。
  3. 没有时间锚点。 10 月 20 日往后排 12 周就是 1 月中。秋招补招、春招实习、在职转岗,三种情形策略完全不同,v1 默认了"我在全职学习"。
  4. 项目没有完成定义。 只写了做什么,没写"做到什么算过":口径冻结没有、泄漏检查没有、能不能复现、追问接不接得住。
  5. 数据集偏旧偏小。 只有 Amazon Beauty / MovieLens。缺带曝光反馈的数据(bandit 和 AB 必须有),也缺 CTR/CVR 多目标数据(精排和多任务必须有)。
  6. 评测只有口号。 "全库评估、GAUC"写了,但没写显著性、多种子、口径对比——而这三个恰恰是业务岗面你的原因。
  7. 系统项目偏 demo。 压测没有口径,降级没有超时预算,没有灰度、没有热更新,离"上过生产"还差一截。
  8. 面试准备不能排练。 缺三档讲述、追问清单、mock、复盘表。

所以 v2 的结构是:定靶 → 4 周做出可投版本 → 8 周边投边补。

1. 先定靶:你要投什么、什么时候投

三种情形,三种倒排。先对号入座,再往下看:

情形 身份 投递窗口 12 周怎么用 关键动作
A 春招实习 研一 / 大三 次年 3–4 月 完整跑 12 周,W4 起投小厂练手 实习转正是最稳入口
B 秋招补招 应届,10 月已错过主战场 立刻,11 月前 砍成 6 周(见第 11 节) 先投"稳"档,边面边补
C 在职转岗 有工作经验 随时,1–2 个月 12 周,但项目替代学习 强调可迁移能力,别裸辞

定不下来就先按 A 走,但W4 之前必须开始投递——不管投不投得中,面试反馈是最好的需求文档。

2. 岗位画像:从 20 份 JD 反推证据

方法:拉 20 份目标 JD,把要求拆成"能力 → 我有没有证据 → 证据在哪"。这张表是你 12 周的验收清单,不是读书清单。

JD 要求 频率 我需要的证据 放在哪
召回 / 粗排 / 精排 / 重排链路 几乎 100% 项目 A 全链路 + 链路图 简历第 1 条
LR / GBDT / FM / DeepFM / DIN / MMoE / PLE 高 项目 A 消融 + 八股 简历 + 面试
特征工程 / 样本构造 / 实时特征 高 项目 C 特征一致性 简历第 3 条
Python + PyTorch(部分大厂仍用 TF) 高 仓库可读性 GitHub 置顶
Spark / Hive / SQL 中高 至少一次大数据量处理 项目 B
AB 实验设计与分析 高 项目 B 的 AB notebook 简历第 2 条
业务指标与归因 中高 业务 case 三件套 面试
论文 / 竞赛 / 开源 加分 一篇论文精读笔记 博客

这张表里的"频率"是我看 JD 归纳的,你需要用自己的 20 份替换。不同公司差很多:字节重规模和 AB,美团重场景和供给,小红书重内容和多样性,快手重长序列。

3. 总路线:4 周 MVP + 8 周迭代,双轨并行

阶段 周 项目线 面试线 对外产出
定靶 W0 环境、基线、口径冻结 拉 JD、建题库 实验台账
MVP W1–W2 项目 A:双塔召回 + Faiss + 全库评估 手撕 A 级 —
可投版 W3 项目 A:DIN 精排 + 消融 系统设计模板 简历 v1 + 开始投递
差异化 W4–W5 项目 B:曝光反馈 + bandit + AB 业务 case 模板 简历 v2 + 第二篇博客
深化 W6–W7 项目 A 深化 + 项目 C 八股分组 项目 README 定稿
系统化 W8 项目 C:压测 / 降级 / 灰度 系统设计 mock 降级录屏
冲刺 W9–W12 项目 D(可选) 手撕 + mock + 复盘 offer

原则只有一条:项目线永远领先面试线两周,因为面试问的是项目,不是知识点。

4. 项目设计(每个都补了完成定义)

项目 A:端到端两阶段推荐(脊柱,4–5 周)

  • 数据:KuaiRec(带曝光反馈)或 Amazon Beauty;别只用 MovieLens-1M
  • 链路:多路召回(双塔 + i2i + 热门兜底)→ 精排(DIN)→ 重排(DPP / MMR)
  • 完成定义(DoD):
    1. 评估口径冻结(第 5 节模板),README 第一屏能看见
    2. 三种召回对比、精排增益、重排对多样性的影响,各一张表
    3. 每个数字有 3 个种子 + 95% bootstrap CI
    4. 至少一次完整的负结果记录:哪个改动没涨、为什么
    5. P99 延迟有真实数字(写清硬件和并发)
  • 必须能接住的 5 个追问:
    • 为什么用双塔而不是交叉特征?代价是什么?
    • 全库评估和负采样评估差多少?为什么差?
    • 负采样比例怎么定的?对它敏感吗?
    • 你的增益是噪声吗?怎么证明?
    • 如果线上延迟砍一半,你砍哪里?

项目 B:曝光反馈、探索与 AB(差异化,2 周)

  • 数据:KuaiRec(快手短视频)。它同时记录"曝光了什么"和"没曝光什么"(full exposure matrix),是少数能做 bandit 和曝光偏差实验的公开数据
  • 做什么:bandit 模拟器(用户响应模型 + 噪声 + 曝光反馈),对比 ε-greedy / UCB / Thompson;再做一个 AB 分析 notebook
  • AB notebook 必须包含:SRM 检查、样本量估算、CUPED 方差缩减、多重比较校正、护栏指标、新奇效应讨论
  • 产出:一页结论——"什么条件下该多探索、代价多少、换回多少"

项目 C:在线服务(2 周)

  • 栈:FastAPI + Faiss + Redis + Docker
  • 必须做:P99 压测(wrk / locust,写清并发、QPS、错误率口径)、超时预算拆解、限流、缓存击穿、依赖超时降级、特征一致性脚本、模型版本与灰度
  • DoD:一条录屏——杀掉向量库 → 自动回落热门 → P99 恢复 → 告警触发

项目 D:差异化(可选,2 周)

三选一:推荐鲁棒性评测(注入 / 投毒)、LLM4Rec 小实验(语义 ID 检索)、生态指标(多样性 / 流量集中度)。选和投递岗位最接近的那个,不要贪多。

5. 评测与实验:这才是业务岗的护城河

5.1 冻结评估口径(直接抄这个模板)

  • 数据版本 + 划分方式:按时间切,留最后 N 天做测试
  • 候选集:全库 or 采样 K(K 值写死)
  • 是否过滤已交互
  • 指标实现与版本
  • 随机种子:至少 3 个
  • 报告格式:mean ± std + 95% bootstrap CI

口径不冻结,数字就没有意义。面试官第一句通常就是"你这个 0.xx 是怎么算出来的"。

5.2 显著性

  • 论文里的 +2% 很可能是噪声。用 paired bootstrap 或置换检验,别只看均值
  • 多种子跑、报方差;单次结果不要写进简历
  • 差值不显著时,诚实写"不显著",这比硬编一个提升更值钱

5.3 离线涨、线上不涨的六个来源

  1. 样本选择偏差:只统计有曝光的样本
  2. 位置偏差:越靠前越容易被点
  3. 特征穿越 / 泄漏
  4. 目标错位:离线 logloss 对齐不了线上的时长 / GMV
  5. 反馈循环:模型改变了未来的数据分布
  6. 口径差异:离线全库 vs 线上候选集

5.4 AB 的六个检查项

  1. SRM:分流比例对不对(卡方检验)
  2. 样本量:n ≈ 16σ²/δ²(80% 功效,α = 0.05)
  3. 方差缩减:CUPED(用实验前指标做协变量)
  4. 多重比较:Bonferroni / BH
  5. 新奇效应:看 7 日曲线,别看首日
  6. 护栏:延迟、错误率、负反馈率、多样性

6. 知识地图(四层 + 每层验收问题)

四层保留 v1 的骨架,补上漏的,并给每层加了验收问题——答不出来就是没过。

第 1 层 模型:要能白板上推出来

  • 协同过滤 → 矩阵分解 → FM / FFM → 双塔(DSSM)
  • GBDT + LR;要能解释它为什么被深度模型取代
  • 精排:DeepFM、DCN、DIN、DIEN、SIM、ETA、TWIN、MMoE、PLE、ESMM、AITM
  • 序列:SASRec、BERT4Rec、BST;对比学习(S3-Rec)
  • 召回:i2i / u2i、Faiss / HNSW、语义 ID(TIGER)
  • 重排:PRM、DPP / MMR
  • 图:LightGCN(知道为什么比 GCN 好用就行)
  • 前沿:HSTU、OneRec(加分,不是主线)

验收:能不能画结构图并说清"它解决了上一个方法的什么缺陷"?能不能手推 FM 的 O(nk) 化简?

第 2 层 系统:要能画链路图

  • 全链路:日志 → 样本拼接 → 特征 → 训练 → 服务 → 多路召回 → 粗排 → 精排 → 重排 → 返回
  • 特征平台:离线 / 近线 / 在线三份特征怎么保证一致(工程岗最高频追问)
  • 训练:大规模 embedding(PS / worker)、稀疏梯度、增量训练
  • 推理:延迟预算(看 P99)、批处理、量化 / 蒸馏、降级、缓存
  • 向量检索:索引选型、召回率与延迟的权衡、增量更新
  • 补:日志到样本的时间对齐、训练-服务 skew、模型热更新与灰度

验收:能不能画出一个请求的完整超时预算,并说清哪一层超时该丢弃、哪一层该降级?

第 3 层 业务与实验:要能算账

  • 指标:AUC / GAUC、NDCG@k、HR@k、覆盖率、多样性、时长、GMV、留存
  • 补:延迟转化与归因窗口、曝光未点击、pointwise / pairwise / listwise、校准
  • AB:分流、样本量、CUPED、多重比较、新奇效应与长期效应
  • 冷启动、探索利用、供给约束、生态配额
  • 偏差:位置偏差与去偏(PAL、特权特征蒸馏)、样本选择偏差(ESMM)

验收:给你一个"离线 AUC 涨 0.5% 但 AB 不显著"的场景,能不能在 5 分钟内说出三种排查方向?

第 4 层 前沿:加分,不是必需

读工业论文的 20 分钟法:标题摘要 → 架构图 → 实验设置(数据规模、基线、延迟)→ 结论和适用边界 → 只记三句话。判断值不值得读只问一句:它解决了什么约束(规模 / 延迟 / 冷启动 / 多目标)?

7. 12 周执行表(周粒度,含验收)

周 目标 产出物 验收(做到算过) 时间
W0 定靶 + 基线 JD 表、口径模板、实验台账、BPR 基线 能跑出 HR@10 基线,口径写进 README 8h
W1 项目 A 召回 双塔 + Faiss + 全库评估 三种召回的 Recall@50/200 带 CI 12h
W2 项目 A 精排 DIN + 消融 精排增益 + 一次负结果记录 12h
W3 简历 + 投递 简历 v1、项目 A README、系统设计模板 能脱稿讲 10 分钟;投出 10 份 12h
W4 项目 B 模拟器 bandit 三算法对比 探索率-收益曲线 12h
W5 项目 B AB AB notebook SRM / 样本量 / CUPED / 多重比较齐全 12h
W6 项目 A 深化 多目标 PLE、序列特征、显著性汇总 消融表 3 行以上,全带 CI 12h
W7 项目 C 服务 召回 + 排序串起来,压测 P99 数字 + 压测口径 12h
W8 项目 C 生产化 降级 / 限流 / 灰度 / 一致性 降级录屏 + 一致性报告 12h
W9 项目 D 或补深 二选一 一个能讲透的差异化点 10h
W10 手撕 + 系统设计 白板稿、2 次 mock A 级手撕无提示通过 12h
W11 业务 case + 八股 3 个 case 稿、48 问自测 每个 case 5 分钟内讲完 12h
W12 冲刺 + 复盘 面试复盘表、offer 比较 至少 3 场面试复盘 10h

总计约 148 小时,平均每周 12 小时。允许掉一周链子,优先砍 W9。

8. 面试准备(可排练版)

8.1 手撕分级

  • A 级(必须无提示写出来):LR 梯度推导、AUC(含并列)、TopK 堆、Attention / Self-Attention、FM 交叉项化简、负采样、in-batch negative loss
  • B 级(常考):DIN attention、交叉熵梯度、KMeans、FTRL、快排 / 归并 / 二分、链表树遍历、DP
  • C 级(加分):Transformer block、Beam Search、分布式 AUC(分桶)

8.2 系统设计七步

  1. 澄清约束:场景、DAU / QPS、延迟预算、可用性、冷启动、合规
  2. 指标:北极星 + 护栏
  3. 数据与日志:埋点、样本拼接、时间对齐
  4. 离线链路:样本 → 特征 → 训练 → 评估 → 发布
  5. 在线链路:多路召回 → 粗排 → 精排 → 重排 → 混排
  6. 特征平台与一致性
  7. 降级 / 容量 / 实验

画图 + 讲取舍,不要背结构。 面试官打断你的时候,往往是在问"为什么不是另一种"。

8.3 业务 case 五步

定义指标 → 分层拆解(人群 / 场景 / 端 / 供给)→ 假设树 → 验证方案(数据 + AB + 样本量)→ 风险与长期效应 + 决策建议

三个必练:新用户次日留存跌 3%、多样性下降但时长涨了、AB 不显著。

8.4 八股四十八问

  1. 样本与标签:曝光未点击算负样本吗;延迟转化与归因窗口怎么定;正负比例与采样对哪些指标有偏;样本权重的用法;位置偏差与 PAL;特征穿越的典型例子;训练 / 验证为什么不能随机切;冷启动样本怎么造
  2. 特征与训练:类别特征编码与哈希冲突;embedding 维度怎么定;实时与离线特征一致性;特征重要性与 SHAP 的局限;归一化 / 分桶为什么很多模型不做;多值和序列特征怎么进模型;不收敛 / 过拟合怎么排查;增量训练 vs 全量重训
  3. 模型结构:FM 为什么能从 O(n²) 降到 O(nk);DeepFM 的 FM 与 DNN 怎么互补;DIN attention 和普通 attention 的区别;上万长序列怎么建模(SIM / ETA / TWIN 取舍);多任务跷跷板与 MMoE / PLE 的区别;ESMM 解决了什么、假设了什么;重排为什么不能只看精排分(DPP / MMR);生成式推荐改变了什么、没改变什么
  4. 评估指标:AUC 的物理含义与为什么不均衡不敏感;GAUC 怎么算、线上为什么看它;AUC 涨线上差的原因;NDCG / Recall@K / HR@K 的偏置;全库评估与负采样评估的差距;排序指标怎么和业务指标对齐;校准为什么在广告 / 出价场景必须要;离线涨但 AB 不显著先查什么
  5. 实验与因果:分流哈希与一致性;SRM 出现说明什么;样本量与功效不足的后果;CUPED 的前提;多重比较校正;新奇效应与长期效应怎么测;反向实验 / holdout 什么时候用;观察性数据什么条件下能说因果
  6. 系统与在线:一个请求的延迟预算怎么拆;超时预算怎么传播、下游超时怎么办;缓存击穿 / 雪崩怎么防;限流放哪层、限流后返回什么;模型热更新与灰度怎么做;向量检索的召回率-延迟权衡与增量更新;训练-服务 skew 怎么系统性发现;依赖挂了怎么定降级顺序

8.5 三档讲述

同一个项目准备三个版本:30 秒(电梯)、3 分钟(一面)、10 分钟(深挖)。30 秒只讲"业务问题 + 我的动作 + 结果数字";10 分钟要能讲清每一次取舍和失败。

录一遍自己的 3 分钟版本,回放时数"嗯、然后、就是"——这是最便宜的提升。

9. 投递策略与复盘

档 公司(示例) 投递时间 目的
冲 字节、快手、小红书、美团、阿里、腾讯、拼多多 W6–W8 拿面试
稳 B 站、滴滴、网易、携程、京东、得物、SHEIN、Shopee W4–W6 练手 + 保底
保 中厂、垂直行业、初创 W3–W4 先拿一个 offer 定心
  • 渠道优先级:内推 > 官网 > 招聘平台
  • 记录表字段:公司 / 岗位 / 渠道 / 投递日 / 状态 / 轮次 / 被问到的题 / 复盘链接
  • 纪律:每场面试 24 小时内写复盘;连续三场挂在同一类题,停下来补,不要继续投

10. 简历与差异化

同一件事的两种写法:

差:基于 DIN 实现了推荐排序模型,提升了效果。

好:在 KuaiRec 上搭多路召回 + DIN 精排,全库评估 HR@10 从 0.041 到 0.052(3 seed,95% CI 不重叠);推理 P99 从 42ms 降到 27ms(批处理 + 量化);上线前做特征一致性校验,定位并修复 3 处离线 / 在线偏差。

差别不在技术,在于有没有数字、有没有规模、有没有代价、有没有验证。

关于差异化,v1 写"主打系统工程 + 生态治理、算法作为第二腿",这个定位有风险:系统工程岗通常要求生产级后端经历(C++/Go/Java、高并发),2 周 FastAPI 撑不起来;生态治理岗 HC 少且偏策略。更现实的打法:

  • 主线:推荐算法(业务向)——项目 A + B 直接对口
  • 第一标签:评测与实验能力——这是业务岗最缺、也最容易补出差异的能力
  • 第二标签:能压延迟——把模型压进延迟预算是硬通货,但别把它当主卖点

11. 砍单规则:只剩 6 周 / 2 周 / 3 天

只剩 6 周:W1–2 项目 A 最小版(双塔 + 全库评估 + 一个精排 baseline);W3–4 项目 B 的 AB notebook;W5 简历 + 投递;W6 手撕 + 系统设计。砍掉 C 和 D。

只剩 2 周:项目 A 只做双塔 + 全库评估 + 热门兜底对比;简历压到一页;手撕 A 级;系统设计白板走一遍。

面试前 3 天:只复习自己的项目 + A 级手撕 + 三个业务 case。不要读新论文。

12. 几个坑(v2 版)

  • 学到第 12 周才开始投:这是最大的坑,v1 就踩了
  • 只做模型不做系统:一面问特征一致性就露馅
  • 只报离线指标:没有代价、没有显著性
  • 数字不可复现:口径没冻结,面试官一问实现细节就崩
  • 项目没有失败记录:讲不出坑,说明没真跑过
  • 追新模型不看约束:HSTU、OneRec 是加分项,不是主线
  • 简历写"熟悉"不写数字
  • 面试不复盘:同样的题挂三次

13. 本周就动手(三件事,6 小时)

  1. 拉 20 份目标 JD,填完第 2 节那张表(2h)
  2. 冻结评估口径 + 建实验台账(1h)
  3. 用 RecBole 跑通 BPR 基线,记下 HR@10 与 NDCG@10(3h)

附:资源清单

论文(按优先级读,每篇只回答一个问题)

论文 优先级 读完要能回答
YouTubeDNN (2016) P0 工业两阶段召回+排序的骨架长什么样
DIN (2018) P0 为什么要对用户历史做 attention
ESMM (2018) P0 CVR 训练样本缺失怎么用全空间建模
SASRec (2018) P0 序列推荐为什么能用 Transformer
MMoE (2018) P1 多目标为什么互相拉扯、门控怎么分
PLE (2020) P1 MMoE 的跷跷板怎么缓解
SIM (2020) P1 上万条长序列怎么塞进延迟预算
TIGER (2023) P1 语义 ID 怎么把召回变成生成
DIEN (2019) P2 兴趣漂移怎么建模
HSTU (2024) P2 把推荐当序列生成,和传统范式差在哪
OneRec (2025) P2 统一召回和排序的代价是什么
PRM (2019) P2 重排为什么要看上下文

数据集

数据 用途 备注
KuaiRec bandit、曝光偏差、AB 有 full exposure matrix,项目 B 首选
Tenrec 多场景、短视频 曝光 + 点击 + 时长齐全
Ali-CCP CTR / CVR 多目标 练 ESMM / MMoE / PLE
Criteo 大规模 CTR 练特征工程与稀疏模型
Amazon 2018 / 2023 序列推荐 注意 2018 版的 dense subset 争议
MovieLens-1M 快速验证 太小,容易过拟合,只当 baseline

工具:RecBole、Faiss、Redis、FastAPI、Docker、MLflow 或 W&B(实验追踪,从 W0 就要有)、wrk / locust、scipy / statsmodels。

书两本:王喆《深度学习推荐系统》(业务视角最好的一本)、项亮《推荐系统实践》(老,但当历史读)。

计划是给人用的,不是给人看的。12 周里允许掉一周链子,但项目 A 必须完整跑完一遍——它是所有面试话题的载体。