2024最新Java面试题及答案有史以来见过的最全面试题
获取链接:《2024最新Java面试题及答案(带完整目录)》
更多技术书籍:技术书籍分享,前端、后端、大数据、AI、人工智能...
4.1.9.8.
可重入锁(递归锁)
.................................................................................69
4.1.9.9.
公平锁与非公平锁
...........................................................................................70
公平锁(
Fair
)
.................................................................................................................70
非公平锁(
Nonfair
)
.........................................................................................70
4.1.9.10.
ReadWriteLock
读写锁
...............................................................................................70
读锁
........................................................................................................................70
写锁
........................................................................................................................70
4.1.9.11. 共享锁和独占锁 ......................................................................................70
独占锁
..............................................................................................................................70
共享锁
......................................................................................................................70
4.1.9.12. 重量级锁(Mutex Lock
)
............................................................................71
4.1.9.13. 轻量级锁.....................................................................................................................71
锁升级
.....................................................................................................................................71
4.1.9.14. 偏向锁................................................................................................................71
4.1.9.15. 分段锁.........................................................................................................................71
4.1.9.16. 锁优化........................................................................................................................71
减少锁持有时间
...................................................................................................................72
减小锁粒度
..............................................................................................................................72
锁分离
.......................................................................................................................................72
锁粗化
..........................................................................................................................................72
锁消除
......................................................................................................................................72
4.1.10.
线程基本方法
..........................................................................................72
4.1.10.1.线程等待(wait
)
.................................................................................73
4.1.10.2.
线程睡眠(
sleep
)
.............................................................................................................................73
4.1.10.3.
线程让步(
yield
)
..............................................................................................................................73
4.1.10.4. 线程中断(interrupt
)
.......................................................................................73
4.1.10.5.
Join
等待其他线程终止
..............................................................................................74
4.1.10.6. 为什么要用 join()
方法?
..............................................................................74
4.1.10.7. 线程唤醒(notify
)
...........................................................................................74
4.1.10.8. 其他方法:...........................................................................................................74
4.1.11.
线程上下文切换
............................................................................................................75
4.1.11.1. 进程...........................................................................................................................75
4.1.11.2. 上下文................................................................................................................75
4.1.11.3. 寄存器...................................................................................................................75
4.1.11.4. 程序计数器..........................................................................................................75
4.1.11.5.
PCB-
“切换桢”
.................................................................................................................................75
4.1.11.6. 上下文切换的活动: ............................................................................................76
4.1.11.7. 引起线程上下文切换的原因 ....................................................................76
4.1.12.
同步锁与死锁
........................................................................................76
4.1.12.1. 同步锁..................................................................................................................76
4.1.12.2. 死锁.................................................................................................76
4.1.13.
线程池原理
..................................................................................................76
4.1.13.1. 线程复用............................................................................................................76
4.1.13.2. 线程池的组成.......................................................................................76
4.1.13.3. 拒绝策略...............................................................................................................78
4.1.13.4. Java 线程池工作过程 .....................................................................................78
4.1.14. JAVA
阻塞队列原理
.................................................................................79
4.1.14.1. 阻塞队列的主要方法 .......................................................................................80
插入操作:
.....................................................................................................................80
获取数据操作:
........................................................................................................81
4.1.14.2.
Java 中的阻塞队列
..............................................................................................81
4.1.14.3. ArrayBlockingQueue(公平、非公平)........................................................82
4.1.14.4. LinkedBlockingQueue(两个独立锁提高并发) ....................................................82
4.1.14.5. PriorityBlockingQueue(compareTo 排序实现优先)............................................82
4.1.14.6. DelayQueue(缓存失效、定时任务 )............................................................82
4.1.14.7. SynchronousQueue(不存储数据、可用于传递数据)..............................................83
4.1.14.8.LinkedTransferQueue..........................................................................83
4.1.14.9. LinkedBlockingDeque........................................................................................83
4.1.15. CyclicBarrier
、
CountDownLatch
、
Semaphore
的法
........................................................84
4.1.15.1. CountDownLatch(线程计数器 )....................................................................84
4.1.15.2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行)............................84
4.1.15.3. Semaphore(信号量-控制同时访问的线程个数)........................................................85
4.1.16. volatile
关键字的作用(变量可见性、禁止重排序)
.........................................87
变量可见性
....................................................................................................................87
禁止重排序
.........................................................................................................................87
比
sychronized
更轻量级的同步锁
...........................................................................................87
适用场景
............................................................................................................................87
4.1.17.
如何在两个线程之间共享数据
.......................................................................88
将数据抽象成一个类,并将数据的操作作为这个类的方法
...............................................88
Runnable
对象作为一个类的内部类
......................................................................89
4.1.18. ThreadLocal
作用(
线程本地存储
)
........................................................90
ThreadLocalMap
(线程的一个属性)
..........................................................................90
使用场景
............................................................................................................91
4.1.19. synchronized
和
ReentrantLock
的区别
.........................................................91
4.1.19.1. 两者的共同点:.....................................................................................91
4.1.19.2. 两者的不同点:..........................................................................................92
4.1.20. ConcurrentHashMap
并发
..............................................................................92
4.1.20.1. 减小锁粒度...................................................................................................92
4.1.20.2. ConcurrentHashMap 分段锁..................................................................................92
ConcurrentHashMap
是由
Segment
数组结构和
HashEntry
数组结构组成
....................93
4.1.21. Java
中用到的线程调度
.............................................................................93
4.1.21.1. 抢占式调度:................................................................................................................93
4.1.21.2. 协同式调度:.................................................................................................................93
4.1.21.3. JVM 的线程调度实现(抢占式调度) .......................................................................94
4.1.21.4. 线程让出 cpu 的情况: ...................................................................................94
4.1.22.
进程调度算法
..............................................................................................94
4.1.22.1. 优先调度算法...............................................................................................................94
4.1.22.2. 高优先权优先调度算法 ..............................................................................................95
4.1.22.3. 基于时间片的轮转调度算法 ................................................................................96
4.1.23.
什么是
CAS
(
比较并交换-乐观锁机制-锁自旋
)
...................................................96
4.1.23.1. 概念及特性.............................................................................................................96
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋)............................................................97
4.1.23.3. ABA 问题...................................................................................................98
4.1.24.
什么是
AQS
(
抽象的队列同步器
)
..........................................................................98
Exclusive
独占资源
-ReentrantLock
.......................................................................................99
Share
共享资源
-Semaphore/CountDownLatch
.........................................................................99
同步器的实现是
ABS
核心(
state
资源状态计数)
.............................................................100
ReentrantReadWriteLock
实现独占和共享两种方式
............................................100
5. JAVA
基础
...............................................................................................................................101
5.1.1.
JAVA
异常分类及处理
..............................................................................................................101
5.1.1.1.
概念
.........................................................................................................................101
5.1.1.2.
异常分类
..........................................................................................................101
Error
..........................................................................................................................101
Exception
(
RuntimeException、CheckedException
)
.........................................................101
5.1.1.3. 异常的处理方式 ...............................................................................102
遇到问题不进行具体处理,而是继续抛给调用者 (
throw,throws
)
.........................................102
try catch
捕获异常针对性处理方式
..........................................................................................102
5.1.1.4. Throw 和 throws 的区别: ......................................................................102