前两天有个朋友去某厂面试,开场还是挺顺利的,没过多久却被调优问成凉凉了。
我心想,都2021年了,是不是也有很多朋友同样在JAVA性能调优这一块掌握的不够呢?所以今天来写这篇文章,就是想给大家分享一份阿里P8架构师手敲20W字的调优实战笔记,另外尤其对于MySQL、Tomcat、JVM这三,看看我为其手绘对应的架构思维脑图以及面试相关的高频真题及答案,并且奉上收集的必刷笔记!
一、先来看看Java性能调优实战
由于篇幅太多,直接来个总目录康康,从下面的目录大致上可以知道详情的内容包括哪些...
从目录就可以知道内容实在是太多了,我就不很详细的去解释了,开篇就说了想把这份阿里P8架构师手敲20W字的调优实战笔记分享给大家,还有更多的MySQL、Tomcat、JVM等的面试和我熬夜纯手绘的思维脑图以及收集的各大笔记,还请注意:点击传送门即可免费获取
内容详解:Java编程性能调优+多线程性能调优+JVM性能监测及调优+设计模式调优+MySQL性能调优+实战演练场
1:Java编程性能调优
2:多线程性能调优
3:JVM性能监测及调优
4:设计模式调优
5:MySQL性能调优
6:实战演练场
二、MySQL专题详细
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性
2.1 MySQL手绘架构脑图
2.2 MySQL面试(阿里P8级,测试一下自己的水平,总共128道)
-
说一下 MySQL 执行一条查询语句的内部执行过程?
-
MySQL 提示“不存在此列”是执行到哪个节点报出的?
-
MySQL 查询缓存的功能有何优缺点?
-
如何关闭 MySQL 的查询缓存功能?
-
MySQL 的常用引擎都有哪些?
-
MySQL 可以针对表级别设置数据库引擎吗?怎么设置?
-
常用的存储引擎 InnoDB 和 MyISAM 有什么区别?
-
InnoDB 有哪些特性?
-
一张自增表中有三条数据,删除了两条数据之后重启数据库,再新增一条数据,此时这条数据的 ID 是几?
-
MySQL 中什么情况会导致自增主键不能连续?
-
InnoDB 中自增主键能不能被持久化?
-
什么是独立表空间和共享表空间?它们的区别是什么?
-
如何设置独立表空间?
-
如何进行表空间收缩?
-
说一下重建表的执行流程?
-
表的结构信息存在哪里?
-
什么是覆盖索引?
-
如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?
-
执行一个 update 语句以后,我再去执行 hexdump 命令直接查看 ibd 文件内容,为什么没有看到数据有改变呢?
-
内存表和临时表有什么区别?
-
并发事务会带来哪些问题?
-
什么是脏读和幻读?
-
为什么会出现幻读?幻读会带来什么问题?
-
如何避免幻读?
-
如何查看 MySQL 的空闲连接?
-
MySQL 中的字符串类型都有哪些?
-
VARCHAR 和 CHAR 的区别是什么?分别适用的场景有哪些?
-
MySQL 存储金额应该使用哪种数据类型?为什么?
-
limit 3,2 的含义是什么?
-
now() 和 current_date() 有什么区别?
-
为什么 InnoDB 不把总条数记录下来,查询的时候直接返回呢?
-
能否使用 show table status 中的表行数作为表的总行数直接使用?为什么?
-
以下哪个 SQL 的查询性能最高?
-
索引分别有哪些优点和缺点?
-
以下 SQL 有什么问题?该如何优化?
-
为什么 MySQL 官方建议使用自增主键作为表的主键?
-
自增主键有哪些优缺点?
-
索引有几种类型?分别如何创建?
-
主索引和唯一索引有什么区别?
-
在 InnDB 中主键索引为什么比普通索引的查询性能高?
-
什么叫回表查询?
-
10.如何查询一张表的所有索引?
-
MySQL 最多可以创建多少个索引列?
-
以下 like 查询会使用索引的是哪一个选项?为什么?
-
如何让 like %abc 走索引查询?
-
MySQL 联合索引应该注意什么?
-
联合索引的作用是什么?
-
什么是最左匹配原则?它的生效原则有哪些?
-
列值为 NULL 时,查询会使用到索引吗?
-
以下语句会走索引么?
-
能否给手机号的前 6 位创建索引?如何创建?
-
什么是前缀索引?
-
为什么要用前缀索引?
-
什么情况下适合使用前缀索引?
-
什么是页?
-
索引的常见存储算法有哪些?
-
InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?
-
为什么 InnoDB 要使用 B+ 树来存储索引?
-
唯一索引和普通索引哪个性能更好?
-
优化器选择查询索引的影响因素有哪些?
-
MySQL 是如何判断索引扫描行数的多少?
-
MySQL 是如何得到索引基数的?它准确吗?
-
什么是锁?MySQL 中提供了几类锁?
-
常见的死锁案例有哪些?
-
如何处理死锁?
-
如何查看死锁?
-
如何避免死锁?
-
InnoDB 默认是如何对待死锁的?
-
如何开启死锁检测?
-
什么是全局锁?它的应用场景有哪些?
-
什么是共享锁?
-
什么是排它锁?
-
使用全局锁会导致什么问题?
-
如何处理逻辑备份时,整个数据库不能插入的情况?
-
如何设置数据库为全局只读锁?
-
除了 FTWRL 可以设置数据库只读外,还有什么别的方法?
-
FTWRL 和 set global readonly=true 有什么区别?
-
如何实现表锁?
-
悲观锁和乐观锁有什么区别?
-
乐观锁有什么优点和缺点?
-
InnoDB 存储引擎有几种锁算法?
-
MySQL 有哪些重要的日志文件?
-
redo log 和 binlog 有什么区别?
-
什么是 crash-safe?
-
什么是脏页和干净页?
-
什么情况下会引发 MySQL 刷脏页(flush)的操作?
-
MySQL 刷脏页的速度很慢可能是什么原因?
-
如何控制 MySQL 只刷新当前脏页?
-
MySQL 的 WAL 技术是解决什么问题的?
-
为什么有时候会感觉 MySQL 偶尔卡一下?
-
redo log 和 binlog 是怎么关联的?
-
MySQL 怎么知道 binlog 是完整的?
-
MySQL 中可不可以只要 binlog,不要 redo log?
-
MySQL 中可不可以只要 redo log,不要 binlog?
-
为什么 binlog cache 是每个线程自己维护的,而 redo log buffer 是全局共用的?
-
事务执行期间,还未提交,如果发生 crash,redo log 丢失,会导致主备不一致呢?
-
在 MySQL 中用什么机制来优化随机读/写磁盘对 IO 的消耗?
-
有没有办法把 MySQL 的数据恢复到过去某个指定的时间节点?怎么恢复?
-
MySQL命令和内置函数篇
-
如何用命令行方式连接 MySQL 数据库?
-
关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是?
-
如何创建用户?并给用户授权?
-
如何修改 MySQL 密码?
-
如何使用 SQL 创建数据库,并设置数据库的编码格式?
-
如何修改数据库、表的编码格式?
-
如何使用 SQL 创建表?
-
在 MySQL 命令行中如何查看表结构信息?
-
如何使用 SQL 查看已知表的建表脚本?
-
如何使用 SQL 语句更新表结构?
-
MySQL 有哪些删除方式?有什么区别?
-
如何开启和关闭 MySQL 服务?
-
如何查询当前 MySQL 安装的版本号?
-
如何查看某张表的存储引擎?
-
如何查看当前数据库增删改查的执行次数统计?
-
如何查询线程连接数?
-
如何查看 MySQL 的最大连接数?能不能修改?怎么修改?
-
CHAR_LENGTH 和 LENGTH 有什么区别?
-
UNION 和 UNION ALL 的用途是什么?有什么区别?
-
以下关于 WHERE 和 HAVING 说法正确的是?
-
MySQL 性能指标都有哪些?如何得到这些指标?
-
什么是慢查询?
-
如何开启慢查询日志?
-
如何定位慢查询?
-
MySQL 的优化手段都有哪些?
-
MySQL 常见读写分离方案有哪些?
-
介绍一下 Sharding-JDBC 的功能和执行流程?
-
什么是 MySQL 多实例?如何配置 MySQL 多实例?
-
怎样保证确保备库无延迟?
总共有128道题目,答案解析全部都有整理,篇幅太长,不便全部上传,下图可清晰可见 整理后是64页的PDF....下载请点击传送门即可免费获取
2.3 MySQL学习必备笔记:MySQL王者晋级之路
第1部分倔强青铜篇(第1~8章):大致包括以下内容
-
MySQL简介
-
主流分支版本
-
数据库安装/启动/关闭
-
权限管理
-
MySQL 数据库的内存池结构
-
存储引擎
-
线程作用
-
刷新机制
-
数据库文件
-
表管理
-
字符集
-
统计信息与数据碎片整理的方法
-
索引的详细解读
-
执行计划的分析
-
压力测试的展现
-
事务的介绍
-
隔离级别的深度讲解,并结合锁一起展开
第2部分秩序白银篇(第9章):大致包括以下内容
-
逻辑备份
-
裸文件备份
-
针对mysqldump、select...into outfile、mydumper和xtrabackup展开详解及实践演练
第3部分荣耀黄金篇(第10~11章):大致包括以下内容
-
主从复制的原理
-
对复制参数进行详细讲解
-
对半同步复制、多源复制、GTID 复制进行全面解读与实践
-
对复制数据一致性的校验和复制管理技巧进行介绍
-
并解读主从复制中的各种报错故障
第4部分尊贵铂金篇(第12~15章):大致包括以下内容
-
互联网主流的MySQL高可用集群架构
-
对MHA/Keepalived/PXC原理的解析、维护管理与实践
-
ProxySQL这个强大的MySQL中间代理层的应用
第5部分永恒钻石篇(第16~17章):大致包括以下内容
-
MySQL 5.7版本的新特性
-
通过硬件、操作系统、数据库、程序设计这四个维度来全面介绍MySQL 数据库的优化
第6部分至尊星耀篇(第18~19章):大致包括以下内容
-
学习部署Lepus
-
监控MySQL与版本升级
第7部分最强王者篇(第20章):MySQL面试总结
三、Java虚拟机-JVM详解
Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”
3.1 JVM手绘架构图
3.2 JVM面试
-
Java 类加载过程?
-
描述一下 JVM 加载 Class 文件的原理机制?
-
Java 内存分配
-
GC 是什么? 为什么要有 GC?
-
简述 Java 垃圾回收机制
-
如何判断一个对象是否存活?(或者 GC 对象的判定方法)
-
垃圾回收的优点和原理。并考虑 2 种回收机制
-
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
-
Java 中会存在内存泄漏吗,请简单描述
-
深拷贝和浅拷贝
-
System.gc() 和 Runtime.gc() 会做什么事情?
-
finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
-
如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
-
什么是分布式垃圾回收(DGC)?它是如何工作的?
-
串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
-
在 Java 中,对象什么时候可以被垃圾回收?
-
简述 Java 内存分配与回收策率以及 Minor GC 和 MajorGC
-
JVM 的永久代中会发生垃圾回收么?
-
Java 中垃圾收集的方法有哪些?
-
什么是类加载器,类加载器有哪些?
3.3 JVM学习必备笔记:JVM从入门到入魔
-
优秀的Java开发者
-
JVM到底该学习什么
-
工欲善其事必先利其器
-
性能优化
四、Tomcat专题详解
4.1 Tomcat学习必备笔记:Tomcat架构解析文档
此笔记将会从以下几个方面解析:
-
基本设计:主要讲述Tomcat的核心接口及概念,并阐述Tomcat的设计理念。
-
架构及工作原理:主要讲述Tomcat的整体架构,以及各模块如何密切协调来完成应用服务器的相关工作。
-
各个模块的特性及使用方式:详细讲述各模块的特性,以及如何使用该特性实现高质量的部署架构。每个方面均融合了相关的设计理念及架构知识的讲解,以使读者更容易从中间件产品架构的角度审视Tomcat。
最后申明
全文提及的JAVA性能调优实战+MySQL笔记+JVM笔记+Tomcat架构解析文档等,如果你觉得自己有必要再好好学习一下调优去应对下次的面试,那么我可以全部分享给你(免费的,放心),还请点击传送门即可免费获取