普通本科進大廠的經驗
- 2019 年 10 月 3 日
- 筆記
公眾號後台經常有朋友留言,讓我分享一下進大廠的面試總結,今天就寫一篇文章結合自己的經歷談談。另外,上周發了一篇 ” StackOverflow 周報“ 大家反饋的效果不錯,後續會繼續更新。這次周報都是 Java 語言,沒有看到的朋友可以點擊去看看。回過來說進大廠面試,這件事我打算按照時間的維度拆解一下,分成事前、事中和事後分別說說。
事前
1. 算法的準備。算法是最基礎的內容,也是進大廠的必備技能。一聽到算法可能有些朋友比較頭疼,我自己也是挺頭疼的。一方面我們平時工作直接寫算法的時候並不是很多,另一方面學習算法要付出大量的時間,並且短期內沒有明顯效果且枯燥。這方面準備我從大學就開始了,最開始看書,劉汝佳的《算法競賽入門經典》,然後每天都在 UVA Onlie Judge 上面刷一道題給自己定的最低標準是無論多忙,每天必須刷一道,保證量不能少。至於為什麼量不能少,其實就是“破窗理論”,如果某一天你沒堅持,有其一就有其二,久而久之就堅持不下去了,這項計劃最後就廢棄了,還好自己最後堅持下來了。畢業後參加工作仍然刷題,刷 leetcode,因為工作後時間相對沒那麼可控了,不能保證一天刷一道。所以,對於現在想準備算法的朋友,如果有時間每天刷刷題還是有必要的,如果沒時間或者就是為了應付面試可以買一些算法面試的課程,有針對性的突擊效果會更好。從我的面試經歷來看社招大部分崗位算法不會像校招那麼難,掌握基本的算法,會算時間、空間複雜度,多反覆練習,這一關沒有想像的那麼難。
2. 工作內容。算法考察的是程序員的基礎能力,而工作內容就是考察實踐能力以及解決問題的能力。這塊總結有兩點,第一,需要對自己用的技術、框架的核心原理和運行機制要非常熟,如果有精力能看一些核心源碼絕對是加分項。第二,要總結平時遇到的每個問題,比如:內存溢出、系統不穩定、吞吐量低以及高時延等問題,除了要記錄如何解決的,還要尋根溯源了解問題的底層原理,並且要上網多看別人是否遇到同樣的問題以及是如何解決的。對於這兩點我平時都有注意積累,但唯一的遺憾是沒有及時的整理、輸出。有些問題當時解決了,也了解背後的原理了,但是不及時記錄導致時間長了以後基本上都忘了。所以這裡強烈建議各位朋友一定養成善於總結、記錄的習慣,一方面總結的過程本身就是提升的過程,另一方面防止以後忘記。
3. 新技術。對於一些平時工作中沒有用到的新技術也要有一定的了解。如果面試官提幾個新名詞,你都是“不了解”、“不清楚”之類的回答,那給人的感覺就是你並不是一個對技術比較熱愛的人。對於工作 1-3 年的朋友,新技術雖然不需要熟悉底層原理,但起碼知道技術的作用以及適用場景。而對於 3-5 年的朋友,最好能夠了解新技術背後的架構設計是怎麼樣的,以及相對於現有技術的改進是什麼。這一點其實我自己的做的是不夠的,還需要繼續努力。
事中
每個公司面試流程不太一樣,一般來說,一面先自我介紹,然後再考察基礎的算法、編碼能力和技術或者框架的原理。二面考察實際的解決的問題能力,以及系統設計的能力。三面不太考察具體的技術,而是考察整體的素質,比如你對項目的整體掌握程度,對自己的角色和定位是否認識清晰,以及如何跟其他業務團隊聯動。HR面基本上就是最後一面了,當然這一面也很關鍵。下面分解說說每個過程中如何面對。
一面過程中一般會給一個算法題目要求手寫代碼。首先先梳理思路,如果沒有思路沒必要上來就寫代碼。如果這個算法題想了一段時間仍然沒有思路,這時候可以讓面試官給你一些提示。這個階段除了算法的正確性還要注意代碼的書寫規範,以及異常處理,這些都是體現程序員基本素質的地方。可以考慮先寫偽代碼,把算法思路理順了、變量定義清楚、把異常情況考慮全了,最後把最終代碼規整地寫下來,這樣會給面試官一個比較好的感覺。畢竟面試官以後可能要跟你一起寫代碼,如果看到代碼寫的亂七八糟,變量名沒有任何可讀性,也不考慮異常情況,那他可能不太敢讓你通過面試。對於技術或者框架的原理的考察沒有什麼技巧,就在於自己實際的掌握情況和積累,平時可以多總結,輸出,面試的時候直接拿來複習效果更好。
二面時面試官會讓你介紹平時工作中遇到的哪些問題以及怎麼解決或者優化的。作為求職者應該先簡單介紹一些業務背景,以及遇到的問題,然後再說說自己的優化方案,最終落腳點是對業務的提升是怎麼樣的以及技術上有什麼樣的成長和積累。因為優化往往是要結合業務的,而面試官不太了解你的業務場景,所以回答問題之前先言簡意賅地介紹一下業務場景,既可以給面試官一個比較好的體感,又顯得自己的回答邏輯清晰,更有條理性。這個環節如果網上有些優化場景與你的業務類似也可以說說,這其實也是自己學習能力的一個體現。在你的介紹過程中面試官肯定會打斷你問你一些問題,對於不同經驗的求職者,面試官考察的重點也不太一樣。我自己的理解是這樣的,對於1-3年經驗的人重點考察原理是什麼,怎麼優化的;對於 3-5 年經驗的重點考察原理為什麼是這樣,而不是那樣。如果面試提問了一個自己不會的問題,不要說 ”我不知道“,應該說”這個問題之前沒關注過,我先思考一下“。給自己一點時間思考一下,你可以假設自己在做設計時如果遇到這樣的問題你可能會怎麼做,即便不會也可以談談自己的想法和理解。如果真的沒有任何思路,就誠實的說“我不知道”就好了,但這個“我不知道”跟之前的不一樣,這個是經過自己思考之後的結果。記得我去某團面試遇到過一個問題 “運行 Spark 任務,會指定 CPU core 個數,你怎麼知道系統一定會給這個任務這麼多的 CPU core”,我想了下確實不知道,然後面試官一笑,說 “我也不知道”,當然這並沒有影響我拿 offer。二面可能會有系統設計問題,因為談自己的業務往往是自己熟悉的,這時候面試官會給你一個他們的業務場景,問你如何設計,可能存在的問題以及優化。這個時候就要先深入思考一下,然後跟面試溝通需求和問題,不斷地完善設計。這個過程重點突出自己的思考以及和面試官的溝通。
三面要注重你對自己項目整體的把握,清晰的知道自己的角色和定位,以及與其他業務團隊的職責邊界。切忌不要對現團隊有負面的評價。之前面某東面試官就提過這樣一個問題,“你對現在團隊最不滿意的地方是什麼”,類似的問題要考慮清楚再回答。即便現團隊確實不好也要客觀評價,不要摻雜過多的個人情感。
HR面要好好重視,他們往往有一票否決權。HR 可能不太了解技術,所以對於技術和業務的介紹一定要熟練、自信,不要讓人家覺得你不專業。其次,要凸顯你的工作經驗以及在團隊中的溝通、協作能力。最後談薪資是大家比較關心的,但是對於這塊我沒好建議,我的經驗是可以多面幾家,對於想去的公司期望薪資可以保守一些,對於不想去的可以報的高一些,面幾家你對自己的薪資水位就有個大概的估計了。這個階段面試的心態總結倆字:自信。
事後
其實一次面試的經驗總結非常寶貴,通過一次面試你就知道自己哪些方面表現的不好,哪些方面表現的讓面試官滿意。對於表現不好的地方要查漏補缺,避免二次跌倒。對於表現好的地方更好進行總結,因為這會是你下一場面試打動面試官的亮點。可以把自己要表達的東西畫個思維導圖,然後不斷在腦海重複它,不斷地強化。多面試幾輪你會發現你的表達越來越流利,越來越自信。
上面都是我自己經歷總結的,我自己也是這樣做的,這份總結更適合工作 5 年內的朋友。當然這可能不是什麼萬能鑰匙,畢竟我自己也有面試失敗的時候,但參考一下對你絕對是有幫助的。目前經濟環境不好,建議各位換工作也要謹慎一些,不好輕易裸辭。希望正在面試的朋友都能順利。
歡迎關注公眾號「渡碼」,分享更多高質量內容