阿里云 AI 应用开发一面
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 介绍一下 Agent 项目整体架构,讲讲整体的执行流程。
- Agent 调用某工具为什么选择串行而不是并行?并行会带来什么问题?
- 怎么避免 Agent 陷入循环?
- 项目里的上下文是怎么共享的?讲一讲多层上下文控制的方案。
- 什么时候做上下文压缩?压缩的策略是什么,优先压缩哪部分内容?
- 这个 Agent 工具调用大概多少次、循环多少轮,为什么是这个量级?
- 多租户场景下,不同租户怎么做资源隔离、并发限制?
- 你之前的项目从 Hello Agent 改成 LangGraph,改造做了哪些改动,解决了什么痛点?
- LangGraph 的核心特点是什么,为什么适合 Agent 开发?对比公司自研 Agent 框架有什么优缺点?
- 如果做电商客服类 Agent,用 LangGraph 怎么设计工作流和节点?状态会怎么设计?
- 讲一条 SQL 执行的完整过程,包括语法校验、索引、锁相关流程。
- MySQL 里 redo log、undo log、binlog 分别是什么,各自作用?
- Redis 为什么速度快?Redis 单线程模型原理,IO 多路复用怎么理解?
- 浅拷贝和深拷贝的区别。
- Python 的 thread local 是什么,作用是什么,怎么实现线程变量隔离?
- Python 协程 async/await 原理。
《参考解析》
- 工具串行还是并行:判断依据是有没有依赖、有没有副作用。串行保证顺序与状态一致,并行能压掉等待时间,但会带来竞态(同一资源被并发改写)、结果顺序错乱、下游限流被打爆、失败后难以回滚。稳妥做法是只并行无依赖的只读调用,有依赖或有写操作的走串行,并对并行度设上限,同时接受”并行度越高越难复现问题”这个代价。
- 怎么避免 Agent 陷入循环:只靠 max_iterations 不够,还要有循环检测——同一工具加同一参数的指纹重复出现就打断;任务进展判定——没有产生新信息就不允许再规划;以及把开放循环拆成有预算的有限执行图。再配合步数、Token、时间三类预算,超预算就降级或转人工,而不是继续跑到自然结束。
- 上下文怎么共享与压缩:多层上下文一般拆成系统约束、任务状态、检索证据、近期对话、工具结果几层,每层有独立预算;共享靠把状态抽成结构化对象(目标、已确认事实、硬约束、待办、证据引用)在各节点之间传递,而不是把整段消息列表到处带。压缩的时机是接近预算上限或阶段切换时,优先压工具返回的大块原文和重复的检索结果,最不该压的是目标、硬约束和未完成事项。
- 多租户资源隔离:按租户维度做配额——每租户的并发上限、QPS、Token 预算,配合连接池与线程池的舱壁隔离,缓存 key 带租户前缀避免串数据;重任务走队列按租户公平调度,防止一个租户把全局资源打满。同时要有可观测,按租户看用量、失败率与延迟,否则出了问题只能全局降级。
- SQL 执行过程:客户端请求进来先做连接与权限校验,然后把 SQL 解析成语法树做语义校验,优化器基于统计信息选索引与连接顺序生成执行计划,执行器按计划调用存储引擎;InnoDB 按页读数据,命中缓冲池就直接返回,否则从磁盘读并可能触发预读。涉及写操作时要加锁并写 undo/redo,被追问锁的部分要能说清行锁加在索引上、以及间隙锁与隔离级别的关系。
- redo/undo/binlog:redo log 是 InnoDB 的物理日志、循环写,用 WAL 保证崩溃恢复时已提交的数据不丢;undo log 是逻辑日志,支撑事务回滚和 MVCC 的快照读;binlog 是 Server 层的逻辑日志,用于主从复制与数据恢复,格式分 statement、row、mixed。三者协同的关键是一致性提交,redo 与 binlog 通过两阶段提交对齐,否则主从数据会不一致。