1. 程式人生 > >阿里P7架構師的成長之路

阿里P7架構師的成長之路

前言

系統架構師是近幾年來在國內外迅速成長並發展良好的一個職位,它的重要性及給網際網路行業所帶來的影響是不言而喻的。很多程式設計師把成為一名優秀的架構師作為自己職業生涯奮鬥的目標,但很多人努力卻用不對地方,前段時間我與在阿里的P7架構師談到了這個問題,並且整理出來,希望對在迷茫期的程式設計師有所幫助。

這裡寫圖片描述

1、問:阿里的技術專家P7從招聘層面上來說,比如工作年限、專案經歷、技術能力等需要達到什麼樣的要求?

答:工作年限是5-10年,在技術上有紮實的基礎能力,有技術亮點,用過的框架要知道其技術原理,具備分散式系統的開發經驗,能獨立解決各種技術問題,比較強的實戰能力。

阿里的P5要求能獨立負責一個模組,P6要求能獨立負責一個系統,P7要求能架構和負責多個系統,並規劃系統的未來能力,在某個領域達到專家水平,可以是某個業務領域,也可以是某個技術領域。

2、問:工作中,產品方案設計的時候,經常會存在多方分歧,有分歧就會存在妥協,如何合理地堅持自己的觀點,如何合理地做出妥協?

答:方案沒有對錯,每個方案都有它的優點和缺點,要分析別人方案的優缺點,先肯定對方方案的優點,再針對缺點提出如何解決這個問題,還是說不解決這個缺點。一起討論出最合適的方案,而不是要爭論誰對誰錯。

3、問:我就是在業務團隊,偏技術,框架聽起來很酷但遙遠,能否分享幾個知識點?

答:在業務團隊也可以做很多框架,比如可配置化支援業務的框架、自動生成新增刪除修改頁面的框架、業務資料校驗的框架,只要多思考如何快速支援業務,就能找到合適的業務框架。可以從幾個點出發:配置化支援業務、頁面自動生成、流程標準化等。

4、問:最近在學習Spring原始碼,看了幾本書,可以跟著作者的思路看原始碼,但是看完不久就忘了,其實是沒有太多的應用場景,對於看原始碼,有什麼好的方法嗎?

答:可以用這個思路,比如讓你來設計一個Spring框架你會如何來設計,Spring Core最重要的就是IOC和AOP。自己可以嘗試實現下簡單的IOC和AOP功能,然後再去對比看下Spring是如何實現的,這樣即使忘記了Spring的程式碼,但是仍然能基礎其實現原理。

5、問:對於三十歲的程度員,如果還想再深入做技術,有什麼建議?

答:技術人員一定要有危機感,無論多大年紀仍然要持續地學習,我也已經三十多了,每週會花點時間學習點技術。但是年紀大了,其實時間不會那麼多,所以要提高學習的效率,掌握一些學習方法,並且要靜下心來學習。

學技術什麼時間都不晚,因為總有新技術冒出來,但是一些永遠不變的技術可以優先學習,比如各種協議(TCP,HTTP,一致性hash協議)、實現原理、演算法等。

6、問:自己也實現過IOC和AOP的一些小案例,但是實現比較簡單,IOC是基於一個Map來實現的,AOP使用CgLib實現,但是再看Spring Core的原始碼時,還是感覺很吃力,巢狀層次太多,Debug多次,還是比較吃力,怎麼辦?

答:技術人員一定要有個特質就是死磕,有的技術人員可能花2個星期解決一個技術BUG,就是對著原始碼一點點看,要能入定,帶著問題去看原始碼會更輕鬆。

另一方面,要給自己制定學習計劃,比如要學習哪些技術、每天學習什麼、達到什麼程度。工作中用一些方法減少雜亂無難度的工作內容,比如白天不答疑,或只在固定的時間答疑,寫FAQ減少答疑,少參與一些會議,不實時去回即時通訊軟體。

7、問:你覺得成為一個架構師應該具備什麼樣的技能?

答:我結合自己多年的專案經驗總結出來的技能體系,希望能幫助迷茫的程式設計師,找到正確的學習路線,學習方向大概有七點。

構成架構師的技能體系

這裡寫圖片描述

一、原始碼知識點

原始碼分析對於很多人來說很枯燥,生澀難懂,下圖詳細介紹了原始碼中所用到的經典設計思想及常用設計模式,幫助大家找到分析原始碼的切入點,瞭解大牛是如何寫程式碼的。

