NiceOffer

面试面经 · 美团

【美团】【Agent 开发】【暑期实习三面】面经(八股+大模型项目+手撕)

美团面经Agent 开发实习

海外一年制硕士,投的是美团到店/外卖侧 Agent 开发暑期实习,三轮技术面走完,三面偏架构与成本权衡,记录一下。

题目摘要

1. Go 语言基础:slice 扩容与 map 并发

  • slice 扩容规则:容量小于 1024 时翻倍,超过后按 1.25 倍左右增长,且要考虑内存对齐(roundupsize)。追问点在于"为什么扩容后原 slice 的修改不会影响新 slice"——底层数组被复制,指针指向变了。
  • map 非并发安全,并发读写直接 fatal error: concurrent map read and map write,这个不是 panic 能 recover 的。追问:sync.Map 适合读多写少还是写多读少?为什么它用 read + dirty 双层结构?

2. MySQL 八股:索引与事务

  • 聚簇索引与二级索引的回表过程,explain 里 type 从 ref 到 range 到 ALL 的含义。
  • 最左前缀原则在联合索引 (a, b, c) 上的实际表现:where b = ? and c = ? 走不走索引?为什么?
  • RR 隔离级别下 MVCC + 间隙锁如何解决幻读,next-key lock 的加锁范围。

3. Redis 八股:缓存一致性与大 key

  • 缓存穿透/击穿/雪崩的区别与对应方案(布隆过滤器、互斥锁重建、过期时间打散)。
  • 先删缓存还是先更库?延迟双删的适用场景与缺陷。
  • 大 key 的危害:阻塞单线程、网络拥塞、集群倾斜,如何用 redis-cli --bigkeys 排查。

4. 项目深挖:RAG 检索质量与上下文管理

  • 文档切分策略(固定长度 vs 语义切分)、embedding 模型选型、向量库召回 top-k 怎么定。
  • 多轮对话里上下文怎么裁剪:滑动窗口、摘要压缩、还是按相关性过滤。
  • Function Calling 的工具描述怎么写才能让模型稳定选中正确工具。

5. 推理成本优化

  • 同一个 Agent 任务,token 消耗从哪几个环节产生,怎么压。
  • 小模型做意图路由、大模型做最终生成的分层方案是否可行。

6. 手撕算法:LRU 缓存

题意:设计一个 LRU(最近最少使用)缓存结构,容量为 capacity,支持 get(key) 和 put(key, value),两者都要求 O(1) 时间复杂度,超出容量时淘汰最久未使用的键。

关键思路:哈希表 + 双向链表。哈希表存 key -> 链表节点,实现 O(1) 定位;双向链表维护访问顺序,头部是最近使用,尾部是最久未使用。get 命中后把节点移到头部;put 时若 key 存在则更新并移到头部,若不存在则新建节点插入头部,容量超限就删尾部节点并同步删哈希表。Go 里可以用 container/list,但面试官通常要求手写链表节点,注意 prev/next 指针和哨兵头尾节点的处理,边界能省掉一堆判空。

项目深挖

追问一:你的 RAG 系统召回率怎么评估的?

参考方向:不要只说"感觉效果还行"。要给出评估集构建方式——从真实 query 里采样,人工标注哪些 chunk 是相关的,算 Recall@k 和 MRR。然后说清楚优化手段分别提升了哪个指标:换 embedding 模型提升语义召回,加 BM25 混合检索提升关键词命中,加重排序(cross-encoder 或 bge-reranker)提升 top-1 精度。面试官想听的是"你有量化闭环",不是"我调了参数"。

追问二:多轮对话上下文越来越长,你怎么控制 token 成本?

参考方向:分三层讲。第一层是裁剪,保留 system prompt + 最近 N 轮 + 与当前 query 相关的历史轮次,用 embedding 相似度筛历史;第二层是压缩,把早期对话用模型总结成一段摘要,替换掉原始多轮;第三层是架构,把稳定的知识放 RAG 检索,不塞进 context。再补一句成本数据:比如优化后单次请求平均 token 从 X 降到 Y,响应延迟降了多少。

追问三:Function Calling 里模型选错工具或者参数格式错,怎么兜底?

参考方向:工具描述要写清楚用途边界和参数示例,避免多个工具语义重叠。解析层做 schema 校验,参数缺失或类型错就返回错误信息让模型重试,限制重试次数(比如 2 次)避免死循环。对于高频且确定的意图,可以直接规则路由,不走模型。最后提一句可观测性:把每次工具调用的入参、出参、耗时打日志,方便定位是模型问题还是工具本身问题。

准备建议

1. 八股不要背结论,要能讲清"为什么"

MySQL 索引和 Redis 缓存这两块,面试官几乎必追问底层机制。比如问到 MVCC,你要能说清 undo log 版本链 + ReadView 的可见性判断规则,而不是只答"RR 靠 MVCC 解决幻读"。建议每个知识点准备一个"现象—原因—方案"的完整链条,自己讲一遍录音回听。

2. 项目要准备可量化的指标和失败案例

Agent/RAG 项目最容易被问"效果怎么衡量"。提前整理好:数据集规模、召回率/准确率数字、token 成本、延迟数据。同时准备一个"踩过的坑",比如切分粒度太粗导致召回不准,后来怎么改的。有失败案例的项目描述比全是成功的更可信。

3. 手撕题按题型刷,不要只刷高频题

LRU、LFU、Top-K、合并区间、二叉树层序这类题在 Agent 岗出现频率高,因为能考察数据结构基本功。建议按"哈希+链表""堆""双指针""BFS/DFS"分类各刷 5-8 道,每道都手写一遍不用 IDE 补全,练到能一次写对边界。

三面结束当天收到 HR 反馈通过,约一周后走后续流程。

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