-
面试高频问题----2
一、Mysql底层数据结构是什么?
MySQL 默认的存储引擎 InnoDB 采用的是 B+ 作为索引的数据结构,原因有:
-
B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引又存记录的 B 树,B+树的非叶子节点可以存放更多的索引,因此 B+ 树可以比 B 树更「矮胖」,查询底层节点的磁盘 I/O次数会更少。
-
B+ 树有大量的冗余节点(所有非叶子节点都是冗余索引),这些冗余索引让 B+ 树在插入、删除的效率都更高,比如删除根节点的时候,不会像 B 树那样会发生复杂的树的变化;
-
B+ 树叶子节点之间用链表连接了起来,有利于范围查询,而 B 树要实现范围查询,因此只能通过树的遍历来完成范围查询,这会涉及多个节点的磁盘 I/O 操作,范围查询效率不如 B+ 树。
二、线程池参数有哪些?
1.核心线程数:线程池中保持存活的最小线程数,即使它们处于空闲状态也不会被销毁
2.最大线程数:线程池中允许的最大线程数。如果任务量超过核心线程数且队列已满,则线程池会创建线程直到达到这个最大值
3.空闲线程的存活时间:当线程池中的线程数量超过核心线程数时,多余的空闲线程在终止之前等待新任务的最长时间。
4.时间单位:用于指定keepAliveTime参数的时间单位,可以是TimeUnit枚举中的任意值
5.工作队列:用于存储等待执行的任务的队列
6.线程工厂:用于创建新线程的工厂,可以自定义线程的创建方式,比如设置线程名称,线程优先级
三、进程、线程和协程的区别:
进程:1.进程是操作系统分配资源的基本单位
2.每个进程都有自己独立的内存空间和系统资源
3.进程间通信(通过管道、信号、消息队列、共享内存等)通常涉及内核级别操作,相对较慢;
4.进程是操作系统级别的并发实体,通常由操作系统调度和管理
线程:1.线程是操作系统调度的基本单位,但它是进程内的执行流
2.同一进程内的多个线程共享该进程的内存空间和系统资源
3.线程间通信通常比进程间通信更快,因为它们共享相同的内存空间
4.线程切换的开销比进程的开销小,因为操作系统只需要保存和加载线程的上下文,而不需要保存和加载整个进程的上下文
协程:1.协程是一种用户态的轻量级线程,由程序员在代码中显示地管理和调度
2.协程可以在单线程内实现非阻塞或异步I/O操作,从而提高程序的并发性能
3.协程的切换和调度完全由用户程序控制,不需要操作系统接入,因此切换开销小
4.协程实现方式有多种:生成器/异步I/O库和第三方库
四、为什么要三次握手?
1.确认双方的发送和接收能力
2.防止已失效的连接请求报文对后续正常连接的影响
3.同步双方的初始序列号值
4.防止重复连接
五、Mysql如何定位慢查询?
1.开启慢查询日志
2.设置慢查询阈值:默认情况下,超过10s的查询被记录为慢查询
3.指定慢查询日志文件的路径
4.查看慢查询日志
5.分析慢查询日志
6.排序和分析
7.定期轮转和清理慢查询日志
六、优化慢查询语句
1.避免使用SELECT***,只选择需要的字段,而不是使用SELECT
2.避免在WHERE子句中使用函数或运算
3.优化数据类型;使用合适的数据类型可以减少存储空间来提高查询性能
4.分区表:对于非常大的表,可以考虑使用分区来提高查询性能
5.调整缓存大小;调整日志设置如:关闭不必要的日志等
-
相关阅读:
人体神经元与胶质关系图,神经元和神经胶质关系
JAVA线程池
初识Canal以及使用Docker安装配置
在Linux下,转换来自windos文本中的换行符\r\n为\n
Nginx性能优化
京东获得JD商品详情 API 返回值说明
一,DRF入门规范
使用CDC模式改造遗留系统
获取本地缓存数据修改后,本地缓存中的值也修改问题
C/C++ 简单排序方式之选择排序
-
原文地址:https://blog.csdn.net/chenDR333/article/details/139446092