当前位置:   article > 正文

面试高频问题----2

面试高频问题----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.调整缓存大小;调整日志设置如:关闭不必要的日志等
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/677073
推荐阅读
相关标签
  

闽ICP备14008679号