架構(gòu)設(shè)計(jì)師上午題:近四次真題考點(diǎn)與解題套路復(fù)盤)
最近刷了粉筆、軟考通、各種回憶版把最近四次的系統(tǒng)架構(gòu)設(shè)計(jì)師上午題翻來(lái)覆去對(duì)比了好幾遍。我發(fā)現(xiàn)一個(gè)很有意思的現(xiàn)象很多人覺(jué)得“綜合知識(shí)”就是純背考點(diǎn)但架構(gòu)相關(guān)的題目命題人其實(shí)一直在用有限的題量考你“架構(gòu)思維”。上午題里架構(gòu)這一塊已經(jīng)從“這叫不叫某種架構(gòu)風(fēng)格”演進(jìn)成“給你一堆業(yè)務(wù)約束你得判斷該選哪種架構(gòu)甚至能看到某個(gè)決策帶來(lái)的連鎖代價(jià)”。這篇文章不聊泛泛的備考大道理就聊我自己從近四次真題里扒出來(lái)的架構(gòu)考點(diǎn)分布、高頻知識(shí)點(diǎn)、三類典型題目的解題套路以及我踩過(guò)的坑。適合正在備考系分、對(duì)“架構(gòu)綜合知識(shí)”還停留在死記硬背階段的朋友參考也適合想從真題中找命題規(guī)律的老考生一起交流。1. 近四次真題里架構(gòu)綜合知識(shí)到底考了什么1.1 從“四張卷子”里數(shù)出來(lái)的考點(diǎn)分布我把近四次的上午題綜合知識(shí)全部過(guò)了一遍凡是涉及到“架構(gòu)”二字的、以及有明顯架構(gòu)決策背景的題都摘了出來(lái)。統(tǒng)計(jì)下來(lái)每次考試架構(gòu)相關(guān)題目穩(wěn)定在8到12道之間占比大概是綜合知識(shí)總數(shù)的14%到20%。這個(gè)比例不算低而且近幾年明顯比“操作系統(tǒng)”“數(shù)據(jù)庫(kù)”這些傳統(tǒng)大科目更穩(wěn)定。具體到考點(diǎn)大致可以分為四類考點(diǎn)板塊出現(xiàn)頻次典型出題方式架構(gòu)風(fēng)格與架構(gòu)決策每次必考2-4題給場(chǎng)景選風(fēng)格、判斷風(fēng)格特點(diǎn)分布式架構(gòu)與CAP/BASE每次必考2-3題CAP組合選擇、一致性級(jí)別判斷微服務(wù)、容器、云原生頻次上升2-3題微服務(wù)拆分、服務(wù)網(wǎng)格、容器編排架構(gòu)評(píng)估與質(zhì)量屬性每?jī)纱沃辽俪霈F(xiàn)一次ATAM、質(zhì)量場(chǎng)景、權(quán)衡點(diǎn)除了這四類還會(huì)零星出現(xiàn)“架構(gòu)視圖”“架構(gòu)描述語(yǔ)言ADL”“軟件復(fù)用與產(chǎn)品線架構(gòu)”等題目但頻率不高。比較意外的是最近四次里純粹的“架構(gòu)風(fēng)格定義”類題目在減少取而代之的是“將某兩種風(fēng)格混合使用”或“在某種風(fēng)格中識(shí)別潛在問(wèn)題”這類題。這說(shuō)明命題人不太在意你是不是能背出“批處理風(fēng)格數(shù)據(jù)驅(qū)動(dòng)”這種口訣更在意你能不能判斷出“這個(gè)業(yè)務(wù)場(chǎng)景用管道-過(guò)濾器是否合適”。1.2 考點(diǎn)變化背后的三條主線近四次真題看下來(lái)架構(gòu)知識(shí)的變化有三條很清晰的主線。第一條主線是“從靜態(tài)結(jié)構(gòu)轉(zhuǎn)向運(yùn)行時(shí)行為”。早幾年的題喜歡給你一張分層架構(gòu)圖問(wèn)各層職責(zé)現(xiàn)在更多是問(wèn)你“當(dāng)出現(xiàn)某個(gè)事件時(shí)事件驅(qū)動(dòng)架構(gòu)中各個(gè)組件如何協(xié)作”。你光記住“事件驅(qū)動(dòng)有事件總線”沒(méi)用還得理解“事件順序”“異步回推”這些行為特征。第二條主線是“從單體架構(gòu)轉(zhuǎn)向分布式復(fù)雜度”。CAP、BASE、分布式事務(wù)、最終一致性這幾年頻繁出現(xiàn)而且考的越來(lái)越細(xì)。比如有一道題直接給了三個(gè)數(shù)據(jù)分片策略要求你判斷哪個(gè)策略能滿足“查詢延遲低于200ms”的約束這已經(jīng)不是簡(jiǎn)單的概念記憶了需要你把一致性、可用性、分區(qū)容錯(cuò)性放到具體場(chǎng)景里做取舍。第三條主線是“從技術(shù)名詞轉(zhuǎn)向架構(gòu)決策成本”。最典型的是微服務(wù)相關(guān)題不再問(wèn)“微服務(wù)有哪些好處”反而問(wèn)“把一個(gè)單體拆成微服務(wù)后還要額外引入哪些治理能力”或者“為什么有些場(chǎng)景明明用了微服務(wù)反而建議先合并服務(wù)”。這其實(shí)是架構(gòu)師日常做技術(shù)決策時(shí)真正會(huì)糾結(jié)的事。2. 高頻架構(gòu)考點(diǎn)逐個(gè)拆解2.1 架構(gòu)風(fēng)格與架構(gòu)決策年年都在“變著花樣”考架構(gòu)風(fēng)格這塊坦白講是性價(jià)比最高的得分區(qū)。因?yàn)榭键c(diǎn)非常集中攏共就那么十幾種風(fēng)格翻來(lái)覆去考。但最近幾次真題有一個(gè)新趨勢(shì)它喜歡把兩種風(fēng)格放在一起比較或者給你一個(gè)混合架構(gòu)讓你判斷。比如有一道題我印象很深場(chǎng)景是“一個(gè)數(shù)據(jù)處理流水線要求每個(gè)處理步驟都能獨(dú)立替換且數(shù)據(jù)在步驟間流轉(zhuǎn)時(shí)都要落盤”。四個(gè)選項(xiàng)分別是管道-過(guò)濾器、倉(cāng)庫(kù)風(fēng)格、事件驅(qū)動(dòng)、客戶-服務(wù)器。很多人一看“數(shù)據(jù)處理流水線”就直接選管道-過(guò)濾器但題目里加了“每個(gè)處理步驟都能獨(dú)立替換”和“落盤”兩個(gè)約束。管道-過(guò)濾器確實(shí)支持獨(dú)立替換步驟但“落盤”這個(gè)動(dòng)作不是管道-過(guò)濾器風(fēng)格的強(qiáng)項(xiàng)反而是倉(cāng)庫(kù)風(fēng)格里“數(shù)據(jù)統(tǒng)一存儲(chǔ)、處理工具獨(dú)立”的典型特征。所以正確答案更傾向倉(cāng)庫(kù)風(fēng)格。這個(gè)例子想說(shuō)明什么命題人考的不是“你能報(bào)出風(fēng)格名字”而是“你能把風(fēng)格的特征和場(chǎng)景約束精準(zhǔn)對(duì)應(yīng)”。我的應(yīng)對(duì)策略是給自己做一個(gè)“風(fēng)格決策表”按照數(shù)據(jù)形態(tài)、控制方式、交互模式三個(gè)維度歸納每種風(fēng)格。表格比口訣管用因?yàn)榭荚嚂r(shí)你是拿場(chǎng)景特征去匹配不是拿名字去做排除法。還有一點(diǎn)容易丟分關(guān)于“架構(gòu)風(fēng)格組合”的題。題目會(huì)說(shuō)“某系統(tǒng)既希望保留分層架構(gòu)的模塊度又希望具備事件驅(qū)動(dòng)的響應(yīng)性”問(wèn)你這是什么風(fēng)格。答案可能是“分層事件驅(qū)動(dòng)”的混合架構(gòu)。這類題要求你能識(shí)別“主風(fēng)格輔助風(fēng)格”不能死認(rèn)一種風(fēng)格。2.2 分布式架構(gòu)與CAP、BASE不只是背誦分布式這塊近四次真題幾乎每場(chǎng)必考CAP但考法越來(lái)越套路化。核心就三種給你一個(gè)系統(tǒng)問(wèn)你它在分區(qū)發(fā)生時(shí)是?!翱捎眯浴边€是?!耙恢滦浴苯o你一個(gè)分布式數(shù)據(jù)庫(kù)的配置問(wèn)它屬于CP還是AP給你一個(gè)業(yè)務(wù)場(chǎng)景要求你判斷“最終一致性是否可接受”。記憶CAP定理本身不難難的是做題時(shí)的“條件反射”。我復(fù)盤錯(cuò)題時(shí)發(fā)現(xiàn)自己經(jīng)常忽略“分區(qū)P”這個(gè)隱含條件。很多系統(tǒng)在設(shè)計(jì)時(shí)根本沒(méi)有分區(qū)發(fā)生所以CAP退化成“在一致性和可用性之間做選擇”但考試題目里往往會(huì)暗示“網(wǎng)絡(luò)故障時(shí)”或“機(jī)房斷網(wǎng)”等場(chǎng)景此時(shí)P是必須的只能在C和A里二選一??辞暹@個(gè)前提再做選擇就穩(wěn)了一半。BASE理論這幾年也常出現(xiàn)在選項(xiàng)里但它經(jīng)常作為“最終一致性”的解釋出現(xiàn)。你可以這樣理解BASE不是讓你放棄一致性而是讓你接受“在一段時(shí)間內(nèi)數(shù)據(jù)可能不一致但最終會(huì)收斂”。真題里有一道關(guān)于“購(gòu)物車庫(kù)存扣減”的選擇題問(wèn)哪個(gè)方案屬于BASE思想正確答案是“先把訂單創(chuàng)建成功庫(kù)存允許超賣后臺(tái)再逐漸對(duì)賬并校正”。這種題就是考你有沒(méi)有“最終一致性”的容忍度思維。分布式事務(wù)也是近四次里反復(fù)出現(xiàn)的考點(diǎn)。兩階段提交2PC、三階段提交3PC、本地消息表、事務(wù)消息這幾種方案要能說(shuō)清楚應(yīng)用場(chǎng)景。我個(gè)人建議重點(diǎn)理解“為什么2PC有同步阻塞問(wèn)題”因?yàn)檎骖}很喜歡把“性能低”“引入額外協(xié)調(diào)者”這些缺陷混在選項(xiàng)里。2.3 微服務(wù)、容器與云原生分?jǐn)?shù)占比明顯上升近四次真題里微服務(wù)相關(guān)題目的分?jǐn)?shù)占比肉眼可見在上升。但你會(huì)發(fā)現(xiàn)它考的微服務(wù)不是“Spring Cloud有哪些組件”這種框架題而是“微服務(wù)拆分的最佳實(shí)踐”和“微服務(wù)架構(gòu)下引入的新問(wèn)題”。有一道題很典型給了四個(gè)拆分微服務(wù)的方案要求選出哪個(gè)是合理的。A是“按代碼行數(shù)拆分避免單個(gè)服務(wù)代碼量太大”B是“按業(yè)務(wù)能力拆分每個(gè)服務(wù)圍繞一個(gè)業(yè)務(wù)域”C是“按數(shù)據(jù)庫(kù)表拆分每張表對(duì)應(yīng)一個(gè)服務(wù)”D是“按團(tuán)隊(duì)人數(shù)拆分每人負(fù)責(zé)一個(gè)服務(wù)”。正確答案顯然是B。這道題其實(shí)是考領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)里的“限界上下文”思想但命題人沒(méi)有拋出生僻術(shù)語(yǔ)而是把它包裝成業(yè)務(wù)場(chǎng)景。除了拆分微服務(wù)的“副作用”也常被拿來(lái)當(dāng)考點(diǎn)。比如“服務(wù)發(fā)現(xiàn)”“配置中心”“鏈路追蹤”“熔斷限流”這些治理組件對(duì)應(yīng)的場(chǎng)景是服務(wù)多了調(diào)用關(guān)系復(fù)雜故障容易擴(kuò)散。真題會(huì)問(wèn)“當(dāng)某個(gè)下游服務(wù)出現(xiàn)超時(shí)為了保護(hù)系統(tǒng)整體可用性你會(huì)優(yōu)先采用以下哪個(gè)機(jī)制”這是典型熔斷器的應(yīng)用場(chǎng)景。容器和云原生在最近的四次考試中出現(xiàn)頻率增加。Docker、Kubernetes雖然一般只考1到2題但難度逐漸從“容器是什么”變成“Kubernetes中某個(gè)組件的作用”。有一道題問(wèn)的是“Pod的重新調(diào)度由哪個(gè)組件負(fù)責(zé)”答案是控制器Controller Manager不是Scheduler。這類題考察的是你有沒(méi)有真正接觸過(guò)容器編排而不是背了概念就完事。如果你是純理論型考生我建議至少把Kubernetes的核心組件API Server、Controller Manager、Scheduler、Kubelet職責(zé)捋一遍尤其是它們之間誰(shuí)負(fù)責(zé)“保證期望狀態(tài)”和“分配節(jié)點(diǎn)”的區(qū)別。近幾年“服務(wù)網(wǎng)格”這個(gè)概念也進(jìn)入了真題雖然頻次還不高但出現(xiàn)過(guò)“為什么引入服務(wù)網(wǎng)格”的題。核心答案就是“把流量管理、安全、可觀測(cè)性從業(yè)務(wù)代碼中剝離出來(lái)下沉到基礎(chǔ)設(shè)施層”。記住“下沉”“非侵入”兩個(gè)關(guān)鍵詞基本能應(yīng)付。2.4 架構(gòu)評(píng)估與ATAM案例分析題里的“??汀鄙衔珙}里架構(gòu)評(píng)估的出題量不算大經(jīng)常是1到2題但它跟下午案例分析的關(guān)系非常密切。ATAM架構(gòu)權(quán)衡分析方法幾乎是必考術(shù)語(yǔ)但上午題一般不讓你寫步驟而是讓你判斷某個(gè)場(chǎng)景屬于“質(zhì)量屬性場(chǎng)景”的哪個(gè)部分。質(zhì)量屬性場(chǎng)景有六個(gè)要素刺激源、刺激、環(huán)境、制品、響應(yīng)、響應(yīng)度量。真題會(huì)給你一段描述比如“當(dāng)系統(tǒng)出現(xiàn)1000個(gè)并發(fā)用戶請(qǐng)求時(shí)在正常網(wǎng)絡(luò)環(huán)境下登錄模塊需要在3秒內(nèi)完成認(rèn)證”然后問(wèn)你其中“1000個(gè)并發(fā)用戶請(qǐng)求”屬于哪部分。這是“刺激”而不是“環(huán)境”因?yàn)樗怯|發(fā)系統(tǒng)作出響應(yīng)的事件。這個(gè)區(qū)分特別容易錯(cuò)我的經(jīng)驗(yàn)是“環(huán)境”描述的是系統(tǒng)運(yùn)行時(shí)的上下文比如“正常網(wǎng)絡(luò)環(huán)境”“系統(tǒng)處于峰值狀態(tài)”而“刺激”是直接作用到系統(tǒng)上的事件。ATAM里還有一個(gè)高頻術(shù)語(yǔ)叫“權(quán)衡點(diǎn)”。真題可能會(huì)問(wèn)“某個(gè)架構(gòu)決策影響了多個(gè)質(zhì)量屬性這個(gè)決策應(yīng)該被稱為什么”答案就是權(quán)衡點(diǎn)。它同時(shí)影響可修改性和性能這類題目考查的其實(shí)是“架構(gòu)決策有代價(jià)”的意識(shí)。3. 三類典型真題的解題思路實(shí)錄3.1 情境題如何根據(jù)非功能性需求選架構(gòu)風(fēng)格近四次真題里情景題占比越來(lái)越高。這類題通常給你一個(gè)業(yè)務(wù)系統(tǒng)描述幾個(gè)技術(shù)約束讓你選最適合的架構(gòu)風(fēng)格。我總結(jié)了一個(gè)四步解題法實(shí)測(cè)正確率提升明顯。第一步圈出題目中所有的非功能性需求比如“并發(fā)量達(dá)到每秒5萬(wàn)”“請(qǐng)求延遲不高于300ms”“系統(tǒng)需要支持快速迭代”“需要與第三方系統(tǒng)集成”。這些詞后面再熟悉也容易忽略。第二步把每個(gè)風(fēng)格的關(guān)鍵特征和這些需求逐一比對(duì)。比如“并發(fā)量大”更可能匹配事件驅(qū)動(dòng)或微服務(wù)“快速迭代”更可能匹配分層或微服務(wù)“數(shù)據(jù)驅(qū)動(dòng)處理流程”更可能匹配管道-過(guò)濾器。第三步排除明顯矛盾的選項(xiàng)。比如場(chǎng)景是“一個(gè)保險(xiǎn)理賠流程每個(gè)環(huán)節(jié)有嚴(yán)格的順序”這時(shí)候你用“事件驅(qū)動(dòng)”就不合適因?yàn)槭录?qū)動(dòng)在嚴(yán)格流程控制上是弱項(xiàng)。第四步如果剩余兩個(gè)選項(xiàng)都可行看題干中有沒(méi)有“增加某個(gè)新處理步驟時(shí)”之類的擴(kuò)展性表述。如果有優(yōu)先選“管道-過(guò)濾器”或“微服務(wù)”這類擅長(zhǎng)擴(kuò)展的風(fēng)格如果有“數(shù)據(jù)格式統(tǒng)一且需要多個(gè)工具同時(shí)處理數(shù)據(jù)”則選“倉(cāng)庫(kù)風(fēng)格”。這套方法不保證每道題都對(duì)但能把正確率從“憑感覺(jué)”提到“有邏輯”。3.2 計(jì)算題CAP選型與一致性級(jí)別的判斷最近四次的綜合知識(shí)里出現(xiàn)了好幾道“偽計(jì)算題”。為什么叫偽計(jì)算因?yàn)橛?jì)算量不大但需要根據(jù)約束條件推邏輯。典型的是給你一個(gè)分布式存儲(chǔ)系統(tǒng)配置問(wèn)你它的CAP類型。做題的關(guān)鍵是把系統(tǒng)描述拆成三條線。第一條線看“是否需要分區(qū)容錯(cuò)性”幾乎所有分布式系統(tǒng)都滿足P所以通常一條腿已經(jīng)站定。第二條線看系統(tǒng)在分區(qū)發(fā)生時(shí)的行為。如果描述中出現(xiàn)“優(yōu)先保證可用性允許各節(jié)點(diǎn)短暫返回舊數(shù)據(jù)”則選擇AP如果描述中出現(xiàn)“寧可拒絕服務(wù)也不返回不一致的數(shù)據(jù)”則選擇CP。第三條線如果題目問(wèn)“某個(gè)具體操作的一致性級(jí)別”你還需要區(qū)分強(qiáng)一致、弱一致、最終一致。強(qiáng)一致對(duì)應(yīng)“線性一致性”或“可串行化”最終一致對(duì)應(yīng)“允許短暫差異后續(xù)同步”。這里有個(gè)容易踩的坑很多人看到“最終一致”就覺(jué)得系統(tǒng)是AP其實(shí)一致性級(jí)別和CAP分類不是嚴(yán)格一一對(duì)應(yīng)。CP系統(tǒng)在正常運(yùn)行時(shí)也可以提供強(qiáng)一致AP系統(tǒng)在無(wú)分區(qū)發(fā)生時(shí)也可能人為配置強(qiáng)一致。所以做題要看清問(wèn)的是“分區(qū)發(fā)生時(shí)”還是“正常狀態(tài)下”。還有一道跟“數(shù)據(jù)分片”相關(guān)的題也很典型。場(chǎng)景是“一個(gè)訂單數(shù)據(jù)庫(kù)按照用戶ID的哈希值分到4個(gè)節(jié)點(diǎn)同時(shí)每個(gè)節(jié)點(diǎn)內(nèi)復(fù)制3份副本”然后問(wèn)你“當(dāng)其中一個(gè)副本節(jié)點(diǎn)宕機(jī)時(shí)該分片的讀請(qǐng)求如何處理最能保證可用性”。正確答案是“從同一個(gè)分片的另外兩個(gè)副本中讀取”。這個(gè)解法的核心是“哈希分片決定數(shù)據(jù)歸屬副本數(shù)決定冗余度”宕掉的只是一個(gè)副本不是整個(gè)分片。很多人一看到“宕機(jī)”就聯(lián)想到分區(qū)和P其實(shí)這里主要考的是副本容錯(cuò)而不是分區(qū)容錯(cuò)。3.3 概念辨析題圍繞架構(gòu)視圖與描述方式設(shè)陷阱近四次考試?yán)锛軜?gòu)視圖相關(guān)的概念辨析題穩(wěn)定出現(xiàn)。主要考查“41視圖模型”中各視圖之間的區(qū)別。經(jīng)常被放在一起混淆的是邏輯視圖和開發(fā)視圖邏輯視圖強(qiáng)調(diào)“用戶視角的功能分解”開發(fā)視圖強(qiáng)調(diào)“程序員視角的模塊組織”。真題可能會(huì)給一句描述“系統(tǒng)被劃分為訂單模塊、庫(kù)存模塊、支付模塊并且定義了各模塊之間的接口依賴”問(wèn)你這是在描述哪個(gè)視圖。答案是開發(fā)視圖因?yàn)槟K和接口是程序員關(guān)心的如果是邏輯視圖更多會(huì)用“用戶看到的用例”“功能點(diǎn)”這類詞。另一個(gè)容易設(shè)陷阱的是“部署視圖”和“進(jìn)程視圖”。部署視圖關(guān)注硬件節(jié)點(diǎn)和軟件組件的物理部署位置進(jìn)程視圖關(guān)注并發(fā)運(yùn)行時(shí)的進(jìn)程/線程、通信和同步。題干中如果出現(xiàn)“這個(gè)模塊運(yùn)行在獨(dú)立的容器中通過(guò)消息隊(duì)列與其他模塊通信”雖然提到了獨(dú)立容器但它強(qiáng)調(diào)的是“運(yùn)行時(shí)進(jìn)程”所以更接近進(jìn)程視圖。記住一個(gè)口訣“邏輯看功能開發(fā)看模塊進(jìn)程看并發(fā)物理看部署場(chǎng)景看用例”。但不要只背口訣因?yàn)檎骖}喜歡把“場(chǎng)景視圖”改成“用例視圖”來(lái)干擾你。一旦看到“用戶與系統(tǒng)的交互流程”就要往場(chǎng)景視圖上靠。4. 備考實(shí)操與避坑指南4.1 最容易丟分的幾個(gè)“反直覺(jué)”點(diǎn)復(fù)盤錯(cuò)題時(shí)我總結(jié)出幾個(gè)反復(fù)踩坑的點(diǎn)這些地方基本不是沒(méi)背而是被直覺(jué)騙了。第一個(gè)反直覺(jué)點(diǎn)是“微服務(wù)越細(xì)越好”。很多人覺(jué)得微服務(wù)就是拆得越細(xì)越靈活真題里卻經(jīng)常會(huì)出現(xiàn)“服務(wù)拆得過(guò)細(xì)導(dǎo)致分布式事務(wù)復(fù)雜度劇增最終反而需要合并服務(wù)”的選項(xiàng)。備考時(shí)一定要建立“拆分粒度需要平衡”的意識(shí)不要二極管。第二個(gè)反直覺(jué)點(diǎn)是“緩存一致性背鍋題”。題目問(wèn)“使用Redis緩存后如何保證緩存與數(shù)據(jù)庫(kù)一致性”有四個(gè)方案你很可能選“先更新數(shù)據(jù)庫(kù)再更新緩存”但正確答案往往是“先刪除緩存再更新數(shù)據(jù)庫(kù)并保證數(shù)據(jù)庫(kù)更新成功后延遲雙刪”。如果沒(méi)真的處理過(guò)緩存一致性問(wèn)題很容易掉進(jìn)“先更新緩存”的陷阱。這種題考查的不是你會(huì)不會(huì)寫代碼而是有沒(méi)有意識(shí)到“并發(fā)更新緩存會(huì)帶來(lái)臟數(shù)據(jù)”。第三個(gè)反直覺(jué)點(diǎn)是“架構(gòu)評(píng)估不只是選擇題”。上午題里ATAM可能會(huì)考“效用函數(shù)”“敏感點(diǎn)”“權(quán)衡點(diǎn)”很多人分不清敏感點(diǎn)和權(quán)衡點(diǎn)。敏感點(diǎn)“一個(gè)質(zhì)量屬性對(duì)某個(gè)架構(gòu)決策敏感”權(quán)衡點(diǎn)“一個(gè)決策影響多個(gè)屬性”。真題喜歡把兩者混做選項(xiàng)注意題干是否提到“多個(gè)質(zhì)量屬性”這個(gè)關(guān)鍵詞。4.2 一套可復(fù)用的復(fù)習(xí)路線如果你現(xiàn)在只有三到四周時(shí)間準(zhǔn)備架構(gòu)綜合知識(shí)我的建議是按以下順序復(fù)習(xí)。第一階段約1周主攻架構(gòu)風(fēng)格和質(zhì)量屬性。把十種經(jīng)典風(fēng)格用表格整理出來(lái)每天默寫一遍注意比較它們的異同。同時(shí)把質(zhì)量屬性場(chǎng)景的六要素背熟做到看到一段描述能快速拆解出“刺激-響應(yīng)”。第二階段約10天主攻分布式和微服務(wù)。把CAP、BASE、分布式事務(wù)、微服務(wù)拆分、服務(wù)發(fā)現(xiàn)、容器化這幾個(gè)關(guān)鍵詞對(duì)應(yīng)的常見題型全部刷一遍。刷題時(shí)不要只看正確選項(xiàng)要把錯(cuò)誤選項(xiàng)為什么錯(cuò)搞明白因?yàn)楹芏嗾骖}會(huì)把“反直覺(jué)的陷阱”放在錯(cuò)誤選項(xiàng)里。第三階段約1周混刷真題并整理錯(cuò)題本。我最推薦的方式是“按時(shí)間做題-按知識(shí)點(diǎn)歸類錯(cuò)題-每三天回顧一次錯(cuò)題”。不一定要做很多套關(guān)鍵在于把每道錯(cuò)題考的知識(shí)點(diǎn)變成自己能復(fù)述的“一句話規(guī)則”。最后一階段是考前沖刺重點(diǎn)看自己整理的表格和錯(cuò)題本。不要再去做新題了尤其不要去刷那種偏題怪題綜合作答時(shí)越接近“出題人的標(biāo)準(zhǔn)思路”越穩(wěn)。4.3 考前一周的沖刺清單考前一周我建議你做一張A4紙的“架構(gòu)知識(shí)單面總結(jié)”正面寫架構(gòu)風(fēng)格對(duì)比表反面寫分布式/微服務(wù)關(guān)鍵詞表。每天用碎片時(shí)間默看三遍不要試圖臨時(shí)記憶太多新概念。特別提醒近四次真題里有一些題涉及“質(zhì)量效用樹”“風(fēng)險(xiǎn)點(diǎn)”這類概念如果你沒(méi)時(shí)間系統(tǒng)學(xué)就把每個(gè)術(shù)語(yǔ)對(duì)應(yīng)一句話解釋寫下來(lái)。例如“風(fēng)險(xiǎn)點(diǎn)架構(gòu)決策中可能帶來(lái)隱患的點(diǎn)”“非風(fēng)險(xiǎn)點(diǎn)當(dāng)前架構(gòu)決策中沒(méi)有明顯隱患的點(diǎn)”“權(quán)衡點(diǎn)影響多個(gè)質(zhì)量屬性的決策點(diǎn)”。抓住這些關(guān)鍵描述遇到題時(shí)至少能排除兩個(gè)錯(cuò)誤選項(xiàng)。還有一個(gè)技巧上午題做完后如果有時(shí)間一定要檢查“選是選非”。因?yàn)榧軜?gòu)綜合知識(shí)經(jīng)常出現(xiàn)“以下不屬于架構(gòu)風(fēng)格特征的是”“以下哪一項(xiàng)不是微服務(wù)拆分原則”這類問(wèn)法。我至少因?yàn)榭村e(cuò)問(wèn)題丟過(guò)兩分。5. 常見問(wèn)題速查與獨(dú)家避坑5.1 為什么我背了那么多還是常在架構(gòu)題上翻車因?yàn)槟惚车氖恰爸R(shí)點(diǎn)”但真題考的是“決策鏈”。比如結(jié)構(gòu)化布線里管道-過(guò)濾器風(fēng)格的數(shù)據(jù)轉(zhuǎn)換單靠背“數(shù)據(jù)流”很容易忽略“處理節(jié)點(diǎn)獨(dú)立”這個(gè)特點(diǎn)。建議把近四次真題里所有“場(chǎng)景描述型”題目拿出來(lái)像做案例分析一樣把題目中的約束和風(fēng)格特征逐條連線。5.2 是否需要額外看數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)等章節(jié)要看但優(yōu)先級(jí)不同。架構(gòu)綜合知識(shí)里出現(xiàn)數(shù)據(jù)庫(kù)題目時(shí)更多是“數(shù)據(jù)分片”“分布式事務(wù)”與架構(gòu)的結(jié)合網(wǎng)絡(luò)題目更側(cè)重“負(fù)載均衡”“CDN”等與架構(gòu)決策相關(guān)的概念。不要孤立去背數(shù)據(jù)庫(kù)底層實(shí)現(xiàn)應(yīng)該按“架構(gòu)約束”這條線去串什么時(shí)候需要分庫(kù)分表什么時(shí)候需要讀寫分離什么時(shí)候需要消息隊(duì)列削峰這些問(wèn)題就是架構(gòu)師視角下的數(shù)據(jù)庫(kù)。5.3 真題與模擬題題風(fēng)差別大嗎差別確實(shí)存在。很多模擬題喜歡考“某某架構(gòu)的定義”而近四次真題已經(jīng)很少這么考了。真題更傾向于把兩個(gè)概念放在一起讓你對(duì)比比如“在一致性要求不高的日志采集系統(tǒng)里更適合采用哪種消息模型”。因此做模擬題時(shí)凡是直接默寫定義的題可以快速跳過(guò)凡是“場(chǎng)景選擇”的題務(wù)必認(rèn)真做。5.4 只看上午題就能搞定架構(gòu)這塊嗎不行。近四次的上午題和下午的案例分析有很強(qiáng)的聯(lián)動(dòng)性。比如上午考“架構(gòu)評(píng)估質(zhì)量屬性場(chǎng)景”下午就可能讓你畫“質(zhì)量效用樹”上午考“微服務(wù)拆分原則”下午就可能讓你針對(duì)一個(gè)系統(tǒng)給出拆分方案。建議你在復(fù)習(xí)上午題時(shí)順手把對(duì)應(yīng)知識(shí)點(diǎn)在下午案例分析中的常見問(wèn)法也掃一遍。這樣不僅上午題能拿分下午題也能提前積累語(yǔ)料。5.5 要不要背“架構(gòu)設(shè)計(jì)原則”這類方法論可以背但不要死背。比如SOLID原則、ACID特性這些基礎(chǔ)在架構(gòu)題里經(jīng)常作為選項(xiàng)出現(xiàn)但不會(huì)直接讓你默寫。更重要的是學(xué)會(huì)“識(shí)別原則的體現(xiàn)”比如題目問(wèn)“哪個(gè)設(shè)計(jì)體現(xiàn)了開閉原則”你要能從選項(xiàng)中判斷出“使用接口隔離變化”才是正確描述。寫在復(fù)盤之后的一點(diǎn)體會(huì)我自己把近四次真題做完最大的感受是系分的綜合知識(shí)并沒(méi)有想象中那么“死”。架構(gòu)這一塊尤其明顯它其實(shí)是在用選擇題模擬架構(gòu)師做技術(shù)判斷的瞬間。你掌握的是一些互相矛盾、需要權(quán)衡的因素而不是唯一正確的標(biāo)準(zhǔn)答案。如果你正在備考我建議你少花時(shí)間糾結(jié)“這個(gè)名詞我是不是見過(guò)”多花時(shí)間問(wèn)自己“如果項(xiàng)目中真遇到這種情況我會(huì)怎么選”。帶著架構(gòu)師的思維去看題很多答案會(huì)自然浮出來(lái)。最后再分享一個(gè)我自己的小習(xí)慣每次做完一套真題我都會(huì)把錯(cuò)題里的場(chǎng)景描述抄到一張卡片上只抄場(chǎng)景和正確選項(xiàng)不抄題目本身。復(fù)習(xí)時(shí)隨機(jī)抽一張看著場(chǎng)景說(shuō)思路比反復(fù)看整道題效果好得多。這套笨辦法幫我撐過(guò)了最后沖刺期希望對(duì)你也有效。