NiceOffer

面试面经 · 拼多多

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

拼多多面经大模型开发实习

拼多多 大模型开发 暑期实习二面面经

背景:海外一年制硕士,主攻 NLP 与 LLM 应用,有一段中小厂大模型平台开发实习。

题目摘要

  1. Go 并发模型:GMP 调度原理、channel 与 mutex 选型场景,协程泄漏如何排查。
  2. MySQL 索引与事务:联合索引最左匹配原则推导、RR 隔离级别下间隙锁如何避免幻读。
  3. Redis 缓存一致性:Cache Aside 与 Delete/Write-Back 策略对比,延迟双删的缺陷。
  4. RAG 项目深挖:针对简历中的知识库问答系统,追问 chunk 切分策略、召回融合、幻觉消减手段。
  5. Function Calling 实现:如何约束模型输出格式、参数校验与错误恢复机制。
  6. 手撕算法题「实现一个带过期时间的 LRU 缓存」(get/put 均 O(1),支持自定义 TTL)。

项目深挖

追问 1:你的 RAG 系统在召回阶段如何平衡相关性与多样性?

参考回答方向:先讲粗排用 BM25 + 向量检索双路召回,用 RRF(Reciprocal Rank Fusion)合并结果。重点强调不是简单取 TopK,而是按文档来源做 MMR(最大边际相关性)重排,避免同一段落重复占据上下文窗口。面试官真正想听的是你是否意识到「高相关但冗余的片段会稀释 LLM 注意力」,并能给出量化手段(如设定相似度阈值 0.85 以上直接过滤)。

追问 2:Function Calling 时,如果模型返回了不存在的函数名或错误参数,你怎么处理?

参考回答方向:不要只答「让模型重试」。我会分三层防御:第一层,在 system prompt 中给出 JSON Schema 并强制 response_format 为 json_object;第二层,代码中用 Pydantic 做运行时校验,捕获 ValidationError 后把错误信息拼回 prompt,让模型基于错误反馈重新生成;第三层,如果连续两次失败,则降级为纯文本回复并记录日志,用于后续微调数据采集。面试官会追问「重试时 temperature 要不要调」,回答要调低至 0.2 以下以保证稳定性。

追问 3:你提到用上下文压缩降低推理成本,具体怎么做?

参考回答方向:分两个维度。一是对话历史压缩,用 LLM 对超过 N 轮的旧消息做摘要,并保留工具调用结果中的关键字段(如订单号、金额),丢弃无关日志。二是检索内容压缩,对召回文档先做「相关性打分 + 关键句抽取」,只保留 200 字以内的精华片段。成本数据要具体:压缩后单次请求 token 量下降约 40%,配合 prompt 缓存,整体 API 费用降低 30% 左右。

手撕算法题:带过期时间的 LRU 缓存

题意:设计一个数据结构,支持 get(key)put(key, value, ttl) 操作。get 若 key 不存在或已过期返回 -1;put 写入时若 key 已存在则更新值并重置过期时间,若容量已满则淘汰最久未使用且已过期的条目,若均未过期则淘汰最久未使用的条目。所有操作平均时间复杂度 O(1)。

关键思路

  • 使用双向链表 + 哈希表实现基础 LRU,链表头为最近使用,尾为最久未使用。
  • 额外维护一个小顶堆(按过期时间戳排序)或惰性删除队列来处理过期。推荐小顶堆:每次 getput 时,先检查堆顶元素是否过期,若过期则从哈希表和链表中删除,直到堆顶未过期。
  • 注意边界:put 更新已有 key 时,需要同时更新链表位置和堆中的过期时间(可标记为失效并推入新节点,避免删除堆中任意节点的 O(n) 操作)。
  • 面试时先讲清「双向链表 + 哈希表」解决 LRU,再补充「小顶堆解决 TTL」,最后说明为什么不用单链表(删除需 O(n))和为什么不用优先队列扫全表(复杂度退化)。

准备建议

  1. Go 语言重点背 GMP 和内存模型:拼多多后端技术栈以 Go 为主,二面必问 goroutine 调度。建议画出 GMP 三结构图,能解释「为什么 M 阻塞时 G 会被抢占到其他 M」以及 runtime.Goexit()return 的区别。同时准备一个协程泄漏的真实排查案例(如用 pprof 抓 goroutine 栈,发现 channel 未关闭导致阻塞)。
  2. RAG 项目准备量化指标:不要只说「效果不错」,要背出具体数字。比如「chunk 大小 512 字、重叠 64 字时召回率 0.82,增大到 1024 字后召回率降到 0.75,因为长文本稀释了语义向量」。面试官一旦听到你在调参时有对比实验,会认为你有工程直觉。
  3. 算法题刷近两周高频题:拼多多实习面试手撕题常考 LRU 变种(TTL、LFU)、TopK 高频词、合并 K 个有序链表。建议把 LeetCode 146 和 460 的代码默写三遍,并手动推导「链表节点移动」的指针变化过程。如果时间紧张,优先保证 LRU 和 TopK 两个方向。

结果反馈

一面通过,约 5 天后约了二面,二面结束后 2 小时收到 HR 电话约三面(技术终面)。

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