隨著計算機信息技(ji)術的(de)飛(fei)速發(fa)展,互聯網行(xing)(xing)業(ye)(ye)(ye)越來受到年輕人(ren)的(de)歡迎,很(hen)多(duo)非本行(xing)(xing)業(ye)(ye)(ye)的(de)人(ren)羨慕IT行(xing)(xing)業(ye)(ye)(ye)的(de)高(gao)薪資、好(hao)就業(ye)(ye)(ye),也開(kai)始通過IT培訓(xun)紛(fen)紛(fen)投身(shen)到這一行(xing)(xing)業(ye)(ye)(ye)。就目前在(zai)IT行(xing)(xing)業(ye)(ye)(ye)中就業(ye)(ye)(ye)較多(duo)的(de)軟(ruan)件(jian)工程方(fang)向,和大家聊一下(xia)Java架構(gou)師。
Java架(jia)構師,首先(xian)要熟(shu)練使用各種框架(jia),并知(zhi)道它們(men)實現的(de)原理。jvm虛(xu)擬機原理、調優,懂得jvm能讓你寫出性能更好的(de)代碼(ma);池(chi)技術(shu),什(shen)么對象池(chi),連接池(chi),線(xian)程池(chi)
Java反射技(ji)術(shu),寫框(kuang)架所需的(de)技(ji)術(shu),但(dan)是有嚴重的(de)性能問題,替代方案java字(zi)節碼(ma)(ma)技(ji)術(shu);nio,沒什(shen)(shen)么好(hao)說的(de),值得(de)注意的(de)是”直接(jie)內存”的(de)特點,使(shi)用(yong)(yong)場景;java多線程同步異步;java各(ge)種對象(xiang)的(de)實現原(yuan)理,了(le)解這些可(ke)以讓你在解決問題時選擇合適的(de)數據結構,有效的(de)解決問題,比如hashmap的(de)實現原(yuan)理,好(hao)多五年(nian)以上經驗的(de)人都(dou)弄(nong)不清(qing)(qing)楚,還(huan)有為什(shen)(shen)擴容時有性能問題?不弄(nong)清(qing)(qing)楚這些原(yuan)理,就寫不出有效的(de)代碼(ma)(ma),還(huan)會認為自(zi)己做的(de)很對;總之一句(ju)話(hua)越(yue)基礎的(de)東西越(yue)重要(yao),很多人認為自(zi)己會用(yong)(yong)它們寫代碼(ma)(ma)了(le),其實僅僅是知道如何調用(yong)(yong)api而已(yi),離(li)會用(yong)(yong)還(huan)差的(de)遠。
熟練(lian)使用(yong)各(ge)種數據(ju)結(jie)構和算(suan)法,數組、哈希、鏈表、排序(xu)樹,一(yi)句話(hua)要么是時間換(huan)空間要么是空間換(huan)時間,這里展開可以(yi)說一(yi)大堆,需要有一(yi)定的(de)(de)應用(yong)經(jing)驗,用(yong)于解決各(ge)種性能或(huo)業務上的(de)(de)問題(ti)。
熟練使用linux操作系(xi)統
熟(shu)悉tcp協議,創建連(lian)接(jie)(jie)三次握(wo)手(shou)和斷(duan)開連(lian)接(jie)(jie)四次握(wo)手(shou)的整個(ge)過程(cheng),不了解(jie)的話,無(wu)法(fa)對(dui)高并發網絡(luo)應用做優化; 熟(shu)悉http協議,尤(you)其是http頭,我發現好(hao)多工作五年以上的都弄(nong)不清session和cookie的生命周(zhou)期以及(ji)它們之(zhi)間的關聯(lian)。
系統(tong)集群、負載均衡(heng)、反向(xiang)代(dai)理、動靜分離,網站靜態化(hua) 。
分布式存儲系統nfs,fastdfs,tfs,Hadoop了解他們的優缺點,適(shi)用場景 。
分布式(shi)緩存技(ji)術memcached,redis,提高系統性(xing)能所需(xu),一句話,把硬(ying)盤上(shang)的內容放到內存里(li)來(lai)提速,順便(bian)提個(ge)算法一致性(xing)hash 。
工具(ju)nginx必要技能很好用,高(gao)性能,基(ji)本(ben)不會掛掉的服(fu)務(wu)器,功能多(duo)多(duo),解決各種問題。
數(shu)(shu)(shu)據庫的(de)(de)設計能力(li),mysql必要(yao),基礎的(de)(de)數(shu)(shu)(shu)據庫工具,mf好用,對它(ta)基本的(de)(de)參(can)數(shu)(shu)(shu)優化(hua),慢查詢日志分(fen)析,主從復制的(de)(de)配置,至(zhi)少要(yao)成(cheng)為半(ban)個mysql dba。其(qi)他nosql數(shu)(shu)(shu)據庫如mongodb。
還有隊(dui)(dui)列中間件。如消息(xi)推(tui)送,可(ke)以先把消息(xi)寫入數據庫(ku),推(tui)送放(fang)(fang)隊(dui)(dui)列服務(wu)(wu)器(qi)上,由推(tui)送服務(wu)(wu)器(qi)去隊(dui)(dui)列獲取處理(li),這樣就(jiu)可(ke)以將消息(xi)放(fang)(fang)數據庫(ku)和隊(dui)(dui)列里(li)后直接給(gei)用戶反饋,推(tui)送過程則由推(tui)送服務(wu)(wu)器(qi)和隊(dui)(dui)列服務(wu)(wu)器(qi)完成,好(hao)處異步(bu)處理(li)、緩(huan)解(jie)服務(wu)(wu)器(qi)壓力,解(jie)藕系統(tong)。
以(yi)上(shang)純粹是(shi)常用(yong)的(de)(de)(de)(de)技術,還有很多(duo)自己慢慢去(qu)摸索(suo)吧;因為(wei)要(yao)知(zhi)道的(de)(de)(de)(de)東西(xi)很多(duo),所(suo)以(yi)要(yao)成為(wei)一(yi)名合格(ge)的(de)(de)(de)(de)架構師(shi),要(yao)有強大的(de)(de)(de)(de)自學能力,沒(mei)有人會手把手的(de)(de)(de)(de)教給你所(suo)有的(de)(de)(de)(de)東西(xi)。
想成(cheng)為(wei)架構師不是(shi)懂(dong)了一大(da)堆(dui)技術就可(ke)以了,這(zhe)些是(shi)解決問題的基礎、是(shi)工具,不懂(dong)這(zhe)些怎么去(qu)提解決方案呢?這(zhe)是(shi)成(cheng)為(wei)架構師的先(xian)決條件。
架(jia)構師要針對業務特點、系統(tong)的(de)性能要求提(ti)出能解決問(wen)題成本低的(de)設計方(fang)案才合格,人(ren)家(jia)(jia)一(yi)個幾百人(ren)用(yong)戶的(de)系統(tong),訪問(wen)量不大,數據量小,你(ni)給(gei)人(ren)家(jia)(jia)上(shang)集群、上(shang)分布式存(cun)儲(chu)、上(shang)服(fu)務器(qi),為了架(jia)構而架(jia)構,這都是(shi)扯(che)淡(dan)的(de),架(jia)構師的(de)作用(yong)就是(shi)滿(man)足業務需(xu)求,使(shi)用(yong)很低的(de)硬件(jian)網絡成本和技(ji)術維(wei)護(hu)成本。
架(jia)(jia)(jia)構(gou)師(shi)還要根據業務發(fa)展(zhan)(zhan)階段,提前預見發(fa)展(zhan)(zhan)到下一(yi)個階段系(xi)統(tong)架(jia)(jia)(jia)構(gou)的解(jie)決方案,并且設計當前架(jia)(jia)(jia)構(gou)時將架(jia)(jia)(jia)構(gou)的升(sheng)級擴展(zhan)(zhan)考慮(lv)進去,做到易于升(sheng)級;否則等系(xi)統(tong)瓶頸(jing)來了,出問題(ti)了再(zai)去出方案,或現有架(jia)(jia)(jia)構(gou)無法擴展(zhan)(zhan)直接扔掉重(zhong)做,或擴展(zhan)(zhan)麻煩(fan)問題(ti)一(yi)大堆(dui),這會對(dui)企(qi)業造成損失(shi)。(相關推(tui)薦:如何學好編程)
架構(gou)(gou)師(shi)的成長繞不開架構(gou)(gou)設計,有時架構(gou)(gou)設計就像鴻溝一樣擋在(zai)程(cheng)序員晉升之路(lu)上(shang),只(zhi)要跨過去就可以海(hai)闊天空(kong)。為了更(geng)加廣(guang)闊的明天,努(nu)力吧各(ge)位。