MySQL面试题笔记

1.MySQL 中的数据排序是怎么实现的? 1.排序方法:索引排序和文件排序 (filesort) 2.索引排序:如果order by xxx的字段为索引字段,则利用索引进行排序。效率最高,索引默认有序。 3.文件排序 (filesort):内存排序(单路排序和双路排序)和磁盘排序,具体取决于排序数据的大小。其中,内存排序使用单路排序或双路排序,取决于max_length_for_sort_data(默认为4096个字节) 4.双路排序:取row_id(如果有主键,则为主键)和select a,b,c order by xxx的xxx字段放入sort_buffer(排序缓存)中,将排序后的row_id回表查询a,b,c 5.单路排序: 直接把要查的所有字段放入sort_buffer里,排序后直接得到结果集合 6.磁盘排序(归并排序):将数据分为多份文件,单独对文件进行排序,然后合并成一个有序的大文件 2. MySQL 的 Change Buffer 是什么?它有什么作用? 1.ChangeBuffer定义:Change Buffer是InnoDB缓冲当中的一块缓存区,用于暂存二级索引的修改,避免二级索引页修改产生的随机IO 2.ChangeBuffer注意事项:只能用于二级索引,不能用于其他任何索引,包括主键索引和唯一索引都不行。 3.如果ChangeBuffer挂了,更改操作未执行,是否会出现脏数据? 首先,ChangeBuffer也会保存在磁盘空间里面,redo log会记录Change Buffer当中的修改操作,确保数据一致性。 知识拓展1:一级索引和二级索引区别 一级索引(聚簇索引):数据表的主键索引,数据和索引存储在同一B+树的叶子节点中。每个表只能有一个一级索引。 二级索引(非聚簇索引):除主键外的其他索引,叶子节点存储索引列的值和对应的主键值。通过二级索引查询时,需要先通过二级索引获取主键值,再通过主键值查询数据,这个过程称为“回表”。 知识拓展2: MySQL中有哪些常见索引?都有什么区别? 在MySQL中,索引是提高查询效率的关键工具。常见的索引类型包括主键索引、唯一索引、普通索引、全文索引和空间索引。 1. 主键索引(Primary Key Index) 定义:主键索引是一种特殊的唯一索引,用于唯一标识表中的每一行数据。每个表只能有一个主键索引,且主键列的值不能为空。 特点:主键索引的叶子节点存储完整的数据行,因此查询效率高。在InnoDB存储引擎中,主键索引是聚簇索引,数据存储与索引结构合并。 2. 唯一索引(Unique Index) 定义:唯一索引确保索引列的每个值都是唯一的,但允许有空值。与主键索引类似,不同之处在于唯一索引允许列值为NULL。 特点:唯一索引的叶子节点存储索引列的值和对应的主键值。在InnoDB中,唯一索引是非聚簇索引,数据存储与索引结构分开。 3. 普通索引(Index) 定义:普通索引是最基本的索引类型,没有任何限制。索引列的值可以重复,也可以为NULL。 特点:普通索引的叶子节点存储索引列的值和对应的主键值。在InnoDB中,普通索引是非聚簇索引,数据存储与索引结构分开。 4. 全文索引(Fulltext Index) 定义:全文索引用于对文本数据进行全文搜索,适用于MyISAM存储引擎。它允许对文本字段进行复杂的搜索,如查找包含特定单词的记录。 特点:全文索引的叶子节点存储文档的词项信息。在MyISAM中,全文索引是非聚簇索引,数据存储与索引结构分开。 5. 空间索引(Spatial Index) 定义:空间索引用于对地理空间数据进行索引,支持空间数据类型的快速查询。它适用于存储地理位置、地图等空间数据的表。 特点:空间索引的叶子节点存储空间数据的索引信息。在MyISAM中,空间索引是非聚簇索引,数据存储与索引结构分开。 总结: 主键索引:用于唯一标识每一行数据,值不能为空。 唯一索引:确保索引列的值唯一,但允许有空值。 普通索引:最基本的索引类型,允许重复和空值。 全文索引:用于对文本数据进行全文搜索,适用于MyISAM存储引擎。 空间索引:用于对地理空间数据进行索引,支持空间数据类型的快速查询。 3. 详细描述一条 SQL 语句在 MySQL 中的执行过程。 连接器判断用户是否成功建立连接,数据库连接的权限校验 连接器会查询缓存,key 是 SQL 语句,value 是查询结果。如果命中,直接返回查询结果。(MySQL 8.0之后,就移除这个功能了)。 分析器分析SQL语法和词法是否有误 优化器生成SQL的执行计划,确定使用的索引和调整where的执行顺序(包括连表顺序) 执行器判断当前用户是否有权限查询该表,然后执行该SQL语句 ...

February 19, 2025 · 9 min · SwimmingLiu

Java面试题-随手记

== 和 equals 区别 == 基本类型(int, long, float, char, boolean) 值比较, 引用类型(String,List) 进行地址比较 equals 默认就是 == ,但是部分引用类型(String,List)重写了该方法,进行值比较 get 和 post 区别 特性 GET POST 目的 获取资源,查询数据 提交数据,创建或更新资源 请求数据方式 参数通过 URL 查询字符串传递 数据通过请求体传递 数据暴露 数据暴露在 URL 中,较不安全 数据存储在请求体中,相对安全 数据大小限制 URL 长度有限制(约 2048 个字符) 没有数据大小限制 适用场景 获取数据,查询,展示资源 提交表单,上传文件,修改资源,发送敏感数据等 SpringMVC中@ReponseBody、@PathVariable、@RequestParameters在什么情况下使用? @ReponseBody 用于接受请求体数据,一般用于POST请求 @PathVariable 用于接受路径参数,一般用户接受 id @RequestParameters 用于接受请求参数,一般用于GET请求 JVM堆的结构、GC介绍和作用 JVM堆结构的参考文章 、 GC垃圾回收过程 区域 主要用途 特点 新生代(Young Generation) 存储新创建的对象,快速垃圾回收 包含 Eden 区和两个 Survivor 区,采用复制算法进行回收 老年代(Old Generation) 存储长期存活的对象 回收频率较低,垃圾回收较耗时 永久代(Permanent Generation) (jdk 1.7) 存储类的元数据、方法字节码等 在 jdk 1.8 被 Metaspace 替代 元空间(jdk 1.8) 存储类的元数据 不再属于堆,使用本地内存,大小由系统限制 GC 是垃圾回收器, 作用是自动内存管理和避免内存泄漏 ...

December 27, 2024 · 3 min · SwimmingLiu