
1. Java面试的核心考察维度Java作为企业级开发的主流语言面试官通常会从四个层面考察候选人能力语言基础、核心机制、框架生态和系统设计。根据我参与技术面试的经验80%的初级岗位问题集中在JVM、集合和多线程三大领域而中高级岗位则更关注性能调优和架构设计。重要提示面试官往往通过连续追问来考察知识深度例如从HashMap实现原理引申到线程安全方案再延伸到分布式环境下的数据一致性处理。2. JVM核心机制20问2.1 内存模型与GC机制JVM内存区域划分堆区对象实例存储区域被所有线程共享方法区存储类信息、常量、静态变量JDK8后由元空间实现虚拟机栈线程私有存储栈帧局部变量表、操作数栈等程序计数器线程私有记录当前线程执行位置本地方法栈为Native方法服务垃圾回收算法对比// 典型内存泄漏示例 public class MemoryLeak { static ListObject leakList new ArrayList(); void populateList() { for(int i0; i1000; i) { leakList.add(new byte[1024*1024]); // 每次添加1MB对象 } } }标记-清除产生内存碎片CMS采用此方式复制算法新生代回收空间换时间标记-整理老年代回收解决碎片问题分代收集HotSpot默认策略新生代老年代G1与ZGC的区别G1面向服务端应用的垃圾收集器延迟可控ZGC亚毫秒级停顿支持TB级堆内存关键参数-XX:UseG1GC和-XX:UseZGC2.2 类加载与字节码双亲委派模型破坏场景JDBC驱动加载使用ThreadContextClassLoaderOSGi模块化系统热部署场景方法区OOM排查步骤# 常见错误日志 java.lang.OutOfMemoryError: Metaspace检查-XX:MetaspaceSize设置使用JVisualVM分析类加载情况排查动态代理生成类3. 集合框架深度解析3.1 HashMap底层原理JDK8的树化优化链表长度8且数组长度≥64时转为红黑树退化阈值节点数≤6时转回链表哈希扰动函数优化static final int hash(Object key) { int h; return (key null) ? 0 : (h key.hashCode()) ^ (h 16); }ConcurrentHashMap分段演进JDK7Segment分段锁16段JDK8CASsynchronized锁头节点size()方法优化基于CounterCell的统计3.2 并发集合对比CopyOnWriteArrayList适用场景读多写少监听器列表迭代期间允许修改缺陷内存占用大数据实时性差BlockingQueue实现对比实现类锁类型特点ArrayBlockingQueueReentrantLock固定容量LinkedBlockingQueue双锁分离可选边界PriorityBlockingQueueReentrantLock优先级排序SynchronousQueue无缓冲直接传递4. 多线程与并发编程4.1 线程状态管理wait()与sleep()的区别调用wait()会释放锁sleep()不会wait()必须在同步块中使用sleep()是Thread类方法wait()是Object方法ThreadLocal内存泄漏防范public class SafeThreadLocal { private static final ThreadLocalSimpleDateFormat formatter ThreadLocal.withInitial(() - new SimpleDateFormat(yyyy-MM-dd)); public void remove() { formatter.remove(); // 必须显式清理 } }4.2 锁机制进阶AQS实现原理核心字段statevolatile intCLH队列管理等待线程模板方法模式tryAcquire()需子类实现偏向锁升级过程初始无锁状态第一个线程访问→偏向锁出现竞争→轻量级锁CAS自旋自旋失败→重量级锁5. Spring框架核心考点5.1 IOC容器原理Bean生命周期关键节点实例化属性填充Aware接口回调初始化前/后处理器销毁前回调循环依赖解决机制三级缓存singletonObjects完整BeanearlySingletonObjects早期引用singletonFactoriesObjectFactory5.2 AOP实现方式JDK动态代理限制只能代理接口性能优于CGLIBInvocationHandler处理逻辑Transactional失效场景非public方法自调用问题异常类型不匹配数据库引擎不支持6. 数据库与性能优化6.1 MySQL索引优化B树索引优势相比B树更高的扇出更少的IO叶子节点链表结构适合范围查询聚簇索引数据存储有序Explain关键字段解读type从优到差 system const ref range index ALLExtraUsing filesort需要优化6.2 事务隔离级别MVCC实现原理隐藏字段DB_TRX_ID, DB_ROLL_PTRReadView生成规则快照读与当前读区别7. 分布式系统专题7.1 CAP理论实践ZooKeeper的CP特性Zab协议保证顺序一致性选举期间不可用观察者节点提升读性能Redis集群数据分片哈希槽16384个slotMOVED/ASK重定向批量操作限制7.2 分布式锁实现RedLock算法争议时钟漂移问题官方建议优先考虑单实例备份替代方案Zookeeper临时顺序节点8. 设计模式实战案例8.1 创建型模式Spring中的工厂模式BeanFactory基础容器ApplicationContext扩展功能FactoryBean复杂对象创建Builder模式优势// Lombok实现 Builder public class User { private String name; private int age; }解决构造器参数过多问题支持链式调用对象创建过程可控8.2 行为型模式策略模式在支付系统中的应用定义支付接口实现支付宝/微信支付策略通过上下文切换策略9. 性能调优实战技巧9.1 JVM参数优化Young GC频繁调优现象Eden区快速填满方案增大-Xmn或调整-XX:SurvivorRatio监控jstat -gcutil [pid] 1000堆外内存泄漏排查NMT工具监控-XX:NativeMemoryTrackingdetail对比基线jcmd pid VM.native_memory baseline分析差异jcmd pid VM.native_memory detail.diff9.2 SQL优化案例大表分页优化方案延迟关联SELECT * FROM table INNER JOIN (SELECT id FROM table LIMIT 1000000, 10) AS tmp ON table.id tmp.id书签记录记录上次查询的最后ID10. 高频场景题解析10.1 系统设计题短链系统设计要点哈希算法选择MurmurHash发号器设计Redis INCR301/302跳转选择防爬虫策略秒杀系统关键设计分层削峰静态化→缓存→队列→数据库库存扣减方案Redis原子操作→异步落库热点key处理本地缓存分片10.2 算法实践题LRU缓存实现class LRUCache { private LinkedHashMapInteger, Integer map; public LRUCache(int capacity) { map new LinkedHashMap(16, 0.75f, true) { protected boolean removeEldestEntry(Map.Entry eldest) { return size() capacity; } }; } }线程安全单例模式public class Singleton { private static volatile Singleton instance; public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { if (instance null) { instance new Singleton(); } } } return instance; } }11. 面试实战建议11.1 问题回答策略STAR法则应用Situation项目背景Task你的职责Action具体措施Result量化成果技术深度展示技巧从API使用到底层实现横向对比同类技术结合实际案例说明11.2 薪资谈判要点市场行情参考2023职级年限薪资范围万/年初级1-315-30中级3-530-50高级550-80福利条款注意事项年终奖计算方式期权兑现条件竞业限制范围12. 持续学习路径12.1 技术演进跟踪Java新特性学习重点JDK17密封类、模式匹配JDK21虚拟线程Loom项目Valhalla项目值类型优质学习资源推荐书籍《Java并发编程实战》《深入理解JVM》博客美团技术团队、阿里中间件视频极客时间《Java核心技术36讲》12.2 项目经验积累开源贡献入门建议从文档改进开始选择Good First Issue熟悉项目代码风格参与Hacktoberfest等活动我在技术面试中常发现候选人最容易在JVM内存模型和分布式事务问题上暴露知识盲区。建议重点准备这两个领域时不仅要理解理论概念更要能结合具体业务场景说明解决方案的选择依据。例如当被问到如何设计一个分布式ID生成器时优秀的回答应该包含雪花算法的实现细节、时钟回拨处理方案以及在不同业务规模下的变通策略。