面灵AI

字节跳动高并发中间件后端面经

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. Spring Boot 自动配置的启动流程是什么?
  2. Spring MVC 如何处理一次 HTTP 请求?
  3. MySQL 的事务隔离级别如何通过 MVCC 和锁实现?
  4. Redo log、Binlog、Undo log 各自有什么作用,两阶段提交为何必要?
  5. MySQL 为什么使用 B+ 树索引,最左匹配原则是什么?
  6. Redis 单线程为何仍能支撑高并发,I/O 多路复用如何工作?
  7. Redis 的 RDB 与 AOF 如何选择,怎样保证持久化可靠性?
  8. 缓存击穿、穿透和雪崩分别如何处理?
  9. Redis Cluster 如何进行 slot 分配和水平扩展?
  10. 如何实现线程安全的 LRU 缓存?
  11. 高并发接口如何保证幂等?
  12. 微服务间分布式事务有哪些解决方案?
  13. 线上 OOM 如何定位和优化?
  14. 配置中心动态刷新如何保证优先级和一致性?

《参考解析》

  1. Spring Boot 通过启动类和自动配置导入候选配置,结合条件注解、环境属性和 Bean 后置处理器完成容器装配;MVC 请求依次经过 DispatcherServlet、映射器、适配器、控制器和消息转换器。
  2. Undo log 支持回滚与一致性读,Redo log 保证崩溃恢复,Binlog 记录逻辑变更供复制和恢复使用。两阶段提交让 InnoDB 与 Binlog 对同一事务的提交状态保持一致。
  3. B+ 树非叶节点只存键和指针,树高低且叶子有序,适合范围扫描;联合索引从最左列开始连续使用,遇到范围条件后后续列通常不能继续用于定位。
  4. Redis 主线程执行命令,网络事件由 I/O 多路复用器批量就绪后处理,避免每个连接创建线程的切换成本。RDB 适合快速恢复,AOF 更接近实时,生产上可组合使用并明确 fsync 策略。
  5. 热点 key 可用互斥重建、逻辑过期或请求合并;穿透用空值或布隆过滤器;雪崩通过随机 TTL、分批失效和限流降级缓解。Cluster 按 slot 将 key 分布到分片,扩容时迁移 slot 并更新拓扑。
  6. 线程安全 LRU 通常以哈希表加双向链表实现 O(1) 访问和淘汰,再用锁或分段并发控制保护复合操作。接口幂等需要业务唯一键、状态机和唯一约束共同兜底。
  7. 分布式事务可按业务选择 TCC、Saga 或可靠消息最终一致性;不能只依赖本地事务。OOM 先结合 GC 日志、堆转储和 MAT 找到大对象或泄漏引用,再从集合生命周期、缓存和线程数入手修复。