架構師備考的一些思考(二)

kiba518發表於2024-09-10

前言

以我的視野來看,部長或技術總監這種崗位還是比較難競爭的,換言之,程式設計師的上升空間比較窄,如果想要拿到高階崗位,最好的是工作三五年後就轉專案經理,然後再往上爬。
架構師倒是也能晉升高階崗位,但就效率而言,是非常低的。就我的經驗而言,架構師系的高階職位通常是技術管理一手抓,但這也代表著,責任更大,也就是鍋更大。
所以架構師系的高階職是非常不穩定的,非常累,非常容易堅持不下來,尤其在你結婚生子後,就更難堅持下來。
所以,選擇大於努力,如果想拼命向上走,還是儘快入坑專案管理才是上策,不想拼命或者做不到拼命的,那就無所謂選擇了。
就算是同樣的架構師,java系架構師也相對更好,生態好意味著java系架構師就相對學的不用那麼多,也就不用那麼累。
舉個簡單例子,java架構師可以不會安卓和鴻蒙,但net架構師必須會winform和wpf。
所以,還是那句話,選擇大於努力,能入坑java還是儘早入坑java,這樣你會少走幾年彎路,而且如果你躺平了,能讓你35歲以後能繼續用技術吃飯,還吃的不錯的,就只有java的生態。
當然,java系還有細分的,能選大資料就走大資料,大資料是一個工作內容異常簡單,工作量異常少的一個崗位,而且大家還覺得你工作內容很神秘,會比較有尊嚴。
就我的個人學習flink的經驗而言,學習flink的難度只有學習java的難度的30%,但你的工資可能高於java,加班也會少於java。
下面回到正題,架構師備考。

架構師備考——記憶難點

其實所謂的記憶難點,就是我們的理解和扯淡描述之間的轉換比較難。

原型模式(property)

透過copy物件屬性,或者clone獲得新物件,就是DTO轉實體的那個物件屬性對映。

要能透過下面定義分析出他在描述的是原型模式。
用原型例項指定建立物件的型別,並且透過複製這個原型來建立新的物件。執行物件在不瞭解建立物件的確切類以及如何建立細節的情況下建立自定義對
象。

Builder(生成器模式)

就是java裡常見的builder建立物件,或者理解為註解@Builder。
注:其他語言沒有這個模式,其他語言開發,就理解為建構函式建立物件即可。

要能透過下面定義分析出他在描述的是生成器模式。
將一個複雜類的表示與其構造相分離,使得相同的構建過程能夠得出不同的表示。

Abstract Factory(抽象工廠模式):

透過不同的介面來獲取不同物件。
注:抽象工廠模式與工廠模式的區別是,工廠模式是透過入參來獲取不同的物件。這兩種模式在其他語言中是隨手寫的程式碼,所以沒有形成概念結構,這裡要學會區分。

要能透過下面定義分析出他在描述的是抽象工廠模式。
提供一個建立一系列相關或相互依賴物件的介面而無需指定它們具體的類。

倉庫風格架構

  • 集中儲存:就是說資料都在一個資料庫裡。
  • 資料驅動:就是說資料一更新,查詢該資料就馬上得到最新資料,因為都在一個庫。
  • 資料處理方式:就是儲存到資料庫
  • 擴充套件性:可以增加外掛擴充套件功能。

管道過濾器風格

  • 這個主要是考察servlet的機制,所有的題型往servlet裡靠即可。其他語言開發就把他像成一堆filter即可。這個一般情況是架構中的一個小環節,純用管道過濾器做出來的元件還是很少見的。
  • 特點:資料流動,功能單一,組合靈活。
  • 擴充套件性:可以靈活增加filter。

資料驅動機制

資料驅動機制就是資料驅動的方法,有幾種:資料庫驅動應用,配置檔案驅動應用,指令碼語言驅動應用。這個有點IOC的感覺,控制翻轉,反向以資料為中心驅動應用的表現。

頁面變換表

這個是必背的,一定會有1 ~ 2空,即這1 ~ 2分是必拿的。
虛擬記憶體:虛擬記憶體就是實體記憶體和部分硬碟(輔助儲存)組合起來,供cpu呼叫的。
虛擬頁面:在虛擬記憶體系統中,程式所使用記憶體,被細分成多個記憶體塊,這些記憶體塊就叫虛擬頁面。
頁幀/物理塊:就是虛擬記憶體對應的實體記憶體和硬碟的地址。
頁面變換表:就是用於記錄虛擬記憶體中的頁幀/物理塊之間的對應關係。

