如何準備 Coding Interview?
來自專欄九章演算法
編譯 | Alice Yu & Emma Yang
專欄 | 九章演算法
不管你是剛剛畢業即將參加第一次工作面試的應屆畢業生,還是想要跳槽換一個新的工作環境的職場老司機,如果你即將參加技術面試,下面這些關於coding interview的總結和建議都值得你看看。
一、面試前
1.你得到的消息不一定是準確的
在準備面試的時候,你所做的第一件事情往往是在網上搜索你感興趣的公司,了解該公司的相關內容以及該公司的面經和面試指南,並會和有相關面試經驗的朋友交流。
比如說:在面試過程中當一個面試者沒能敲完代碼的時候,公司的面試官會說沒有關係,你思考的過程和方法很不錯。結果這個面試者沒能通過面試,你卻得到了這家公司看重面試者思考問題的過程而不是結果的消息。
所以即使是從有面試經驗的人那裡得來的消息也不一定是準確的。
2.刷題真的很重要
俗話說得好,熟能生巧。刷題能帶來的最大的一個好處是它會降低你在面試時遇見完全沒見過的題目的機率,從而提高你的面試通過率。
比如說:如果你之前準備面試時就刷過幾次關於平衡二叉樹的題目,那麼如果在面試時遇到平衡二叉樹問題你就能很快解決,從而讓面試官對你的表現比較滿意。
如下圖,根據調查,在面試中遇到刷過的題的面試者被錄用的可能性更高。所以建議在面試前至少刷兩遍lintcode上 easy 和 medium 的題目,儘力做到60%的題目可以bug free.
3.選擇面試公司傾向的或是你熟悉的語言準備面試
選擇你面試的公司所傾向的語言在一定程度上會對你的面試有所幫助。
比如說:一家使用Ruby語言的公司不太會僱傭一個使用Python語言的面試者。反之,一家使用Python語言的公司也不太會僱傭一個使用Ruby語言的面試者。
下圖展示了使用Java C++ Python三種不同語言面試的成功率。
以Java為例,從圖中可以看出,在面試一家傾向於使用Java語言的公司時,面試時使用Java語言被錄取的幾率更大。其原因可能是在傾向於使用Java的公司面試時,出的面試題目很有可能涉及到的與Java有關的知識點比較多。
但是有一點你也需要注意——千萬不要為了取悅面試官在面試中使用這家公司傾向但是你卻不熟悉的語言。因為使用你不熟悉的語言面試,你甚至可能會搞錯一些像迭代數組這樣很基本的問題,最後得不償失。
所以當你不熟悉一家公司的語言時,比起試圖取悅面試官,用你熟悉的語言去面試的結果會更好。Lintcode上面的演算法題目全面支持 java, python, c++語言,你可以根據面試的需要選擇適合自己的語言進行練習。4.語言表達能力需要被重視
上圖展示了使用不同語言的程序員的編程能力和表達能力。
如上圖所示,使用不同的語言會產生語言表達能力上的一些差異。比如:使用可讀性高的語言如Python的面試者,往往有著更好的語言表達能力;而使用可讀性低的語言如C++的面試者,往往在技術方面略勝一籌。
雖然如此,也不要一味認為使用不同的語言會產生很大的語言表達能力上的差異。
因為不管使用的是什麼語言,一個優秀的程序員一定具有向面試官解釋自己所敲代碼的語言表達能力。所以在不斷地練習代碼時你也不要忘記多聽多說多寫,注重培養自己的語言表達能力。5.注意代碼的規範性
如下圖,根據調查,面試官是否錄用你往往是根據你在面試時敲出的代碼決定的,而不僅僅是由你的程序最後是否能夠運行決定。
因為代碼不規範會導致很多低級錯誤的發生,而且也會給面試官留下一個不好的印象。所以在平時練習的時候注意不要為了圖方便而隨便敲代碼,也不要有「只要在面試時把代碼敲得規範就行了」這種想法。
因為一方面這樣的想法在面試時會給你帶來很大的壓力,另一方面平時的習慣也可能會導致你在面試時很難把代碼敲得規範。
因此你要在準備面試時就注意代碼的規範性。可以參考《Google 官方代碼風格指南》。二、面試中
1.你可能會需要「撒謊」
大多數的面經都是針對特定的一家公司而寫的。
比如說A公司更看重敲代碼的效率,B公司更看重解決問題的能力。所以除非你把所有的求職重心都押在了一家特定的公司上,不然你應該不會想輕易改變自己的價值觀。
但是在面試時,適當的「撒謊」強調一下自己的價值觀與面試公司的價值觀相符一點也不為過。
所以在面試A公司時,你可以說自己敲代碼的效率很高,在面試B公司時你可以強調自己解決問題的能力不錯。畢竟現在大多數的公司都希望應聘者能夠認同自己公司的企業文化。
2.在敲代碼之前好好想想
如下圖所示,面試成功者往往在開始編寫代碼前會思考更長的時間。
所以你一定要在認真思考過後再寫代碼,特別是遇到在白板、白紙上寫代碼這樣的coding interview。因為如果是由於思考的不謹慎導致不斷塗改,不僅會給面試官留下不好的印象,而且面對改的亂糟糟的代碼,你也會產生很大的壓力,從而導致發揮失常。3.代碼敲的越多,被錄取的可能性越大
你可能在面試時遇到過這種情況——面試官問了一個問題,你連題目都沒有聽明白,大腦一片空白,代碼自然是一點也敲不出來或是敲不出來多少。在面試結束後,你還想著是不是有可能靠著自己在之前面試中展示出的智慧、魅力和解決問題的能力通過這場面試。
答案是這樣的可能性不大。
如下圖,根據調查顯示,通過面試的面試者平均敲的代碼數有2045個,而未通過面試的面試者平均敲的代碼數只有1760個,從而我們可以看出——代碼敲的越多,被錄取的可能性越大。
而導致這種結果出現的原因可能是無法通過面試的面試者除了本來敲的代碼就少之外,還更傾向於刪除他們運行不起來的代碼。
所以在平時我們就要勤加練習,多敲代碼,從而提高自己被錄取的可能性。4.敲的模塊代碼越多,被錄取的可能性越大
除了敲的代碼數以外,敲的代碼類型也很重要。在傳統意義上,一個優秀的程序員是不會循環敲代碼的,他們會敲那些可以反覆利用的模塊代碼。而調查也表明,成功的面試者往往會定義更多的函數。(函數定義的多少往往是模塊化的一種表現)
如上圖,平均來講,用Python編程成功者會定義3.29個函數而失敗者會定義2.71個函數。
三、面試後
1.面試的時長並不能決定面試結果
在面試結束的時候,我們往往會有一種潛意識下的想法——一場很快結束的面試意味著結果一定十分糟糕,一場持續很長時間的面試則意味著自己一定能進入下一輪面試。
然而如下圖所示,事實並非如此。一場很快結束的面試並不一定是因為你糟糕到面試官不得不提前結束面試,也可能是因為面試官沒有足夠的時間,還有可能是因為面試官在這段不長的時間中,已經看到了你的能力。
所以我們不要以面試的時長來推測面試的結果,而應通過自己面試時的整體表現來綜合推測。推薦閱讀
10 個 tips 教你搞定電面!
12 個 tips 教你搞定 onsite!
面試中遇到你不會的領域,該怎麼回答?
歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程序員交流社區,定期發布面試題、面試技巧、求職信息等。
推薦閱讀:
※如何搭建私有可協作的 Git 伺服器
※13 個 Git 技巧獻給 Git 13 歲生日
※[Github]Github命令行快速使用教程及常見問題解決
※git如何push時不輸入密碼?
※git變基