字节跳动后端暑期实习一面面经

字节跳动 · 后端开发实习生 · 一面 · 2026-03

面试题目

  1. 解释一下 JMM。
  2. 介绍一下 volatile 的作用,它是怎么保证可见性和防止指令重排的?
  3. 介绍一下 Java 的 GC 机制。
  4. Redis 为什么那么快?
  5. Redis 7.0 后加入了多线程,具体针对哪一方面的?
  6. Redis 持久化机制有几种?RDB 会丢数据吗?
  7. 项目拷打:从数据库表结构开始,重点询问高并发项目相关设计。
  8. 算法题:用栈实现队列。

参考解析

  1. JMM: Java内存模型定义了共享内存中多线程读写操作的行为,通过主内存和工作内存的交互,解决并发编程中的原子性、可见性和有序性问题。
  2. volatile: 保证可见性(强制刷新主存)和有序性(禁止指令重排)。底层通过内存屏障(Memory Barrier)实现,禁止特定类型的处理器重排序。
  3. GC机制: 主要包括判断对象存活(可达性分析)、GC算法(标记-清除、复制、标记-整理)以及分代收集理论(新生代/老年代)。
  4. Redis快的原因: 纯内存操作;基于非阻塞I/O多路复用模型;单线程避免了上下文切换和锁竞争开销;高效的数据结构(如跳表、压缩列表)。
  5. Redis多线程: Redis 7.0 引入多线程主要用于处理网络请求读写(IO线程),即把网络连接的数据解析任务分担给子线程,核心命令执行依然保持单线程以保证原子性。
  6. 持久化机制: RDB(快照)和 AOF(日志)。RDB由于是定时快照,在两次快照间隔期间发生宕机会导致数据丢失;AOF通常配置每秒同步,数据可靠性更高。