說明
架構師訓練營會講啥? 第一課還沒開始之前,筆者猜會是從全局視角先整體概括。比如提供一個思維導圖,涉及到的全部課程內容。類似演講的總-- 分 – 總。
講課老師 – 李智慧
1. 看書、上課等學習第一課的門道
讀書的時候,看一本書的目錄就可以看出作者的思路是什麼。老師上第一課也是一樣的道理,要告訴同學們: 要解決的問題是什麼? 是如何解決的。
架構師不一定技術很牛,但是沒有技術是不行的。
架構師最主要的靠悟性。悟性悟到了,就類似一層窗戶紙,一捅就破,一點就通。
- 面對的問題、困難是什麼?
- 解決的方法是什麼?
- 真實的場景是什麼?
- 用什麼的思維方式去解決問題?
2. 架構師的核心輸出是什麼
掌握的能力:架構方案、架構設計
學了很多內容,任命爲架構師,才能去做架構師。
成爲架構師的途徑有哪些?
- 跳槽,應聘爲架構師。
- 內部晉升,任命爲架構師。
3. 架構師的主要職責
- 編寫架構設計文檔
- 併發編程框架
- 重構軟件代碼
- 設計系統架構
- 進行技術選型,解決技術應用中的問題。
- 優化系統性能
- 模塊分解與微服務架構重構
- 保障系統安全與高可用
- 大數據應用
- 技術創新
- 溝通管理
從招聘要求拆解架構師能力
架構師要求的能力
-
整體架構設計。
-
核心組件代碼的實現、核心服務的實現。
-
定位系統瓶頸、提高系統性能、穩定性以及業務擴展性。如何去證明已經解決問題。
-
主導跨部門協作和負責功能的調研。跨部門最重要的關注點是什麼?利益相關方的訴求是什麼?邊界是什麼?如何平衡相關利益?如何溝通?就算架構設計比較清晰,如何滿足更多利益方的需求,如何落地也是一種能力。
-
具備海量數據和大規模分佈式系統的設計和開發經驗。能通過學習獲取到經驗嗎?通過學習可以提高經驗,對成長是有幫助,有一些小技巧。比如,學習訓練營以後,重新看以前的設計,是否有提高。比如,以前公司沒有的功能,自身通過思考,設計出整個架構,也可以是應用的一種。
-
從設計到實現始終對齊業內一流產品水準。阿里巴巴平臺架構組、Intel大數據開源組的PPT是怎麼設計的?進步的空間在哪裏?
-
對多種數據庫中間件、消息中間件以及其他大規模數據選型。
-
領域模型、微服務架構
-
消息中間件、分佈式事務等互聯網應用架構
-
對Spring、MyBatis等常用開源框架應用經驗豐富。框架的原則是什麼? 能否設計出這個框架?設計框架關注點是什麼?
-
數據結構有深刻的理解和優秀的編碼能力、算法設計能力。
-
良好的溝通表達能力和團隊協作能力。
4. 越多面的知識約牢固
老師講的是一層面,自身的經驗是一層面,自身的思考也是一層面,跟別人交流,多渠道學習。
面越多就越立體,面越多,知識才會越牢固。
這個很像GPS,要3顆以上的衛星校準會更準確。衛星信號越多,定位約準確。
5. 軟件架構
如何寫一個架構設計文檔,文檔中應該包含哪些方面的內容?
6. 如何面試別人?
面試的套路,不斷的層層深入,要知道候選人的知識廣度和深度?
- 自我介紹
- 講一個你覺得最有技術含量的項目?考點:項目經驗,強調業務背景,圍繞問題這些點,是如何解決的?畫一些時序圖,流程圖,組件圖。要看語言組織能力,是否有條理性,方法是否成體系?提供的建議都能否定掉,那麼就加分了。
- 具體的技術技能問題
- 手寫代碼,紙筆寫一下10來行代碼。
7. 面試的問題
這裏要請教讀者您,幫忙留言,筆者會補充並留名您的答案。
-
子類override父類的方法後,想要修改拋出的異常,那麼子類方法拋出的異常類應該是父類方法拋出異常類的子類還是父類?
-
Spring 是如何實現單例的? 和設計模式中的單例實現方式有什麼不同?
-
淘寶這樣的大規模分佈式互聯網應用系統使用了哪些技術方案和手段?
主要解決什麼問題? -
知道什麼是CAP原理?請描述某個你熟悉的 NoSQL 產品是如何解決 CAP 問題的?
-
如何進行性能測試,性能測試的流程是什麼?性能測試的主要關注指標有哪些?
-
爲什麼在系統性能測試的時候,隨着併發請求數的逐漸增加,錯誤響應(或者響應超時)的比例快速增加?青蔥操作系統的線程和進程調度原理以及計算機內部資源使用角度進行分析。
-
爲什麼支持異步I/O 的Web 服務器(比如 Nginx)要比阻塞式的 Web 服務器(比如Apache)性能好很多,前者要比後者可以處理的併發連接請求多幾十甚至數百倍?請從異步 I/O 的線程阻塞特性進行分析。
-
給定一個key,爲什麼可以在Hash表中快速查找到 value?
-
數據庫索引是如何存儲的?
-
Java虛擬機的垃圾回收原理是什麼?
-
什麼是領域驅動設計, DDD的優缺點是什麼?
-
導致系統故障無法正常訪問的原因有哪些?保障系統穩定高可用的方案有哪些?請列舉並描述。
-
爲什麼單項散列加密可以保護用戶密碼安全,請細化 week2 的時序圖設計,使用單項散列表保護用戶密碼。
-
Spark爲什麼比MapReduce 快?
-
淘寶,頭條這些應用會針對不同用戶推薦不同的商品和內容,他們是如何做到的?用了哪些算法?
-
Google 搜索結果頁面是如何排序的,正好使用戶最想看到的頁面排在前面?
-
區塊鏈是如何保證數據無法被篡改的?
-
什麼是邊緣計算?
-
如果你覺得系統需要重構,但是老闆和團隊成員都覺得沒必要,你如何說服大家?
8. 什麼是軟件架構
軟件架構,是有關軟件整體結構與組件的抽象描述,用於指導大型軟件系統各個方面的設計。
– 維基百科
架構類圖,架構對象圖
架構設計最重要的是,架構是給誰看的,要考慮到相關方的利益。老闆,開發,測試,維護人員這些都是相關方,給每個不同的對象看,架構文檔是不一樣的。
架構元素:服務器,
元素間的關係:靜態關係、動態關係
架構:
系統:
架構文檔:
相關方
架構視圖
關注點
9. 什麼是架構師
架構師是做架構設計、對系統架構負責的那個人。
架構師是一頂帽子,而不是一把椅子;架構師是一個角色而不是一個職位。
主要你是做架構,那你就是架構師。如果你的公司,項目經理分配活了以後,程序員就開始開發。這就是個機會,那麼你可以嘗試畫畫架構圖,分享給同事。多做架構的事情,你就是架構師了。