百度后端一面面经
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- Java 中有哪些锁?
synchronized属于什么类型的锁,底层原理是什么? - 什么是乐观锁?
- 常见垃圾回收器有哪些?异步垃圾回收会带来什么影响?
- 频繁发生垃圾回收时如何排查和优化?
- 应回收对象没有被回收时如何定位?
- 新生代与老年代如何调优?
- MySQL 索引使用什么存储结构?叶子节点与非叶子节点的空间和内容有何区别?
- 索引存放在硬盘还是内存?扫描索引时是否每次都读磁盘?
- MySQL 有哪些日志?有了 binlog 为什么还需要 redo log?
- 哪些场景会使用 binlog?
- MVCC 的原理是什么?其中的版本号如何工作?
- MySQL 有哪些事务隔离级别?读未提交与读已提交有什么区别?
- Redis 有哪些持久化方式?RDB 和 AOF 的名称及机制分别是什么?
- 如何完成一道非 Hot 100 的现场算法题?
《参考解析》
synchronized原理:它提供互斥和可见性,实例方法锁当前对象,静态方法锁类对象,代码块锁显式指定的监视器。竞争较轻时 JVM 会采用优化路径,竞争加剧后再进入重量级监视器调度。- GC 排查:先用 GC 日志、JFR 或监控确认回收频率、暂停时间和各代占用,再通过堆转储定位持续增长的对象与引用链。优化顺序应是先修对象生命周期和分配问题,再调整堆大小、分代比例或收集器参数。
- B+ 树索引:非叶子节点保存键和子页指针,叶子节点保存聚簇行数据或二级索引的主键。页从磁盘按固定大小读取,但热点页会进入 Buffer Pool,因此查询不等于每次都访问物理磁盘。
- redo log 与 binlog:redo log 属于 InnoDB,记录物理变更并保障崩溃恢复;binlog 属于 MySQL Server 层,记录逻辑变更,服务于复制和时间点恢复。事务提交通过两阶段提交协调两者一致性。
- MVCC:InnoDB 通过隐藏事务 ID、回滚指针、undo log 和 Read View 重建可见版本。读已提交通常每条语句创建新 Read View,可重复读通常在事务内复用,从而产生不同的一致性读效果。
- Redis 持久化:RDB 是某个时点的数据快照,恢复快但可能丢失最近变更;AOF 追加记录写命令,数据更完整但文件更大。生产中可结合使用,并配置重写和刷盘策略。