進大廠也就這回事,工作后2到3年進大廠操作指南


    在BAT這種大廠里,只要肯吃苦,技術和工資進步的速度會超出你想象,我在上海,按當前價格算,一般在大廠里干個三四年,好歹房子的首付應該能有,而且這種房子還不是太偏遠太小的。

    進大廠確實需要一定的實力,但如果單單技術好,沒有其它的技巧,估計確實也有些難度。不過話說來,哪怕是二本出身,哪怕技術一般,只要肯上心加方法得當,工作后3年進大廠應該不是難事。在本文里,就將針對起點一般技術一般的同學,給出具體的進大廠操作指南。

1 先從戰略上藐視,進大廠也就這回事

    大廠里也有只有2,3年開發經驗的初級開發,而且其中有些同學的學校可能也就是個二本,或許他們進大廠前,資歷技術和你也差不多。甚至可以這樣說,只要找到渠道去面試,外加適當的准備技巧,進大廠其實比進一些面試要求比較苛刻的小公司更容易。

    就拿一些步驟來說吧,簡歷方面,只要有適當的分布式組件經驗就至少能得到面試機會,面試時,當然如果光會增刪改查當然不行,不過面試問到的題目以及提問的方式,網上多了去了,本文也會涉及,關鍵第一要適當看分布式技術,第二要結合項目說,這對初級開發而言,也不難。甚至當有些項目比較缺人時,面試的標准更會降低。

    我給大家量化一下進大廠的需要花費的努力和時間吧。第一大概每天用1個小時看資料運行代碼准備說辭,每周大概累計用10個小時,經過2個月其實該看得就差不多了,然后再用2個月用幾個小公司面試練手,就可以去大廠投簡歷了。如果一切順利什么都好說,萬一不成,換個項目組,或者多面幾家大廠,面個3,4次,應該也能行了。用時間努力應該不是問題,努力的方向可能未必大家都知道,具體的后文將詳細展開

2 盡可能洗白你的不利因素

    首先要讓你的簡歷過篩選,否則沒面試機會。能過篩選的簡歷一般長什么樣?

    1 碩士,一本大學,1,2年經驗,而且最近項目里包含分布式組件等值錢技術。

    2 如果大學一般, 本科學歷,估計要運氣,看不同的項目組,可能會需要再多1年左右的項目經驗,如果項目組着急要,或公司招聘需求高時,其實不看學校。

    3 這點很重要,別太頻繁跳槽,最好最近1年沒跳槽經歷,而且最近在職,不是長時間處於離職狀態。

    簡歷上項目經驗這塊可以自己挖掘,但如果有不利的因素,盡量用時間沖淡。

    1 學校一般,找個有高並發背景的項目,體現在簡歷上,最多兩年就夠了。

    2 最近跳槽太頻繁,找個公司窩個一年左右,最好是最近一年半沒跳槽經歷。如果有超過1個月的離職狀態,也可以通過連續上班個1,2年來淡化。

    3 剛從培訓班里出來,也去找個小公司干一年半載的,但要積累分布式項目經驗。

    大家注意沒,這部分一直在強調分布式組件的技術,具體而言是netty,redis,mycat,kakfa等高並發的技術,工作年限是一方面,另外你簡歷最近的項目里,這些分布式組件的實踐技能一定要體現出來,如果你讓大廠的面試官感覺你第一相關技術年限不足,第二只會增刪改查,那么對不起,你沒面試機會。還有,如果你實際能力很強,但簡歷上看不出,面試官直接認為你不行。

