本文由同濟(jì)大學(xué)畢業(yè)生王同學(xué)提供。原文較長(zhǎng),故分為兩篇,上一篇主要講求職經(jīng)歷,本篇主要講如何 準(zhǔn)備面試。原文如下:
下面講一下如何準(zhǔn)備面試。IT 的技術(shù)性面試,主要就包括幾個(gè)方面:
1) 編程語(yǔ)言的細(xì)節(jié)
2) 算法題
3) 設(shè)計(jì)題
4) 其他包括操作系統(tǒng)、數(shù)據(jù)庫(kù)等知識(shí)。
像微軟和谷歌主要就是考察2,3類(lèi)的題,國(guó)內(nèi)的公司偏重1,4類(lèi)的題更多。
首先編程語(yǔ)言的知識(shí),我覺(jué)得首先需要多看書(shū),像 C++的話可以看一下effective c++,exceptional c++,effective stl,C++應(yīng)用程序性能優(yōu)化等系列,面試的問(wèn)題很多是我們平時(shí)在編程容易忽略的一些細(xì)節(jié)知識(shí)。另外在平時(shí)寫(xiě)代碼的時(shí)候,根據(jù)這些書(shū)里的意見(jiàn),養(yǎng)成好的編程習(xí)慣,比如 c++ 里該用const的地方,盡量用等,這樣最后面試寫(xiě)出來(lái)的代碼也會(huì)比較規(guī)范。另外,平時(shí)寫(xiě)代碼的時(shí)候,盡量不用IDE的代碼提示或者直接用vi等編輯器,記住c++ stl里容器、算法的名字、用法等,這樣面試時(shí)在紙上寫(xiě)代碼時(shí)也會(huì)更得心應(yīng)手。
其次是算法題,由于這類(lèi)題都需要直接寫(xiě)出代碼,所以很考驗(yàn)編程的基本功。提高這個(gè)能力,就需要多做題,雖然我沒(méi)有參加過(guò) ACM,不過(guò)在保研之后那段時(shí)間在POJ、topcoder上刷過(guò)大量的題,通過(guò)刷題可以鞏固數(shù)據(jù)結(jié)構(gòu)、算法書(shū)上的很多知識(shí)。另外刷題我覺(jué)得更重要的不是說(shuō)你掌握了多少算法,而是通過(guò)不斷的想問(wèn)題、寫(xiě)代碼、調(diào)試程序,可以養(yǎng)成比較好的編程的習(xí)慣。在寫(xiě)代碼之前一定要先理清楚自己代碼的思路,寫(xiě)出來(lái)的代碼應(yīng)當(dāng)盡可能邏輯清晰、簡(jiǎn)潔。面試的時(shí)候,我覺(jué)得代碼最好是能一次正確地寫(xiě)出來(lái),否則在紙上或白板上涂涂改改,最后不僅思路混亂而且容易給面試官留下不好的印象。另外,寫(xiě)代碼的時(shí)候碰到遞歸、循環(huán)迭代等的時(shí)候,要有計(jì)算時(shí)間(空間)復(fù)雜度的意識(shí),看看會(huì)不會(huì)出現(xiàn)死循環(huán),棧溢出,計(jì)算超時(shí)等問(wèn)題。由于 POJ 上面的題,很多時(shí)候不通過(guò)的話就是在邊界條件上出了問(wèn)題,所以刷題多了,也能養(yǎng)成良好的檢查邊界的習(xí)慣。此外,對(duì)于快速應(yīng)付面試的話,像編程之美,劍指 offer,Cracking the Coding Interview這些書(shū)也都不錯(cuò),另外有一個(gè)網(wǎng)站leetcode則是專(zhuān)門(mén)用來(lái)刷面試題的,特別適合準(zhǔn)備面試。還有在面試寫(xiě)代碼的時(shí)候,對(duì)于輸入?yún)?shù)的檢查,異常處理等也很重要,另外包括代碼中的命名規(guī)范等細(xì)節(jié)也應(yīng)盡可能做好。
設(shè)計(jì)題的話,一方面可以看下CareerCup網(wǎng)站上一些面試的設(shè)計(jì)題,看看大概的回答思路,其次就是一些類(lèi)的繼承關(guān)系的設(shè)計(jì)、設(shè)計(jì)模式等的應(yīng)用了。這方面的話,可以看看經(jīng)典的GOF的設(shè)計(jì)模式那本書(shū),還有包括設(shè)計(jì)模式沉思錄等,另外在平時(shí)使用一些現(xiàn)有的庫(kù)的時(shí)候,多想想別人為什么這樣設(shè)計(jì),應(yīng)用了哪些設(shè)計(jì)模式。在平時(shí)做項(xiàng)目的過(guò)程中應(yīng)當(dāng)有意識(shí)的去使用一些設(shè)計(jì)模式,這樣可以加深對(duì)設(shè)計(jì)模式的理解,而且在面試聊項(xiàng)目經(jīng)驗(yàn)的時(shí)候也可以和面試官扯扯這些東西(因?yàn)轫?xiàng)目的東西,很多時(shí)候面試官不懂你做的東西的具體實(shí)現(xiàn)細(xì)節(jié),但設(shè)計(jì)模式大多數(shù)面試官都知道,然后可以和你探討一下,本身用設(shè)計(jì)模式也能說(shuō)明你寫(xiě)代碼比較有經(jīng)驗(yàn),給面試加分)。
最后是一些計(jì)算機(jī)中比較雜的知識(shí),這些可以通過(guò)看看往年的筆試/面試的題目,基本考察的點(diǎn)都差不多,臨時(shí)溫習(xí)下也比較快。
除了以上4點(diǎn),在面試前,包括紙上寫(xiě)代碼、白板寫(xiě)代碼等都可以花點(diǎn)時(shí)間訓(xùn)練下,這個(gè)感覺(jué)和平時(shí)在電腦上寫(xiě)還是很不一樣的。另外針對(duì)外企面試中可能出現(xiàn)的英文面試(我谷歌有2輪是英文面),可以在平時(shí)多看一些英文的書(shū),包括算法類(lèi)和編程語(yǔ)言類(lèi)(像上面提到的effective系列, 圖書(shū)館都有英文版的書(shū)),至少一些關(guān)鍵的技術(shù)詞匯對(duì)應(yīng)的英文都要知道, 因?yàn)楹芏鄷r(shí)候需要用英文解釋下你的代碼,平時(shí)在寫(xiě)代碼的時(shí)候也可以嘗試用英文表述下你的解題思路和代碼流程,否則面試時(shí)候很可能無(wú)法和面試官溝通。
