年初疫情,一直呆家隔离,之前分享过,三次面试阿里都惨败的人(呜呜我是有多惨呐
)发奋图强啦!!!这次真的是血拼(洒泪复习整整3个月呐~),发誓我会回来的。所以7月初再次投岗美团,上周也收到了Offer(喜极而泣呀)。

拿到美团Offer后,思来想去,我觉得Mysql也并不是特别难吧!

不知道那个面试官为什么一直问我Mysql!下面分享面试题以及我花费3个月整理面试宝典!

<>TokuDB( Fractal Tree-节点带数据)

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表的组合

<>数据库的三范式是什么?

第一范式:列不可再分

第二范式:行可以唯一区分,主键约束

第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束

且三大范式是一级一级依赖的,第二范式建立在第一范式上,第三范式建立第一第二范式上

<>简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别?

MyISAM:

不支持事务,但是每次查询都是原子的;支持表级锁,即每次操作是对整个表加锁;存储表的总行数;一个 MYISAM
表有三个文件:索引文件、表结构文件、数据文件;采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

InnoDb:

支持 ACID 的事务,支持事务的四种隔离级别;支持行级锁及外键约束:因此可以支持写并发;

<>MySQL 有关权限的表都有哪几个?

MySQL 服务器通过权限表来控制用户对数据库的访问,权限表存放在 MySQL 数据库里,由 MySQL_install_db 脚本初始化。这些权限表分别
user,db,table_priv,columns_priv 和 host。

<>MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

* 1、设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
* 2、选择合适的表字段数据类型和存储引擎,适当的添加索引。
* 3、MySQL 库主从读写分离。
* 4、找规律分表,减少单表中的数据量提高查询速度。
* 5、添加缓存机制,比如 memcached,apc 等。
* 6、不经常改动的页面,生成静态页面。
* 7、书写高效率的 SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1,field_2, field_3 FROM
TABLE.
<>事务隔离级别有哪些?MySQL的默认隔离级别是?

* SQL 标准定义了四个隔离级别:
* READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
* READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
* REPEATABLE-READ(可重复读):
对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生
* SERIALIZABLE(可串行化):
最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读)。我们可以通过SELECT @@tx_isolation;
命令来查看

<>分库分表之后,id 主键如何处理?

* 因为要是分成多个表之后,每个表都是从 1 开始累加,这样是不对的,我们需要一个全局唯一的 id 来支持。
* 生成全局 id 有下面这几种方式:
* **UUID:**不适合作为主键,因为太长了,并且无序不可读,查询效率低。比较适合用于生成唯一的名字的标示比如文件的名字。
* 数据库自增 id : 两台数据库分别设置不同步长,生成不重复ID的策略来实现高可用。这种方式生成的 id
有序,但是需要独立部署数据库实例,成本高,还会有性能瓶颈。
* **利用 redis 生成 id **:
性能比较好,灵活方便,不依赖于数据库。但是,引入了新的组件造成系统更加复杂,可用性降低,编码更加复杂,增加了系统成本。
好了以上是我的面试题以及答案!

是不是都觉得我回答的非常规范?其实都是我在三个月在全网搜集各大厂面试题!其实我运气还算是比较好的!也就问了Mysql,但是你们就没有这么好运气了!不用担心!
本文档是从阿里面试官整理的Java面试题其包含的内容模块有:基础、JVM、多线程与高并发、Spring、MyBatis、SpringBoot、MYSQL、SpringCloud、Dubbo、Nginx、MQ、数据结构与算法、Linux、Zookeeper、Redis、分布式、网络、设计模式、maven、ElasticSearch、git、软实力集训等

<>扎牢基础,深入底层,面试我可造火箭

多线程&并发面试题

* Java中实现多线程有几种方法
* 继承Thread类
* 实现Runnable接口。
* ExecutorService、Callable、 Future 有返回值线程
* 基于线程池的方式
* 4种线程池

JVM面试题

* 程序计数器(线程私有)
* 虚拟机栈(线程私有)
* 本地方法区(线程私有)
* 你能保证GC执行吗?
* 怎么获取Java程序使用的内存?堆使用的百分比?

Redis面试题

Memcached面试题

MongoDB面试题

String面试题

* 不同版本的Spring Framework有哪些主要功能?
* 什么是Spring Framework?
* 举Spring Framework的优点。
* Spring Framework有哪些不同的功能?
* Spring Framework中有多少个模块,它们分别是什么?

Spring Boot面试题

RabbitMQ面试题

* 什么是rabbitmq
* 为什么要使用rabbitmq
* 使用rabbitmq的场景
* 如何确保消息正确地发送至RabbitMQ?如何确保消息接收方消费了消息?
* 如何避免消息重复投递或重复消费?
* 消息基于什么传输?

MyBatis 面试题

<>Java核心知识点

<>MCAJAVA后端架构师学习路线

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信