字节跳动后端开发一面面经

字节跳动 · 后端开发 · 一面 · 2026-04

面试题目

  1. Guava Cache 和 Caffeine 分别使用了什么缓存淘汰算法?
  2. 实际项目里本地缓存命中率大概多少?
  3. 引入缓存带来的风险和解决方案?
  4. 缓存的读写策略?
  5. 如何保证缓存和数据库一致性?
  6. “先写缓存,再异步批量刷库”方案,除一致性外还有哪些潜在风险?
  7. 如何拦截恶意请求,设计防护手段避免缓存被恶意利用?
  8. 布隆过滤器原理,如何解决缓存穿透?
  9. 布隆过滤器误判概率大概多少,如何估计?
  10. 定时任务 5 分钟一轮询,任务执行超 5 分钟时,如何保证状态不丢失、不阻塞调度?
  11. 分布式 RPC 为什么要自定义协议,而不用 HTTP?
  12. 单机 QPS 1w+ 这个数据是怎么统计/得到的?
  13. RPC 项目目前瓶颈在哪?
  14. 了解哪些 HTTP 版本,各版本特性?
  15. HTTP 队头阻塞是什么?
  16. 队头阻塞是否只存在于 HTTP 层面?
  17. TCP 会不会存在对应阻塞问题?
  18. HTTP3 如何解决 HTTP2 在 TCP 上的队头阻塞?
  19. 为什么 HTTP3 基于 QUIC,而不继续在 TCP 上优化?
  20. TCP 如何实现可靠传输和流量控制?
  21. TCP 发送窗口如何根据接收窗口和拥塞情况动态调整,窗口结构如何维护变化?
  22. TCP 如何判断报文丢失,什么条件触发重传?
  23. TCP 除重传计时器外还有哪些计时器?
  24. AI 项目中降低大模型幻觉的具体优化方法?
  25. 大模型产生幻觉的底层技术原因?
  26. 算法题:Java 原生数组实现栈,实现常用操作。

参考解析

  • 缓存淘汰算法:Guava 使用 LRU(最近最少使用);Caffeine 使用 W-TinyLFU(结合了频率和新鲜度,性能优于 LRU)。
  • 缓存一致性:常用策略有先更新库再删除缓存、延时双删或使用 Canal 等中间件通过 binlog 异步更新缓存。
  • 队头阻塞解决:HTTP2 的队头阻塞源于 TCP 的有序性要求;HTTP3 使用 QUIC 协议(基于 UDP),多个 Stream 独立传输,单个丢包不影响其他流。
  • 大模型幻觉:产生原因主要是训练数据噪声及模型对长尾知识的不确定性。优化方法包括 RAG(检索增强生成)、Prompt Engineering 约束及强化学习(RLHF)。
  • TCP 拥塞控制:通过慢启动、拥塞避免、快重传和快恢复算法,利用滑动窗口动态调整传输速度以适应网络负载。