面灵AI

快手 AI 应用开发一面:Agent 记忆、检索证据与 JVM

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 能否做自我介绍,说明项目架构和自己负责的部分?
  2. 项目提示词怎样设计,能否举一段核心内容?
  3. 多轮审查中的记忆系统怎样设计?
  4. 为什么把工具区分为读操作和写操作?
  5. 模型发现一个商品问题后,怎样核实结论?
  6. RAG 为什么采用多路召回,HyDE 适合解决什么问题?
  7. 检索相似度很高,最终答案为什么仍可能错误?
  8. HashMap 怎样查找、插入和扩容?
  9. HashMap 为什么不适合无保护的并发修改,扩容时会发生什么?
  10. JVM 各运行时内存区域保存什么内容?
  11. 什么情况下会栈溢出,线程栈是不是越大越好?
  12. 堆使用量没有持续增长,为什么仍可能存在内存泄漏?
  13. 常见垃圾回收算法各有什么特点?
  14. ZGC 怎样让对象移动与应用执行并发进行?
  15. MySQL 的 B+ 树索引为什么比红黑树更适合按页组织的数据访问?
  16. 联合索引字段顺序看起来合适,优化器为什么还可能选择全表扫描?

《参考解析》

记忆需要知道每条信息从哪里来

会话里最新几轮交互、任务已经确认的事实,以及跨任务可复用的资料,可以采用不同的保存与读取方式。写入任务事实时保留来源和更新时间;新材料与旧记录冲突,要能追到具体证据。多个分支同时修改同一任务时,还需要明确合并或版本检查方式。

工具执行由服务端检查权限

模型选择了工具,不意味着它拥有调用权限。服务端仍要核对当前用户、资源范围和参数,写操作还需处理重复调用与执行结果不确定的情况。区分读写有助于定义风险和恢复方式,但只读工具同样可能泄露越权数据,不能因此省掉鉴权。

HyDE 生成的文本是检索线索

HyDE 先生成假设文档,再将其编码,用于寻找真实语料中的相关文档。假设文本本身不是真实证据,最终回答应落到检索得到的资料上。原始研究讨论的是无需相关性标注的稠密检索方法,具体项目是否受益,需要用自己的查询集评估。参见 HyDE 论文

相似度高也不等于适用:时间版本、对象范围、上下文条件都可能不同。可以把“是否找全证据”“排序是否合适”“回答是否忠于证据”分开检查,找到错误发生在哪一步。

内存问题要看整个进程

Java 堆稳定,只能说明这一项指标没有明显增长;本地内存、直接缓冲区、线程栈等仍可能增加。反过来,进程占用大也不直接证明泄漏。应比较多个时刻的资源数量、分配与释放行为,并找到仍被持有的对象或句柄。

索引是否划算取决于访问成本

命中行数太多、需要大量回表或统计估算有偏差时,优化器可能选择扫描。B+ 树的高分支数有利于控制树高,叶子层又便于范围遍历,但索引存在不代表每次使用它都更快。回答时用实际扫描行数、返回行数和耗时说明,而非只检查 SQL 有没有满足最左前缀。