高并发相关问题
锁
乐观锁和悲观锁的本质区别是什么?
CAS有什么缺点?
发生死锁的条件和举一个死锁的例子?
什么是自旋锁?自旋的好处和后果是什么?怎么进行自旋?
怎么解决死锁问题和定位代码?
原子类是怎么利用CAS保证线程安全的?
AtomicInteger在高并发下性能不好怎么解决?
原子类和volatile有什么异同?
在多线程下为什么不能用volatile修饰i++
java 8中Adder和Accumulate有什么区别?
synchronized加锁的原理是什么?
synchronized和lock怎么选择?
lock有哪些方法,分别有什么用?
读写锁ReadWriteLock获取锁有哪些规则?
AQS的内部原理是什么?
AQS在CountDownLatch等类中的应用原理是什么?
为什么需要AQS?AQS的作用和重要性是什么?
ReentrantLock的加锁原理?
ReadWriteLock的加锁原理是什么?
Stream怎么使用,是怎么提高遍历集合效率的?
集合
hashmap的底层原理是什么?
ArrayList的底层原理是什么?
LinkedList的底层原理是什么?
有没有线程安全的list?
CopyOnWriteArrayList有什么特点?
Hashtable的底层原理是什么?
ConcurrentHashMap的底层原理是什么?
队列
什么是阻塞队列?包含哪些常见的方法?
阻塞队列是怎么实现阻塞的?
有哪几种常见的阻塞队列?
阻塞队列和非阻塞队列的并发安全原理是什么?
线程
Callable和Runnable有什么不同?
Future是什么?有哪些使用的注意点?
什么是CompleteFuture?
Condition、Object.wait()和notify的关系?
线程的状态有哪些?是怎么进行切换的?
哪些操作会导致上下文切换?怎么优化线程上下文切换?
线程池的参数有哪些?
线程池的运行机制和有哪些策略?
常见的线程池有什么?有什么区别?
线程池的阻塞队列有哪些?有什么区别?
为什么不应该自动创建线程池?
怎么通过CPU核心数来创建线程池?
怎么正确关闭线程池?
线程池是怎么实现线程复用的?
怎么设置线程池大小?
ThreadLocal适用于哪些场景?
ThreadLocal的底层实现原理是什么?
为什么会导致内存泄漏?怎么解决内存泄漏问题?
volatile
什么java内存模型?
什么是指令重排序?为什么要重排序?
happen-before的规制是什么?
单例模式的双重检查锁模式为什么必须加volatile?
volatile and Unsafe怎么实现CAS操作?
final
final的三种用法是什么?
为什么加入final依旧无法拥有不可变性?
为什么String被设计为不可变?