Java Guide

基础

  • string

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

    • 集合框架Koloboke

      Koloboke的目标是替换标准的Java集合和流的API,提供更高效的实现。

    • 跳表 ConcurrentSkipListMap
    • 红黑树 TreeMap、TreeSet
    • HashMap
      • 详细梳理JAVA7和JAVA8 HashMap的hash实现
      • jdk1.7中的线程安全问题 (resize死循环)
  • 代理
    按照代理的创建时期,代理类可以分为两种。

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

    • java动态代理(JDK和cglib)
    • Cglib及其基本使用
  • IO

    • IO流

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

      • IO操作你还在用File吗,该拥抱Path和Files了
    • 同步、异步、阻塞和非阻塞

      同步、异步:

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

      阻塞、非阻塞:

      • 概念:程序等待调用结果时的状态
      • 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程可以往下执行,如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调。
      • 网络IO中的同步、异步、阻塞和非阻塞
      • 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的最清楚的好文章
  • 并发

    • 线程状态

      • Java线程的6种状态及切换(透彻讲解)
      • Java中一个线程只有六个状态。至于阻塞、可运行、挂起状态都是人们为了便于理解,自己加上去的
    • synchronized

    • volatile

    • 线程池

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

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

  • WeakReference 和 ReferenceQueue

  • JDK Unsafe类

    • objectFieldOffset
    • compareAndSwap…

其他

  • Reactor模式

    • Reactor模式详解
    • 高性能IO之Reactor模式
  • ForkJoin

  • Actor模型

    • Java并发的四种风味
    • Akka

JMX

JVM

  • 热更
    • 动态加载class文件
    • 游戏服务器之Java热更新
  • ClassLoader
    • CSDN·自定义classloader实现JAVA热替换
    • 百度·自定义classloader实现JAVA热替换
  • 局部变量表中的Slot
  • Monitor对象
  • 内存模型
    • 《深入理解 Java 内存模型》读书笔记 - 掘金
    • 全面理解Java内存模型(JMM)及volatile关键字 - CSDN博客

Java8

  • parallelStream
  • 元空间(Metaspace)

性能调优

  • VisualVM
    • 使用 VisualVM 进行性能分析及调优
  • Arthas使用指南
    Arthas 是基于 Greys 进行二次开发的全新在线诊断工具

语法糖

  • Java中的10颗语法糖

设计模式

  • 设计模式 - 菜鸟教程

图形

  • Polygon,区域超区校验

常遇的报错与坑

  • ConcurrentModificationException
  • 疫苗:JAVA HASHMAP的死循环

你可能感兴趣的:(Java)