一、基础篇

1.1 JVM  该内容可以查看书籍《深入理解java虚拟机》

 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收

 1.1.2. 了解JVM各种参数及调优

 1.1.3. 学习使用Java工具

jpsjstackjmap, jconsole, jinfo, jhat, javap, …

 1.1.4. 学习Java诊断工具

1.1.5. 自己编写各种outofmemorystackoverflow程序

  • HeapOutOfMemory

  • Young OutOfMemory

  • MethodArea OutOfMemory

  • ConstantPool OutOfMemory

  • DirectMemory OutOfMemory

  • Stack OutOfMemory Stack OverFlow

 1.1.6. 使用工具尝试解决以下问题,并写下总结

当一个Java程序响应很慢时如何查找问题 当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志 当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同

1.2. Java基础知识

1.2.1. 阅读源代码(已经查看完的文字颜色改为红色)

java.lang.String java.lang.Integer

Java.lang.Long

java.lang.Enum java.math.BigDecimal java.lang.ThreadLocal java.lang.ClassLoader & java.net.URLClassLoader java.util.ArrayList & java.util.LinkedList

java.util.HashMap & java.util.LinkedHashMap & java.util.TreeMap (需要深入研究红黑树)

java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet

 1.2.2. 熟悉Java中各种变量类型

1.2.3. 熟悉Java String的使用,熟悉String的各种函数

1.2.4. 熟悉Java中各种关键字

 1.2.5. 学会使用ListMapStackQueueSet

上述数据结构的遍历 上述数据结构的使用场景 Java实现对Array/List排序java.uti.Arrays.sort() java.util.Collections.sort() Java实现对List去重 Java实现对List去重,并且需要保留数据原始的出现顺序 Java实现最近最少使用cache,用LinkedHashMap

1.2.6. Java IO&Java NIO,并学会使用

java.io.* java.nio.* nio和reactor设计模式 文件编码,字符集

1.2.7. Java反射与javassist

反射与工厂模式 java.lang.reflect.*

1.2.8. Java序列化

java.io. Serializable 什么是序列化,为什么序列化 序列化与单例模式 google序列化protobuf

1.2.9. 虚引用,弱引用,软引用

java.lang.ref.* 实验这些引用的回收

1.2.10. 熟悉Java系统属性

java.util.Properties

1.2.11. 熟悉Annotation用法

java.lang.annotation.*

1.2.12. JMS

javax.jms.*

1.2.13. JMX

java.lang.management.* javax.management.*

1.2.14. 泛型和继承,泛型和擦除

1.2.15. 自动拆箱装箱与字节码

1.2.16. 实现Callback

 1.2.17. java.lang.Void类使用

 1.2.18. Java Agentpremain函数

java.lang.instrument

1.2.19. 单元测试

Junit,Jmockit,djUnit

1.2.20. Java实现通过正则表达式提取一段文本中的电子邮件,并将@替换为#输出

java.util.regex.*

1.2.21. 学习使用常用的Java工具库

commons.lang, commons.*… guava-libraries Netty

1.2.22. 什么是API&SPI

1.3. Java并发编程

1.3.1. 阅读源代码,并学会使用

java.lang.Thread
java.lang.Runnable
java.util.concurrent.Callable

java.util.concurrent.locks.ReentrantLock

java.util.concurrent.locks.ReentrantReadWriteLock

java.util.concurrent.atomic.Atomic*

java.util.concurrent.Semaphore

java.util.concurrent.CountDownLatch

java.util.concurrent.CyclicBarrier

java.util.concurrent.ConcurrentHashMap

java.util.concurrent.Executors

1.3.2. 学习使用线程池,自己设计线程池需要注意什么

1.3.3. 

什么是锁,锁的种类有哪些,每种锁有什么特点,适用场景是什么 在并发编程中锁的意义是什么

1.3.4. synchronized的作用是什么,synchronizedlock

1.3.5. sleepwait

1.3.6. waitnotify

1.3.7. 写一个死锁的程序

1.3.8. 什么是守护线程,守护线程和非守护线程的区别以及用法

1.3.9. volatile关键字的理解

C++ volatile关键字和Java volatile关键字 happens-before语义 编译器指令重排和CPU指令重排

1.3.10. 以下代码是不是线程安全?为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?

public class Sample {
 
  private static int count = 0;
 
  public static void increment() {
 
    count++;
 
  }
 
}

1.3.11. 解释一下下面两段代码的差别

// 代码1
 
public class Sample {
 
  private static int count = 0;
 
  synchronized public static void increment() {
 
    count++;
 
  }
 
}
 
// 代码2
 
public class Sample {
 
  private static AtomicInteger count = new AtomicInteger(0);
 
  public static void increment() {
 
    count.getAndIncrement();
 
  }
 
}