如何成為一個資深Java架構師?
一、什麼是架構師?
1、從內心講我真的不想回答架構具體需要做什麼,架構師應該具體負責什麼。因為從實際情況看,在不同的系統層級,不同的需求下架構師的職責也會不同;從不同的技術角度看,架構師又是個變色龍——一時是技術的大拿,一時是技術的規劃者,一時是技術團隊的指揮者。

2、那麼,該如何回答“什麼是架構,什麼是架構師”這個問題呢?這或許需要先搞清楚另外一個問題——一名程式設計師是如何走上架構師之路的?我從許多朋友那裡瞭解到了很多實際案例,程式設計師走上架構師之路,總結起來最多的原因是因為他早前程式碼寫的好。
3、那麼,程式碼寫的好就是架構嗎?顯然不是。程式碼寫的好只是表象,做所有事情都需要規劃,尤其是一個複雜的軟體系統,這更需要規劃,否則可能連一行程式碼都寫不出。複雜的軟體系統一定會需要做很多抽象設計、物件規劃、介面規劃等準備動作。也就是“上一輩程式設計師”口中所說的:詳細設計。做架構主要的事情也依舊如此,需要對整個系統進行系統的規劃:模組、通訊、邊界、擴充套件、技術下沉等工作。這樣的規劃完成之後專案方能正常跑起來。
4、當然,架構也不僅僅是規劃,還要做的另一件大事就是技術識別。識別出系統中技術的難易區域,並分解複雜技術,使之成為一個個技術的黑盒子,在此之上再進行新的技術規劃,使整個系統從技術角度來看是分層次的,從難到易,從大到小,但各層之間又是互相的黑盒。這也常說的讓系統模組間達到“雞犬相聞老死不相往來“的狀態。
5、一個架構師需要足夠的技術的寬度。從軟體到硬體,從開發到測試,從運維到安全等都需要面面俱到的瞭解。當然你可能不是這單方面領域裡面最深入的人,但是你需要知道它們是怎麼做的(不僅僅是皮毛,要深入原理),並且要知道它們組合起來是個什麼樣的東西。技術面也足夠寬了之後,是不是就會成為完美架構師呢?
6、答案是不會,因為還有新的問題要過來。這次的問題諸如“系統在未來的執行過程中運維需要做什麼?”“系統在未來的功能迭代中如何更方便的擴充套件?”“系統應該怎麼修改?”“系統應該被怎麼樣升級?”這時的你是不時很困惑?是不是感覺這個架構的世界好長啊,怎麼像保姆一樣什麼都要管。但仔細想想這是應該的,因為一個系統初次開發並交付只是它生命週期中的一小部分而已。後面的維護、改造、升級才佔了整個軟體生命週期的絕大部分時間。你是它的架構設計者,是它靈魂之所在,你當然應該設計好它的未來。這也是架構師做好的最後一件事情:系統未來的設計。
二、架構師的定義?
個人覺得架構師需要具有以下幾特點:
1.知識廣度:需要知道主流技術為什麼誕生,能解決什麼問題?如果同一種業務用不用的技術來實現,會有什麼哪些優缺點?比如:流行的ORM框架Mybatis 和 hibernate ,他們之間的優缺點是什麼?要有清晰的認識會能在技術造型時做出正確的決定。
2.抽象能力:對業務和技術進行抽象。業務抽象就是對需求進行分析後,能夠建立完美的實體類以及他們之間的聯絡。技術抽象是對整體架構進行一個分層,各層之間的互動。這至關重要,如果技術抽象能力不足,這會導致整個系統的架構不靈活,難以維護和擴充套件。
3.知識的深度:至少是某個領域的專家,比如訊息佇列,activeMQ熟悉其原始碼,知道其實現。
優秀的學習能力:對新的技術和前沿性的技術進行學習,使用它來解決工作中的業務問題。
三、那麼你該如何去做?
1: 紮實的JAVA 基礎,Think in java上介紹的內容都能理解,做到這一步恭喜成為了程式設計師。
2:熟練使用主流框架,如:mybatis,spring 等。
3:研究過至少一種以web框架的原始碼,如spring mvc ,struts 等。
4:架構過或者參與過高併發系統設計,知道如何應對突發情況。
5:對自己所處的業務能夠根據自己的知識維度,提出優化建議或者預測其風險點。
四、該掌握哪些技術呢?

微服務架構

開源框架原始碼解析

高效能架構技術

B2C商城專案實戰
以上這些掌握了就是架構師了嗎?不,還不夠。

設計模式
最後
如果你對技術提升很感興趣,可以加入 Java進階之路來交流學習:878249276 ,裡面都是同行,有資源分享包括但不限於(分散式架構、高可擴充套件、高效能、高並 發、Jvm效能調優、Spring,MyBatis,Nginx原始碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。歡迎一到五年的工程師加入,合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!