本文重点说明了hashCode()与equals()的关系及必须同时重写的原因,比较了==与equals()的区别,并系统梳理了String的常用方法、不可变特性、常量池机制以及new与字面量的区别。进一步阐述了String、StringBuffer、StringBuilder的差异与字符串拼接的最佳实践。最后,对接口与抽象类的设计目的、成员限制、构造函数的可用性以及面向接口编程的意义作了概括。

本文系统阐述了Java异常处理流程(try‑catch‑finally、异常传播与捕获、Throwable层次及Checked/Runtime区别),说明finally的必执行性及在其中使用return的影响;解析static关键字在成员、内部类中的作用及与final的差异;深入介绍泛型的意义、类型擦除以及上界/下界通配符的使用;概述反射机制及其在框架、JDBC、AOP等场景的实际应用;最后列举强、软、弱、虚四种引用及其在垃圾回收中的行为。

Java集合分为Set、List、Queue、Map四大类,常用实现有HashSet、ArrayList、LinkedList、HashMap等。大多数集合非线程安全,可用Collections包装或使用java.util.concurrent 包中的并发集合(如ConcurrentHashMap、CopyOnWriteArrayList)实现安全。HashMap 基于数组+链表,JDK8 在冲突严重时转为红黑树并通过位运算高效扩容。ConcurrentHashMap JDK7 采用分段锁,JDK8 改为 Node+CAS 实现,读操作无锁。LinkedHashMap 在 HashMap 基础上维护双向链表,实现插入顺序遍历。

本文系统梳理了Java集合类的关键特性与实现细节:TreeMap 基于红黑树实现,Map 与 Set、List 与 Set 的区别;ArrayList 与 LinkedList 的实现及性能对比;线程安全的 List(Vector、Collections.synchronizedList、CopyOnWriteArrayList)及其原理;ArrayList 的数组结构与扩容机制;CopyOnWriteArrayList 的读写分离优势与缺点;TreeSet 与 HashSet 的实现差异及 HashSet 基于 HashMap;BlockingQueue 的四类操作方式、设计目的及以 ArrayBlockingQueue 为例的实现原理(ReentrantLock、Condition 等);以及 Java 8 Stream 的中间操作和终端操作方法。

Java IO 把键盘、文件、网络等抽象为流,分为输入/输出、字节/字符、节点/处理三类,并提供多种实现类,如 File、Buffered、Object、Print 等。处理大文件时应避免一次性加载,可使用缓冲流或 NIO 的内存映射,提高效率。NIO 核心由 Channel、Buffer、Selector 组成,Buffer 通过 capacity、position、limit 管理读写,Selector 让单线程处理多个通道。对象序列化将实例转为字节流,需实现 Serializable 并建议声明 serialVersionUID 防止版本冲突。除 Java 原生序列化外,常用 JSON、Protobuf、Thrift、Avro 等工具实现高效跨语言或二进制序列化。若不使用 JSON,可采用 Java 自带序列化或上述第三方库。

本文系统阐述了Java多线程的基础:创建方式包括继承Thread、实现Runnable和Callable(推荐后两者);列举Thread的常用构造、静态和实例方法;说明run()仅执行任务而不启动线程,start()才真正启动;同一线程只能启动一次;介绍线程生命周期的五种状态及其转化;同步手段包括synchronized、ReentrantLock、volatile和原子类;线程通信方式有Object的wait/notify/notifyAll、Lock的await/signal/signalAll以及BlockingQueue;并比较了sleep与wait、notify与notifyAll的区别。