3 數據結構方面,最好能引導到准備好的技術亮點

    數據結構是大廠面試必問的點,網上這些題目太多了,而且答案都可以准備。不過如果要進大廠,最好能觸類旁通。

    先用紅黑樹舉例,除了要能講基本數據結構,插入刪除節點能操作外,可以再引到ConcurrentHashmap底層數據結構上,用該對象的底層代碼來說明,其實這和你的項目能力無關,事先准備下就行了,但如果你回答紅黑樹問題時順帶引出底層代碼,甚至還可以從ConcurrentHash引到並發方面的問題,這樣面試官就不會認為你光會理論。

    再說比較常用的鏈表數組等,這些第一可以和Java里的ArrayList等對象一起講,第二可以順帶引出快速失效和遍歷等底層代碼,這樣也能讓面試官感覺你基礎扎實。

    至於HashMap,這方面都被問爛了,網上的解析文太多了,但大家在回答好理論問題和底層代碼后,也可以進一步展示鎖和並發的話題。

    總之,數據結構的問題是必問了,在這個環節,很多初級開發候選人甚至連底層代碼層次的問題都回答不好,而你經過准備,不僅能舉一反三地展示你對底層代碼的理解,更能借機展示鎖和並發等技術點,首先就能給面試官留下個好印象。至於筆試寫算法,這種網上題目更多了, 事先更可以准備。

4 大廠更多考的是並發方面的能力,同時更要結合項目說

    先給些提問的方式,比如netty,先問重要組件和工作流程,再問序列化,服務暴露等事先細節,再問讀寫索引半包粘包等問題,其實對初級開發而言,問到這里就差不多了,如果要找個高級開發,可能再會結合底層代碼問。分布式組件有很多,其它組件,比如mycat,也是先問用法,比如如何設置分庫規則,再問底層細節,比如底層代碼如何把sql定位到具體的庫上。再如redis,可以先會問些數據結構以及基本用法,再問些諸如集群等方面的細節。

    哪怕去面大廠的高級開發,准備分布式並發這塊其實也不是問題,因為很多人在之前其實基本沒相關項目經驗,其實都是在背題,你只要在面試時,讓面試官感覺略微比別人多些項目經驗即可,下面給些准備的方法。

    1 先看幾套面試題,這些面試題其實都大同小異,都會比較深地涉及到底層源碼和實踐要點,先把理論題背熟。這些點雖然不少,但其實都是體力活,背書么,這種事應該沒難度。該背哪些素材呢?我之前看到的吊打面試官系列就不錯。其實當大家看了幾套題以后,會發現分布式組件的值錢技術,也就這么多。

    2 其實很多候選人僅僅停留在這個地步,如果你做了后繼步驟,就比大多人強了。在背熟以后,再給一些技術找些項目的背景,這些技術未必要深,但一定要結合項目的業務。比如就說最基本的redis,你說你之前的項目是某數據處理模塊(項目可以按實際說),並發量大概每秒1k,如果都把請求壓到數據庫,數據庫受不了,所以就用redis集群,然后准備些集群的大致配置方式。在用的時候,結合業務,用到了里面string等數據結構,用的時候會設置超時時間,以防緩存一直在內存,同時為了防止穿透,會把null也緩存起來。同時量力而行,就別再說redis事務了。

    請注意結合業務說技術的時候,未必要涉及過於細節的點,比如不用涉及到redis的線程模型沒,但首先得說些配置值(比如集群配置值和超時配置的方式),讓面試官感覺你確實在項目里用過,其次要講些項目里用到的經驗,比如redis要用集群,防止單點失效,設置的超時時間最好后面帶個隨機秒,以防一個時間點里大批量緩存失效,一下子去拿數據庫從而導致壓力過大。

    這里僅僅給出了redis,另外,mycat,kafka,netty, zookeeper,dubbo等,也照此辦理,這樣哪怕你平時用得不多,但也能讓面試官感覺這方面你有實際的項目經驗。

    3 確實分布式組件這塊要說好不容易,為了讓面試官感覺你有這方面的經驗,或者作為沒說好問題時的補救措施,你最好再整理些實際解決過的問題。  

    准備問題時先講問題是如何發現的,比如日志里頻繁報oom異常,或者干脆系統登不上,再說你是什么查的,無非是通過linux命令看日志,或者用dump看內存鏡像,再說問題原因,比如dubbo超時時間過長導致請求卡住,或者redis沒設超時時間導致內存oom,這些點網上一搜也是一大堆。

    而且你分析問題原因時,更可以借機讓面試官感覺你熟悉分布式組件的底層源碼,比如你准備些netty底層讀寫索引(或零拷貝)的源碼,面試時當你說你解決過因netty半包等原因而導致的問題時,可以借機拋出。

    4 再准備些畫龍點睛的說辭,當你結合項目以及你解決過的問題說出分布式組件技術時,再說出這些點,立即能讓面試官高看你,這些點可以是基於kafka的防冪等機制,也可以是zk整合dubbo的源碼,這種值錢技術和源碼太多了。由於找這些點是體力活,所以本人在這里就懶得再列了。

    再啰嗦下,准備分布式技術說辭時,一定要結合項目,哪怕你平時用得很少,但可以找網上的資料,但找到后一定要融入到項目里。這里給個例子,某初級開發候選人也很用心,背了很多分布式題,基本有問必能回,但當面試官讓結合之前項目經驗說用到的技術時,他說不上,另一位其實分布式底層細節了解不深,但就能結合項目說些redis超時以及防穿透的實現細節,其實這些技術並不深,但對初級開發的要求並不高,正是因為后者具備分布式組件的項目經驗,所以雖然兩位都錄用了,但后者的工資要高於前者。

