JMM 中内存模型是怎样的?
    什么是指令序列重排序?
    JVM 内存是如何对应到操作系统内存的?
    简述读写屏障底层原理
    Java 线程池里的 arrayblockingqueue 与 linkedblockingqueue 的使用场景和区别

    synchronized关键字原理 说一下锁升级的过程
    java关键字 底层通过monitor enter加锁 exit解锁
    synchronize是怎么实现可重入
    synchronized与ReentrantLook的区别 syncronized和锁的区别

    1. 使用关键字
    2. 是否公平
    3. 解锁方式

    什么是公平锁,ReentrantLock如何保证公平的
    CAS与锁的区别
    说下aqs,aqs是怎么实现可重入的
    aqs的设计模式 —-模板方法
    说下ReentrantLock是怎么实现的
    说一下线程池,线程池的拒绝策略有哪些,4种, 直接舍弃,随机丢弃等待中的第一个,直接执行,报错
    threadLocal,以及如何在提交任务到线程池时,保证当前业务上下文信息传递到下一个业务


    30、进程间通信的方式。
    进程间通信基本上有 5 种通讯方式。

    1. 无名管道通信:速度慢,容量有限,只有父子进程能通信。
    2. FIFO:任何进程间都能通信,但是速度慢。
    3. 消息队列:容量受到系统限制,可以实现消息的随即查询,消息不一定
      以先进先出的次序读取,也可以按照消息的类型读取。且要注意第一次
      读的时候,要考虑上一次没有读完数据的问题。
    4. 信号量:不能传递复杂消息,只能用来同步。
    5. 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个
      进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程
      安全。

    进程和线程的区别。
    进程是操作系统进行资源分配的基本单位。进程控制块 (Process Control Block,
    PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对
    PCB 的操作。一个进程中可以有多个线程,线程是独立调度的基本单位。同一
    个进程中的多个线程之间可以并发执行,它们共享进程资源。
    进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有
    自己私有的地址空间,在没有进程本身运行的情况下是不能访问其中的内容的。
    线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线
    程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。
    多线程主要是为了节约 CPU 时间,发挥利用,根据具体情况而定。线程的运行
    中需要使用计算机的内存资源和 CPU。
    线程和进程的区别归纳:

    1. 地址空间与其他资源:进程间相互独立,同一进程的各线程间共享。某
      进程内的线程在其他进程不可见。
    2. 通信:进程间通信 IPC,线程间可以直接读写进程数据段(如全局变量)
      来进行通信——需要线程同步和互斥手段的辅助,以保证数据的一致性。
    3. 调度和切换:线程上下文切换比进程上下文切换要快得多。并且线程是
      独立调度的基本单位,在同一进程中,线程的切换不会引起进程切换,
      从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
    4. 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,
      如内存空间、I/O 设备等,因此操作系统所付出的开销远大于创建或撤
      销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU
      环境的保存及新调度进程 CPU 环境的设置。而线程切换时只需保存和设
      置少量寄存器内容,开销很小。