面试笔记
面试笔记
- 线程的关闭有几种方法
- 如何控制程序请求线程数量
- 在程序中如何控制线程信号量
- ReentrantLock 在什么情况下使用?如何使用?
- jdk中的AQS包下面用过哪个类
- 如何保证redis中的数据与数据库中一致
- redis如何保证高可用
- redis两种持久化模式对比
- redis如何实现延迟队列
- mysql索引的数据结构有哪些
- B-Tree数据结构中由哪些部分组成
https://colab.research.google.com/github/alembics/disco-diffusion/blob/main/Disco_Diffusion.ipynb
https://cloud.tencent.com/developer/article/1770201
线程的关闭有几种方法
- 使用取消标志位正常运行完线程并退出(可能因阻塞的程序无法正确执行到标志位从而导致循环的线程程序永远无法关闭)
- 调用Thread类的interrupt方法,发出中断线程执行信号(更多的时候是抛出_InterruptedException异常作为中断响应_)
- 定时运行线程,超时则主动调用interrupt方法中断线程执行
- Future 类的cancel方法来中断线程执行
https://www.jianshu.com/p/613286f4245e
如何控制程序请求线程数量
信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制。一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放许可,每个线程在离开公共资源时都会释放许可。
Semaphore类的实现是基于AQS同步器来实现的,不管是公平模式还是非公平模式都是基于AQS的共享模式,只是在获取许可的操作逻辑有差异。Semaphore的默认模式为非公平模式,我们先看非公平模式的实现。

https://www.cnblogs.com/jiading/articles/12519704.html
https://juejin.cn/post/6844903686267731981
https://blog.csdn.net/hbtj_1216/article/details/109060367
https://cloud.tencent.com/developer/article/1770201
ReentrantLock 在什么情况下使用
多线程访问共享数据资源时使用,与semaphore的实现类似,都包含了sync类,都是基于AQS的队列同步锁机制
如何保证redis中的数据与数据库中一致
https://blog.csdn.net/weixin_44129618/article/details/122358133
想要保证缓存与数据库的双写一致,一共有4种方式,即4种同步策略:
- 先更新缓存,再更新数据库;
- 先更新数据库,再更新缓存;
- 先删除缓存,再更新数据库;
- 先更新数据库,再删除缓存。
redis如何保证高可用
Redis 高可用的手段主要有以下四种:
(1)数据持久化
(2)主从同步(主从复制)
(3)Redis 哨兵模式(Sentinel)
(4)Redis 集群(Cluster)

