先說目前關於架構師的一些是實際情況。
1 要成為Java架構師,單純靠學知識一定不行,得靠在項目里積累經驗。
2 如何判斷程序員是否已經成為java架構師?不是看程序員掌握的技能,更不是看程序員干的活,而是看是否拿着架構師的工資。
3 大多數小公司的項目,沒有包含,或很少包含足以讓程序員升級到架構師的技能點。
4 如果沒架構方面的項目經驗,程序員無法通過跳槽得到架構師的實踐機會。但反過來,沒有架構師的項目實踐機會,程序員無法升級成架構師,這是個死循環,也是大多數程序員無法升級到架構師的瓶頸所在。
其實大多數的程序員是無法升級到架構師的,先說下java程序員升級到架構師的難點。
1 很多程序員在日常工作里無法接觸到架構師的技能
大多數的程序員能在工作中接觸到高級開發的技術,所以從初級開發升級到高級開發,難度並不大,但架構師就不同了。
比如在一些小公司里,程序員大多是做重復勞動,業務變了,但用到的技術還是增刪改查。哪怕在一些技術含量比較高的互聯網公司,出於業務封裝的角度,一些高並發高可用的實現往往被封裝在方法里,程序員僅僅是通過調用方法實現功能,未必能在代碼層面,接觸到架構方面的技能。
無法從項目角度接觸到架構相關技能,單靠看視頻看資料積累起來的說辭,在面試過程中往往會不堪一擊,從而無法應聘架構師的崗位,這反過來制約了程序員向架構師發展的腳步。
作為面試官,我有時候在面試高級開發的時候,會深入問些架構方面的問題,比如我問,你們系統里,模塊間的通訊用的是什么組件,甚至還沒問到架構方面的技能嗎,這時不少高級開發可能就是一頭霧水了,或者在他們眼里,更多的是調用方法實現功能。
2 不少程序員往往會深挖單機版的技能
很多工作中得過且過的程序員,在實現的功能通過測試以后,或許就無所事事了,而且這類程序員不在少數,在小公司或外包公司里,這類程序員往往會更多,說得直接些,這些程序員的競爭力和從培訓班里出來的程序員沒什么兩樣,或許就更熟悉業務。
或者有些程序員雖然上進,但會深挖單機版的技術細節,比如JVM虛擬機調優要點和MySQL性能優化要點,而從主觀上忽視架構師應當具備的技能。
再說下java架構師在工作中,除了寫業務代碼,其他主要是干的什么活,從中大家就能感受到Java架構師該掌握哪些技能,通過思考得出的結論,比我單純講結論要好很多。
1 需要搭建高可用的框架,比如就拿最簡單的搭建數據庫服務來說,得考慮如果一台MySQL服務器宕了,如何保證業務切換到另外一台機器上。搭建其他組件,比如redis和Nacos時,都需要考慮此類高可用的因素。
2 需要考慮高並發的因素,從這個點展開,架構師至少需要會用nginx,mycat,netty,redis,dubbo之類的工具,以及考慮搭建實現負載均衡的集群。
3 不僅得熟悉組件,更需要把設計好的架構部署上線,或者哪怕上線動作是由運維來做,但架構師至少要知道如何把nginx集群等組件部署上線的活,由此架構師需要了解必須的linux命令和腳本,以及了解jenkins之類的部署工具。
4 上述技能不是簡單會用即可,如果在開發部署和運行過程中由問題,架構師得負責解決。這就要求架構師不能僅僅靠看視頻知道如何搭建系統,更得具備針對netty等組件的debug能力,還得能通過看日志,知道集群的運作情況,如果集群出了問題,還得知道如何快速解決。
5 不能僅僅關注技術,更得結合業務、成本的組員的情況,把諸如搶紅包之類的需求通過架構,快速地實現並上線,這就要求架構師得知道各種組件的優劣,以此能選型並設計方案。
也就是說,架構師首先得了解一些組件的api,而且還得知道用組件實現限流熔斷等高並發需求的做法,這還不算,還得結合業務把架構部署到服務器上,這還不算完,系統運行出問題后,還得解決其他人無法解決的問題。
講到這里大家能進一步感受到,要成為Java架構師,絕不能單純靠看視頻看資料背答案,通過這些手段只能了解膚淺的技能,要成為架構師,更得具備實踐和排錯的技能,這也是為什么架構師的工資可以上不封頂的原因。
講完上述鋪墊后,再講下如何成為java架構師?說起來很簡單,掌握架構師的實踐技能,過架構師的面試。甚至再簡單點,只要有本事,不掌握架構師技能也行,只要過面試就行,但這極難做到。
1 首先得熟悉spring boot框架增刪改查,使用logback等組件,外帶盡可能熟悉單機版的開發技能。做到這點的標准是,程序員能解決大多數線上單機版的問題。
2 先熟悉各種分布式組件的api用法,這些組件包括redis,nginx,dubbo,rabbitmq等,具體就不一一展開了,總之在實際項目中,是通過這些組件解決分布式高並發問題。
做到這點的難處是,平時項目中一般很難有機會接觸到這些組件,而這些組件大多是安裝在linux環境上,在自己windows操作系統上很難安裝,沒有運行環境,學起來就很困難。
不過在我寫的書里,就給出了在windows上搭建諸多分布式組件的步驟,以及分布式組件的用法,通過這本書,至少能讓大家掌握分布式組件的用法,這是升級到架構師必不可少的基礎。

