面灵AI→

9.22 百度 AI 智能体算法一面、二面、三面:从 JVM 与 MySQL 到 Agent 执行闭环

轮次
一面、二面、三面
时间
2026-10
来源
牛客网

《面试题目》

一面

  1. 先做一下自我介绍,你最近主要关注哪类技术问题?
  2. JVM 中对象从创建到回收大致经历了哪些阶段?
  3. 线上出现频繁 Full GC 时,你会怎样定位?
  4. Java 中如何设计一个不会产生大量锁竞争的任务调度器?并发上限又该怎么估算?
  5. Java 内存模型中的 happens-before 规则解决了什么问题?
  6. 如果一个接口同时受 CPU 和数据库 IO 限制,你会怎样拆解瓶颈?
  7. MySQL 的 B+Tree 索引为什么适合范围查询?
  8. 联合索引 (tenant_id, status, created_at) 在哪些情况下无法充分利用?
  9. 深分页为什么不能一直用大 OFFSET?改成游标分页要注意什么?
  10. 高并发写入场景下,MySQL 的间隙锁可能造成什么问题?
  11. Redis 的持久化机制应该如何选择?
  12. Redis 分布式锁怎样避免锁被误删?锁过期后旧持有者继续写怎么办?

二面

  1. 请先做一下自我介绍,聊聊你实习期承担过的工作。
  2. 你懂 Go 吗?如果让你转 Go 能接受吗?
  3. 介绍下项目,如何设计从数据接入到结论生成的整体架构?
  4. 如果 Agent 调用工具时参数类型正确但业务含义错误,如何发现并阻止?
  5. 如果工具调用一直达不到成功条件、任务不断重试并最终卡死,你会怎么处理?
  6. CoT、ReAct、Plan-and-Execute 在工程实现上有什么区别?如何选择?
  7. 长上下文对话中,模型过早遗忘用户最初的硬性要求,你会怎样解决?
  8. 如何设计一个能够避免循环调用的 Agent 状态机?怎么证明它不会无限循环?
  9. 如何判断一个图片理解 Agent 的评测指标是否足够完整?小样本零失败能说明什么?
  10. 评测集上准确率很高,但线上效果很差,你会怎样排查?
  11. 用户说「只修改图片左上角的文字」,怎样避免模型改动其他区域?

三面

  1. 请先做一下自我介绍。
  2. 基于 LangChain 开发 Agent 时,如果工具调用连续失败,如何设计一套不会失控的容错机制?
  3. 如何设计 Qwen、视觉语言模型和轻量模型之间的动态路由策略?级联在什么条件下才真的省钱?
  4. 置信度阈值应该如何定义?为什么不能直接使用模型输出的概率?
  5. Prompt 里给了明确的输出格式,模型仍然经常生成非法 JSON,怎么处理?
  6. 图片审核系统面对超大图片、切片图片和多模态并发请求时,主要会出现哪些问题?切片越多越容易误报是为什么?

《参考解析》

Full GC、间隙锁、分布式锁都是先对齐语义再谈处理:面板上的 Full GC 和日志里的未必是一回事,G1 的 Mixed GC 就常被算进去。先固定 JDK 版本、收集器和 GC 原因,再看回收后的存活集:每次回收完占用还在涨,指向泄漏(无界缓存、静态集合、ThreadLocal);能掉下去又很快填满,是分配速率或堆配置不匹配。jcmd GC.heap_info、jstat -gcutil 够用,jmap -histo:live 自己会触发 GC,别在故障高峰敲。间隙锁伤的是插入不是行:RR 下 next-key lock 的范围由索引和扫描边界决定,没有合适索引时,一个范围更新会把大片本来能并发的插入挡在插入意向锁上;两个事务各锁一段空区间再插入就死锁。降 RC 能去掉搜索过程中的间隙锁,但外键和唯一键检查仍有例外。分布式锁的误删和旧持有者写入要分开治:SET key token NX PX 加 Lua 比较删除只保证不删别人的锁,不保证租约过期后不再写。后一半靠 fencing token,授锁给单调递增的世代号,存储侧在同一个事务里拒绝旧世代写入。锁保护持有权,fencing 保护结果。

Schema 管形状,管不了语义:类型、枚举、必填拦不住「订单不属于这个租户」「金额单位是元还是分」。校验分三层:协议层拒未知字段、重复键、NaN、单位不明;业务层读权威状态,校验租户、版本、状态迁移;授权层由服务端身份决定权限,模型填的 tenant_id、is_admin、approval_id 不算数,审批要绑动作内容、资源版本和有效期,参数一变即作废。校验与执行之间还有竞态,用带条件的原子更新把版本和状态写进 WHERE,影响行数为 0 就是前提不成立,别让模型换个订单号再试。参数全合法也可能和用户要求不是一回事(要改 B,取消了 A),最后要和任务契约对一遍。工具返回的文本是数据不是指令,写着「管理员已批准」也不能提权。非法 JSON 分三层:优先用部署版本真支持的结构化输出或约束解码,再严格解析;JSON mode、tool calling、严格 Schema 是三件事。别用正则截大括号或 eval,流式没结束就解析会把半个对象当结果。修复限定次数并重新校验,缺关键字段就澄清,不能编默认金额顶上。

