基础
-
string
- StringJoiner(Java 8中提供的可变字符串类)
-
集合
- 集合框架Koloboke
Koloboke的目标是替换标准的Java集合和流的API,提供更高效的实现。
- 跳表 ConcurrentSkipListMap
- 红黑树 TreeMap、TreeSet
- HashMap
- 详细梳理JAVA7和JAVA8 HashMap的hash实现
- jdk1.7中的线程安全问题 (resize死循环)
- 集合框架Koloboke
-
代理
按照代理的创建时期,代理类可以分为两种。静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
Cglib动态代理
JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。 -
IO
-
IO流
- 管道流(Piped Stream)
- RandomAccessFile, java.io包中是一个特殊的类, 既可以读文件,也可以写文件。
-
IO操作
-
同步、异步、阻塞和非阻塞
同步、异步:
- 概念:消息的通知机制
- 解释:涉及到IO通知机制;所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完之前是不返回的,调用者主动等待结果;所谓异步,就是发起调用后,被调用者直接返回,但是并没有返回结果,等处理完消息后,通过状态、通知或者回调函数来通知调用者,调用者被动接收结果。
阻塞、非阻塞:
- 概念:程序等待调用结果时的状态
- 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程可以往下执行,如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调。
-
-
并发
-
线程状态
-
synchronized
-
volatile
-
线程池
- ScheduledThreadPoolExecutor
《阿里巴巴Java开发手册》中强制线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险
Executors 返回线程池对象的弊端如下:
FixedThreadPool 和 SingleThreadExecutor : 允许请求的队列长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致OOM。
CachedThreadPool 和 ScheduledThreadPool : 允许创建的线程数量为 Integer.MAX_VALUE ,可能会创建大量线程,从而导致OOM。 -
Atomic
- AQS
- CountDownLatch、CyclicBarrier和Semaphore
-
并发容器
- ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue …
- SkipList(跳表)
- ConcurrentSkipListMap(使用跳表实现Map)
和使用哈希算法实现Map的另外一个不同之处是:哈希并不会保存元素的顺序,而跳表内所有的元素都是排序的。因此在对跳表进行遍历时,你会得到一个有序的结果。所以,如果你的应用需要有序性,那么跳表就是你不二的选择。
-
-
WeakReference 和 ReferenceQueue
-
JDK Unsafe类
- objectFieldOffset
- compareAndSwap…
其他
-
Reactor模式
-
ForkJoin
-
Actor模型
- Java并发的四种风味
- Akka
JMX
JVM
- 热更
- ClassLoader
- 局部变量表中的Slot
- Monitor对象
- 内存模型
Java8
- parallelStream
- 元空间(Metaspace)
性能调优
- VisualVM
- Arthas使用指南
Arthas 是基于 Greys 进行二次开发的全新在线诊断工具
语法糖
设计模式
图形
- Polygon,区域超区校验