Java 基础语法
- java 基本概念
- Java8 开始发生的变化
- openJDk vs oracleJDK
- java 基本运行原理
- 如何计算对象占用的内存? 数据类型和字长
- 装箱是什么?
- labeled loop
- index for 和 for-each
- switch 语句
- 继承:类型转换、执行顺序
- finally 不该怎么用
- break 跳出多层循环
- java 异常系统
- final 知多少
- 迭代器
- 泛型
- 强引用、弱引用、软引用、幻象引用
- 你真的了解 String?
- 反射体系
- JNI
- JDBC 参数调优
- 数据库连接池参数调优
JDK 源码
- Java是如何实现面向对象的?
- List 初步印象
- 集合只读视图
- 集合同步视图
- ArrayList源码分析
- Vector 源码分析
- LinkedList 源码分析
- Map 初步印象
- HashTable源码分析
- HashMap 源码分析
- ConcurrentHashMap源码分析
- TreeMap 源码分析
- Set 初步印象
- HashSet源码分析
- TreeSet 源码分析
- PriorityQueue 源码分析
IO
- IO 知多少
- 输入输出流体系
- NIO 的核心原理
- 文件拷贝及零拷贝
多线程
-
并发的基石:原子性、可见性、有序性
-
A.Q.S
-
线程状态转移
-
线程中如何处理异常
-
Callable 和 Future
-
原子操作
-
启动线程的方式有几种?
-
Java 线程的生命周期
-
线程池 Executors 和 ThreadPoolExecutor
-
定时器
-
Volatile
-
synchronized 源码分析
-
ReentrantLock 源码分析
-
synchronized VS ReentrantLock
-
Lock源码分析
-
Condition 源码分析
-
Semphore
-
ReadWriteLock
-
StampedLock
-
CountDownLatch
-
CyclicBarrier
-
Exchanger
-
如何定位并修复死锁问题
-
ConcurrentLinedQueue源码分析
-
LinkedBlockingQueue 源码分析
-
Future
-
CompletableFuture
-
CompletionService
-
Fork/Join
-
Immutability模式想说爱你不容易
-
Copy-on-Write 模式
-
ThreadLocal 无处不在
-
Guarded Suspension 模式
-
Balking 模式
-
Thread-Per-Message 模式
-
Worker Thread 模式
-
生产-消费者模式
-
Actor、协程、CSP谁是终极武器
JVM
-
JVM 内存区域和 OutOfMemmoryError
-
JVM内存模式
-
JVM 内存模型中的 happen-before是什么
-
Java 常用的垃圾回收器有哪些?
-
CMS 垃圾回收器
-
G1 垃圾回收器
-
GC 调优知多少
-
类加载过程,什么是双亲委派,如何自定义类加载器
-
如何实现类的热替换
-
class 格式
-
栈帧结构
-
编译 client、server
-
有哪些方法可以在运行时生成一个Java类
-
JVM 是如何执行一个方法调用的?
-
JVM 是如何处理异常的?
-
JVM 是如何实现反射的?
-
JVM 怎么实现 invokedynamic 的?
-
JVM 是如何实现 synchronized 的?
-
JIT 技术
-
你写的代码对运行时优化有啥影响?
-
逃逸分析
-
循环优化
-
向量化
-
如何进行可信的基准测试?
-
JVM 监控及诊断工具
-
JNI 运行机制
-
Java Agent 与字节码技术
-
如何监控和诊断 JVM 堆内和堆外内存使用
-
JVM运行时有哪些优化技巧
-
Java 如何安全可靠地运行在容器中有哪些坑
安全编码
- Java 安全编码规范
- 参数校验是第一道防线也是最重要的一道防线
- 如何让注入攻击无处遁形
- 敏感信息怎么处理
新特性
- Lambda 真香,但是你真的用对了吗?
- Stream 让设计模式运用变得 so easy
- 如何用 Jlink 定制 jre
Tomcat
- Tomcat 概览
- Servlet 规范和 Servlet 容器
- Tomcat 是如何实现 Servlet 规范的?
- 连接器是如何设计的?
- 多层级的容器设计
- NioEndpoint、Nio2Endpoint、AprEndPoint核心原理分析
- Tomcat是如何扩展 Java 的线程池的
- Tomcat是如何实现容器的热部署和热加载?
- Tomcat 的 Session 管理机制
- Tomcat 调优配置
Spring
-
Spring 概览
-
Spring 核心组件有哪些?你清楚么?
-
Spring 实现了哪些编程模型?
-
Spring 处理 Http 的主流程
-
消息是如何被编码和解码的?如何自定义编码和解码器
-
拦截器
-
过滤器
-
从编码和解码器谈单一职责、高内聚的取与舍
-
Spring Bean 的生命周期和循环引用
-
Spring AOP 核心原理分析
-
Spring IOC 核心原理分析
Mybatis
-
Mybatis 组件
-
Mybatis 架构原理
-
Mybatis 核心类及作用
-
Mybatis 配置解析
-
Mybatis 之 Session
-
Mybatis SQL 解析流程
-
Mybatis 之 TypeHandler
-
Mybatis 之 TypeAlias
-
Mybatis 之缓存
-
Mybatis 之插件机制
-
Mybatis 之事务管理
-
Mybatis 也有拦截器?
-
Mybatis 中的设计模式
Netty
- 为什么要掌握 Netty,哪些重量级的项目使用了 Netty
- 网络编程模式知多少?
- Netty 所使用的的编程模式及局限性
- Tcp 粘包/半包 Netty 全搞定
- Netty 支持哪些编码和解码?
- 从编码和解码看 Spring 和 Netty 的设计思路
- 堆外内存,看 netty 是怎么实现的
- 启动服务
- 构建连接
- 接收数据
- 业务处理
- 发送数据
- 断开连接
- 关闭服务
- Netty 设计之美
以上大约 70%的主题都或多或少有接触,但是,每个主题都没有形成系统,往往只能泛泛而谈,这就是我目前的困境。
整个大于有 155 个项目,有些还没有展开,如果展开大于能到 300,如果以每天一个题目的速度需要 一年,如果以每周一个的速度,大约需要 7 年。而这仅仅是 Java 与日常接触最紧密的内容。这里面的很多主题如果之前没有接触,全职至少需要 2 到 3 天。所谓十年编程,一点也夸张。