字节跳动 Java 二面面经
- synchronized 和 ReentrantLock 的区别?底层实现机制分别是什么?
- volatile 的作用是什么?能保证原子性吗?
- ThreadLocal 的原理,为什么会发生内存泄露?
- 线程池的参数配置,拒绝策略有哪些?在高并发场景怎么设计?
- JVM 内存结构,GC Roots 有哪些?
- CMS 和 G1 垃圾回收器的区别与使用场景。
- 遇到线上 Full GC 频繁,你会怎么排查?
- 说一下 MySQL 的事务隔离级别,每一级别可能出现的问题。
- MySQL 中的索引类型有哪些?为什么用 B+ 树而不是 B 树?
- Redis 的缓存穿透、击穿、雪崩问题是怎么解决的?
- 手写 LRU 缓存(要求 O(1) 时间复杂度的 get 和 put)。
- 判断链表是否有环,如果有,返回环的入口节点。
- 滑动窗口最大值问题,要求给出时间复杂度尽量低的解法。
- 设计一个评论系统,要支持高并发写入、分页查询、热评展示,还要考虑防刷。
- 你在项目中遇到的性能瓶颈是什么?当时是如何定位并解决的?
- 你做过的项目里,最有挑战的一次优化或故障排查经历是什么?
面经总结
字节的二面往往比一面更深入,重点放在 并发、JVM、算法、数据库与缓存、系统设计 五个方面。
- 并发 & JVM:一定会被追问底层原理,光会用不够,要能解释「为什么」。
- 算法:一般 1–2 道,要求写出代码,复杂度要说清楚。
- 数据库 & 缓存:围绕 MySQL 和 Redis 的高频问题,缓存一致性、事务隔离、索引原理几乎必考。
- 系统设计 & 项目:会结合你简历里的项目,让你说出架构设计、优化措施以及背后的权衡。
- 提问环节:最后通常会问「你有什么问题要问我」,不要空着,可以问团队技术栈、业务场景、挑战点。