? ? ? ? 既然java架構師途戒,首先你要是一個高級java攻城尸,熟練使用各種框架僵驰,并知道它們實現的原理喷斋。
? ? ? ? ? jvm虛擬機原理、調優(yōu),懂得jvm能讓你寫出性能更好的代碼蒜茴;池技術星爪,什么對象池,連接池粉私,線程池...:;java反射技術顽腾,寫框架必備的技術,但是有嚴重的性能問題诺核,替代方案java字節(jié)碼技術;nio抄肖,沒什么好說的,值得注意的是"直接內存"的特點窖杀,使用場景;java多線程同步異步漓摩;java各種集合對象的實現原理,了解這些可以讓你在解決問題時選擇合適的數據結構入客,高效的解決問題管毙,比如hashmap的實現原理腿椎,好多五年以上經驗的人都弄不清楚,還有為什擴容時有性能問題锅风?不弄清楚這些原理酥诽,就寫不出高效的代碼鞍泉,還會認為自己做的很對皱埠;總之一句話越基礎的東西越重要,很多人認為自己會用它們寫代碼了咖驮,其實僅僅是知道如何調用api而已,離會用還差的遠边器。
? ? ? ? ?熟練使用各種數據結構和算法,數組托修、哈希忘巧、鏈表、排序樹...睦刃,一句話要么是時間換空間要么是空間換時間砚嘴,這里展開可以說一大堆,需要有一定的應用經驗涩拙,用于解決各種性能或業(yè)務上的問題际长;有時間再補充。熟練使用linux操作系統(tǒng)兴泥,必備工育,沒什么好說的 。熟悉tcp協議搓彻,創(chuàng)建連接三次握手和斷開連接四次握手的整個過程如绸,不了解的話,無法對高并發(fā)網絡應用做優(yōu)化; 熟悉http協議旭贬,尤其是http頭怔接,我發(fā)現好多工作五年以上的都弄不清session和cookie的生命周期以及它們之間的關聯。系統(tǒng)集群稀轨、負載均衡扼脐、反向代理、動靜分離靶端,網站靜態(tài)化 谎势。分布式存儲系統(tǒng)nfs,fastdfs,tfs,Hadoop了解他們的優(yōu)缺點,適用場景 杨名。分布式緩存技術memcached,redis脏榆,提高系統(tǒng)性能必備,一句話台谍,把硬盤上的內容放到內存里來提速须喂,順便提個算法一致性hash 。工具nginx必備技能超級好用,高性能坞生,基本不會掛掉的服務器仔役,功能多多,解決各種問題是己。數據庫的設計能力又兵,mysql必備,最基礎的數據庫工具卒废,免費好用沛厨,對它基本的參數優(yōu)化,慢查詢日志分析摔认,主從復制的配置逆皮,至少要成為半個mysql dba。其他nosql數據庫如mongodb参袱。還有隊列中間件电谣。如消息推送,可以先把消息寫入數據庫抹蚀,推送放隊列服務器上剿牺,由推送服務器去隊列獲取處理,這樣就可以將消息放數據庫和隊列里后直接給用戶反饋况鸣,推送過程則由推送服務器和隊列服務器完成牢贸,好處異步處理、緩解服務器壓力镐捧,解藕系統(tǒng)潜索。
? ? ? ? ? 以上純粹是常用的技術,還有很多自己慢慢去摸索吧懂酱;因為要知道的東西很多竹习,所以要成為一名合格的架構師,必須要有強大的自學能力列牺,沒有人會手把手的教給你所有的東西整陌。想成為架構師不是懂了一大堆技術就可以了,這些是解決問題的基礎瞎领、是工具泌辫,不懂這些怎么去提解決方案呢?這是成為架構師的必要條件九默。
? ? ? ? ? 架構師還要針對業(yè)務特點震放、系統(tǒng)的性能要求提出能解決問題成本最低的設計方案才合格,人家一個幾百人用戶的系統(tǒng)驼修,訪問量不大殿遂,數據量小诈铛,你給人家上集群、上分布式存儲墨礁、上高端服務器幢竹,為了架構而架構,這是最扯淡的恩静,架構師的作用就是第一滿足業(yè)務需求焕毫,第二最低的硬件網絡成本和技術維護成本。架構師還要根據業(yè)務發(fā)展階段蜕企,提前預見發(fā)展到下一個階段系統(tǒng)架構的解決方案咬荷,并且設計當前架構時將架構的升級擴展考慮進去,做到易于升級;否則等系統(tǒng)瓶頸來了轻掩,出問題了再去出方案,或現有架構無法擴展直接扔掉重做懦底,或擴展麻煩問題一大堆唇牧,這會對企業(yè)造成損失;手機手工輸入的聚唐,想到哪里寫到哪里丐重,很亂..做技術的,表達能力不強杆查,將就著看吧扮惦,歡迎大家補充,歡迎有多年工作經驗的Java大神——群587372254互相學習交流亲桦,有學習有交流才有進步崖蜜。
? ? ? ? ? 所謂架構師,思考的是全局的東西客峭,是如何組織你的系統(tǒng)豫领,以達到業(yè)務要求,性能要求舔琅,具備可擴展性(scalability)等恐,可拓展性(extendability),前后兼容性等备蚓】问撸可能涉及到的東西包括了從硬件到軟件的方方面面,實在是一言難盡郊尝。如果你立志做架構二跋,首先打好基礎,從最底層開始虚循。然后發(fā)展到各種技術和語言同欠,什么都要懂兩點样傍,要全面且不膚淺。為什么不是懂一點铺遂?你要看得透徹衫哥,必須盡量深入一些。別人懂一點襟锐,你要做架構師撤逢,必須再多懂一點。比如你發(fā)現golang很流行粮坞,別人可能寫一個helloworld就說自己玩過golang蚊荣,但你至少要嘗試寫一個完整的應用。不肯下苦功莫杈,如何高人一頭互例?另外你要非常深入地了解至少一門語言,如果你的目標是java筝闹,就學到極致媳叨,作為敲門磚,先吃飽了才能談理想关顷。而Java學到極致勢必涉及到設計模式糊秆,算法和數據結構,多線程议双,文件及網絡IO痘番,數據庫及ORM,不一而足平痰。這些概念放之一切語言都適用汞舱。先精一門,為全面且不膚淺打基礎觉增。另外就是向有經驗的架構師學習兵拢,和小伙伴們討論辯論爭論。其實最重要的能力就是不斷學習逾礁。在思考新的技術是否能更好地解決你們遇到的問題之前说铃,你首先得知道并了解新的技術。說了半天嘹履,架構師很多時候是被迫上位的腻扇,并不是你學了這個和那個之后你就成為架構師了,這并不是RPG游戲砾嫉。
1:扎實的java基礎幼苛。如樓上的寫的看過thinking in java』拦危可以是一名合格的程序員
2:熟練使用基本的框架舶沿。比如ssh墙杯,shiro等等。這時應該可以稱之為軟件工程師了
3:有過2中框架或者web中間件的源碼研究經歷括荡。
4:經歷過大并發(fā)挑戰(zhàn)高镐,并且有過相關應對經驗
5:有消息中間件,服務中間件等的使用和架構經驗
6:對系統(tǒng)本身的業(yè)務特點有深刻的理解畸冲。能夠針對業(yè)務特點嫉髓,分析短板并解決。
實例分析:一例千萬級pv高性能高并發(fā)網站架構