快手 后端开发一面面经(9.28):Agent 架构、LLM 评测与 KV Cache 深挖
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
一面
- 说一下你的实习主要做了什么内容
- 第一个 Agent 为什么不用多 Agent 去做
- MCP 调用和本地 CLI 调用的区别,优缺点
- 讲一下你们 Agent 的可观测是怎么做的,这些指标是怎么得出的
- 你怎么看待 human as a judge 和 llm as a judge?
- 讲一下 jev 可以用于什么场景?
- 为什么代码知识库不用图去做,而是用你现在的技术栈,优点在哪?
- 讲一下 KV Cache 的原理,工程侧去提升复用主要表现在哪些方面?
- 讲一下 protobuf 和 json 的区别
- 你的后端项目中 QPS 提升都是采取了什么方法?怎么测的?
- 为什么选用 Kafka?
- 讲一下零拷贝的原理
- 能否转正?
手撕:最小覆盖子串
《参考解析》
-
单 Agent 还是多 Agent,要用约束条件回答:能一句话说清的场景就别拆多 Agent——链路短、工具少、状态可以放在一个上下文里时,多 Agent 只增加了通信成本、错误放大和调试难度。真正需要拆的信号是:子任务之间工具集差别很大(检索 vs 执行 vs 校验)、上下文放不下、需要并行、需要独立评测。答的时候把「当时为什么不拆」和「什么条件下会拆」都给出,比断言多 Agent 更好或更差都站得住。
-
MCP 与本地 CLI 的差异要讲到工程代价:MCP 是标准化的工具协议,工具的能力、参数 schema、资源都由服务端声明,宿主统一管理进程生命周期和授权,跨客户端可复用;代价是多一层协议与进程、有额外延迟和部署要求。本地 CLI 的优势是简单直接、能复用海量现成命令、调试所见即所得;劣势是权限边界粗(拿到的是整个 shell)、参数靠约定而非 schema、环境依赖要自己保证。选型看两点:要不要给非开发者复用,以及能不能接受 shell 级别的权限面。
-
Agent 可观测讲三件事:链路、指标、来源:链路是 trace——每次会话的规划、工具调用、参数、返回、耗时、token 数都要留痕;指标分质量(任务成功率、人工采纳率、工具调用错误率)、成本(token/调用次数)、性能(首 token 延迟、端到端时延)。关键是要说清每个指标怎么算出来的:成功率靠什么判定(用户反馈、结果校验还是 LLM 打分)、错误率从哪一层埋点取,答不上来源的指标等于没有。
-
LLM as a judge 与 human as a judge 是校准关系不是替代关系:人工评审是金标准,但贵、慢、不同评审之间标准不一致;LLM 评审便宜、可大规模、可复现,但存在位置偏好、偏爱长回答、以及对自己家模型的偏好。工程上的做法是先写死评分 rubric,用一批人工标注样本对齐 LLM judge(看一致率),过了阈值才敢用它做线上大规模回归,同时保留人工抽检。答这题时能说出「先对齐再放开」这个次序就赢一半。
-
代码知识库为什么不用图,要答检索目标:图(AST、调用图、依赖图)擅长表达跨文件的结构关系,但构建与增量更新成本高、语言与构建系统一变就要重做解析;向量加关键词的混合检索更适合「按语义找片段」这类主诉求,接入成本低、增删改一件文件就能生效。更完整的答法是承认边界——需要精确追踪调用链时图确实更强,所以成熟方案往往是混合检索加按需的符号索引,而不是非此即彼。
-
KV Cache 的复用点要落到工程手段:自回归解码时每步都要用到历史 token 的 K、V,缓存下来就能把每步计算从与序列长度相关降到与单步相关。工程侧提升复用主要靠前缀缓存(相同 system prompt、相同文档前缀直接复用)、按块管理显存减少碎片(分页式 KV 管理)、连续批处理提高显存利用率、以及在可接受精度损失下做量化。面试官追问时通常会往「什么情况下前缀会失效」上带——任何前缀 token 变化都会让缓存整段失效,所以提示词要把稳定内容放前面、变量放后面。
-
QPS 类问题必须带测法:优化手段无非缓存、批量合并、异步化、连接池与线程池调参、数据库索引与读写分离、无状态服务水平扩容;但答完手段一定要接压测——用压测工具打目标 QPS 与更高一档,观察 TP99、错误率、CPU/内存/连接数和下游瓶颈,定位到瓶颈再改,改完复测。只说「加了 Redis 所以 QPS 上去了」会被继续追问到底提升了多少、怎么证明不是压测环境的问题。
-
零拷贝与手撕两题都靠基本功:零拷贝的核心是让数据不经过用户态——
sendfile把文件从页缓存直接送到 socket 缓冲区,配合 DMA 减少拷贝次数与上下文切换,Java 侧对应FileChannel.transferTo;这也是 Kafka 高性能的原因之一,但它依赖「数据顺序追加、消费者顺序读」的访问模式,随机读场景不适用。最小覆盖子串是滑动窗口模板题:右指针扩张到窗口覆盖全部目标字符,再收缩左指针逼近最小长度,用一个计数数组加「已满足字符种类数」判断窗口是否合法即可,注意重复字符和空串边界。