|
1 |
| -# 构建完整的并发与高并发知识体系 |
| 1 | +# 0 Java 高并发理论 基础知识点全覆盖 |
| 2 | +## 无论跳槽面试 / 开发,技能都将高人一等 |
2 | 3 |
|
3 |
| - |
| 4 | + |
| 5 | +# 1 多线程并发与线程安全,让程序更可靠 |
| 6 | +## 大量代码实例来讲解,深度掌握高并发编程 |
4 | 7 |
|
5 | 8 | 
|
6 | 9 |
|
| 10 | +# 2 高并发处理思路与手段,让跳槽面试从容不迫 |
| 11 | + |
| 12 | +## 并发与高并发是面试的重要考察点,常问面试问题与答案都在这里了 |
| 13 | + |
7 | 14 | 
|
8 | 15 |
|
| 16 | +# 3 环境参数 |
| 17 | + |
| 18 | +## 基本工具 |
| 19 | + |
| 20 | +- Maven 3.3.9 |
| 21 | + |
| 22 | +- JDK 8 |
| 23 | + |
| 24 | +- Tomcat |
| 25 | + |
| 26 | +- MySQL 8.0.16 |
| 27 | + |
| 28 | +- Redis |
| 29 | + |
| 30 | +## IDE |
| 31 | +Intellij IDEA 2019.2 |
| 32 | + |
| 33 | +## 测试工具 |
| 34 | +Postman、JMeter |
| 35 | + |
| 36 | +## 框架 |
| 37 | +SpringBoot、Mybatis |
| 38 | + |
| 39 | +## 组件 |
| 40 | +Kafka、RabbitMQ、elastic-job... |
| 41 | + |
| 42 | +# 4 知识点概要 |
| 43 | + |
| 44 | +## 线程安全性 |
| 45 | +线程安全性,主要从原子性、可见性、有序性三个方面 |
| 46 | + |
| 47 | +原子性部分, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项 |
| 48 | +可见性部分,主要介绍的是volatile关键字的规则和使用,及synchronized关键字的可见性 |
| 49 | +有序性部分,则重点讲解了happens-before原则 |
| 50 | + |
| 51 | +## 安全发布对象 |
| 52 | +安全发布对象的一些核心方法,主要通过单例类的多种实现方式,让大家在实现过程中去体会这些方法的具体含义 |
| 53 | +这也是对线程安全性的巩固,也是把线程安全性涉及的一些关键字和类再一次放到实际场景中使用,加深大家对他们的印象和认识 |
| 54 | + |
| 55 | +## 线程安全策略 |
| 56 | +线程安全策略,包括定义不可变对象、线程封闭、同步容器、并发容器等,引出并发里的关键知识J.U.C。 |
| 57 | + |
| 58 | +同时还额外介绍了开发中常见的一些线程不安全类和写法,并给出他们各自对应的替代方案。这一章涉及的内容在日常开发和面试中都会涉及很多。... |
| 59 | + |
| 60 | +## J.U.C之AQS讲解 |
| 61 | +AQS是J.U.C的重要组件,也是面试的重要考点。 |
| 62 | + |
| 63 | +AQS模型设计及相关同步组件的原理和使用,都非常实用,具体包括:CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock与锁、Condition等。 |
| 64 | + |
| 65 | +这些组件需要大家能熟练明白他们的用途及差异,不但会使用,而且还要明确知道不同方法调用后的不同效果。... |
| 66 | + |
| 67 | +## J.U.C组件拓展 |
| 68 | +J.U.C相关组件,主要包括FutureTask、Fork/Join框架、BlockingQueue,其中FutureTask讲解时会对比着Callable、Runnable、Future来讲。 |
| 69 | + |
| 70 | +这些组件使用场景相对AQS会少一些,但也是J.U.C的重要组成部分,也是需要掌握的 |
| 71 | + |
| 72 | +## 线程调度-线程池 |
| 73 | +J.U.C里最后一部分:线程池。面试大概率会问到线程池相关的知识点。 |
| 74 | + |
| 75 | +这一章将主要从new Thread弊端、线程池的好处、ThreadPoolExecutor详细介绍(参数、状态、方法)、线程池类图、Executor框架接口等进行讲解,需要大家能了解线程池的许多细节及配置,并能在实际项目中正确使用 |
| 76 | + |
| 77 | + |
| 78 | +## 多线程并发拓展讲解 |
| 79 | +对并发编程做些补充,但都贴近当前的面试,主要讲解死锁产生的条件及预防、多线程并发编程的最佳实践、Spring与线程安全、以及面试都特别喜欢问的HashMap和ConcurrentMap源码细节。当然,面试喜欢问的问题,对实际项目开发也是特别重要的 |
| 80 | + |
| 81 | + |
| 82 | +## 高并发之扩容 |
| 83 | +高并发部分:思路,侧重面试,扩容思路,首先介绍垂直扩容和水平扩容的区别,之后介绍数据库读操作扩展和写操作扩展思路。 |
| 84 | + |
| 85 | +## 高并发之缓存 |
| 86 | +思路,本章讲解高并发中缓存方案。 |
| 87 | + |
| 88 | +包含对缓存特征(命中率、最大元素、清空策略)、影响缓存命中率因素、缓存分类和应用场景(本地缓存、分布式缓存)、高并发场景下缓存常见问题(缓存一致性、缓存并发、缓存穿透、雪崩)等的具体介绍。此外,针对大家常用的缓存组件Guava Cache、Memcache、Redis |
| 89 | + |
| 90 | +## 高并发之消息队列 |
| 91 | +思路,本章介绍了消息队列的特性(业务无关、FIFO、容灾、性能)、为什么需要消息队列以及消息队列的好处(业务解耦、最终一致性、广播、错峰与流控),最后对当前比较流行的消息队列组件kafka和rabbitmq做了架构分析和特性介绍 |
| 92 | + |
| 93 | +## 高并发之应用拆分 |
| 94 | +从实际项目拆分步骤讲起,让大家可以实际感受到应用拆分的好处和解决的问题,之后引出对应用拆分原则(业务优先、循序渐进、兼顾技术、可靠测试)和应用拆分时思考的内容(应用之间通信、应用之间数据库设计、避免事务跨应用),并引出对服务化Dubbo和微服务Spring Cloud的框架介绍 |
| 95 | + |
| 96 | +## 高并发之应用限流 |
| 97 | +思路,本章从实际项目保存百万数据的限流场景开始讲起,让大家感受一下某些高并发场景下使用限流和不使用限流的区别,明确限流的重要作用 |
| 98 | + |
| 99 | +之后详细介绍了限流常用的四种算法:计数法、滑动窗口、漏桶算法和令牌桶算法,并对他们做了简单的对比 |
| 100 | + |
| 101 | +## 服务降级与服务熔断 |
| 102 | +通过举例让大家明白什么是服务降级和服务熔断 |
| 103 | + |
| 104 | +之后介绍了服务降级的分类:自动降级(超时、失败次数、故障、限流)和人工降级(开关),总结了服务降级和服务熔断的共性(目的、最终表现、粒度、自治)和区别(出发原因、管理目标层次、实现方式)以及服务降级要考虑的问题 |
| 105 | + |
| 106 | +最后介绍了Hystrix |
| 107 | + |
| 108 | +## 数据库分库分表与高可用手段 |
| 109 | +高并发部分:主讲思路,从数据库瓶颈开始讲起,引出对数据库切库分库分表的介绍。数据库切库里重点介绍了读写分离的设计,对比支持多数据源和分库的区别; |
| 110 | + |
| 111 | +最后介绍了什么时候该考虑分表、横向分表与纵向分表,以及通过mybatis的分页插件shardbatis2.0实现数据库分表 |
| 112 | + |
| 113 | +之后介绍了高可用的三个常用手段:任务调度系统分布 |
| 114 | + |
| 115 | +## 知识体系总结 |
| 116 | +对知识进行总结回顾,希望大家都能有所收获,并期待与大家共同探讨并发与高并发的话题 |
9 | 117 |
|
10 | 118 | 
|
0 commit comments