Java
Java
Java 由 Sun Microsystems 的 James Gosling 于 1995 年发布,核心设计理念是 "Write Once, Run Anywhere"——通过 JVM 字节码实现跨平台运行。三十年发展后,Java 已成为企业级应用开发的主流语言,生态覆盖微服务到大数据。
Java 知识全景:
语言基础
Java8新特性 是重要分水岭,Lambda 表达式、Stream API、Optional 类让 Java 从纯面向对象向函数式编程迈出关键一步。Java内部类 四种类型(静态嵌套类、成员内部类、局部内部类、匿名内部类)各有适用场景,匿名内部类在 Java 8 后逐渐被 Lambda 取代。反射机制 赋予运行时动态能力——Spring 依赖注入、JUnit 测试发现、Jackson JSON 序列化底层都依赖反射,但性能代价(比直接调用慢 2-50 倍)需要权衡。
集合框架
Java集合 深入对比 HashMap 与 Hashtable、ArrayList 与 LinkedList 等核心数据结构选择策略。现代开发中 ConcurrentHashMap 取代 Hashtable,ArrayList 在绝大多数场景优于 LinkedList。
集合使用注意事项 总结常见陷阱:Arrays.asList() 返回的列表不可修改、foreach 中不能直接 remove、Collectors.toMap() 的 value 不能为 null。生产环境中频繁引发 bug。
并发编程
Java并发编程 是 Java 最具深度的知识领域。wait() 与 sleep() 本质区别在于是否释放锁;ThreadLocal 为每个线程提供独立变量副本,但线程池中使用不当会导致内存泄漏;BlockingQueue 是实现生产者-消费者模式的标准方案。
JVM 层面的并发支持同样重要。JVM 中的 Java 内存模型(JMM)定义主内存与工作内存的交互规则,volatile 通过内存屏障保证可见性和有序性但不保证原子性。Happens-Before 原则是判断多线程安全性的理论基础。
JVM 深入
JVM 内部机制决定应用性能上限。堆空间分代结构(新生代、老年代)对应不同垃圾收集策略。从 Serial 到 G1 再到 ZGC,收集器演进方向是减少 Stop-The-World 停顿时间。
类加载采用双亲委派模型,BootstrapClassLoader、ExtensionClassLoader、AppClassLoader 各司其职。理解类加载对排查 ClassNotFoundException 和 NoClassDefFoundError 至关重要。
锁优化是性能调优关键:偏向锁→轻量级锁→重量级锁的升级过程,以及锁消除、锁粗化等 JIT 优化手段。
字节码
Java字节码 是连接源码与 JVM 执行的桥梁。每个 .class 文件包含字节码指令,由操作码(1字节)和操作数组成。理解字节码有助于深入理解语法糖实现原理(增强 for 循环、try-with-resources、Lambda)。
javap 是 JDK 内置反编译工具,配合 jclasslib 可可视化分析。Arthas 等工具可实时查看线上字节码执行情况。
工程实践
Java最佳实践 涵盖空值处理、枚举比较、String 不可变性、BigDecimal 精度、泛型通配符(PECS 原则)、序列化规范等关键知识点。Java单例模式 四种实现(饿汉式、DCL、静态内部类、枚举),枚举实现是 Joshua Bloch 推荐的最佳方式。