這裡寫圖片描述

二、分散式架構

這裡寫圖片描述

分散式系統的任務是把多臺機器有機地組合、連線起來,讓其協同完成一件任務,可以是計算任務,也可以是儲存任務。

從分散式架構原理,到分散式架構策略、分散式架構中介軟體,最後在加上分散式架構實戰,讓程式設計師可以在技術深度和技術廣度上得到飛躍的提升。但分散式系統是一個複雜且寬泛的研究領域,學習一兩門線上課程,看幾本書是不能完全覆蓋其所有內容的。

三、微服務架構技能

當今微服務架構非常流行,其核心思想是服務拆分與解耦,降低複雜性。微服務強調將功能合理拆解,儘可能保證每個服務的功能單一, 根據各個服務自身資源需求,單獨佈署,單獨作橫向擴充套件,將各個服務做到靈活、可複用。

微服務架構解決了傳統單體式架構的弊端,但其實施的本身面臨很多陷阱和挑戰,涉及到設計、開發、測試、部署、執行和運維等各個方面,一旦使用不當,則會導致整個微服務架構改造的效果大打折扣,甚至失敗。對於這些問題,我總結出微服務需要學習的知識點,如下圖所示:

這裡寫圖片描述

四、併發程式設計

併發程式設計幾乎是所有網際網路公司面試必問問題,併發程式設計是Java程式設計師最重要的技能之一,也是最難掌握的一種技能。它要求程式設計者對計算機最底層的運作原理有深刻的理解,同時要求程式設計者邏輯清晰、思維縝密,這樣才能寫出高效、安全、可靠的多執行緒併發程式。目前網上沒有系統的全面的併發程式設計學習大綱,我搜集了很多資料總結出一個較全面的學習大綱:

這裡寫圖片描述

五、效能優化

大家都知道,效能一直是讓程式設計師比較頭疼的問題。當系統架構變得複雜而龐大之後,效能方面就會下降,如果想成為一名優秀的架構師,效能優化就是你必須思考的問題。

必須要明白的是:沒有兩個應用程式可以使用相同的優化方式,也沒有完美的優化 java 應用程式的參考路徑,,堅持採用適當的方式處理效能優化。想要達到最高的效能優化,作為一個 Java 開發人員,需要對 Java 虛擬機器(JVM)和底層作業系統有正確的理解。而在此之前要理解效能優化的知識體系,如下圖所示:

這裡寫圖片描述

六、實踐一個雙十一電商專案

電商專案目的是把所學的分散式、微服務、效能調優等知識運用起來,只有在專案中你才能鞏固知識,提升自己。實踐電商專案會利用雲伺服器搭建真實的開發和部署環境,讓你從零到專案實戰,體驗真實的企業級專案開發過程,讓你具備獨立開發和搭建分佈架構系統的能力。

這裡寫圖片描述

七、Java開發必知工具

這裡寫圖片描述

古語云:工欲善其事必先利其器,不管是小白,還是資深開發,都需要先選擇好的工具。特別是一名優秀的架構師必須有適合自己的工具,工程化專題的學習能幫助你和團隊提升開發效率,讓自己有更多時間來思考。

Git:可以更好地管理你和你團隊的程式碼。

Maven:可以更好地管理jar包和專案的構建等。

Jenkins:可以更好地持續編譯,整合,釋出你的專案。

Sonar:一個開源的程式碼質量分析平臺,便於管理程式碼的質量,可檢查出專案程式碼的漏洞和潛在的邏輯問題(提升程式碼的質量,更加高效地提升開發效率)。

如何學習才能快速入門並精通呢?

當真正開始學習時難免不知從何入手,從而導致效率低下影響繼續學習的信心。

但最重要的是不知道需要重點掌握哪些技術,學習時頻繁踩坑,最終浪費大量時間。

為了讓學習變得輕鬆高效, 現在給大家提供一個學習平臺,讓你在實踐中積累經驗掌握原理。主要方向是JAVA架構師,在這裡你可以學習Java工程化、高效能及分散式、深入淺出、效能調優、Spring,MyBatis,Netty原始碼分析和大資料等知識點。想要了解詳情的可以加入Java後端技術群:819940388,或關注微信公眾號:Java資訊庫,回覆“架構”,免費的大型網際網路Java視訊分享給大家。

這裡寫圖片描述