存在位(Present Bit):表示該頁面是否當前在實體記憶體中。如果存在位為 1,表示該頁面在實體記憶體中;如果為 0,表示該頁面不在實體記憶體中,需要從輔助儲存中調入。
訪問位(Access Bit):記錄該頁面是否被訪問過。作業系統可以根據訪問位來決定哪些頁面是最近使用過的,以便在需要換出頁面時進行選擇。
修改位(Modified Bit):表示該頁面是否被修改過。如果修改位為 1,表示該頁面在被調入實體記憶體後被修改過,在換出時需要寫回輔助儲存;如果為 0,表示該頁面未被修改過,可以直接丟棄。
保護位(Protection Bit):用於指定該頁面的訪問許可權,如只讀、讀寫、可執行等。

頁號 物理塊號/頁幀號 狀態位 訪問位
0 1 1 0
1 - 0 0
2 3 1 1
3 8 1 1

邏輯地址16位:3148H,第一位5表示虛擬頁面地址,頁內地址是148H,查表,3對應的頁幀是8,所以轉換實體地址為8148H。
如果訪問1頁,因為1頁狀態位0,所以是沒有在記憶體的,所以要淘汰一個在記憶體的頁,為這次訪問提供位置,那麼淘汰0頁,因為0頁在記憶體,且近期未被訪問。

質量屬性

質量屬性的含義如下:
效能(響應時間),可用性(當機恢復),可修改性(修改時間短),易用性,可靠性(容錯、健壯性),安全性(驗證邏輯,阻止非授權使用者)

  • 提高效能——資源排程(就是負載均衡)
  • 提高可用性——心跳(考試裡的可用性是專指——服務查詢(nacos)的心跳體系,透過心跳上線下線服務)
  • 提高可修改性——資訊隱藏(這個比較難記難理解,我猜測是他們認為一個表單修改的內容減少了,就提高了可修改性,這個要特殊背一下,有點反邏輯)
  • 易用性——這個就是使用者使用難易度。
  • 可靠性——容錯、健壯性。在意外或錯誤使用的情況下維持軟體系統的功能特性的能力。
  • 提高安全性——追蹤審計,就是記錄日誌和溯源。
    安全性在考試裡應該是特指java的Security和Auth2,他這套邏輯還是挺難理解的,尤其是結合了java的控制反轉的結構。(java現在搞的元件設計都是控制反轉,而其他語言都是正向開發)
    非java系開發可以參考下面文章理解。
    其實,如果是我們正常的、手工搭框架,我認為即便是java架構師也會把Security和Auth2踢出局,因為他這個模式有問題,不過,考試裡很多題都會參考這個出,非java系開發,這塊就只能蒙了,確實不好理解。
    SpringBoot的Security和OAuth2的使用

構件類別

這個構件體系,就是spring的體系,因為整體是IOC,所以,就一個一個的構件往裡注入。
由於我們大部分開發都是做應用開發的,而這種構件模式,雖然有,但相對還是比較少見的,非java開發可能工作20年也沒這麼開發過軟體的可能性是很高的。
非java開發可以把這個構件模式想象為docker。java開發就比較幸福了,下面的定義一看,馬上就可以聯想到spring的各種元件了。

  • (1)獨立而成熟的構件。獨立而成熟的構件得到了實際執行環境的多次檢驗,該類構件隱藏了所有介面,使用者只需用規定好的命令進行使用。例如,資料庫管理系統和作業系統等。
  • (2)有限制的構件。有限制的構件提供了介面,指出了使用的條件和前提,這種構件在裝配時,會產生資源衝突、覆蓋等影響,在使用時需要加以測試。例如,各種物件導向程式設計語言中的基礎類庫等。
  • (3)適應性構件。適應性構件進行了包裝或使用了介面技術,把不相容性、資源衝突等進行了處理,可以直接使用。這種構件可以不加修改地使用在各種環境中。例如 ActiveX等。
  • (4)裝配的構件。裝配(assemble)的構件在安裝時,已經裝配在作業系統、資料庫管理系統或資訊系統不同層次上,使用膠水程式碼(gluecode)就可以進行連線使用。目前一些軟體商提供的大多數軟體產品都屬這一類。
  • (5)可修改的構件。可修改的構件可以進行版本替換。如果對原構件修改錯誤、增加新功能,可以利用重新“包裝”或寫介面來實現構件的替換。這種構件在應用系統開發中使用得比較多。

