面试面经 · 阿里巴巴
【阿里巴巴】【Agent 开发】【暑期实习二面】面经(八股+大模型项目+手撕)
背景
海外一年制硕士,计算机方向,投递阿里 Agent 开发暑期实习。此前有过一段大模型应用相关实习,二面整体偏工程落地与系统设计,面试时长约 70 分钟。
题目摘要
面试整体节奏紧凑,从基础八股快速过渡到项目深挖,最后一道手撕题收尾。核心考点如下:
- Go 语言基础:goroutine 与 channel 的底层实现、内存逃逸分析、GMP 调度模型中
P的本地队列与任务窃取机制。 - MySQL/Redis 八股:MySQL 的
RR隔离级别下MVCC快照读与当前读的区别、Next-Key Lock加锁范围;Redis 的zset跳表结构、缓存穿透与布隆过滤器误判率计算。 - RAG 项目深挖:针对文档问答场景,追问
chunk切分策略、embedding模型选型依据、混合检索的rerank必要性、以及如何评估检索质量。 - Function Calling 与上下文管理:大模型调用外部工具时的参数校验、错误恢复、多轮对话中工具调用历史的裁剪与压缩策略。
- 推理成本优化:针对线上服务的
prompt缓存设计、batch推理时机选择、以及降级方案。 - 手撕算法:设计一个支持
get/put/delete/getRandom全部 O(1) 时间复杂度的数据结构。关键思路是HashMap+ 动态数组,HashMap存 key 到数组索引的映射,删除时将数组末尾元素移到被删位置并更新映射,getRandom直接随机访问数组。
项目深挖
面试官对我简历上那个 RAG 问答项目明显做过功课,没有问“为什么用 RAG”这种泛泛问题,直接切入细节。
追问一:你说用了混合检索,向量检索和关键词检索的结果是怎么融合的?如果向量检索 top10 里混入了大量噪声,你怎么处理?
参考方向:融合策略上我用了 RRF(Reciprocal Rank Fusion),但面试官显然想听更深一层。我的回答分两点:第一,向量检索本身会做 score 归一化,但不同检索器分数分布不同,直接加权不可靠,所以用排名倒数的倒数做融合;第二,针对噪声问题,我在 rerank 阶段用了一个轻量级 cross-encoder 模型对融合后的 top20 重新打分,只保留 top5 进入 LLM 上下文。面试官接着问 rerank 模型怎么选、训练数据哪来的,我回答先用开源模型(如 bge-reranker-base),后续人工标注了一批困难负样本做微调,标注量约 2000 条。
追问二:你的 Function Calling 流程里,如果模型连续调用工具超过 5 次,或者调用陷入死循环,怎么处理?
参考方向:这是 Agent 工程里非常常见的问题。我当时的方案是:第一,设定单轮任务的最大工具调用次数上限(我用的 8 次),超过后强制终止并让模型基于已有信息做总结性回答;第二,每轮工具调用都会把当前任务目标、已执行的调用序列摘要、下一步候选动作注入到 prompt 中,让模型“看到”自己已经做了什么,降低重复调用概率;第三,针对特定工具的入参做 JSON Schema 校验,如果模型连续两次产生非法参数,直接报错返回给用户,不再重试。面试官追问如果工具本身执行失败(比如第三方 API 超时)怎么办,我补充了重试机制与降级策略——重试两次,仍失败则调用另一个同功能的备用工具。
追问三:你说对 prompt 做了缓存优化,具体缓存了什么?缓存命中率大概多少?
参考方向:我缓存的是系统提示词 + 历史对话的 prefix 部分,因为这类内容在每轮请求中都是重复的。实现上用的是 Redis,key 是对话 session id + 截止到某轮的消息摘要哈希,value 是 LLM 对这段前缀的 KV cache。命中率我没有精确统计,但粗估在 40%-60% 之间。面试官追问 KV cache 存在 Redis 里的序列化开销问题,我承认这是一个 trade-off——序列化 float 数组本身有成本,所以只对超过 10 轮的长对话启用。
准备建议
一、把项目里的“数字”和“阈值”全部准备好。 面试官一定会追问:chunk 大小为什么设 512?topk 为什么取 5?温度为什么设 0.1?召回率从多少提升到多少?这些都是你亲手调过的参数,回答不上来会非常减分。建议把项目里所有关键参数整理成一张表,每个参数附上“为什么选这个值”和“改大/改小会怎样”两句话。
二、手撕题不要只刷 LeetCode 热题,重点练“设计类数据结构”题。 Agent 开发岗位的算法题往往和数据流、缓存、并发相关。我这次遇到的是 O(1) 随机访问的数据结构,属于经典题,但面试官后续追问了“如果多 goroutine 并发调用 getRandom 怎么保证线程安全”,这就和 Go 基础挂钩了。建议把 LRU、LFU、插入删除随机 O(1) 这类题全部刷一遍,并且想清楚并发场景下的加锁粒度。
三、Agent 相关面试题要形成自己的“方法论框架”。 不要停留在“我会调 API”层面,要能说清楚:任务拆解策略(是单轮规划还是 ReAct 循环)、工具注册与参数校验流程、错误恢复机制、上下文窗口超限时的压缩策略、以及成本控制手段。建议画一张自己项目的完整流程图,从用户输入到最终响应,把每个环节可能出现的失败场景和应对方案都标注出来。
结果反馈
二面整体感觉偏工程实践,没有太多刁钻问题,只要项目是自己亲手做的、细节能自圆其说,通过难度不大。面完第三天收到约三面的通知,间隔一周。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。