面灵AI→

小红书大模型算法面经:笔试到 HR 面全流程

时间
2026-09
来源
牛客网

《面试题目》

笔试(机考)

  1. 给一批笔记互动数据,按加权热度倒排再去重,输出前 N。
  2. 图文匹配题,判断一条评论属于哪篇笔记,给出特征思路。
  3. 一个生成式排序,要求按时间衰减,怎么设计打分?
  4. 多模态特征怎么融合,早期融合还是晚期?

一面

  1. 多模态模型遇到图文不一致的样本,训练和上线分别怎么处理?
  2. 做内容理解时类别太多标注不够,你怎么办?
  3. 长文本分类,截断和摘要你选哪个,为什么?
  4. LoRA 讲讲,和全量微调你怎么选?
  5. 显存炸了你有哪几招救?
  6. 你训过最大的模型多大,分布式怎么搭的?
  7. 过拟合你怎么发现,又怎么治?
  8. 评测指标除了准确率你还看什么?
  9. 模型上线后被人反馈「答非所问」,你怎么查?
  10. 数据漂移你怎么监测?

二面

  1. 推荐模型上线后核心指标掉了,你从哪几个环节定位?
  2. 召回和排序分别怎么优化,先动哪头?
  3. 冷启动你有什么办法,新用户新内容都算。
  4. AB 实验你怎么设计,指标冲突听谁的?
  5. 特征穿越是什么,你怎么防?
  6. 离线训练和在线服务特征不一致,怎么对齐?
  7. 生成内容质量怎么评估,人工和自动两条线怎么搭?
  8. 多目标排序你怎么融合,权重谁定?
  9. 你做过最失败的一次模型迭代是什么?

HR 面与反问

  1. 你为什么想来我们这,对业务了解多少?
  2. 你期望的团队氛围是什么样的?
  3. 反问:这个组的模型迭代节奏多快,有没有评测基建?
  4. 反问:算法和工程在这边怎么协作?
  5. 同时接三个需求你先做什么?

手撕

  1. 手写链表两两交换节点,注意别把指针弄断,并说清空链表、单节点这两个边界。

《参考解析》

机考三题的关键点

加权热度倒排要先把「加权」的口径问清楚或自己定义并说明:常见是 score = 点赞*w1 + 收藏*w2 + 评论*w3 + 分享*w4,时间长的一般做时间衰减(score / (t + 2)^1.5 这类 Hacker News 式公式)或先按小时桶聚合再排序;去重指同一作者或同一笔记只保留一条,用 set 记 key,注意「先排序再去重」和「先去重再排序」结果不同,要按题意选。时间衰减排序的打分本质是「热度分 × 衰减因子」,衰减因子用指数 exp(-λ·Δt) 好过线性截断,λ 由半衰期反推(希望 12 小时衰减一半就令 λ = ln2 / 12);在线服务里不要每次现算,按时间桶预聚合。图文匹配题给特征思路时按三层说:文本侧(评论内容与标题/正文的语义相似度、关键词重合、话题标签)、视觉侧(评论提及的物体/场景与图片标签的匹配)、行为侧(评论时间与笔记发布时间的接近程度、用户历史互动),最后给一个可训练的排序模型而不是纯规则。另外机考前值得记住的一条经验:别急着写代码,先把题干里藏的边界(空输入、N 超过总数、并列分数怎么排)圈出来。

LoRA 与全量微调怎么选

LoRA 冻结原权重,在注意力(一般至少 q_proj、v_proj,要更好效果加 k_proj、o_proj、gate/up/down_proj)旁挂低秩矩阵 ΔW = B·A,秩 r 取 8~64,α 常取 2r,可训练参数约占全量的 0.1%1%。选型看三点:数据量(几万条以内、任务与基座分布接近就用 LoRA;百万级以上、要注入大量新知识或改整体风格才考虑全量)、显存(7B 全量微调要存参数 + 梯度 + 优化器状态,通常 8×A100 80G 起步,LoRA 单卡 24G 能跑)、上线成本(LoRA 权重几十 MB,一个基座可挂多个 adapter 按请求切换,全量微调每任务一份完整权重)。两个容易踩的点:LoRA 学习率要比全量高一个量级(1e-43e-4),且训练完可以 merge 回原权重获得零额外推理延迟。

