当前位置: 首页 > news >正文

Java后端面试八股文大全(2025最新版)

一、Java基础篇

1. HashMap底层原理

经典回答:HashMap采用数组+链表+红黑树结构,默认初始容量16,负载因子0.75。当链表长度>8且数组长度≥64时转为红黑树。JDK8优化了hash算法:(h = key.hashCode()) ^ (h >>> 16)。扩容时newCap = oldCap << 1,元素要么在原位置,要么在原位置+oldCap。

2. ConcurrentHashMap线程安全实现

标准答案:JDK7使用分段锁(Segment继承ReentrantLock),JDK8改为synchronized+CAS:

  • putVal时对数组元素加锁

  • size()采用baseCount+CounterCell分段统计

  • 扩容时协助迁移(多线程协同)

二、JVM篇

3. 对象内存布局

八股模板

4. G1垃圾回收器

背诵要点

  • 分区算法(Region大小1-32MB)

  • 四种GC模式:Young GC、Mixed GC、Full GC、并发标记

  • SATB解决并发标记漏标问题

  • 推荐场景:堆>6GB,停顿时间<500ms

三、并发编程篇

5. AQS实现原理

标准话术

  • 核心字段:state(volatile)、head/tail(CAS更新)

  • ConditionObject实现条件等待

6. ThreadLocal内存泄漏

标准答案

  • Key泄漏:ThreadLocal弱引用被回收,但Value强引用仍在

  • 根本原因:线程池场景下线程长期存活

  • 解决方案:1) 及时remove() 2) 使用static final修饰

四、Spring篇

7. 循环依赖解决

Spring标准回答
三级缓存解决setter注入循环依赖:

  1. 一级缓存:singletonObjects(完整Bean)

  2. 二级缓存:earlySingletonObjects(早期引用)

  3. 三级缓存:singletonFactories(ObjectFactory)

构造器注入无法解决,需改用@Lazy

8. Spring事务失效场景

排查清单

  1. 非public方法

  2. 同类方法调用(未走代理)

  3. 异常类型不匹配

  4. 多线程调用

  5. 数据库引擎不支持(如MyISAM)

五、数据库篇

9. MySQL索引优化

B+树标准回答

  • 聚簇索引:叶子节点存整行数据(主键索引)

  • 非聚簇索引:叶子节点存主键值(需要回表)

  • 索引失效场景:1) 函数操作 2) 隐式转换 3) 前导模糊查询 4) 范围查询阻断

10. MVCC实现原理

InnoDB标准答案

  • 隐藏字段:DB_TRX_ID(事务ID)、DB_ROLL_PTR(回滚指针)

  • ReadView:m_ids(活跃事务)、min_trx_id、max_trx_id

  • 判断规则:trx_id < min_trx_id可见,trx_id > max_trx_id不可见

六、分布式篇

11. Redis持久化对比

标准对比表

方式触发机制数据安全性恢复速度性能影响
RDB定时/save命令
AOF每条写命令
混合RDB+AOF中高中等中等

12. CAP理论应用

标准解释

  • CP系统(Zookeeper):网络分区时拒绝写入

  • AP系统(Eureka):网络分区时返回旧数据

  • 实际选择:1) 支付系统选CP 2) 商品系统选AP

七、场景设计篇

13. 短链系统设计

标准架构

  1. 发号器:Snowflake(64位ID)

  2. 转码:Base62(0-9a-zA-Z)

  3. 存储:Redis缓存+MySQL持久化

  4. 跳转:302临时重定向

  5. 统计:Redis HyperLogLog

14. 秒杀系统设计

标准方案

  1. 分层削峰:静态化->网关限流->队列缓冲

  2. 库存扣减:Redis Lua脚本原子操作

  3. 防刷:令牌桶限流+风控规则

  4. 降级:排队页+异步通知

八、HR问题篇

15. 职业规划标准答案

三段式模板

  1. 短期(1年):深耕技术栈(如Spring Cloud Alibaba)

  2. 中期(3年):提升架构能力(主导系统重构)

  3. 长期(5年):技术管理双通道(TL或架构师)


相关文章:

  • 【八股战神篇】Java多线程高频面试题(JUC)
  • MongoDB及spring集成
  • SGLang和vllm比有什么优势?
  • 本案例介绍ABB电机保护单元如何走profibus总线通讯
  • stm32week16
  • MIME类型详解及应用案例
  • 【QT】一个界面中嵌入其它界面(二)
  • 数据库存储空间告急?磁盘清理与归档策略全解析
  • docker介绍与常用命令汇总
  • 火山 RTC 引擎9 ----集成 appkey
  • BM25(Best Matching 25)介绍与使用
  • 基于Zynq SDK的LWIP UDP组播开发实战指南
  • 对抗性机器学习:AI模型安全防护新挑战
  • 在linux平台下利用mingw64编译windows程序
  • 码蹄集——N是什么、棋盘
  • 冒泡排序详解
  • thinkphp6实现统一监听并记录所有执行的sql语句除查询外
  • Unity使用sherpa-onnx实现说话人识别
  • DS1302实时时钟模块
  • Java-List集合类全面解析
  • 5月LPR下调:1年期、5年期以上品种均下调10个基点
  • 花旗回应减员传闻:持续评估人力资源战略,将为受影响的个人提供支持
  • 秦洪看盘|小市值股领涨,A股交易情绪复苏
  • 520、521婚登预约迎高峰?上海民政:将增派力量,新人可现场办理
  • 19国入境团抵沪并游玩,老外震惊:“怎么能有这么多人?”
  • 中国田径巡回赛西安站完赛:男子跳远石雨豪夺冠