惨败阿里,洒泪复习3个月!上岸美团惨遭面试官狂问MySQL

2022-09-08 07:58:13

年初疫情,一直呆家隔离,之前分享过,三次面试阿里都惨败的人(呜呜我是有多惨呐)发奋图强啦!!!这次真的是血拼(洒泪复习整整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后端架构师学习路线

  • 作者:M_Tsing
  • 原文链接:https://blog.csdn.net/m0_57042151/article/details/126316714
    更新时间:2022-09-08 07:58:13