NiceOffer

面试面经 · 唯品会

【唯品会】【大模型开发】【暑期实习二面】面经(八股+大模型项目+手撕)

唯品会面经大模型开发实习

唯品会 大模型开发 暑期实习二面面经

背景: 海外一年制硕士,计算机相关专业,一段中小厂 NLP 算法实习,主要用 Python 和 PyTorch,对 Java 后端有一定了解。

题目摘要

  1. Java 基础: HashMap 底层实现、ConcurrentHashMap 在 JDK 7 和 8 中的区别、volatile 与 synchronized 的区别。
  2. MySQL/Redis: 事务隔离级别、MVCC 原理、Redis 持久化机制(RDB vs AOF)以及缓存穿透/击穿/雪崩的解决方案。
  3. 大模型项目深挖: 围绕简历中的 RAG 项目,追问 chunk 切分策略、向量召回优化、混合检索(BM25 + 向量)的融合策略,以及 Function Calling 的异常处理。
  4. 手撕算法: 力扣 239 滑动窗口最大值(Hard)。要求先讲思路,再写代码,最后分析时间/空间复杂度。

项目深挖

追问一:你提到 RAG 系统在召回阶段做了混合检索,具体如何融合 BM25 和向量检索的分数?

参考回答方向:先说明两者互补性——BM25 擅长精确匹配(如产品型号、专有名词),向量检索擅长语义相似。融合策略可以分三层:一是分数归一化(如 Min-Max 或 Z-Score),因为两者量纲不同;二是权重分配,我采用的是动态权重,根据 query 长度和命中词比例调整,短 query 偏向向量检索,长 query 偏向 BM25;三是 RRF(Reciprocal Rank Fusion)作为兜底,对两路召回结果按排名倒数加权。最后补充一句:实际线上效果提升约 4.2%(Recall@5),主要收益来自长尾专有名词的召回。

追问二:Function Calling 场景下,如果模型返回的 JSON 参数格式错误或字段缺失,你怎么处理?

参考回答方向:分三层防御。第一层是前置约束,在 system prompt 中明确 JSON Schema 并给 few-shot 示例;第二层是后置解析,用 json.loads 失败后先尝试正则提取 JSON 片段,再不行就用 json5demjson3 容错解析;第三层是业务兜底,对必填字段做默认值填充,同时把错误样本记录到日志,定期用这些 bad case 做模型微调或 prompt 优化。面试官比较关注的是你有没有实际遇到过这类问题,以及修复闭环。

追问三:你的 Agent 在长对话中如何管理上下文,避免 token 爆炸?

参考回答方向:我用了三层策略。一是消息裁剪——保留 system prompt 和最近的 N 轮对话,中间历史做摘要压缩(用 LLM 生成结构化摘要,存到 Redis);二是关键信息抽取——把用户偏好、订单信息等结构化字段单独存储,对话时动态注入,而非全量塞入历史;三是 token 预算控制——设定每轮请求的 token 上限,若超限则优先丢弃工具调用结果(通常最长且最不重要)。另外提一句:摘要本身也会累积,我设置了一个阈值,当摘要超过 2K token 时做二次摘要,类似滚动窗口。

准备建议

  1. 把项目里的每个技术选型都准备一个"为什么不用另一个方案"的对比。 比如 RAG 里为什么用向量数据库而不是 Elasticsearch 的 dense vector 功能,为什么选 BGE-M3 而不是 OpenAI embedding,为什么用 RRF 而不是 Convex Combination。面试官几乎必问选型理由,能体现你做过权衡而非只是调包。
  1. 手撕算法不要只刷 Hot 100,重点练滑动窗口、双指针、前缀和这类"边界条件多"的题。 唯品会二面手撕难度不低,面试官会现场改条件(比如把窗口大小改为动态),所以写完后一定要自己跑两个边界用例(空数组、k=1、k=n)。
  1. 准备一个"模型成本优化"的故事。 电商场景对成本极其敏感,面试官很关心你是否有意识控制推理开销。可以提前算好:你的项目每天调用量、单次平均 token 数、用 GPT-4o-mini 替代 GPT-4 能省多少钱,或者用 prompt caching 省了多少。这类量化数据非常加分。

结果反馈

一面通过,隔了 3 个工作日约的二面,整体面试节奏偏快,面试官对项目细节追问很细但态度友好,目前等三面通知中。

想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。