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