java面试+自己思考-数据库篇

100 阅读5分钟

面试前我们肯定会已经看了大量的面试资料,甚至已经可以耳熟能详,而面试官会让我们展示自己的环节,然而有可能展示错误,因为你之前根本就没排练过,没有和别人讲过,再就是凡事会问你一句“为什么?”是看你有没有思考,这些部分应该你是提前想过,然后在面试环节主动展示出来,给面试官以惊喜,这样才可以脱颖而出,你也是那个他想要的人才!

各位观众老爷们,你们去面试时数据库是必不可少的知识技能点,试问一个公司没有数据库,那也没啥技术含量,作为公司的程序员所以数据库部分技能必须过硬,而学好数据库首先要有全局的把握,然后分析技术细节,展示咱们的才能,指哪打哪,问哪会哪。

首先数据库的存储引擎,基于表的为什么会有这个东西,因为他好像汽车的引擎,什么样的引擎用在什么样的车上,就适合什么样的场景下。Myisam用在读多写少的场景,为什么呢?因为myisam是不支持事务的,而且底层数据结构存储的是数据磁盘地址直接找到数据而Innodb是先找到索引,不是聚簇索引则需要回表,从索引取数据,io必慢。

讲完引擎则会聊聊索引

索引就是B+树,为什么,因为B+树适合树的深度比较短而且可以范围查找

索引优化你知道哪些?

语句优化:Explan计划查看属性key是实际走的索引

type是索引查询类型分为:const使用主键和唯一索引 一行匹配;range使用主键进行范围查询;all全表扫描;ref使用非唯一索引

减少数据访问列数和行数

重构查询方式:让缓存生效,减少冗余,减少锁竞争

重点就是和业务相关的事务了,事务其实很简单,最主要的是学习思想,思想学会了,我们自己也可以设计解决事务的方案,此处要了解关于事务的真相,事务一般由ACID展开,然后,隔离性我们又可以分级别隔离,然后就会出现现象,怎么解决的呢就是引入了MVCC和锁,然后会问你如何解决的可重复读?这里该怎么答呢,

开启一个事务,创建一个系统版本号递增,可重复读就是版本号必须小于等于事务版本号,删除的必选大于的,小于是已经删除的。在 InnoDB 存储引擎中,SELECT 操作的不可重复读问题通过 MVCC 得到了解决,而 UPDATE、DELETE 的不可重复读问题通过 Record Lock 解决,INSERT 的不可重复读问题是通过 Next-Key Lock(Record Lock + Gap Lock)解决的。 优化中我们索引下推5.6引入,在支持ICP后,MySQL在取出索引数据的同时,判断是否可以进行where条件过滤,将where的部分过滤操作放在存储引擎层提前过滤掉不必要的数据,减少了不必要数据被扫描带来的IO开销。建立索引 (age name) name like”张“AND age=10 索引下推模糊匹配交给索引而不是sercer过滤数据,覆盖索引减少回表。

能写出高效的sql提升业务是必不可少的技能,是优秀与菜鸟的区别,面试官工作那么累,面试时也不会多说什么,然而能展现面试难度又高级的问法莫过于一句工作中你是怎么优化sql的? 针对此问题,你问的特别好,也就是我们展示自己的时候了,此处你要有理有据,不紧不慢的分析出脉略给面试官答案,好比教初级菜鸟,为什么要这么干。 a、我有优化表结构的权限 业务中无用索引区别数据不大的删掉 利用数字型字段 创建冗余字段(是不是很聪明) b、怎么查询的事情归我管 范围查找(较少使用!= not in) 最左匹配原则 select* 回表 limit较少数据返回 c、索引的事情由我建 组合索引 有序索引 索引下推和覆盖索引 索引下推在某些查询下,可以减少Server层对存储引擎层数据的读取,从而提供数据库的整体性能。 唯一索引和普通索引 因为唯一索引的更新不能用change buff要判断唯一啊读取数据。普通索引可以直接更新数据,账单和日志类业务。

我们优化看explan计划: 使用force index()防止优化器选错索引 key实际走的索引 type 列:最重要的列之一。表示关联类型或访问类型,即 MySQL 决定如何查找表中的行。 从最优到最差分别为:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL 我们拿到执行慢查询时

  • 分析语句,是否加载了不必要的字段/数据
  • 分析 SQL 执行句话,是否命中索引等
  • 如果 SQL 很复杂,优化 SQL 结构
  • 如果表数据量太大,考虑分表

数据库的执行过程是了解数据库工作提高效率的契机,所以也要了解,但是面试的时候一般思绪万千总是想着多表达一些什么,可是平时的积累太少,说的时候又不知道具体该怎么说,所以平时就要做好演练,条件到了,直接交给面试官,把他教会,必然能进,这就是降维打压,尤其是咱们的总结能力。再就是推广一下费曼学习法,把面试官当傻子一样的教明白,说明你是真的明白,那些讲的高深的人只是附庸风雅自封自己很牛掰,最后热爱生活,快乐学习,分享知识,创造价值。