Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day4】 —— 数据库1
日期: 2021-06-04 分类: 个人收藏 640次阅读
大家好,我是陈哈哈,北漂五年。认识我的朋友们知道,我是非科班出身,半路出家,大学也很差!这种背景来北漂,你都不知道你会经历什么🙃🙃。
不敢苟同,相信大家和我一样,都有一个大厂梦
,作为一名资深Java选手,深知面试重要性,接下来我准备用100天时间,基于Java岗面试中的高频面试题,以每日3题
的形式,带你过一遍热门面试题及恰如其分的解答。当然,我不会太深入,因为我怕记不住!!
因此,不足的地方希望各位在评论区补充疑惑、见解以及面试中遇到的奇葩问法
,希望这100天能够让我们有质的飞越,一起冲进大厂!!,让我们一起学(juan)起来!!!
车票
本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识
、集合容器
、并发编程
、JVM
、Spring全家桶
、MyBatis等ORMapping框架
、MySQL数据库
、Redis缓存
、RabbitMQ消息队列
、Linux操作技巧
等。
终于到了期待已久的MySQL系列,太舒服了,还是个阳光明媚的周五~~~COOL!
写在前面,群里同学常提:数据库这方面,面试一般怎么问呢?
我们虽不是大公司,但面试过很多朋友。我们一般从sql优化起头,基于回答内容,深入原理,然后往索引、事务上找,曾经实际优化的事儿,底子好的,一般两个点以后就不在问啦~
至于为啥不再问,是因为问太多毫无意义!!
,看完本文你就会有所体会。
面试题1:你对数据库优化有哪些了解呀?
正经回答:
在高并发环境下,数据库是最敏感的地方,nginx负载均衡、Server集群、MQ消息队列、Redis缓存集群、数据库主从集群所作的一切都是为了减轻数据库访问压力。但是!前提是要有健壮的数据库和底层代码,这样才能使前期准备不再是花架子。
性价比如上图,我们针对数据库的优化优先级大致如下:
- 高:从SQL优化、索引优化入手,优化慢SQL、利用好索引,是重中之重;
- 中:SQL优化之后,是对数据表结构设计、横纵分表分库,对数据量级的处理;
- 低:通过修改数据库系统配置,最大化里用服务器内存等资源;
- 低:通过以上方式还不行,那就是服务器资源瓶颈了,加机器。
优化成本:硬件 > 系统配置 > 数据库表结构 > SQL及索引。
优化效果:硬件 < 系统配置 < 数据库表结构 < SQL及索引。
深入追问:
追问1:那你对SQL优化方面有哪些技巧呢?
简单说对于SQL优化,就三点:
- 最大化利用索引;
- 尽可能避免全表扫描;
- 减少无效数据的查询;
首先要清楚SELECT语句 - 执行顺序:
FROM
<表名> # 选取表,将多个表数据通过笛卡尔积变成一个表。
ON
<筛选条件> # 对笛卡尔积的虚表进行筛选
JOIN
<join, left join, right join…>
<join表> # 指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中
WHERE
<where条件> # 对上述虚表进行筛选
GROUP BY
<分组条件> # 分组
<SUM()等聚合函数> # 用于having子句进行判断,在书写上这类聚合函数是写在having判断里面的
HAVING
<分组筛选> # 对分组后的结果进行聚合筛选
SELECT
<返回数据列表> # 返回的单列必须在group by子句中,聚合函数除外
DISTINCT
#数据除重
ORDER BY
<排序条件> # 排序
LIMIT
<行数限制>
SQL优化策略:
声明:以下SQL优化策略适用于数据量较大的场景下,如果数据量较小,没必要以此为准,以免画蛇添足。
一、避免不走索引的场景
- 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描。如下:
SELECT * FROM t WHERE username LIKE '%陈%'
优化方式:尽量在字段后面使用模糊查询。如下:(原因涉及B+Tree索引最左前缀原则,可以参考 除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: 深度学习的“瓶颈”与“遛狗”定理
下一篇: 图像匹配论文与方法超全整理
精华推荐