快手 AI 应用开发一面:Agent 记忆、检索证据与 JVM
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 能否做自我介绍,说明项目架构和自己负责的部分?
- 项目提示词怎样设计,能否举一段核心内容?
- 多轮审查中的记忆系统怎样设计?
- 为什么把工具区分为读操作和写操作?
- 模型发现一个商品问题后,怎样核实结论?
- RAG 为什么采用多路召回,HyDE 适合解决什么问题?
- 检索相似度很高,最终答案为什么仍可能错误?
- HashMap 怎样查找、插入和扩容?
- HashMap 为什么不适合无保护的并发修改,扩容时会发生什么?
- JVM 各运行时内存区域保存什么内容?
- 什么情况下会栈溢出,线程栈是不是越大越好?
- 堆使用量没有持续增长,为什么仍可能存在内存泄漏?
- 常见垃圾回收算法各有什么特点?
- ZGC 怎样让对象移动与应用执行并发进行?
- MySQL 的 B+ 树索引为什么比红黑树更适合按页组织的数据访问?
- 联合索引字段顺序看起来合适,优化器为什么还可能选择全表扫描?
《参考解析》
记忆需要知道每条信息从哪里来
会话里最新几轮交互、任务已经确认的事实,以及跨任务可复用的资料,可以采用不同的保存与读取方式。写入任务事实时保留来源和更新时间;新材料与旧记录冲突,要能追到具体证据。多个分支同时修改同一任务时,还需要明确合并或版本检查方式。
工具执行由服务端检查权限
模型选择了工具,不意味着它拥有调用权限。服务端仍要核对当前用户、资源范围和参数,写操作还需处理重复调用与执行结果不确定的情况。区分读写有助于定义风险和恢复方式,但只读工具同样可能泄露越权数据,不能因此省掉鉴权。
HyDE 生成的文本是检索线索
HyDE 先生成假设文档,再将其编码,用于寻找真实语料中的相关文档。假设文本本身不是真实证据,最终回答应落到检索得到的资料上。原始研究讨论的是无需相关性标注的稠密检索方法,具体项目是否受益,需要用自己的查询集评估。参见 HyDE 论文。
相似度高也不等于适用:时间版本、对象范围、上下文条件都可能不同。可以把“是否找全证据”“排序是否合适”“回答是否忠于证据”分开检查,找到错误发生在哪一步。
内存问题要看整个进程
Java 堆稳定,只能说明这一项指标没有明显增长;本地内存、直接缓冲区、线程栈等仍可能增加。反过来,进程占用大也不直接证明泄漏。应比较多个时刻的资源数量、分配与释放行为,并找到仍被持有的对象或句柄。
索引是否划算取决于访问成本
命中行数太多、需要大量回表或统计估算有偏差时,优化器可能选择扫描。B+ 树的高分支数有利于控制树高,叶子层又便于范围遍历,但索引存在不代表每次使用它都更快。回答时用实际扫描行数、返回行数和耗时说明,而非只检查 SQL 有没有满足最左前缀。