目录



第1章项目设计规划管理1
1.1项目设计规划/注意事项/项目管理1
1.2项目定位2
1.2.1产品设计2
1.2.2流程图/产品原型/页面UI9
1.3项目管理12
1.3.1项目流程12
1.3.2团队组建17
1.3.3项目文档20
1.3.4问题梳理21
1.3.5成本管理22
1.4开发部署23
1.4.1开发部署问题23
1.4.2编码规范问题28
1.4.3代码分支30
1.4.4版本/Bug处理/环境32

第2章设计模式34
2.1设计模式介绍34
2.1.1工厂方法模式34
2.1.2抽象工厂模式36
2.1.3单例模式39
2.1.4建造者模式40
2.1.5原型模式42
2.1.6适配器模式44
2.1.7桥接模式45
2.1.8装饰器模式47
2.1.9组合模式49
2.1.10外观模式51
2.1.11代理模式53
2.1.12模板方法模式54
2.1.13迭代器模式56
2.1.14策略模式57
2.1.15命令模式59
2.1.16责任链模式61
2.1.17状态模式62
2.1.18观察者模式65
2.1.19中介者模式67
2.1.20访问者模式68
2.1.21解释器模式71
2.1.22享元模式72
2.1.23管理者模式74
2.2设计模式使用场景76
2.2.1不同营销策略的切换场景76
2.2.2对象的创建和管理场景78
2.2.3奖励分配和活动参与场景80
2.2.4实时消息推送或互动交流场景83
2.2.5用户的行为响应和推送通知功能场景86
2.2.6记录核心审计日志场景88
2.2.7商品多级分类目录场景89
2.2.8开具增值税发票场景93
2.2.9订单状态场景96
2.2.10平台积分红包发放场景99
2.2.11业务投放场景101
2.2.12支付场景103
第3章Spring Boot107
3.1自动配置/依赖管理107
3.2实战集成107
3.2.1使用springbootstarterparent108
3.2.2使用springbootdependencies110
3.2.3使用io.spring.platform112
3.3手写一个简易版的Spring Boot113
3.3.1Java代码直接启动Tomcat113
3.3.2多态实现WebServer121
3.3.3实现自动配置类127
3.3.4使用条件注解129
3.3.5注入自定义配置类131
3.3.6Spring Boot自动加载134
第4章部署方案137
4.1CentOS 7137
4.1.1介绍137
4.1.2安装138
4.1.3配置144
4.1.4复制迁移146
4.2宝塔面板159
4.2.1功能介绍159
4.2.2安装与配置160
4.3Docker167
4.3.1核心概念168
4.3.2功能介绍169
4.3.3安装与配置170
4.3.4实战使用174
4.4DockerCompose175
4.4.1功能介绍176
4.4.2命令介绍176
4.4.3安装与配置176
4.4.4实战使用178
4.5Kubernetes191
4.5.1部署时代的变迁191
4.5.2容器的好处192
4.5.3容器技术193
4.5.4Kubernetes的好处194
4.5.5Kubernetes技术195
4.5.6项目部署实战239
4.5.7服务网格与云计算274
4.5.8大型项目架构340
第5章JVM调优361
5.1JVM调优目的原则361
5.2Full GC发生的原因362
5.3常用的工具363
5.3.1Jstack363
5.3.2Jmap364
5.3.3Jstat364
5.3.4JConsole365
5.3.5VisualVM365
5.3.6Arthas366
5.4JVM排查367
5.4.1收集问题信息367
5.4.2确定问题的类型368
5.4.3检查JVM配置368
5.4.4分析堆转储369
5.4.5分析GC日志369
5.4.6分析线程转储369
5.4.7进行代码审查370
5.4.8实验和更改370
5.5GC场景371
5.5.1大访问压力下频繁进行Minor GC371
5.5.2Minor GC过于频繁引发Full GC371
5.5.3大对象创建频繁导致Full GC频繁出现371
5.5.4Minor GC和Full GC长时间停顿372
5.5.5由内存泄漏导致的MGC和FGC频繁发生而后出现OOM372
第6章MySQL调优373
6.1表结构设计373
6.1.1建索引374
6.1.2MySQL的索引375
6.2文件排序376
6.3读入缓冲区大小376
6.4SQL优化377
6.4.1SQL编写377
6.4.2SQL优化工具378
6.4.3慢SQL优化378
6.5数据分区379
6.5.1表分区379
6.5.2分区表379
6.5.3水平分区379
6.6灾备处理380
6.6.1冷备份380
6.6.2热备份380
6.6.3冷备份与热备份的权衡380
6.6.4备份注意事项380
6.7高可用380
6.7.1MMM381
6.7.2MHA381
6.7.3MGR381
6.8异常发现处理381
6.8.1数据库监控382
6.8.2数据库日志382
6.8.3数据库巡检383
6.8.4资源评估383
6.9数据服务383
6.9.1子表结构生成383
6.9.2数据迁移388
6.9.3数据校验388
6.10读写分离388
6.10.1主从数据同步388
6.10.2中间件路由389
6.10.3缓存路由389
第7章Redis调优390
7.1绑定CPU内核390
7.2使用复杂度过高的命令391
7.3大key的存储和删除391
7.4数据集中过期392
7.5内存淘汰策略393
7.6碎片整理393
7.7内存大页394
 7.8数据持久化与AOF刷盘394
