NiceOffer

面试面经 · 蚂蚁集团

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

蚂蚁集团面经Agent 开发实习

背景

海外一年制硕士,本科国内中游 211 计算机,无大厂实习,投的是蚂蚁集团 Agent 开发暑期实习。三面是交叉面,面试官来自不同 BU,全程 70 分钟,没有自我介绍,直接进项目。

题目摘要

  1. Go 语言基础slice 的底层结构、扩容规则,以及 slice 作为函数参数传递时哪些操作会影响原切片、哪些不会;追问 map 并发读写为什么 panic、sync.Map 的适用场景。
  2. MySQL / Redis 八股:聚簇索引与回表、EXPLAINtype 字段从好到坏的顺序;Redis 大 key 怎么排查和处理、缓存穿透/击穿的落地解法,追问「布隆过滤器能不能删元素」。
  3. Agent 项目深挖:RAG 检索链路里 chunk 怎么切、embedding 模型选型依据、召回后有没有做 rerank;Function Calling 的工具描述怎么写、多工具冲突怎么处理;上下文窗口快满时的裁剪策略;推理成本怎么算、怎么降。
  4. 手撕算法:给一个字符串数组,求所有字符串的最长公共前缀;进阶问「如果数组动态增删,怎么设计数据结构让查询更快」。关键思路:基础版纵向扫描逐列比较,复杂度 O(N×M);进阶版用 Trie,每个节点维护子树计数,增删是 O(L),查询沿 Trie 走到底即可,但要注意删除时计数归零的节点要剪枝。

项目深挖

我简历上写了一个基于 RAG 的文档问答 Agent,面试官几乎全程围着它问,三个追问印象最深。

追问一:你的 chunk 是怎么切的,为什么这么切?

参考回答方向:不要只说「按 512 token 切」。要讲清楚切分策略和数据形态的关系——技术文档有强标题层级,所以先按 Markdown 标题切,超长段落再按语义边界二次切,并保留 10%~15% 的 overlap 防止答案被截断。同时说明你试过固定长度切分,效果差在哪(跨段落的答案被割裂、检索命中率下降),用对比数据支撑。面试官在意的是你有没有做过 A/B,而不是背了一个参数。

追问二:检索召回了 5 条,但模型还是答错,你怎么定位是检索的问题还是生成的问题?

参考回答方向:分层排查。先看召回内容里有没有正确答案(recall 指标),如果没有就是检索问题——查 embedding 是否适配中文、query 是否需要改写、要不要加 BM25 做混合检索;如果召回里有答案但模型没答对,就是生成问题——查 prompt 里上下文顺序(关键信息放头尾)、是否被无关 chunk 干扰、要不要加 rerank 把最相关的提到最前。这个回答的价值在于展示你有可复现的 debug 路径,而不是「调调 prompt 就好了」。

追问三:你的 Agent 上下文越来越长,成本和延迟都上去了,怎么办?

参考回答方向:分三层讲。第一层是裁剪,滑动窗口保留最近 N 轮 + 系统 prompt,历史轮次做摘要压缩;第二层是检索化,把长历史存进向量库,每轮只召回相关片段而不是全量塞进去;第三层是模型分层,简单意图识别用小模型、复杂推理才走大模型,配合 prompt cache 复用固定前缀。最好能报一个量化的数,比如优化后单次对话 token 从 8k 降到 2.5k、P99 延迟降了 40%。

准备建议

  1. 把项目里的每个数字都问自己一遍「为什么」。chunk size、top-k、温度、超时时间,任何一个参数被追问「为什么是 5 不是 3」都要答得出取舍逻辑。面试官不要求参数最优,但要求你知道自己在权衡什么。答不上来的参数,回去做一次消融实验补上。
  1. 八股不要背结论,背「为什么」和「边界」。比如 Redis 缓存击穿,背「加互斥锁」没用,要能说清楚互斥锁在高并发下的等待超时怎么设、热点 key 永不过期加逻辑过期怎么配合。MySQL 索引同理,能画出 B+ 树结构、说清为什么范围查询后联合索引后续字段失效,比背 type 顺序有用得多。
  1. 手撕题按「先讲思路再写码」练。这次最长公共前缀我上来就写,写到一半面试官打断问「如果字符串很长但数量很少呢」,才发现自己没考虑横向扫描的替代方案。建议每道题先花 30 秒说清暴力解、复杂度、优化方向,再动手,并且主动提进阶场景(动态增删、大数据量、内存受限),这比闷头写对更能拿分。

结果

三面通过,3 天后收到 HR 面通知。

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