其他分享
首页 > 其他分享> > BAT等大厂必问技术面试题,一招彻底弄懂!

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&notify区别 * 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