Java核心技术学习计划(12周)

核心目标:系统掌握Java企业级开发技术栈,通过”苍穹外卖”项目实战辅助理解
学习策略:以知识点深度掌握为主,项目代码为实践验证工具


📚 每周知识点详解

周数 核心知识点 技术细节 对应项目模块
第1周 Java语法核心 - 自动装箱/拆箱原理
- String常量池机制
- 泛型擦除与通配符
- 异常分类(Checked/Unchecked)
员工管理系统类型转换验证
第2周 OOP高级特性 - 抽象类与接口设计原则
- 静态代理vs动态代理
- 类加载机制(双亲委派)
- 注解处理器原理
菜品管理模块的工厂模式应用
第3周 集合框架源码 - ArrayList扩容机制
- HashMap哈希冲突解决
- ConcurrentHashMap分段锁
- Fail-Fast迭代器原理
购物车模块的线程安全集合选择
第4周 IO与NIO - 装饰器模式在IO中的应用
- Buffer的position/limit机制
- Channel零拷贝原理
- Path API操作
订单导出功能的文件操作实现
第5周 JDBC进阶 - 数据库连接池原理(HikariCP)
- PreparedStatement防SQL注入
- ResultSet元数据操作
- 批处理优化技巧
分类管理的批量删除功能实现
第6周 多线程并发 - synchronized锁升级过程
- AQS同步器原理
- ThreadLocal内存泄漏防范
- CompletableFuture异步编排
订单状态更新的异步通知机制
第7周 JVM基础 - 内存模型(堆/栈/方法区)
- GC算法(CMS/G1)
- 类文件结构
- JIT编译器原理
性能调优时的JVM参数配置
第8周 Spring原理 - Bean生命周期管理
- 三级缓存解决循环依赖
- AOP代理选择策略(JDK/CGLIB)
- 事务传播机制
支付模块的事务边界控制
第9周 MyBatis进阶 - 一级/二级缓存机制
- 插件开发(PageHelper原理)
- 动态SQL生成原理
- 延迟加载实现
复杂菜品查询的SQL优化
第10周 分布式基础 - CAP定理实践
- Redis持久化策略
- 分布式Session方案
- 幂等性设计
购物车Redis集群部署
第11周 安全架构 - OAuth2授权码模式
- JWT签名验证流程
- CSRF防御方案
- XSS过滤策略
用户认证模块的安全加固
第12周 工程化实践 - Git Flow工作流
- Maven多环境配置
- Jacoco覆盖率测试
- Dockerfile编写规范
项目持续集成流水线搭建

🔍 深度学习方法

  1. 每日知识图谱:用XMind绘制技术点关联图(如:HashMap→哈希冲突→ConcurrentHashMap)
  2. 源码阅读:每天30分钟阅读JDK/Spring关键类源码(ArrayList.java等)
  3. 技术对比:制作对比表格(如:ArrayList vs LinkedList性能差异)
  4. 原理复现:尝试手写简化版框架(如:迷你Spring IoC容器)

🛠 配套实战任务

  1. Week1:实现带泛型验证的DTO基类
  2. Week3:用ConcurrentHashMap改造购物车并发控制
  3. Week5:编写HikariCP连接池监控组件
  4. Week7:通过-XX:+PrintGCDetails分析项目GC日志
  5. Week9:开发MyBatis分页插件
  6. Week12:搭建Jenkins自动化部署流水线

📖 推荐学习资源

  1. 书籍

    • 《Effective Java》
    • 《深入理解Java虚拟机》
    • 《Spring源码深度解析》
  2. 视频

  3. 工具

    • Arthas诊断工具
    • JProfiler性能分析
    • IDEA的Diagrams代码可视化

关键建议:每周选择1-2个知识点进行专题突破,结合项目代码调试验证(如通过断点跟踪Spring Bean创建过程)。建议建立错题本记录调试中遇到的典型问题。

第一周详细学习计划(3.5-3.11)

📌 学习目标

  1. 深入理解Java基础语法特性与底层原理
  2. 建立与C++语法差异的认知体系
  3. 通过员工管理系统验证类型转换场景

📅 每日学习安排

Day 1(3.5): 自动装箱/拆箱原理

学习重点

  • 基本类型与包装类对应关系(int ↔ Integer)
  • 自动装箱的底层实现(Integer.valueOf()
  • 缓存机制(-128~127的IntegerCache)
  • 性能陷阱与最佳实践

实践任务

  1. 编写测试代码验证以下场景:
Integer a = 100;
Integer b = 100;
System.out.println(a == b);  // true

Integer c = 200;
Integer d = 200;
System.out.println(c == d);  // false