核心技巧!如何應對面試筆試環節中的演算法題?
本文始發於公眾號: Coder梁,歡迎關注
大家好,最近快到校招季了,今天和大家聊聊招聘環節當中很多人頭疼的做題環節。
很多人以為做題只會在筆試題當中出現,其實不然,不僅筆試,面試的時候同樣會遇到。面試官當場給你出一道題然後在你一個鏈接,打開是一個編輯器,讓你在編輯器當中現場寫出解法的程式碼來。不僅你寫程式碼的時候面試官會全程盯著,而且在你寫完之後還會現場給你捉bug,給你指出你做法當中有問題的地方。很多人本來面試就緊張,加上題目往往沒有準備出乎意料,當場就蒙住了腦子裡一片空白。我想很多同學應該都有類似的經歷。
今天呢,這篇文章就和大家聊聊這個話題,跟大家分享一下,我們應該如何準備這些做題環節。
出題範圍
首先我們第一個要做的就是搞清楚面試和筆試的出題範圍,一般來說正規公司尤其是大公司的出題範圍往往都是固定的,甚至會有一個對應的題庫,即使是不同的面試官也會遇到類似的問題。即使問題不一樣,至少方向或者是考察的點都是相通的,因此就和考前需要老師劃重點一樣,我們在面試和筆試之前也同樣需要提前準備。其中最重要的一項就是搞清楚出題範圍。
出題範圍怎麼搞呢?其實很簡單,就是藉助發達的互聯網,我們可以找到很多和企業以及面試相關的資訊。
最簡單的方法就是去找企業面試或筆試的題庫,有同學估計要笑了,這怎麼可能會有題庫,這些公司是傻么,還會把題目放出來?公司的確不傻,但是耐不住面試的求職者會進行整理啊。而且也有像是牛客網這樣的官方機構和企業進行合作,雖然分享了一些內部的筆試或者是面試題,但是這也同樣吸引到了更多的求職者,另外學生提前進行了刷題做了準備,有了較好的面試表現,企業也就更容易找到人,要知道中國的公司往往都是非常缺人的,所以他們很樂意做這樣的分享。
在我之前的文章當中曾經寫過很多字節跳動、拼多多的校招筆試題的題解,相信看過的同學都應該有映像。如果沒有看過也沒有關係,相關的資料在牛客網當中很多,都是免費的,大家自行獲取就是。
牛客網雖好但也不是萬能的,你可能又要問了,如果我要面試的企業的題目牛客網沒有收入怎麼辦?
也很好辦,可以利用搜索引擎進行搜索。只要是有一定規模的公司,肯定都已經有過不少求職者,保不齊就有一些把面試的一些資訊分享在了一些地方。
比如我拿同花順來舉個例子,同花順是杭州的一家互聯網金融公司,相對不是那麼有名,在牛客網裡就沒有收錄對應的題目。但是當我Google搜索關鍵詞「同花順 筆試題」之後,很容易就能找到一些關鍵資訊。

多看幾個,很容易就能找到一些原題。即使我們在面試或者是筆試的時候不會剛好遇到同樣的題目,但至少確定一下考察的範圍和題目的難度是完全沒有任何問題的。
有同學可能又要問了,如果我要面試的公司規模特別小,網上一點資訊也找不到該怎麼辦?
這種情況也不用慌,既然網上找不到資訊,那麼我們就按照常規的準備流程準備就行了,也就是LeetCode + 劍指offer的組合。LeetCode前300題刷完或者是把劍指offer啃完,基本上演算法類的筆試題都不成問題。因為面試不是炫技,本身就不會考察太難的演算法,我面了這麼多家公司,基本上難度沒有超過LeetCode Hard的。偶爾幾次LeetCode Hard難度的問題還是看在我有ACM獲獎經歷才問的。
熟悉白板編程
說到面試和筆試前的準備,很多人能想到的就只有刷題,刷題固然是必須的,但還有另外一樣需要我們好好準備的就是白板編程。
因為面試或者是筆試的時候,考察的並不僅僅是你能不能想出解法把程式碼寫出來,你的程式碼風格和程式碼品質同樣重要。另外一點是白板編程本身就是一個考驗,因為現在IDE的程式碼補全功能太好用了,很多人離開IDE甚至都不太會編程了。可能不記得main函數的傳參,或者是不記得遵守一些規範等等。這些雖然都是小的細節,但在面試的時候就是會影響評價的,所以千萬不能放鬆警惕。
我有一次在面試的時候,候選人雖然把解法寫出來了,但是寫的程式碼又臭又長,可讀性非常差。更過分的是,他居然連main函數都名字都寫錯了,寫成了mian,既不記得return 0,也不記得using namespace。看得出來他之前做了很充分的準備,但就是因為這些小細節,讓我們對他的程式碼能力有了懷疑,最終沒給他通過。
還有一點尋常很多人都不會意識到的就是程式碼風格,一些大牛在面試和筆試之前都會重溫一下Google命名規範,就是為了在白板編程的時候不會踩雷。雖然中國的企業對於程式碼風格的要求沒有那麼嚴格,但是漂亮的程式碼風格一樣是很大的加分項。相反,如果是很糟糕的程式碼風格一樣會導致減分。
所以我建議大家也能向大牛學習,能花一點時間熟悉一下正規的程式碼風格。像是什麼用拼音給變數起名的事情就千萬不要有了。
思考策略
最後,和大家聊聊我們拿到題目的時候思考的策略。
很多同學由於沒有準備以及緊張,拿到題目的瞬間就懵了,完全不知道應該怎麼辦,大腦也死機了。這樣的情況一旦發生, 顯然面試也就涼了一半了。
所以第一件要做的事情就是穩住心態,千萬不要慌。這個時候的一個技巧是先和面試官確認一下題意,一方面可以確定下一下自己理解的是否正確,以及一些題目的邊界條件。另外一方面也可以緩解一下緊張的情緒。
理解了題意之後,我們可以按照先易後難的方式。先把最容易想到的思路分享給面試官,有了最簡單的思路之後,再圍繞思路的缺陷或者是問題思考解決方法。比如說是複雜度太大了,還是有一些什麼問題沒有解決。這樣你整個解題的過程就嚴格遵循了分析問題解決問題的思路,即使你最終沒能想出解法,你的整個思考路徑一樣是非常有價值的。
千萬不能思維跳躍,所有的地方都推倒完了,然後卡在一個地方一直卡著。也不和面試官溝通,面試官都不知道你只差一點了,還以為你一點頭緒都沒有。另外,當你實在想不出來的時候也可以跟面試官交流和溝通,找他要一點提示也是可以的。千萬不能埋頭干想,一定要給出回饋和你思考的過程。某種程度上來說這個思考的過程和你的方法論比你最終的結果要重要得多。
尾聲
無論是面試筆試還是白板編程, 雖然都有一些臨場技巧,但最重要的其實不是臨場的發揮而是前期的準備。我個人感覺前期的準備至少佔80%以上,通過充分的準備,我甚至有押中過面試原題的經歷。
最後,祝願大家都能好好準備,拿到心儀的offer。
今天的文章就到這裡,感謝大家的閱讀,喜歡的話不要忘記三連。