【為什么要寫(xiě)這本書(shū)】
在當(dāng)下的互聯(lián)網(wǎng)系統(tǒng)開(kāi)發(fā)過(guò)程中,各種開(kāi)發(fā)工具和框架層出不窮,架構(gòu)體系也在不斷發(fā)展。無(wú)論微服務(wù)架構(gòu)還是中臺(tái)架構(gòu),背后都是一種分布式架構(gòu)?梢哉f(shuō),基于分布式架構(gòu)構(gòu)建的應(yīng)用程序無(wú)處不在。如何利用主流的分布式開(kāi)發(fā)工具和機(jī)制來(lái)滿(mǎn)足不斷變化的業(yè)務(wù)需求,已經(jīng)成為很多架構(gòu)師和開(kāi)發(fā)人員需要規(guī)劃和落實(shí)的一大課題。
想要設(shè)計(jì)并實(shí)現(xiàn)一個(gè)分布式系統(tǒng)并非易事,我們需要考慮一系列技術(shù)層面的問(wèn)題,比如:
如何深入理解分布式系統(tǒng)中各個(gè)技術(shù)組件的核心概念和設(shè)計(jì)思想?
如何選擇并高效使用目前市面上主流的分布式系統(tǒng)開(kāi)發(fā)框架?
如何快速分析和解決框架使用過(guò)程中的問(wèn)題?
如何基于這些框架做定制化的開(kāi)發(fā)以滿(mǎn)足差異化需求?
面對(duì)這些問(wèn)題,開(kāi)發(fā)人員一方面需要把握分布式系統(tǒng)涉及的核心技術(shù)組件,另一方面也需要對(duì)主流開(kāi)源框架的實(shí)現(xiàn)原理有深入的理解。本書(shū)的寫(xiě)作目的之一就是幫助廣大開(kāi)發(fā)人員解決這些問(wèn)題。
本書(shū)對(duì)分布式系統(tǒng)構(gòu)建過(guò)程中所涉及的一系列核心技術(shù)組件進(jìn)行了全面的闡述,這些技術(shù)組件包括網(wǎng)絡(luò)通信、遠(yuǎn)程調(diào)用、負(fù)載均衡、服務(wù)容錯(cuò)、服務(wù)降級(jí)、注冊(cè)中心、服務(wù)網(wǎng)關(guān)、配置中心、消息通信、動(dòng)態(tài)代理、應(yīng)用緩存、資源管理、框架集成和架構(gòu)模式等。在介紹這些技術(shù)組件時(shí),本書(shū)不僅給出了它們的設(shè)計(jì)思想和應(yīng)用方式,更為重要的是,還結(jié)合Dubbo、Spring Cloud和MyBatis等主流開(kāi)源框架的源代碼深入分析了它們的底層實(shí)現(xiàn)原理。
當(dāng)我們跟隨框架來(lái)學(xué)習(xí)分布式系統(tǒng)的技術(shù)組件時(shí),學(xué)習(xí)目標(biāo)并不只是掌握這些技術(shù)組件在具體某一個(gè)框架中的實(shí)現(xiàn)過(guò)程。因?yàn)榧夹g(shù)組件并不是只能應(yīng)用于某一個(gè)框架,而是也可以應(yīng)用于其他框架的類(lèi)似場(chǎng)景中,也就是說(shuō)技術(shù)組件是通用的,這點(diǎn)對(duì)分布式技術(shù)組件而言尤為明顯。通過(guò)系統(tǒng)學(xué)習(xí)本書(shū)所闡述的各個(gè)技術(shù)組件及其在具體框架中的實(shí)現(xiàn),開(kāi)發(fā)人員在面對(duì)各種框架時(shí)能做到觸類(lèi)旁通。這是本書(shū)的另一個(gè)目的。
同時(shí),本書(shū)還從技術(shù)面試角度出發(fā),系統(tǒng)講解了開(kāi)發(fā)人員應(yīng)該具備的面試技巧,并具體分析了圍繞上述各個(gè)技術(shù)組件所展開(kāi)的面試題,希望能夠幫助廣大開(kāi)發(fā)人員成功應(yīng)對(duì)與分布式系統(tǒng)相關(guān)的技術(shù)原理類(lèi)面試。
【讀者對(duì)象】
需要掌握各個(gè)分布式技術(shù)組件,想要將這些組件引入日常研發(fā)過(guò)程中的開(kāi)發(fā)人員。
對(duì)Dubbo、Spring Cloud、MyBatis 等框架有一定使用經(jīng)驗(yàn),想要將主流分布式框架更好地應(yīng)用到日常研發(fā)過(guò)程中的開(kāi)發(fā)人員。
想要進(jìn)一步理解主流分布式框架內(nèi)部實(shí)現(xiàn)原理的開(kāi)發(fā)人員。
需要應(yīng)對(duì)技術(shù)原理類(lèi)面試的開(kāi)發(fā)人員。
【本書(shū)特色】
本書(shū)從分布式系統(tǒng)技術(shù)組件的角度切入,深入剖析這些組件在Dubbo、Spring Cloud、MyBatis等主流分布式開(kāi)源框架中的實(shí)現(xiàn),并給出相應(yīng)的面試題。本書(shū)特色主要體現(xiàn)在如下5個(gè)方面。
1)本書(shū)體系化較強(qiáng),將分布式系統(tǒng)構(gòu)建過(guò)程中的核心技術(shù)點(diǎn)以及技術(shù)組件進(jìn)行了抽象和提煉,包括網(wǎng)絡(luò)通信、遠(yuǎn)程調(diào)用、負(fù)載均衡、服務(wù)容錯(cuò)、服務(wù)降級(jí)、注冊(cè)中心、服務(wù)網(wǎng)關(guān)、配置中心、消息通信、動(dòng)態(tài)代理、應(yīng)用緩存、資源管理、框架集成和架構(gòu)模式14個(gè)核心組件,這些技術(shù)組件都是在日常開(kāi)發(fā)過(guò)程中非常重要且實(shí)用的,也是在面試過(guò)程中會(huì)經(jīng)常遇到的。
2)本書(shū)具有創(chuàng)新性,針對(duì)市面上主流的開(kāi)源框架,提供了剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法,分別基于組件設(shè)計(jì)原則、架構(gòu)演進(jìn)過(guò)程、主流程、基礎(chǔ)架構(gòu)組成和可擴(kuò)展性設(shè)計(jì)這5個(gè)主題展開(kāi)講解。這些內(nèi)容可以為讀者提供方法論指導(dǎo),讓讀者高效學(xué)習(xí)其他各種開(kāi)源框架。
3)本書(shū)深入源碼和底層原理,通過(guò)追蹤Dubbo、Spring Cloud、MyBatis等主流分布式系統(tǒng)開(kāi)發(fā)框架的源碼,結(jié)合14個(gè)核心組件的設(shè)計(jì)理念和功能,剖析了框架的底層實(shí)現(xiàn)機(jī)制,讓讀者能從中掌握分布式系統(tǒng)開(kāi)發(fā)的精髓。
4)本書(shū)針對(duì)每個(gè)技術(shù)組件,結(jié)合筆者多年來(lái)作為面試官、面試者以及培訓(xùn)講師的經(jīng)驗(yàn),梳理了一組面試題。這些面試題大多來(lái)自阿里巴巴、京東、網(wǎng)易等公司,筆者結(jié)合自己的理解對(duì)其做出考點(diǎn)解析,并將框架源碼與面試題進(jìn)行融會(huì)貫通。
5)本書(shū)對(duì)技術(shù)人員如何實(shí)現(xiàn)自我成長(zhǎng)和如何高效應(yīng)對(duì)技術(shù)原理類(lèi)面試,給出了系統(tǒng)性的方法論,讓讀者不僅能夠應(yīng)對(duì)面試,還能夠把這本書(shū)作為學(xué)習(xí)的起點(diǎn),在未來(lái)更好地提升自己的技術(shù)水平。
【如何閱讀本書(shū)】
本書(shū)分為16章,其中第3章到第16章是主體內(nèi)容。在介紹分布式系統(tǒng)技術(shù)組件時(shí),每章采用技術(shù)概念和特性框架實(shí)現(xiàn)原理和源碼剖析面試題分析和解讀的三段式講解方式,即首先介紹技術(shù)組件自身的基本概念和特性,然后根據(jù)不同框架分析該技術(shù)組件的實(shí)現(xiàn)過(guò)程,最后通過(guò)面試題進(jìn)行總結(jié)。本書(shū)的詳細(xì)安排如下。
第1章是關(guān)于分布式系統(tǒng)的概述,涉及核心技術(shù)設(shè)計(jì)要求、技術(shù)組件、主流開(kāi)發(fā)套件和技術(shù)面試要求等。
第2章介紹剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法,分別基于組件設(shè)計(jì)原則、架構(gòu)演進(jìn)過(guò)程、主流程、基礎(chǔ)架構(gòu)組成和可擴(kuò)展性設(shè)計(jì)來(lái)展開(kāi)講解。
第3章介紹網(wǎng)絡(luò)通信,包括基本概念、Dubbo服務(wù)器端通信原理和客戶(hù)端通信原理,以及面試題解析。
第4章介紹遠(yuǎn)程調(diào)用,包括服務(wù)發(fā)布和引用的過(guò)程、Dubbo中遠(yuǎn)程調(diào)用的實(shí)現(xiàn)原理,以及面試題解析。
第5章介紹負(fù)載均衡,包括基本原理講解、Dubbo和Spring Cloud中負(fù)載均衡的實(shí)現(xiàn)原理分析,以及面試題解析。
第6章介紹服務(wù)容錯(cuò),包括服務(wù)容錯(cuò)的設(shè)計(jì)思想、Dubbo中集群容錯(cuò)和Spring Cloud中服務(wù)熔斷的實(shí)現(xiàn)原理,以及面試題解析。
第7章介紹服務(wù)降級(jí),包括服務(wù)降級(jí)策略講解、Dubbo和Spring Cloud中服務(wù)降級(jí)的實(shí)現(xiàn)原理分析,以及面試題解析。
第8章介紹注冊(cè)中心,包括服務(wù)注冊(cè)和發(fā)現(xiàn)、Dubbo和Spring Cloud中注冊(cè)中心的實(shí)現(xiàn)原理分析,以及面試題解析。
第9章介紹服務(wù)網(wǎng)關(guān),包括核心概念、響應(yīng)式網(wǎng)關(guān)Spring Cloud Gateway的工作原理分析,以及面試題解析。
第10章介紹配置中心,包括基本模型、Spring Cloud Config工作機(jī)制、Spring Cloud Config配置信息更新的實(shí)現(xiàn)原理,以及面試題解析。
第11章介紹消息通信,包括基礎(chǔ)知識(shí)、從Spring Messaging到Spring Cloud Stream的流程、Spring Cloud Stream整合消息中間件的實(shí)現(xiàn)機(jī)制,以及面試題解析。
第12章介紹動(dòng)態(tài)代理,包括代理模式和類(lèi)型、Dubbo遠(yuǎn)程訪問(wèn)和MyBatis數(shù)據(jù)訪問(wèn)中代理機(jī)制的實(shí)現(xiàn)原理,以及面試題解析。
第13章介紹應(yīng)用緩存,包括緩存的設(shè)計(jì)策略講解、MyBatis一級(jí)緩存和二級(jí)緩存的實(shí)現(xiàn)原理分析,以及面試題解析。
第14章介紹資源管理,包括資源管理和資源池、MyBatis中數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)原理,以及面試題解析。
第15章介紹框架集成,包括Spring中的啟動(dòng)擴(kuò)展點(diǎn)、Spring Boot自動(dòng)配置機(jī)制、Dubbo和MyBatis框架集成的實(shí)現(xiàn)原理,以及面試題解析。
第16章介紹架構(gòu)模式,包括概念與應(yīng)用概述、微內(nèi)核模式和管道-過(guò)濾器模式及其應(yīng)用分析,以及面試題解析。
前言
第1章 認(rèn)識(shí)分布式系統(tǒng)1
1.1 分布式系統(tǒng)概述1
1.1.1 從單塊系統(tǒng)到分布式系統(tǒng)1
1.1.2 分布式系統(tǒng)的基本特性3
1.1.3 分布式系統(tǒng)和微服務(wù)架構(gòu)4
1.2 分布式系統(tǒng)的核心設(shè)計(jì)要求6
1.2.1 性能6
1.2.2 可用性6
1.2.3 可擴(kuò)展性6
1.2.4 服務(wù)治理7
1.3 分布式系統(tǒng)開(kāi)發(fā)技術(shù)組件7
1.3.1 遠(yuǎn)程過(guò)程調(diào)用組件8
1.3.2 微服務(wù)構(gòu)建組件10
1.3.3 通用技術(shù)組件13
1.4 分布式系統(tǒng)的主流開(kāi)發(fā)套件15
1.4.1 Spring Boot15
1.4.2 Spring Cloud18
1.4.3 Dubbo18
1.4.4 MyBatis19
1.5 分布式系統(tǒng)面試題解析19
1.6 本章小結(jié)20
第2章 剖析框架代碼結(jié)構(gòu)的系統(tǒng)方法22
2.1 基于組件設(shè)計(jì)原則剖析代碼結(jié)構(gòu)23
2.1.1 為什么代碼結(jié)構(gòu)要這么設(shè)計(jì)23
2.1.2 組件設(shè)計(jì)原則與量化標(biāo)準(zhǔn)24
2.1.3 組件設(shè)計(jì)原則與代碼結(jié)構(gòu):
Dubbo與MyBatis28
2.1.4 循環(huán)依賴(lài)及其消除方法31
2.2 基于架構(gòu)演進(jìn)過(guò)程剖析代碼結(jié)構(gòu)39
2.2.1 如何從易到難對(duì)框架進(jìn)行
逐步拆解39
2.2.2 Dubbo的架構(gòu)演進(jìn)過(guò)程40
2.3 基于主流程剖析代碼結(jié)構(gòu)46
2.3.1 如何抓住主流程并對(duì)框架
進(jìn)行分層剖析46
2.3.2 MyBatis中的主流程46
2.4 基于基礎(chǔ)架構(gòu)組成剖析代碼結(jié)構(gòu)54
2.4.1 如何從基礎(chǔ)架構(gòu)擴(kuò)展到
具體實(shí)現(xiàn)框架54
2.4.2 RPC基礎(chǔ)架構(gòu)54
2.4.3 從RPC基礎(chǔ)架構(gòu)擴(kuò)展到
Dubbo框架61
2.5 基于可擴(kuò)展性設(shè)計(jì)剖析代碼結(jié)構(gòu)65
2.5.1 如何在框架中預(yù)留可擴(kuò)展點(diǎn)65
2.5.2 常見(jiàn)的可擴(kuò)展性設(shè)計(jì)方法66
2.5.3 MyBatis TypeHandler機(jī)制68
2.6 剖析框架代碼結(jié)構(gòu)面試題解析72
2.7 本章小結(jié)73
第3章 網(wǎng)絡(luò)通信74
3.1 網(wǎng)絡(luò)通信與Dubbo框架74
3.1.1 網(wǎng)絡(luò)通信基本概念74
3.1.2 Dubbo中的網(wǎng)絡(luò)通信組件77
3.2 Dubbo服務(wù)器端通信原理77
3.2.1 服務(wù)器端Exchange77
3.2.2 服務(wù)器端Transport82
3.2.3 服務(wù)器端Serialize84
3.3 Dubbo客戶(hù)端通信原理87
3.4 網(wǎng)絡(luò)通信面試題解析89
3.5 本章小結(jié)90
第4章 遠(yuǎn)程調(diào)用91
4.1 服務(wù)發(fā)布和引用92
4.1.1 如何發(fā)布遠(yuǎn)程服務(wù)92
4.1.2 如何引用遠(yuǎn)程服務(wù)93
4.2 Dubbo中的遠(yuǎn)程調(diào)用94
4.2.1 Dubbo服務(wù)發(fā)布流程94
4.2.2 Dubbo服務(wù)引用流程101
4.3 遠(yuǎn)程調(diào)用面試題解析109
4.4 本章小結(jié)110
第5章 負(fù)載均衡112
5.1 負(fù)載均衡基本原理112
5.1.1 負(fù)載均衡的類(lèi)型113
5.1.2 負(fù)載均衡算法和策略114
5.2 Dubbo中的負(fù)載均衡116
5.2.1 Dubbo負(fù)載均衡整體結(jié)構(gòu)116
5.2.2 Dubbo負(fù)載均衡策略118
5.3 Spring Cloud中的負(fù)載均衡120
5.3.1 Netflix Ribbon核心機(jī)制120
5.3.2 Netflix Ribbon負(fù)載均衡策略122
5.3.3 Spring Cloud Netflix Ribbon
實(shí)現(xiàn)原理124
5.4 負(fù)載均衡面試題解析127
5.5 本章小結(jié)128
第6章 服務(wù)容錯(cuò)129
6.1 服務(wù)容錯(cuò)設(shè)計(jì)思想129
6.1.1 服務(wù)消費(fèi)者容錯(cuò)129
6.1.2 服務(wù)容錯(cuò)策略130
6.2 Dubbo中的集群容錯(cuò)132
6.2.1 Dubbo中的集群133
6.2.2 Dubbo中的容錯(cuò)機(jī)制134
6.3 Spring Cloud中的服務(wù)熔斷136
6.3.1 Spring Cloud Circuit Breaker137
6.3.2 Hystrix熔斷機(jī)制139
6.4 服務(wù)容錯(cuò)面試題解析147
6.5 本章小結(jié)148
第7章 服務(wù)降級(jí)149
7.1 服務(wù)降級(jí)策略149
7.1.1 服務(wù)分級(jí)149
7.1.2 服務(wù)回退150
7.2 Dubbo中的服務(wù)降級(jí)151
7.2.1 Dubbo中的Mock機(jī)制151
7.2.2 MockInvoker和Mock-
ClusterInvoker152
7.3 Spring Cloud中的服務(wù)降級(jí)154
7.3.1 Spring Cloud中的回退機(jī)制154
7.3.2 基于攔截器實(shí)現(xiàn)回退156
7.4 服務(wù)降級(jí)面試題解析158
7.5 本章小結(jié)159
第8章 注冊(cè)中心160
8.1 服務(wù)注冊(cè)和發(fā)現(xiàn)160
8.1.1 注冊(cè)中心模型160
8.1.2 注冊(cè)中心實(shí)現(xiàn)工具163
8.2 Dubbo中的注冊(cè)中心163
8.2.1 Dubbo注冊(cè)中心模型163
8.2.2 ZooKeeper基本原理與
操作方式164
8.2.3 ZooKeeper注冊(cè)中心實(shí)現(xiàn)過(guò)程166
8.3 Spring Cloud中的注冊(cè)中心172
8.3.1 Eureka注冊(cè)中心模型172
8.3.2 Eureka服務(wù)器端基本原理173
8.3.3 Eureka客戶(hù)端基本原理178
8.4 注冊(cè)中心面試題解析184
8.5 本章小結(jié)185
第9章 服務(wù)網(wǎng)關(guān)186
9.1 服務(wù)網(wǎng)關(guān)的核心概念187
9.1.1 服務(wù)網(wǎng)關(guān)的作用187
9.1.2 服務(wù)網(wǎng)關(guān)的結(jié)構(gòu)和功能188
9.2 Spring Cloud Gateway工作原理188
9.2.1 響應(yīng)式編程概述189
9.2.2 Spring Cloud Gateway架構(gòu)192
9.2.3 路由和過(guò)濾器194
9.3 服務(wù)網(wǎng)關(guān)面試題解析204
9.4 本章小結(jié)205
第10章 配置中心206
10.1 配置中心基本模型207
10.1.1 配置中心與微服務(wù)架構(gòu)207
10.1.2 配置中心實(shí)現(xiàn)工具208
10.2 Spring Cloud Config工作機(jī)制209
10.2.1 Spring Cloud Config Server
工作機(jī)制209
10.2.2 Spring Cloud Config Client
工作機(jī)制213
10.3 Spring Cloud Config配置信息更新218
10.3.1 Spring Cloud Config客戶(hù)端
更新策略218
10.3.2 配置信息熱更新機(jī)制219
10.4 配置中心面試題解析223
10.5 本章小結(jié)225
第11章 消息通信226
11.1 事件驅(qū)動(dòng)和消息通信226
11.1.1 事件驅(qū)動(dòng)架構(gòu)的需求226
11.1.2 消息通信機(jī)制和消息中間件228
11.1.3 基于消息通信機(jī)制的系統(tǒng)
集成方法229
11.2 從Spring Messaging到
Spring Cloud Stream230
11.2.1 Spring Messaging和
Spring Integration 231
11.2.2 Spring Cloud Stream中的
Spring Integration233
11.2.3 Spring Cloud Stream基本架構(gòu)234
11.3 Spring Cloud Stream整合
消息中間件235
11.3.1 Spring Cloud Stream
發(fā)送和接收消息235
11.3.2 RabbitMQ發(fā)送和接收消息242
11.4 消息通信面試題解析245
11.5 本章小結(jié)246
第12章 動(dòng)態(tài)代理247
12.1 代理模式和類(lèi)型247
12.1.1 靜態(tài)代理機(jī)制248
12.1.2 動(dòng)態(tài)代理機(jī)制249
12.2 Dubbo遠(yuǎn)程訪問(wèn)中的代理機(jī)制252
12.2.1 ProxyFactory252
12.2.2 JdkProxyFactory253
12.3 MyBatis數(shù)據(jù)訪問(wèn)中的代理機(jī)制254
12.3.1 Mapper和動(dòng)態(tài)代理254
12.3.2 延遲加載和動(dòng)態(tài)代理258
12.4 動(dòng)態(tài)代理面試題解析260
12.5 本章小結(jié)261
第13章 應(yīng)用緩存263
13.1 應(yīng)用緩存的設(shè)計(jì)策略263
13.1.1 經(jīng)典緩存分層架構(gòu)263
13.1.2 應(yīng)用緩存的分級(jí)模式264
13.2 MyBatis一級(jí)緩存264
13.2.1 Cache264
13.2.2 PerpetualCache265
13.2.3 一級(jí)緩存與BaseExecutor268
13.3 MyBatis二級(jí)緩存271
13.3.1 CacheBuilder271
13.3.2 二級(jí)緩存與CachingExecutor274
13.4 應(yīng)用緩存面試題解析277
13.5 本章小結(jié)278
第14章 資源管理279
14.1 資源管理和資源池279
14.1.1 資源池模型279
14.1.2 資源池實(shí)現(xiàn)示例280
14.2 MyBatis中的數(shù)據(jù)庫(kù)連接池282
14.2.1 連接池的工作流程和
核心要素283
14.2.2 Connection對(duì)象獲取過(guò)程284
14.2.3 PooledDataSource285
14.2.4 UnpooledDataSource289
14.3 資源管理面試題解析290
14.4 本章小結(jié)291
第15章 框架集成292
15.1 Spring中的啟動(dòng)擴(kuò)展點(diǎn)292
15.1.1 InitializingBean和
DisposableBean292
15.1.2 BeanPostProcessor295
15.1.3 Aware296
15.1.4 ApplicationListener299
15.2 Spring自定義標(biāo)簽體系305
15.2.1 標(biāo)簽擴(kuò)展時(shí)機(jī)305
15.2.2 標(biāo)簽擴(kuò)展的開(kāi)發(fā)流程305
15.3 Spring Boot自動(dòng)配置310
15.4 Dubbo的框架集成312
15.4.1 Dubbo啟動(dòng)機(jī)制313
15.4.2 Dubbo自定義配置標(biāo)簽319
15.5 MyBatis的框架集成320
15.5.1 MyBatis-Spring啟動(dòng)過(guò)程320
15.5.2 MyBatis-Spring-Boot-Starter326
15.6 框架集成面試題解析329
15.7 本章小結(jié)331
第16章 架構(gòu)模式332
16.1 架構(gòu)模式與應(yīng)用332
16.1.1 模式的概念和分類(lèi)332
16.1.2 基于架構(gòu)模式把握框架
設(shè)計(jì)思想333
16.2 微內(nèi)核模式及其應(yīng)用334
16.2.1 微內(nèi)核模式和插件化系統(tǒng)334
16.2.2 微內(nèi)核模式的基本實(shí)現(xiàn):
SPI機(jī)制336
16.2.3 微內(nèi)核模式在Dubbo
中的應(yīng)用339
16.2.4 Dubbo中的擴(kuò)展點(diǎn)344
16.3 管道-過(guò)濾器模式及其應(yīng)用346
16.3.1 管道-過(guò)濾器模式簡(jiǎn)介346
16.3.2 管道-過(guò)濾器模式在
Dubbo中的應(yīng)用351
16.3.3 管道-過(guò)濾器模式在MyBatis
中的應(yīng)用354
16.4 架構(gòu)模式面試題解析360
16.5 本章小結(jié)362