先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
0 SQL性能分析
SQL性能下降原因:
- 1、查询语句写的烂
- 2、索引失效(数据变更)
- 3、关联查询太多join(设计缺陷或不得已的需求)
- 4、服务器调优及各个参数设置(缓冲、线程数等)
通常SQL调优过程:
- 观察,至少跑1天,看看生产的慢SQL情况。
- 开启慢查询日志,设置阙值,比如超过5秒钟的就是慢SQL,并将它抓取出来。
- explain + 慢SQL分析。
- show profile。
- 运维经理 or DBA,进行SQL数据库服务器的参数调优。
总结:
- 1、慢查询的开启并捕获
- 2、explain + 慢SQL分析(没索引的先建索引)
- 3、show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况
- 4、SQL数据库服务器的参数调优
数据库的分类
- 关系型数据库:mysq/oracle/db2/informix/sysbase/sql server
- 非关系型数据库:(特点:面向对象或者集合)
- NoSql数据库:MongoDB(特点是面向文档)
1 表的设计合理化
1.1 为什么需要范式
一个软件项目基本都会用到数据库,项目开发前期分析客户的业务和数据处理需求,然后设计数据库的E-R模型图,确认需求信息的正确和完整。再就要将E-R图转换为多张表,表设计后,很可能结构不合理,出现数据重复保存,简称数据的冗余
,这对数据的增删改查带来很多后患,所以我们需要审核是否合理,就像施工图设计后,还需要其他机构进行审核图纸是否设计合理一样。
如何审核呢?需要一些有关数据库设计的理论指导规则,这些规则业界简称数据库的范式。数据库范式为数据库的设计、开发提供了一个可参考的典范
。
1.2 三范式原理
通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解
第一范式: 1NF是对属性的原子性约束,要求属性(列)具有原子性,不可再分解; (只要是关系型数据库都满足1NF)
第二范式: 2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式: 3NF是对字段冗余性的约束,它要求字段没有冗余。没有冗余的数据库设计可以做到。
但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。
1.3 什么样的表才满足三范式
表的范式,是首先符合1NF, 才能满足2NF,进一步满足3NF
1NF:即表的列的具有原子性,不可再分解,即列的信息,不能分解,只有数据库是关系型数据库
2NF:表中的记录是唯一的,就满足2NF,通常我们设计一个主键来实现
3NF:即表中不要有冗余数据,就是说,表的信息,如果能够被推导出来,就不应该单独的设计一个字段来存放
反3NF:在表1->n的情况下,为了提高效率可能会在1这张表设计字段提速
2 慢查询
2.1 慢查询介绍
- MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。
- 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。
- 由他来查看哪些SQL超出了我们的最大忍耐时间值,比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合之前explain进行全面分析
2.2 慢查询步骤
问题:如何从一个大项目中,迅速的定位执行速度慢的语句.(定位慢查询)
1)首先我们了解mysql数据库的一些运行状态如何查询(比如想知道当前mysql运行的时间一共执行了多少次selecthupdate/delete,当前连接)
- 当前时间:
show status like 'uptime';
- 共执行多少次select:
show stauts like 'com_select';
- 共执行多少次update:
show stauts like 'com_update';
- 共执行多少次delete:
show stauts like 'com_delete';
show [session/global] status like ...
如果你不写 [session/global] 默认是session会话,指取出当前窗口的执行,如果你想看所有(从mysql启动到现在,则应该global)
- 当前MySQL连接数:
show status like 'connections';
- 显示慢查询次数:
show status like 'slow_queries';
2)开启慢查询日志
操作说明:
默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。
查看是否开启及如何开启:
- 默认:
SHOW VARIABLES LIKE '%slow_query_log%';
[ˈveəriəbls] - 开启:
set global slow_query_log=1;
,只对当前数据库生效,如果MySQL重启后则会失效
如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
修改my.cnf文件,[mysqld] 下增加或修改参数slow_query_log和slow_query_log_file后,然后重启MySQL服务器。也即将如下两行配置进my.cnf文件
slow_query_log =1
slow_query_log_file=/var/lib/mysqatguigu-slow.log
关于慢查询的参数slow_query_log_file,它指定慢查询日志文件的存放路径,系统默认会给一个缺省的文件host_name-slow.l