- 高效制勝:程序員面試典型題解
- 吳江編著
- 2300字
- 2021-07-09 18:10:37
前言
你會打開這本書,一定是被“高效”這個詞吸引過來的。作為一名程序員,參加面試最重要的準備工作就是“刷題”,要將大量的時間花在練習算法題上。隨著在線練習的題庫越來越多,面試者為面試準備的時間也越來越長,而帶來的結果則是面試官也需要不斷地翻新自己的題庫,以防止面試者提前準備了自己選的面試題。
這樣一來,面試者和面試官都需要花費大量時間準備面試。而面試者花費了時間和精力準備算法題以后,發現很多題在面試時都沒有遇到,在實際工作中對自己也沒有幫助。因此幫助面試者在節約準備時間的同時提高業務能力就成為我寫這本書的初衷。
我在2018年也因為需要換工作,投遞了很多簡歷,參加了各種企業的面試。花費了大量時間準備卻沒有在面試中派上用場的挫敗感,我深有體會。但是在不斷地練習以后,我逐漸有了信心來應對各種算法面試,最終也找到了滿意的工作。我想把這段經歷中自己結合LeetCode系統地準備面試的經驗總結出來,分享給準備面試的各位程序員,包括我自己,讓大家在今后的面試準備中少走彎路,于是就有了這本書。
本書的“高效”體現在兩個方面。
1.精選適用廣泛的算法。既然面試的目的是考核面試者的能力,面試就應該盡量還原工作場景。而只需要用一些常見的算法就可以解決大部分問題,如果最后的算法效率不夠高,那么通過白板或實機操作,面試者仍然有機會改進自己的算法。
2.選擇最容易寫出的代碼。程序員喜歡自嘲自己的代碼是從GitHub或者Stack Overflow這兩個著名的網站上借鑒來的。平時的代碼可以引用別人的,面試的時候就應該以快速給出一個正確的實現為目標。
我在準備面試的時候發現,我做一道算法題往往需要半天的時間,這并不是因為我做得慢,而是因為解題過程包括以下步驟。
1.嘗試用已有的知識來實現,即使用效率最低的方式也要實現出來。
2.根據LeetCode給出的運行時間和性能測試嘗試優化算法。
3.查找相關的資料,比如LeetCode的討論或相關的理論知識,加深自己的理解。
這些步驟和工作中實現項目功能的步驟一樣,首先給出一個正確的方案,然后再進行優化。日常工作中我們可以使用Benchmark或Profiling等工具優化,面試的時候則需要在紙上通過抽象分析來進行優化。
本書的每個問題都會按照這個結構組織,同時也希望讀者能按照同樣的方式練習算法題,把準備面試的時間花費在更有意義的事情上。
和其他算法書相比,本書顯得很“薄”,因為本書專注于“面試”中用到的算法。對于有一定工作經驗的面試者來說,面試時很少需要實現排序算法等基礎算法,一方面因為它并不是日常的工作內容,另一方面很多語言默認的排序功能需要很長時間的演化才能達到高效和穩定,讓面試者在非常短的面試時間內就寫出同等質量的代碼顯然不夠合理。如果不湊巧,面試者需要在面試中實現排序算法,那么經過本書的“實現—優化”的練習,面試者仍然可以在面試中寫出合格的代碼。練習算法題已經成為程序員求職面試準備中非常分散精力但又不得不做的事情,更重要的優化簡歷、練習自我介紹和總結項目經驗等反而沒有得到重視,而這些才是讓面試官在短時間內了解自己的有效途徑。
如何使用本書代碼
本書代碼使用的編程語言是Python3,在LeetCode提交時需要在語言下拉列表中選擇“Python3”,如圖0-1所示。
考慮到編程規范的需要,書中的代碼和LeetCode的函數名并不一致,讀者提交時需要在默認代碼中調用書中的函數,如return two_sum(nums,target),如圖0-2所示。如果想在LeetCode中模擬白板面試,請讀者不要直接復制、粘貼代碼,而應該手動敲入代碼,這樣才能更好地知道自己解題時容易遺漏哪些方面。請記住:我們的目的并不是完成一道題目,而是完全理解該類問題的解題思路。

圖0-1

圖0-2
視頻導向圖書使用指南
1.什么是視頻導向圖書?
視頻導向圖書是一種創新的內容分發形式,它以我們熟悉的圖書為載體,但圖書只是一個起點。通過視頻導向圖書,讀者可以很容易地使用手邊的智能設備,如手機和平板電腦,從圖書出發,和圖書背后的創作者建立聯系,獲取視頻、直播甚至線下活動等豐富形式的內容,提升獲取信息的效率和體驗。
2.在視頻導向圖書上找到入口
所有視頻導向圖書上都有兩種形式的入口。
(1)二維碼
二維碼是大家非常熟悉、幾乎天天都接觸的。本書中的二維碼入口如圖0-3所示(它真的可以掃描)。

圖0-3 二維碼入口
為了保證二維碼不會失效,我們采用了活碼進行跳轉。關注微信公眾號“內容市場”,使用微信“掃一掃”來掃描書上的二維碼,根據頁面提示進入微信小程序即可觀看講解視頻。也可以使用卷積傳媒研發的App——內容市場,來掃描二維碼并觀看講解視頻。
(2)增強現實觸發圖
雖然掃描二維碼是一種很熟悉的體驗,但不得不承認有點太常見,不夠酷炫。為此,我們提供了另一種更炫的入口:把一張圖直接變成一段視頻并就地播放!方法是使用“內容市場”App來掃描觸發圖,它在本書中如圖0-4所示(它真的可以掃描),它位于幾乎每一節的開頭。
您可以在智能手機上的應用市場等渠道下載和安裝“內容市場”App。

圖0-4 觸發圖
單擊“內容市場”底部的掃描按鈕來掃描觸發圖,首次識別可能需要等待數秒,但馬上您就可以獲得相當驚喜的就地播放體驗了,而且還可以看到運動跟蹤的效果。當然,您不需要一直手持設備并對準觸發圖,而是隨時可以單擊“全屏播放”,將視頻切換到全屏播放。
3.免費享用增值內容的權益
“內容市場”為讀者提供的內容分為兩個部分,一是與圖書配套的、在圖書上提供入口的增值內容,二是由圖書的作者再度創作的、并不在圖書上提供入口的訂閱內容。
本書的讀者都可以免費享用所有的增值內容。如果您看了視頻感覺有所收獲,也可以將它們分享給好友。
訂閱內容也有很多免費的,但有些內容可能需要另外付費購買,這完全取決于您的需求和意愿。
4.聯系客服
如果讀者朋友們在使用軟件時遇到了技術故障等問題,可掃描以下二維碼咨詢客服人員。

圖0-5 客服聯系方式
卷積傳媒