基础

  • string

    • StringJoiner(Java 8中提供的可变字符串类)
  • 集合

  • 代理
    按照代理的创建时期,代理类可以分为两种。

    静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
    动态代理:在程序运行时,运用反射机制动态创建而成。
    Cglib动态代理
    JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。

  • IO

    • IO流

      • 管道流(Piped Stream)
      • RandomAccessFile, java.io包中是一个特殊的类, 既可以读文件,也可以写文件。
    • IO操作

    • 同步、异步、阻塞和非阻塞

      同步、异步:

      • 概念:消息的通知机制
      • 解释:涉及到IO通知机制;所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完之前是不返回的,调用者主动等待结果;所谓异步,就是发起调用后,被调用者直接返回,但是并没有返回结果,等处理完消息后,通过状态、通知或者回调函数来通知调用者,调用者被动接收结果。

      阻塞、非阻塞:

      • 概念:程序等待调用结果时的状态
      • 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程可以往下执行,如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调。
  • 并发

    • 线程状态

    • synchronized

    • volatile

    • 线程池

      《阿里巴巴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的另外一个不同之处是:哈希并不会保存元素的顺序,而跳表内所有的元素都是排序的。因此在对跳表进行遍历时,你会得到一个有序的结果。所以,如果你的应用需要有序性,那么跳表就是你不二的选择。

    • Java并发问题–乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

  • WeakReference 和 ReferenceQueue

  • JDK Unsafe类

    • objectFieldOffset
    • compareAndSwap…

其他

JMX

JVM

Java8

  • parallelStream
  • 元空间(Metaspace)

性能调优

语法糖

设计模式

图形

常遇的报错与坑