BAT等大厂必问技术面试题,一招彻底弄懂!
作者:互联网
**线程**
* 线程的启动
* 实现Runnab1e接口
* 继承Thread类
* 实现Callable接口
* 线程的状态
* 线程的方法
* 线程的优先级
* 守护线程
* 未捕获异常处理器
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499625257359.jpg)
**并发编程的问题**
* 线程引入开销:上下文切换与内存同步
* 线程安全性(原子性+可见性)
* 死锁
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499625250418.jpg)
**线程间通信/线程同步 工具使用**
* synchronized
* Lock
* volatile
* Atomic
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499626876539.jpg)
**Lock使用 深入**
* 可重入锁 ReentrantLock
* Condition与wait¬ify区别
* await&signal
* 公平锁
* 读写锁 ReentrantReadWriteLock
* LockSupport(锁住的是线程,synchronized锁住的是对象)
* synchronized与Lock的区别
* 原子操作类使用
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499626749182.jpg)
**Java内存模型 线程同步工具原理**
* JMM抽象结构
* 指令重排序
* 内存屏障
* happens-before(抽象概念,基于内存屏障)
* 顺序一致性
* volatile原理
* synchronized原理
* 原子操作原理
* 锁的比较
* 锁的优化
* 锁的分类
* 偏向锁(只有一个线程进入临界区)
* 轻量级锁(多个线程交替进入临界区)
* 重量级锁(多个线程同时进入临界区)
* CPU如何实现原子操作
* Java如何实现原子操作
* CAS在OpenJDK中的实现
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499626627477.jpg)
**同步容器**
* ConcurrentHashMap
* CopyOnWriteArrayList
* BlockingQueue
* ThreadLocal
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499627342488.jpg)
**同步工具使用**
* Semaphore (信号量)
* Cycli eBarrier (可循环使用的屏障/栅栏)
* Exchanger (两个线程交换数据)
* CountDownLatch (闭锁)
* FutureTask (Future实现类)
* 将批量同步操作转为异步操作(并行流/CompletableFuture)
* 多个异步任务合并
* API
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499627463781.jpg)
**线程池使用**
* 引入原因
* 继承体系
* ExecutorService
* ScheduledExecutorService
* ThreadPoolExecutor
* 创建线程池
* 线程动态变化
* 扩展ThreadPoolExecutor
* ScheduledThreadPoolExecutor
* Executors
* CompletionService
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499628981503.jpg)
**J.U.C 源码解析**
* AQS的接口
* AQS使用实例(互斥锁,tryAcquire只需一次CAS)
* AQS实现
* 同步队列
* 独占式同步状态
* 共享式同步状态
* 独占式超时获取同步状态
* ReentrantLock公平锁
* ReentrantReadWriteLock
* 读写状态的设计
* 写锁的获取与释放
* 读锁的获取与释放(放弃)
* 锁降级
* LockSupport
* Condition
* 等待队列
* AtomicInteger
* ThreadPoolExeuctor
* 状态转换
* 成员变量
* 构造方法
* 执行任务
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499628302349.jpg)
# 并发体系思维导图
**Java内存模型(JMM)**
* 线程通信机制
* 内存模型
* synchronized
* volatile
* DCL
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499628955427.jpg)
**并发基础**
* AQS
* CAS
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499629426398.jpg)
**锁**
* ReentrantLock
* ReentrantReadWriteLock
* Condition
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499629847681.jpg)
**并发工具类**
* CyclicBarrier
* CountDownLatch
* Semaphore
* Exchanger
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499629807743.jpg)
**其他**
* ThreadLocal
* Fork/Join
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499630769131.jpg)
**Java并发集合**
* ConcurrentHashMap
* ConcurrentLinkedQueue
* Concurr entSkipListMap
* ConcurrentSkipListSet
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499630111919.jpg)
**atomic**
* 基本类型类
* 数组
* 引用类型
* 字段类
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499630689623.jpg)
**阻塞队列**
* ArrayBlockingQueue
* LinkedBlockingQueue
* PriorityBlockingQueue
* DelayQueue
* SynchronousQueue
* LinkedTransferQueue
* LinkedBlockingDeque
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499631233222.jpg)
**线程池**
* Executor
* Future
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499631633184.jpg)
很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。
我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。
不管是查缺补漏还是深度学习都能有非常不错的成效,需要的话记得帮忙点个赞支持一下
# 资料分享
> **[领取方式:戳这里即可免费获取](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB),同时还可以“嫖”到一份关于Redis事务源码的详解内容。**
**1、算法大厂——字节跳动面试题**
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499631647499.jpg)
**2、2000页互联网Java面试题大全**
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499631466895.jpg)
**3、高阶必备,算法学习**
![](http://www.icode9.com/i/li/?n=2&i=images/20210705/1625499631502278.jpg)
标签:面试题,必问,BAT,20210705,线程,https,images,cto,com 来源: https://blog.51cto.com/u_15288752/2984966