9.16日面试题
-
请你说说MySQL索引,以及它们的好处和坏处?
- 首先理解什么是索引
索引是一种能够让mysql快速查找到数据的数据结构,类似于书的目录,帮助快速定位数据 - 在mysql中使用innodb引擎使用的索引结构式B+tree,相较于二叉树,更扁平矮宽,适合存储在磁盘中
- 索引的数据也需要存储在磁盘中,需要动态更新,增加了存储成本。
- 首先理解什么是索引
-
请说说你对多线程的理解?
- 线程是什么
线程是程序执行最小的单元,一个进程下面会有多个线程 - 线程之间共享内存空间和系统资源,但每个进程又有自己的栈空间,计数器,局部变量
- 多线程优点
节省程序相应时间,提高CPU使用效率,创建和切换开销小,数据利用率高,简化程序结构
- 线程是什么
-
说说你对线程安全的理解?
- 线程安全是什么?
在多线程环境下,线程没有按照我们预期的想法运行,导致操作共享的变量异常性 - 线程安全有三种方案
原子类:通过CAS机制实现更新共享变量
volatile关键字:一旦修改变量,则立刻刷新到共享内存中,且其他内存核心副本中原数据失效,需要重新读取,
Java锁:syn+lock锁
- 线程安全是什么?
-
CAS(比较并交换)
- CAS是什么?
并发中避免共享变量异常运用的一种技术
三个操作数:内存位置,预期原值,和更新值 - 原理:
执行CAS操作时,将预期原值和内存位置中的值比较,如果匹配则更新,不匹配则不会操作
多个线程执行CAS操作,只会有一个成功
- CAS是什么?
-
死锁的原因?
- 死锁是什么?
两个线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放资源,那么就会产生死锁 - 死锁怎么解决?
互斥使用:当资源被一个线程占用的时候,不允许其他线程使用
不可抢占:资源请求者不能强制从资源占有者手中夺取资源,只能由资源占有者主动释放
请求和保持:当资源请求者请求别的资源同时要保持对原有资源的占有
避免循环等待:打破P1占有P2需要的资源,P3占有P1需要的资源,P2占有P3需要的资源这样的循环
- 死锁是什么?
-
线程间的通信方式
- 管道、命名管道、信号、消息队列、共享内存、内存映射、信号量、Socket

浙公网安备 33010602011771号