更新時(shí)間:2019-08-06 09:49:29 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2835次
Java架構(gòu)師,首先要是一個(gè)Java程序員,熟練掌握使用各種框架,并知道它們實(shí)現(xiàn)的原理,Java虛擬機(jī)原理、調(diào)優(yōu),懂得JVM能讓你寫出性能更好的代碼,池技術(shù),什么對(duì)象池,怎么解決并發(fā)量、連接池,線程池。
Java反射技術(shù),寫框架必備的技術(shù),但是有嚴(yán)重的性能問題,代替方案Java字節(jié)碼技術(shù)nio,沒什么好說的,值得注意的是“直接內(nèi)存”的特點(diǎn),使用場(chǎng)景Java多線程同步異步Java各種集合對(duì)象的實(shí)現(xiàn)原理,了解這些可以讓你在解決問題時(shí)選擇合適的數(shù)據(jù)結(jié)構(gòu),高效的解決問題,比如hashmap的實(shí)現(xiàn)原理,好多五年以上經(jīng)驗(yàn)的人都弄不清楚,還有為什么擴(kuò)容時(shí)有性能問題?不弄清楚這些原理,就寫不出高效的代碼,好會(huì)認(rèn)為自己做的很對(duì),總之一句話越基礎(chǔ)的東西越要,很對(duì)人認(rèn)為自己會(huì)用它們寫代碼了。其實(shí)僅僅是知道如何調(diào)用api而已,離會(huì)用還差的遠(yuǎn)。
二、技術(shù)歸納
熟練使用linux操作系統(tǒng),必備,沒什么好說的。
熟悉tcp協(xié)議,創(chuàng)建連接三次握手和斷開連接四次握手的整個(gè)過程,不了解的話,無(wú)法對(duì)高并發(fā)網(wǎng)絡(luò)應(yīng)用做優(yōu)化;熟悉http協(xié)議,尤其是http頭,我發(fā)現(xiàn)好多工作五年以上的都弄不清session和cookie的生命周期以及它們之間的關(guān)聯(lián)。
系統(tǒng)集群、負(fù)載均衡、反向代理、動(dòng)靜分離,網(wǎng)站靜態(tài)化。
分布式存儲(chǔ)系統(tǒng)nfs,fastdfs,tfs,Hadoop了解他們的優(yōu)缺點(diǎn),適用場(chǎng)景。
分布式緩存技術(shù)memcached,redis,提高系統(tǒng)性能必備,一句話,把硬盤上的內(nèi)容放到內(nèi)存里來(lái)提速,順便提個(gè)算法一致性hash。
工具nginx必備技能超級(jí)好用,高性能,基本不會(huì)掛掉的服務(wù)器,功能多多,解決各種問題。
數(shù)據(jù)庫(kù)的設(shè)計(jì)能力,mysql必備,最基礎(chǔ)的數(shù)據(jù)庫(kù)工具,免費(fèi)好用,對(duì)它基本的參數(shù)優(yōu)化,慢查詢?nèi)罩痉治?,主從?fù)制的配置,至少要成為半個(gè)mysqldba。其他nosql數(shù)據(jù)庫(kù)如mongodb。
還有隊(duì)列中間件。如消息推送,可以先把消息寫入數(shù)據(jù)庫(kù),推送放隊(duì)列服務(wù)器上,由推送服務(wù)器去隊(duì)列獲取處理,這樣就可以將消息放數(shù)據(jù)庫(kù)和隊(duì)列里后直接給用戶反饋,推送過程則由推送服務(wù)器和隊(duì)列服務(wù)器完成,好處異步處理、緩解服務(wù)器壓力,解藕系統(tǒng)。

