前言
如何在并发场景中写出优良的代码,是一道绕不开的坎,也是考量一个 Java 开发者功底的关键技术。因此,不难发现 Java 并发问题一直是各个大厂面试的重点之一,然而我发现很多候选人在面试时,常常表示对各种并发原理一脸懵逼,好像知道一些却又讲不清楚,最终导致面试失败。于是发奋学习,啃大部头书又发现理论太多,头疼。其实 Java 的并发问题虽然内容繁杂,然而整个脉络还是很清晰的。在这分享一些并发编程中常问的问题和并发编程学习导图!
线程安全和线程同步器
- java如何实现多线程之间的通讯和协作?
- 什么叫线程安全?servlet是线程安全吗?
- 同步有几种实现方法?
- volatile有什么用?能否用一句话说明下volatile的应用场景?
- 请说明下java的内存模型及其工作流程。
- 为什么代码会重排序?
- 分析下JUC 中倒数计数器 CountDownLatch 的使用与原理?
- CountDownLatch 与线程的 Join 方法区别是什么?
- 讲讲对JUC 中回环屏障 CyclicBarrier 的使用?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- Semaphore 的内部实现是怎样的?
- 简单对比同步器实现,谈谈你的看法?
- 并发组件CopyOnWriteArrayList 是如何通过写时拷贝实现并发安全的 List?
锁
- 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁??
- 当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
- synchronized和java.util.concurrent.locks.Lock的异同?
- 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
- 如何实现乐观锁(CAS)?如何避免ABA问题?
- 读写锁可以用于什么应用场景?
- 什么时候应该使用可重入锁?
- 什么场景下可以使用volatile替换synchronized?
并发框架和并发队列
- SynchronizedMap和ConcurrentHashMap有什么区别?
- CopyOnWriteArrayList可以用于什么应用场景?
- 如何让一段程序并发的执行,并最终汇总结果?
- 任务非常多的时候,使用什么阻塞队列能获取最好的吞吐量?
- 如何使用阻塞队列实现一个生产者和消费者模型?
- 多读少写的场景应该使用哪个并发容器,为什么使用它?
- 谈下对基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理的理解?
- ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全?
- 基于链表的阻塞队列 LinkedBlockingQueue 原理。
- 阻塞队列LinkedBlockingQueue 内部是如何使用两个独占锁 ReentrantLock 以及对应的条件变量保证多线程先入队出队操作的线程安全?
- 为什么不使用一把锁,使用两把为何能提高并发度?
- 基于数组的阻塞队列 ArrayBlockingQueue 原理。
- ArrayBlockingQueue 内部如何基于一把独占锁以及对应的两个条件变量实现出入队操作的线程安全?
- 谈谈对无界优先级队列 PriorityBlockingQueue 原理?
- PriorityBlockingQueue 内部使用堆算法保证每次出队都是优先级最高的元素,元素入队时候是如何建堆的,元素出队后如何调整堆的平衡的?
CountDownLatch
- 介绍一下 CountDownLatch 工作原理?
- CountDownLatch 和 CyclicBarrier 的区别?
- CountDownLatch 的使用场景?
- CountDownLatch 类中主要的方法?
并发编程学习思维导图
小结
当留给你准备面试的时间不充足时,要“以始为终”的去思考你最终展示在面试官哪里的状态。先写好简历,然后以这种目标去针对性的复习技术知识点。确保简历上写到的技术点,都有话可聊,都可以聊到关键点上。面试也是要看状态的,当所有的问题你都可以侃侃而谈,这时你的状态自然是最好的。祝各位面试顺利!
最后
本文提到的一些并发编程面试问题,我总结出答案做成文档及更多架构面试题资料及答案和视频资料及高清学习思维导图免费分享,还有更多关于Mysql、Spring、MyBatis、Nginx、Dubbo、Redis、Netty、Spring cloud、分布式、高并发、性能调优等架构技术资料和架构面试题资料,有需要的朋友可以来免费领取!
资料领取方式:加QQ群930254941,进群领取资料!
点击链接加入群聊【java架构交流群】:点击进群
有疑问加站长微信联系(非本文作者)