NiceOffer

面试面经 · 阿里巴巴

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

阿里巴巴面经Agent 开发实习

海外一年制硕士,投递阿里云智能 Agent 开发暑期实习,三面技术终面,面试官是团队 P9。

题目摘要

  1. Go 语言基础:sync.Map 的适用场景与底层实现,为什么它不适合写多读少的场景;context 的取消传播机制,WithCancel 的父子链如何触发。
  2. MySQL / Redis 八股:聚簇索引与二级索引的回表过程,explain 中 type=range 与 ref 的区别;Redis 的 ziplist 与 quicklist 演进,以及大 key 在 Agent 会话缓存场景下的危害。
  3. Agent 项目深挖:RAG 检索链路中 chunk 策略、rerank 模型选型、召回率与延迟的权衡;Function Calling 的工具描述如何写才能降低模型误调用率;多轮对话的上下文压缩策略。
  4. 推理成本优化:如何通过缓存、prompt 精简、模型分级路由把单次 Agent 调用成本压下来。
  5. 手撕算法:实现一个 LRU 缓存,要求 get 和 put 均 O(1),并在此基础上追问「如果并发量很大,怎么改造成线程安全且不成为瓶颈」。关键思路:哈希表 + 双向链表,get 时把节点移到头部,put 时超容量淘汰尾部;并发场景下用分段锁或 sync.Map + 链表分段,避免全局锁。

项目深挖

追问一:你项目里的 RAG 检索,chunk 是怎么切的?为什么这么切?

参考回答方向:不要说「按 512 token 切」就结束。要讲清楚切分策略和业务语料的耦合——比如文档是 API 文档还是客服对话,前者按标题层级切、保留父子关系,后者按会话轮次切。再讲 overlap 设置多少、为什么,以及切完之后怎么评估:用一组标注好的 query 算 recall@k 和 MRR,而不是拍脑袋。面试官真正想听的是你有没有做过「切分策略 → 召回效果」的闭环验证。

追问二:Function Calling 里,模型经常调错工具或者该调不调,你怎么解?

参考回答方向:分三层。第一层是工具描述本身——参数名要语义化,description 里写清楚「什么时候用」而不是只写「是什么」,枚举值要给全。第二层是 prompt 里给 few-shot,把典型 query 和对应工具调用写成示例。第三层是兜底——模型没调工具时,用规则或小模型做一次意图分类补调。可以补一句:工具数量超过 20 个时,考虑先做工具检索再喂给模型,而不是全量塞进 prompt。

追问三:多轮对话上下文越来越长,成本和延迟都上来了,你怎么管?

参考回答方向:先区分「必须保留」和「可以丢」的。系统 prompt、当前任务相关的工具返回结果必须留;历史闲聊可以摘要。常用做法是滑动窗口 + 摘要:保留最近 N 轮原文,更早的用模型压缩成一段摘要。再进一步可以做语义检索——把历史轮次存进向量库,每轮只召回和当前 query 最相关的几条。要提一句权衡:摘要会丢信息,检索会引入延迟,得看业务能接受哪个。

准备建议

  1. 八股不要只背结论,要能讲清「为什么」。比如 sync.Map 适合读多写少,是因为它用 read map 和 dirty map 分离,读操作大多无锁;但写多时 dirty map 频繁提升,反而比加锁的普通 map 慢。面试官一追问底层就露馅,所以每个八股点都准备一句「它的设计取舍是什么」。
  1. Agent 项目要准备一条完整的「问题 → 方案 → 验证」链路。不要只讲用了 LangChain 还是自己写的框架,要讲你遇到的具体问题(召回不准、工具误调、成本超预算),你做了什么改动,改完指标从多少变到多少。哪怕指标是估算的,也要有量级。
  1. 手撕题按「先讲思路再写代码」的节奏练。LRU 这种题不难,但面试官会在你写完追问并发改造、追问链表节点要不要加锁、追问 sync.Map 能不能直接用。平时练题时自己给自己加一层追问,写完之后想一遍「如果 QPS 涨 100 倍,哪里先崩」。

三面结束当天收到口头通过,三天后 HR 约谈实习时间。

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