Java並發編程入門與高並發面試
第1章 課程準備(入門課程)
課程目標:Java並發編程入門,適合沒有並發編程經驗的同學,本章首先從課程重點、特點、適合人群及學習收獲幾個方面對課程進行整體的介紹,然後會從一個實際的計數場景實現開始,給大家展示多線程並發時的線程不安全問題,讓大家能夠初體驗到並發編程,之後會講解並發和高並發的概念,並通過對比讓大家明白到底什麽是並發和...
1-1 課前必讀(不看會錯過一個億)
1-2 課程導學
1-3 並發編程初體驗
1-4 並發與高並發基本概念(選看)
1-5 JAVA內存模型
1-6 並發的優勢與風險(選看)
第2章 準備工作
本章主要是為課程裏代碼演示做必要的準備。首先會基於SpringBoot快速搭建一個方便演示的Java項目,然後簡單介紹一下碼雲及代碼的管理。項目搭建好,我會使用簡單的例子演示一下並發的模擬驗證,主要包括對工具Postman、JMeter、Apache Bench(AB)的使用,以及使用並發的代碼來驗證並發處理的正確性。...
2-1 案例環境初始化
2-2 案例準備工作
2-3 並發模擬-工具
2-4 並發模擬-代碼
第3章 線程安全性講解
本章講解線程安全性,主要從原子性、可見性、有序性三個方面進行講解。原子性部分,會詳細講解atomic包下相關類、CAS原理、Unsafe類、synchronized關鍵字等的使用及註意事項。可見性部分,主要介紹的是volatile關鍵字的規則和使用,及synchronized關鍵字的可見性。有序性部分,則重點講解了happens-before原則。這裏涉及到...
3-1 線程安全性-原子性-atomic-1
3-2 線程安全性-原子性-atomic-2
3-3 線程安全性-原子性-synchronized
3-4 線程安全性-可見性
3-5 線程安全性-有序性與總結
第4章 安全發布對象講解
本章主要講解安全發布對象的一些核心方法,主要通過單例類的多種實現方式,讓大家在實現過程中去體會這些方法的具體含義。這一章也是對線程安全性的鞏固,也是把線程安全性涉及的一些關鍵字和類再一次放到實際場景中使用,加深大家對他們的印象和認識。...
4-1 安全發布對象-發布與逸出
4-2 安全發布對象-四種方法-1
4-3 安全發布對象-四種方法-2
第5章 線程安全策略講解
本章主要講解線程安全策略,包括定義不可變對象、線程封閉、同步容器、並發容器等,引出並發裏的關鍵知識J.U.C。同時還額外介紹了開發中常見的一些線程不安全類和寫法,並給出他們各自對應的替代方案。這一章涉及的內容在日常開發和面試中都會涉及很多。...
5-1 不可變對象-1
5-2 不可變對象-2
5-3 線程封閉
5-4 線程不安全類與寫法-1
5-5 線程不安全類與寫法-2
5-6 同步容器-1
5-7 同步容器-2
5-8 並發容器及安全共享策略總結
第6章 J.U.C之AQS講解
AQS是J.U.C的重要組件,也是面試的重要考點。這一章裏將重點講解AQS模型設計及相關同步組件的原理和使用,都非常實用,具體包括:CountDownLatch、Semaphore、CyclicBarrier、ReentrantLock與鎖、Condition等。這些組件需要大家能熟練明白他們的用途及差異,不但會使用,而且還要明確知道不同方法調用後的不同效果。...
6-1 J.U.C之AQS-介紹
6-2 J.U.C之AQS-CountDownLatch
6-3 J.U.C之AQS-Semaphore
6-4 J.U.C之AQS-CyclicBarrier
6-5 J.U.C之AQS-ReentrantLock與鎖-1
6-6 J.U.C之AQS-ReentrantLock與鎖-2
第7章 J.U.C組件拓展
這一章繼續講解J.U.C相關組件,主要包括FutureTask、Fork/Join框架、BlockingQueue,其中FutureTask講解時會對比著Callable、Runnable、Future來講。這些組件使用場景相對AQS會少一些,但也是J.U.C的重要組成部分,也是需要掌握的。
7-1 J.U.C-FutureTask-1
7-2 J.U.C-FutureTask-2
7-3 J.U.C-ForkJoin
7-4 J.U.C-BlockingQueue
第8章 線程調度-線程池講解
本章講解J.U.C裏最後一部分:線程池。面試大概率會問到線程池相關的知識點。這一章將主要從new Thread弊端、線程池的好處、ThreadPoolExecutor詳細介紹(參數、狀態、方法)、線程池類圖、Executor框架接口等進行講解,需要大家能了解線程池的許多細節及配置,並能在實際項目中正確使用。...
8-1 線程池-1
8-2 線程池-2
8-3 線程池-3
第9章 多線程並發拓展講解
本章會對並發編程做些補充,但都貼近當前的面試,主要講解死鎖產生的條件及預防、多線程並發編程的最佳實踐、Spring與線程安全、以及面試都特別喜歡問的HashMap和ConcurrentMap源碼細節。當然,面試喜歡問的問題,對實際項目開發也是特別重要的。...
9-1 死鎖
9-2 並發最佳實踐
9-3 Spring與線程安全
9-4 HashMap與ConcurrentHashMap解析
9-5 多線程並發與線程安全總結
第10章 高並發之擴容思路
高並發部分:主講思路,側重面試,本章主要講擴容思路,首先介紹垂直擴容和水平擴容的區別,之後介紹數據庫讀操作擴展和寫操作擴展思路。
10-1 擴容思路講解
第11章 高並發之緩存思路
高並發部分:主講思路,本章講解高並發中緩存方案。包含對緩存特征(命中率、最大元素、清空策略)、影響緩存命中率因素、緩存分類和應用場景(本地緩存、分布式緩存)、高並發場景下緩存常見問題(緩存一致性、緩存並發、緩存穿透、雪崩)等的具體介紹。此外,針對大家常用的緩存組件Guava Cache、Memcache、Redis也做了...
11-1 緩存-特征、場景及組件介紹-1
11-2 緩存-特征、場景及組件介紹-2
11-3 緩存-redis的使用講解-1
11-4 緩存-redis的使用講解-2
11-5 緩存-高並發場景問題講解
第12章 高並發之消息隊列思路
高並發部分:主講思路,本章介紹了消息隊列的特性(業務無關、FIFO、容災、性能)、為什麽需要消息隊列以及消息隊列的好處(業務解耦、最終一致性、廣播、錯峰與流控),最後對當前比較流行的消息隊列組件kafka和rabbitmq做了架構分析和特性介紹,如需深入學習請移步:https://coding.imooc.com/class/262.html。...
12-1 消息隊列介紹-1
12-2 消息隊列介紹-2
12-3 消息隊列介紹-3
第13章 高並發之應用拆分思路
本章直接從實際項目拆分步驟講起,讓大家可以實際感受到應用拆分的好處和解決的問題,之後引出對應用拆分原則(業務優先、循序漸進、兼顧技術、可靠測試)和應用拆分時思考的內容(應用之間通信、應用之間數據庫設計、避免事務跨應用),並引出對服務化Dubbo和微服務Spring Cloud的框架介紹。...
13-1 應用拆分思路-1
13-2 應用拆分思路-2
第14章 高並發之應用限流思路
高並發部分:主講思路,本章從實際項目保存百萬數據的限流場景開始講起,讓大家感受一下某些高並發場景下使用限流和不使用限流的區別,明確限流的重要作用。之後詳細介紹了限流常用的四種算法:計數法、滑動窗口、漏桶算法和令牌桶算法,並對他們做了簡單的對比。...
14-1 應用限流思路-1
14-2 應用限流思路-2
14-3 應用限流思路-3
第15章 服務降級與服務熔斷思路
主講思路,本章首先通過舉例讓大家明白什麽是服務降級和服務熔斷,之後介紹了服務降級的分類:自動降級(超時、失敗次數、故障、限流)和人工降級(開關),總結了服務降級和服務熔斷的共性(目的、最終表現、粒度、自治)和區別(出發原因、管理目標層次、實現方式)以及服務降級要考慮的問題。最後介紹了Hystrix在服務降...
15-1 服務降級與服務熔斷思路-1
15-2 服務降級與服務熔斷思路-2
第16章 數據庫分庫分表與高可用手段
高並發部分:主講思路,本章從數據庫瓶頸開始講起,引出對數據庫切庫分庫分表的介紹。數據庫切庫裏重點介紹了讀寫分離的設計,對比支持多數據源和分庫的區別;最後介紹了什麽時候該考慮分表、橫向分表與縱向分表,以及通過mybatis的分頁插件shardbatis2.0實現數據庫分表。之後介紹了高可用的三個常用手段:任務調度系統分布...
16-1 數據庫切庫分庫分表思路
16-2 高可用一些手段
第17章 課程總結
本章首先對本課程的知識進行總結回顧,然後針對面試中的並發問題與高並發問題進行提問,希望大家都能有所收獲,並期待與大家共同探討並發與高並發的話題。
17-1 課程總結
下載地址:百度網盤下載
Java並發編程入門與高並發面試