最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
还有更多学习笔记面试资料也分享如下:
3. MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更
查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空. 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效果.对于读远多于写的表可以考虑使用查询缓存.8.0版本的查询缓存功能被删了 ( ̄. ̄)。
-
InnoDB支持事务, MyISAM不支持;
-
InnoDB支持行级锁, MyISAM支持表级锁;
-
InnoDB支持多版本并发控制(MVVC), MyISAM不支持;
-
InnoDB支持外键, MyISAM不支持;
-
MyISAM支持全文索引, InnoDB部分版本不支持(但可以使用Sphinx插件);
通过整库备份+binlog进行恢复. 前提是要有定期整库备份且保存了binlog日志
-
读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到.
-
读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到.
-
可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当
然在可重复读隔离级别下, 未提交变更对其他事务也是不可见的.
- 串行化(S): 对于同一行记录, 读写都会加锁. 当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行
尽量使用主键查询:
- 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗.MySQL5.6之后引入了索引下推优化, 通过适当的使用联合索引, 减少回表判断的消耗.若频繁查询某一列数据, 可以考虑利用覆盖索引避免回表.联合索引将高频字段放在最左边。
-
第一范式: 属性不可再分。
-
第二范式: 在一范式的基础上, 要求数据库表中的每个实例或行必须可以被惟一地区分. 通常需要为表加上一个列, 以存储各个实例的惟一标识. 这个惟一属性列被称为主关键字或主键。
-
第三范式: 在二范式的基础上, 要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
所以第三范式具有如下特征:1). 每一列只有一个值. 2). 每一行都能区分. 3). 每一个表都不包含其他表已经包含的非主关键字信息。
数据量过大的情况下, limit offset
分页会由于扫描数据太多而越往后查询越慢. 可以配合当前页最后一条ID进行查询, SELECT * FROM T WHERE id > #{ID} LIMIT #{LIMIT}
. 当然, 这种情况下ID必须是有序的, 这也是有序ID的好处之一。
分库分表. 由于历史订单使用率并不高, 高频的可能只是近期订单, 因此, 将订单表按照时间进行拆分, 根据数据量的大小考虑按月分表或按年分表. 订单ID最好包含时间(如根据雪花算法生成), 此时既能根据订单ID直接获取到订单记录, 也能按照时间进行查询。
==========================================================================
1. 一张表里面有 ID 自增主键当 当insert 了17 条记录之后 ,删除了第 15,16,17 条记录 , 再把Mysql 重启 ,再insert 一条记录,这条记录的 ID 是18还是15 ?
- 如果表的类型是MyISAM,那么是18。因为MyISAM表会把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失。
- Mysql 数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多线程 SQL 服务器、不同的后端、广泛的应用程序编程接口和管理工具。
HEAP 表存在于内存中,用于临时高速存储。
-
BLOB 或 TEXT 字段是不允许的
-
只能使用比较运算符=,<,>,=>,= <
-
HEAP 表不支持 AUTO_INCREMENT
-
索引不可为 NULL
Mysql 服务器的默认端口是 3306。
-
Mysql 是开源软件,随时可用,无需付费。
-
Mysql 是便携式的
-
带有命令提示符的 GUI。
-
使用 Mysql 查询浏览器支持管理
以下是 FLOAT 和 DOUBLE 的区别:
-
浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节。
-
浮点数存储在 DOUBLE 中,精度为 18 位,有八个字节。
CHAR_LENGTH 是字符数,而 LENGTH 是字节数。Latin 字符的这两个数据是相同的,但是对于 Unicode 和其他编码,它们是不同的。
ENUM 是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用。
Create table size(name ENUM('Smail,'Medium','Large');
REGEXP 是模式匹配,其中匹配模式在搜索值的任何位置。
以下是 CHAR 和 VARCHAR 的区别:
-
CHAR 和 VARCHAR 类型在存储和检索方面有所不同
-
CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255当 CHAR 值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
字符串类型是:
-
SET
-
BLOB
-
ENUM
-
CHAR
-
TEXT
-
VARCHAR
SELECT VERSION();
用于获取当前 Mysql 的版本。
存储引擎称为表类型,数据使用各种技术存储在文件中。
技术涉及:
-
Storage mechanism
-
Locking levels
-
Indexing
-
Capabilities and functions.
以下是 Mysql 中可用的驱动程序:
-
PHP 驱动程序
-
JDBC 驱动程序
-
ODBC 驱动程序
-
CWRAPPER
-
PYTHON 驱动程序
-
PERL 驱动程序
-
RUBY 驱动程序
-
CAP11PHP 驱动程序
-
Ado.net5.mxj
15.TIMESTAMP 在 在 UPDATE P CURRENT_TIMESTAMP 数据类型上做什么?
创建表时 TIMESTAMP 列用 Zero 更新。只要表中的其他字段发生更改,UPDATE
CURRENT_TIMESTAMP 修饰符就将时间戳字段更新为当前时间。
表格的每一行都由主键唯一标识,一个表只有一个主键。主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。
17.如何使用 Unix l shell 登录 Mysql ?
我们可以通过以下命令登录:
[mysql dir]/bin/mysql -h hostname -u -p
它用来压缩 MyISAM 表,这减少了磁盘或内存使用。
Heal 表的大小可通过称为 max_heap_table_size 的 Mysql 配置变量来控制。
20. MyISAM Static 和 和 MyISAM Dynamic 有什么区别?
在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT,BLOB等字段,以适应不同长度的数据类型。MyISAM Static 在受损情况下更容易恢复。
federated 表,允许访问位于其他服务器数据库上的表。
22.如果一个表有一列定义为 TIMESTAMP ,将发生什么?
每当行被更改时,时间戳字段将获取当前时间戳。
23. 列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情况?
它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。
LAST_INSERT_ID
将返回由 Auto_increment
分配的最后一个值,并且不需要指定表名
称。
索引是通过以下方式为表格定义的:
sqlqSHOW INDEX FROM <tablename>;
%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。
27.如何在 x Unix 和 和 l Mysql 时间戳之间进行转换?
UNIX_TIMESTAMP
是从 Mysql 时间戳转换为 Unix 时间戳的命令
FROM_UNIXTIME
是从 Unix 时间戳转换为 Mysql 时间戳的命令
在 SELECT 语句的列比较中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR 或LIKE 运算符。
行数可以通过以下代码获得:
SELECT COUNT(user_id)FROM users;
不区分
SELECT VERSION(), CURRENT_DATE;
SeLect version(), current_date;
seleCt vErSiOn(), current_DATE;
所有这些例子都是一样的,Mysql 不区分大小写。
LIKE 和 REGEXP 运算符用于表示^和%。
SELECT * FROM employee WHERE emp_name REGEXP "^b";
SELECT * FROM employee WHERE emp_name LIKE "%b";
BLOB 是一个二进制对象,可以容纳可变数量的数据。有四种类型的 BLOB
-
TINYBLOB
-
BLOB
-
MEDIUMBLOB
-
LONGBLOB
它们只能在所能容纳价值的最大长度上有所不同。TEXT 是一个不区分大小写的 BLOB。四种 TEXT 类型
-
TINYTEXT
-
TEXT
-
MEDIUMTEXT
-
LONGTEXT
它们对应于四种 BLOB 类型,并具有相同的最大长度和存储要求。BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写,对TEXT 值不区分大小写。
33.mysql_fetch_array 和 和 mysql_fetch_object 的区别是什么?
以下是 mysql_fetch_array 和 mysql_fetch_object 的区别:
-
mysql_fetch_array()
- 将结果行作为关联数组或来自数据库的常规数组返回。 -
mysql_fetch_object
- 从数据库返回结果行作为对象。
以下命令用于在批处理模式下运行:
mysql;
mysql mysql.out
35.MyISAM 表格将在哪里存储,并且还提供其存储格式?
每个 MyISAM 表格以三种格式存储在磁盘上:
-
“.frm”文件存储表定义
-
数据文件具有“.MYD”(MYData)扩展名
-
索引文件具有“.MYI”(MYIndex)扩展名
共有 5 种类型的表格:
-
MyISAM
-
Heap
-
Merge
-
INNODB
-
ISAM
MyISAM 是 Mysql 的默认存储引擎。
ISAM 简称为索引顺序访问方法。它是由 IBM 开发的,用于在磁带等辅助存储系统上存储和检索数据。
DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。
SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
如果想输入字符为十六进制数字,可以输入带有单引号的十六进制数字和前缀(X),或者只用(Ox)前缀输入十六进制数字。如果表达式上下文是字符串,则十六进制数字串将自动转换为字符串。
在 Mysql 中,使用以下代码查询显示前 50 行:
SELECT*FROM xx LIMIT 0,50;
任何标准表最多可以创建 16 个索引列。
42.NOW()和 CURRENT_DATE ()有什么区别?
NOW()命令用于显示当前年份,月份,日期,小时,分钟和秒。
CURRENT_DATE()仅显示当前年份,月份和日期。
以下对象是使用 CREATE 语句创建的:
-
DATABASE
-
EVENT
-
FUNCTION
-
INDEX
-
PROCEDURE
-
TABLE
-
TRIGGER
-
USER
-
VIEW
-
ACL(访问控制列表)是与对象关联的权限列表。这个列表是 Mysql 服务器安全模型的基础,它有助于排除用户无法连接的问题。
-
Mysql 将 ACL(也称为授权表)缓存在内存中。当用户尝试认证或运行命令时,Mysql 会按照预定的顺序检查 ACL 的认证信息和权限。
服务器突然断电导致数据文件损坏。强制关机,没有先关闭 mysql 服务等。
Mysql 服务器通过权限表来控制用户对数据库的访问,权限表存放在 mysql 数据库里,由mysql_install_db 脚本初始化。这些权限表分别 user,db,table_priv,columns_priv和 host。
==========================================================================
-
表级锁: 开销小, 加锁快; 不会出现死锁; 锁定粒度大, 发生锁冲突的概率最高, 并发度最低。
-
行级锁: 开销大, 加锁慢; 会出现死锁; 锁定粒度最小, 发生锁冲突的概率最低, 并发度也最高。
-
页面锁: 开销和加锁时间界于表锁和行锁之间; 会出现死锁; 锁定粒度界于表锁和行锁之间, 并发度一般。
- 共有 5 种类型的表格: 1、MyISAM2、Heap 3、Merge 4、INNODB 5、MISAM
3.简述在MySQL 数据库中 MyISAM 和InnoDB 的区别
MyISAM:
- 不支持事务, 但是每次查询都是原子的; 支持表级锁, 即每次操作是对整个表加锁; 存储表的总行数;一个 MYISAM 表有三个文件: 索引文件、表结构文件、数据文件;采用菲聚集索引, 索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致, 但是辅索引不用保证唯一性。
InnoDb:
- 支持 ACID 的事务, 支持事务的四种隔离级别; 支持行级锁及外键约束: 因此可以支持写并发; 不存储总行数:一个 InnoDb 引擎存储在一个文件空间( 共享表空间, 表大小不受操作系统控制,一个表可能分布在多个文件里), 也有可能为多个( 设置为独立表空, 表大小受操作系统文件大小限制, 一般为 2G), 受操作系统文件大小的限制;主键索引采用聚集索引( 索引的数据域存储数据文件本身), 辅索引的数据域存储主键的值; 因此从辅索引查找数据, 需要先通过辅索引找到主键值, 再访问辅索引; 最好使用自增主键, 防止插入数据时, 为维持 B+树结构, 文件的大调整。
4.MySQL 中InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
SQL 标准定义的四个隔离级别为:
-
read uncommited : 读到未提交数据
-
read committed: 脏读, 不可重复读
-
repeatable read: 可重读
-
serializable : 串行事物
-
CHAR 和 VARCHAR 类型在存储和检索方面有所不同
-
CHAR 列长度固定为创建表时声明的长度, 长度值范围是 1 到 255 当 CHAR 值被存储时, 它们被
用空格填充到特定长度, 检索 CHAR 值时需删除尾随空格。
表格的每一行都由主键唯一标识,一个表只有一个主键。
主键也是候选键。按照惯例, 候选键可以被指定为主键, 并且可以用于任何外键引用。
它用来压缩 MyISAM 表, 这减少了磁盘或内存使用。
MyISAM Static 和 MyISAM Dynamic 有什么区别?
- 在 MyISAM Static 上的所有字段有固定宽度。动态 MyISAM 表将具有像 TEXT, BLOB 等字段, 以适应不同长度的数据类型。MyISAM Static 在受损情况下更容易恢复。
- 每当行被更改时, 时间戳字段将获取当前时间戳。列设置为 AUTO INCREMENT 时, 如果在表中达到最大值, 会发生什么情况?它会停止递增, 任何进一步的插入都将产生错误, 因为密钥已被使用。怎样才能找出最后一次插入时分配了哪个自动增量?LAST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值, 并且不需要指定表名称。
索引是通过以下方式为表格定义的:
SHOW INDEX FROM ;
% 对应于 0 个或更多字符,只是 LIKE 语句中的一个字符。
在 SELECT 语句的列比较中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND, OR 或 LIKE 运算符。
BLOB 是一个二进制对象, 可以容纳可变数量的数据。TEXT 是一个不区分大小写的 BLOB。BLOB 和 TEXT 类型之间的唯一区别在于对 BLOB 值进行排序和比较时区分大小写, 对 TEXT 值不区分大小写。
13.MySQL_fetch_array 和MySQL_fetch_object 的区别是什么?
以下是 MySQL_fetch_array 和 MySQL_fetch_object 的区别:
-
MySQL_fetch_array( ) – 将结果行作为关联数组或来自数据库的常规数组返回。
-
MySQL_fetch_object – 从数据库返回结果行作为对象。
14.MyISAM 表格将在哪里存储,并且还提供其存储格式?
每个 MyISAM 表格以三种格式存储在磁盘上:
-
·“.frm” 文件存储表定义
-
·数据文件具有“.MYD”( MYData)
-
扩展名索引文件具有“.MYI”( MYIndex) 扩展名
在 MySQL 中, 使用以下代码查询显示前 50 行:
SELECT*FROM TABLE LIMIT 0,50;
任何标准表最多可以创建 16 个索引列。
17.NOW()和 CURRENT_DATE()有什么区别?
NOW(): 命令用于显示当前年份, 月份, 日期, 小时, 分钟和秒。
CURRENT_DATE(): 仅显示当前年份, 月份和日期。
最后
无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。
针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。
每个 MyISAM 表格以三种格式存储在磁盘上:
-
·“.frm” 文件存储表定义
-
·数据文件具有“.MYD”( MYData)
-
扩展名索引文件具有“.MYI”( MYIndex) 扩展名
在 MySQL 中, 使用以下代码查询显示前 50 行:
SELECT*FROM TABLE LIMIT 0,50;
任何标准表最多可以创建 16 个索引列。
17.NOW()和 CURRENT_DATE()有什么区别?
NOW(): 命令用于显示当前年份, 月份, 日期, 小时, 分钟和秒。
CURRENT_DATE(): 仅显示当前年份, 月份和日期。
最后
无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。
针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。
[外链图片转存中…(img-1NDTDzrJ-1715118829148)]
[外链图片转存中…(img-rF3prRgN-1715118829149)]
[外链图片转存中…(img-U6gX8E8I-1715118829149)]