Appearance
面经精选 2026-10-20
收录概览
本期检索 AI/Agent、Golang 后端、服务端/后台开发方向,优先筛选 2026-10-19 至 2026-10-20 发布且正文可获取的公开面经;排除正文为空、与 2026-10-18 已收录原帖重复的内容。共收录 3 篇,重点覆盖 Agent 项目深挖、RAG 与 Workflow、上下文压缩、Tool Calling、Go 并发模型、Redis、LRU Cache、文档版本隔离、AI 应用质量评测与部署。以下内容只改写公开技术问题,不代表整理者亲历。
- 字节 AI Agent 全栈开发:前端响应式、ReAct、消息式 Tool Calling、Electron/浏览器多进程、Go 并发、Redis、LRU Cache
- 顺丰科技 AI 开发工程师:RAG 知识库、文档切分与检索、Workflow、Docker、数据隔离、质量评测
- 字节一面和二面汇总:Agent 项目重构、RAG/Skill 选型、混合检索、记忆分层、上下文压缩、Computer Use、AI Coding
来源索引
- 字节 AI Agent 全栈开发面经:https://www.nowcoder.com/feed/main/detail/88e22e99028942bcbac1ed57395f2e60
- 顺丰科技 27 届 AI 开发工程师一面面经:https://www.nowcoder.com/feed/main/detail/463a64c7df7e4efaac8c6ad32648b454
- 字节一面和二面汇总面经:https://www.nowcoder.com/discuss/941992971027636224
说明:只保留公开技术问题和可迁移的工程考点,不复制原帖长段落、个人隐私或未经证实的经历。回答中的工程展开是通用复习思路,没有可靠指标时不虚构数字。
一、AI Agent 与系统设计
Q1:ReAct 和 Plan-Execute-Replan 有什么区别?Agent Loop 如何避免失控?
回答思路: ReAct 是“观察—思考—行动”的交替循环,适合信息不完整、需要根据工具结果即时调整的任务;Plan-Execute-Replan 先生成相对完整的计划,再执行步骤,并在前置条件变化或结果偏离时重新规划,适合长流程和步骤依赖明显的任务。工程上通常不会把所有决策都交给模型,而是用固定主流程约束边界,在少数不确定节点允许 Agent 自主决策。
Agent Runtime 至少要维护 execution state、当前 step、工具结果和终止原因。终止条件包括任务完成、最大轮次、Deadline、Token/费用预算、连续失败、用户取消和安全策略拒绝;还应检测重复工具参数、状态长期无进展和相同错误循环。写操作要有幂等键或人工确认,任务中断则用 checkpoint 恢复,不能简单重放副作用。
易踩坑 / 追问: 不要只回答“设置最大轮数”;要区分 state、上下文、短期记忆和跨会话记忆。面试官继续追问时,可以从可恢复、可观测、可审计三个维度展开。
Q2:什么情况下用 RAG,什么情况下把知识整理成 Skill?
回答思路: RAG 主要解决外部知识的按需获取:资料规模较大、内容经常变化、需要引用原文或按租户隔离时,把文档解析、切块、索引后在运行时召回相关片段。Skill 更像稳定的任务方法、步骤、约束和判断标准,适合复用流程或领域操作规范;它不是把所有业务数据塞进提示词。
一个完整检索链路可以是:识别用户问题与权限范围,生成查询,按元数据过滤版本/租户,再做关键词、向量或混合召回,去重与重排,截断到上下文预算,最后把证据和引用交给模型。若用户已经明确指定两份文档,仍可能需要切块来控制上下文、定位相关段落和支持引用;但如果文档很小且完整内容不会超过预算,也应评估直接处理原文,避免为了使用 RAG 而使用 RAG。
易踩坑 / 追问: “召回率高”不等于答案正确。要准备离线问题集、命中率/Recall@K、排序质量、引用准确性、拒答率和端到端答案评测,并区分功能测试与 AI 效果评估。
Q3:文档切块、版本管理和数据隔离怎么设计?
回答思路: 上传时先记录 workspace、文档 ID、版本号、来源、解析状态和权限,再根据文档结构优先切分标题、段落、表格和列表;结构缺失时才使用长度与重叠窗口。切块应尽量保持语义完整,保留标题路径、页码、版本和原文定位信息。查询时先按用户选择的文档/版本和权限过滤,避免不同版本混召;切块和索引通常在上传或异步处理阶段完成,查询只做召回与重排。
多租户隔离不能只靠前端传一个 workspace 字段:服务端应从登录身份解析租户和空间权限,将 tenant/workspace/document version 写入索引元数据与查询过滤条件,并在下载、引用、工具调用时再次鉴权。删除或回滚版本时还要处理索引、缓存和异步任务的一致性。
易踩坑 / 追问: 扫描 PDF 需要 OCR,图片中的表格和版面信息可能要单独解析;不要把“支持 PDF”直接等同于“支持扫描 PDF”。
Q4:如何判断一个 Agent 具备企业使用条件?
回答思路: 不能只看一次 Demo。至少从任务成功率、关键步骤正确率、引用/工具参数准确率、延迟、成本、失败恢复、权限越界和人工接管率建立评测集。离线回归覆盖常见、边界、对抗和数据缺失场景;线上通过 tracing 记录 session/run/step、模型输入输出摘要、工具耗时、错误类型和最终结果,支持抽样复盘。
安全上要有工具白名单、服务端鉴权、敏感信息脱敏、写操作确认、沙箱和审计;可靠性上要有超时、取消、重试退避、熔断、预算和降级。企业可用不是“模型回答像人”,而是结果可验证、行为可控、问题可追责。
易踩坑 / 追问: 功能测试验证接口和流程能否跑通,效果评估验证答案和决策是否满足业务标准,两者不能混为一谈。
二、Golang、缓存与客户端工程
Q5:Go 的并发模型有哪些?Goroutine 和 Channel 什么时候适合一起用?
回答思路: Go 的核心是 goroutine、channel 和基于共享内存的同步原语。Goroutine 适合并发执行轻量任务;Channel 适合在生产者与消费者、流水线、事件传递和任务分发中传递所有权或结果。共享状态仍可使用 Mutex/RWMutex、atomic、条件变量和单 goroutine owner 模型。GMP 是运行时调度实现,回答“并发机制”时不要把调度器本身和业务同步手段混为一谈。
设计并发服务时,要明确 goroutine 的创建者、退出条件、取消信号、超时、错误汇聚和 WaitGroup 生命周期;有界队列和背压比无限开 goroutine 更重要。普通 Map 不能并发读写,按读写比例和状态边界选择锁、sync.Map 或重新设计所有权。
易踩坑 / 追问: “goroutine 很轻”不代表可以无限创建;要说明如何用 context.Context 取消,如何用 go test -race 发现竞态,以及 Channel 关闭由谁负责。
Q6:如何设计带统一 TTL 的 LRU Cache?Redis 在这类系统里做什么?
回答思路: 单机 LRU 通常用 HashMap 保存 key 到链表节点的映射,用双向链表维护最近使用顺序,读写和淘汰的时间复杂度目标是 O(1)。统一 TTL 可以在节点中保存过期时间:读取时先判断过期,写入覆盖值和过期时间并移动到表头;容量超限淘汰尾节点。若要避免过期节点长期占用空间,可在读写时惰性删除,再配合定时清理,但清理不能阻塞主路径。
Redis 可承担跨进程缓存、计数、集合、队列或分布式协调。应用缓存要明确本地缓存与 Redis 的一致性、失效策略、热 Key、大 Key、击穿和故障降级;分布式锁或 SET NX EX 只能作为快速拦截,关键幂等仍需数据库唯一约束或状态机兜底。
易踩坑 / 追问: LRU 的“最近使用”与 TTL 的“时间有效”是两个维度;不能只靠淘汰策略保证过期语义,也不要在线上用 KEYS * 排查大 Key。
Q7:多个浏览器标签页如何共用一个 WebSocket 连接?
回答思路: 可以让一个页面作为连接所有者,其他标签页通过 BroadcastChannel、SharedWorker 或 Service Worker 传递订阅和消息;所有者负责建立、心跳、重连和鉴权,收到消息后广播给订阅者。需要设计连接状态、订阅引用计数、标签页关闭、网络切换、消息序号和断线补偿。若浏览器环境或兼容性不允许共享,也可以每页独立连接,但要评估服务端连接数和重复推送成本。
易踩坑 / 追问: WebSocket 复用不是简单把 socket 对象跨页面传递;还要处理多个页面同时成为 owner 的竞态、鉴权 token 过期、消息丢失和慢消费者。
三、工作流、部署与工程追问
Q8:Workflow 为什么不直接套一个 Agent 框架?如何部署和评测?
回答思路: 如果业务步骤边界清晰、权限和审计要求高,直接按业务逻辑实现状态机更容易控制;Agent 框架适合快速组合模型、工具、记忆和编排,但会引入抽象、版本和调试成本。选择时应看流程不确定性、可恢复性、团队维护能力和观测需求,而不是追逐框架名称。
每一步要有稳定 ID、输入输出、状态、耗时、错误和重试语义,结果写入持久化记录或事件日志;失败可从最近 checkpoint 恢复。Docker 部署时明确应用、模型网关、向量库、缓存和任务 worker 的边界,配置通过环境变量或密钥管理注入。质量评测同时覆盖功能回归、检索效果、端到端答案、延迟、成本和安全边界。
易踩坑 / 追问: Docker 只是交付方式,不会自动解决数据隔离;要回答 workspace、网络、文件目录、凭据和日志中敏感信息的隔离策略。
本期高频考点与复习建议
- Agent:ReAct 与 Plan-Execute-Replan、Loop 终止、RAG/Skill 选型、混合检索、记忆分层、上下文压缩。
- AI 应用工程:文档切分、版本与租户隔离、Workflow 状态、Docker 部署、功能测试与效果评测。
- Golang:goroutine/channel、GMP 与同步原语、Map 竞态、取消与背压、LRU + TTL。
- 全栈与系统:Tool Calling、浏览器多进程、WebSocket 复用、Redis 使用边界。
准备时建议画三张图:一张是 Agent state—模型—工具—结果校验的执行图;一张是上传—解析—切块—索引—过滤—召回—重排的 RAG 图;一张是 goroutine—队列—缓存—下游的容量图。回答项目题时,始终补上边界、失败处理、验证方式和安全约束。