三、面試方面
企業(yè)應(yīng)用的系統(tǒng)架構(gòu)師應(yīng)該關(guān)注的幾個(gè)方面(具體情況具體分析,以下未必準(zhǔn)確,只是參考)
先來(lái)一些基礎(chǔ)面試題,您答得出么?
1、說說JVM原理??jī)?nèi)存泄露與溢出區(qū)別,何時(shí)產(chǎn)生內(nèi)存泄露?
2、用java怎么實(shí)現(xiàn)有每天有1億條記錄的DB存儲(chǔ)?mysql上億記錄數(shù)據(jù)量的數(shù)據(jù)庫(kù)如何設(shè)計(jì)?
3、mysql支持事務(wù)嗎?DB存儲(chǔ)引擎有哪些?
4、mvc原理,mvc模式的優(yōu)缺點(diǎn),如果讓你設(shè)計(jì)你會(huì)怎么改造MVC?
5、hibernate支持集群?jiǎn)幔咳绾螌?shí)現(xiàn)集群?
6、tomcat最多支持并發(fā)多少用戶?
7、map原理,它是如何快速查找key的?map與set區(qū)別?
8、描術(shù)算法,如何有效合并兩個(gè)文件:一個(gè)是1億條的用戶基本信息,另一個(gè)是用戶每天看電影連續(xù)劇等的記錄,5000萬(wàn)條。內(nèi)存只有1G???
9、在1億條用戶記錄里,如何快速查詢統(tǒng)計(jì)出看了5個(gè)電影以上的用戶?----可以參考位圖索引的原理
10、Spring如何實(shí)現(xiàn)IOC與AOP的,說出實(shí)現(xiàn)原理?
以上純粹是常用的技術(shù),還有很多自己慢慢去摸索吧;因?yàn)橐赖臇|西很多,所以要成為一名合格的架構(gòu)師,必須要有強(qiáng)大的自學(xué)能力,沒有人會(huì)手把手的教給你所有的東西。
想成為架構(gòu)師不是懂了一大堆技術(shù)就可以了,這些是解決問題的基礎(chǔ)、是工具,不懂這些怎么去提解決方案呢?這是成為架構(gòu)師的必要條件。
架構(gòu)師要針對(duì)業(yè)務(wù)特點(diǎn)、系統(tǒng)的性能要求提出能解決問題成本最低的設(shè)計(jì)方案才合格,人家一個(gè)幾百人用戶的系統(tǒng),訪問量不大,數(shù)據(jù)量小,你給人家上集群、上分布式存儲(chǔ)、上高端服務(wù)器,為了架構(gòu)而架構(gòu),這是最扯淡的,架構(gòu)師的作用就是第一滿足業(yè)務(wù)需求,第二最低的硬件網(wǎng)絡(luò)成本和技術(shù)維護(hù)成本。
架構(gòu)師還要根據(jù)業(yè)務(wù)發(fā)展階段,提前預(yù)見發(fā)展到下一個(gè)階段系統(tǒng)架構(gòu)的解決方案,并且設(shè)計(jì)當(dāng)前架構(gòu)時(shí)將架構(gòu)的升級(jí)擴(kuò)展考慮進(jìn)去,做到易于升級(jí);否則等系統(tǒng)瓶頸來(lái)了,出問題了再去出方案,或現(xiàn)有架構(gòu)無(wú)法擴(kuò)展直接扔掉重做,或擴(kuò)展麻煩問題一大堆,這會(huì)對(duì)企業(yè)造成損失。
怎樣學(xué)習(xí)才能從一名Java初級(jí)程序員成長(zhǎng)為一名合格的架構(gòu)師,或者說一名合格的架構(gòu)師應(yīng)該有怎樣的技術(shù)知識(shí)體系,這是不僅一個(gè)剛剛踏入職場(chǎng)的初級(jí)程序員也是工作三五年之后開始迷茫的老程序員經(jīng)常會(huì)問到的問題。希望這篇文章會(huì)是你看到過的最全面最權(quán)威的回答。
提升技術(shù)的誤區(qū):
有人認(rèn)為想成為技術(shù)大牛最簡(jiǎn)單直接、快速有效的方式是“拜團(tuán)隊(duì)技術(shù)大牛為師”,讓他們平時(shí)給你開小灶,給你分配一些有難度的任務(wù)。
有這種想法是錯(cuò)誤的,主要有這幾個(gè)原因:
1、首先,大牛是很忙的,一個(gè)團(tuán)隊(duì)里面,如果大牛平時(shí)經(jīng)常給你開小灶,難免會(huì)引起其他團(tuán)隊(duì)成員的疑惑,我個(gè)人認(rèn)為如果團(tuán)隊(duì)里的大牛如果真正有心的話,多給團(tuán)隊(duì)培訓(xùn)是最好的。然而做過培訓(xùn)的都知道,準(zhǔn)備一場(chǎng)培訓(xùn)是很耗費(fèi)時(shí)間的,課件和材料至少2個(gè)小時(shí)(還不能是碎片時(shí)間),講解1個(gè)小時(shí),大牛們一個(gè)月做一次培訓(xùn)已經(jīng)是很高頻了。
2、大牛不多,不太可能每個(gè)團(tuán)隊(duì)都有技術(shù)大牛,只能說團(tuán)隊(duì)里面會(huì)有比你水平高的人,即使他每天給你開小灶,最終你也只能提升到他的水平;而如果是跨團(tuán)隊(duì)的技術(shù)大牛,由于工作安排和分配的原因,直接請(qǐng)教和輔導(dǎo)的機(jī)會(huì)是比較少的,單憑參加幾次大牛的培訓(xùn),是不太可能就成為技術(shù)大牛的。
學(xué)習(xí)方式
如何想辦法真正的提升自己:moreandmore
做的更多,做的比你主管安排給你的任務(wù)更多。熟悉更多業(yè)務(wù),不管是不是你負(fù)責(zé)的;熟悉更多代碼,不管是不是你寫的
這樣做有很多好處,舉幾個(gè)簡(jiǎn)單的例子:
1:需求分析的時(shí)候更加準(zhǔn)確,能夠在需求階段就識(shí)別風(fēng)險(xiǎn)、影響、難點(diǎn)
2:?jiǎn)栴}處理的時(shí)候更加快速,因?yàn)橄嚓P(guān)的業(yè)務(wù)和代碼都熟悉,能夠快速的判斷問題可能的原因并進(jìn)行排查處理
3:方案設(shè)計(jì)的時(shí)候考慮更加周全,由于有對(duì)全局業(yè)務(wù)的理解,能夠設(shè)計(jì)出更好的方案
4:找到正確的學(xué)習(xí)路線
在此分享一份自己收藏的適合Java程序員進(jìn)階學(xué)習(xí)的架構(gòu)路線圖:
閱讀源碼,分析源碼知識(shí)點(diǎn)總匯
源碼分析專題詳細(xì)介紹了源碼中所用到的經(jīng)典設(shè)計(jì)思想及常用設(shè)計(jì)模式,先打好內(nèi)功基礎(chǔ),了解大牛是如何寫代碼的,從而吸收大牛的代碼功力。
結(jié)合Spring5和MyBatis源碼,帶你理解作者框架思維,幫助大家尋找分析源碼的切入點(diǎn),在思想上來(lái)一次巨大的升華。

