推荐与搜索 面试题
推荐算法面试题:召回、排序与样本陷阱
推荐岗面试有一个特点:几乎每个问题最后都会落到"样本和特征"上。模型结构可以背,但样本怎么构造、特征有没有穿越、线上指标为什么和离线不一致——这些只有真做过才答得出来。
这个方向在考什么
- 链路结构:召回 → 粗排 → 精排 → 重排,各阶段的目标与约束
- 样本构造:负采样、曝光未点击、样本偏差(position bias)
- 特征与实时性:特征穿越怎么产生、实时特征怎么保证一致性
- 评估:AUC 与 GAUC 的区别、离线涨线上不涨的常见原因
最常见的几个坑
- 只讲模型不讲链路,说不出召回和排序的目标差异
- 忽略样本偏差:用曝光未点击当负样本却不做纠偏
- GAUC 与 AUC 混为一谈,解释不了组内排序的意义
七天准备路线
- 第 1 天画一遍完整推荐链路,标出每阶段的候选集大小与延迟预算
- 第 2 天样本专场:负采样、样本偏差、样本穿越各准备一个案例
- 第 3 天特征工程:用户/物品/交叉特征,实时特征的一致性怎么保证
- 第 4 天评估专场:AUC、GAUC、NDCG、线上 AB 的关系
- 第 5-7 天按方向刷题,准备"离线涨线上不涨"的排查思路
推荐与搜索高频面试题
- 推荐系统为什么要做多阶段(召回-粗排-精排-重排)而不是一个模型直接排?每一阶段的核心目标有什么不同? · 1-3 年
- 双塔召回为什么必须最后才做用户侧和物品侧的交互?如果想加强交互能力,业界有哪些改进方向? · 3-5 年
- 冷启动问题你会怎么处理?新用户和新物品的策略一样吗?请分别说。 · 1-3 年
- 离线 AUC 涨了但线上 CTR 没涨,你会按什么顺序排查?请给出具体清单。 · 3-5 年
- CTR 模型里为什么要用 GAUC 而不只看 AUC?GAUC 是怎么算的、它解决了什么问题? · 1-3 年
- 特征工程里你会怎么做特征穿越(label leakage)的检查?请举一个推荐场景里常见的穿越例子。 · 3-5 年
- 多目标排序里,你手上的 CTR、CVR、时长这几个目标怎么融合成一个排序分?各目标样本量差异很大怎么办? · 3-5 年
- 你做过线上 A/B 实验,请说明分流、样本量、显著性判断的要点。如果一个实验 p 值不显著,你怎么处理? · 1-3 年
- 某电商推荐场景,item 约 500 万,日活用户 2000 万,用户平均有效行为 40 条。行为分布极度长尾:Top 1% 的 item 吃掉了约 60% 的行为。你用 ItemCF 做召回,上线后发现不同用户的召回结果高度雷同,基本集中在几百个头部爆款上。请给出你会采用的 item 相似度计算公式(写清楚热门惩罚项放在哪一项),并回答两点:(a) 为什么惩罚要作用在相似度层面,而不是在召回打分阶段给热门 item 乘一个降权系数;(b) 一个只有 2 条历史行为、且都是长尾商品的用户,你怎么保证他仍有足够的召回量。 · 3-5 年
- 某电商推荐系统的 i2i 协同过滤召回已经跑了两年:物品 200 万,日活 500 万,日新增用户-物品行为 2 亿条,离线用余弦相似度按天全量重算共现矩阵。最近两个季度,头部 5% 的商品占据了约 60% 的召回曝光位,长尾和新品几乎拿不到量。你接手后,会怎么定位这到底是「相似度定义」的问题还是「链路结构」的问题,并给出你的改造方案与验证口径? · 5 年以上
- 已知用户-物品二值行为矩阵(1 = 有过交互):u1={i1,i2,i3},u2={i2,i3,i4},u3={i3,i4},u4={i1}。请用 UserCF 给 u1 生成推荐:① 基于二值向量的余弦相似度,算出 u1-u2、u1-u3、u1-u4 分别是多少(保留两位小数);② 取 Top-2 邻居、按相似度加权,写出你会推给 u1 的物品和分数;③ 如果某个邻居是一个几乎什么都看过的超级活跃用户,这个打分公式会出什么问题,怎么改。 · 校招
- 你的双塔召回模型已上线,用户塔和 item 塔各输出 64 维向量,线上用 ANN 检索 top 500。item 塔的输入中包含 item_id 的 embedding。现在每天新增约 10 万个新 item,全量 item 有 8000 万,训练样本取自过去 30 天的曝光点击日志。业务反馈:新品发布后 24 小时内几乎拿不到任何曝光。请说明原因并给出改法,要具体到 item 塔里哪些特征留、哪些不留,以及新 item 的向量是怎么产生的。 · 3-5 年
- 你们有两路召回:一路是 i2i 协同过滤,一路是新上的双塔向量召回(用户塔+物品塔,内积检索)。双塔离线 recall@500 比 i2i 高 8 个点,但上线后大盘 CTR 只涨了 0.3%,链路延迟多了 15ms,物品向量索引每天全量重建一次、耗时 3 小时(这 3 小时里新品进不来)。你会怎么判断这路双塔值不值得保留,以及下一步怎么改? · 5 年以上
- 场景:1 亿物品、千万 DAU,召回要在毫秒级返回 500 个候选,你们用双塔(user 塔 + item 塔)做召回。请回答:① 为什么双塔能在这个量级下做到毫秒级,item 侧的计算发生在什么时刻;② user 塔和 item 塔能不能输入“该用户是否点击过这个物品的同类目”这种交叉特征,为什么;③ 训练时 batch=512、每行 1 个正样本,用 in-batch 负采样,这个 batch 里实际有多少个负样本?这种采样方式有什么偏置,怎么缓解。 · 校招
- 链路量级是:召回 1000 → 粗排 300 → 精排 30。粗排是一个小双塔,精排容量大得多。上线后发现约 15% 最终高转化的 item 在粗排阶段就被截断在 300 名之外,粗排离线 AUC 0.75、精排 0.82。把粗排候选从 300 扩到 500 只能挽回一小部分,延迟却涨了 40%。请说明你会从哪几个方向改,并说清每个方向为什么能减少这种截断。 · 3-5 年
- 当前链路是:召回 5000 → 粗排(轻量模型)选 500 → 精排(DNN+交叉特征)打分。你抽查发现,精排最终 top50 里约有 20% 的物品,在粗排阶段排在第 500~1500 名。同时精排模型刚升级过,离线 AUC 涨了,但大盘 GMV 没动。你会怎么排查,先动粗排还是先动精排? · 5 年以上
- 召回返回 3000 个候选,精排模型 batch=256 打一次分要 20ms,整条排序链路的预算只有 100ms。请回答:① 先做预算核算,说明为什么必须加一级粗排、粗排大概要截到多少个;② 粗排和精排的差别具体体现在哪几处(模型结构、特征量、样本、目标),不要只说“模型更小”;③ 有人提议“把精排的 200 维特征砍到 20 维直接给粗排用”,这个做法有什么问题,你会怎么让粗排尽量贴近精排的排序结果。 · 校招
- 你的排序模型同时输出 pCTR、pCVR、pOrder 三个目标,线上融合为 score = pCTR^α · pCVR^β · pPrice^γ。上线一周后 CTR 涨了 3%、CVR 跌了 5%、GMV 基本持平。请回答:(a) 你怎么判断问题出在融合权重,还是出在 CVR 这个目标本身没学好;(b) 如果要用离线日志自动搜 α、β、γ,你的优化目标是什么,怎么避免搜出来的权重只是过拟合历史策略。 · 3-5 年
- 主排序模型同时优化点击率和转化率:底层共享,上层分 CTR 塔和 CVR 塔,CVR 用点击样本训练。上线一段时间后发现,「点击率高、转化率低」的商品排名明显被顶上来,大盘 GMV 下滑但 CTR 略涨。你会怎么定位问题、怎么改训练目标和融合方式? · 5 年以上
- 视频推荐要同时优化点击率(CTR)和完播率。样本里有大量“曝光未点击”的样本,这些样本没有完播行为。请回答:① 为什么不能把两个目标按 0.7×click + 0.3×finish 合成一个 label,只训一个模型;② 如果把未点击样本的完播 label 直接置 0 参与完播任务训练,会有什么后果;③ 线上拿到两个目标的预测分之后,你会怎么合成一个排序分。 · 校招
共 36 道,这里列出前 20 道。 去题库检索
针对你的简历,生成一套这个方向的题
题目会挂回你简历里的项目,并按真实面试顺序追问。