Java核心面试题解析与实战避坑指南

发布时间:2026/8/24 5:51:09
Java核心面试题解析与实战避坑指南 1. Java高频面试题解析与实战指南最近帮团队筛选Java开发岗候选人发现很多三年经验以上的应聘者在基础问题上频频翻车。整理了一份真实面试中高频出现的Java核心问题清单附带深度解析和避坑指南。无论你是准备面试还是想巩固基础这份清单都能帮你快速定位知识盲区。2. Java基础核心八连问2.1 String的不可变性设计实际工程中遇到过字符串拼接导致的性能问题在日志组件里用拼接10万条日志直接让Young GC增加了200ms。String的不可变设计通过以下机制实现final修饰的char数组存储数据所有修改操作都返回新对象原生方法实现数组拷贝重要提示正则表达式Pattern.compile()也要避免在循环中调用和StringBuilder滥用一样是常见性能坑点2.2 HashMap扩容死链问题JDK7的闭环链表问题在JDK8通过尾插法解决但面试时80%的候选人说不清楚具体重现步骤。实测在并发put时线程A执行到transfer()时挂起线程B完成扩容导致链表倒序线程A恢复后形成环形引用// 复现代码关键片段 MapInteger,String map new HashMap(2); map.put(1, A); new Thread(() - map.put(2, B)).start(); new Thread(() - map.put(3, C)).start();2.3 volatile的可见性本质通过HSDIS查看汇编代码会发现volatile变量写操作后会多执行lock addl指令这个操作会将当前处理器缓存行写回内存使其他CPU里缓存了该地址的数据失效需要配合内存屏障使用3. JVM深度拷问三件套3.1 对象内存布局实战用JOL工具分析对象头时发现开启指针压缩后普通对象头12字节Mark Word 8字节 Klass Pointer 4字节数组对象头16字节多4字节记录长度字段对齐补白可能浪费20%空间# 使用JOL工具示例 java -jar jol-cli.jar internals java.util.HashMap3.2 GC日志分析技巧最近一次Full GC日志显示[Full GC (Allocation Failure) [PSYoungGen: 0K-0K(9216K)] [ParOldGen: 20480K-10240K(20480K)] 20480K-10240K(29696K) ]说明年轻代完全没空间老年代回收了50%对象堆总使用量从20MB降到10MB3.3 类加载器冲突案例Spring项目中出现NoSuchMethodError排查发现Tomcat的common loader加载了servlet-api 2.5Webapp loader加载了servlet-api 3.0用mvn dependency:tree发现两个版本共存4. 并发编程死亡五连问4.1 AQS实现原理ReentrantLock的加锁流程尝试CAS修改state失败后进入CLH队列自旋检查前驱节点状态最终通过LockSupport.park()挂起4.2 ThreadLocal内存泄漏线上OOM案例追踪线程池复用导致ThreadLocalMap长期存在Entry的key是弱引用会被回收但value强引用导致泄漏必须手动remove()4.3 ConcurrentHashMap分段演进JDK7到JDK8的变化分段锁 - CASsynchronized查询不再加锁扩容时协助转移计数器分离5. Spring框架灵魂六问5.1 循环依赖解决机制三级缓存的工作流程singletonFactories存放lambda表达式earlySingletonObjects存放半成品构造器注入无法解决循环依赖Lazy是另一种解决方案5.2 事务失效场景汇总踩过坑的失效情况同类方法调用未走代理异常类型不匹配数据库引擎不支持方法非public5.3 Bean生命周期完整过程从源码角度看到的执行顺序InstantiationAwareBeanPostProcessor前置处理构造方法实例化属性填充Aware接口回调BeanPostProcessor前置处理InitializingBean.afterPropertiesSet()init-methodBeanPostProcessor后置处理6. 数据库相关夺命四连6.1 索引失效经典场景通过explain发现typeALL的情况对字段做了函数计算使用左模糊查询出现隐式类型转换不符合最左前缀原则6.2 MVCC实现原理InnoDB的版本链包含DB_TRX_ID事务IDDB_ROLL_PTR回滚指针DB_ROW_ID行IDReadView判断可见性6.3 分库分表全局ID方案对比过三种方案雪花算法时钟回拨问题数据库号段需要预分配Redis原子操作网络依赖7. 分布式架构必问三题7.1 CAP理论实践取舍注册中心选型时Zookeeper保证CPEureka保证APNacos支持切换模式服务发现场景通常选择AP7.2 分布式事务方案对比实际项目中的选择强一致性Seata AT模式最终一致RocketMQ事务消息最大努力通知本地事件表7.3 Redis缓存穿透方案布隆过滤器的实现要点多个哈希函数降低碰撞位数组空间计算公式存在误判率需要权衡不支持删除操作8. 项目经验类问题拆解8.1 线上问题排查套路最近处理CPU飙高问题的步骤top定位线程IDprintf %x转16进制jstack查找线程栈发现死循环调用8.2 设计模式实战案例策略模式在支付系统的应用定义PaymentStrategy接口实现Alipay/WechatPay等策略用枚举维护策略映射避免if-else分支膨胀8.3 技术方案选型考量消息队列选型时的checklist消息堆积能力延迟消息支持事务消息机制监控完善程度9. 面试实战技巧补充9.1 算法题准备重点常考题型出现频率链表操作反转/环检测二叉树遍历非递归实现排序算法快排优化动态规划背包问题9.2 项目难点回答策略使用STAR法则组织Situation千万级日活的优惠系统Task解决库存超卖问题Action引入RedisLua扣减ResultTPS提升到30009.3 技术趋势应对建议保持竞争力的方法每周精读1篇源码解析参与开源项目issue讨论搭建个人技术博客定期做技术雷达扫描