面向对象
什么是面向对象
平台无关性
JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)
值传递
封装、继承、多态
Java的继承与实现
Java基础知识
基本数据类型
自动拆装箱
String
replaceFirst、replaceAll、replace区别、
String.valueOf和Integer.toString的区别
字符串池、常量池(运行时常量池、Class常量池)、intern
熟悉Java中各种关键字
synchronized
final
static
集合类
常用集合类的使用
ArrayList和LinkedList和Vector的区别
HashMap、HashTable、ConcurrentHashMap区别
apache集合处理工具类的使用
不同版本的JDK中HashMap的实现的区别以及原因
枚举
Enum类
IO
netty
反射
java.lang.reflect.*
动态代理
序列化
为什么序列化
protobuf
为什么说序列化并不安全
注解
Java中常用注解使用
注解与反射的结合
JMS (Java消息服务(Java Message Service))
JMS消息传送模型
JMX
java.lang.management.*
javax.management.*
泛型
上下界限定符extends 和 super
单元测试
junit
mock
mockito
内存数据库(h2)
正则表达式
java.lang.util.regex.*
常用的Java工具库
commons.lang
commons.*…
guava-libraries
netty
API&SPI
API
异常
异常类型、正确处理异常、自定义异常
Error和Exception
try-with-resources
finally和return的执行顺序
时间处理
时区、冬令时和夏令时、时间戳、Java中时间API
格林威治时间、CET,UTC,GMT,CST几种常见时间的含义和关系
Java 8中的时间处理
如何在东八区的计算机上获取美国时间
编码方式
GBK、GB2312、GB18030之间的区别
UTF8、UTF16、UTF32区别
URL编解码、Big Endian和Little Endian
如何解决乱码问题
语法糖
Java中语法糖原理、解语法糖
语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、 for-each、try-with-resource、Lambda表达式、
阅读源代码
Java并发编程
并发与并行
什么是并发
什么是并行
线程
优先级,线程调度
线程池
自己设计线程池
为什么不允许使用Executors创建线程
线程安全
死锁如何排查
线程安全和内存模型的关系
锁
轻量级锁
重量级锁
锁粗化
可重入锁
阻塞锁
死锁
死锁的原因
死锁的解决办法
synchronized
synchronized和lock之间关系、不使用synchronized如何实现一个线程安全的单例
synchronized和原子性、可见性和有序性之间的关系
volatile
happens-before、内存屏障、编译器指令重排和CPU指令重排
volatile的实现原理
volatile和原子性、可见性和有序性之间的关系
有了symchronized为什么还需要volatile
线程相关方法
wait 和 notify
notify 和 notifyAll
写一个死锁程序
写代码来解决生产者消费者问题
阅读源码
Atomic*