显存炸了怎么救

先分清训练还是推理。训练侧:降 batch 并用梯度累积凑等效 batch;bf16 混合精度 + 梯度检查点(用约 30% 时间换激活显存);优化器换 8-bit Adam 或 Adafactor;上 ZeRO-1/2/3 分片优化器状态、梯度、参数;长序列用 FlashAttention 避免 O(L²) 的注意力矩阵落地,并做 packing 减少 padding 浪费。推理侧大头是 KV Cache,用 GQA/MQA 模型、PagedAttention、KV Cache 量化,并把 max_num_seqs、max_model_len 压下来。诊断先跑 torch.cuda.memory_summary() 分辨是参数、激活还是碎片,碎片问题可以设 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True。

过拟合怎么发现、怎么治

发现看两条曲线:train loss 继续降而验证 loss 在某轮后回升;训练集指标与留出集指标差距持续拉大。生成任务上还会表现为复读训练样本、对轻微改写的输入不鲁棒。治的手段按性价比排:加数据、去重与数据增强(去重同时能减少记忆化)、dropout 与 weight decay、早停、减小 LoRA 秩或只训部分层、标签平滑。评测的坑在切分:必须按来源或时间切 holdout,别随机切——同一篇笔记的评论被切到两边会造成指标虚高。

特征穿越与离线在线不一致

特征穿越指训练样本里混进了预测时刻拿不到的信息,典型如用整段会话的统计量预测其中某一步、用了未来日期的统计特征、或 join 到了标签产生之后的特征快照。防法是所有特征都按「特征时间戳 < 标签时间戳」过滤,用 point-in-time join,离线特征表按天分区且训练只取 T-1 及以前,再补一条单测断言特征时间不晚于标签时间。离线在线不一致一般来自三条链路:① 两套代码实现不同——统一到同一份特征定义(特征平台用同一份 DSL 生成离线和在线逻辑);② 在线取实时值、离线取 T+1 快照——离线也回放实时日志,或实时特征双写;③ 缺失值和默认值处理不同——把缺失策略写进特征定义,并每天抽样比对同 key 的线上线下特征分布,PSI 超过 0.1 报警。

AB 实验设计与指标冲突

实验前先定唯一主指标和护栏指标(时长、投诉率、退款率这类),按 n ≈ 16σ²/Δ² 估算每组样本量,然后按用户 id 哈希分流保证同一用户始终在同一组;有强网络效应的场景(社交、内容供给)要按城市或地域做 cluster 分流。绝对不能中途偷看(peeking 会显著抬高假阳性),要么固定周期要么用序贯检验。指标冲突时的裁决顺序:主指标显著为正且护栏指标未恶化才上;主指标不显著但护栏明显变差直接停;出现「点击涨、留存跌」这类短期透支长期的情况,看长期 holdback 组的曲线,上线后保留 1%5% 流量观察 24 周再全量。

多模态图文不一致与冷启动

图文不一致要分训练和上线处理。训练侧把一致性当显式目标:用对比学习拉近真实图文对的表征,构造 hard negative(同品类不同笔记的图)让模型学会区分;对明显冲突的样本单独打标做一致性判别任务,而不是硬塞进主任务,否则模型学到的是「图文无关也能匹配」。上线侧加一层质量门:先算图文一致性分,低于阈值的降权或走规则兜底,同时把不一致样本回流训练集。冷启动的核心是别依赖 id 类特征:新内容用内容侧特征(图文、标题、类目、作者)走双塔召回,新用户用注册兴趣 + 热门兜底 + 固定比例的探索流量(ε-greedy 或 Thompson Sampling);评估冷启动效果要单独切新内容、新用户样本,看整体指标会被老用户掩盖。