总结
总的来说,面试是有套路的,一面基础,二面架构,三面个人。
最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友
-
原子性(Atomicity): 事务开始后的所有操作,要么全部成功要么全部失败。
-
一致性(Consistency): 事务开始前后数据库的完整性约束没有被破坏,比如:A向B转钱,不可能出现A扣了钱,B没收到钱。
-
隔离性(Isolation):多个事务并发访问时,事务之间是隔离的。
-
持久性(Durability):事务完成后,事务对数据库的操作被保存在了数据库,不能回滚。
面试官:嗯,答的很对。那你说说事务有哪几种隔离级别呢?
小张:事务隔离级别从高到低有四种隔离级别,分别是:串行化(SERIALIZABLE) 、可重复读(REPEATABLE READ)、读提交(READ COMMITTED)、读未提交(READ UNCOMMITTED)。
面试官:嗯嗯,那你能说说这四种隔离级别分别会造成什么问题吗?
(小张窃喜,我就知道你要这么问,还好我平时关注了 ‘ JAVA日知录 ’ 的公众号)
小张:好的,面试官。
如果数据库采用 读未提交(READ UNCOMMITTED)这种隔离级别,会造成 脏读。事务还没提交别人就能看到,这样就不能保证你读取到的数据是最终的数据,万一别人把事务回滚了,那就出现了脏数据问题。
**读提交(READ COMMITTED)**是指一个事务只能读取到其他事务已经提交了的数据,这样就不会出现脏读的问题,但是它会带来」不可重复读 的问题。比如 A事务 将一个人的姓名从张三改成李四,B事务在A事务提交之前读取到的是张三,但是在A事务提交之后就变成了李四。
可重复读(REPEATABLE READ):可重复读是为了解决READ COMMITTED带来的不可重复读问题,指的是事务不会读取到其他事务对已有数据的修改,即使数据已经提交了。也就是说事务开始读取到的是什么,在事务提交之前的任意时刻,这些数据都一样。虽然解决了不可重复读问题,但是他又会带来 幻读 的问题。比如A事务将张三修改成李四,B事务再插入一个名叫李四的用户,此时事务A再查找名叫李四的用户会发现多了一条,出现了2个李四,这就是幻读。
串行化(SERIALIZABLE):解决了上面出现的所有问题,但是它效率最差,它将事务的执行变成顺序执行了。
面试官:回答的不错,那你知道 MySQL的默认隔离级别是什么吗?
小张:Mysql默认的隔离级别是REPEATABLE READ,Oracle则采用的是READ COMMITTED。
面试官:但是我们使用MySQL的时候并没有出现幻读啊,怎么解决的?
小张擦了擦汗,开始有点紧张了:额,InnoDB主要是利用锁来解决幻读问题的。
面试官:对,是采用了锁,那么具体怎么实现的呢?
小张:我…我突然有点事,我先回去了。
面试官:要了解InnoDB怎么解决幻读得先知道InnoDB有哪几种锁。
-
Record Lock:单个行记录上的锁
-
Gap Lock:间隙锁,锁定一个范围,而非记录本身,遵循左开右闭原则
-
Next-Key Lock:结合Gap Lock和Record Lock,锁定一个范围,并且锁定记录本身。主要解决的问题是REPEATABLE READ隔离级别下的幻读。
注意,如果走唯一索引,那么Next-Key Lock会降级为Record Lock,即仅锁住索引本身,而不是范围。也就是说Next-Key Lock前置条件为事务隔离级别为RR且查询的索引走的非唯一索引、主键索引。
下面我们通过具体的例子来模拟上面出现的幻读问题:
CREATE TABLE T (id int ,name varchar(50),f_id int,PRIMARY KEY (id), KEY(f_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into T SELECT 1,‘张三’,10;
insert into T SELECT 2,‘李四’,30;
InnoDB在数据库中会为索引维护一套B+树,用来快速定位行记录。B+索引树是有序的,所以会把这张表的索引分割成几个区间。
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**