Java 学习路线
参考:http://www.hollischuang.com/archives/489
学习java已有几年,感觉自己越来越Low, 特参考Hollis java学习路线,结合自身学习情况、总结。
基础篇
JVM
JVM内存结构
- 堆、栈、方法区、直接内存、堆和栈的区别
Java内存模型
- 内存可见性、重排序、顺序一致性、volatile、锁、final
垃圾回收
-
内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定
JVM参数及调优
- Java对象模型
- oop-klass、对象头
HotSpot
- 即时编译器、编译器优化
- 类加载机制
- classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)
- 虚拟机性能监控与故障处理工具
- jps
- jstack
- jmap
- jstat
- jconsole
- jinfo
- jhat
- javap
- btrace
- TProfiler
- 编译及反编译
- java、java、jad、CRF
Java基础知识
阅读源码
- String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLLoader
- ArrayList、LinkedList
- HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap
- HashSet、LinkedHashSet、TreeSet
Java中各种变量类型
- 熟悉Java String的使用,熟悉String的各种函数
- JDK6和JDK7中substring的原理与区别
- replaceFirst、repalceAll、replace的区别
- String对”+”的重载
- String.valueOf和Integer.toString的区别
- 字符串的不可变性
- 自动拆装箱
- Integer的缓存机制
- 熟悉Java中各种关键字
- transient、instance of 、valtile、synchronized、final、static、const原理及用法
集合类
- 常用集合类的使用
- ArrayList和LinkedList和Vector的区别
- SchronizedList和Vector的区别
- HashMap和HashTable、ConcurrentHashMap的区别
- Java8 Stream相关用法
- apache集合处理工具类的使用
- 不同版本的JDK的HashMap的实现的区别以及原因
枚举
- 枚举的用法、枚举与单例、Enum类
Java IO & Java NIO
- bio、nio和aio 的区别, 三种IO的用法与原理、netty
Java反射与javassist
- 反射与工厂模式、
java.lang.reflect.*
Java 反序列化
- 什么是序列化与分序列化
- 为什么序列化
- 序列化的底层原理
- 序列化与单例模式
- protobuf
- 为什么说序列化不安全
注解
- 元注解、自定义注解、Java中常用注解使用、注解与反射的结合
JMS
- 什么是Java消息服务,JMS消息传送模型
JMX
java.lang.management.*
、javax.management
泛型
- 泛型与继承、类型与擦除、泛型宗KTVE?Object等的含义、泛型的各种用法
单元测试
- Junit、mock、mockito、内存数据库(h2)
正则表达式
java.lang.util.regex.*
常用的Java工具库
commons.lang
,commons.*...
,guava-libraries
,netty
什么是API &SPI
异常
- 异常类型、正确处理异常、自定义异常
时间处理
- 时区、时令、Java中时间API
编码方式
- 解决编码问题、常用编码方式
语法糖
- Java中的语法糖原理、解语法糖
Java并发编程
什么是线程,进程 及区别
- 阅读源码,并学会使用
- Thread、Runable、Callable、ReentrantLock、ReentrantReadWriteLock、
- Atomic*、Semaphore、CountDownLatch、ConcurrentHashMap、Excutors
线程池
- 自己设计线程池、Submit ()和execute()
线程安全
- 死锁、死锁如何排查、Java线程调度、线程安全和线程模型
锁
- CAS、乐观锁与悲观锁、数据相关锁机制、分布式锁
- 偏向锁、轻量级锁、重量级锁、monitor 、锁优化、锁消除
- 锁粗化、自旋锁、可重入锁、阻塞锁、死锁
死锁
- volatile
- happens-before、编辑器指令重排和CPU指令重排
- synchornized
- synchronized是如何实现的?