数据库 高频面试题,面试被卡了什么意思

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

DELETE命令

DELETE FROM 表名 [WHERE condition];

TRUNCATE命令

TRUNCATE [TABLE] table_name;

注意:区别于 DELETE 命令

  • 相同:都能删除数据 , 不删除表结构 , 但 TRUNCATE 速度更快

  • 不同:使用 TRUNCATE TABLE 不会对事务有影响

1.4 常见关键字


| 字段名 | 作用 |

| :-: | :-: |

| DISTINCT | 去重 |

| AS | 起别名 |

| CONCAT | 字符串拼接 |

| LENGTH | 字符串长度 |

| UPPER/LOWER | 将字符串变成大写/小写 |

| COUNT | 计数 |

| TRIM | 去掉字符串两边的空格 |

| SUM | 求和 |

| AVG | 求平均 |

2 引擎

=======================================================================

1 什么是存储引擎

存储引擎指的就是 MySQL 中将数据保存到磁盘中的技术。主要有 MyISAM 和 InnoDB,这两者的区别在于 InnoDB 支持事务、行级锁和外键约束,但不支持全文索引,同时存储空间较大。

2 在创建表时配置存储引擎

CREATE TABLE 表名(

– 省略一些代码

– Mysql注释

– 1. # 单行注释

– 2. // 多行注释

)ENGINE = MyISAM (or InnoDB) , CHARSET = utf8; – MySQL 的默认存储编码是不支持中文的, 如无设定 , 则根据MySQL数据库配置文件 my.ini 中的参数设定

3 如何查看当前表所使用的存储引擎

反向得到当初创建数据库或者表的命令

SHOW CREATE DATABASE bank;

SHOW CREATE TABLE employees;

4 MyISAM 存储引擎与 InnoDB 引擎的区别

MyISAM 是 MySQL 原本的默认引擎,不过现在变成了 InnoDB;(MyISAM 发音为 “my-z[ei]m”; InnoDB 发音为 “in-no-db” )

两者的区别如下:

| 名称 | MyISAM | InnoDB |

| — | — | — |

| 事务处理 | 不支持 | 支持 |

| 数据行级锁 | 不支持 | 支持 |

| 外键约束 | 不支持 | 支持 |

| 全文索引 | 支持 | 不支持 |

| 表空间大小 | 较小 | 较大,约两倍 |

⼀般况下我们选择 InnoDB 都是没有问题的,如果是某些情况下你并不在乎可扩展能⼒和并发能⼒,也不需要事务⽀持,也不在乎崩溃后的安全恢复问题的话,选择 MyISAM 也是⼀个不错的选择。但是⼀般情况下,我们都是需要考虑到这些问题的。

5 InnoDB 与 MyISAM 这两种存储引擎存储的物理文件的区别

所谓存储引擎就是 MySQL 中将数据保存到磁盘中的技术,事实上,MySQL 数据表以文件方式存放在磁盘中,存储位置为:C:\ProgramData\MySQL\MySQL Server 8.0\Data,其中目录名对应数据库名,该目录下的文件名对应数据表名。

InnoDB 与 MyISAM 这两种存储引擎存储的物理文件有一定区别:

  • InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件

  • MyISAM类型数据表对应三个文件 :

  • * . frm – 表结构定义文件

  • * . MYD – 数据文件 ( data )

  • * . MYI – 索引文件 ( index )

3 事务

=======================================================================

1 什么是事务

事务是将一组 SQL 语句放在同一批次内去执行的操作,如果其中一条 SQL 语句出错,则该批次内的所有 SQL 都将被取消执行。

事务是逻辑上的一组操作,要么都执行,要么都不执行。

2 事务的四大特性

  1. 原子性: 事务是最小的执行单位,不允许分割。即保证了 SQL 语句要么都成功,要么都失败;

  2. 一致性: 事务前后的数据完整性要保持一致;

  3. 隔离性: 并发访问数据库时,一个事务不会被其他事务所干扰,各个事务之间是相互隔离的;

  4. 持久性: 一个事务被提交之后,它对数据库中数据的改变是持久的。

3 并发事务带来的问题

在典型的应用程序中,多个事务经常会操作相同的数据来完成各自的任务,即并发事务。在这个过程中,可能会导致以下问题:

  • 脏读(Dirty read): 一个事务读取了另一个事务还未提交(修改)的数据;

  • 不可重复读(Unrepeatableread): 一个事务多次读取同一数据,而该数据在第一个事务读取后被第二个事务所修改了,所以导致第一个事务多次读取的结果不一样;

  • 幻读(Phantom read): 一个事务多次读取同一数据,而在这个事务内,该事务读取到了别的事务所插入或删除的数据,导致前后读取的结果不一样。

4 事务隔离级别有哪些?可以防止哪些并发问题

为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

