字节跳动后端开发面经(已获Offer)

字节跳动 · Java后端开发 · 一面+二面+三面+HR面 · 2026-04

面试题目

一面 (50min)

  1. 数据一致性保证:多机房多集群下Redis限流实现。
  2. 乐观锁和悲观锁的区别。
  3. AOP底层原理。
  4. 如何解决Redis大key和热key问题。
  5. Spring Bean初始化流程。
  6. Spring如何解决循环依赖。
  7. HTTP请求从浏览器到服务器的全过程。
  8. HTTP和HTTPS区别。
  9. 公钥与私钥的概念。 手撕:LCR 194 二叉树的最近公共祖先。

二面 (1h)

  1. 项目:Redis防止超卖与数据库关系。
  2. 定时任务宕机丢失方案。
  3. 项目中缓存击穿场景。
  4. 订单系统设计:索引设计、分库分表方案、慢查询优化、Explain分析。
  5. Redis:常用数据结构、Zset底层实现、主从复制。
  6. RabbitMQ:消息不丢失方案(生产/消费)、消费顺序保证。
  7. HashMap底层实现及哈希冲突处理。
  8. 线程池原理及优势。 手撕:LCR 023 相交链表。

三面 (40min)

  1. ConcurrentHashMap底层原理。
  2. 缓存过期时间设置策略。
  3. 使用本地缓存的原因。 手撕:LCR 095 最长公共子序列(变种:输出序列)。

HR面 (20min)

常规业务与个人情况沟通。


参考解析

  1. Redis大Key/热Key:大Key通过拆分、压缩或异步删除解决;热Key通过本地缓存(如Guava/Caffeine)、读写分离或分片存储处理。
  2. Spring循环依赖:通过三级缓存机制解决,即单例对象在构造后立即放入缓存,允许在初始化完成前注入引用。
  3. MySQL分库分表:垂直拆分基于业务模块,水平拆分基于关键字段(如订单ID)取模,需注意分布式事务与跨库聚合查询的代价。
  4. RabbitMQ可靠性:生产端使用Confirm机制确认投递;消费端通过ACK确认机制保证处理完成;顺序消费通过单个队列或分片Key映射到固定消费者实现。
  5. ConcurrentHashMap:采用分段锁(JDK 7)或 CAS+synchronized(JDK 8+)实现,确保高并发下的线程安全与高性能读写。