Java并发面试题

拦截器 1月前 ⋅ 149 阅读
1 并发基础知识
    1.1 并发编程的优缺点
        1.1.1 为什么要用到并发(优点)
        1.1.2 并发编程的缺点 
        1.1.3 如何避免上下文频繁切换 4点(3个为多线程下 1个为单线程)
        1.1.3 死锁 (如何避免死锁4个 2个为减少其中一个资源,超时,)
            1) 什么是死锁
            2)如何避免死锁
            3)如果检查程序是否有死锁
          一 Jconsole 检测死锁,
          二 jps -l 然后jstack -l 9156 > jstack.log 然后tail -f -n 500 jstack.log
          三 jvisualvm 线程dump
          四 gdb命令 gdb attach 9867 然后 info thread 然后thread 2 然后bt 然后p cc
          五 pstack
        
        1.1.4 常见并发名词理解
            1)同步VS异步
            2)并发VS并行
            3)阻塞VS非阻塞
            4) 临界区资源
    1.2 线程的状态和基本操作
        1.2.1 如何新建线程
        1.2.2 线程状态的转换
        1.2.3 线程的基本操作
        1.2.4 线程的基本操作
        1.2.5 守护线程Daemon
 2 并发理论JMM
    2.1 JMM内存模型
        2.1.1 哪些是共享数据
        2.2.1 抽象结构    
    2.2 重排序
        2.2.1 什么是重排序
        2.2.2 数据依赖性
        2.2.3 as-if-serial    
    2.3 happens-before规则
        2.3.1 定义
        2.3.2 理解
        2.3.3 具体规则
3 并发关键字    
    3.1 synchronized
        3.1.1 如何使用
        3.1.2 monitor机制
        3.1.3 synchronized和happens-before关系
        3.1.4 synchronized内存语义
        3.1.5 锁优化
            1)锁状态
            2)CAS操作
            3)Java对象头
        3.1.6 锁升级策略
    3.2 volatile
        3.2.1 实现原理
        3.2.2 happens-before关系推导
        3.2.3 内存语义的实现
    3.3 final
        3.3.1 如何使用
        3.3.2 final重排序规则
        3.3.3 final实现原理
        3.3.4 final函数不能从构造函数中溢出
    3.4 三大基本性质
4 Lock体系
    4.1 Lock与synchronized比较
    4.2 AQS
        4.2.1 设计意图
        4.2.2 如何使用AQS实现自定义同步组件
        4.2.3 可重写的方法
        4.2.4 AQS提供的模版方法
    4.3 AQS源码解析
        4.3.1 AQS同步队列数据结构
        4.3.2 独占锁
        4.3.3 共享锁
    4.4 ReentrantLock
        4.4.1 重入锁的实现原理
        4.4.2 公平锁的实现原理
        4.4.3 非公平锁的实现原理
        4.4.4 公平锁与非公平锁的比较
    4.5 ReentrantReadWriteLock
        4.5.1 如何表示读写状态
        4.5.2 WriteLock的读取和释放
        4.5.3 ReadLock的读取和释放
        4.5.4 锁降级策略
        4.5.5 生成Condition等待队列
        4.5.5 应用场景
    4.6 Condition机制
        4.6.1 与Object类的wait和notify相比具有的特性
        4.6.2 与Object类对应的方法
        4.6.3 底层数据结构
        4.6.4 await的实现原理
        4.6.5 signal和signalAll的实现原理
        4.6.6 await和signal结合使用的场景
    4.7 LockSupport
        4.7.1 主要功能
        4.7.2 与synchronized相比具有的特色
    4.8 并发容器
       4.8.1 ConcurrentHashMap
            1) 关键属性
            2) 重要内部类
            3) 涉及到的CAS操作
            4) 构造方法
             5) put执行流程
             6) get执行流程
             7) 扩容机制
             8) 用于统计size的方法的执行流程
            9) 1.8版本的ConcurrentHashMap与之前版本的比较
     4.9 CopyOnWriteArrayLst
        4.9.1 实现原理
        4.9.2 COW和ReentrantReadWriteLock的区别
        4.9.3 应用场景
        4.9.4 为什么具有弱一致性
        4.9.5 COW的缺点
    4.10 ThreadLocal
        4.10.1 实现思想
        4.10.2 set方法原理
        4.10.3 get方法原理
        4.10.4 remove方法原理
        4.10.5 ThreadLocalMap
                1)底层数据结构
                2)set方法原理
                3)getEntry方法原理
                4)remove原理
        4.10.6 ThreadLocal内存泄漏
                1)内存泄漏原因
                2)怎样解决内存泄漏
                3)为什么要使用弱引用
        4.10.7 ThreadLocal最佳实践(remove掉)
        4.10.8 应用场景
    4.11 BlockingQueue
         4.11.1 BlockingQueue基本操作
         4.11.2 常用BlockingQueue
            1) ArrayBlockingQueue实现原理
            2) LinkedBlockingQueue实现原理
            3)PriorityBlockingQueue实现原理
            4)SynchronousQueue实现原理
            5) LinkedTransferQueue实现原理
            6) LinkedBlockingDeque实现原理
            7) DelayQueue实现原理
    4.12 ConcurrentLinkedQueue
            4.12.1 实现原理
            4.12.2 数据结构
            4.12.3 核心方法
            4.12.4 HOPS 延迟更新设计意图
5 线程池 (Executor体系)
    5.1 ThreadPoolExecutor
        5.1.1 为什么要用线程池
        5.1.2 执行流程
        5.1.3 构造函数几个参数含义
        5.1.4 如何关闭线程池
        5.1.5 如何配置线程池 
    5.2 ScheduledThreadPoolExecutor
        5.2.1 UML类继承结构
        5.2.2 常用方法 
        5.2.3 ScheduledFutureTask
        5.2.4 DelayedWorkQueue
    5.3 FuturreTask
        5.3.1 FutureTask几种状态
        5.3.2 get()
        5.3.3 cancel()
        5.3.4 应用场景
        5.3.5 实现Runnable
6 原子操作
    6.1 实现原理
    6.2 原子更新基本类型
    6.3 原子更新数组类型
    6.4 原子更新引用类型
    6.5 原子更新字段类型
    
7 并发工具
    7.1 倒计数器CountDownLatch
    7.2 循环栅栏CyclicBarrier
    7.3 CountDownLatch和CyclicBarrier区别
    7.4 资源访问控制Semaphore
    7.5 数据交换Exchanger
 
8 并发实践
    8.1 生产者消费者问题
    8.2 生产者消费者实现三种方式
    8.3 Object的wait和notify实现可能存在的问题
    
 
            
        
 
 
 
 
 
 
 
 
 
 

全部评论: 0

    我有话说: