面灵AI

百度后端一面面经

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

《面试题目》

  1. Java 中有哪些锁?synchronized 属于什么类型的锁,底层原理是什么?
  2. 什么是乐观锁?
  3. 常见垃圾回收器有哪些?异步垃圾回收会带来什么影响?
  4. 频繁发生垃圾回收时如何排查和优化?
  5. 应回收对象没有被回收时如何定位?
  6. 新生代与老年代如何调优?
  7. MySQL 索引使用什么存储结构?叶子节点与非叶子节点的空间和内容有何区别?
  8. 索引存放在硬盘还是内存?扫描索引时是否每次都读磁盘?
  9. MySQL 有哪些日志?有了 binlog 为什么还需要 redo log?
  10. 哪些场景会使用 binlog?
  11. MVCC 的原理是什么?其中的版本号如何工作?
  12. MySQL 有哪些事务隔离级别?读未提交与读已提交有什么区别?
  13. Redis 有哪些持久化方式?RDB 和 AOF 的名称及机制分别是什么?
  14. 如何完成一道非 Hot 100 的现场算法题?

《参考解析》

  1. synchronized 原理:它提供互斥和可见性,实例方法锁当前对象,静态方法锁类对象,代码块锁显式指定的监视器。竞争较轻时 JVM 会采用优化路径,竞争加剧后再进入重量级监视器调度。
  2. GC 排查:先用 GC 日志、JFR 或监控确认回收频率、暂停时间和各代占用,再通过堆转储定位持续增长的对象与引用链。优化顺序应是先修对象生命周期和分配问题,再调整堆大小、分代比例或收集器参数。
  3. B+ 树索引:非叶子节点保存键和子页指针,叶子节点保存聚簇行数据或二级索引的主键。页从磁盘按固定大小读取,但热点页会进入 Buffer Pool,因此查询不等于每次都访问物理磁盘。
  4. redo log 与 binlog:redo log 属于 InnoDB,记录物理变更并保障崩溃恢复;binlog 属于 MySQL Server 层,记录逻辑变更,服务于复制和时间点恢复。事务提交通过两阶段提交协调两者一致性。
  5. MVCC:InnoDB 通过隐藏事务 ID、回滚指针、undo log 和 Read View 重建可见版本。读已提交通常每条语句创建新 Read View,可重复读通常在事务内复用,从而产生不同的一致性读效果。
  6. Redis 持久化:RDB 是某个时点的数据快照,恢复快但可能丢失最近变更;AOF 追加记录写命令,数据更完整但文件更大。生产中可结合使用,并配置重写和刷盘策略。