程序員面試筆試什么最重要

時間:2018-12-31 12:00:00 資料大全 我要投稿

程序員面試筆試什么最重要

  程序員面試一直是社區(qū)樂于討論的熱門話題,

程序員面試筆試什么最重要

。我自己從06年實習以來,先后經(jīng)歷了4家軟件公司,全部是外企,其中有世界500強的通信企業(yè),有從事期權期貨交易的歐洲中等規(guī)模的金融公司,也有為大型汽車制造商開發(fā)Android智能汽車的新興公司?缛隝T行業(yè)以來,我在求職過程中經(jīng)歷過多次面試,最近兩年也有過多次面試別人的經(jīng)驗。我感覺現(xiàn)在到了對這個問題發(fā)表自己看法的時候,這篇文章是我站在面試官角度對于程序員面試問題的一個階段性反思和經(jīng)驗總結。

程序員面試筆試什么最重要

  程序員面試什么最重要

  【目標】

  相信和不少朋友一樣,有了幾年工作經(jīng)驗成為Senior后就開始了面試別人的經(jīng)歷。我在最初這個階段只是按照自己的想象把”找到基礎好的程序員“,” 找到算法能力優(yōu)秀的程序員“,”找到有Android開發(fā)經(jīng)驗的程序員“等作為面試的目標。但是,實際的經(jīng)歷告訴我,尤其是按“基礎好”,“算法好”這些目標招到的人最終效果并不好。比如,有的面試者基礎知識和算法掌握情況不錯,進程、線程、內存等概念清晰,基本的Hash,二叉樹,快速排序等數(shù)據(jù)結構和算法也比較熟悉,但是進公司后在實際工作中表現(xiàn)得很糟糕。后來,我才發(fā)現(xiàn)原來是我的面試目標出了問題,我原先的面試方法更像是大學的算法或操作系統(tǒng)期末考試,按照這種方法讓許多并不合適的人通過了面試,同時也可能錯過了許多合適的人。

  后來,我的反思是,從公司的角度講,面試的根本目的是找到"能夠干好工作"的人,而“高學歷”,“算法好”,“基礎好”,“有經(jīng)驗”這些都是表象而不是根本,它們并不能直接和“工作好”劃等號。

  【方法】

  目標明確了,但接下來的問題是假設面試者是一個黑盒系統(tǒng),“工作好”不是直接可觀測變量,你所能直接觀測的變量是基礎、算法、經(jīng)驗、學歷、性格、談吐、年齡等等。所以,實際上,你只能從“基礎好”,“算法好”等可以直接觀測的量去推測“工作好”的概率,這就是一個在“X好“條件下"工作好“的條件概率問題:P(工作好 | X好)。

  根據(jù)這個模型,面試所應該考察哪些方面就很明顯了,那就是選擇那種最具有區(qū)分性的方面來考察。比如,考察面試者的體型特征沒有太大意義,因為P(工作好|高),P(工作好|矮),P(工作好|胖),P(工作好|瘦)的概率都差不多;所以,體型特征不具有區(qū)分性,這不是面試所應該關注的內容。

  面試官應當結合職位的要求明確哪些因素具有比較好的區(qū)分性。比如,如果要招一名技術門檻比較高的3D游戲引擎開發(fā)工程師,面試者A具有3D游戲引擎開發(fā)的經(jīng)驗,但是在基礎知識和算法面試方面表現(xiàn)一般;面試者B相反,基礎知識和算法面試表現(xiàn)很好,但沒有游戲開發(fā)經(jīng)驗,而你只能選擇其一。你選誰呢?其實,這就是兩個條件概率問題P(工作好|經(jīng)驗好,基礎一般,算法一般)和P(工作好|沒經(jīng)驗,基礎好,算法好)。這個問題就留給面試官來判斷了,就我個人而言,對于技術門檻較高需要技術積累的職位,經(jīng)驗更加說明問題,因此,我更傾向于面試者A。

  下面,我再結合自己的經(jīng)驗談談對面試中常見方面的看法。

  【算法】

  算法是Google和MS等大公司面試所重點考察的內容。我個人很喜歡算法,曾經(jīng)參加ACM/ICPC拿過北京賽區(qū)的'13名,

資料共享平臺

