程序員如何獲得高併發的經驗?

    要獲得高併發經驗要去大公司,然後大公司招聘要求高併發經驗,感覺這是個死循環,沒有高併發經驗的人如何才能獲取高併發方面的經驗呢?

    先說具體的做法。

    1 首先得在自己電腦上鼓搗出Redis,kafka,dubbo,mycat等高併發分佈式組件的環境,通過這些環境瞭解分佈式組件的基本api。

    2 爲這些分佈式組件找個項目場景,證明自己用過,並且解決過實際問題。這裏需要指出的是,單純背高併發的面試題沒用。

    3 修改簡歷,找到高併發面試的機會,然後通過多場面試,不斷調整自己講述高併發項目經驗的水平。這時,如果能直接用高併發的說辭進大廠,那是最好的,如果不能,找個過渡性的能提供高併發實踐的崗位。

    4 如果有高併發項目的實踐經驗,那麼後面就不用說了,只要多開發,多解決實際問題,高併發技能一定能很快掌握。這時掌握的高併發技能,那就不是單純的理論說辭和簡單的API技能了,而是正宗的高併發項目實踐技能。

    可以這樣說,能否找到高併發項目的實踐經驗,決定着程序員能否升級到架構師,不過這不容易。下面就以我自己爲例,說下我是怎麼從只會吹高併發項目經驗到真正掌握高併發技能的。

    1 我在從17年年初的時候,在項目組裏只用簡單的Spring + JDBC/ORM做業務,開發是在windows上的,接觸到的高併發組件,估計也就是nginx和mysql集羣,沒有linux上部署和調試組件的經驗,沒有高併發組件的使用經驗。相信當下不少程序員朋友和我一樣,只會做windows系統上的增刪改查,沒有任何分佈式組件和高併發經驗。

    我就想,如果就這樣下去,只會基本的增刪改查,我再幹個幾年,等年紀上來了,估計連跳槽的機會都沒,當時就想博一下,爭取能升級到架構師。

    2 剛開始的時候,我就去背題,什麼redis數據結構,dubbo協議,kafka流程等等,高併發情況下防冪等,netty堆外內存的使用要點,jvm調優等。凡是和高併發有關的,我基本都背了一下。然後就開始修改簡歷,就寫,在xx項目裏,併發量是每秒xx,用到了Redis,kafka, dubbo(省略其它分佈式組件)等等,然後投簡歷。

    3 由於我當時的公司不錯,是家一線的外企,所以投出去的簡歷很快得到迴應,也得到了不少大廠的面試機會。剛開始面試時,Java,數據庫等方面,我是秒通過。但是如果問到分佈式組件,我基本就說不上來。

    因爲我背的是脫離項目的理論,比如mysql集羣的搭建方法和redis數據結構等,面試官是結合項目問的,比如問,你項目裏Redis如何確保高可用,用nginx部署spring boot項目時,配置文件中注意的要點是什麼。由於我是單純背理論,所以回答不上。

    4 嘗試了幾次,我意識到單純背題一定不行,我就在我電腦上,搭建了諸多高併發組件的開發環境。雖然組件在項目裏都運行在linux上,但大多高併發組件都有windows版。

    當時我搭建了mysql主從集羣,redis主從集羣,rabbitmq, dubbo+zookeeper,nginx,mycat等開發環境,瞭解各組件的基本用法,然後爲每個組件找了個項目背景。比如說redis,我就說,我們項目需要緩存員工信息,所以用到了Redis裏的xxx API,對應的Java代碼是什麼,類似的,我爲每個組件都找個了應用背景。

    5 這個時候我去面試,在分佈式組件方面,就能和麪試官有來有去了,甚至還面試成功幾家小公司。但如果面試官問些實踐要點,比如redis如何防穿透,redis cluster的失效轉移等,我就答不上來。所以我估計,當時給面試官的印象是,有分佈式組件的使用經驗,也會用分佈式組件開發基本的高併發技能,但缺乏系統的用分佈式組件實現高併發的能力。

    6 這個時候,我就回想起剛開始背題的一些內容,比如netty防堆外內存溢出,netty如何解決半包粘包,redis如何防穿透,mycat如何實現讀寫分離,還有限流和熔斷等機制等。這時我才感到,原來這些題目是要等掌握一定高併發說辭後再用,不是一開始就用的。

    明白這些以後就好辦多了,這些技能和開發無關,只需要結合項目背景講下實現要點。比如以限流爲例,我先準備一個限流場景,比如公司查詢系統每秒只能放1000個請求,然後說下實踐要點,無非是redis+lua,再說下異常情況下怎麼處理,無非就超量情況下拋異常。其它熔斷防穿透都要點都按這樣準備。

    7 請注意,到了這個時間點,我的分佈式高併發經驗,也僅僅是停留在理論層面,但這個時候我去面試,就能通過用法+實踐要點的說辭,成功把自己包裝成有高併發項目經驗的人了,後面的面試成功率就高很多了。

    不過在這個階段,爲了挑戰大廠的崗位,我還準備了“項目中解決過的實際問題”。套路說辭基本一樣,首先遇到什麼問題,比如redis穿透,或oom異常,或kafka死信堆積過多,然後說表現,表現無非是系統宕機,卡死,或功能異常,再說如何排查,無非是通過看日誌,日誌中遇到什麼異常,發現什麼問題,最後再說怎麼解決的。網上這種問題一搜一大堆,但網上的說辭大多是純理論的,得爲這些問題找個項目背景。比如xx支付系統遇到oom異常,xx優惠券分發系統遇到死信過多,xx支付系統遇到redis穿透等等。

    8 也就是說,通過不斷面試,我整理了高併發方面的基本用法+實踐要點+解決過問題等說辭。這樣雖然我還是沒高併發項目經驗,但已經能確保我進大廠了。事實上我就這樣進大廠的。

    9 進大廠以後,其實我日子很難過,一方面項目組通過面試,認定我有高併發項目經驗,其實我沒有,但我不這樣說我還只能在原來的公司做基本的增刪改查,另一方面我以高併發零基礎的條件實現高併發的要點也不容易。

    這時,我除了自己到處查以外,只能一方面厚着臉皮到處問人,另一方面多加班。由於我的項目用到高併發,所以日常工作中有大量的開發,部署,調試機會,平時也經常解決高併發的問題。所以我苦日子也就過了3個月,後面我不僅能解決高併發的問題,還能參加壓力測試,通過壓力測試提升高併發的性能,做到這個程度,我纔算獲得了高併發的項目經驗。

    10 掌握高併發經驗的紅利是相當大的。當我掌握高併發經驗後,後面找工作,基本上可以說是我找工作,因爲大多數的技術面試我都能過。而且我有認識不少人,掌握了高併發技能,能通過出書出視頻變現,或者如果年紀上來了,也可以憑藉高併發技能進個外企養老,或者是找個小公司做技術總監,不至於在35歲被淘汰。

    其實我發現,不少人掌握高併發技能的經歷和我的很相似。

    1 在公司項目沒有提供高併發實踐機會的前提下,通過背題等,哪怕根據一些所謂的思維導圖,把相關全學了一遍,只要沒有高併發的項目實踐機會,一定無法掌握高併發技能。

    2 只有進入到提供高併發實踐機會的項目裏,才能得到相關經驗。這是句正確的廢話,但很多人就卡在這塊,無法通過掌握高併發技能,升級到架構師,從而只能以“資深增刪改查工程師”的身份等待年齡瓶頸的到來。

    3 可以分兩步走,首先通過背題+提升面試經驗,得到高併發的實踐機會,其次再通過項目真正掌握高併發的技能。

    最後做個總結,高併發能力包括哪些,如何該怎麼掌握?這無法通過短短的文章來說明,要知道我用3個月的時間在項目組裏掌握高併發的基本技能,再用了半年纔算全面掌握。如果要把這些經歷經驗和要點寫全,估計得出本書。

    但是,你就照着我在上文裏給出的步驟,先掌握搭建環境,再掌握分佈式組件的基本用法,再瞭解高併發的實踐要點和解決問題的說辭,你至少能通過面試得到高併發項目的實踐機會。掌握高併發經驗的難點在於得到實踐機會,進了項目組,有了實踐機會,高併發技巧就不用我說了,你自己就能知道如何掌握。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章