5 充分展示調試和部署項目的能力

     調試和部署項目的能力對初級和高級開發來說絕對是亮點,而且哪怕是大廠的候選人,也不是每個人都會。這塊你如果說了,面試官未必會細問,只要聽你講的沒大問題即可,而且這塊不在於用到技術的深淺,而在於你知道這方面的實踐要點。

     在我之前的博文里,如何准備Java面試?如何把面試官的提問引導到自己准備好的范圍內?,給出了准備壓測的實踐要點,從而大家可以看到,面試官不在乎你壓測方面解決過的問題,也不在乎涉及到的技術,只關心你有這方面分析和解決問題的經驗。

    同樣你可以在面試前准備些分析和解決問題的步驟,這之前也已經提到過,這里再給個例子。比如cat等監控系統上頻繁報內存用量高,這時你看日志或dump,然后發現了問題,問題根源太多了,除了剛才提到的redis緩存沒釋放,更可以是netty堆外內存沒處理好。好吧這些涉及到的技術太深,那么給些簡單的,比如因為HashMap用好沒clear,或者數據庫對象沒關,或線程池創建時用無限隊列緩存任務,然后你搜oom原因,再去找其它原因,你項目里遇到的就可以當作你亮點的說辭。

    再說部署方法,你可以看些zk加dubbo部署的配置文件,也可以看些redis各種集群的部署配置,如果你感覺有余力,再看些灰度發布切流量的配置,其實看會了也就是一兩句代碼的問題,但你結合部署這個大題目說出來,立意就不同了,因為高級開發(以及架構師)不僅要會寫代碼,更要會部署組件。

