小红书大模型算法面经:笔试到 HR 面全流程
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
笔试(机考)
- 给一批笔记互动数据,按加权热度倒排再去重,输出前 N。
- 图文匹配题,判断一条评论属于哪篇笔记,给出特征思路。
- 一个生成式排序,要求按时间衰减,怎么设计打分?
- 多模态特征怎么融合,早期融合还是晚期?
一面
- 多模态模型遇到图文不一致的样本,训练和上线分别怎么处理?
- 做内容理解时类别太多标注不够,你怎么办?
- 长文本分类,截断和摘要你选哪个,为什么?
- LoRA 讲讲,和全量微调你怎么选?
- 显存炸了你有哪几招救?
- 你训过最大的模型多大,分布式怎么搭的?
- 过拟合你怎么发现,又怎么治?
- 评测指标除了准确率你还看什么?
- 模型上线后被人反馈「答非所问」,你怎么查?
- 数据漂移你怎么监测?
二面
- 推荐模型上线后核心指标掉了,你从哪几个环节定位?
- 召回和排序分别怎么优化,先动哪头?
- 冷启动你有什么办法,新用户新内容都算。
- AB 实验你怎么设计,指标冲突听谁的?
- 特征穿越是什么,你怎么防?
- 离线训练和在线服务特征不一致,怎么对齐?
- 生成内容质量怎么评估,人工和自动两条线怎么搭?
- 多目标排序你怎么融合,权重谁定?
- 你做过最失败的一次模型迭代是什么?
HR 面与反问
- 你为什么想来我们这,对业务了解多少?
- 你期望的团队氛围是什么样的?
- 反问:这个组的模型迭代节奏多快,有没有评测基建?
- 反问:算法和工程在这边怎么协作?
- 同时接三个需求你先做什么?
手撕
- 手写链表两两交换节点,注意别把指针弄断,并说清空链表、单节点这两个边界。
《参考解析》
机考三题的关键点
加权热度倒排要先把「加权」的口径问清楚或自己定义并说明:常见是 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);评估冷启动效果要单独切新内容、新用户样本,看整体指标会被老用户掩盖。