Java程序猿如何從碼農晉升爲架構師

1、架構師的定義java

首先必須具備豐富的軟件設計與開發經驗,這有助於理解並解釋所進行的設計是如何映射到實現中去。mysql

其次要具備領導能力與團隊協做技能,軟件架構師必須是一個獲得認可的技術領導,能在關鍵時候對技術的選擇做出及時、有效的決定。linux

第三是具備很強的溝通能力,其實這一點好像什麼角色都最好具有,軟件架構師須要與各路人馬常常打交道,客戶、市場人員、開發人員、測試人員、項目經理、網絡管理員、數據庫工程師等等,並且在不少角色之間還要起溝通者的做用。nginx

但做爲一個架構師,在整個軟件系統的開發過程當中是樂趣無窮的,由於這個角色很具備挑戰性,有時須要左右逢源、八面玲瓏,有時又須要果斷堅決、不留情面。程序員

2、所須要掌握的技術面試

熟練使用linux操做系統,必備,沒什麼好說的 。redis

熟悉tcp協議,建立鏈接三次握手和斷開鏈接四次握手的整個過程,不瞭解的話,沒法對高併發網絡應用作優化; 熟悉http協議,尤爲是http頭,我發現好多工做五年以上的都弄不清session和cookie的生命週期以及它們之間的關聯。算法

系統集羣、負載均衡、反向代理、動靜分離,網站靜態化 。sql

分佈式存儲系統nfs,fastdfs,tfs,Hadoop瞭解他們的優缺點,適用場景 。mongodb

分佈式緩存技術memcached,redis,提升系統性能必備,一句話,把硬盤上的內容放到內存裏來提速,順便提個算法一致性hash 。

工具nginx必備技能超級好用,高性能,基本不會掛掉的服務器,功能多多,解決各類問題。

數據庫的設計能力,mysql必備,最基礎的數據庫工具,免費好用,對它基本的參數優化,慢查詢日誌分析,主從複製的配置,至少要成爲半個mysql dba。其餘nosql數據庫如mongodb。

還有隊列中間件。如消息推送,能夠先把消息寫入數據庫,推送放隊列服務器上,由推送服務器去隊列獲取處理,這樣就能夠將消息放數據庫和隊列裏後直接給用戶反饋,推送過程則由推送服務器和隊列服務器完成,好處異步處理、緩解服務器壓力,解藕系統。

3、面試方面

企業應用的系統架構師應該關注的幾個方面 (具體狀況具體分析,如下未必準確,只是參考)

先來一些基礎面試題,您答得出麼?

一、說說JVM原理?內存泄露與溢出區別,什麼時候產生內存泄露?

二、用java怎麼實現有天天有1億條記錄的DB存儲?mysql上億記錄數據量的數據庫如何設計?

三、mysql支持事務嗎?DB存儲引擎有哪些?

四、mvc原理,mvc模式的優缺點,若是讓你設計你會怎麼改造MVC?

五、hibernate支持集羣嗎?如何實現集羣?

六、tomcat 最多支持併發多少用戶?

七、map原理,它是如何快速查找key的?map與set區別?

八、描術算法,如何有效合併兩個文件:一個是1億條的用戶基本信息,另外一個是用戶天天看電影連續劇等的記錄,5000萬條。內存只有1G???

九、在1億條用戶記錄裏,如何快速查詢統計出看了5個電影以上的用戶? ----能夠參考 位圖索引的原理

十、Spring如何實現IOC與AOP的,說出實現原理?

以上純粹是經常使用的技術,還有不少本身慢慢去摸索吧;由於要知道的東西不少,因此要成爲一名合格的架構師,必需要有強大的自學能力,沒有人會手把手的教給你全部的東西。

想成爲架構師不是懂了一大堆技術就能夠了,這些是解決問題的基礎、是工具,不懂這些怎麼去提解決方案呢?這是成爲架構師的必要條件。

架構師要針對業務特色、系統的性能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人用戶的系統,訪問量不大,數據量小,你給人家上集羣、上分佈式存儲、上高端服務器,爲了架構而架構,這是最扯淡的,架構師的做用就是第一知足業務需求,第二最低的硬件網絡成本和技術維護成本。

架構師還要根據業務發展階段,提早預見發展到下一個階段系統架構的解決方案,而且設計當前架構時將架構的升級擴展考慮進去,作到易於升級;不然等系統瓶頸來了,出問題了再去出方案,或現有架構沒法擴展直接扔掉重作,或擴展麻煩問題一大堆,這會對企業形成損失。

在此跟你們分享一份工做2-5年的Java程序員學習路線圖:

再給往架構師方面發展的朋友推薦幾本書

Java系統架構師應該看的幾本書

Thinking in Java

Effective Java

UML基礎、案例與應用

UML入門提升

軟件工匠

設計模式——可複用面向對象軟件的基礎

重構-改善既有代碼的設計

敏捷軟件開發-原則、模式、實踐

企業應用架構模式

Expert One-on-One J2EE Development without EJB

軟件工程——實踐者的研究方法

軟件領導--成功開發軟件的指導準則

後面的兩本書,其實已經有點屬於項目經理的範疇了,不過還不是很深刻,看看對作成功的系統架構師是頗有好處。

總結:其實架構師定義是模棱兩可的,有些七、8年開發人員也算不上架構師,架構師通常是在某領域超乎常人的理解,在公司遇到技術方面難題的時候,這個時候若是你技術過硬,能快速的解決問題。

其實也不必定要往架構師方向發展,程序員靠技術吃飯,只能經過不斷的學習新技術、新東西,才能跟的上如今互聯網發展的腳步。這些只是我的看法,歡迎你們評論關注,或者說說你理解的架構師是怎麼樣的。

對Java分佈式、高併發、JVM、高性能等技術感興趣的能夠關注我

相關文章
相關標籤/搜索