学习收益:
通过本周的学习,我们可以掌握 Java 多线程并发编程的相关知识,分析比较不同并发容器的效率。并发是分布式的基础知识,学好并发能为我们后续的学习打下扎实的基础。
课程内容:
主要讲解 Java 线程并发的相关知识,包括多线程基础、线程同步、并发基础知识、容器等。
详细知识点:多线程基础:线程,ThreadLocal,线程交互 notify/wait,线程协作 fork/join,Synchronized/Lock/ReadWriteLock,CountDownLatch/CyclicBarrier/Semaphore。并发基础:Atomic 原子操作,AQS/CAS,Callable/Future,Executor,线程池ThreadPoolExecutor。并发容器:ConcurrentHashMap/BlockingQueue/CopyOnWriteList 等。
学习收益:
本周主要学习 Java 语言中较为新颖的并发编程特性,从而在工作中能够更熟练地运用更先进的 Java 功能。此外,为了承载更大的并发访问量,我们还将学习 Java 语言中非常重要的知识—— I/O 技术,以及网络框架是如何帮助开发者更有效率地开发高性能网络应用的。
课程内容:
案例实践(一):并发容器性能竞赛实践:学习 Java 8 以后新的并发特性,形成新的知识脉络。阶段总结:完整回顾 Java 多线程并发知识点,并解答常见的问题和易错点。技术知识:学习 NIO 技术知识,了解 Java AIO/NIO 以及 Netty 的设计实现原理。
案例实践(二):Java NIO 统一处理文件和网络 I/O:学习 Java IO 和 NIO 的核心知识。
案例实践(三):Java NIO 统一处理文件和网络 I/O:了解 Java NIO 的网络实现,弄清楚它是如何利用操作系统能力的。详细知识点:Fork/Join 框架,CompletableFuture,Java 8 Stream。I/O 知识:同步/异步,阻塞/非阻塞,BIO/NIO/AIO,Reactor/Proactor,Java I/O 包。Java NIO:缓冲区 Buffer,Channel,网络和文件一致接口,选择器和多路复用。
学习收益:
本周我们将通过案例实践来厘清 Java NIO 是如何统一处理文件和网络 I/O 的。面对 I/O 就是面对时延和不稳定因数,设计网络框架要把重点放在帮助开发者集中精力于实现业务逻辑上,而非细节处理上。因此,我们将通过案例实战来剖析其背后的原理,从而实现进一步优化。
课程内容:
案例实践(一):Java NIO 统一处理文件和网络 I/O:掌握文件 I/O 访问和新的 NIO API,高效访问和处理文件。
案例实践(二):Java NIO 统一处理文件和网络 I/O:通过嵌入网络框架,学习实现 HTTP Server,了解响应式网络 API 精要。案例实践(三):MyFavorites 服务器系统:学习 Netty 核心概念和 API 设计原理,理解事件和线程模型。
案例实践(三):MyFavorites 服务器系统:和微信服务器网络对接,处理协议数据并返回结果。阶段总结:I/O 不仅重要且知识点众多,因此将全面回顾 I/O 所学内容,对常见问题进行解答。详细知识点:Java NIO:文件 NIO API,配合 Stream 访问数据。Netty:Netty 架构,EventLoop,TCP 拆解包,Netty 的启动和执行过程/线程模型/事件驱动。其他网络框架介绍,嵌入式 HTTP Server,响应式 Reactive 编程方法。
学习收益:
本周将学习 Java JDK 中几个重要工具的使用以及部分关键特性的使用。JMX 是 Java 标配的管理监控接口,Java 在预处理阶段,开发者可以自定义处理逻辑。通过这部分知识点的学习,开发者可以更好地了解 Java 高级工具的运行原理,为后面进行性能调优打下良好基础。Java 安全也是很重要的知识内容,我们将通过实践去学习证书和模块化的知识,这些对理解 Java 大项目中安全部分的代码原理会有很大帮助。
课程内容:
技术知识(一):讲解主要的 JDK 命令行和图形工具的使用方法及具体应用场景。
技术知识(二):讲述 JMX 原理,Java 监控能力和相关工具,预处理器原理和具体编程实例。
案例实践(一):编写国密算法加密程序:学习 Java 安全技术知识,加解密算法。
案例实践(二):编写国密算法加密程序:了解证书相关知识,构建模块化定义裁剪 JDK 运行时。阶段总结:通过学习 Java 语言和工具进阶这个模块,更好地了解 Java 语言的高级能力,特别是模块化和安全相关技术。全面回顾所学内容,对常见问题进行解答。
详细知识点: JDK 工具,包括 jcmd、jstat、jmap 等常用命令行及其他图形监控工具。预处理器原理和编程,JMX 概念和工具。JPMS 模块化机制,JDK 模块化分析,J-Link 组装工具。Java 安全相关知识,加密解密算法,安全证书,加密传输,认证和授权。
学习收益:
本周将学习 DDD 领域驱动模型设计,通过实战项目了解 DDD 的思想和开发方法。此外,还将深入 Java 虚拟机内部,了解 JVM 核心技术,包括关键的内存模型和类加载原理,掌握 JVM 分析工具的使用方法和 GC 原理。
课程内容:
案例实践(一):随身记信息管理系统:了解 DDD 领域驱动设计的基本思想,设计系统模型。
案例实践(二):随身记信息管理系统:实战设计项目实体对象,领域服务等,更深刻地理解面向对象编程和重构技术精要。
技术知识(一):学习 JVM 基础知识,领悟 JVM 重要启动参数作用和类加载过程。
技术知识(二):理解 Java 字节码,运用 cglib 等工具类加强。
案例实践(三):实战剖析 JVM 状态并分析性能:了解 JVM 内存模型,分析线程/对象/类,学习 GC 基本原理。
详细知识点: 面向对象编程重点技术,领域驱动设计基础,重构思想关键点。JVM 基础知识,JVM 启动参数,Classloader 类加载器。字节码技术,cglib,JVM 内存模型。Java GC 原理,垃圾回收时的内存管理。
学习收益:
上周我们学习了 JVM 的核心知识,本周将继续进行 JVM 技术实践,通过项目分析来深入理解不同的 GC 算法实现。此外,本周我们还会学习 Java 语言中一个非常重要的知识点:对象注入和开发框架技术,以及 Java 开发者最常用到的 Spring 全家桶。我们将通过开发一个 Spring Boot starter 实战项目来充分学习 Spring 的关键知识点,实现微服务的扩展组件。
课程内容:
案例实践(一):实战剖析 JVM 状态并分析性能:进一步了解 GC 算法,深入分析类加载和字节码技术。阶段总结:全方位复习 JVM 相关技术知识,运用 JDK 和三方的工具来分析 JVM,解答常见技术难题。技术知识:深入讲解 Java 对象注入的核心内容,分析 Guice 框架的实现方式和 DI 规范精要。
案例实践(二):实现信息获取的 Spring Boot starter:学习 Spring 框架和常用组件,包括 MVC,Data 等。
案例实践(三):实现信息获取的 Spring Boot starter:学习 Spring Boot 技术精要,config 解析处理原理,组件结合方法。
详细知识点: 常见的 GC 算法:Parallel GC/CMS/G1 等。对象注入原理和实现,DI 规范定义,Guice 框架。Spring 技术体系全面解析。Spring 微服务,Spring Boot 技术。
学习收益:本周我们将学习在 DDD 设计思路下,如何通过 Spring 和 CDI 技术框架来分别实现业务逻辑,从而帮助我们更好地理解用 Java 框架实现原理和技术能力。其次,老师会系统讲解 Jakarta EE 知识和 Spring 框架的技术基础,助力理解 Java 整个开发体系。此外,我们还会学习 Quarkus 云原生开发框架,了解 Java 云原生方向的开发实践,掌握本地化编译技术。
课程内容:
案例实践(一):随身记信息管理系统:学习 DDD 领域模型,使用 Spring 框架实现业务逻辑。
案例实践(二):随身记信息管理系统:利用 CDI 实现领域模型架构,并了解 JEE 可以复用的技术组件。技术知识:学习 Jakarta EE(Java EE) 核心技术,理解主要子规范在 Java 开发中的重要作用。
案例实践(三):Quarkus 云原生项目:从整体上分析讲解 Quarkus,了解项目使用的技术栈。
案例实践(四):Quarkus 云原生项目:分析其高性能原理,编译成本地代码原理,GraalVM 技术。
详细知识点: Jakarta EE(Java EE)技术规范,Servlet/JPA/JaxRS/CDI/EJB 等重要子规范。Java 云原生技术,Quarkus 开源项目。GraalVM 项目和编译原理。
第 8 周 Java 高性能数据库访问
学习收益:
本周我们将通过知识点讲解和案例实战分析,来深入剖析 Java 访问数据库和进行数据存取的技术方法。对于大型企业项目来说,访问数据库是非常重要的信息处理环节,如何可靠高效地保存数据非常关键。通过本周的学习,我们将会了解 Java 访问数据库的几种方式以及在设计数据库表时所要遵循的原则,充分理解事务处理的核心技术。课程内容:阶段总结:全方位回顾前面所学的 Java 框架技术所涉及到的众多知识点,解答常见问题。
技术知识(一):了解 Java 数据库访问技术,学习数据库事务和锁的机制。
案例实践(一):实现信息获取的 Spring Boot starter:直接采用 JDBC 访问数据库,了解数据库表设计优化原则。
案例实践(二):Quarkus 云原生项目:数据访问的部分,使用 JPA 和 Hibernate,完善数据优化访问及事务处理,应对高并发下的访问。
技术知识(二):学习数据库分库分表相关技术,分布式数据库访问机制。
详细知识点: JDBC,事务技术。ORM 相关技术:JPA、Hibernate、MyBatis 等等。各种优化手段详解:库表设计优化,索引设计,外键,引擎选择等等。锁的原理,死锁场景和避免方案,SQL 查询优化、索引选择、连接优化、聚合查询等等。数据库垂直拆分与水平拆分,分库分表。
学习收益:本周我们将探究在面对海量用户和大并发需求时,如何在数据库访问层进行应对。除了目前业界采用的分库分表方法,我们还会讲解如何在微服务上进行拆分,如数据缓存和分布式事务等。此外,我们还会学习 Java 性能调优的相关知识,通过分析现存系统运行情况以及优化代码来提升整体性能。
课程内容:
案例实践(一):随身记信息管理系统:项目开始时考虑数据库表如何应对海量用户,进行分库分表设计。
案例实践(二):随身记信息管理系统:高效使用数据库缓存和合理处理事务,应对大并发访问。阶段总结:通过对若干项目的实战来更好地了解如何高效存储数据以及如何优化数据库,全面复习前面所学的知识点,解答常见问题。
技术知识(一):学习性能调优的基础知识,了解系统主要瓶颈位置,掌握相应工具的使用方法。
技术知识(二):领悟 Java 调试能力和热加载能力,知道如何在设计时优化并通过中间件能力来提升系统整体性能。
详细知识点: 分库分表实战,分布式主键,分表算法,数据迁移,实时同步。数据库事务处理,数据库缓存优化。Linux 环境性能调优,CPU、内存、磁盘和网络 I/O。Java Debug 能力,热加载 Reload。应用层中间件调优,设计时的重点考虑因素。
学习收益:本周我们将通过案例实践来学习 JVM 性能分析和调优过程。当我们面临存在性能问题的运行系统时,要知道如何通过工具进行分析和排错,并最终解决问题。此外,我们还会学习分布式和微服务的核心知识点,帮助我们全面认识微服务的设计原则。
课程内容:
学习收益:
本周我们将通过项目实践来深入学习微服务的分拆设计原则,并通过 Spring Cloud 来了解如何进行微服务治理,全面理解 Spring 微服务部署。另外,本周还有一个开源项目源码分析实战,即对 gRPC 和 Vert.x 的经典分布式处理源码进行剖析,通过源码来了解一个 RPC 框架在业务系统中是如何工作的,帮助我们更好地理解 Java 框架的实现原理。
课程内容:
学习收益:本周我们主要学习微服务的非业务功能特性,这部分技术能力可以移出 Java 进程,利用Service Mesh 技术,由云计算设施来提供服务,这也是目前云原生提倡的技术实现方法。此外,我们也会学习微服务客户端 API 的最佳实践,从而开发出高效的应用程序。另一方面,我们将学习中间件技术,讲解消息 API 关键技术和用 Java 实现的消息服务器,借此了解经典的 Java 消息处理技术方案。
课程内容:
学习收益:
本周我们要学习的是分布式消息系统 Kafka,包括其原理和开发实践。Kafka 是当前大量数据传递、保存、处理的消息管道系统,学通了 Kafka 的相关知识点,将有助于理解其他分布式系统。此外,我们还会通过分布式缓存,实现 Web 的 Session 复制机制,实现分布式 Web 应用部署,并用缓存中间件和缓存 API 进行实战开发。
课程内容:
学习收益:在实际应用中,往往把缓存内嵌当成高级 HashMap 来使用。本周我们就会学习 Java 缓存 API 的用法,以及 Java 分布式缓存项目 Hazelcast,摸清缓存数据是如何在不同机器节点之间同步复制的。另外,我们还将接触 Java 项目管理,用 Maven 来管理 Java 项目,通过实际编写一个 Maven 插件来了解 Java 项目编译、测试、打包、部署等各状态的变化过程,同时我们还会开发一个实用的功能,对组件进行安全漏洞扫描,分析并生成报表。
课程内容:
详细知识点:
缓存中间件:JavaCache API, 内存缓存应用 Hazelcast(Java 数据结构、内存网格、事务支持、集群)。Java 项目实践,Maven 原理,Maven 插件实现。DevOps 研发管理平台,构建,部署,测试,运维流水线。
学习收益:本周我们会学习单元测试工具 JUnit,了解 TDD/BDD 测试驱动开发的思想,这也是我们在实际工作中可以采用的敏捷开发方式。我们会总结两个贯穿整个课程的企业级实战项目,并对项目进行整合。
课程内容:
课程总结:
全面总结回顾 Java 训练营课程,复习所学知识点,对关键问题进行解答。详细知识点:JUnit 单元测试,TDD/BDD,Mock 机制。Log 日志重要性,Logger 框架使用原则,分布式日志系统。
千万级用户“随身记”信息管理系统业务功能:用 DDD 领域驱动思想设计微服务系统,实现个人和团队的快捷信息管理,可以分布式部署,支持千万级用户。
技术难点:
通过 DDD 领域驱动思路来设计应用系统,采用微服务分布式部署,通过分库分表技术支持更多的用户数据存储。通过实践开发这个项目,进一步了解 Java 应用系统是如何设计和运用框架提升开发效率的,并且完整体验一个大规模项目的管理流程和开发、测试、上线流程。
百万级用户“MyFavorites”公众号服务器业务功能:用 Netty 开发一个微信公众号服务器,对接微信并和“随身记”通信来保存信息,支持百万级数量以上的并发访问。
技术难点:通过 Netty NIO 技术高效对接微信公众号服务器,使其支持海量用户并发访问。通过和后台微服务进行数据通信来学习客户端访问和微服务治理,通过 Service Mesh 模型并结合云原生设施来实现非业务功能。
https://shimo.im/docs/RKAWVbDVN1tdLRk8/ 《Java 提薪训练营-动手案例清单》十大知识模块清单: