零高併發項目經驗的人如何通過面試得到實踐機會? 程序員如何獲得高併發的經驗?

    本人之前寫了一篇博文,程序員如何獲得高併發的經驗?得到了不少點擊量,所以在這篇博文裏再來補充一波,着重講下零高併發項目經驗的人如何通過面試得到實踐機會。

    前文也已經說了,要得到高併發經驗,一般得分兩步走,第一通過面試得到實踐機會,第二在項目中提升,其實難點在第一點,在零基礎前提下,準備高併發方面的面試,確實難。而通過面試找到項目實踐機會後,可能會被人鄙視,也會被領導認爲很水,但好歹得到了能進一步提升的機會。

    這裏特別提一句,大廠技術面試官一般眼睛都很毒,高併發項目經驗,或者高併發方面只有理論經驗的候選人,通過寥寥幾個問題就能問出。這點大家不要有僥倖心理,就說我吧,我至今高併發經驗不足3年,沒法和大廠一些大牛面試官相比,但我都能排查出大部分高併發方面只會說不會做的的求職者。

    在零基礎前提下,準備高併發方面的面試的難點在哪裏呢?

    1 高併發的組件大多是運行在linux上,windows很難搭建環境,沒有環境其它就不用說了。

    2 大多數零基礎的同學,不知道高併發場景下的分佈式組件怎麼用,或者只知道如何用簡單的api。由於缺乏項目經驗,所以大多數同學不知道分佈式組件在項目裏是怎麼用的。

    3 在學分佈式組件解決高併發問題方面,往往只會孤立地使用某個組件,比如孤立使用redis做緩存,孤立使用rabbitmq做消息中間件,但現實場景下,往往是綜合使用多個分佈式組件,協同解決高併發問題。

    4 由於只會理論,沒有在項目裏接觸過高併發開發,所以普遍缺乏分析排查解決高併發方面問題的經驗。在高併發場景下,往往會用到集羣,熔斷,限流等。在使用高併發組件的時候,往往也會踩到不少坑,比如mycat方言不對,netty半包,消息中間件重發等。大廠面試官往往是會通過這些經常遇到的問題,來確認求職者的高併發方面的經驗,而一些沒有高併發項目經驗的求職者,在這方面往往是不堪一擊的。

    下面就以我考覈高併發技能的方式,讓大家體驗一下零項目經驗高併發求職者的難度。

    1 不問概念,比如redis數據結構,netty重要組件。因爲零項目經驗的高併發求職者一定背過。

    2 第一層難度,這塊問題不固定,我先問,你項目裏用到哪些分佈式組件,然後指着用過的分佈式組件,問下Java環境下的基本api和配置。比如用過Redis我就問Jedis的語法,用過Netty就問java層面如何做通訊協議,用過RabbitMQ就問Spring Boot要做哪些配置。

    我就問你用過的組件,java裏是怎麼用的。我發現不少只會背理論的求職者,單純講組件(比如Redis或netty等)很熟悉,但不知道怎麼和Java整合,這就說不過去了。

    3 第二層難度,有些求職者自己搭建過環境,知道分佈式組件的api。對這些求職者,我進一步提問,和我說下你用(Redis,Kafka,Netty,nginx等的)分佈式組件的項目場景,比如你說你用Redis,你們項目的數據量是多少?你們項目是用單機版Redis還是Redis集羣,如果是單機版Redis,你們怎麼確保高可用?

    這樣當我結合項目背景問的時候,會發現不少高併發方面的求職者露餡。用他們的話說,nginx都是部署在windows上的,redis只用單機版,而且數據量不高。這也能說明不少求職者沒有高併發分佈式組件的使用經驗。

    4 其實如果求職者能結合項目背景說分佈式組件的用法,至少能說明有高併發的經驗,在一些高併發要求比較低的崗位,這樣的表現,至少在分佈式組件這塊,就可以過關了。但如果要面試資深開發或架構,那麼還需要問 第三層難度,即在高併發分佈式組件方面解決過哪些問題?這樣能證明求職者有一定的高併發項目實踐經驗。

    這方面網上有現成的問題,比如Dubbo超時問題,多註冊中心問題,Redis內存溢出問題等。

    不過話說回來,零高併發項目經驗的求職者,如果準備方法得當,其實也能通過項目背景和實際解決過的問題,證明自己有高併發項目經驗。本人當時就做到了,而且我目前在輔導不少學員,讓他們在面試中能很好地展示高併發經驗。也就是說,廣大朋友,哪怕你高併發方面缺乏項目經驗,只要好好準備,一樣能通過面試得到實踐機會,大家應當有信心。我甚至還根據我的培訓經驗,出了一本Spring Boot整合分佈式組件,實現高併發功能的書。

    京東鏈接:https://item.jd.com/10038484613526.html。 

    我就用這本書裏的內容舉例,來說下我是怎麼輔導成功我的一個小弟。我小弟用了我的書,聽了我的課,目前也成功找到了一個高併發項目的實踐機會,公司雖然不是大廠,但在業內也算有名。

    1 我小弟本書具備Spring Boot+JPA開發經驗,這其實也是高併發經驗的基礎。

    2 我這本書裏,講了在windows環境下搭建Redis,MyCAT,RabbitMQ,nginx,dubbo+zookeeper,MongoDB等組件運行環境的步驟,請注意是windows環境,而不是linux環境。雖然生產環境中,這些組件都在linux環境下,因爲大家平時都用windows,而且這些組件在windows和linux環境下的開發差異不大,所以這本書就在windows下搭環境,這樣大家能很方便地重現開發環境,有了環境後,後面的事情就好辦了。

    3 我讓我小弟環境搭建好以後,首先照着書裏的步驟,運行一通spring boot整合諸多分佈式組件的項目,這樣他好歹知道怎麼用,而不會僅僅知道怎麼說。然後我就讓他爲每個組件,找個業務背景。其實也不用找,書裏自然講了背景,比如redis組件是用在庫存環境等。

    4 會用+結合業務背景使用高併發分佈式組件以後,我再讓我的小弟背些分佈式組件方面的常用坑,以及常規的使用經驗,無非是dubbo調用超時,redis超時,redis內存溢出,dubbo整合zookeeper的要點等。這方面不要太深,不用涉及到算法,也不用涉及到底層技能。而且這方面內容我書裏大多也提到。最後我讓我小弟通過書裏給出的秒殺案例,串起來講多個分佈式組件的使用要點。

    5 這個是要點,我讓我小弟主準備了不少解決高併發問題的說辭。高併發問題其實也很普遍,無非是redis超時,kakfa由於重發而導致的不冪等,dubbo註冊中西中心失效等。這些方面,我讓我小弟準備哪些點呢?問題是如何發現(無非是通過日誌告警或系統卡頓發現),如何排查(到linux看日誌,日誌中看到哪些具體的關鍵字),如何解決(改文件或改配置)

    在聽我講之前,我小弟基本上只會背理論,面試時很快會被打回原形。但看了我的書,聽了我多次講解以後,(我小弟和我公司很近,前後加起來大概聽了我不到2個小時輔導,但他回家後用了很多功夫),我小弟再出去面試,面了4次以後就找到一份高併發的開發工作了。

 

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