互聯(lián)網(wǎng)專業(yè)人才的數(shù)量滿足不了市場(chǎng)大規(guī)模的需求,所以這個(gè)行業(yè)工作機(jī)會(huì)多、薪酬水平高的同時(shí)流動(dòng)性也非常大。作為互聯(lián)網(wǎng)行業(yè)的三大巨頭,百度、阿里巴巴、騰訊對(duì)于互聯(lián)網(wǎng)人才有很大的吸引力,他們的員工也是眾多互聯(lián)網(wǎng)同行覬覦的資深工程師、管理者人選。根據(jù)脈脈數(shù)據(jù)研究院獨(dú)家提供給界面新聞的數(shù)據(jù),我們制作了一份明星互聯(lián)網(wǎng)公司人才遷徙圖表,通過(guò)采訪進(jìn)一步驗(yàn)證數(shù)據(jù)所呈現(xiàn)的趨勢(shì),并總結(jié)了7個(gè)有趣的發(fā)現(xiàn)。
BAT互跳頻繁,有人在集郵嗎?
從圖表里不難看出相比流去其他公司,BAT互跳更為頻繁。百度和騰訊在為阿里巴巴輸送最多人才的公司中分別排第一和第三,而騰訊又是阿里巴巴人跳槽最多的去處;百度和阿里巴巴是為騰訊輸送最多人才的兩家公司,而騰訊人一轉(zhuǎn)頭又跳去了百度和阿里;百度對(duì)阿里和騰訊員工的吸引力好像較小,這兩家公司并沒(méi)有進(jìn)入為百度輸送最多人才公司的前三,但是百度人去騰訊和阿里卻十分普遍。
“漲工資最好的方式是跳槽嘛。因?yàn)榛ヂ?lián)網(wǎng)圈子很小,有名的也就這幾家,你不是從這家跳到那家去,就是那家跳到這家來(lái)。”前阿里員工馮銳(化名)告訴界面記者,畢竟無(wú)論從薪資待遇、平臺(tái)規(guī)模、工作穩(wěn)定性還是工作內(nèi)容來(lái)說(shuō),國(guó)內(nèi)其他互聯(lián)網(wǎng)公司少有能超過(guò)BAT的,再加之資本寒冬影響下有些人可能趨于保守,“從BAT出去的員工,很多會(huì)因?yàn)椴贿m應(yīng)而再次跳槽,二進(jìn)宮三進(jìn)宮的也很常見(jiàn)。”
雖說(shuō)是集郵般的互跳,不同公司的員工在選擇去向時(shí)仍顯示出了一定偏好。就這次的數(shù)據(jù)和采訪來(lái)看,我們得出了一個(gè)跳槽鏈:阿里人最愛(ài)去騰訊,騰訊人最愛(ài)去百度,百度人最愛(ài)去滴滴,滴滴人流回百度。
而要想成為一個(gè)具有實(shí)力的程序員一定離不開(kāi)下面幾點(diǎn):
寫(xiě)代碼.
??? 寫(xiě)很多代碼.
??? 針對(duì)各種不同的需求不同的應(yīng)用場(chǎng)景寫(xiě)各種代碼.
??? 不斷思考為什么要這樣寫(xiě),
??? 不斷反思如何組織這些代碼,如何降藕,如何提高效率.
??? 直到你可以閉著眼睛一個(gè)人把一整個(gè)應(yīng)用系統(tǒng)寫(xiě)下來(lái)
??? 然后持續(xù)運(yùn)維、變更
??? 在運(yùn)維和變更中繼續(xù)反思如何組織代碼,為什么要這樣耦合.
??? 然后你會(huì)發(fā)現(xiàn),你的主要工作變成了教別人怎么寫(xiě),教別人不要這樣寫(xiě).
??? 恭喜你,你可以算是狗屎了.(架構(gòu))
??? 理論上能幫助你的,大概有 算法與數(shù)據(jù)結(jié)構(gòu) 和 設(shè)計(jì)模式.
??? 笑話一則:
??? 某程序員自我介紹:"我是程序員",客戶說(shuō),"程先生,你好",程序員說(shuō):"別客氣,叫我序員".架構(gòu)師自我介紹到:"我是架構(gòu)師",客戶說(shuō),"賈先生,您好",架構(gòu)師說(shuō):"別客氣,叫我狗屎".(架構(gòu))
??? Java架構(gòu)師工作硬技能實(shí)力
??? 所謂架構(gòu)師,思考的是全局的東西,是如何組織你的系統(tǒng),以達(dá)到業(yè)務(wù)要求,性能要求,具備可擴(kuò)展性(scalability),可拓展性(extendability),前后兼容性等.可能涉及到的東西包括了從硬件到軟件的方方面面,實(shí)在是一言難盡.
??? 如果你立志做架構(gòu),首先打好基礎(chǔ),從最底層開(kāi)始.然后發(fā)展到各種技術(shù)和語(yǔ)言,什么都要懂兩點(diǎn),要全面且不膚淺.為什么不是懂一點(diǎn)?你要看得透徹,必須盡量深入一些.別人懂一點(diǎn),你要做架構(gòu)師,必須再多懂一點(diǎn).比如你發(fā)現(xiàn)golang很流行,別人可能寫(xiě)一個(gè)helloworld就說(shuō)自己玩過(guò)golang,但你至少要嘗試寫(xiě)一個(gè)完整的應(yīng)用.不肯下苦功,如何高人一頭?
??? 另外你要非常深入地了解至少一門語(yǔ)言,如果你的目標(biāo)是java,就學(xué)到極致,作為敲門磚,先吃飽了才能談理想.而Java學(xué)到極致勢(shì)必涉及到設(shè)計(jì)模式,算法和數(shù)據(jù)結(jié)構(gòu),多線程,文件及網(wǎng)絡(luò)IO,數(shù)據(jù)庫(kù)及ORM,不一而足.這些概念放之一切語(yǔ)言都適用.先精一門,為全面且不膚淺打基礎(chǔ).如果你想學(xué)習(xí)架構(gòu)師的知識(shí)加扣扣群561614305
??? 另外就是向有經(jīng)驗(yàn)的架構(gòu)師學(xué)習(xí),和小伙伴們討論辯論爭(zhēng)論.
??? 其實(shí)最重要的能力就是不斷學(xué)習(xí).在思考新的技術(shù)是否能更好地解決你們遇到的問(wèn)題之前,你首先得知道并了解新的技術(shù).
??? 說(shuō)了半天,架構(gòu)師很多時(shí)候是被迫上位的,并不是你學(xué)了這個(gè)和那個(gè)之后你就成為架構(gòu)師了,這并不是RPG游戲.
??? 既然java架構(gòu)師,首先你要是一個(gè)高級(jí)java攻城尸,熟練使用各種框架,并知道它們實(shí)現(xiàn)的原理.jvm虛擬機(jī)原理、調(diào)優(yōu),懂得jvm能讓你寫(xiě)出性能更好的代碼;池技術(shù),什么對(duì)象池,連接池,線程池...:;java反射技術(shù),寫(xiě)框架必備的技術(shù),但是有嚴(yán)重的性能問(wèn)題,替代方案java字節(jié)碼技術(shù);nio,沒(méi)什么好說(shuō)的,值得注意的是"直接內(nèi)存"的特點(diǎn),使用場(chǎng)景;java多線程同步異步;java各種集合對(duì)象的實(shí)現(xiàn)原理,了解這些可以讓你在解決問(wèn)題時(shí)選擇合適的數(shù)據(jù)結(jié)構(gòu),高效的解決問(wèn)題,比如hashmap的實(shí)現(xiàn)原理,好多五年以上經(jīng)驗(yàn)的人都弄不清楚,還有為什擴(kuò)容時(shí)有性能問(wèn)題?不弄清楚這些原理,就寫(xiě)不出高效的代碼,還會(huì)認(rèn)為自己做的很對(duì);總之一句話越基礎(chǔ)的東西越重要,很多人認(rèn)為自己會(huì)用它們寫(xiě)代碼了,其實(shí)僅僅是知道如何調(diào)用api而已,離會(huì)用還差的遠(yuǎn).
??? 熟練使用各種數(shù)據(jù)結(jié)構(gòu)和算法,數(shù)組、哈希、鏈表、排序樹(shù)...,一句話要么是時(shí)間換空間要么是空間換時(shí)間,這里展開(kāi)可以說(shuō)一大堆,需要有一定的應(yīng)用經(jīng)驗(yàn),用于解決各種性能或業(yè)務(wù)上的問(wèn)題;有時(shí)間再補(bǔ)充.
??? 熟練使用linux操作系統(tǒng),必備,沒(méi)什么好說(shuō)的 .
??? 熟悉tcp協(xié)議,創(chuàng)建連接三次握手和斷開(kāi)連接四次握手的整個(gè)過(guò)程,不了解的話,無(wú)法對(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)存里來(lái)提速,順便提個(gè)算法一致性hash .
??? 工具nginx必備技能超級(jí)好用,高性能,基本不會(huì)掛掉的服務(wù)器,功能多多,解決各種問(wèn)題.
??? 數(shù)據(jù)庫(kù)的設(shè)計(jì)能力,mysql必備,最基礎(chǔ)的數(shù)據(jù)庫(kù)工具,免費(fèi)好用,對(duì)它基本的參數(shù)優(yōu)化,慢查詢?nèi)罩痉治?主從復(fù)制的配置,至少要成為半個(gè)mysql dba.其他nosql數(shù)據(jù)庫(kù)如mongodb.
??? 還有隊(duì)列中間件.如消息推送,可以先把消息寫(xiě)入數(shù)據(jù)庫(kù),推送放隊(duì)列服務(wù)器上,由推送服務(wù)器去隊(duì)列獲取處理,這樣就可以將消息放數(shù)據(jù)庫(kù)和隊(duì)列里后直接給用戶反饋,推送過(guò)程則由推送服務(wù)器和隊(duì)列服務(wù)器完成,好處異步處理、緩解服務(wù)器壓力,解藕系統(tǒng).
??? 以上純粹是常用的技術(shù),還有很多自己慢慢去摸索吧;因?yàn)橐赖臇|西很多,所以要成為一名合格的架構(gòu)師,必須要有強(qiáng)大的自學(xué)能力,沒(méi)有人會(huì)手把手的教給你所有的東西.
??? 想成為架構(gòu)師不是懂了一大堆技術(shù)就可以了,這些是解決問(wèn)題的基礎(chǔ)、是工具,不懂這些怎么去提解決方案呢?這是成為架構(gòu)師的必要條件.
??? Java架構(gòu)師軟實(shí)力
??? 架構(gòu)師需要對(duì)整體結(jié)構(gòu)的把握. 需要用專業(yè)的技能, 盡量把業(yè)務(wù)邏輯和技術(shù)邏輯分離. 把數(shù)據(jù)和流程分離. 解耦能力, 敏銳的發(fā)現(xiàn)問(wèn)題的能力, 能夠把握性能, 功能和成本之間的關(guān)系. 從整體上把握產(chǎn)品,技術(shù)能力, 全局把控的能力,解讀、分析、解決問(wèn)題的能力,技術(shù)前瞻能力,還需要一定的溝通能力,為人處事、包括項(xiàng)目管理.