7.9丢包/中断/CPU亲和性395
7.10操作系统Swap与主从同步397
7.11监控397
7.12高可用398
7.12.1主从同步和哨兵机制398
7.12.2多级缓存398
7.12.3冷热分离399
7.13缓存雪崩、穿透、击穿、热点缓存重构、缓存失效400
第8章消息中间件调优402
8.1消息丢失402
8.1.1消息丢失产生的原因402
8.1.2Kafka402
8.1.3RabbitMQ403
8.1.4RocketMQ403
8.2消息重复消费404
8.3消息顺序405
8.4消息积压406
8.5延迟队列406
8.6高可用406
8.7Kafka系统调优407
8.7.1硬件调优407
8.7.2网络调优407
8.7.3Kafka本身调优407
8.8RabbitMQ系统调优412
8.9RocketMQ系统调优414
第9章Elasticsearch调优417
9.1CPU优化417
9.2内存优化418
9.3网络优化418
9.4磁盘优化420
9.5计算机系统优化420
9.6Elasticsearch本身配置参数421
9.7GC调优421
9.8索引优化设置422
9.8.1批量提交422
9.8.2增加Refresh时间间隔422
9.8.3修改index_buffer_size的设置423
9.8.4修改translog相关的设置423
9.8.5_id字段、_all字段、_source字段、index属性424
9.8.6减少副本数量424
9.9查询方面优化424
9.9.1路由优化424
9.9.2routing查询424
9.9.3Filter与Query的区别425
9.9.4深度翻页425
9.9.5脚本合理使用425
9.9.6Cache的设置及使用426
9.9.7更多查询优化经验426
9.9.8通过开启慢查询配置以定位慢查询428
9.10数据结构优化430
9.10.1减少不需要的字段430
9.10.2Nested Object与Parent/Child431
9.10.3静态映射431
9.10.4document模型设计431
9.11集群架构设计432
9.11.1主节点和数据节点432
9.11.2Hot节点和Warm节点432
9.11.3协调节点433
9.11.4关闭数据节点服务器中的HTTP功能433
9.11.5一台服务器上只部署一个节点433
9.11.6集群分片设置434
9.12慢查询优化434
9.13可用性优化435
9.13.1Elasticsearch原生版本在可用性方面存在的问题435
9.13.2问题的分析436
9.13.3高并发请求压垮集群436
9.14性能优化438
9.15执行引擎的优化439
9.16成本优化440
9.16.1存储成本优化440
9.16.2内存成本优化441
9.17扩展性优化442
9.18分析性能问题443