6 給出若廠面試過程的提問和回答

    面試官:介紹下你的經歷和項目經驗?

    候選人,介紹教育背景(二本三本都不要緊),有1到2年相關經驗(挖掘課程設計畢業設計和工作后的經驗,應該可以達到)。略微介紹項目的業務,比如我之前在xx公司做了支付系統,用到spring boot, netty, mycat等技術(准備過的亮點都可以說,分布式組件多多益善),在項目里,我不僅寫代碼,還參與過壓測和數據庫和jvm調優(拋出誘餌等來問),還解決過線上報出的redis緩存穿透,kafka消息重發導致不冪等和dubbo超時導致線上連接數打滿的問題(這里多准備些分布式的問題,也坐等面試官來問)。再介紹些超出編碼技能的能力,比如說,在項目里,我還用過sonar來管理項目質量,參與過jenkins發布部署腳本的編寫等。(這種技術每個項目都有,你關注下,無非是寫配置,但你說了就不一樣了)

    聽你講完項目介紹后,面試官會問分布式等問題,比如會問,你說你解決過redis緩存穿透問題,你說下如何解決的?

    候選人:(回答的時候一定要結合項目),在我的支付管理系統了,支付模塊會向風控模塊請求公司的風控數據,但相同請求的參數會發多次,所以就用redis來緩存(大致介紹業務背景),但實際應用中,發出的請求未必全存在風控的庫里,所以就穿透了。后來解決的方法是,把null值也緩存,把一些經常請求的但不存在風控表里的參數也緩存。注意這里面試官不會關注具體業務和解決方案,你只要大致說得沒問題就行,比如這里你別說就用單機版的redis就行了。同樣的問題解決方案多准備幾套,這樣你說了,面試官就會認為你在實際項目里用過。

    當你講完redis,mycat,kafka,netty等解決過的問題后,面試官會開始問些底層的細節,比如會問,你說下netty的線程模型,netty的讀寫索引,dubbo反序列化的協議等等,這些就屬於考理論知識了,由於你事先背過,所以應該不會有太大的問題。這里面試官的用意是想擺脫你事先的准備,所以會隨機發問,但你要想辦法把問題點拉回來,而且爭取多耗時間,這怎么做呢?

    (比如問netty的線程模型),候選人:先邊畫邊說,講好模型后,然后立即帶一句,在我們項目里,是用線程池來管理work進程(拉回到業務里),在管理進程時,還遇到過因緩存隊列設成無界隊列而導致的oom問題。(再次拋出誘餌坐等問),然后借機展開,以此成功耗費面試時間。而且如果按上文給出的准備步驟,你可以准備好每個組件解決過的問題,然后逐一展開。

     當問好分布式組件后,面試官可能會問些數據庫和java基礎,這些更簡單了。

     面試官:你們項目的數據庫是什么?

     候選人:我們用到的是oracle,在項目里用到了mycat分庫分表(之前說過就算了,沒說過就拋出),在項目里,我還處理過長sql問題(由此引出調優亮點)。

     面試官:你是什么調優的?(不由自主地被引導)

     候選人:我們用到的監控方式是cat,當監控系統上發現長sql時,我們就用執行計划來分析,然后對應地建索引,或者建redis緩存,或者用with語句優化sql。然后找個准備過的sql講下就結了。

     然后面試官會問些索引之類的問題,這些你事先背些答案,講些底層結構即可。問好數據庫,面試官會問java核心,比如hashmap,線程安全不安全,或者jvm問題。這種你背好答案,同樣再引申下。

     候選人:對於hashmap,除了剛才我講的底層代碼外,用好以后,我們還需要立即clear,以防內存泄漏(引到內存話題)。或回答好jvm問題后,你立即說,在實際項目里,我們會監控jvm的用量,當超出70%時,就用dump文件看鏡像,之前項目里我遇到的jvm問題有,netty堆外內存管理不善,ThreadLocal用好沒remove,造成oom的原因太多了,大家自行准備,我不展開了。

     通過上述方式,你回答好問題后,立即結合業務拋出下個誘餌,然后想辦法把問題引到jvm調優,數據庫調優,線程底層代碼,(hashmap等)底層源碼之類的問題,這樣可能你本身的技術未必行,而且資歷也未必夠,但面試官給你的評價可能就是,第一基礎扎實,第二有調優經驗,第三有分布式組件的使用經驗,如果面高級開發,上述三點就足夠了,更何況去面初級開發,指不定還有如下的評價,比如掌握項目代碼質量的提升技能,熟悉線上調試和發布的基本技能,熟悉分布式底層細節等。如果再得到這些評價,估計面架構師都夠了。

    這還不算完,當面試官提好問題,但你准備的亮點沒機會拋出時,別不甘心,有機會拋出。

     面試官:我問題問好了,你有什么要問我的?

     候選人:(先套上話),如果我有幸面試成功,會進哪個項目組?然后不管面試官怎么回答,哪怕回答“這要看情況分配”也不要緊,然后繼續問,(比如dubbo亮點沒拋夠)在你們項目里,怎么做遠程調用的(揣着明白裝糊塗)?面試官一般就會說dubbo了,然后交流,交流過程中不經意說句話,我們之前項目也用dubbo,所以我還看過dubbo源碼,並解決過服務暴露的問題,然后很大幾率能有機會說出。

   或者你沒機會說出壓測技能,就可以假惺惺地問,你們項目里會不會做壓測?壓測時怎么發請求?怎么監控?然后可以在交流過程中說你的亮點。其它的亮點也照此准備。

