1. AbstractExecutorService
  2. ExecutorService
    1. submit
    2. invokeAll
    3. invokeAny
    4. shutDown
  3. Executor
    1. execute
  4. JVM
    1. 类加载
      1. 加载
        1. 类加载器
          1. bootstrap classloader
          2. extension classloader
          3. Application classloader
          4. Userdefined classloader-e.g.字节码加密,需要在加载时解密
          5. 特点
          6. 父类委托
          7. 缓存
          8. 全盘负责
        2. 步骤
          1. 通过类的全限定名获取二进制字节流
          2. 将字节流代表的静态存储结构转化为方法区的运行时数据结构
          3. java堆中生成java.lang.class对象
        3. 加载方式
          1. 命令行启动时,jvm初始化加载
          2. Class.forName(classname)动态加载
          3. ClassLoader.loadClass(classname) 动态加载
          4. 区别
          5. forname(classname, true, classloader), true 已经初始化
          6. loadClass(className, false) false表示不连接,即静态块和静态对象不会执行
      2. 链接
        1. 验证
        2. 准备
          1. 为静态变量分配内存,初始化为默认值(0,0L,null,false) 而非显式的赋值
          2. 若同时有 final static,则初始化为指定的值
        3. 解释(optional)
          1. 符号引用转化为直接引用
      3. 初始化
      4. 执行/初始化
        1. 时机
          1. new
          2. 访问某个类/接口的静态变量
          3. 调用类的静态方法
          4. 反射
          5. 初始化某个类的子类,其父类也会被初始化
          6. JVM启动时被标明为启动类的类
        2. 执行引擎
          1. 字节码载入运行时数据区
          2. 解释器
          3. JIT(即时编译器) 字节码转换为本地代码
      5. 使用
      6. 卸载
    2. 内存管理
      1. 内存分区
        1. 线程间共享
          1. 新生代
          2. Eden
          3. Survivor_1
          4. Survivor_2
          5. 老年代
          6. 存放 对象实例
          7. 方法区
          8. Classloader引用
          9. 运行时常量池
          10. 字段数据
          11. 方法数据+代码
        2. 线程独享
          1. 栈(栈帧组成
          2. 类当前方法的运行时常量池引用
          3. 局部变量表
          4. 操作数栈
          5. 返回值
          6. PC
          7. 本地方法栈
      2. 异常处理
        1. OOM-OutOfMemoryError
          1. 内存泄漏
          2. 原因
          3. 全局集合
          4. 缓存(无限大)
          5. ClassLoader
        2. StackOverflowError
      3. clone
        1. 浅复制
        2. 深复制
      4. java不支持复制构造函数,但可以使用clone 复制构造函数是 用对象初始化另一个对象,
    3. GC
      1. 具有平台依赖
      2. 对象判活
        1. 引用计数--注意循环引用
        2. 可达性分析(利用GCRoot
      3. GC算法
        1. 标记清除
        2. 标记-整理
        3. 复制
        4. 分代收集
      4. GC回收器
  5. 类型转换
    1. 长度
      1. int:32bit
      2. byte 8bit
      3. char &short - 16bit
      4. float - 32bit
      5. long & double - 64bit
    2. 转换
      1. 自动提升
        1. ps: 在运算时,长度小于int的会自动转换为 int, byte+byte->int
      2. 强制转换
  6. 异常
    1. Throwable接口派生
      1. Error,JVM生成
      2. Exception,java程序生成
        1. checked exception
          1. IOException
          2. ClassNotFoundException
          3. CloneNotSupportedException
        2. runtime exception
  7. 反射
  8. IO流
    1. 字符流
      1. Reader
        1. BufferedReader
        2. InputStreamReader
          1. FileReader
        3. StringReader
        4. PipedReader
        5. ByteArrayReader
        6. FilterReader
          1. PushbackReader
      2. Writer
        1. 同上
    2. 字节流
      1. InputStream
        1. FileInputStream
        2. FilterInputStream
          1. BufferedInputStream
          2. DataInputStream
          3. PushbakInputStream
        3. ObjectInputStream
        4. PipedInputStream
        5. SequenceInputStream
        6. StringBufferInputStream
        7. ByteArrayInputStream
      2. OutputStream
        1. File OutputStream
        2. Filter OutputStream
          1. buffered OutputStream
          2. Data OutputStream
          3. Print OutputStream
        3. Object OutputStream
        4. Piped OutputStream
        5. ByteArray OutputStream
  9. 序列化
  10. IO多路复用
    1. select
      1. 每次调用select,都需要把fd集合从用户态拷贝到内核态,这个开销在fd很多时会很大
      2. 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
      3. select支持的文件描述符数量太小了,默认是1024
    2. poll
    3. epoll
      1. 没有最大并发连接限制
      2. 只关心“活跃”的链接
      3. 使用共享内存,避开了内存拷贝
      4. 函数
        1. epoll_create 创建专用的文件描述符,申请内和空间
        2. epoll_ctl 控制某个文件描述符上的事件
        3. epoll_wait 等待事件
      5. 工作模式
        1. level trigger
        2. edge trigger
  11. NIO
    1. Buffer
      1. 类型
        1. 普通变量类型
          1. ByteBuffer
          2. 间接, HeapByteBuffer
          3. DoubleBuffer
          4. FloatBuffer
          5. IntBuffer
          6. LongBuffer
          7. ShortBuffer
        2. MappedByteBuffer
          1. 文件关闭不确定,在full gc时关闭
      2. 使用步骤
        1. 分配空间
        2. 写入数据到Buffer
        3. 使用 filp()
        4. 从buffer读取数据
        5. 调用clear()/compact()
      3. 变量表示位置状态
        1. Capacity 总长度
        2. position 下一个操作的数据元素位置
        3. limit 不可操作的元素位置
        4. mark 记录当前position的前一个位置 或默认为0
    2. Channel
      1. FileChannel
      2. DatagramChannel
      3. SocketChannel
      4. ServerSocketChannel
    3. Selector
      1. 使用
        1. 调用工厂方法 open()
        2. 将 ServerSocketChannel注册到 selector
          1. interest集合
          2. SelectionKey.OP_CONNECT
          3. SelectionKey.OP_ACCEPT
          4. SelectionKey.OP_READ
          5. SelectionKey.OP_WRITE
        3. 调用select()方法
        4. Iterator<SelectionKey> iter = selector.selectedKeys().iterator();
          1. 遍历Key 确定就绪状态
          2. selectionKey.isAcceptable();
          3. selectionKey.isConnectable();
          4. selectionKey.isReadable();
          5. selectionKey.isWritable();
        5. 遍历后,iter.remove()
          1. 注意每次迭代末尾的keyIterator.remove()调用。 Selector不会自己从已选择键集中移除SelectionKey实例。 必须在处理完通道时自己移除。
      2. SelectionKey
        1. interest集合
        2. ready集合
        3. channel
        4. selector
    4. 概要
  12. 面向对象
    1. 多态
      1. 继承、实现
        1. 不能继承的情况
        2. 抽象类
    2. 泛型
      1. 只在编译阶段有效
      2. 泛型类
      3. 通配符
        1. ? extends class
        2. ? super class
      4. 优点
        1. 类型安全,限制变量类型
        2. 消除强制类型转换
        3. 提高性能
      5. 注意事项
        1. 类型参数只能是类类型
        2. 不能对泛型类使用 instanceof
        3. 不能创建一个确切的泛型类型数组,使用通配符可以
  13. 数据结构
    1. collection
      1. Hashmap底层实现
    2. 排序
      1. 稳定排序
      2. 不稳定排序
    3. String & StringBuffer
      1. String s= new String("abc")
      2. String s = "abc"
      3. intern()方法
    4. 正则表达式
  14. 并发
      1. 自旋锁
      2. 阻塞锁
      3. 可重入锁
      4. 读写锁
      5. 悲观/乐观锁
      6. 轻量级锁(CAS实现
      7. X锁
      8. 对象锁、线程锁
      9. 公平/非公平锁
    1. 线程池
      1. ThreadPoolExecutor
        1. 属性
          1. corePoolSize
          2. maximumPoolSize
          3. keepAliveTime
          4. volatile runState
          5. Running
          6. SHUTDOWN
          7. STOP
          8. TERMINATED
        2. 方法
          1. execute
          2. 流程
          3. submit()
          4. shutdown()
          5. shutdownNow()
        3. 初始化(提交任务才会创建线程)
          1. prestartCoreThread() 启动一个
          2. prestartAllCoreThreads()启动所有
        4. 任务缓存队列/排队策略
          1. workQueue
          2. ArrayBlockingQueue FIFO
          3. LinkedBlockingQueue, FIFO
          4. synchronousQueue,不保存任务,直接新建线程执行
        5. 任务拒绝策略
          1. AbortPolicy 丢弃任务,抛出异常
          2. DiscardPolicy 丢弃任务,不抛出异常
          3. DiscardOldestPolicy 丢弃队列最前面的任务,重新执行
          4. CallerRunsPolicy 由调用线程处理该任务
      2. 配置线程池大小
        1. cpu密集型 -- Ncpu+1
        2. IO密集型 --2*Ncpu
        3. 参考值,可以先设置,并根据系统负载及利用率调整
    2. 线程局部存储 TLS
    3. concurrent库
      1. 队列
        1. BlockingQueue 接口
          1. ArrayBlockingQueue
          2. DelayQueue
          3. LinkedBlockingQueue
          4. PriorityBlockingQueue
          5. SynchronousQueue-容纳单个元素
      2. Map
        1. ConcurrentMap接口
          1. ConcurrentHashMap 只锁表项
      3. 闭锁 CountDownLatch
      4. 原子性数据类型