字节面试官死磕Mysql,程序员心中暗喜:这是来跟我学经验的吧?

隔离级别有四种。

  • 未提交读:是最低的隔离级别,其含义是允许一个事务读取另外一个事务没有提交的数据。会出现脏读。
  • 读写提交:是指一个事务只能读取另一个事务已经提交的数据,不能读取未提交的数据。克服了脏读,但会出现不可重复读现象。
  • 可重复读:克服读写提交中出现的不可重复读现象。但会出现幻读现象。
  • 串行化:数据库中最高的隔离级别,她会要求所有的 SQL 都会按照顺序执行,这样就可以克服上述隔离级别出现的各种问题,所以它能完全保证数据的一致性。

MySQL 默认的隔离级别是可重复读。

####什么是幻读?

幻读是指在同一个事务下,连续执行两次同样的 SQL 语句可能导致不同的结果, 第二次的 SQL 语句可能会返回之前不存在的行。

事务 A 读取与搜索条件相匹配的若干行,事务 B 以插入或删除行等方式来修改事务 A 的结果集,然后再提交,就会发生幻读。例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。

在默认的事务隔离级别下,即 REPEATABLE READ(可重复读)下,InnoDB 存储引擎采用 **Next-Key Locking **机制来避免幻读。

####MySQL 有哪些存储引擎,各自优缺点?

MySQL 支持 InnoDB、MyISAM、MEMORY 等存储引擎。

InnoDB 引擎(MySQL5.5 以后默认使用):

  • 灾难恢复性好
  • 支持事务
  • 使用行级锁和表级锁,能支持更多的并发量
  • 查询不加锁
  • 支持外键关联
  • 支持热备份
  • 实现缓冲管理

MyISAM 引擎:

  • 不支持事务
  • 使用表级锁,并发性差
  • 主机宕机后,MyISAM 表易损坏,灾难恢复性不佳
  • 可以配合锁,实现操作系统下的复制备份、迁移
  • 只缓存索引
  • 数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能

两者主要区别:

  • InnoDB 支持事务,MyISAM 不支持事务处理等高级处理。
  • InnoDB 支持行级锁,而 MyISAM 仅支持表级锁。
  • MyISAM 类型的表强调的是性能,其执行速度比 InnoDB 类型更快。
  • MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用。
  • InnoDB 支持外键,MyISAM 不支持。
  • MyISAM 支持全文搜索,而 InnoDB 1.2.x 版本后才支持。
  • 对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在MyISAM 表中可以和其他字段一起建立联合索引。

####高并发下,如何做到安全的修改同一行数据?

  • 使用悲观锁。本质是当前只有一个线程执行操作,排斥外部请求的修改。遇到加锁的状态,就必须等待。结束了唤醒其他线程进行处理。但是, 我们的场景是“高并发”。也就是说,会很多这样的修改请求,每个请求 都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。
  • FIFO(先进先出)缓存队列思路,直接将请求放入队列中,这样就不会导致某些请求永远获取不到锁。有点强行把多线程变成单线程的感觉。
  • 使用乐观锁。相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。实现就是,这个数据所有请求都有资格去修改, 但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他 的返回抢购失败。

1. 乐观锁和悲观锁是什么,InnoDB 的标准行级锁有哪两种,解释其含义?
2. SQL 优化的一般步骤是什么,怎么看执行计划,如何理解其中各个字段的含义?
3. 数据库会死锁吗,举一个死锁的例子,mysql 是怎么解决死锁的?
4. MySQL 的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化?
5. 聚集索引和非聚集索引的区别?
6. select for update 是什么含义,会锁表还是锁行还是其他?
7. 为什么要用 Btree 实现,它是怎么分裂的,什么时候分裂,为什么是平衡的?
8. 数据库的 ACID 是什么?
9. 某一个表有近千万的数据,CRUD 比较慢,如何优化?
10. MySQL 是怎么优化 table scan 的?
11. 如何写 SQL 能够有效地使用到复合索引?
12. MySQL 中 in 和 exists 的区别?
13. 数据库自增主键可能的问题?
14. MVCC 的含义,如何实现的?
15. MySQL 的主从延迟怎么解决?
16. 什么是回表,覆盖索引有什么作用?
17. B+Tree 索引和 Hash 索引区别?
18. 在 Mybatis 中,占位符$和#的区别(防止 SQL 注入)?
19. SQL 的注入攻击是什么,如何防范?
20. 什么时候添加 B+树索引?
21. MySQL 的嵌套事务?
22. 给出一个学生成绩 studuent 表,写一个 SQL 语句,统计每个学生所有成绩平均分大于 80 分的结果?
23. MySQL 中一条 SQL 语句的执行过程?
24. MySQL 中 int(11)中的 11 代表什么含义?
25. InnoDB 中为什么采用 B+树结构,而不是平衡树?
26. MySQL 索引的“创建”原则?
27. 为什么官方建议使用自增长主键作为索引?
28. MySQL 主从复制的作用和原理?
29. MySQL 事务日志?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

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

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

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值