面试面经 · 拼多多
【拼多多】【Agent 开发】【暑期实习HR面】面经(八股+大模型项目+手撕)
拼多多 Agent 开发 暑期实习 HR 面经
背景:海外一年制硕士,投递方向为后端/Agent 应用开发,简历上一段大模型 Agent 项目经历。
题目摘要
- Go 语言基础:goroutine 与 channel 的使用场景、GMP 模型简述、内存逃逸分析。
- MySQL/Redis 八股:索引失效场景、事务隔离级别、Redis 持久化机制与缓存穿透/击穿/雪崩的应对。
- Agent 项目深挖:RAG 检索优化、Function Calling 的调度逻辑、上下文窗口管理、推理成本优化(Token 压缩、模型分级调用)。
- 手撕算法:实现一个带过期时间的 LRU 缓存(LeetCode 146 变体),要求
get和put操作平均时间复杂度 O(1),并支持设置每条数据的 TTL。
项目深挖
面试官对 Agent 项目的提问密度明显高于八股,几乎每个技术点都追问到落地细节。以下是我被追问到的问题及参考回答方向:
追问 1:你的 RAG 检索结果不准确时,如何定位是检索问题还是生成问题?
参考回答方向:不要直接说"调阈值"这种空话。我当时的回答是——先在检索阶段打印 top-k 文档的相似度分数分布,如果分数普遍偏低(比如低于 0.5),说明是 embedding 模型或 chunk 切分的问题;如果分数正常但答案仍不对,再检查 prompt 中是否给了足够的上下文约束。另外,我提了一个具体的方案:对同一问题分别做"仅检索不生成"和"检索+生成"的 A/B 测试,对比中间输出,能快速隔离问题层。
追问 2:Function Calling 的调度逻辑是怎么设计的?如果模型返回了一个不存在的函数名怎么办?
参考回答方向:我描述了自己的实现——用 JSON Schema 定义函数列表,模型输出结构化 JSON 后,先做 schema 校验再执行。对于非法函数名,我的处理是:捕获解析异常后,把错误信息拼接进下一轮 prompt,让模型重新生成。面试官追问"如果模型反复生成非法调用呢",我补充了最大重试次数(3 次)和 fallback 到纯文本回答的策略。这里重点是展示防御性编程思维,而不是只讲理想流程。
追问 3:上下文管理上,你怎么控制 Token 成本?
参考回答方向:我提到了三级策略——系统提示词固定不变、对话历史做滑动窗口(保留最近 N 轮)、长文档内容走 RAG 而不是全量塞进 prompt。面试官追问"滑动窗口截断后,之前的用户意图丢失怎么办",我的回答是:对窗口内每条历史消息计算一个重要性分数(基于关键词匹配和消息类型),分数低的优先丢弃,而不是简单按时间截断。这个回答明显引起了面试官的兴趣,他追问了具体实现细节。
手撕算法:带 TTL 的 LRU 缓存
题意:设计一个数据结构,支持 get(key)、put(key, value, ttl) 两个操作。get 时如果 key 已过期,视为不存在并删除。put 时如果 key 已存在则更新值和过期时间。要求所有操作平均 O(1)。
关键思路:
- 使用双向链表 + 哈希表实现基础 LRU,这是标准解法。
- TTL 处理有两个方向——惰性删除(访问时检查是否过期)和主动删除(后台协程扫描)。面试时我选择了惰性删除,因为实现简单且不会引入额外复杂度。
- 注意
put时如果 key 已存在但已过期,需要先删除旧节点再插入新节点,否则链表顺序会出错。 - 边界条件:
ttl <= 0时直接视为立即过期(或按题意约定),get过期 key 后链表结构需要同步更新。
面试官在代码完成后追问了一个问题:"如果 TTL 很长,但内存不足,你的实现会怎么处理?"我回答可以加一个最大容量限制,超限时先淘汰最久未访问且已过期的节点,其次淘汰最久未访问的未过期节点。这个追问考察的是对资源约束的敏感度。
准备建议
1. 不要只背八股,要能说出"为什么"
MySQL 索引失效的八股谁都会背,但面试官会追问"为什么最左前缀原则会失效"或"在什么场景下索引反而降低性能"。建议准备时对每个八股点至少准备一个实际场景案例,比如"我遇到过一张 500 万行的订单表,加索引后查询反而变慢,原因是区分度太低的列不适合建索引"。
2. Agent 项目必须准备量化指标
面试官对 Agent 项目的追问深度远超预期,如果简历上只写了"使用 RAG 提升回答准确率",大概率会被问"提升多少?怎么测的?"。建议提前准备:检索准确率、端到端回答准确率、平均响应延迟、Token 成本等至少 3 个维度的数据,并说清楚评测集的构建方式。没有真实数据的话,也要能说出"我设计了一个 50 条问题的评测集,人工标注了标准答案,用 BLEU 和人工评分双维度评估"这种话。
3. 手撕算法要练带变体的题,不要只刷原题
拼多多这轮考的是 LRU + TTL,本质上是标准 LRU 的变体。建议把 LeetCode 146 练熟后,尝试自己扩展:加 TTL、加容量上限、支持批量删除过期 key。另外建议练一下带超时的单机限流器(固定窗口/滑动窗口),这类题和 Agent 系统的资源控制强相关,出现概率不低。
一面通过,约 3 天后二面。整体感受是拼多多对 Agent 项目细节的追问深度明显高于一般互联网公司,建议重点打磨项目中的异常处理和成本优化思路。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。