中介軟體

這裡考的中介軟體是特指kafka和redis和nacos,其他語言就用rabbitMQ和redis和consul思考即可。
連線與通訊:考試中認為,中介軟體是客戶端與伺服器的連線與通訊(連線與通訊是中介軟體的一個屬性,在考試裡認為它是主要屬性,我個人感覺這麼定義是有點怪,但還是能給與一定理解)
交易管理機制保證交易一致性:這個應該指的是用redis構件的分散式鎖。
負載均衡和高可用:這個指的是nacos,一個內部元件Load Balance(低版本的是Robbin)實現負載均衡,一個是心跳實現高可用。

關係模式 R(U,F)

這個主要是要記一些名詞。
在 “R(U,F)” 中:
“R” 表示一個關係模式(Relation Schema)。
“U” 是屬性集(Attributes Set),即關係模式中所有屬性的集合。例如,一個學生關係模式可能有屬性集 U = {學號,姓名,年齡,班級號} 等。
“F” 是函式依賴集(Set of Functional Dependencies),用於描述屬性之間的約束關係。例如,F 中可能包含函式依賴 {學號}→{姓名}、{班級號}→{輔導員} 等。

  • 如給出關係R(U,F),U={A,B,C,D,E,F={A→BC,B→D,D→E}。
    則有【依賴傳遞】,A→B,B→D,D→E。
    根據依賴傳遞,可得新依賴關係,A→D,A→E
  • 如,U1={A,B,C)、U2={B,D,E},則分解p()。
    這個問題是問拆表,把U表拆成倆表,然後欄位是U1={A,B,C)、U2={B,D,E},這個拆表,比較好理解,我們經常拆,題中的拆法,是正確的拆法,所以什麼也不影響,所以【無損連線並保持函式依賴】。
    無損連線就是沒丟欄位。

資料庫分散式模式

這個資料庫模式是針對java系的mysql資料庫設計的,在java專案中,有時候會使用現有的開源專案,這些專案大多數是微服務模式的。
然後這些開源專案,通常會把表拆到8到20個資料庫中,因為一開始起步時表和庫就過多,所以之後,隨著開發,表和庫的混亂就是指數倍的增加,庫表越多操作就越複雜,所以一些平平無奇的專案,也會有一些和淘寶京東這種大系統一樣的困難要去面對。
也因此,有一些概念,本來是要到特定的環境下才需要學習的,但在java系統,就變成了常用概念。

  • 全域性外模式:
    獸語:是對分散式資料庫的最高層的抽象。
    人言:全域性外模式是一個圖。就是是把分散式資料庫看成集中資料庫,集中資料庫就是一個資料庫。然後用一個圖描述資料庫結構。
  • 全域性概念模式:
    獸語:是分散式資料庫的整體抽象,包含了系統中全部資料的特性和邏輯結構描述分佈資料庫全域性資料的邏輯結構,是分散式資料庫的全域性概念檢視。
    人言:全域性概念模式是一個圖,分散式資料庫的整體、詳細的邏輯關係圖。
  • 分片模式:
    獸語:描述全域性資料邏輯劃分的檢視,是全域性資料的邏輯結構根據條件的劃分;每一個邏輯劃分就是一個片段或稱為分片。
    人言:不是圖,他是拆分資料庫,就是橫向,縱向拆分,比如按欄位拆,按日期拆。
  • 分配模式(分佈模式):
    獸語:描述區域性邏輯的區域性物理結構是劃分後的片段(或分片)的物理分配檢視;是全域性概念層的內容。
    人言:是一個圖,就是記錄上面的資料分片的邏輯關係圖。
  • 區域性概念層:
    獸語:由區域性概念模式描述,是全域性概念模式的子集;全域性概念模式經邏輯劃分後被分配在各區域性場地上。
    人言:區域性概念層是個圖,分散式資料庫會有多個庫,這個區域性概念圖就是節點庫的邏輯描述圖。

注:此文章為原創,任何形式的轉載都請聯絡作者獲得授權並註明出處!



若您覺得這篇文章還不錯,請點選下方的【推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/18404588

相關文章