分布式架構(gòu)技能學(xué)習(xí)總匯
有了大牛的代碼功底之后,接下來(lái)可以更好地學(xué)習(xí)分布式架構(gòu)技術(shù)。
分布式架構(gòu)的好處和優(yōu)點(diǎn)---->必然性,適應(yīng)市場(chǎng)需求,能夠去找一些更大的平臺(tái)發(fā)展,提升自己的綜合技術(shù)能力和薪資。
從分布式架構(gòu)原理,到分布式架構(gòu)策略,再到分布式架構(gòu)中間件,最后會(huì)有分布式架構(gòu)實(shí)戰(zhàn),讓程序員可以在技術(shù)深度和技術(shù)廣度上得到飛躍的提升,成為互聯(lián)網(wǎng)行業(yè)所需要的T型人才。

微服務(wù)架構(gòu)專題
隨著業(yè)務(wù)的發(fā)展,代碼量的膨脹和團(tuán)隊(duì)成員的增加,傳統(tǒng)單體式架構(gòu)的弊端越來(lái)越凸顯,嚴(yán)重制約了業(yè)務(wù)的快速創(chuàng)新和敏捷交付。為了解決傳統(tǒng)單體架構(gòu)面臨的挑戰(zhàn),先后演進(jìn)出了SOA服務(wù)化架構(gòu)、RPC框架、分布式服務(wù)框架,最后就是當(dāng)今非常流行的微服務(wù)架構(gòu)。微服務(wù)化架構(gòu)并非銀彈,它的實(shí)施本身就會(huì)面臨很多陷阱和挑戰(zhàn),涉及到設(shè)計(jì)、開發(fā)、測(cè)試、部署、運(yùn)行和運(yùn)維等各個(gè)方面,一旦使用不當(dāng),則會(huì)導(dǎo)致整個(gè)微服務(wù)架構(gòu)改造的效果大打折扣,甚至失敗。

