多线程与并发编程
Java 提供了多种多线程实现方式,包括继承 Thread 类、实现 Runnable 接口和使用 Callable 结合 Future。线程池(ExecutorService)可以有效管理线程资源,避免频繁创建和销毁线程。 synchronized 关键字和 ReentrantLock 用于解决线程安全问题。volatile 保证变量的可见性,但不保证原子性。Atomic 类(如 AtomicInteger)提供原子操作。 ConcurrentHashMap、CopyOnWriteArrayList 是线程安全的集合类,优于 Collections.synchronizedXXX。
JVM 内存模型与性能优化
JVM 内存划分为堆(Heap)、栈(Stack)、方法区(Method Area)等。堆内存分为新生代(Young Generation)和老年代(Old Generation)。 垃圾回收算法包括标记-清除、复制、标记-整理等。常见的垃圾收集器有 Serial、Parallel、CMS、G1 和 ZGC。 性能优化可通过调整 JVM 参数(如 -Xms、-Xmx)或使用工具(如 VisualVM、JProfiler)分析内存泄漏和 CPU 占用。
Java 8 新特性
Lambda 表达式简化匿名内部类的写法,如:
List<String> list = Arrays.asList("a", "b", "c");
list.forEach(s -> System.out.println(s));
Stream API 提供函数式编程支持,如过滤、映射、归约等操作:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(n -> n).sum();
Optional 类用于避免 NullPointerException,CompletableFuture 支持异步编程。
网络编程
Java 支持 TCP/IP 和 UDP 协议。Socket 和 ServerSocket 用于 TCP 通信,DatagramSocket 用于 UDP 通信。 NIO(Non-blocking IO)提供更高效的网络编程方式,核心组件包括 Channel、Buffer 和 Selector。
// NIO 示例
try (ServerSocketChannel serverChannel = ServerSocketChannel.open()) {
serverChannel.bind(new InetSocketAddress(8080));
serverChannel.configureBlocking(false);
Selector selector = Selector.open();
serverChannel.register(selector, SelectionKey.OP_ACCEPT);
// 事件循环处理
}
设计模式
单例模式确保类只有一个实例,如双重检查锁定(DCL)实现:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
工厂模式、观察者模式、代理模式等也是常用设计模式。
反射与动态代理
反射(Class、Method、Field)允许在运行时动态获取类信息并操作对象:
Class<?> clazz = Class.forName("com.example.MyClass");
Object obj = clazz.newInstance();
Method method = clazz.getMethod("myMethod");
method.invoke(obj);
动态代理(Proxy、InvocationHandler)可以在运行时生成代理类,常用于 AOP 编程。
注解与泛型
自定义注解通过 @interface 定义,结合反射实现功能(如框架中的 @Autowired)。 泛型提供类型安全,如:
public class Box<T> {
private T value;
public void setValue(T value) { this.value = value; }
public T getValue() { return value; }
}
泛型擦除是 Java 泛型的实现机制,运行时类型信息会被擦除。
集合框架高级用法
HashMap 底层基于数组+链表/红黑树,负载因子默认 0.75。LinkedHashMap 保持插入顺序,TreeMap 基于红黑树有序存储。 Collections 工具类提供排序、查找等操作:
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 2));
Collections.sort(list, Comparator.reverseOrder());
IO 与 NIO
传统 IO(InputStream、OutputStream)是阻塞式的,NIO 支持非阻塞和通道操作。 Files 类简化文件操作:
Path path = Paths.get("file.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
单元测试与调试
JUnit 是常用的单元测试框架:
@Test
public void testAdd() {
assertEquals(2, Math.add(1, 1));
}
Mockito 用于模拟对象行为,方便隔离测试。



