Java高级技术知识点
一、 JVM 深度调优与原理
- 内存模型详解
- 堆结构细分: Eden, S0/S1, Old, MetaSpace (JDK8+) 的作用与对象流转。
- 直接内存 (Off-Heap):
ByteBuffer.allocateDirect()
的原理、使用场景(Netty, 大数据)及溢出风险。 - 逃逸分析: JIT 如何利用它进行栈上分配、标量替换、锁消除?
- 垃圾收集器进阶
- CMS vs G1 vs ZGC/Shenandoah: 工作流程、停顿时间目标、适用场景对比。
- 低延迟收集器 (ZGC/Shenandoah): 如何实现亚毫秒级停顿?读屏障、染色指针等技术原理。
- GC 调优实战: 如何根据应用特点(吞吐量优先/低延迟)选择并配置 GC?分析
gc.log
工具 (GCViewer, GCEasy)。
- 类加载机制深入
- 自定义类加载器: 实现步骤(继承
ClassLoader
,重写findClass
)、应用场景(热部署、模块隔离、加密解密)。 - 打破双亲委派:
SPI
机制(如 JDBC)如何打破?Tomcat 的类加载器结构设计。 - 模块化 (JPMS):
module-info.java
的作用,模块路径 vs 类路径,强封装性带来的影响。
- 自定义类加载器: 实现步骤(继承
二、 高并发与多线程精要
- Java 内存模型 (JMM)
- Happens-Before 原则: 编译器/处理器重排序规则,
volatile
、synchronized
、final
如何建立 HB 关系。 - 指令重排序与内存屏障:
volatile
写/读插入的屏障类型(StoreStore, StoreLoad, LoadLoad, LoadStore)。
- Happens-Before 原则: 编译器/处理器重排序规则,
- 并发工具库 (java.util.concurrent) 高级用法
- AQS (AbstractQueuedSynchronizer) 原理: 核心数据结构(CLH 队列)、
acquire
/release
流程。ReentrantLock
、Semaphore
、CountDownLatch
如何基于 AQS 实现? - 并发容器详解:
ConcurrentHashMap
JDK8 优化:摒弃分段锁,使用 CAS +synchronized
+ 红黑树。CopyOnWriteArrayList
适用场景与写时复制开销。ConcurrentSkipListMap/Set
原理(跳表)。
CompletableFuture
异步编程: 链式调用 (thenApply
,thenAccept
,thenCombine
)、组合 (allOf
,anyOf
)、异常处理 (exceptionally
,handle
)。
- AQS (AbstractQueuedSynchronizer) 原理: 核心数据结构(CLH 队列)、
- 线程池深度优化
- 合理配置参数: CPU 密集型 vs IO 密集型任务的核心线程数设置。
- 监控与调优: 如何获取线程池运行时指标(队列积压、活跃线程数)?动态调整参数方案。
- 规避风险: 线程池死锁、任务堆积 OOM、
ThreadLocal
内存泄漏。
- 无锁编程 (Lock-Free)
- CAS (Compare-And-Swap) 原理与局限: ABA 问题及解决方案(版本号
AtomicStampedReference
)。 LongAdder
vsAtomicLong
: 高并发写场景下为何LongAdder
性能更优?(分散热点思想)。
- CAS (Compare-And-Swap) 原理与局限: ABA 问题及解决方案(版本号
三、 Java 新特性与范式演进
- Project Loom (纤程/虚拟线程 - JDK19+)
- 核心价值: 解决什么问题(高吞吐、低资源消耗的并发)?
- 虚拟线程 (
VirtualThread
): 与传统线程 (PlatformThread
) 的区别?如何创建和使用 (Thread.startVirtualThread()
,ExecutorService.newVirtualThreadPerTaskExecutor()
)? - 结构化并发 (Structured Concurrency - JDK21): 如何简化多线程任务的生命周期管理?
- Record 类 (JDK16+)
- 自动生成构造器、
getter
、equals()
、hashCode()
、toString()
。 - 设计意图:透明数据载体,简化 POJO 定义。与 Lombok 的异同?
- 自动生成构造器、
- 模式匹配
instanceof
模式匹配 (JDK16+): 简化类型检查和转换。switch
表达式 (JDK14+) 和模式匹配 (JDK17 Preview, JDK21 正式):// JDK17+ 模式匹配 switch (预览特性演进中) Object obj = ...; String formatted = switch (obj) {case Integer i -> String.format("int %d", i);case Long l -> String.format("long %d", l);case Double d -> String.format("double %f", d);case String s -> String.format("String %s", s);case null, default -> "Unknown"; };
- 密封类 (Sealed Classes - JDK17+)
- 限制哪些类可以继承或实现某个类/接口 (
permits
关键字)。 - 增强领域建模能力和模式匹配安全性。
- 限制哪些类可以继承或实现某个类/接口 (
四、 性能优化与诊断利器
- 基准测试 (JMH)
- 为什么不能用
System.currentTimeMillis()
做微基准测试?JIT 预热、死码消除问题。 - JMH 基本注解 (
@Benchmark
,@Warmup
,@Measurement
,@State
,@Fork
) 的使用。
- 为什么不能用
- Profiling 工具
jvisualvm
/JConsole
: 基础监控(堆、线程、CPU)。async-profiler
: 低开销的 CPU/Allocation/Memory Profiler,火焰图分析。Java Flight Recorder (JFR) + JDK Mission Control (JMC)
: 生产级低开销诊断,记录 JVM 和应用程序的详细事件。
- 内存分析
jmap
+jhat
/Eclipse MAT
: 生成并分析堆转储 (Heap Dump),定位内存泄漏对象和引用链。jcmd
: 强大的综合诊断命令(GC.heap_dump
,JFR.start
等)。
- 线上问题诊断 (Troubleshooting)
- CPU 飙高:
top -Hp
+jstack
定位线程栈;async-profiler
火焰图。 - 频繁 Full GC: 分析 GC 日志,检查内存泄漏或配置不当。
- 死锁:
jstack
检测死锁信息。 - OOM: 获取堆转储并分析。
- CPU 飙高:
五、 框架与生态进阶
- Spring 框架深度
- Spring AOP 原理: JDK 动态代理 vs CGLIB 字节码增强。如何选择?
@Aspect
注解解析流程。 - Spring 事务传播机制 (
PROPAGATION_REQUIRED
,REQUIRES_NEW
等): 源码层面如何实现?嵌套事务的本质。 - Spring Boot 自动配置 (
@EnableAutoConfiguration
):spring.factories
机制、条件注解 (@ConditionalOnClass
等)。 - Spring Reactive (WebFlux): Reactor 编程模型(
Mono
,Flux
)、背压处理、与传统 Servlet 阻塞模型的对比。
- Spring AOP 原理: JDK 动态代理 vs CGLIB 字节码增强。如何选择?
- ORM (Hibernate/JPA) 高级特性
- 一级缓存 (Session) / 二级缓存 (SessionFactory): 作用域、失效策略、与查询缓存的关系。
- 延迟加载 (Lazy Loading) 原理与
N+1
问题解决方案:@BatchSize
,JOIN FETCH
。 - 乐观锁 (
@Version
) 实现机制。
- 分布式系统基石
- 分布式事务: CAP/BASE 理论、2PC/3PC、TCC、Saga、最终一致性方案、Seata 框架原理。
- 分布式锁实现: Redis (SETNX + Lua)、Zookeeper (临时顺序节点)、数据库 (唯一索引)。
- RPC 框架 (Dubbo, gRPC): 核心原理(动态代理、网络通信、序列化、服务发现、负载均衡)。
- 微服务与云原生
- 服务网格 (Service Mesh - Istio, Linkerd): Sidecar 模式,解耦服务治理逻辑。
- Java 云原生优化: 减少启动时间(AppCDS, GraalVM Native Image)、降低内存占用(优化依赖、JVM 参数调优)、适应弹性伸缩。
- 可观测性 (Observability): 分布式链路追踪 (Jaeger/Zipkin/SkyWalking)、集中式日志 (ELK/Splunk)、指标监控 (Prometheus/Grafana) 在 Java 应用中的集成。
六、 设计模式与架构思想
- 设计模式深层理解与应用场景
- 创建型: 工厂方法 vs 抽象工厂、建造者模式 (解决构造参数过多)、原型模式 (深拷贝/浅拷贝)。
- 结构型: 适配器 (统一接口)、装饰器 (动态增强)、代理 (控制访问 - 静态/动态)。
- 行为型: 策略模式 (算法替换)、责任链 (过滤器链)、观察者 (事件驱动)、模板方法 (流程骨架)。
- 如何避免过度设计?模式组合应用。
- DDD (领域驱动设计) 核心概念
- 限界上下文 (Bounded Context): 划分微服务边界的关键。
- 实体 (Entity) / 值对象 (Value Object) / 聚合根 (Aggregate Root): 如何识别与建模?
- 领域事件 (Domain Event): 实现跨聚合/限界上下文通信。
- 六边形架构 (Hexagonal) / 整洁架构 (Clean Architecture): 分层与依赖关系。
- 响应式编程 (Reactive Programming)
- 核心思想:异步非阻塞、数据流 (Stream)、背压 (Backpressure)。
- Reactor / RxJava:
Publisher
/Subscriber
模型,操作符 (map
,flatMap
,filter
,reduce
)。