并發(fā)編程
從Java基礎(chǔ)接觸多線程,到分布式架構(gòu)環(huán)境下的高并發(fā)訪問,并發(fā)編程充分利用好各個(gè)服務(wù)器處理器,以最高的效率處理各個(gè)任務(wù)協(xié)同有序工作。透徹理解鎖的應(yīng)用

Java開發(fā)必知工具
一名優(yōu)秀的架構(gòu)師必須有適合自己的兵器,也就是工欲善其事必先利其器,不管是小白,還是資深開發(fā),都需要先選擇好的工具。工程化專題的學(xué)習(xí)能幫助你和團(tuán)隊(duì)提升開發(fā)效率,讓自己有更多時(shí)間來(lái)思考。
Git:可以更好地管理你和你團(tuán)隊(duì)的代碼。
Maven:可以更好地管理jar包和項(xiàng)目的構(gòu)建等。
Jenkins:可以更好地持續(xù)編譯,集成,發(fā)布你的項(xiàng)目。
Sonar:一個(gè)開源的代碼質(zhì)量分析平臺(tái),便于管理代碼的質(zhì)量,可檢查出項(xiàng)目代碼的漏洞和潛在的邏輯問題(提升代碼的質(zhì)量,更加高效地提升開發(fā)效率)。

電商項(xiàng)目實(shí)戰(zhàn)
電商項(xiàng)目目的是把所學(xué)的分布式,微服務(wù),性能調(diào)優(yōu)等知識(shí)運(yùn)用起來(lái),只有在項(xiàng)目中你才能鞏固知識(shí),提升自己。實(shí)踐電商項(xiàng)目會(huì)利用云服務(wù)器搭建真實(shí)的開發(fā)和部署環(huán)境,讓你從零到項(xiàng)目實(shí)戰(zhàn),體驗(yàn)真實(shí)的企業(yè)級(jí)項(xiàng)目開發(fā)過程,讓你具備獨(dú)立開發(fā)和搭建分布架構(gòu)系統(tǒng)的能力。

總結(jié)
要想有機(jī)會(huì),首先你得從人群中冒出來(lái),要想冒出來(lái),你就必須做到與眾不同,要做到與眾不同,你就要做得更多!
成為技術(shù)大牛夢(mèng)想雖然很美好,但是要付出很多,不管是Domore還是Dobetter還是Doexercise,都需要花費(fèi)時(shí)間和精力,這個(gè)過程中可能很苦逼,也可能很枯燥,這里我想特別強(qiáng)調(diào)一下:前面我講的都是一些方法論的東西,但真正起決定作用的,其實(shí)還是我們對(duì)技術(shù)的熱情和興趣!
文末福利
人到中年,技術(shù)人開始擔(dān)心自己被前浪拍在沙灘上,被“下崗”、或者是“提前下崗”,了幫助大家擺脫這種中年危機(jī),走上升職加薪的道路。特地分享一些收藏很久的資料分享給大家。需要的Java工程師朋友們可以登錄動(dòng)力節(jié)點(diǎn)IT培訓(xùn)官網(wǎng)咨詢?cè)诰€客服老師回復(fù)“Java架構(gòu)師資源”


相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)