字节 Agent 开发一面:推理缓存、网络与存储基础

岗位:agent开发 · 更新于 2026-10-28

面经与参考答法

字节 Agent 开发一面:推理缓存、网络与存储基础

原帖发布于 2026 年 8 月,正文未披露具体面试日期。本文选录 KV Cache 之后可见的技术题,省略岗位介绍、自我介绍以及未展开的项目和实习询问;答案是教学整理,不代表候选人现场回答。

这轮面试从大模型推理的 KV Cache 出发,依次考察浏览器网络链路、TCP、MySQL、Redis、分布式 ID 和排序。复习时应把定义和实际系统中的边界、故障处理一起说清。

(1)KV Cache 是什么,为什么能加速大模型推理?

(1)KV Cache 是什么,为什么能加速大模型推理?

关联知识点待核实。

自回归生成第 $t$ 个 token 时,注意力需要读取此前 token 的 Key 和 Value。若每一步都重新计算整个历史,计算量会反复增长;KV Cache 将已计算的 Key/Value 按层保存,下一步只计算新 token 的 K/V,再与缓存拼接计算注意力。因此解码阶段通常能显著降低重复计算和首 token 之后的延迟。

它不是没有代价:缓存随层数、序列长度、并发数和精度增长,会占用大量显存,也影响批处理与请求调度。工程上需要设置上下文上限、分页或块化管理缓存,并监控命中、显存水位与排队时间。

(2)网页的一次点击怎样到达服务器并得到页面反馈?

(2)网页的一次点击怎样到达服务器并得到页面反馈?

关联知识点待核实。

浏览器先由事件处理器把点击转成请求:校验输入和登录态,构造 URL、方法、请求头和请求体;若跨域还可能先发预检。它复用或建立 DNS、TCP/TLS(或 QUIC)连接,经 CDN、网关和负载均衡到应用服务;服务再访问缓存、数据库或下游服务,生成 HTTP 响应。

浏览器收到响应后按状态码处理错误或重定向,解析数据并更新 DOM/状态,必要时触发布局与绘制。排查慢点击不能只看接口耗时,还要沿链路看 DNS、连接、TTFB、服务端依赖、传输大小与主线程渲染。

延伸阅读:前端性能诊断。

(3)TCP 为什么通常三次握手、四次挥手?挥手一定是四次吗?

(3)TCP 为什么通常三次握手、四次挥手?挥手一定是四次吗?

关联知识点待核实。

三次握手让双方确认“对方能收、能发”,并同步初始序列号:客户端发 SYN,服务端回 SYN+ACK,客户端再回 ACK。第三次确认避免旧的延迟连接请求使服务端误建连接,也让服务端知道客户端已收到其序列号。

关闭是双向的:一方发送 FIN 只表示自己不再发送,仍可接收;另一方确认后,等本端待发送数据完成再发送自己的 FIN,因此常见为四个报文。若被动关闭方确认时已没有待发送数据,ACK 与 FIN 可以合并为一个报文;异常关闭还可能用 RST,不能把“四次”当成所有情况的硬规则。

延伸阅读:TCP 建连、断开与连接状态。

(4)MySQL 为什么常用 B+ 树索引?最左前缀匹配是什么意思?

(4)MySQL 为什么常用 B+ 树索引?最左前缀匹配是什么意思?

关联知识点待核实。

B+ 树的内部节点主要保存键和子节点指针,叶子节点保存完整索引项且通常按键有序、彼此相连。较高扇出让树高较低,适合磁盘页读取;叶子有序链接也支持范围扫描和排序访问。

联合索引如 (a, b, c) 按字典序组织,谓词从左侧连续列开始,才能高效确定一段连续索引范围,例如 a = ? AND b = ?。跳过 a 直接按 b 查,通常无法利用该索引的有序性;对前导列做函数转换或前导模糊匹配也可能让优化器放弃索引。是否使用仍要以执行计划和选择性为准。

延伸阅读:MySQL 索引与执行计划。

(5)缓存击穿、穿透和雪崩分别是什么,怎样处理?

(5)缓存击穿、穿透和雪崩分别是什么,怎样处理?

关联知识点待核实。

缓存穿透是大量请求不存在的数据而持续落到数据库,可缓存空值、使用布隆过滤器并做参数校验和限流。缓存击穿是某个热点 key 过期后,大量并发同时回源;可用互斥重建、逻辑过期加后台刷新或热点预热。缓存雪崩是大量 key 同时失效或缓存集群不可用,需错开 TTL、分层缓存、限流降级和高可用部署。

三者的共同原则是:缓存只是加速层,数据库和下游必须有可承受的回退策略;写路径还应明确缓存与数据库的一致性模型。

延伸阅读:Redis 缓存策略与一致性。

(6)多台机器怎样生成唯一 ID?若要求自增,需要澄清哪些顺序约束?

(6)多台机器怎样生成唯一 ID?若要求自增,需要澄清哪些顺序约束?

关联知识点待核实。

可选方案包括数据库自增列、号段分配、随机 UUID、基于时间戳的分布式 ID,以及协调服务发号。选择取决于吞吐、长度、是否暴露业务规模、时钟容忍度和跨地域部署。高并发系统常把时间、机器或逻辑序列组合成 ID,并对时钟回拨、序列耗尽和机器标识冲突制定处理策略。

“全局唯一”不等于“严格全局连续递增”。应先澄清自增指严格单调、无间隙连续,还是按时间大致有序;这些约束不能互相替代。严格连续通常需要串行协调,吞吐和可用性会受限;是否允许间隙由业务合同确定。若用数据库或号段发号,应说明高可用、缓存号段丢失和重启后的恢复策略。

延伸阅读:分布式 ID 生成。

(7)手写排序时,怎样选择和说明算法?

(7)手写排序时,怎样选择和说明算法?

关联知识点待核实。

先澄清输入规模、是否要求稳定、是否允许修改原数组、数据是否近乎有序,以及是否需要处理对象或极值。通用场景可写归并排序:分治后合并两个有序区间,时间复杂度稳定为 $O(n \log n)$,稳定,但需要 $O(n)$ 辅助空间。原地且平均性能优先时可选快速排序,但要随机化或三路划分降低退化风险;堆排序额外空间小,但通常不稳定且常数较大。

手写时应保证边界、比较器和重复元素处理正确,再说明复杂度,不要只报出一个算法名字。

延伸阅读:排序算法。

面经是候选人自述,解析为 Agent Journey 整理。更多大厂 AI / Agent 岗面经 · 按目标公司模拟面试