推荐算法一面、二面、三面面经
完整信息
本篇目录
先结算。
一面 10.26,50 分钟,过
二面 10.30,55 分钟,过
三面 11.01,45 分钟,过
10.05 HR 打电话说意向,让等正式函
一共 22 道题,一面偏项目,二面偏模型,三面偏业务和取舍。
一面
自我介绍。
讲一个你做得最深的召回项目,目标是啥,指标涨了多少。
双塔召回,用户塔和物品塔分别喂了什么特征。
用户塔里放历史行为序列,序列长度多少,怎么截断。
物品塔和用户塔的输出做内积,为什么不是 concat 过 MLP。
内积有什么表达上的限制,怎么缓解。
训练样本怎么构造,曝光未点击算负样本吗。
曝光未点击里有多少是没看见的,你怎么区分。
负采样比例多少,采样之后损失函数要不要加权。 [ 答要,权重是 1/采样率。他问为什么,我说否则预估的点击率会偏高 ]
特征里有统计类特征吗,窗口多大。
统计特征怎么防止穿越。 [ 答按天分区、只用到 T-1。他问那当天实时的呢 ]
这题后面追了三层。实时的用 Flink 算,窗口 5 分钟,写进 KV。他问训练的时候怎么拿到这个特征,我说用 T-1 的离线值补。他问那线上和训练不就对不上了。我说对,这是我们现在最大的一个问题。
再往下他问,如果非要让训练用上实时特征,怎么办。我说只能做特征回填,把线上请求的 feature 落盘,训练时 join。他问落盘延迟多少,这就是第 12 题。
实时特征怎么接,延迟多少,延迟期间用什么补。
模型上线后 AUC 涨了,线上 CTR 没涨,可能是什么原因。
二面
多目标怎么做的,CTR 和 CVR 是两个模型还是一个。
如果用两个模型,CVR 的训练样本只有点击样本,样本空间不一致怎么办。
ESMM 怎么解决这个问题的,它真的解决了还是有别的问题。 [ 答用全样本空间建模,pCTCVR = pCTR × pCVR。他说那只是一种约束,不是真的学到了 ]
他让我说具体点。我的理解是,ESMM 把 CVR 塔和 CTR 塔共享 embedding,用曝光样本的 CTCVR 做监督,CVR 只在点击样本上有梯度。所以问题没被消除,只是被约束住了。他点头,说那 CVR 塔学到的分布还是有偏。
我当时接了一句"那可以加一个 IPW 校正"。他问权重怎么估。我答不上来。
排序公式用 pCTR × pCVR × price,价格这一项会不会让模型学歪。
位置偏差怎么处理,训练时去掉位置特征,线上再加,这样做的问题在哪。
序列模型用的什么,DIN 的 attention 和普通的 target attention 差在哪。
长序列怎么处理,全量塞进去显存够吗。
冷启动 item 没有行为,怎么排。
新用户没有历史,你们给什么兜底。
三面
- 你们这套系统的 QPS 多少,P99 多少,模型多大。
- 模型从训练到上线要多久,中间卡在哪。
- 如果让你把现在这个模型换成一个 10 倍大的,你会先动哪。
- 你怎么衡量一次模型迭代的收益,离线指标和线上指标打架听谁的。
- AB 实验的样本量怎么算的,跑了几天。
- 有一个实验线上涨了 2%,但人均使用时长掉了,你怎么判断。
- 你怎么看现在的大模型做推荐,能替代现在的排序吗。
- 反问。
手撕:给 K 个已经按分数降序排列的召回列表,每个列表长度不等,要求合并去重后取 TopN,并说明复杂度。
我写的是堆,每个列表放一个游标,取最大值,用 set 去重。他问如果 TopN 只要 100,K 是 20,堆和直接归并哪个快。我说堆,O(N log K)。他说 N 是 100 的话,直接扫 20 次也差不多。这个我承认没想。
第二个手撕:写 AUC 的计算,要求处理并列分数。
我用了排序 + 秩,并列取平均秩。他问为什么不直接两重循环。我说 O(n²) 线上跑不动,他说离线算 AUC 又不看这个。
这场能过,我猜是因为第 13 题。我答的是"离线 AUC 涨、线上 CTR 不涨,大概率是训练和 serving 的特征不一致,尤其是实时特征回填的延迟"。他追问了一句"你怎么查的",我说我把线上请求的 feature dump 下来,和训练样本 join,比了 50 个特征的分位数,发现有两个偏差超过 3 个标准差。
这是我真干过的事,所以说得很顺。其他题都是套路。
三面第 29 题我答得不好。我说大模型短期内替代不了排序,因为延迟和成本。他说"我没问替代,我问你怎么看"。我改口说可能会把召回和排序揉成一个生成式模型,但样本效率和可控性还是问题。他点了点头,没再追。
推荐岗的面试题其实都不难,难的是每道题后面那句"为什么"。你答完一个方案,他问为什么不用另一个,你答完对比,他问那你们线上是怎么验证的。
—— AIGC小白入门记
本篇目录
当前问题0139
- 01
自我介绍。
- 02
讲一个你做得最深的召回项目,目标是啥,指标涨了多少。
- 03
双塔召回,用户塔和物品塔分别喂了什么特征。
- 04
用户塔里放历史行为序列,序列长度多少,怎么截断。
- 05
物品塔和用户塔的输出做内积,为什么不是 concat 过 MLP。
- 06
内积有什么表达上的限制,怎么缓解。
- 07
训练样本怎么构造,曝光未点击算负样本吗。
- 08
曝光未点击里有多少是没看见的,你怎么区分。
- 09
负采样比例多少,采样之后损失函数要不要加权。 \[ 答要,权重是 1/采样率。他问为什么,我说否则预估的点击率会偏高 \]
- 10
特征里有统计类特征吗,窗口多大。
- 11
统计特征怎么防止穿越。 \[ 答按天分区、只用到 T-1。他问那当天实时的呢 \]
- 12
实时特征怎么接,延迟多少,延迟期间用什么补。
- 13
模型上线后 AUC 涨了,线上 CTR 没涨,可能是什么原因。
- 14
多目标怎么做的,CTR 和 CVR 是两个模型还是一个。
- 15
如果用两个模型,CVR 的训练样本只有点击样本,样本空间不一致怎么办。
- 16
ESMM 怎么解决这个问题的,它真的解决了还是有别的问题。 \[ 答用全样本空间建模,pCTCVR = pCTR × pCVR。他说那只是一种约束,不是真的学到了 \]
- 17
排序公式用 pCTR × pCVR × price,价格这一项会不会让模型学歪。
- 18
位置偏差怎么处理,训练时去掉位置特征,线上再加,这样做的问题在哪。
- 19
序列模型用的什么,DIN 的 attention 和普通的 target attention 差在哪。
- 20
长序列怎么处理,全量塞进去显存够吗。
- 21
冷启动 item 没有行为,怎么排。
- 22
新用户没有历史,你们给什么兜底。
- 23
你们这套系统的 QPS 多少,P99 多少,模型多大。
- 24
模型从训练到上线要多久,中间卡在哪。
- 25
如果让你把现在这个模型换成一个 10 倍大的,你会先动哪。
- 26
你怎么衡量一次模型迭代的收益,离线指标和线上指标打架听谁的。
- 27
AB 实验的样本量怎么算的,跑了几天。
- 28
有一个实验线上涨了 2%,但人均使用时长掉了,你怎么判断。
- 29
你怎么看现在的大模型做推荐,能替代现在的排序吗。
- 30
讲一个你做得最深的召回项目,目标是啥,指标涨了多少。
- 31
序列模型用的什么,DIN 的 attention 和普通的 target attention 差在哪。
- 32
他问训练的时候怎么拿到这个特征
- 33
如果非要让训练用上实时特征,怎么办
- 34
他问权重怎么估
- 35
他追问了一句"你怎么查的"
- 36
手撕:给 K 个已经按分数降序排列的召回列表,每个列表长度不等,要求合并去重后取 TopN,并说明复杂度。
- 37
他问如果 TopN 只要 100,K 是 20,堆和直接归并哪个快。
- 38
第二个手撕:写 AUC 的计算,要求处理并列分数。
- 39
他问为什么不直接两重循环