| 隔离级别 | 脏读 | 不可重复读 | 幻读 |

| — | — | — | — |

| READ-UNCOMMITTED(读取未提交) | √ | √ | √ |

| READ-COMMITTED(读取已提交) | × | √ | √ |

| REPEATABLE-READ(可重复读) | × | × | √ |

| SERIALIZABLE(可串行化) | × | × | × |

MySQL 默认的是 可重复读 隔离级别,事务隔离机制的实现基于锁机制和并发调度

5 事务的代码实现

– 使用set语句来改变自动提交模式

SET autocommit = 0; /关闭/

SET autocommit = 1; /开启/

– 注意:

— 1.MySQL中默认是自动提交

— 2.使用事务时应先关闭自动提交

SET autocommit = 0; /关闭/

– 开始一个事务,标记事务的起始点

START TRANSACTION

–这里假设有两个 SQL 语句

– 提交一个事务给数据库

COMMIT

– 将事务回滚,数据回到本次事务的初始状态

ROLLBACK

– 还原MySQL数据库的自动提交

SET autocommit =1;

– 保存点

SAVEPOINT 保存点名称 – 设置一个事务保存点

ROLLBACK TO SAVEPOINT 保存点名称 – 回滚到保存点

RELEASE SAVEPOINT 保存点名称 – 删除保存点

/*

测试题目

A在线买一款价格为500元商品,网上银行转账.

A的银行卡余额为2000,然后给商家B支付500.

商家B一开始的银行卡余额为10000

创建数据库shop和创建表account并插入2条数据

*/

CREATE DATABASE shopCHARACTER SET utf8 COLLATE utf8_general_ci;

USE shop;

CREATE TABLE account (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(32) NOT NULL,

cash DECIMAL(9,2) NOT NULL,

PRIMARY KEY (id)

) ENGINE=INNODB DEFAULT CHARSET=utf8;

反引号,它是为了区分MYSQL的保留字与普通字符而引入的符号

INSERT INTO account (name,cash)

VALUES(‘A’,2000.00),(‘B’,10000.00);

– 转账实现

SET autocommit = 0; – 关闭自动提交

START TRANSACTION; – 开始一个事务,标记事务的起始点

UPDATE account SET cash=cash-500 WHERE name=‘A’;

UPDATE account SET cash=cash+500 WHERE name=‘B’;

COMMIT; – 提交事务

ROLLBACK;

SET autocommit = 1; – 恢复自动提交

4 索引

=======================================================================

1 什么是索引(MySQL 官方)

索引相当于一个目录,是一种帮助 MySQL 高效获取数据的数据结构。

2 索引有什么优缺点

优点:建立它可以更快地查询数据库表中的数据;

缺点:

  • 时间方面:创建索引需要时间,同时当对表中的数据进行增、改、查时,索引也要动态的维护,会降低增、改、删的执行效率;

  • 空间方面:索引需要占物理空间。

3 索引的分类

从物理存储角度分

  • 聚簇(cù)索引:将数据存储与索引放到了一块,找到索引也就找到了数据;

  • 非聚簇索引:将数据存储与索引分开存放;

从逻辑角度分

  1. 主键索引(PRIMARY KEY):平常用的主键就是一个索引。
  • 确保数据记录的唯一性,一张表中只能有一个主键索引,不允许为 Null 值;
  1. 唯一索引(UNIQUE KEY)
  • 确保数据记录的唯一性,一张表中可以有多个唯一索引,允许为 Null 值;
  1. 普通索引:普通索引(KEY)

  2. 全文索引: 是目前搜索引擎使用的一种关键技术。

  • MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;

  • MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;

  • 只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

4 创建索引的代码实现

#方法一:创建表时

