- 程序員面試金典(第6版)
- (美)蓋爾·拉克曼·麥克道爾
- 1658字
- 2020-01-10 15:33:48
1.1 為什么
這是求職者在開始準備面試時最常見的問題之一。面試流程為什么是這樣的?現實中可能存在以下情況。
(1) 許多出色的候選人在這些面試中表現不佳。
(2) 如果真的遇到這樣的問題,你可以查找答案。
(3) 在現實世界中,你很少會使用諸如二叉搜索樹之類的數據結構。如果你確實需要,肯定可以學習。
(4) 白板編程是模擬的環境。顯然,在現實世界中,你永遠不會在白板上編寫代碼。
這些抱怨并不是沒有依據的。事實上,我至少在一定程度上贊同這些說法。
同時,對于一些職位(并不是所有職位),有理由以這種方式進行面試。你是否同意這樣的邏輯并不重要,但是你最好能夠了解在面試中為什么會問及這些問題,這有助于你理解面試官的想法。
1.1.1 錯過了優秀人才是可以的
雖然令人難過(也令求職者沮喪),但這是真的。
對公司而言,優秀的求職者被拒實際上是可以接受的。公司的目的是組建強大的員工隊伍,因此可以接受錯過優秀求職者這一事實。當然,公司并不希望出現這樣的情況,因為這樣會增加招聘的成本。盡管如此,只要仍然可以擁有足夠多的優秀員工,這是一個可以接受的折中方法。
公司更擔心的是“錯誤肯定”:一些人在面試中表現得很好,但實際上并不是非常優秀。
1.1.2 解決問題的技能很寶貴
你如果能夠獨自或在一些提示下解決幾個難題,那么你很可能擅長于開發最優算法。你是個聰明人。
聰明的人往往能夠出色地完成工作,這對公司來說是很有價值的。當然,這不是唯一重要的事情,但是這是個非常重要的亮點。
1.1.3 基礎數據結構和算法知識很有用
許多面試官認為,計算機科學的基礎知識實際上非常有用。樹、圖、鏈表、排序等經常會在工作當中出現,所以應該掌握這些知識。
你可以根據需要學習這些知識嗎?當然可以。但是,如果你不知道二叉搜索樹的存在,就很難知道何時應該使用它。而如果你知道它的存在,那么也就基本上掌握了它的基礎概念。
另外一些面試官認為,依靠數據結構和算法來判斷求職者的表現是一種很好的“替代”手段。即使這些知識學起來并不是很難,但是他們認為,是否掌握這些技能和能否成為優秀的開發人員有很強的相關性。掌握這些知識往往意味著你已經完成了計算機科學專業的學歷教育(在這個過程中,你已經學到并掌握了相當廣泛的技術知識)或者自學了這些知識。無論哪一種情況,這都是一個好的信號。
數據結構和算法知識出現在面試中的另一個原因是:很難問一個不涉及這些知識的問題解決型題目。事實證明,絕大多數問題解決型題目都涉及一些相關的基礎知識。當有足夠多的求職者掌握這些基礎知識時,考查有關數據結構和算法的問題則很容易形成一種模式。
1.1.4 白板讓你專注于重要的事情
要在白板上編寫完美的代碼,確實十分困難。不過面試官并不期望你能夠做到完美。絕大多數人的代碼中會出現一些bug或小的語法錯誤。
白板的好處在于,你可以在某種程度上專注于整體結構。你并沒有編譯器,所以不需要使代碼能夠通過編譯。你也不需要寫出整個類的定義和樣板代碼。你應該專注于代碼中有趣、關鍵的部分,即題目所要求的核心功能。
這并不是說你應該只寫一些偽代碼,也不是說代碼的正確性無關緊要。大多數面試官并不接受偽代碼,而且代碼中的錯誤越少越好。
另外,使用白板會鼓勵求職者多交流、多解釋他們的思考過程。而如果給求職者一臺計算機,則會大大減少與他們的交流。
1.1.5 但這并不適用于每個人、每家公司和每種場合
上述內容旨在幫助你了解公司的想法。
我個人怎么看?在適當的場合,當這樣的面試流程有效時,可以對求職者的問題解決能力進行合理的判斷,因為表現出色的人往往比較聰明。
然而,這樣的面試流程并不總是奏效的。你或許會遇到不稱職的面試官,或者面試官會問及不合適的題目。
另外,這樣的方法也并不適合所有的公司。一些公司會更重視以前的經驗,或者需要求職者具有特定的技術能力。而這些數據結構和算法問題并沒有考慮到這些方面。
這樣的過程也不會衡量求職者的職業道德或者專注力。然而,幾乎沒有任何一種面試流程可以評估這方面的能力。
該面試流程并不是完美的,但是又有什么樣的面試流程是完美的呢?所有的方法都有缺點。
我的結論是:現實既然如此,只需盡力而為,做到最好。
- 從零開始構建企業級RAG系統
- Hyper-V 2016 Best Practices
- Python數據分析入門與實戰
- GeoServer Cookbook
- 編程卓越之道(卷3):軟件工程化
- Elasticsearch for Hadoop
- Unity 5 for Android Essentials
- Cocos2d-x學習筆記:完全掌握Lua API與游戲項目開發 (未來書庫)
- 常用工具軟件立體化教程(微課版)
- 新一代SDN:VMware NSX 網絡原理與實踐
- 區塊鏈技術進階與實戰(第2版)
- jQuery技術內幕:深入解析jQuery架構設計與實現原理
- Java EE輕量級解決方案:S2SH
- Python數據可視化之matplotlib實踐
- Unity虛擬現實開發圣典