7 多找幾家小公司面試,其實有些小公司的面試難度還超出大公司

    理想情況下,你面試的結果和技能無關,和項目經驗的長短也無關,只和你簡歷上的項目和技術介紹有關,和你事先的准備亮點說辭有關。    

    但如果單純准備不去實踐,任何面試官都能摸清你的底細,這點別有任何幻想。因為一方面你准備的點未必全,第二你准備的項目說辭未必很好地打過草稿,中間可能會有漏洞,這時你就需要找些小公司來嘗試了。

    這怎么做:准備按大廠面試的標准准備,然后到處去投小公司的簡歷,記住先別着急找大公司,盡量別在大公司里留下面試不成的記錄,最好一周面個兩家。

    剛開始面試的時候,你會發現你的說辭漏洞百出,甚至會被看穿你的底細,但別灰心,第一收集面試官的問法,第二不斷練習亮點技能結合項目的說法,第三再不斷挖掘你的亮點技能,這個時間段里,小公司的面試官會盡職地彌補你面試中的弱點。

    什么時候能出師?第一面試官確實能問分布式組件的實踐經驗,而不是單純問理論,第二此類面試你通過三家,第三而且你是大優勢通過,而不是可上可下地通過。

8 進大廠的渠道

    這個時候你就能信心十足地去挑戰大廠了,這個時候如何找進大廠的渠道呢?

    1 在招聘網上等渠道,多接觸幾個獵頭,明和他們說你要進大廠,比如bat或者公司名稱。不是每個時間段大廠都有招聘名額,不要緊就等,而且等的時間不會太長,最多2個月。

    2 找內推,比如大家在網上看到有面試成功的文章,就聯系下。

    這里推薦是找獵頭,因為獵頭方便打探你面試結果,而且面試成了更能幫你最大程度爭取工資,同時萬一沒面成,你可以和獵頭說,你想面這家公司的其它項目崗位。如果你自己投簡歷,未必能得到這樣的遍歷。

    當你充分准備,並准備好的說辭經過小公司的檢驗后,一般問題就不大了,萬一再失敗,或者找該公司其它崗位,或者找其它大廠,最多面個3次應該也就成了。 

 9 總結,任何時候開始努力都不晚,大廠離你當前的高度最多也就兩年的距離

    還是這句話,其實進大廠,得到的也就是個能通過加班從而快速提升技能和收入的機會,而且大廠每年的招聘名額都不少,進大廠不難。網上我就見過不少畢業3年內的同學進大廠,我身邊的,我見過碩士就1年經驗進拼多多,本科2年經驗進阿里,至於3到5年經驗進大廠的人,我都記不過來了。

    進大廠除了能提升技能外,收益也比較可觀,比如工作3年,能有20k*16個月的收入,找個其它行業,這些資歷能有對應收入的,並不多沒,而且進大廠后,做個3,4年進可以繼續升級到架構師,達到年入五六十萬的收益(這還算平均水平),退可以像我這樣進個外企,工資外加平時出書出視頻,在上海也不至於餓死。

    可能不少同學現在看大廠需要仰視,但其實做的准備也就這么回事,時間用夠,多看視頻教程,少干無益的消遣,估計頂了天了,2年努力真的足夠了,1年洗白簡歷,1年准備,這還算多了。但如果固步自封,或者雖然努力但始終不敢邁出面試的步驟,那么可能真只能在小公司里隨遇而安了。

 

    感謝大家看完長文,本文寫了有3個半小時,而且篇幅足夠,如果大家感覺可以,請多多點贊,有問題也可以多寫評論。

 

版權說明:

    如果要轉載本文,請先征得本人同意。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM