课程大纲
第一节 Java 语言设计(上)
类/接口设计:介绍类、抽象类、接口命名、访问性设计以及“封装性、派生性、多态性”技巧
枚举设计:理解枚举引入的意义以及变化,介绍 JDK 中常见枚举的设计
泛型设计:了解泛型使用场景以及限制,通过 JDK 以及开源项目领悟其中的设计模式
方法设计:介绍方法命名、返回类型、参数类型、名称以及数量的设计模式
第二节 Java 语言设计(下)
函数式设计:讨论函数式设计技巧,如 Supplier、Consumer 以及 Function 在日常开发中的运用
模块化设计:类库迁移、依赖管理分析、迁移案例等、模块解析、模块API 设计
第三节 Java 核心 API 总览
Java 基础类库:Java 语言(Lang)、数学(Math)、集合(Collections)、并发(Concurrency)和反射(Relfection)等
Java 其他类库:Java I/O、Java Beans、序列化(Serialization)、管理扩展(JMX)和网络(Networking)
第四节 Java 集合框架
语义接口:包括 Collection、Set、List、Queue 、Map 等核心接口
内建实现:讨论 JDK 中内建的集合接口实现,并且说明同类实现中的使用场景,如 Vector、ArrayList 以及 LinkedList 场景
抽象实现:介绍 Java 集合框架的骨架实现,如 AbstractCollection、AbstractSet以及 AbstractList 等抽象类
适配实现:讨论Set 转变为 Map,以及 Deque 实现 LIFO 的 Queue 实现
特殊实现:如 WeakHashMap、IdentityHashMap 等特殊实现的使用场景
第五节 Java 集合(Collections)框架算法运用
排序算法:主要讨论 JDK 中出现过的排序算法,如 Insertion Sort、Merge Sort 、以及 TimSort,包括基本思路、时间和空间复杂度
搜索算法:讨论二进制搜索算法,如 Collections#binarySearch 方法
第六节 Java 并发框架运用
Java 并发锁:介绍包括重进入锁(ReentrantLock)、重进入读写锁(ReentrantReadWriteLock)、邮票锁(StampedLock)等运用
Java 原子操作:理解 Atomic* API 以及 *Adder API 使用场景
Java 并发限制:包括 CountDownLatch、CyclicBarrier 以及 Semaphore
Java 线程池:掌握 Executor、ThreadPoolExecutor 、ScheduledExecutorService 以及 Callable 和 Future API 正确使用
第七节 Java 并发原理(上)
Java 线程生命周期:介绍 java.lang.Thread API 启动、停止等生命周期方法,如:Thread.start、Thread.interrupt和 Thread.interrupted,并理解为什么弃用 Thread.stop, Thread.suspend 和 Thread.resume 方法
Java 同步原语:从 JDK 级别到 JVM 级别,深度分析和理解 Java synchronized 、volatile 以及 CAS 操作等同步原语
第八节 Java 并发原理(下)
Java 内存模型
Java 并发 AQS 原理
第九节 Java ClassLoading
Java 类对象
Class 与 ClassLoader 之间的关系
ClassLoader 双亲委派
Java 类存储
第十节 Java Trouble-Shooting
OOM 错误案例:分析 Java 内存泄露的症状,以及快速定位泄露位置(堆、Perm 或 Metasapce)以及解决方案
CPU 过高案例:介绍高消耗CPU代码的常用分析方法,逐一排查可能性
GC 案例:介绍 Young GC 和 Full GC 的基本表象,以及如何在代码实现中尽可能地避免 Full GC