前两天有个朋友去某厂面试,开场还是挺顺利的,没过多久却被调优问成凉凉了。

我心想,都已经到7月半了,很快又是秋招大军来临了,是不是也有很多朋友同样在JAVA性能调优这一块掌握的不够呢?所以今天来写这篇文章,就是想给大家分享一份阿里P8架构师手敲20W字的调优实战笔记,另外尤其对于MySQL、Tomcat、JVM这三个特殊对待一下,看看我为其手绘相应的思维脑图以及面试相关的高频真题及答案。

先来看看Java性能调优实战

由于篇幅太多,直接来个总目录康康,从下面的目录大致上可以知道详情的内容包括哪些... 从目录就可以知道内容实在是太多了,我就不很详细的去解释了,开篇就说了想把这份阿里P8架构师手敲20W字的调优实战笔记分享给大家,点击这里,可以获取免费下载的方式,还有更多的MySQL、Tomcat、JVM等的面试和我熬夜纯手绘的思维脑图。

再来看下里边详细的内容

  • Java编程性能调优

  • 多线程性能调优

  • JVM性能监测及调优

  • 设计模式调优

  • MySQL性能调优

  • 实战演练场

 

MySQL的手绘思维脑图+面试

  • MySQL手绘思维脑图

手绘这份思维脑图用的xmind这个软件,每个分支点开都会有详细的解析,这边不能上传原件,所以截图看下吧,原件可以找小编分享,私信我“调优”即可,不管是性能调优实战还是手绘思维脑图和面试。

 

  • MySQL面试(阿里P8级,测试一下自己的水平)

  1. 说一下 MySQL 执行一条查询语句的内部执行过程?

  2. MySQL 提示“不存在此列”是执行到哪个节点报出的?

  3. MySQL 查询缓存的功能有何优缺点?

  4. 如何关闭 MySQL 的查询缓存功能?

  5. MySQL 的常用引擎都有哪些?

  6. MySQL 可以针对表级别设置数据库引擎吗?怎么设置?

  7. 常用的存储引擎 InnoDB 和 MyISAM 有什么区别?

  8. InnoDB 有哪些特性?

  9. 一张自增表中有三条数据,删除了两条数据之后重启数据库,再新增一条数据,此时这条数据的 ID 是几?

  10. MySQL 中什么情况会导致自增主键不能连续?

  11. InnoDB 中自增主键能不能被持久化?

  12. 什么是独立表空间和共享表空间?它们的区别是什么?

  13. 如何设置独立表空间?

  14. 如何进行表空间收缩?

  15. 说一下重建表的执行流程?

  16. 表的结构信息存在哪里?

  17. 什么是覆盖索引?

  18. 如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?

  19. 执行一个 update 语句以后,我再去执行 hexdump 命令直接查看 ibd 文件内容,为什么没有看到数据有改变呢?

  20. 内存表和临时表有什么区别?

  21. 并发事务会带来哪些问题?

  22. 什么是脏读和幻读?

  23. 为什么会出现幻读?幻读会带来什么问题?

  24. 如何避免幻读?

  25. 如何查看 MySQL 的空闲连接?

  26. MySQL 中的字符串类型都有哪些?

  27. VARCHAR 和 CHAR 的区别是什么?分别适用的场景有哪些?

  28. MySQL 存储金额应该使用哪种数据类型?为什么?

  29. limit 3,2 的含义是什么?

  30. now() 和 current_date() 有什么区别?

  31. 为什么 InnoDB 不把总条数记录下来,查询的时候直接返回呢?

  32. 能否使用 show table status 中的表行数作为表的总行数直接使用?为什么?

  33. 以下哪个 SQL 的查询性能最高?

  34. 索引分别有哪些优点和缺点?

  35. 以下 SQL 有什么问题?该如何优化?

  36. 为什么 MySQL 官方建议使用自增主键作为表的主键?

  37. 自增主键有哪些优缺点?

  38. 索引有几种类型?分别如何创建?

  39. 主索引和唯一索引有什么区别?

  40. 在 InnDB 中主键索引为什么比普通索引的查询性能高?

  41. 什么叫回表查询?

  42. 10.如何查询一张表的所有索引?

  43. MySQL 最多可以创建多少个索引列?

  44. 以下 like 查询会使用索引的是哪一个选项?为什么?

  45. 如何让 like %abc 走索引查询?

  46. MySQL 联合索引应该注意什么?

  47. 联合索引的作用是什么?

  48. 什么是最左匹配原则?它的生效原则有哪些?

  49. 列值为 NULL 时,查询会使用到索引吗?

  50. 以下语句会走索引么?

  51. 能否给手机号的<typo id="typo-1778" ignoretag="true" data-origin="前">前</typo> 6 位创建索引?如何创建?

  52. 什么是前缀索引?

  53. 为什么要用前缀索引?

  54. 什么情况下适合使用前缀索引?

  55. 什么是<typo id="typo-1836" ignoretag="true" data-origin="页">页</typo>?

  56. 索引的常见存储算法有哪些?

  57. InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?

  58. 为什么 InnoDB 要使用 B+ 树来存储索引?

  59. 唯一索引和普通索引哪个性能更好?

  60. 优化器选择查询索引的影响因素有哪些?

  61. MySQL 是如何判断索引扫描行数的多少?

  62. MySQL 是如何得到索引基数的?它准确吗?

  63. 什么是锁?MySQL 中提供了几类锁?

  64. 常见的死锁案例有哪些?

  65. 如何处理死锁?

  66. 如何查看死锁?

  67. 如何避免死锁?

  68. InnoDB 默认是如何对待死锁的?

  69. 如何开启死锁检测?

  70. 什么是全局锁?它的应用场景有哪些?

  71. 什么是共享锁?

  72. 什么是排它锁?

  73. 使用全局锁会导致什么问题?

  74. 如何处理逻辑备份时,整个数据库不能插入的情况?

  75. 如何设置数据库为全局只读锁?

  76. 除了 FTWRL 可以设置数据库只读外,还有什么别的方法?

  77. FTWRL 和 set global readonly=true 有什么区别?

  78. 如何实现表锁?

  79. 悲观锁和乐观锁有什么区别?

  80. 乐观锁有什么优点和缺点?

  81. InnoDB 存储引擎有几种锁算法?

  82. MySQL 有哪些重要的日志文件?

  83. redo log 和 binlog 有什么区别?

  84. 什么是 crash-safe?

  85. 什么是<typo id="typo-2389" ignoretag="true" data-origin="脏页">脏页</typo>和干净页?

  86. 什么情况下会引发 MySQL 刷脏页(flush)的操作?

  87. MySQL 刷脏页的速度很慢可能是什么原因?

  88. 如何控制 MySQL 只刷新当前<typo id="typo-2469" ignoretag="true" data-origin="脏页">脏页</typo>?

  89. MySQL 的 WAL 技术是解决什么问题的?

  90. 为什么有时候会感觉 MySQL 偶尔卡一下?

  91. redo log 和 binlog 是怎么关联的?

  92. MySQL 怎么知道 binlog 是完整的?

  93. MySQL 中可不可以只要 binlog,不要 redo log?

  94. MySQL 中可不可以只要 redo log,不要 binlog?

  95. 为什么 binlog cache 是每个线程自己维护的,而 redo log buffer 是全局共用的?

  96. 事务执行期间,还未提交,如果发生 crash,redo log 丢失,会导致主备不一致呢?

  97. 在 MySQL 中用什么机制来优化随机读/写磁盘对 IO 的消耗?

  98. 有没有办法把 MySQL 的数据恢复到过去某个指定的时间节点?怎么恢复?

  99. MySQL命令和内置函数篇

  100. 如何用命令行方式连接 MySQL 数据库?

  101. 关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是?

  102. 如何创建用户?并给用户授权?

  103. 如何修改 MySQL 密码?

  104. 如何使用 SQL 创建数据库,并设置数据库的编码格式?

  105. 如何修改数据库、表的编码格式?

  106. 如何使用 SQL 创建表?

  107. 在 MySQL 命令行中如何查看表结构信息?

  108. 如何使用 SQL 查看已知表的建表脚本?

  109. 如何使用 SQL 语句更新表结构?

  110. MySQL 有哪些删除方式?有什么区别?

  111. 如何开启和关闭 MySQL 服务?

  112. 如何查询当前 MySQL 安装的版本号?

  113. 如何查看某张表的存储引擎?

  114. 如何查看当前数据库增删改查的执行次数统计?

  115. 如何查询线程连接数?

  116. 如何查看 MySQL 的最大连接数?能不能修改?怎么修改?

  117. CHAR_LENGTH 和 LENGTH 有什么区别?

  118. UNION 和 UNION ALL 的用途是什么?有什么区别?

  119. 以下关于 WHERE 和 HAVING 说法正确的是?

  120. MySQL 性能指标都有哪些?如何得到这些指标?

  121. 什么是慢查询?

  122. 如何开启慢查询日志?

  123. 如何定位慢查询?

  124. MySQL 的优化手段都有哪些?

  125. MySQL 常见读写分离方案有哪些?

  126. 介绍一下 Sharding-JDBC 的功能和执行流程?

  127. 什么是 MySQL 多实例?如何配置 MySQL 多实例?

  128. 怎样保证确保备库无延迟?