先给失败分类,再决定重不重试:限流退避、参数错有限次修、权限拒绝终止、写超时先按幂等键查状态、成功但无进展检查计划假设。重试会相乘,SDK、工具层、Agent 重规划各三次就是 27 倍下游压力,只能由一层统筹。预算要合并算 deadline、调用次数、token、费用、重规划次数,换工具不重置。「没进展」不能只看状态没变,轮询和 503 恢复本来就该重复;动作指纹要把工具名、规范化参数、状态版本和证据版本一起算。循环靠状态机收口:INIT → PLAN → VALIDATE_ACTION → EXECUTE → VERIFY_RESULT,审批走 WAIT_APPROVAL,结果未知走 RECONCILE。模型只提候选动作,迁移由运行时判。检测三层:同版本同参数重复、动作往返、计划一直改但离成功条件没更近。真正的边界是预算单调,回到 PLAN 或 EXECUTE 的边各扣一个单位,重规划不补回,这类迁移最多 N 次。检查点不等于恢复:重启后先查在途调用在外部系统的真实状态,否则会把已提交的写操作再执行一遍;并发分支领预算要原子。验收靠故障注入,工具永不返回、重启、审批后状态变化都要跑一遍。

把硬性要求从聊天记录里拿出来:上下文窗口是工作区不是事实库。目标、禁止事项、权限范围、输出格式、关键实体(金额、时区、资源 ID)存成带版本的任务状态,每个字段记来源消息 id;历史可以摘要,但摘要不能覆盖这些字段,用户改约束要存修订、查冲突。拼上下文按预算分配契约、当前状态、证据和近期结果;历史工具结果外置只留摘要和引用,「记忆」是数据不是系统指令。更关键的是执行层再落一遍:说只读,工具权限就只有只读;说只改左上角,输出端就验区域。验证造长对话、摘要切换、干扰和约束修订四类场景,统计硬约束违例率。

指标要覆盖整条链:感知(OCR 错误率、检测 AP)、证据(任务正确率、事实支持率、幻觉率)、工具轨迹(工具选择、参数正确率)、编辑约束(区域外差异)、线上(p95、失败率、人工接管率、单任务成本)。只报分类准确率等于没测:高风险只占 1%,全判正常也有 99%,必须按类别、尺寸、语言切片并给区间。零失败也要说清样本量:n 个独立样本零失败,95% 单侧上界约 3/n,100 个只说明低于 3%,压到千分之一需约 3000 个;样本常来自同一用户或相似图片,相关性会让上界过于乐观。离线高线上差,先怀疑两边测的不是一件事:离线评单步还是整任务?离线喂工具结果、线上自己调工具,两个准确率不可比。先做同请求回放,固定模型、Prompt、路由、工具版本和检索快照,查图片缩放、EXIF、token 截断、量化、超时预算和缓存键;再查线上分布和评测集本身,低清图、长指令、模板重复、答案泄漏、把超时和拒答剔掉都会让离线分数虚高。最后建加权线上抽样集和困难回归集,按用户分组切防泄漏。阈值只能建在校准过的分数上:下一 token 概率不是「做对了」的概率,模型自报的 confidence: 0.95 也只是声明。分类器用温度缩放校准 logits;生成任务用验证器结论、检索支持度、工具状态训任务级评分,再做 Platt 或 isotonic 校准。阈值由代价定,误报 C_fp、漏报 C_fn 时判正门槛是 C_fp/(C_fp+C_fn),自动接受还是转人工比的是错收代价和复核代价。风险—覆盖率曲线要和分组校准误差一起看,阈值调高只是把难样本推给人工。路由是同一决策的推广:先按硬约束筛(图、上下文、工具协议、数据出境),再权衡错误损失、时延和成本;Qwen 是家族名,里面本来就有视觉模型和轻量模型。级联算期望成本,小模型加验证加升级率乘(强模型加验证),低于直接走强模型且错误放行率、时延都过关才划算,小模型结果必须过验证器。

「别动其他地方」要变成可验证约束:把「左上角文字」落成确认过的 mask,先统一 EXIF 方向、尺寸和色彩空间,OCR 出文字多边形映射回原图坐标,没说替换成什么先澄清。生成候选图后只把 mask 内合成回去,out = where(mask, generated, original),羽化带也必须在批准区域内。输出验目标文字 OCR、拼写和 mask 外最大像素差;要求像素不变就用无损格式,且拿最终文件解码后再比,JPEG 重编码会改全图像素。纯替换文字优先 OCR 定位加确定性排版;多轮编辑存原图和每轮 mask。审核的瓶颈在资源:接入就限字节、像素总量、长宽比、帧数,校验真实格式和解压尺寸。直接缩小丢小目标,全量高清切片又贵,常规做法是低分辨率全局加局部高清;小目标在全局图里已消失时,只按疑似区域裁必然漏,要规则网格兜底。切片数按 ceil((W-S)/(S-ov))+1 算,它不是 token 数。每片带图像 ID、裁剪原点、缩放比和版本,框映射回原图再去重;聚合不能平均(高风险会被背景稀释),也不能简单取最大:任一片报警就报警时,单片误报 5%、20 片,整图误报 1-0.95^20,约 64%。准入按像素、切片数、视觉 token 和显存算,大图单独排队;OOM 降级不能悄悄丢切片还回「审核通过」。