并发编程
多线程类的使用
- java线程同步有哪些方法、各自的优缺点
- synchronized 和ReentrantLock区别,可重入锁是什么?
- threadlocal有什么用
- Java中创建线程有几种方式?分别是?当主线程执行结束后,子线程还会继续执行下去吗?
- JUC中有哪些常用的集合?(项目中用到的)
- CopyOnWriteArrayList的实现原理?主要应用什么场景下?优缺点分别是?
- HashMap不是线程安全的,在高并发环境中做插入会出现什么情况?为什么?
- jdk1.8以前ConcurrentHashMap是如何实现线程安全的?jdk1.8以后呢?(1.8synchronized加CAS,并引入了红黑树)
- 当调用ConcurrentHashMap的size方法时,有元素并发插入,ConcurrentHashMap是怎么处理的?
- synchronized和java.util.concurrent.locks.Lock的比较。AtomicInteger原理,为什么要用CAS而不是synchronized?银行的后端如果出现多人想一个账户大钱的情况,会碰到什么问题?
- 什么是CAS操作,如何实现一个自定义锁
- Synchronized的实现,锁的升级过程。
- AQS锁了解么?
- wait()、notify必须在什么情况下使用
- 线程、进程、协程的关系。
- 对volatile的理解
- 详细的说一下concurrentHashMap put流程
- 你是如何理解同步/异步,并发/并行的概念的
- 那谈谈Lock接口的API以及其实现类相关的了解?
- 那么ReentrantLock中的lock和unlock之间的同步如何进行线程间的通信?
- Semaphore类的了解?
- JUC包下的计数锁?CountDownLatch?
- CyclicBarrier的理解?
- ReadWriteLock与ReentrantReadWriteLock的理解和区别?
- 你还了解ReentrantReadWriteLock哪些特性?
- ReentrantLock如何实现公平和非公平锁是如何实现?CountDownLatch和CyclicBarrier的区别?各自适用于什么场景?
- 乐观锁和悲观锁的区别?如何实现一个乐观锁?
- AQS是如何唤醒下一个线程的?
- ConcurrentHashMap是如何让多线程同时参与扩容?get需要加锁么,为什么?
- Disruptor框架的用法,实现
- Future的异步调用过程是咋样的?Future超时的情况?无限递归会造成jvm内存的什么问题?
- Java8之后的ConcurrentHashMap为什么舍弃分段锁?
- 线程池一整套(实现类及对应的阻塞队列、拒绝策略、具体参数、ScheduledThreadPool有三种构造方法,分别代表什么含义?)
- synchronized分别修饰在实例方法上和静态方法上,多线程并发时是否会竞争锁?synchronized修饰在方法上和代码块上有什么区别,底层是怎么实现的?
- 并发编程中的生产者消费者模式代码。[最简单的方式就是使用wait和notify去阻塞唤醒,当然还可以使用可重入锁(ReentrantLock),使用锁计数器(CountdownLatch)等等]
- 为什么要用读写锁而不用synchronized这种同步锁
- 如何实现控制线程在某段时间内完成,不完成就撤销。
- 参照ConcurrentHashMap,如果在多线程场景下使用HashMap,有什么手段提高效率又保证线程安全吗?
- 对Java内存模型的理解,以及其在并发中的应用;指令重排序,内存栅栏等
- Java 有什么锁类型?
- 并发容器有哪些,并发容器和同步容器的区别?
- CLH同步队列是怎么实现非公平和公平的?
- HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。
- Lock接口有哪些实现类,使用场景是什么。
- 可重入锁的用处及实现原理,写时复制的过程,读写锁,分段锁(ConcurrentHashMap中的segment)
- CountDown有了解过吗?CountDown和CycliBarrier的区别是是什么?在使用上有啥区别?
- volatile从指令重排序,内存屏障,聊到总线风暴
- 问了父子线程怎么共享数据
- List是非线程安全的,你如何把他变成线程安全的?
- synchronized可否在运行当前线程时运行其它线程
- 什么叫守护线程,用什么方法实现守护线程?如何停止一个线程?
- 并发编程问的很细。多个线程达到同一个状态然后再一起执行,达到某一个状态之后再继续并发执行,这种怎么实现?
- 如何实现控制线程在某段时间内完成,不完成就撤销
- 读写锁中加读锁后如何避免写线程饿死
- 线程池的一些原理,锁的机制升降级
- 问自旋锁实现的方式是什么 问指针指向的地址是虚拟地址还是物理地址。问页表置换的算法有哪些,以及现如今哪种算法比较高效。问缺页异常置换的过程。如果一个线程修改一个数据,但这时候需要把当前页表置换出去,操作系统如何处理。
- 进程与线程的区别,怎么根据硬件确定你最大创建的线程数(线程池需要考虑)
线程池
- 线程池 什么时候到达最大线程数 到达最大线程后继续提交的表现 用过哪些锁
- 线程池有哪些核心参数?简单描述下线程池的原理?
- 创建线程池的方式?
- 线程池线程的提交方式和优缺点。
- 如果我们在线程池中使用无界队列会造成什么影响呢?
- 多个核心线程去take阻塞队列中线程,谁能拿到了?
- 线程池怎么实现复用线程的
- JDK中偏向锁、自旋锁、轻量级锁、重量级锁的区别?JDK锁自旋的自旋阈值了解吗?如何调整自旋次数?
- 你们系统中下单的时候为什么要用线程池?可以用其他的实现方案吗?
多线程的扩展
- 分布式锁zookeeper的使用场景------ 实现分布式锁的方式----------redis分布式锁和zookeeper分布式锁
- 你会如何处理高并发场景,例如商城秒杀?
- 数据库的并发策略
- 高并发时如何限流
- 场景模拟:假设有一个场景,系统需要某个特定时间内响应用户请求,比如说100ms内完成用户请求,但是在最高峰的时候每单位时间几百万的用户请求,也就是高并发,但我必须要实现系统响应及时,而且高可用,假如你是架构师,你该如何架构这个系统,聊聊你的方案。
- 线程编程题:写两个线程,一个往数组加数据,一个往数组减数据,要求数据不会越界。其实就是生产消费者
- 秒杀系统如何设计?
- 如果处理并发时候出现死锁?