因為公司最近招聘的力度很大,所以最近公司的面試很多,加之很多同事項目緊,所以讓我參加了一些技術面試。不論是作為面試官還是應聘者,參加工作以來我參與的面試的次數我自己也記不清了,所以在此想從面試官和應聘者的角度來談談我的面試經歷和感受。
作為面試官
因為上周的事情比較近,我就先從公司最近的面試談起。我所在的公司面試是分為四輪的,前兩輪是技術面試,第三輪是英語面試(因為是外企,所以對英語要求相對較高),第四輪是人事的面試,因為應聘者分布范圍很廣,所以我們的面試以電話面試為主。因為我本身就是技術人員,所以我只會參與前兩輪的面試。
首先公司負責招聘的工作人員會從招聘網站收集一些相關技術領域的應聘者信息,在這里做一些初步的過濾,比如學歷、工作年限、工作經歷等等,在這里的過濾沒有任何技術人員的參與,僅僅是負責招聘的同事根據自己以往的經驗來工作,這一步驟我沒有參與,所以我也不知道具體細節。通過了簡歷過濾這一步之后,應聘者會得到電話確認通知,確認是否真的有意向來本公司工作。
經過了簡歷過濾之后,就進入到正式的面試流程,也就是第一輪技術面試。這一輪的技術面試有點像“超女”的海選。在這一輪中我們會對應聘者的技術廣度和深度做一個較為全面的測試。對于技術人員,我個人有這樣一種看法:技術的深度是決定是否錄用的充分條件,而技術的廣度是決定你的薪水高低的充分條件。注意我在這里用的詞語是充分,而不是充要或者必要,因為有些偏才、怪才不屬此例,如果你自認為不是偏才或者怪才,那么就要在技術的深度和廣度上下功夫,最好是遵循先深度再廣度的過程。所以在第一輪的技術面試中,我們會首先通過一些基本的問題來了解應聘者的所掌握技術的廣度,然后再通過一些基礎題來測試應聘者所掌握技術的深度。如果應聘者在某些面上達到了我們的深度要求,就會進入到下一輪面試。
跟第一輪面試有所不同的是,第二輪面試提問的面不會那么廣,而是根據應聘者在上一輪中的表現突出的部分再深入詳盡了解測試一下他所掌握的技術的深度,除此之外,可能還會有一些問題來測試他的思維反應能力,比如針對某一個框架中已經實現過的功能要求應聘者嘗試另外一種實現,比如如何寫一個Web服務器或者某個框架等等,在這里并不是要求應聘者真的去實現這樣一個功能,而是借此來判斷他對陌生問題的思維反應能力。如果通過了這一輪面試,算是通過了技術部分的面試了。
在這里我想糾正幾個錯誤的觀點。
第一個觀點就是很多初中級開發人員經常會想一些類的基本用法一查幫助手冊或者在網上一搜就能得到答案了,為什么還會問這樣的問題?這個觀點是錯誤的。我承認很多問題確實可以通過查找幫助手冊或者在網上搜索就能找到答案,但是作為開發人員掌握一些基本知識是必須的。就像通過查字典我們能閱讀所有的書籍一樣,但是你見過哪個作家認識的字還沒有一個小學生認識的多就能寫出一部長篇小說來?開發人員是創造者,如果腦子里實現沒有一些基礎的知識,他怎么能夠天才般地想到這個問題改用那個類的那個方法來實現?這就是為什么所有的針對初中級技術人員的面試一定少不了問基礎知識的原因。對于同一個功能的實現,可能在類庫中有不同的實現,這些實現之間的差別我并不認為是類似“茴香豆的茴字有幾種寫法”那樣迂腐可笑,相反它們可能分別適應于不同場景下。
第二個觀點就是很多應聘者總感覺面試官是一定要難倒應聘者才會獲得心理上的快感,或許有這樣的面試官,但是大部分面試人員沒有這種心態。有時候會提一些刁鉆、偏僻的問題,這是出于了解應聘者的掌握的技術的廣度的需要。在大部分情況下,某些問題你回答不上來沒有關系,沒有人指望你會獲得滿分——當然,如果你獲得了滿分,在你和HR談薪資的時候你會更主動、底氣更足。在某些情況下,面試官在某個地方深究可能是出于項目的需要,比如希望招聘進來的人將來從事某個項目的開發,而這個項目對一些領域要求比較高。
第三個觀點是關于面試官與應聘者的技術高下的,很多人認為面試官一定比應聘者技術高,其實未必。當然在大多數情況下可能是如此。我有看到有人在寫面試經歷中寫到自己曾經問過面試官一個問題,結果面試官回答并不理想,于是就得出面試官技術不咋地,甚至還會說面試的那個公司全部技術不怎么樣的結論,其實這個結論未必是正確的。所謂術業有專攻,你所掌握的知識未必就一定是別人所需要的,你在某一個點上勝了別人未必代表你在所有面上都超過了。當然也存在你在某一個面上真的勝出了別人——這很可能就是別人要招聘你的原因。總之,面試官不是處處都比你牛,他能代表公司來面試你可能是他在另一個你并不擅長的方面很突出所以就進入了公司并且代表公司來面試你。
作為應聘者
前面周公說過,周公做過面試官,也做過應聘者,在這里周公也談談周公作為應聘者的一些經歷和感受,在簡歷中我的應聘崗位從C#高級程序員到項目經理及技術總監。為了避免不必要的麻煩,在下面的敘述中列出的公司名稱都是隨意取的代號,請大家不要對號入座。
從山西太原回湖北武漢之后,周公在一家掛著美資旗號的臺資企業WSW工作(臺資企業最典型的代表就是FSK了,最具有臺資特色的就是所有窗戶外面都有安全網),這類的臺資企業還有WC和QS等等。因為臺資企業的變態管理制度和無福利措施,所以在那家公司時周公去過武漢一些軟件公司面試。在這里周公談一談一些印象比較深刻的面試。
第一家印象比較審核的公司就是QS。這也是和WSW一樣,這也是一家掛著美資旗號實行臺企管理的軟件企業,里面有很多不違反法律法規但是讓人覺得非常不舒服的措施,其中之一就是讓你拿著二線、三線城市的薪水去一線城市出差(有些臺企如WSW更惡劣到以“培訓”的名義讓你出差,這樣連差旅費都省了)。在這家公司里我被問及到很多技術和管理方面的問題,大多數我都回答得比較好,所以就沒有什么印象了。我至今仍有印象的就是一道關于單元測試題,題目就是有針對一個大型項目的單元測試,全部測試用例有16萬個,做完全部測試的時間大約需要8小時。現在的情況是如果一次性全部測試就會有用例測試不通過,如果只測試一半(前1/2或者后1/2)就能通過,問如何解決這個問題。說實在話當時對這個問題我就沒有思路,一般開發者在項目中也不會遇到這樣數量的單元測試用例,我當時的思路是再測試前1/4至3/4部分的用例看是否會全部通過,或者繼續類似于修電腦式的故障排除法(就是通過分段的方式)來查看問題所在,不過仍被否定。至今這個問題我仍沒有想出比較好的辦法(這也是為什么我至今仍沒有忘記的原因),現在想到的可能就是是否在單元測試中有未來得及釋放的資源,在少量用例測試中并不會出現,在大量用例測試中就會因為沒有來得及釋放所導致(比如大量對數據庫訪問導致數據庫連接池中沒有可用連接導致等待超時等等)。
第二家公司是在漢口的一家公司。去了之后被告知公司總部位于深圳,武漢分公司成立不久,公司現在目前還沒有技術人員,唯一懂技術的總經理當時正在出差,在出差之前總經理留下了一套題。等HR把這套題拿過來之后,我一看真的是傻眼了!在這份8頁的試題上寫滿了題,所涉及到的編程語言有Delphi、C\C++、Java、C#及PHP,所涉及到的數據庫有SQL?Server、MySQL及Oracle,除此之外還有一些算法題,什么灰度算法之類的等等。說實在話,這些編程語言和數據庫我都使用過(廣度還算可以吧,當然有些只是在業余學習并實踐的),但是不能在每個編程語言和數據庫上都能達到相同的深度,花了兩個半小時做了我所能做的部分就交卷了。事后的感覺是,在應聘過程中我遇到過不少要求廣度和深度的公司,但是如此要求的真的是平生第一次,到最后我都不知道這家公司主要用什么變成語言開發。
第三家公司是曾經位于中南的WC公司。進去之后也是發了一堆面試題,有中文描述要求中文作答的,有英文描述要求英文作答的,有技術的,也有考邏輯思維能力的,也有個人要求填寫個人隱私資料的。在技術面試部分有考編譯原理的,也有考匯編語言的,盡管學的不是計算機專業課,但是為了拓展眼界我曾經自學過這方面的知識,所以大部分勉強回答得上來,不過最終我沒有做完全部的試題,因為我在試題中看到了很多設計個人隱私問題,比如是否得過乙肝(這個好像國家禁止用人單位打聽并以此拒用應聘者吧),還有在過去三年是否得過重大疾病以及對祖上的調查等等,并且公司說如果不如實回答公司如若發現就會立即辭退,考慮到這樣的公司不可能會對員工有所尊重,所以我決定半途退出(事后我有同事去了這家公司,完全證明了我的推測)。
第四家公司是位于珞瑜路上的一家公司,總部也是位于深圳。在一個大學紛飛的冬天,我去了這家公司面試。頭一次遇到沒人給倒杯水的經歷(我當時真的很想喝杯熱水暖暖身子,特別是我后來知道整個面試過程持續了三個半小時時)。這家公司的面試題也很厚,前半部分是非技術測試,題目很像公務員考試的邏輯推理題目(周公曾有一次公務員考試的經歷),后半部分是技術題,讓我吃驚的全部是C和C++的題目。術業有專攻,對于C和C++方面的知識我確實不熟悉,只能回答一部分。最后來了一個技術人員和我聊天,我們談了各種數據庫的記錄數達到何種級別就需要采取集群或者負載均衡措施,之后的全部時間都是在圍繞著數據庫方面的知識進行。事后周公的感覺是,可能這家公司的HR把C#當做C++,因為他們要招聘的是高級C++開發人員而不是C#,估計是看到都有C,覺得差不多所以讓我過去參加海選。
第五家公司,這家公司是我進入到當前公司之前的最后一家公司,這是一家創業型的公司,所以對技術要求比較高。在這家公司里面試過程中,基本上都是圍繞C#和ASP.NET進行,中間曾有過Java和C#的對比,對于Java和C#我一直都在用并且也都在關注技術趨勢,所以回答得比較順利。有兩個問題印象比較深刻,一個是一個方法,在C#的循環里執行1000次和在Java里執行1000次(忽略語法上的區別),它們在執行過程中甚至在運行時有什么區別沒有;另一個問題是在ASP.NET中實現URL重寫,這個過程是在對用戶身份認證之前還是之后?在這家公司干了三個月最終離開了,并且在現在的公司認識了以前也同樣在那家公司干過的同事(我進去之后正好坐在該老兄的位置上),大家的感覺是這家公司勞動強度太大,一周上班六天也就罷了,還每天工作12個小時以上,真的是受不了。
最后談談我現在公司對我的面試。在沒進去之前我也經歷過四輪面試,前兩輪同樣是技術面試,在技術面試中問到了IIS各版本之間的差別、命名管道、ASP.NET頁面生命周期、ASP.NET1.1和ASP.NET2.0之間的區別(aspx頁面部分就有區別,前為extends,后位partial,編譯處理也不一樣)等等考察廣度和深度的問題。最終通過了面試而入職。
在入職現在的公司之前,還受獵頭推薦跟上海的一家移動互聯網公司接觸過,應聘的崗位是技術總監,在這家公司面試時主要是談及高并發下的處理問題,比如如何使用負載均衡,如何使用Memached等第三方工具等等,本來在這方面我還是有一定經驗,并且對方很也看中我的技術和管理經驗,只不過周圍的人都不太贊同我再次離開武漢,所以最后只好作罷。說真的,心里感覺有些遺憾,但為了父母和家人,只好放棄。
感觸和體會
在面試過程中遇到不能回答的問題不必太過于在意,特別是面試官在考察你掌握的技術的廣度的時候,最忌諱因為一兩道題回答不上來而緊張,從而影響了個人能力的發揮。對于個人來說,一定要盡量在深度上下功夫,在滿足深度的前提下拓展廣度(用邏輯思維能力,舉一反三)。最后要說的是,心態很重要,你有選擇公司的權力,公司也有通過各種手段來來考察你的能力的權力,在不涉及隱私和影響個人福利的情況下盡量作答,能進去自然皆大歡喜,不能入職也沒有必要自暴自棄。可以繼續尋找適合你的公司,也可以繼續準備,為再次面試做準備。
周公
2011-08-15
如有這方面的問題,可以在博客下方留言或者異步到周公的微博(http://weibo.com/zhoufoxcn)參與討論。