BAT架構師所具備的完整Java技術知識圖譜

很多童鞋都有這樣的困惑。想要成為架構師,但是不知道需要掌握哪些知識點。我現(xiàn)在將自己在過去13年工作中所積累的經驗和技能,通過技能圖譜的方式整理分享給大家!

作者陳睿,13年+技術專家,架構專題500期作者,多次操盤數(shù)億級數(shù)據(jù)量、數(shù)億級PV和千萬級UV的大廠項目。曾先后就職于淘寶、盛大、百度、攜程,歷任高級研發(fā)、架構師、研發(fā)經理、事業(yè)部CTO。

數(shù)據(jù)結構+算法=程序

數(shù)據(jù)是一切能輸入到計算機的信息總和,結構是指數(shù)據(jù)之間的關系,數(shù)據(jù)結構就是將數(shù)據(jù)及其之間的關系有效地存儲在計算機中。

算法是指對特定問題求解步驟的一種描述,說白了就是解決問題的方法策略。

總而言之:數(shù)據(jù)結構+算法=程序

語言掌握

任何一門開發(fā)語言都自己的語法,也有對應開發(fā)語言對應的開發(fā)框架和開發(fā)工具,掌握一門開發(fā)語言后,后期再學別的開發(fā)語言就要容易很多。

高級語言特性掌握

剛學開發(fā)的同學,早期主要是使用為主,工作1-3年后,使用的過程中需要理解為什么要這樣使用,這就涉及到背后的語言高級特性,例如:

多線程

線程間的狀態(tài)轉換:

1. 新建(new):新創(chuàng)建了一個線程對象。

2. 可運行(runnable):線程對象創(chuàng)建后,其他線程(比如main線程)調用了該對象的start()方法。該狀態(tài)的線程位于可運行線程池中,等待被線程調度選中,獲取cpu 的使用權 。

3. 運行(running):可運行狀態(tài)(runnable)的線程獲得了cpu 時間片(timeslice) ,執(zhí)行程序代碼。

4. 阻塞(block):阻塞狀態(tài)是指線程因為某種原因放棄了cpu 使用權,也即讓出了cpu timeslice,暫時停止運行。直到線程進入可運行(runnable)狀態(tài),才有機會再次獲得cpu timeslice 轉到運行(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)。當sleep()狀態(tài)超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入可運行(runnable)狀態(tài)。

5. 死亡(dead):線程run()、main() 方法執(zhí)行結束,或者因異常退出了run()方法,則該線程結束生命周期。死亡的線程不可再次復生。

網(wǎng)絡OSI七層模型:

著名的開放系統(tǒng)互聯(lián)基本參考模型,即OSI,是由國際標準化組織(ISO)提出。

OSI的體系結構定義了一個七層模型,用以進行進程間的通訊,并作為一個框架來協(xié)調各層標準的指定。

OSI采用七層模型可以帶來如下好處:

1)各層之間是獨立的。某一層并不需要知道他的下一層是如何實現(xiàn),僅需要知道該層的接口所提供的服務。

2)靈活性好。當任何一層發(fā)生變化時(如技術的變化),只要曾間接口關系不變,則在這層以上或以下各層均不受影響。

3)結構上可分割。各層都可以采用最合適的技術來實現(xiàn)。

4)易于實現(xiàn)和維護。因為整個系統(tǒng)已被分解為若干個相對獨立的子系統(tǒng)。

5)能促進標準化工作,因為每一層的功能及其所提供的服務都已有了精確的說明。

阿里巴巴常用開源框架

由于阿里的高并發(fā)訪問,已經建立了非常完善的架構基礎設施,比如小文件存儲:tfs,Dubbo阿里巴巴公司開源的一個高性能優(yōu)秀的服務框架,使得應用可通過高性能的 RPC 實現(xiàn)服務的輸出和輸入功能,可以和 Spring框架無縫集成,還有內部經常使用到的分布式緩存框架:tair

熟練掌握常用設計模式

設計模式(Design pattern)是一套被反復使用、多數(shù)人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式于己于他人于系統(tǒng)都是多贏的;設計模式使代碼編制真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。

JVM實現(xiàn)機制,垃圾回收算法

JVM基本是BAT面試題目必考,以及重點考察的重點,我舉幾個例子:

1. 內存模型以及分區(qū),需要詳細到每個區(qū)放什么。

2. 堆里面的分區(qū):Eden,survivalfrom to,老年代,各自的特點。

1).JVM中堆空間可以分成三個大區(qū),新生代、老年代、永久代

2)新生代可以劃分為三個區(qū),Eden區(qū),兩個幸存區(qū)

3.對象創(chuàng)建方法,對象的內存分配,對象的訪問定位。

4.GC收集器有哪些?CMS收集器與G1收集器的特點。

5.Minor GC與Full GC分別在什么時候發(fā)生?

6.常見的垃圾回收算法等等。

WEB開發(fā)

很多后端工程師,比如:java web開發(fā)工程師,是需要掌握很前段的開發(fā)基礎:h5、js常用框架:jquery、css以及常見的前段調試開發(fā)工具,例如:firebug 、ietester、yslow等等。

也會涉及到很多servlet的訪問周期、tomcat、spring等的啟動完整過程。

還有很多常用的模版引擎,阿里內部就使用veloctiy,很多公司也還在使用jsp等傳統(tǒng)的模版引擎等。

數(shù)據(jù)庫設計

常見的數(shù)據(jù)庫設計原則

SQL和NOSQL的選型使用,SQL的常規(guī)掌握,索引的建立和優(yōu)化原則等,也會涉及到更多大數(shù)據(jù)的分庫分表原則等。

開發(fā)框架和中間件框架選擇

java領域使用到的開源框架可供選項范圍很多,目前常用的web開發(fā)框架組合,典型的就是SSM(springMVC+Spring+Mybatis)

中間件的框架選擇也比較多,例如:分布式緩存這塊就有memcached,redis等。還有常見的消息隊列框架:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應用耦合,異步消息,流量削鋒等問題,目前使用最多的是ActiveMQ和Kafka。

這里也會涉及到分布式小文件的存儲等。

常用的開發(fā)工具

架構設計經驗

架構設計更多來自于大型網(wǎng)站的架構設計變遷,需要積累完整的數(shù)據(jù)庫、設計模式、中間件選擇、數(shù)據(jù)庫性能優(yōu)化、負載均衡、微服務架構的掌握等:

大型網(wǎng)站架構設計場景

覺得不錯請點贊支持下。

----end----

PS:Mike的《架構進階專題》又更新干貨了,目前該專題已超過100期+。內容涵蓋:數(shù)據(jù)結構和算法、Java高級特性、Java web核心、數(shù)據(jù)庫、Java框架與必備工具、系統(tǒng)架構設計等,希望能真正幫助到想要從程序員進階為高級Java、架構師之路的朋友。

還沒領過的童鞋,文末有鏈接獲取方法。

領取過的童鞋,按照之前提供鏈接即可訪問獲取。

領取方法:

關注+轉發(fā)本篇文章,然后私信關鍵詞 【架構】,即可獲取。

重要的事情說三遍,關注+轉發(fā)、關注+轉發(fā)、關注+轉發(fā),然后私信關鍵詞 【架構】,即可獲取~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容