某大厂Java后端三面面经:从疯狂延期到一路狂飙
- 轮次
- 三面
- 时间
- 2026-07
- 来源
- 牛客网
《面试题目》
- 为什么Kafka吞吐量这么高?
- 如何保证 Exactly-Once 语义?
- Producer 发送消息失败的重试机制是怎样的?
- MySQL索引底层是怎么实现的?Hash和B+树有啥区别?为什么MySQL偏偏选中了B+树?聚簇索引到底好在哪里?
- Linux平时用过哪些命令?如果要对一个大文件进行排序该怎么搞?
- 【手撕代码】
- 最后手撕了一道经典的 LRU链表。第二天中午接到电话,约3天后二面。
- 调优思路是什么?
- Change Buffer 原理是啥?只有普通索引会用到,唯一索引会用吗?
- 最左匹配原则:对联合索引 (a,b,c) 查 b 会走索引吗?
- 如果对 score 建了索引,查 select id from table where score > 50.0 需要回表吗?
- 进程和线程的区别?通信方式有哪些?哪个最快?
- 同一个进程的多个线程之间,哪些内存是共享的?
- 迭代查询和递归查询的区别是什么?
- DNS用的是UDP还是TCP?为什么选UDP而不是TCP?
- 面向对象的三大特征是啥?
- 聊聊 volatile,什么场景下需要它?
- 如果 CAS 不结合 volatile 使用会引发什么问题?
- volatile 有什么缺点?
- Producer往Broker发消息的具体流程是什么?
- 消息发到哪个Partition是怎么决定的?
- 如果Kafka动态扩容了,Producer怎么感知新节点?
- 用MySQL做一个转账功能怎么实现?详细讲讲事务执行的过程。
- 怎么保证转账的线程安全?
- 高并发场景下,如何保证一个账户的余额不被扣成负数?
- new 一个对象会用到哪些内存区域?
- 执行 int a = 1; 会用到哪些内存?
《参考解析》
- 这类问题建议结合自己的项目经历和岗位要求准备具体案例,突出思考过程而非死记结论,面试官更看重解决问题的逻辑。
- 红黑树是内存内的平衡二叉树,追求单点操作的对数复杂度;B+树针对磁盘/索引场景做了扇出优化,减少IO次数,更适合范围查询和顺序扫描。
- LRU的核心是维护访问顺序,常见实现是哈希表+双向链表,做到O(1)的读写与淘汰;Linux内核用近似LRU(多级链表冷热分区)避免维护严格顺序带来的开销。
- 进程是资源分配的基本单位,线程是CPU调度的基本单位,协程是用户态的轻量级调度单位,切换成本远低于线程,但需要语言/运行时支持。
- CAS通过比较并交换实现无锁更新,失败后需要重试;库存扣减等高竞争场景可以引入版本号或分段计数减少冲突概率,避免忙等消耗过多CPU。