CREATE TABLE 表名 (

字段名1 数据类型 [完整性约束条件…],

字段名2 数据类型 [完整性约束条件…],

[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY

[索引名] (字段名[(长度)] [ASC |DESC])

);

#方法二:CREATE在已存在的表上创建索引

CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ;

#方法三:ALTER TABLE在已存在的表上创建索引

ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ;

#删除索引:DROP INDEX 索引名 ON 表名字;

#删除主键索引: ALTER TABLE 表名 DROP PRIMARY KEY;

#显示索引信息: SHOW INDEX FROM student;

5 创建索引的原则

  1. 较频繁作为查询条件的字段才去创建索引;

  2. 更新频繁的字段不适合创建索引;

  3. 小数据量的表不建议加索引;

  4. 最左前缀匹配原则;

  5. 限制索引的数目。

6 说一下最左前缀匹配原则

该原则针对的是联合索引,在检索数据时从联合索引的最左边开始匹配,遇到范围查询(>、<、between、like)就会停止匹配。

例如:b = 2 如果建立(a,b)顺序的索引,是匹配不到(a,b)索引的;

其中联合索引指的是 MySQL 可以使用多个字段同时建立一个索引。

7 索引什么时候会失效

  1. 对索引使用函数;

  2. 对索引使用运算;

  3. 模糊查询时,索引在通配符 % 之后;

  4. 使用 NOT、IN 等进行条件查询时;

  5. 当 MySQL 认为全表查询更快时。

8 索引的底层实现是什么?这两者有什么区别?

索引又分为 Hash 索引和 B 树索引,其中 Hash 索引底层就是 Hash 表,B 树索引的底层是 B+ 树。

这两者的区别是:

  1. Hash 索引在一般情况下进行等值查询时更快,然而不支持范围查询;而 B 树索引两种查询都支持;

  2. Hash 索引的查询效率不稳定,而 B 树索引相对稳定;

  3. Hash 索引任何时候都避免不了回表查询数据,而 B 树索引在符合某些条件,比如聚簇索引的时候可以只通过索引完成查询,不需要回表查询。

所以大多数情况下,直接选择 B 树索引可以获得稳定且较好的查询速度,而不需要使用 Hash 索引。

6 锁

======================================================================

1 锁的定义

当数据库存在并发事务时,需要一些机制来保证访问的次序,从而保证数据的一致性,锁便是这样一种机制。

2 锁的种类

  1. 如果按锁级别分类则有:共享(读)锁、排他(写)锁;

  2. 按锁粒度从大到小分类:表锁,页锁和行锁;

  3. 编程时的两种并发思想:悲观锁、乐观锁。

3 什么是共享锁和排他锁

共享锁: 又叫做读锁。 当事务 A 对数据 B 加上读锁时,其它事务仍然可以并发地读取数据,但是包括事务 A 在内的所有事务都不能对数据 B 进行修改,直到所有事务释放对该数据的读锁。

排他锁:又叫做写锁。当事务 A 对数据 B 加上写锁后,其它事务不能再对数据 B 加任何类型的锁。获得写锁的事务既能读数据,又能修改数据。

4 根据锁的粒度区分锁

行级锁:行级锁是 MySQL 中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。

特点:加锁慢、开销大;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

表级锁:表级锁是 MySQL 中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,被大部分 MySQL 引擎支持。

特点:加锁快,开销小;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

页级锁:页级锁是 MySQL 中锁定粒度介于行级锁和表级锁中间的一种锁,一次锁定相邻的一组记录。

5 介绍一下乐观锁和悲观锁

乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作,避免其他事务意外修改数据,因此在操作数据时会直接把数据锁住。

总结

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

三面蚂蚁核心金融部,Java开发岗(缓存+一致性哈希+分布式)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
避免其他事务意外修改数据,因此在操作数据时会直接把数据锁住。

总结

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer! 越努力越幸运!

金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。我偶然得到一份整理的资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

[外链图片转存中…(img-LGSQmWte-1713473031334)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-AQvDgwTl-1713473031335)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
面试高级开发的期间整理的面试题目,记录我面试遇到过的数据库题目以及答案,比如说mvvc还有数据库调优,索引。 目录如下 数据库 数据库事务隔离级别; 事务的并发导致的问题; 数据库事务设置不同的隔离级别会导致的不同并发问题 当前读和快照读的意义; mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; MVCC实现过程; mvcc三大组件; RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; mysql如何做分库分表的; mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; binlog和redo log和区别; mysql涉及到的log有哪些; 阿里要求尽量少用join,为什么; 索引 索引分类 索引的数据结构; b树和b+树的区别 索引失效的情况: 数据库优化 查询计划的结果中看哪些关键数据; mysql 如何调优; 索引是建的越多越好吗; 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 描述一下InnoDB和MyISAM的区别; 当前读和快照读的意义; 13 mvcc:多版本控制: 指的是一种提高并发的技术,其解决问题是什么; 14 MVCC实现过程; 14 mvcc三大组件; 15 RC、RR级别下的InnoDB快照读有什么不同:17 mysql面试题01.vep 17 描述一下mysql的乐观锁和悲观锁,以及mysql锁的种类; 17 mysql如何做分库分表的; 18 mysql描述一下mysql主从复制的机制的原理;mysql主从复制主要有几种模式 19 在mysql开启Binlog(为了其他非事务引擎复制所以引入binlog,比如说主从)后,如何保证binlog和InnoDB redo日志的一致性呢; 20 binlog和redo log和区别; 22 mysql涉及到的log有哪些; 23 阿里要求尽量少用join,为什么; 23 索引 24 索引分类 24 索引的数据结构; 24 b树和b+树的区别 26 索引失效的情况: 26 数据库优化 27 查询计划的结果中看哪些关键数据; 27 mysql 如何调优; 27 索引是建的越多越好吗; 29 在表查询中,一律不要使用 * 作为查询的字段列表,原因是什么; 29 描述一下InnoDB和MyISAM的区别; 29

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值