年初疫情,一直呆家隔离,之前分享过,三次面试阿里都惨败的人(呜呜我是有多惨呐)发奋图强啦!!!这次真的是血拼(洒泪复习整整3个月呐~),发誓我会回来的。所以7月初再次投岗美团,上周也收到了Offer(喜极而泣呀)。
拿到美团Offer后,思来想去,我觉得Mysql也并不是特别难吧!
不知道那个面试官为什么一直问我Mysql!下面分享面试题以及我花费3个月整理面试宝典!
TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有些类似, 在 Fractal Tree中, 每一个 child 指针除了需要指向一个 child节点外,还会带有一个 Message Buffer ,这个Message Buffer 是一个 FIFO 的队列,用来缓存更新操作。例如,一次插入操作只需要落在某节点的 Message Buffer 就可以马上返回了,并不需要搜索到叶子节点。这些缓存的更新会在查询时或后台异步合并应用到对应的节点中
TokuDB 在线添加索引,不影响读写操作, 非常快的写入性能, Fractal-tree 在事务实现上有优势。 他主要适用于访问频率不高的数据或历史数据归档!
如何查看mysql提供的所有存储引擎
mysql常用引擎包括:MYISAM、Innodb、Memory、MERGE1. MYISAM:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,以select、insert为主的应用基本上可以使用这引擎
2. Innodb:行级锁,提供了具有提交、回滚和崩溃回复能力的事务安全,支持自动增长列,支持外键约束,并发能力强,占用空间是MYISAM的2.5倍,处理效率相对会差一些
3. Memory:全表锁,存储在内容中,速度快,但会占用和数据量成正比的内存空间且数据在mysql重启时会丢失,默认使用HASH索引,检索效率非常高,但不适用于精确查找,主要用于那些内容变化不频繁的代码表
4. MERGE:是一组MYISAM表的组合
第一范式:列不可再分
第二范式:行可以唯一区分,主键约束
第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束
且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上
MyISAM:
不支持事务,但是每次查询都是原子的;支持表级锁,即每次操作是对整个表加锁;存储表的总行数;一个 MYISAM 表有三个文件:索引文件、表结构文件、数据文件;采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDb:
支持 ACID 的事务,支持事务的四种隔离级别;支持行级锁及外键约束:因此可以支持写并发;
MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在 MySQL 数据库里,由 MySQL_install_db 脚本初始化。这些权限表分别 user,db,table_priv,columns_priv 和 host。
MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)。我们可以通过SELECT @@tx_isolation; 命令来查看
好了以上是我的面试题以及答案!
是不是都觉得我回答的非常规范?其实都是我在三个月在全网搜集各大厂面试题!其实我运气还算是比较好的!也就问了Mysql,但是你们就没有这么好运气了!不用担心!本文档是从阿里面试官整理的Java面试题其包含的内容模块有:基础、JVM、多线程与高并发、Spring、MyBatis、SpringBoot、MYSQL、SpringCloud、Dubbo、Nginx、MQ、数据结构与算法、Linux、Zookeeper、Redis、分布式、网络、设计模式、maven、ElasticSearch、git、软实力集训等
多线程&并发面试题
JVM面试题
Redis面试题
Memcached面试题
MongoDB面试题
String面试题
Spring Boot面试题
RabbitMQ面试题
MyBatis 面试题