基础题目,重点考察对索引的理解。一般来说,面试官想要开启索引有关的话题的面试的时候,就会提出这个问题。在回答这个问题的时候一定要抓住机会,尽可能在回答中留下足够多的引导点,引诱面试官从这些引导点进一步追问。
因此在回答这个问题的时候,要注意回答的广度。
这是一个典型的陷阱式问法。因为在常规思维里面,我们都是认为索引是好的。那么有些面试官就不按套路出牌,会反问你索引的缺陷。因此索引是不是越多越好,本质上就是考察索引的开销和缺陷。
这是一个理论与实践相结合的问题。大部分人在面试的时候犯的错就是仅仅从理论上分析了如何选择索引的列,而忽略了提及实践的案例。并且,通过引入不同的案例,还能进一步引导面试官。
此外,你还要注意一点,有些面试官会现场给你表结构定义、核心查询,而后要求你设计索引,这种题目你一样可以参考本问题的答案思路来设计。
最左匹配原则也算是一个面试的热点。最左匹配原则的回答要点就在于讲清楚它的具体匹配原则,最好是能够结合具体的案例。因此这个问题又可以结合如何选择索引列里面的相关内容来回答。
如果你平时没有想过,那么面试官问出来就很容易卡住。实际上这个问题并不难,但是可能的情况比较多,因此你在回答的时候,不一定能够把面试官想要你回答的所有的点都回答出来。但是并不要紧,你只需要答出三五个点就差不多了,足以证明你对这个问题有比较深刻的理解。
而后在平时注意收集一些索引失效的案例就可以了,尽量在回答的时候用上,就非常完美。
基础题。基本上你回答一下索引的优点,再讲一个使用索引前后对比的案例就可以了。这个问题有两个很好的引导点,一个是慢查询排查和优化,另外一个就是谈借助唯一索引来实现幂等。一旦引导成功,那么你都可以水十分钟的面试,并且利用提前准备好的方案刷出亮点。
这也是一个高频面试题目。回答这个问题的误区是无脑背 B+ 树的特点,而没有针对索引这种场景进行分析。并且,如果要想刷出亮点,就不能将话题局限在 B+ 树上,而是要进一步考虑其它的数据结构,并且在面试高端岗位的时候能给出非常具体的例子。
不太常见的问题。这个问题的出题思路是,往常讨论索引都是讨论 B+ 树索引,因此面试官故意问这个问题,看看你对其它类型的索引有没有了解。
这个题目是早几年突然流行起来的,基础题。
回答这个问题一方面要把聚簇索引和非聚簇索引的基本含义回答出来,另外一方面则是要将回表和覆盖索引答出来。
基础题。在回答这个问题的时候,最好加上一个自己使用覆盖索引的案例。
基础题,校招和初中级岗位中比较常见。
不过在实践中前缀索引用得不太多,所以如果你没有接触过就可能答不出来。但是要想回答好这个问题,赢得竞争优势,就要深入讨论前缀索引的前缀,究竟应该有多长。
基础题。索引下推这个名词很容易让你摸不着头脑,因此如果你要是没接触过,就难以从字面上理解这是一个什么东西。
基础题。在回答的时候除了要把联合索引的基本定义讲清楚,还要提到创建联合索引的注意事项。
基础题。这个问题一般出现在面试官想要考察你的数据库事务的功底的时候,作为一个开场问题。要想回答好这个问题,你需要提前准备好整个事务的面试方案,做好引导工作。事务的相关知识非常多,你要尽可能在回答这个问题的时候将你能赢得竞争优势的点回答出来。
基础高频题。基本上在讨论数据库或者数据库事务的时候,大概率会问这个问题。
你在回答的时候,一方面要回答出来隔离级别的基本定义,一方面也要回答出来不同隔离级别可能引发的问题。而后你有几个选择:一个选择是将话题引导到 MySQL 实现隔离级别的底层机制上;一个选择是将话题延伸到快照读上;最后一个选择是进一步讨论分布式事务中的隔离级别问题。
基础题。基本上在讨论数据库或者数据库事务的时候,大概率会问这个问题。但是如果你只能回答出 ACID 的基本定义,那么你是没有办法赢得竞争优势的。
简单题,在校招和初中级工程师社招面试中有可能遇到。
略难的题。有很多人经常犯的错就是解释说数据量大了就要分库分表,但是这个解释不够深入。并且,这是一个很好的打开的分库分表话题,或者说引导面试官的机会,所以你要尽可能在回答的时候提到尽可能多的点,方便接下来面试官追问。
有些时候,面试官问这个问题,可能也是在质疑你为什么要分库分表,其它的手段如分区表、加从库能不能解决问题。
略难的题,兼具理论和实践的意义。当数据库遇到读写瓶颈的时候,有很多种解决方案,分区表和分库分表就是两种比较常用并且效果也比较好的方案。你在回答这个问题的时候,要注意结合实践来讨论。
略难的经典题目,兼具理论和现实意义。大部分公司在没有分库分表的时候,都是推荐使用自增主键的。因此在切换到分库分表之后,自增主键就不能用了,这时候就需要有额外的解决方案。在这里我给你一个比较高级的方案,可以确保你赢得竞争优势。
略难的题目,兼具理论和实践意义。这个问题的本质就是容量评估,而所有的容量评估都是有固定套路的,这个套路就是已有数据量 + 预期数据量 + 读写瓶颈三者合一。而难点则在于怎么评估预期数据量。
简单题。大部分公司只要是稍微上了点规模,都会考虑引入数据库主从集群,而后在业务查询的时候,就执行读写分离了。
要想在这个问题下刷好亮点,有两个点:一个是讨论主从延迟;而另外一个思路则是需要讨论如何强制走主库、强制走从库的问题。
略难的题。这个问题是指如果要是一个分页查询可能命中很多张表,应该怎么解决。解决思路有很多,不过每一种无损的解决思路都稍微有点复杂。所以你在准备面试的时候,要多背背。
在这个题目下,你只要能够把常见的解决方案说清楚,就已经赢得竞争优势了。
你要注意和优化分库分表中的分页查询这个问题相区别。
稍微有点难的题,不太常问,踩过有关从库的坑的面试官会喜欢问。
这个问题有一个极好的引导和刷亮点的点:选择合适的从库,既是负载均衡,又是容错问题。所以这里可以直接将话题引导过去一般意义上的负载均衡和容错这两个点上,也可以结合微服务治理深入讨论,凸显自己在微服务治理方面的积累。
略难的题,但是如果你看过改写 SQL 以及如何求聚合函数之后,这个题就很简单了。
求平均值其实就一个关键点,改写 SQL 的时候要将 AVG 改写为 SUM 和 COUNT,最后再汇总计算平均值。
简单题,关键就在于你是否听过这个名词,听过就很简单,没听过就很容易回答不上来。
回答这个问题最重要的就是把话题往 MySQL 上引,并且要揭示快照读并不是一个标准的隔离级别。
简单的题,你只要听过这个问题就很容易记下来并且回答好。
要注意的是,虽然我们认为主流是已提交读,但是在一些特定的业务里面,或者场景之下,还是会使用可重复读,只是说用的比较少而已。
简单题,你可以从已提交读和可重复读中随便编一个。
注意的是,未提交读和串行化是几乎不可能使用的,前者脏读会引发非常多的问题,后者则是性能太差。
简答题,校招和初级岗位面试中常见。
中等难度,应届生和社招都可能遇到。主要考察对B+树和B树的理解以及索引设计的实际应用。回答时要避免简单罗列B+树特点,而要从数据库实际应用场景出发,阐述B+树的优势。重点在于解释B+树在范围查询和磁盘IO方面的性能。可以通过引出哈希索引、聚簇索引等话题,引导面试官进一步探讨。
简单题,校招和初中级岗位面试中常见。
简单题,校招和初中级岗位中常见。
简单题,在校招和初中级岗位面试中常见。
简单题,校招和初级岗位面试中常见。