3 會用分布式組件,離開成為架構師還有段距離,后面就要嘗試着用分布式組件解決實際問題,比如去解決熔斷,高並發,緩存失效等問題。
話這樣說沒錯,但不少朋友身處小公司,小公司的項目很少用到分布式組件,要在實際項目中實踐分布式組件的技能很難。如果這樣的話,一方面要盡可能多地挖掘項目里為數不多的分布式組件技能,比如緩存或分布式部署,或網關或消息隊列,另一方面可以直接准備架構師的面試。
在講架構師面試如何准備前,先講講面試架構師的方式。
第一層問理論和實踐細節,比如Netty的序列化方式,以及Dubbo針對不同級別設置超時時間的方式,或者Redis的數據結構,這一定能通過背題准備。
第二層是結合項目需求問組件的使用方式,比如候選人說用了redis緩存,那就問,數據並發量多少?為什么要用?緩存是的鍵和值是什么?如果候選人的相關經驗是編的,這塊就答不上來了。
第三層是結合項目的必用點,問些底層細節,比如dubbo協議,Netty讀寫索引的細節,kafka持久化,Redis超時失效機制等方面。這方面不僅問概念,而且還會問,你們項目是怎么選的,為什么要這樣選?這很能考核候選人在架構方面功底。
第四層是問組件的綜合使用,比如讓把項目里用到的組件串起來講,分析下如何在數據庫層面或通訊層面應對高並發,或問整體系統的日志處理框架。這些問題也能甄別出候選人的架構技能是理論層面還是真實項目里做過。
或者這樣說吧,目前網上給出的一些針對架構師的面試題,其實內容上是沒錯的,但這些面試題僅僅是用來考核候選人在架構方面的理論知識點,除此之外,面試官一定會結合項目需求和項目里架構組件的必用點來考核候選人的架構技能。
隨后再講下關鍵點:如何通過架構師的面試,或者是,在零架構項目經驗的前提下,通過架構師的面試。
1 結合網上諸多架構師的面試題,背架構方面的理論知識,比如dubbo線程模型等。這些點雖然多,但可以靠背,所以准備這方面的內容是體力活。
2 為每個你想在面試中講的分布式組件,找個項目的落腳點。還以dubbo舉例,你可以說,項目里的訂單模塊調用風控模塊,用的是dubbo,dubbo采用的是zookeeper作為注冊中心,采用了dubbo協議,比起http協議,dubbo性能更高,同時,還需要注意dubbo的遠程調用超時問題。其他組件,以此准備。
3 單個組件准備好以后,准備集群和組件的整合,比如准備下mysql+redis集群怎么搭建,應對哪些業務點,為了應對數據庫高並發,我們項目組是怎么部署mysql和redis的,為了實現異步通訊,我們項目組是怎么搭建kafka的。一樣道理,多准備些集群和整合方式。如果不知道怎么整合,網上一找一大堆,但同樣需要落實到項目中。
4 再准備你解決過的高並發組件方面的問題,這點很能體現出架構師的能力。比如你還可以去看網上架構師的面試題,看的重點是“分布式組件常用的坑”,比如netty半包,redis穿透。准備好這些坑以后不算,你再結合下項目的業務,說下你項目里遇到過哪些問題,你是如何通過看日志排查出來的,后面怎么解決的。
5 更可以圍繞一些需求點,比如圍繞熔斷,限流,秒殺,異步消息處理等需求點,准備下你的項目里是怎么用分布式組件實現的。
當你准備好上述說辭后,你就不用慌了,畢竟面試官只會通過面試短短的時間來確認你架構方面的能力,而你可以全面地結合項目業務很好地展示,而且還能以你解決過的項目實際問題為例來證明架構方面的能力,所以哪怕你之前沒架構方面的項目技能,過架構師的面試也不是沒可能。
做個總結:
1 要成為java架構師絕不能單純靠學技能,更得靠項目實踐。
2 大多數的架構師,是先通過架構師的面試得到實踐機會,再提升技術點。
3 本文給出了適合零架構項目經驗的程序員升級到架構師的操作建議。
先寫到這里,如果大家感覺文章對你有幫助,請多多點贊。如果本文點擊量高,我還會來進一步更新,結合案例說說升級到架構師的實踐要點。
這是我的公眾號,其中包含了大量面試文章,同時我自己出了多本Python和Java方面的書籍,會定期在公眾號里發書的電子版。請大家關注下我的公眾號,謝謝了。