总共有128道题目,答案在这里,题目加答案就有64页...

 

Java虚拟机-JVM手绘思维脑图+面试

  • JVM手绘思维脑图

  • JVM面试

  1. Java 类加载过程?

  2. 描述一下 JVM 加载 Class 文件的原理机制?

  3. Java 内存分配

  4. GC 是什么? 为什么要有 GC?

  5. 简述 Java 垃圾回收机制

  6. 如何判断一个对象是否存活?(或者 GC 对象的判定方法)

  7. 垃圾回收的优点和原理。并考虑 2 种回收机制

  8. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

  9. Java 中会存在内存泄漏吗,请简单描述

  10. 深拷贝和浅拷贝

  11. System.gc() 和 Runtime.gc() 会做什么事情?

  12. finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?

  13. 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?

  14. 什么是分布式垃圾回收(DGC)?它是如何工作的?

  15. 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

  16. 在 Java 中,对象什么时候可以被垃圾回收?

  17. 简述 Java 内存分配与回收<typo id="typo-4010" ignoretag="true" data-origin="策率">策率</typo>以及 Minor GC 和 MajorGC

  18. JVM 的永久代中会发生垃圾回收么?

  19. Java 中垃圾收集的方法有哪些?

  20. 什么是类加载器,类加载器有哪些?

 

Tomcat调优

  • Tomcat调优面试问题

  1. 你怎样给 tomcat 去调优?

  2. 如何加大 tomcat 连接数?

  3. tomcat 中如何禁止列目录下的文件?

  4. 怎样加大 tomcat 的内存?

  5. Tomcat 有几种部署方式?

  6. Tomcat 的优化经验?

  7. ... ...

  • Tomcat架构解析文档

 

最后申明

全文提及的JAVA性能调优实战+MySQL面试-手绘思维脑图+JVM手绘脑图-面试+Tomcat面试-架构解析文档,如果你觉得自己有必要再好好学习一下调优去应对秋招,那么小编这边皆可免费分享给你全部的原件

 

更多关于Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构面试解析等等可以去这个Github链接地址:

https://github.com/ThinkingHan/Java-note 阅读,Star一下吧,感谢支持~