NiceOffer

面试面经 · 携程

【携程】【Agent 开发】【暑期实习二面】面经(八股+大模型项目+手撕)

携程面经Agent 开发实习

海外一年制硕士,投递携程 Agent 开发暑期实习,二面约 60 分钟,面试官是 Agent 平台侧的一线开发,整体节奏是「八股快速过 + 项目往死里挖 + 一道手撕」,没有自我介绍寒暄,直接进正题。

题目摘要

  • Go 语言基础:slice 与 array 的区别、扩容机制;map 是否并发安全、为什么;defer 的执行顺序与参数求值时机;context 的取消传播。
  • MySQL / Redis 八股:聚簇索引与回表、最左前缀原则、explain 里 type 各值的含义;Redis 缓存穿透/击穿/雪崩的区分与各自解法;Redis 分布式锁为什么要用 SET NX PX 而不是 SETNX + EXPIRE。
  • Agent 项目深挖:RAG 链路里召回率与准确率怎么权衡;Function Calling 的工具描述怎么写、参数校验放在哪一层;多轮对话的上下文管理策略;推理成本优化的具体手段与量化收益。
  • 手撕算法:LRU 缓存。题意是设计一个容量为 capacity 的缓存结构,支持 get(key) 和 put(key, value),两者都要求 O(1),超容量时淘汰最久未使用的键。关键思路是哈希表 + 双向链表:哈希表存 key -> 链表节点 实现 O(1) 定位,双向链表维护访问顺序,头部是最近使用、尾部是最久未使用,get 命中后把节点移到头部,put 时若已存在则更新并移到头部,若超容量则删尾部节点并同步删哈希表项。面试官追问了「为什么不用单向链表」「如果要求并发安全怎么改」,前者答删除节点需要前驱指针,单向链表做不到 O(1);后者答加读写锁或分段锁,并说明锁粒度对吞吐的影响。

项目深挖

我简历上写的是一个基于 RAG 的企业知识库问答 Agent,支持多轮对话和工具调用。面试官在这块追问了大概 25 分钟,三个问题印象最深。

追问一:你的 RAG 召回效果怎么评估的?如果召回不准,你怎么定位是检索的问题还是生成的问题?

参考回答方向:先说评估方法,离线用带标注的问题-文档对算 Recall@k 和 MRR,线上看用户点踩率和追问率。定位问题要分层:先固定生成模型,只看检索结果里有没有正确文档,如果没有就是检索问题,往切分粒度、embedding 模型、query 改写上查;如果正确文档在 top-k 里但答案错了,就是生成问题,看 prompt 是否把上下文正确引用、是否被无关 chunk 干扰。可以补一句:我实际排查时发现 chunk 切太碎导致语义不完整,后来改成按语义段落切 + 相邻 chunk 重叠,召回率有明显提升。

追问二:Function Calling 的工具越来越多时,你怎么保证模型选对工具?参数幻觉怎么处理?

参考回答方向:工具数量上去后不能全量塞进 prompt,一是 token 成本,二是模型注意力被稀释。做法是按场景做工具分组,先用一个轻量分类或规则路由缩小候选集,再让模型在小组内选。工具描述要写清楚「什么时候用、什么时候不用」,比堆参数说明更有效。参数幻觉必须靠代码层校验兜底,不能信模型输出:用 JSON Schema 做类型和必填校验,业务约束(比如日期范围、ID 是否存在)在真正执行前再校验一次,校验失败把错误信息回灌给模型让它重试,重试超过两次就降级到人工或固定话术。

追问三:多轮对话上下文越来越长,你的上下文管理是怎么做的?推理成本降了多少?

参考回答方向:分三层。第一层是滑动窗口保留最近 N 轮原文;第二层是对更早的历史做摘要压缩,摘要由模型生成但只在超过阈值时触发,避免每轮都调用;第三层是把结构化信息(用户身份、已确认的槽位)抽出来单独存,不依赖对话历史。成本上,我做过对比,纯全量上下文在 10 轮后 token 数增长很快,加上摘要 + 窗口后单次请求 token 降了大概一半,响应延迟也下来了。这里要能说出具体数字和测量方式,面试官很在意「你说优化了,怎么证明」。

准备建议

  1. 八股按「能画图 + 能说边界」准备,别背结论。比如 Redis 分布式锁,光说 SET NX PX 不够,要能讲清楚锁过期但业务没执行完怎么办(看门狗续期或 fencing token)、主从切换丢锁的风险。面试官问「为什么」的时候,背结论的人会卡住。
  1. 把项目里的每个技术选型都准备一个「为什么不选另一个」。RAG 为什么用这个向量库不用另一个、切分为什么选这个粒度、Function Calling 为什么不用微调。携程这类业务团队很看重落地的取舍逻辑,答不出替代方案会被认为没真正做过决策。
  1. 手撕题按高频清单刷,重点练 O(1) 设计类。LRU、LFU、限流器、最小栈这类题在 Agent/后端岗出现频率很高,练的时候不要只写出来,要能边写边讲清楚每个数据结构承担什么职责、边界条件怎么处理,面试官经常在你写完后让你改一个约束。

一面通过,3 天后约了二面,二面结束当天晚上收到 HR 反馈进入下一轮。

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