程序員面試筆試什么最重要》(http://clearvueentertainment.com)。但是,就個人經(jīng)驗來看,我所接觸過的絕大多數(shù)開發(fā)職位而言,算法都不適合作為考察面試者優(yōu)劣的主要因素。對于普通的非算法性開發(fā)職位,考察面試者的算法就相當于考察他打乒乓球好不好一樣,與目標“工作好”的相關性太低。就我個人的經(jīng)驗來看,差不多P(工作好|算法好)=50%,也就是算法面試沒有太大的區(qū)分性。

  甚至,還有一種很不好的情況特別多地出現(xiàn)在算法好的面試者身上,我稱之為“只磨刀,不砍柴”。什么意思呢?有類人只對什么A*算法,異步編程,JVM 類加載機制這種純技術問題感興趣,對實現(xiàn)用戶需求毫無興趣。這類人看起來有一定的技術能力,但是對公司來講貢獻十分有限,甚至不如技術一般但認真負責的人。所以,一旦遇到面試者算法好,我就特別留意考察會不會是這種“只磨刀,不砍柴”的人。

  另外,雖然我個人不了解Google和MS,但我對于其特別重視考察算法能力的面試策略是持懷疑態(tài)度的。即使在這樣的世界級大公司,算法雖然重要,但可以想象在項目實施過程所遇到的各種各樣問題中,算法問題絕大多數(shù)時候不會是主要瓶頸,沒有到那種需要每個人都是算法高手的情況。實際上,絕大多數(shù)項目真正難點并不是一兩個算法瓶頸,甚至也不是單點的技術瓶頸,而是系統(tǒng)性的組織、協(xié)調、設計、開發(fā)問題,有大量的看起來不是那么有技術含量的臟活累活,也有許多問題是由于信息不足,并不是技術能力強就能克服這些困難。一個團隊最好優(yōu)勢互補,有人算法強,有人業(yè)務分析能力強,有人擅長后端服務,有人擅長前端界面,有人聰明,有人踏實,這是最好的。如果按照“算法好”的單一標準選材,必定會把許多優(yōu)秀的人才拒之門外。

  補充:在更多地了解了Google和Facebook等一流公司的面試細節(jié)之后,我對這個問題的認識有了一定的改變,實際上這些公司在面試過程中并不完全強調技巧性很強的算法,而是更加注重編碼(Coding)能力,只是在進行編碼測試的過程中往往是通過一些簡單算法題來進行的。我對于這種面試方法越來越欣賞,并且也作為了我們公司面試過程中的重點環(huán)節(jié),因為編碼能力的測試是十分必要的,它有著知識性問題無法取代的作用,如果一個面試者連“判斷一個字符串是否是另一個字符串的子串”這樣的題目都無法正確并快速地實現(xiàn),那么基本上可以直接排除了。我這里所強調的是不必考察高難度的算法問題,并非不重視編碼能力測試,請讀者不要誤解。

  【基礎】

  基礎面試是指考察諸如指針使用、進程線程概念等基礎知識的面試,十分類似于大學期末考試題。我曾經(jīng)以為基礎面試十分重要,但是現(xiàn)在不這么看了。在工作中基礎的確是重要的,但是在面試過程中,它必須具有區(qū)分性才有意義,也就是說P(工作好|基礎好)的概率要高,那么考察指針使用,進程線程區(qū)別這樣的基礎題目才有它的意義。我的實際經(jīng)驗是,基礎面試并不具有很好的區(qū)分性,和算法一樣, 差不多P(工作好|基礎好) = 50%。同時,基礎面試是最容易準備的,中國人有長期的應試教育經(jīng)驗,要準備幾個把玩指針題目太容易了。

  我曾經(jīng)遇到過這樣的面試者,他的C語言基礎和編譯、鏈接等原理掌握得非常好,給我留下了深刻的印象,我給的面試結論是:知識面不寬,只會C語言,但基礎很扎實,建議錄用。后來的事情證明了那個結論的前半部分是對的,但是”建議錄用“錯了。他在實際工作中表現(xiàn)得一塌糊涂,不理解需求,不理解整體架構;同時,上班時間不是花在項目上,而是花在閱讀諸如《程序員的自我修養(yǎng)》之類的書籍上。最后,這位同事由于長期“不出活”離開了公司。

  基礎不是不重要,而是“基礎好”不足以說明面試者能干好工作,因為基礎是屬于局部性知識,而實際工作需要綜合性能力,二者有天壤之別。C語言、操作系統(tǒng)能考高分,但是不會寫程序的人在大學我們還見得少嗎? 軟件開發(fā)就像蓋房子,綜合能力是設計和搭骨架,基礎知識是碼磚。張小龍原先Foxmail是Delphi開發(fā)的,他它不懂C#,你如果要招聘一個開發(fā).NET Email客戶端的人,你考察他對CLR掌握得好不好有意義嗎? 讓張小龍來開發(fā)一個C#版的Foxmail真的會有困難嗎? 你招一個精通C#但沒有Email客戶端開發(fā)經(jīng)驗的人來真的比張小龍靠譜嗎?

【程序員面試筆試什么最重要】相關文章:

1.程序員面試什么最重要?

2.程序員面試筆試寶典

3.程序員面試筆試真經(jīng)

4.程序員面試筆試經(jīng)驗

5.最復雜的面試筆試

6.面試筆試前求職心態(tài)很重要

7.面試最穿什么好?

8.程序員的35個面試筆試溝通技巧