从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!
如何從程序員進階到架構(gòu)師?今天完整的把我積累的經(jīng)驗和技能分享給大家! 作者:陳睿|優(yōu)知學(xué)院創(chuàng)始人
數(shù)據(jù)結(jié)構(gòu)+算法=程序
數(shù)據(jù)是一切能輸入到計算機的信息總和,結(jié)構(gòu)是指數(shù)據(jù)之間的關(guān)系,數(shù)據(jù)結(jié)構(gòu)就是將數(shù)據(jù)及其之間的關(guān)系有效地存儲在計算機中。
算法是指對特定問題求解步驟的一種描述,說白了就是解決問題的方法策略。
總而言之:數(shù)據(jù)結(jié)構(gòu)+算法=程序。
語言掌握
任何一門開發(fā)語言都自己的語法,也有對應(yīng)開發(fā)語言對應(yīng)的開發(fā)框架和開發(fā)工具,掌握一門開發(fā)語言后,后期再學(xué)別的開發(fā)語言就要容易很多。
高級語言特性掌握
剛學(xué)開發(fā)的同學(xué),早期主要是使用為主,工作1-3年后,使用的過程中需要理解為什么要這樣使用,這就涉及到背后的語言高級特性,例如:
多線程
線程間的狀態(tài)轉(zhuǎn)換:
1. 新建(new):新創(chuàng)建了一個線程對象。
2. 可運行(runnable):線程對象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調(diào)度選中,獲取cpu 的使用權(quán) 。
3. 運行(running):可運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。
4. 阻塞(block):阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權(quán),也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態(tài),才有機會再次獲得cpu timeslice 轉(zhuǎn)到運行(running)狀態(tài)。阻塞的情況分三種:
(一). 等待阻塞:運行(running)的線程執(zhí)行o.wait()方法,JVM會把該線程放入等待隊列(waitting queue)中。
(二). 同步阻塞:運行(running)的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池(lock pool)中。
(三). 其他阻塞:運行(running)的線程執(zhí)行Thread.sleep(long ms)或t.join()方法,或者發(fā)出了I/O請求時,JVM會把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉(zhuǎn)入可運行(runnable)狀態(tài)。
5. 死亡(dead):線程run()、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。
網(wǎng)絡(luò)OSI七層模型:
著名的開放系統(tǒng)互聯(lián)基本參考模型,即OSI,是由國際標準化組織(ISO)提出。
OSI的體系結(jié)構(gòu)定義了一個七層模型,用以進行進程間的通訊,并作為一個框架來協(xié)調(diào)各層標準的指定。
OSI采用七層模型可以帶來如下好處:
1)各層之間是獨立的。某一層并不需要知道他的下一層是如何實現(xiàn),僅需要知道該層的接口所提供的服務(wù)。
2)靈活性好。當(dāng)任何一層發(fā)生變化時(如技術(shù)的變化),只要曾間接口關(guān)系不變,則在這層以上或以下各層均不受影響。
3)結(jié)構(gòu)上可分割。各層都可以采用最合適的技術(shù)來實現(xiàn)。
4)易于實現(xiàn)和維護。因為整個系統(tǒng)已被分解為若干個相對獨立的子系統(tǒng)。
5)能促進標準化工作,因為每一層的功能及其所提供的服務(wù)都已有了精確的說明。
阿里巴巴常用開源框架
由于阿里的高并發(fā)訪問,已經(jīng)建立了非常完善的架構(gòu)基礎(chǔ)設(shè)施,比如小文件存儲:tfs,Dubbo阿里巴巴公司開源的一個高性能優(yōu)秀的服務(wù)框架,使得應(yīng)用可通過高性能的 RPC 實現(xiàn)服務(wù)的輸出和輸入功能,可以和 Spring框架無縫集成,還有內(nèi)部經(jīng)常使用到的分布式緩存框架:tair
熟練掌握常用設(shè)計模式
設(shè)計模式(Design pattern)是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設(shè)計模式于己于他人于系統(tǒng)都是多贏的;設(shè)計模式使代碼編制真正工程化;設(shè)計模式是軟件工程的基石脈絡(luò),如同大廈的結(jié)構(gòu)一樣。
JVM實現(xiàn)機制,垃圾回收算法
JVM基本是BAT面試題目必考,以及重點考察的重點,我舉幾個例子:
1. 內(nèi)存模型以及分區(qū),需要詳細到每個區(qū)放什么。
2. 堆里面的分區(qū):Eden,survivalfrom to,老年代,各自的特點。
1).JVM中堆空間可以分成三個大區(qū),新生代、老年代、永久代
2)新生代可以劃分為三個區(qū),Eden區(qū),兩個幸存區(qū)
3.對象創(chuàng)建方法,對象的內(nèi)存分配,對象的訪問定位。
4.GC收集器有哪些?CMS收集器與G1收集器的特點。
5.Minor GC與Full GC分別在什么時候發(fā)生?
6.常見的垃圾回收算法等等。
WEB開發(fā)
很多后端工程師,比如:java web開發(fā)工程師,是需要掌握很前段的開發(fā)基礎(chǔ):h5、js常用框架:jquery、css以及常見的前段調(diào)試開發(fā)工具,例如:firebug 、ietester、yslow等等。
也會涉及到很多servlet的訪問周期、tomcat、spring等的啟動完整過程。
還有很多常用的模版引擎,阿里內(nèi)部就使用veloctiy,很多公司也還在使用jsp等傳統(tǒng)的模版引擎等。
數(shù)據(jù)庫設(shè)計
常見的數(shù)據(jù)庫設(shè)計原則
SQL和NOSQL的選型使用,SQL的常規(guī)掌握,索引的建立和優(yōu)化原則等,也會涉及到更多大數(shù)據(jù)的分庫分表原則等。
開發(fā)框架和中間件框架選擇
java領(lǐng)域使用到的開源框架可供選項范圍很多,目前常用的web開發(fā)框架組合,典型的就是SSM(springMVC+Spring+Mybatis)
中間件的框架選擇也比較多,例如:分布式緩存這塊就有memcached,redis等。還有常見的消息隊列框架:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合,異步消息,流量削鋒等問題,目前使用最多的是ActiveMQ和Kafka。
這里也會涉及到分布式小文件的存儲等。
常用的開發(fā)工具
架構(gòu)設(shè)計經(jīng)驗
架構(gòu)設(shè)計更多來自于大型網(wǎng)站的架構(gòu)設(shè)計變遷,需要積累完整的數(shù)據(jù)庫、設(shè)計模式、中間件選擇、數(shù)據(jù)庫性能優(yōu)化、負載均衡、微服務(wù)架構(gòu)的掌握等:
大型網(wǎng)站架構(gòu)設(shè)計場景
你可能也喜歡:
總結(jié)
以上是生活随笔為你收集整理的从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COS系统的前端演变和发展
- 下一篇: java美元兑换,(Java实现) 美元