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