Java架構(gòu)師,首先要是一個Java程序員,熟練掌握使用各種框架,并知道它們實現(xiàn)的原理,Java虛擬機原理、調(diào)優(yōu),懂得JVM能讓你寫出性能更好的代碼,池技術(shù),什么對象池,怎么解決并發(fā)量、連接池,線程池。
Java反射技術(shù),寫框架必備的技術(shù),但是有嚴重的性能問題,代替方案Java字節(jié)碼技術(shù)nio,沒什么好說的,值得注意的是“直接內(nèi)存”的特點,使用場景Java多線程同步異步Java各種集合對象的實現(xiàn)原理,了解這些可以讓你在解決問題時選擇合適的數(shù)據(jù)結(jié)構(gòu),高效的解決問題,比如hashmap的實現(xiàn)原理,好多五年以上經(jīng)驗的人都弄不清楚,還有為什么擴容時有性能問題?不弄清楚這些原理,就寫不出高效的代碼,好會認為自己做的很對,總之一句話越基礎(chǔ)的東西越要,很對人認為自己會用它們寫代碼了。其實僅僅是知道如何調(diào)用api而已,離會用還差的遠。
二、技術(shù)歸納
熟練使用linux操作系統(tǒng),必備,沒什么好說的。
熟悉tcp協(xié)議,創(chuàng)建連接三次握手和斷開連接四次握手的整個過程,不了解的話,無法對高并發(fā)網(wǎng)絡(luò)應用做優(yōu)化;熟悉http協(xié)議,尤其是http頭,我發(fā)現(xiàn)好多工作五年以上的都弄不清session和cookie的生命周期以及它們之間的關(guān)聯(lián)。
系統(tǒng)集群、負載均衡、反向代理、動靜分離,網(wǎng)站靜態(tài)化。
分布式存儲系統(tǒng)nfs,fastdfs,tfs,Hadoop了解他們的優(yōu)缺點,適用場景。
分布式緩存技術(shù)memcached,redis,提高系統(tǒng)性能必備,一句話,把硬盤上的內(nèi)容放到內(nèi)存里來提速,順便提個算法一致性hash。
工具nginx必備技能超級好用,高性能,基本不會掛掉的服務器,功能多多,解決各種問題。
數(shù)據(jù)庫的設(shè)計能力,mysql必備,最基礎(chǔ)的數(shù)據(jù)庫工具,免費好用,對它基本的參數(shù)優(yōu)化,慢查詢?nèi)罩痉治?,主從復制的配置,至少要成為半個mysqldba。其他nosql數(shù)據(jù)庫如mongodb。
還有隊列中間件。如消息推送,可以先把消息寫入數(shù)據(jù)庫,推送放隊列服務器上,由推送服務器去隊列獲取處理,這樣就可以將消息放數(shù)據(jù)庫和隊列里后直接給用戶反饋,推送過程則由推送服務器和隊列服務器完成,好處異步處理、緩解服務器壓力,解藕系統(tǒng)。
三、面試方面
企業(yè)應用的系統(tǒng)架構(gòu)師應該關(guān)注的幾個方面(具體情況具體分析,以下未必準確,只是參考)
先來一些基礎(chǔ)面試題,您答得出么?
1、說說JVM原理?內(nèi)存泄露與溢出區(qū)別,何時產(chǎn)生內(nèi)存泄露?
2、用java怎么實現(xiàn)有每天有1億條記錄的DB存儲?mysql上億記錄數(shù)據(jù)量的數(shù)據(jù)庫如何設(shè)計?
3、mysql支持事務嗎?DB存儲引擎有哪些?
4、mvc原理,mvc模式的優(yōu)缺點,如果讓你設(shè)計你會怎么改造MVC?
5、hibernate支持集群嗎?如何實現(xiàn)集群?
6、tomcat最多支持并發(fā)多少用戶?
7、map原理,它是如何快速查找key的?map與set區(qū)別?
8、描術(shù)算法,如何有效合并兩個文件:一個是1億條的用戶基本信息,另一個是用戶每天看電影連續(xù)劇等的記錄,5000萬條。內(nèi)存只有1G???
9、在1億條用戶記錄里,如何快速查詢統(tǒng)計出看了5個電影以上的用戶?----可以參考位圖索引的原理
10、Spring如何實現(xiàn)IOC與AOP的,說出實現(xiàn)原理?
以上純粹是常用的技術(shù),還有很多自己慢慢去摸索吧;因為要知道的東西很多,所以要成為一名合格的架構(gòu)師,必須要有強大的自學能力,沒有人會手把手的教給你所有的東西。
想成為架構(gòu)師不是懂了一大堆技術(shù)就可以了,這些是解決問題的基礎(chǔ)、是工具,不懂這些怎么去提解決方案呢?這是成為架構(gòu)師的必要條件。
架構(gòu)師要針對業(yè)務特點、系統(tǒng)的性能要求提出能解決問題成本最低的設(shè)計方案才合格,人家一個幾百人用戶的系統(tǒng),訪問量不大,數(shù)據(jù)量小,你給人家上集群、上分布式存儲、上高端服務器,為了架構(gòu)而架構(gòu),這是最扯淡的,架構(gòu)師的作用就是第一滿足業(yè)務需求,第二最低的硬件網(wǎng)絡(luò)成本和技術(shù)維護成本。
架構(gòu)師還要根據(jù)業(yè)務發(fā)展階段,提前預見發(fā)展到下一個階段系統(tǒng)架構(gòu)的解決方案,并且設(shè)計當前架構(gòu)時將架構(gòu)的升級擴展考慮進去,做到易于升級;否則等系統(tǒng)瓶頸來了,出問題了再去出方案,或現(xiàn)有架構(gòu)無法擴展直接扔掉重做,或擴展麻煩問題一大堆,這會對企業(yè)造成損失。
怎樣學習才能從一名Java初級程序員成長為一名合格的架構(gòu)師,或者說一名合格的架構(gòu)師應該有怎樣的技術(shù)知識體系,這是不僅一個剛剛踏入職場的初級程序員也是工作三五年之后開始迷茫的老程序員經(jīng)常會問到的問題。希望這篇文章會是你看到過的最全面最權(quán)威的回答。
提升技術(shù)的誤區(qū):
有人認為想成為技術(shù)大牛最簡單直接、快速有效的方式是“拜團隊技術(shù)大牛為師”,讓他們平時給你開小灶,給你分配一些有難度的任務。
有這種想法是錯誤的,主要有這幾個原因:
1、首先,大牛是很忙的,一個團隊里面,如果大牛平時經(jīng)常給你開小灶,難免會引起其他團隊成員的疑惑,我個人認為如果團隊里的大牛如果真正有心的話,多給團隊培訓是最好的。然而做過培訓的都知道,準備一場培訓是很耗費時間的,課件和材料至少2個小時(還不能是碎片時間),講解1個小時,大牛們一個月做一次培訓已經(jīng)是很高頻了。
2、大牛不多,不太可能每個團隊都有技術(shù)大牛,只能說團隊里面會有比你水平高的人,即使他每天給你開小灶,最終你也只能提升到他的水平;而如果是跨團隊的技術(shù)大牛,由于工作安排和分配的原因,直接請教和輔導的機會是比較少的,單憑參加幾次大牛的培訓,是不太可能就成為技術(shù)大牛的。
學習方式
如何想辦法真正的提升自己:moreandmore
做的更多,做的比你主管安排給你的任務更多。熟悉更多業(yè)務,不管是不是你負責的;熟悉更多代碼,不管是不是你寫的
這樣做有很多好處,舉幾個簡單的例子:
1:需求分析的時候更加準確,能夠在需求階段就識別風險、影響、難點
2:問題處理的時候更加快速,因為相關(guān)的業(yè)務和代碼都熟悉,能夠快速的判斷問題可能的原因并進行排查處理
3:方案設(shè)計的時候考慮更加周全,由于有對全局業(yè)務的理解,能夠設(shè)計出更好的方案
4:找到正確的學習路線
在此分享一份自己收藏的適合Java程序員進階學習的架構(gòu)路線圖:
閱讀源碼,分析源碼知識點總匯
源碼分析專題詳細介紹了源碼中所用到的經(jīng)典設(shè)計思想及常用設(shè)計模式,先打好內(nèi)功基礎(chǔ),了解大牛是如何寫代碼的,從而吸收大牛的代碼功力。
結(jié)合Spring5和MyBatis源碼,帶你理解作者框架思維,幫助大家尋找分析源碼的切入點,在思想上來一次巨大的升華。
分布式架構(gòu)技能學習總匯
有了大牛的代碼功底之后,接下來可以更好地學習分布式架構(gòu)技術(shù)。
分布式架構(gòu)的好處和優(yōu)點---->必然性,適應市場需求,能夠去找一些更大的平臺發(fā)展,提升自己的綜合技術(shù)能力和薪資。
從分布式架構(gòu)原理,到分布式架構(gòu)策略,再到分布式架構(gòu)中間件,最后會有分布式架構(gòu)實戰(zhàn),讓程序員可以在技術(shù)深度和技術(shù)廣度上得到飛躍的提升,成為互聯(lián)網(wǎng)行業(yè)所需要的T型人才。
微服務架構(gòu)專題
隨著業(yè)務的發(fā)展,代碼量的膨脹和團隊成員的增加,傳統(tǒng)單體式架構(gòu)的弊端越來越凸顯,嚴重制約了業(yè)務的快速創(chuàng)新和敏捷交付。為了解決傳統(tǒng)單體架構(gòu)面臨的挑戰(zhàn),先后演進出了SOA服務化架構(gòu)、RPC框架、分布式服務框架,最后就是當今非常流行的微服務架構(gòu)。微服務化架構(gòu)并非銀彈,它的實施本身就會面臨很多陷阱和挑戰(zhàn),涉及到設(shè)計、開發(fā)、測試、部署、運行和運維等各個方面,一旦使用不當,則會導致整個微服務架構(gòu)改造的效果大打折扣,甚至失敗。
并發(fā)編程
從Java基礎(chǔ)接觸多線程,到分布式架構(gòu)環(huán)境下的高并發(fā)訪問,并發(fā)編程充分利用好各個服務器處理器,以最高的效率處理各個任務協(xié)同有序工作。透徹理解鎖的應用
Java開發(fā)必知工具
一名優(yōu)秀的架構(gòu)師必須有適合自己的兵器,也就是工欲善其事必先利其器,不管是小白,還是資深開發(fā),都需要先選擇好的工具。工程化專題的學習能幫助你和團隊提升開發(fā)效率,讓自己有更多時間來思考。
Git:可以更好地管理你和你團隊的代碼。
Maven:可以更好地管理jar包和項目的構(gòu)建等。
Jenkins:可以更好地持續(xù)編譯,集成,發(fā)布你的項目。
Sonar:一個開源的代碼質(zhì)量分析平臺,便于管理代碼的質(zhì)量,可檢查出項目代碼的漏洞和潛在的邏輯問題(提升代碼的質(zhì)量,更加高效地提升開發(fā)效率)。
電商項目實戰(zhàn)
電商項目目的是把所學的分布式,微服務,性能調(diào)優(yōu)等知識運用起來,只有在項目中你才能鞏固知識,提升自己。實踐電商項目會利用云服務器搭建真實的開發(fā)和部署環(huán)境,讓你從零到項目實戰(zhàn),體驗真實的企業(yè)級項目開發(fā)過程,讓你具備獨立開發(fā)和搭建分布架構(gòu)系統(tǒng)的能力。
總結(jié)
要想有機會,首先你得從人群中冒出來,要想冒出來,你就必須做到與眾不同,要做到與眾不同,你就要做得更多!
成為技術(shù)大牛夢想雖然很美好,但是要付出很多,不管是Domore還是Dobetter還是Doexercise,都需要花費時間和精力,這個過程中可能很苦逼,也可能很枯燥,這里我想特別強調(diào)一下:前面我講的都是一些方法論的東西,但真正起決定作用的,其實還是我們對技術(shù)的熱情和興趣!
文末福利
人到中年,技術(shù)人開始擔心自己被前浪拍在沙灘上,被“下崗”、或者是“提前下崗”,了幫助大家擺脫這種中年危機,走上升職加薪的道路。特地分享一些收藏很久的資料分享給大家。需要的Java工程師朋友們可以登錄北大青鳥長沙麓谷校區(qū)IT培訓官網(wǎng)咨詢在線客服老師回復“Java架構(gòu)師資源”