一、基础篇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
编译与反编译
javac 、javap 、jad 、CRF
Java基础知识
阅读源代码String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet
Java中各种变量类型 熟悉Java String的使用,熟悉String的各种函数JDK 6和JDK 7中substring的原理及区别、
replaceFirst、replaceAll、replace区别、
String对“+”的重载、
String.valueOf和Integer.toString的区别、
字符串的不可变性
自动拆装箱Integer的缓存机制
熟悉Java中各种关键字transient、instanceof、volatile、synchronized、final、static、const 原理及用法。
集合类常用集合类的使用
ArrayList和LinkedList和Vector的区别
SynchronizedList和Vector的区别
HashMap、HashTable、ConcurrentHashMap区别
Java 8中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消息传送模型
JMXjava.lang.management.*、 javax.management.*
泛型泛型与继承
类型擦除
泛型中K T V E
object等的含义、泛型各种用法
单元测试junit、mock、mockito、内存数据库(h2)
正则表达式java.lang.util.regex.*
常用的Java工具库commons.lang, commons.*... guava-libraries netty
什么是API&SPI 异常异常类型、正确处理异常、自定义异常
时间处理时区、时令、Java中时间API
编码方式解决乱码问题、常用编码方式
语法糖Java中语法糖原理、解语法糖
Java并发编程
什么是线程,与进程的区别 阅读源代码,并学会使用Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors
线程池自己设计线程池、submit() 和 execute()
线程安全死锁、死锁如何排查、Java线程调度、线程安全和内存模型的关系
锁CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁
死锁 volatilehappens-before、编译器指令重排和CPU指令重
synchronizedsynchronized是如何实现的?
synchronized和lock之间关系
不使用synchronized如何实现一个线程安全的单例
sleep 和 wait wait 和 notify notify 和 notifyAll ThreadLocal 写一个死锁的程序 写代码来解决生产者消费者问题 守护线程守护线程和非守护线程的区别以及用法
二、 进阶篇Java底层知识 字节码、class文件格式 CPU缓存,L1,L2,L3和伪共享 尾递归 位运算用位运算实现加、减、乘、除、取余
设计模式
了解23种设计模式 会使用常用设计模式单例、策略、工厂、适配器、责任链。
实现AOP 实现IOC 不用synchronized和lock,实现线程安全的单例模式 nio和reactor设计模式网络编程
tcp、udp、http、https等常用协议三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包
http/1.0 http/1.1 http/2之前的区别 Java RMI,Socket,HttpClient cookie 与 sessioncookie被禁用,如何实现session
用Java写一个简单的静态文件的HTTP服务器实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”
了解nginx和apache服务器的特性并搭建一个对应的服务器 用Java实现FTP、SMTP协议 进程间通讯的方式 什么是CDN?如果实现? 什么是DNS? 反向代理