27 届秋招 AI 面试全程:Agent 系统设计、记忆模块与万级并发后端
- 轮次
- AI面试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 可以听到吗?
- 叫什么名字?先做一下自我介绍,3 分钟时间,做一个简短的自我介绍吧。
- 你刚才说到你对 AI Coding 也是有一些经验,那么你用的 Agent,或者说你在用什么工具写代码?
- 你用的是什么会员、什么订阅?
- 你现在自己有订阅吗?
- 昨天晚上发布了一个新的模型,你知道这个模型吗?
- 你用过 Claude 模型,是吗?
- 因为你前面说过你用过 Claude Code,所以你用过的最新版 Claude 模型是什么模型?
- 当时用的是什么版本?
- 我看到你在某公司做全栈开发实习生,你在那里都干了些什么?你的工程重点是什么?
- 你现在有哪些传统技术栈?注意是传统技术栈,就是不借助 AI、你自己能手写代码的部分,有哪些?
- Java 的话,你现在做全栈主要使用什么技术开发?
- 你用过 Go 或者 Rust 吗?
- 我看到你在智能鼠标 Agent 平台里面用到了 RabbitMQ,那么你给我讲一下,在 Java 里面你是怎么使用队列的?在智能鼠标开发过程中,你是怎么使用消息队列完成对应工作的?
- 有没有用过 Kafka 或者 Flink 这种大数据相关技术?
- 你当时项目里面有没有接触过大数据相关技术?
- 有没有用过任何大数据相关的东西?
- Spring Cloud 了解吗?
- Spring Boot 会吗?
- Spring Boot 熟悉吗?
- 如果现在让你实现一个战略地位类似 Claude Code 或者 Codex 这样的 Agent,但是它是面向大众市场的,不是专门面向程序员的,你会怎么设计?讲一下设计思路
- 你刚才提到会基于一个开源 Agent 项目来改。如果现在给你一个现成的开源 Agent,让你把它改成类似 Claude Code、Codex 这种更复杂、更大型的系统,你会怎么做?
- 所以说你用过这个开源 Agent 项目,是吗?
- 你给我讲一下它的设计思路。
- 你刚才讲到的这些更多是来自 LLM 的能力,而不是 Agent 工程本身的能力。你着重讲一下 Agent 这一部分,因为我们是开发岗,不是算法岗。
- 你不止一次提到记忆模块。如果让你设计一个记忆模块,而且你简历里面也写到过双层记忆,那么你认为一个比较好的记忆系统应该是什么样子?讲一下它的基本系统结构。
- 你刚刚提到,如果要把一个上下文窗口中的记忆放进向量数据库,存储的时候会先把它结构化。这个结构化你是怎么做的?用了什么算法、什么技术,或者什么方案?
- 如果现在让你开发一个比较大的在线考试系统,前端使用 Next.js、React 等技术,同时有一些高性能组件使用 Rust + WebAssembly,后端使用 Java,那么使用 Java 开发后端的时候,我们应该注意哪些重点,才能保证这些二进制代码在前端能够正常运行?
- 你可以使用 Spring Boot 或 Spring 技术栈,大概讲一下,怎么样才能把这种二进制的高性能前端组件集成到正常前端里面,让它正常运行?后端的系统结构应该怎么设计?你会使用哪些解决方案?
- 比如 C++ 经过编译以后会产生二进制代码,Java 需要运行在 JVM 里面,C++ 是直接运行在机器上的,现在我们让高性能模块运行在机器或者运行时上,但页面呈现在网页里面,可能是 WebView,也可能嵌入正常前端,那后端应该怎么设计,才能构建出一个稳定的系统?
- 我看到你第一个项目是一个面向高校学生的 AI 全学科辅导平台,大概流程是不是:学生向 AI 提问,也可以拍照上传题目,AI 帮他解答,同时整理错题、做汇总,最后给学生一些解答和建议?
- 如果现在有 1 万个学生同时向 AI 发问,假设 AI 算力无限、模型并发无限,那么你怎么处理整个后端?你们当时的技术栈是怎么应对这种高并发请求的?怎么保证这么多人的 AI 回复都能够正常返回?
- 你刚才说到「结构化会话状态」,你给我解释一下什么叫结构化会话状态?
- 你简历里面还写到优化了教育知识库的 RAG 检索链路。假设学生问的是微积分,但是同样一个微积分问题,在数学和物理里面可能有不同的理解和解法。如果 AI 本身没有准确判断出这是数学题还是物理题,那么进入 RAG 检索以后,你怎么保证它应该去检索数学知识库还是物理知识库?
- 你再说一下,在 Java 里面你还会哪些技术栈?比如高并发、线程池、微服务、大数据这些方向,还有没有其他东西?算法相关的也可以。
- 我看到你的项目经历里面还有一个多智能体的数据查询系统,对吧?你给我大概讲一下这个系统的设计思路。
- 好,我没有其他问题了,你还有什么问题想问我吗?
《参考解析》
-
AI Coding 这一类开场题考的是「你在什么任务上用、怎么保证质量」:把工具名放一边,讲清三件事——在哪类任务上交给 AI(脚手架、样板代码、单测、脚本),在哪类任务上只让它当参谋(核心链路、并发与事务、线上问题定位),以及你怎么验收(可运行的测试、code review、diff 逐块看)。订阅与版本这类问题如实回答即可,被追问「昨晚发布的新模型」不知道就直说,硬编模型名比不知道更伤。
-
「面向大众市场的类 Claude Code Agent」是这道面试的主菜,答法要有分层架构:接入层(多端、鉴权、配额与计费)、会话编排层(规划-执行循环、上下文裁剪与压缩、工具调用的编排与失败重试)、工具与执行层(沙箱化执行、文件与网络权限、可回滚)、记忆层(短期会话状态 + 长期向量库)、模型层(多模型路由、降级与成本控制)。大众市场还要额外讲:内容安全审核与合规留痕、限流与排队、按量计费的计量口径。简历里写的「基于开源 Agent 改造」要能说出改造点——加了哪层、替掉了什么、为什么原设计不满足大众场景。
-
记忆模块要区分「存什么」和「怎么取」:典型分层是短期上下文(本轮会话窗口,做压缩与摘要)、长期语义记忆(向量库存事实与偏好)、以及结构化的用户画像(JSON/Schema 存确定性字段)。写入侧的关键是「先抽取再落库」——把自由文本转成带类型、带时间戳、带来源的结构化条目,去重与冲突时按时间与置信度覆盖;读取侧是「按相关性召回 + 重排 + 注入预算控制」,避免把整库塞进上下文。被追问结构化怎么做时,可以说清用 JSON Schema 约束模型输出、再用规则校验兜底,而不是只说「用大模型抽」;能提一句遗忘策略(时间衰减、容量上限)会显得更完整。
-
1 万个学生同时提问,考的是「算力无限但后端有限」的架构判断:先声明瓶颈不在模型而在你的连接、状态与编排——接入层无状态多实例、会话状态外置到 Redis/数据库(这正是「结构化会话状态」的含义:把对话历史、任务阶段、已生成的中间结果存成可序列化的结构,而不是留在某台机器的内存里);再用消息队列把「提问」与「生成」解耦削峰,前端用 SSE/WebSocket 流式回包并做断线续传;配合按用户与按模型的限流、排队与优先级,超时与失败要能重试且幂等(同一提问重试不能重复扣费、不能重复生成两遍)。
-
Rust + WebAssembly 与 Java 后端配合,考的其实是「前后端边界与部署形态」:WASM 产物是静态资源,由前端构建流程打包或 CDN 分发,与后端无关;Java 侧要做的是给出稳定的接口契约(版本化 API、CORS/同源与安全头、内容哈希文件名避免缓存不一致)、在 WebView 与浏览器两种容器下做兼容性验证(WASM 特性、内存上限、线程与 SIMD 支持差异),以及决定重活放在哪——浏览器算力有限时,把同一套 Rust 代码编译成服务端原生库或独立服务,由 Java 通过 HTTP/gRPC 调用。答题时说清「谁负责分发、谁负责契约、谁负责降级」三点,比罗列技术名词更得分。
-
RAG 找到「数学库还是物理库」,本质是把学科判定提到检索之前:可选多条路——查询分类/意图识别先路由到指定知识库(最可控,但会引入分类错误)、检索时带学科标签做过滤或用元数据加权、多库并行召回后按分数重排融合、以及把「不确定」做成兜底(两库都召回,由模型基于上下文判断并显式说明依据)。工程上一定要给分类结果留可观测性(记录判定结果与置信度)和纠偏入口(用户指出答错学科后回写标注),否则路由错了没人知道。
-
多智能体数据查询系统的讲解要落到「分工与收敛」:谁负责理解自然语言并生成查询意图、谁负责 schema 检索与 SQL 生成、谁负责校验与纠错、谁负责汇总成自然语言结论,以及它们之间怎么传递中间结果(结构化 JSON 而不是自由文本);再说失败处理——SQL 执行报错时把错误信息回灌给生成者重试、限定重试次数、超限降级为澄清提问。能被追问的点通常是「怎么防止智能体之间循环调用」和「怎么控成本」,各准备一句。