Java面试题高级
2021-04-29 11:44:33 1 举报
AI智能生成
登录查看完整内容
Java面试题高级
作者其他创作
大纲/内容
Java面试题高级
1.前提知识+要求
2.Java基础
3.JUC多线程及并发包
1.谈谈你对volatile的理解
1.volatile是Java虚拟机提供的轻量级的同步机制
1.1保证可见性
1.2不保证原子性
1.3禁止指令重排
2.JMM你谈谈
2.1可见性
2.2原子性
2.3VolatileDemo代码演示可见性+原子性代码
2.4有序性
重排1
重排2
案例
禁止指令重排小总结(了解)
3.你在哪些地方用到过volatile?
3.1 单例模式DCL代码
3.2代理模式volatile分析
2.CAS你知道吗
1.比较并交换
CASDemo
atomicInteger.getAndIncrement();
UnSafe
CAS是什么
unSafe.getAndIncrement
底层汇编
简单版小总结
3.CAS缺点
循环时间长开销很大
只能保证一个共享变量的原子性
引出来ABA问题???
3.原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗
ABA问题的产生
原子引用
AtomicReferenceDemo
时间戳原子引用
AtomicStampedReference
ABADemo
解决方案1
ContainerNotSafeDemo
限制不可以使用vector和Collections工具类解决方案2
List线程copyOnWriteArrayList
set线程CopyOnwriteHashSet
map线程ConcurrentHashMap
5.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁
公平锁和非公平锁
是什么
两者的区别
题外话
可重入锁(又名递归锁)
ReentrantLock/synchronized就是一个典型的可重入锁
可重入锁最大的作用就是避免死锁
ReenterLockDemo
参考1
参考2
自旋锁
SpinLockDemo
独占锁(写)/共享锁(读)/互斥锁
ReadWriteLockDemo
读写锁
6.CountDownLatch/CyclicBarrier/Semaphore使用过吗?
CountDownLatch
让一些线程阻塞直到另外一些完成后才被唤醒
CountDownLatchDemo
关门案例
枚举的使用
秦灭六国
CyclicBarrier
CyclicBarrierDemo
集齐7颗龙珠就能召唤神龙
代码
Semaphore
SemaphoreDemo
抢车位
7.阻塞队列知道吗?
队列+阻塞队列
为什么用?有什么好处?
BlockingQueue的核心方法
架构梳理+种类分析
架构介绍
种类分析
ArrayBlockingQueue: 由数组结构组成的有界阻塞队列.
LinkedBlockingDeque: 由链表结构组成的有界(但大小默认值IntegerMAX_VALUE)阻塞队列.
PriorityBlockingQueue:支持优先级排序的无界阻塞队列.
DelayQueue: 使用优先级队列实现的延迟无界阻塞队列.
理论
SynchronousQueueDemo
LinkedTransferQueue:由链表结构组成的无界阻塞队列.
LinkedBlockingDeque:由了解结构组成的双向阻塞队列.
用在哪里
生产者消费者模式
传统版
ProdConsumerTraditionDemo
阻塞队列版
ProdConsumerBlockQueueDemo
线程池
消息中间件
8.线程池用过吗?ThreadPoolExecutor谈谈你的理解?
线程池如何使用?
架构实现
编码实现
了解
Executors.newCachedThreadPool();
java8新出
Executors.newWorkStealingPool(int);
重点
Executors.newFixedThreadPool(int)
Executors.newSingleThreadExecutor()
一个任务一个线程执行的任务场景
Executors.newCachedThreadPool()
适用:执行很多短期异步的小程序或者负载较轻的服务器
ThreadPoolExecutor
线程池几个重要参数介绍?
7大参数
1.corePoolSize:线程池中的常驻核心线程数
4.unit:keepAliveTime的单位
说说线程池的底层工作原理?
9.线程池用过吗?生产上你是如何设置合理参数
线程池的拒绝策略请你谈谈
JDK内置的拒绝策略
AbortPolicy(默认):直接抛出RejectedException异常阻止系统正常运行
CallerRunPolicy:\"调用者运行\
以上内置策略均实现了RejectExecutionHandler接口
Executors中JDK给你提供了为什么不用?
Case
合理配置线程池你是如何考虑的?
CPU密集型
IO密集型
1
2
10.死锁编码及定位分析
产生死锁的主要原因
系统资源不足
进程运行推进的顺序不合适
资源分配不当
解决
jps命令定位进程编号
jstack找到死锁查看
4.JVM+GC解析
前提复习
JVM内存结构
jVM体系概述
Java8以后的JVM
GC作用域
常见的垃圾回收算法
引用计数
复制
标记清除
标记整理
题目1
题目2
其他
5.消息中间件
0 条评论
回复 删除
下一页