
八股王的冒险
文章平均质量分 81
八股王
要成为八股王的男人
双非硕士 准备面试
展开
-
Redis的数据结构
我们知道Redis是数据库,数据库里必然有一下数据结构,这些数据结构可以理解为是一种类型。例如Java的基本数据类型有int、short、long等等。Redis里也有常见的五种数据结构分别为String、Hash、List、Set、Zset。原创 2024-06-10 13:27:35 · 814 阅读 · 0 评论 -
什么是Redis?
我们之前学过数据库,知道MySQL是关系型数据库。今天我们要认识的Redis是非关系型数据库,它是基于内存的一种数据库,因此它的速度和效率远比MySQL要快。原创 2024-06-05 16:48:37 · 902 阅读 · 0 评论 -
MySQL 日志:undo log、redo log、binlog 有什么用?
面试时会被问到事物的特性,分别是是原子性、一致性、隔离性和持久性。在实现原子性的时候会用到undo log这个日志。实现持久性时会用到redo log。用于数据备份和主从复制时会用到binlog。undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;原创 2024-06-04 20:02:07 · 661 阅读 · 0 评论 -
MySQL是怎么加锁的?
面试主要考的是加行级锁,行级锁主要分为记录锁、间隙锁、临键锁。如果理解这三个锁呢?简单理解就是记录锁单个、间隙锁范围(左开右开)、临键锁就是记录锁加间隙锁(左开右闭)。普通的 select 语句是不会对记录加锁的(除了串行化隔离级别),因为它属于快照读,是通过 MVCC(多版本并发控制)实现的。update 和 delete 操作都会加行级锁,且锁的类型都是独占锁(X型锁)。当查询的记录是「存在」的,在索引树上定位到这一条记录后,将该记录的索引中的 next-key lock 会退化成「记录锁」。原创 2024-06-03 21:52:59 · 986 阅读 · 0 评论 -
MySQL有哪些锁?
在学校里学数据库的内容,我们会发现一个问题,就是老师不会讲到数据库的锁这一块来,但是我们面试的时候会被问到关于锁的知识点,所以我们今天开始学习关于锁的知识。首先Mysql锁有三种,分别是全局锁、表级锁和行级锁。原创 2024-06-03 21:28:29 · 679 阅读 · 0 评论 -
MySQL 可重复读隔离级别,完全解决幻读了吗?
Mysql可重复读隔离级别,完全解决幻读了吗?1、针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。原创 2024-06-02 21:01:51 · 1506 阅读 · 0 评论 -
索引失效有哪些?
在工作中,如果想要提高查询效率都会去在字段上建立索引。但是索引并不是万能的,有的索引会失效,这个失效的意思是无法发挥他本来的作用。所以我们看一下哪些情况下会发生索引失效现象。大概有六种情况分别是1.对索引使用左或者左右模糊匹配,2.对索引使用函数,3.对索引进行表达式计算,4.对索引隐式类型转换,5.联合索引非最左匹配,6.where子句中的or。当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx%这两种方式都会造成索引失效;原创 2024-06-02 20:35:38 · 644 阅读 · 0 评论 -
MySQL一行数据是怎么存储的?
我们都知道数据库是怎么用的,都知道数据库的数据是存在数据库里,那我们知道数据库里的一行数据是存在哪个地方的吗?今天我们来探讨一下。先给出结论MySQL 的 Compact 行格式中会用「NULL值列表」来标记值为 NULL 的列,NULL 值并不会存储在行格式中的真实数据部分。NULL值列表会占用 1 字节空间,当表中所有字段都定义成 NOT NULL,行格式中就不会有 NULL值列表,这样可节省 1 字节的空间。原创 2024-05-23 22:15:03 · 893 阅读 · 0 评论 -
什么时候需要 / 不需要创建索引?
我们知道索引可以加快数据库查询数据的效率,可是什么时候能加索引什么时候不能加索引呢?索引有什么缺点呢?我往下看。提示:以下是本篇文章正文内容,下面案例可供参考。原创 2024-05-28 20:29:26 · 202 阅读 · 0 评论 -
什么是索引?
大家都看过书,知道如果想要快速定位到我们想看的知识点,就必须要通过目录来查找。所以索引就是数据库里的“目录”,同样的想要在数据库里快速查询一个记录,就必须要通过索引来进行查找。这就是我们对索引的一个通俗理解。同样的索引也分好几种,具体的可以按数据结构分类、物理存储分类、字段特性分类和字段个数分类。原创 2024-05-26 22:20:27 · 332 阅读 · 0 评论 -
执行一条 select 语句,期间发生了什么?
创建连接器:首先要客户端要创建一个连接器,用来连接mysql(mysql分为两层,分别是server层和存储引擎)。查询缓存:连接器先查询缓存,如果缓存里有记录即直接得到结果返回给连接器。注意:mysql8里移除了查询缓存这一步解析器:这时sql语句就到了解析器这一步了。在这一步解析器先通过词法分析(词法分析用于查找到sql关键词),词法分析通过后sql语句进入语法分析(语法分析中用于检查sql语法是否正确)。最后构建语法树。执行sql语句。原创 2024-05-20 22:05:13 · 320 阅读 · 0 评论 -
什么是数据库的事务?
事务这个词在面试的过程中被问到的频率十分的高,我们简单的理解一下什么是事务,我们可以把多条SQL命令用于处理一个问题,理解成一个事物。例如:我去银行转账,首先得要用一条查询语句去查询自己的余额,接下来得用修改语句去扣除自己余额上面的帐,再用一条查询语句查到被转账人的余额,最后用修改语句把被转账人的余额增加。这一整个过程就是一个转账事务。如果中间的某个环节发生了错误,就会导致回滚现象发生。原创 2024-05-19 18:29:11 · 787 阅读 · 0 评论 -
为什么 MySQL 采用 B+ 树作为索引?
这个地方我们简单说一下索引的什么数据结构才是最好的,直接给出结论:1.能在尽可能少的磁盘的I/O操作中完成查询工作。2.要能高效的查询某一个记录,也要能高效地执行范围查找。B+其实就是B树的升级版,B树本质上是一个二叉树,具体而言就是一个平衡二叉树。而它们也有区别。B+的叶子节点(最底部的节点)才会存放实际数据(索引+记录),非叶子节点只会存放索引;所有的索引都会在叶子结点出现,叶子结点构成一个有序表;非叶子结点的索引也会同时出现在子节点中,并且是在子节点中索引的最大处或最小处;原创 2024-05-28 22:03:59 · 967 阅读 · 0 评论 -
为什么索引能让数据库查询性能变快?
索引能够使数据库的查询性能变快,这是大部分人都知道的。但是,为什么能索引使数据库的查询性能变快?最简单的理解就是我们看一本书,如何快速定位到我们想要看到的知识点呢?对了,那就是书的目录,通过查询书的目录可以快速的找到知识点所在的页面。为什么能通过目录就能提高查询的速度呢?我们往下继续看。数据存储在磁盘( SSD 跟 CPU 性能也不在一个量级),而磁盘处理数据很慢;提高磁盘性能主要通过减少 I/O 次数,以及单次 I/O 有效数据量;原创 2024-05-19 16:54:41 · 472 阅读 · 0 评论