Java程序猿如何从码农晋升为架构师
一、架構(gòu)師的定義
首先必須具有豐富的軟件設(shè)計(jì)與開發(fā)經(jīng)驗(yàn),這有助于理解并解釋所進(jìn)行的設(shè)計(jì)是如何映射到實(shí)現(xiàn)中去。
其次要具有領(lǐng)導(dǎo)能力與團(tuán)隊(duì)協(xié)作技能,軟件架構(gòu)師必須是一個(gè)得到承認(rèn)的技術(shù)領(lǐng)導(dǎo),能在關(guān)鍵時(shí)候?qū)夹g(shù)的選擇作出及時(shí)、有效的決定。
第三是具有很強(qiáng)的溝通能力,其實(shí)這一點(diǎn)好像什么角色都最好具備,軟件架構(gòu)師需要與各路人馬經(jīng)常打交道,客戶、市場(chǎng)人員、開發(fā)人員、測(cè)試人員、項(xiàng)目經(jīng)理、網(wǎng)絡(luò)管理員、數(shù)據(jù)庫工程師等等,而且在很多角色之間還要起溝通者的作用。
但作為一個(gè)架構(gòu)師,在整個(gè)軟件系統(tǒng)的開發(fā)過程中是樂趣無窮的,因?yàn)檫@個(gè)角色很具有挑戰(zhàn)性,有時(shí)需要左右逢源、八面玲瓏,有時(shí)又需要果斷堅(jiān)定、不留情面。
二、所需要掌握的技術(shù)
熟練使用linux操作系統(tǒng),必備,沒什么好說的 。
熟悉tcp協(xié)議,創(chuàng)建連接三次握手和斷開連接四次握手的整個(gè)過程,不了解的話,無法對(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)存里來提速,順便提個(gè)算法一致性hash 。
工具nginx必備技能超級(jí)好用,高性能,基本不會(huì)掛掉的服務(wù)器,功能多多,解決各種問題。
數(shù)據(jù)庫的設(shè)計(jì)能力,mysql必備,最基礎(chǔ)的數(shù)據(jù)庫工具,免費(fèi)好用,對(duì)它基本的參數(shù)優(yōu)化,慢查詢?nèi)罩痉治?#xff0c;主從復(fù)制的配置,至少要成為半個(gè)mysql dba。其他nosql數(shù)據(jù)庫如mongodb。
還有隊(duì)列中間件。如消息推送,可以先把消息寫入數(shù)據(jù)庫,推送放隊(duì)列服務(wù)器上,由推送服務(wù)器去隊(duì)列獲取處理,這樣就可以將消息放數(shù)據(jù)庫和隊(duì)列里后直接給用戶反饋,推送過程則由推送服務(wù)器和隊(duì)列服務(wù)器完成,好處異步處理、緩解服務(wù)器壓力,解藕系統(tǒng)。
三、面試方面
企業(yè)應(yīng)用的系統(tǒng)架構(gòu)師應(yīng)該關(guān)注的幾個(gè)方面 (具體情況具體分析,以下未必準(zhǔn)確,只是參考)
先來一些基礎(chǔ)面試題,您答得出么?
1、說說JVM原理?內(nèi)存泄露與溢出區(qū)別,何時(shí)產(chǎn)生內(nèi)存泄露?
2、用java怎么實(shí)現(xiàn)有每天有1億條記錄的DB存儲(chǔ)?mysql上億記錄數(shù)據(jù)量的數(shù)據(jù)庫如何設(shè)計(jì)?
3、mysql支持事務(wù)嗎?DB存儲(chǔ)引擎有哪些?
4、mvc原理,mvc模式的優(yōu)缺點(diǎn),如果讓你設(shè)計(jì)你會(huì)怎么改造MVC?
5、hibernate支持集群嗎?如何實(shí)現(xiàn)集群?
6、tomcat 最多支持并發(fā)多少用戶?
7、map原理,它是如何快速查找key的?map與set區(qū)別?
8、描術(shù)算法,如何有效合并兩個(gè)文件:一個(gè)是1億條的用戶基本信息,另一個(gè)是用戶每天看電影連續(xù)劇等的記錄,5000萬條。內(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)瓶頸來了,出問題了再去出方案,或現(xiàn)有架構(gòu)無法擴(kuò)展直接扔掉重做,或擴(kuò)展麻煩問題一大堆,這會(huì)對(duì)企業(yè)造成損失。
在此跟大家分享一份工作2-5年的Java程序員學(xué)習(xí)路線圖:
再給往架構(gòu)師方面發(fā)展的朋友推薦幾本書
Java系統(tǒng)架構(gòu)師應(yīng)該看的幾本書
Thinking in Java
Effective Java
UML基礎(chǔ)、案例與應(yīng)用
UML入門提高
軟件工匠
設(shè)計(jì)模式——可復(fù)用面向?qū)ο筌浖幕A(chǔ)
重構(gòu)-改善既有代碼的設(shè)計(jì)
敏捷軟件開發(fā)-原則、模式、實(shí)踐
企業(yè)應(yīng)用架構(gòu)模式
Expert One-on-One J2EE Development without EJB
軟件工程——實(shí)踐者的研究方法
軟件領(lǐng)導(dǎo)--成功開發(fā)軟件的指導(dǎo)準(zhǔn)則
后面的兩本書,其實(shí)已經(jīng)有點(diǎn)屬于項(xiàng)目經(jīng)理的范疇了,不過還不是很深入,看看對(duì)做成功的系統(tǒng)架構(gòu)師是很有好處。
總結(jié):其實(shí)架構(gòu)師定義是模棱兩可的,有些7、8年開發(fā)人員也算不上架構(gòu)師,架構(gòu)師一般是在某領(lǐng)域超乎常人的理解,在公司遇到技術(shù)方面難題的時(shí)候,這個(gè)時(shí)候如果你技術(shù)過硬,能快速的解決問題。
其實(shí)也不一定要往架構(gòu)師方向發(fā)展,程序員靠技術(shù)吃飯,只能通過不斷的學(xué)習(xí)新技術(shù)、新東西,才能跟的上現(xiàn)在互聯(lián)網(wǎng)發(fā)展的腳步。這些只是個(gè)人見解,歡迎大家評(píng)論關(guān)注,或者說說你理解的架構(gòu)師是怎么樣的。
對(duì)Java分布式、高并發(fā)、JVM、高性能等技術(shù)感興趣的可以關(guān)注我
轉(zhuǎn)載于:https://juejin.im/post/5c8127f7e51d451538309b25
總結(jié)
以上是生活随笔為你收集整理的Java程序猿如何从码农晋升为架构师的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文读懂HTTP/2及HTTP/3特性
- 下一篇: SQL中显示查询结果的前几条记录