P1 · Java 核心深入(W1-6)
目标:能读懂集合/并发源码,能写线程安全的业务代码,Spring IOC/AOP 的原理能说清 验收:每周产出 1 份 md 笔记 + 1 个 demo
一、本阶段核心知识点
1. 集合框架(重点)
- List:ArrayList、LinkedList、CopyOnWriteArrayList
- Map:HashMap(最常问)、LinkedHashMap、TreeMap、ConcurrentHashMap(重点:1.7 vs 1.8)
- Set:HashSet、LinkedHashSet、TreeSet
- Queue/Deque:ArrayDeque、PriorityQueue、BlockingQueue 家族
2. 并发(JUC 重点)
- 基础:
Thread/Runnable/Callable/Future - 三关键字:
synchronized/volatile/final的语义与 happens-before - 锁:
Lock接口、ReentrantLock、ReadWriteLock、StampedLock - 同步器:
AQS原理(CLH 队列) - 线程池:
ThreadPoolExecutor七大参数、Executors工厂、拒绝策略 - 协作类:
CountDownLatch/CyclicBarrier/Semaphore/Phaser - 原子类:
AtomicInteger/AtomicReference/LongAdder(高并发优选)
3. IO / NIO
- BIO 模型与阻塞点
- NIO 三件套:
Channel/Buffer/Selector - 多路复用:
select/poll/epoll - AIO 简介
- Netty 入门(建议先看 Reactor 模式)
4. 反射 / 注解 / 动态代理
Class对象的三种获取方式- 反射调用方法、字段、
invoke性能 - JDK Proxy vs CGLIB(面试必问:Spring AOP 用哪个?)
- 自定义注解 + AOP 实现
5. 其他基础
- 异常体系(
Error/Exception/ 受检非受检) - 泛型擦除与桥接方法
equals/hashCode约定
二、任务清单(可勾选打卡)
Week 1 · 集合框架
- 阅读
ArrayList源码,画出继承结构与扩容算法 - 阅读
LinkedList源码,对比 ArrayList 性能场景 - 写 demo:
ArrayList在并发下为什么会抛ConcurrentModificationException - 阅读
HashMap源码:扰动函数 /put/resize/ 树化阈值(8、64) - 阅读
ConcurrentHashMap源码(重点 1.8 的synchronized+CAS+红黑树)
Week 2 · 并发关键字与锁
- 写 demo 演示
synchronized锁升级(偏向锁→轻量级→重量级) - 写 demo 演示
volatile的可见性,但不保证原子性 - 阅读
ReentrantLock源码(公平锁 / 非公平锁 /tryLock) - 对比
synchronizedvsReentrantLock6 个维度
Week 3 · AQS 与线程池
- 精读
AbstractQueuedSynchronizer源码并画状态机 - 写 demo:
CountDownLatch模拟 5 个线程并发执行 - 阅读
ThreadPoolExecutor七大参数,写出最优参数配置 - 自定义线程池做压测,观察拒绝策略触发
- 理解
ThreadLocal与InheritableThreadLocal,写 demo 演示父子线程传值
Week 4 · 原子类与 JUC 工具
- 写 demo:
AtomicInteger1000 线程累加到 100 万 - 对比
AtomicLongvsLongAdder在高并发下的性能 - 写 demo:
CompletableFuture编排 5 个异步任务 - 写 demo:
Semaphore控制同时最多 N 个线程访问资源
Week 5 · IO/NIO 与 Netty
- 用 BIO 写一个简单的 echo server,感受阻塞点
- 用 NIO 重写同一个 echo server,对比线程数
- 写 demo:selector 多路复用 demo
- 跑通 Netty 的 helloworld demo,画出 Reactor 线程模型
Week 6 · 反射 / 注解 / 动态代理
- 写 demo:反射调用
private方法、修改private字段 - 自定义
@MyLog注解 + AOP 实现方法耗时统计 - 用 JDK Proxy 实现"在不修改源码情况下给方法加日志"
- 对比 JDK Proxy 与 CGLIB 的实现差异
三、阶段验收标准
✅ 能在不看资料的情况下:
- 讲清楚 HashMap put 流程、为什么容量是 2 的幂、树化阈值
- 讲清楚 synchronized 锁升级全过程
- 讲清楚 ThreadPoolExecutor 七个参数和四种拒绝策略
- 现场写出"阻塞队列 + 消费者线程池"的正确写法
- 解释 JDK Proxy 与 CGLIB 的使用场景差异
四、产出物
notes/P1-week1-集合框架.mdnotes/P1-week2-并发关键字.mdnotes/P1-week3-AQS与线程池.mdnotes/P1-week4-JUC工具类.mdnotes/P1-week5-IO与Netty.mdnotes/P1-week6-反射与代理.mddemo/下至少 8 个可运行的小 demo