内容简介
本书是按照程序设计与架构的顺序编写的,共13章。第1章介绍学能Java应了解的核心知识,为前置内容。第2章和第3章讲解在编写代码之前,如何地为MySQL填充亿级数据,并对MySQ行基准测试,以便在之后编程时有所比较。第4章讲解在编写代码的过程中如何优化代码,使代码更。第5章和第6章讲解在写好代码之后如何测试并优化场景响应速度。第7章和第8章讲解在程序上线执行一段时间之后如何对MySQ行主从、分库分表。第9章讲解如何通过Prometheus和Grafana监控MySQL节点。第10章和第11章讲解如何通过堆内缓存、堆外缓存(MapDB)和磁盘缓存解决MySQL数据库能不佳的问题。第12章讲解如何使用分布式锁Redisson解决实际应用中常见的数据一致问题。第13章简要介绍Java中的常见架构与工具。本书不仅适合Java初学者、刚入行的编程人员,也适合对高能、高并发感兴趣的程序员。
目录
第1 章 高能Java 核心知识概述 11.1 高能 11.2 高并发 21.3 高可用 21.4 算法、GC 与诊断工具 . 31.4.1 算法 . 31.4.2 GC . 41.4.3 jvmtop 41.4.4 jstat 51.4.5 Arthas 61.5 分离术 81.6 基准测试 . 81.6.1 基准测试的概念 . 81.6.2 基准测试的实际用途 . 91.6.3 基准测试与一般能测试的区别 . 91.7 能测试 . 91.7.1 能测试的目的 . 91.7.2 能测试着重观察的指标 . 91.7.3 能测试存在的误区 . 101.7.4 能测试应涵盖的内容 . 111.8 业务测试 . 121.9 单元测试 . 121.9.1 等价类划分 . 131.9.2 边界值分析 . 141.9.3 错误推测法 . 151.10 数据库概述 . 151.10.1 数据库分类 . 161.10.2 数据库测试的具体内容 . 211.11 缓存的核心知识 . 221.11.1 缓存的命中率 . 231.11.2 缓存回收方式 . 231.11.3 缓存回收策略 . 231.11.4 缓存的设计模式 . 231.11.5 缓存测试应涵盖的内容 . 241.11.6 实战:系统设计方案 241.12结――业务、能、编程、架构相辅相成 25第2 章 为MySQL 填充亿级数据 272.1 问题描述 . 272.2 问题分析与解决方案 . 272.3 为MySQL 填充亿级数据实战 282.3.1 INSERT INTO SELECT 方案 . 282.3.2 存储过程方案 . 322.3.3 Loadfile 方案 . 332.3.4 第三方解决方案 . 342.4 终结果 . 35第3 章 MySQL 基准测试:ench 与mysqlslap 363.1 问题描述 . 363.2 问题分析与解决方案 . 363.2.1 解决方案:ench . 373.2.2 ench 的命令与参数 383.2.3 解决方案:mysqlslap . 403.2.4 mysqlslap 的命令与参数 413.3 ench 实战 423.3.1 使用ench 压测CPU、内存和磁盘I/O 423.3.2 初次使用ench 压测MySQL . 463.3.3 深度使用ench 压测MySQL . 493.4 mysqlslap 实战 513.5 其他基准压测工具 . 56第4 章 代码单元的能测试与优化 574.1 问题描述 . 574.2 问题分析与解决方案 . 574.3 JMH 实战 584.3.1 测试JMH 基准能 . 584.3.2 测试i++基准能 . 604.3.3 用JMH 执行多个函数的结果 62第5 章 Web 能测试解决方案:JMeter 675.1 问题描述 . 675.2 问题分析与解决方案 . 675.3 JMeter 的特点 . 685.4 深入理解JMeter . 685.4.1 JMeter 中的部分配置元件 . 685.4.2 JMeter 参数化的实现方式 . 695.4.3 JMeter 函数 . 705.4.4 通过JMeter 读取外部文件 725.4.5 通过JMeter 提取上一个接口返回值 . 735.5 JMeter 实战 . 745.5.1 初次使用JMeter 测试REST 接口 . 745.5.2 录制能测试脚本 . 80第6 章 SQL 优化与索引优化 836.1 问题描述 . 836.2 问题分析与解决方案 . 836.3 SQL 执行计划 . 846.4 SQL 优化与索引优化实战 . 916.4.1 SQL 索引优化 . 916.4.2 分页查询优化 . 956.4.3 慢SQL 日志分析工具mysqldumpslow . 96第7 章 MySQL 主从 1017.1 问题描述 . 1017.2 问题分析与解决方案 . 1017.3 MySQL 主从原理 . 1017.4 深入理解MySQL 中的制日志. 1037.4.1 查看MySQL 制日志状态 1037.4.2 log_bin 和sql_log_bin 的区别 1047.4.3 开启制日志 . 1047.4.4 查看制日志文件的名称、大小和状态 1087.4.5 删除某个日志之前的所有制日志文件 1097.4.6 删除某个时间点以前的制日志文件 1107.4.7 删除所有的制日志文件 . 1117.4.8 查看制日志文件内容 . 1117.4.9 通过制日志文件恢复MySQL . 1167.5 MySQL 主从实战 . 1177.5.1 构建MySQL 主从架构 1177.5.2 使用Spring Boot 整合MySQL 主从架构 . 126第8 章 MySQL 分库分表:MyCAT . 1298.1 问题描述 . 1298.2 问题分析与解决方案 . 1298.3 MyCAT 实战 . 1308.3.1 构建MyCAT 一主多从架构 1308.3.2 构建MyCAT 双主多从环境 1408.3.3 MyCAT 分库――垂直拆分 1428.3.4 MyCAT 分表――拆分 1448.3.5 构建HAProxy + MyCAT + MySQL 高可用架构 146第9 章 MySQL 能监控解决方案:Prometheus+Grafana 1529.1 问题描述 . 1529.2 问题分析与解决方案 . 1529.3 Prometheus 概述与适用场景 1529.4 时序数据库概述与适用场景 . 1539.5 Grafana 概述与适用场景 1549.6 构建Prometheus + Grafana 监控实战 154第10 章 堆内缓存解决方案:Java 堆内缓存与Guava Cache 17110.1 问题描述 . 17110.2 问题分析与解决方案 . 17110.3 Java 堆内缓存 . 17210.3.1 Java 堆内缓存原理 . 17210.3.2 Java 堆内缓存中的常见算法及实战 17310.4 Guava Cache 实战 . 19010.4.1 创建Google 的容器工厂 19010.4.2 屏蔽NULL 值 . 19110.4.3 管理字符串 . 19210.4.4 操作Google 的Multiset 容器 . 19210.4.5 操作Google 的Multimap 容器 19310.4.6 操作Google 的BiMap 容器 . 19410.4.7 操作Google 的Table 容器 . 19410.4.8 操作Google 的classToInstanceMap 容器 19610.4.9 操作Google 的RangeSet 容器 . 19610.4.10 操作Google 的RangeMap 容器. 19810.4.11 操作Google 的Guava Cache 198第11 章 堆外缓存与磁盘缓存解决方案:MapDB 20311.1 问题描述 . 20311.2 问题分析与解决方案 . 20311.2.1 堆外缓存 . 20311.2.2 MapDB 20411.2.3 实战:初次使用MapDB 20511.3 MapDB 的构造原理 20611.4 MapDB 的使用方法 20811.5 MapDB 实战 21011.5.1 MapDB 的序列化 21011.5.2 MapDB 的事务 21111.5.3 MapDB 的监听器与多级缓存 212第12 章 基于Redis 的分布式锁解决方案:Redisson . 21412.1 分布式锁与Redisson 原理 . 21412.2 单机版超买或超卖问题描述及解决方案 21612.3 分布式版超买或超卖问题描述及解决方案 21812.4 多线程死锁问题描述及解决方案 . 21912.5 Redisson 实战 22312.5.1 Redisson 的可重入锁 22312.5.2 Redisson 的锁 22312.5.3 Redisson 的联锁 22512.5.4 Redisson 的红锁 22612.5.5 Redisson 的读写锁 22712.5.6 Redisson 的信号量 22912.5.7 Redisson 的分布式闭锁 230第13 章 Java 中的常见架构与工具 . 23313.1 自动化测试架构 . 23313.2 自动化持续集成部署架构 . 23313.3 高并发架构 . 23413.4 响应式编程架构 . 23613.5 负载均衡架构 . 23813.6 监控工具与监控架构 . 23913.7 其他工具与架构 . 241


