今天面完了最後一家公司,兩個多月的找工作生涯也算畫上了句號,因為之前答應張坤說等我確定offer了一定給你弄一個求職攻略(其實上一屆的某師兄貌似也說過這樣的話,只是之後沒有兌現),所以今天決定小小的總結一下這兩個月走過的路。

         因為面過的公司也有限,所以單就我面過的公司大概模式做一個小結。

1.       愛立信(拿到Offer):悲劇的一次筆試和麵試,在邏輯和英語的筆試中放棄了微軟的筆試,面試又不得不放棄了google的筆試,然後拿到offer了也沒去,不過當時普遍覺得今年形勢不好,先拿一個offer再說,也沒辦法。面試大概是3個小時。兩個小時的技術面,一個小時的Manager面。技術面就是聊聊TCP/IPLinux Kernel,資料結構和演算法。好像Kernel聊了蠻多的,因為面試官也是今年剛畢業的,也正在看深入理解Linux Kernel。寫了兩個程式,第一個是atoi,第二個是在一個無序的陣列中是否能找出兩個數的和等於一個數N。難度不算大。

2.       大眾點評(拿到Offer):大眾點評的筆試是40分的,邏輯題20分,演算法20分。演算法感覺不是很難,第一道是求出一個數的所有素數子因子;第二道題是求樹的高度;第三道題是求一個字串的最長不重複子串面試的時候寫的是單詞倒序(I am a boy變成boy a am i),第二輪的時候是讓我寫出筆試題第三題的優化演算法,剛開始想半天沒想出來,幸好最後想到了可以用雜湊(雜湊是真正的面試和筆試中的大殺器)。在大眾點評時最尷尬的是每一輪都說你之前做的偏硬體的,然後我們是網際網路公司,那什麼職位比較合適你呢?汗。

3.       騰訊(第二輪):悲劇的一次面試,其實筆試覺得做的挺好的,附加題兩道也做出來了,但是好像騰訊今年就沒打算招人,第一輪讓我寫了一個彩票的程式,還有求64位的整數中有幾個2進位制1;第二輪的時候就一直在戲弄我,問了一些非常tough的問題。好像最後也沒有太多人拿到它的offer,反正面試是怪怪的公司

4.       百度(第三輪):百度的面試是典型的網際網路公司的面試風格,節奏很快,第一天第一輪和第二輪,第三天第三輪,第四天發offer。可惜沒有熬到最後。第一輪主要是寫了兩個程式,第一個是一個陣列的最大連續子數和,第二個是單連結串列反轉;還問了一個shell指令碼將文字中矩陣倒置,因為不大會shell就直接和他說了可以用sed做;第二輪寫了比較兩個樹是否相等,堆排序,那個面試官好像一直在寫什麼,所以第二輪很快,寫完兩個程式,問了兩個問題就結束了。悲劇的最後一輪,因為我投的是運維,最後一輪是運維的director直接問的,問題的焦點一定在為什麼選擇做運維?為什麼選擇百度?因為之前一直是裝置商和晶片公司的經歷,所以一直認為我不合適去百度做運維。這兩個問題是面試的時候一定要想好怎麼回答的。

5.       英偉達(拿到offer):好像筆試也不是很難,一個寫程式的單詞倒序,semaphoremutex的區別,還有兩個智力題(cracking the code interview裡面都有),還有一些是嵌入式需要了解的0X10道面試題。面試的時候大部分時候也是寫程式,直接在電腦上寫,然後面試官檢測,還好題目不難,itoa,求整數的二進位制1個數,然後問了一些linux kernel的問題(IPC,同步原語,cache),然後深圳那邊面的時候也是寫了兩個程式,一個是求出3*3的方格,將1-9的數放進去,使得每行,每列,每對角線值都相等,這個題真心寫到爆然後一個是求出兩個字串都含有的字元。反正主要也是寫程式為主。

6.       思科(通過筆試):思科的筆試是比較難的,又全又細(五門:C/C++, JAVA, LINUX, Data Structure, Network)。難得有面試機會,但是卻是被掛了思科的節奏是一天面完,一共四個人(好像有些team是兩個),每個人半小時:分別是嵌入式知識、問簡歷(問的極深,簡直問道死)、C語言知識、經理面。嵌入式的全是硬體、驅動的知識,DMA的原理,什麼是嵌入式系統,RISCCISC的區別,cacheDMA的一致性直接悲劇;第二個人則問的非常tough,你做的每一個專案都給你提出了一大堆的問題問怎麼解決的;第三個人問的是C語言的基本問題,關聯到資料分別存在什麼地方,堆疊溢位問題,最後限時十分鐘寫一個位運算陣列的置位和清除;最後是經理面,先出了一個網路問題,在一臺路由器中有兩臺PC主機(下方有兩個小小的IP地址,第一個10.0.0.X,第二個是192.168.0.x),問兩臺主機Ping不通,沒回答出來,後來一想不就是兩個內網地址麼。總的來說思科是面的最差的一次,也因為之前已經拿到了英偉達的offer,心態瞬間變了,真心可惜了。

7.       IBM(兩輪):IBM是沒有筆試的,直接通知面試,面試也比較簡單,第一輪是也是問一些IPC,同步原語,程式和執行緒的問題,然後還是寫了一個找陣列中兩個數之和等於一個特定數的程式;第二輪的時候是經理面,純英文,悲劇,因為他之前是在ciscosip協議的,所以把這問的夠慘,接著便直接懷疑我一直都是醬油的。

8.       EMC(拿到Offer):EMC的筆試是我做過的最難的(包括C++,JAVA,LINUX,NetworkDatabase簡直包括所有的知識),然後有一道程式題是寫掃雷程式。面試的時候是三人三面,每個半小時,第一個人主要聊的軟體工程,SCRUM等;第二個人是經理面,純英文,考察的應該是交流能力和英文吧(因為沒有問啥技術問題);第三個是技術面(非典型技術面),隨機問問題的,講講newmalloc的區別;tcp的主動關閉,被動關閉,timeawait;怎麼申請大記憶體,,,反正就是想到什麼就問什麼。

9.       大摩(電面):哎,純英文技術面,問的問題也都不難,但是英文太難了,主要問執行緒和程式的區別啊,棧和佇列的區別,排序的時間複雜度,OO的理解,知道的Linux命令等等,因為是電話,本來就聽不懂,聲音效果還不好,所以各種pardonsorry…技術真心不難,但是英文真心難。

10.   Vmware(未知):筆試也算較難的,包括C++database;然後有兩道程式設計題,一個是兩分查詢有重複陣列;第二個是malloc的對齊分配。面試和EMC大概相同,只是英文面的時間從半小時縮短到20分鐘。搞笑的是面試的時候居然又把二分查詢寫了一遍

上面就是所有我面試的公司。基本外企對英文有一定的要求,特別是大摩和EMC;網際網路公司一般都對資料結構和演算法要求較高。如果是裝置公司和晶片公司,一定要對Linux核心有一定的瞭解,最起碼知道IPC和同步原語,程式和執行緒。網際網路公司最好能知道大資料的排序啊,查詢的處理。

推薦的書籍(由於我找的大部分是裝置公司和晶片公司,所以對網際網路公司不一定有相同的作用),按重要性排序:

1.       Cracking the coding interview

所有的題都要弄清楚,所有的題都起碼要寫一遍程式;我基本每次面試前一天都會看一下這本書,最神奇的是——好多原題。

2.       演算法導論

最好能把前26章都看一遍,把所有偽碼寫成擅長的語言

3.       深入理解Linux核心

如果是面嵌入式的職位,那這邊書一定要看

4.       劍指Offer

有很多程式題

5.       C語言程式設計

因為我擅長的是C語言,所以一般就是看這本書了。

6.       程式設計師面試寶典

基本的面試題

 

考的比較多的程式題

1.       atoi

2.       itoa

3.       快排

4.       單詞倒序

5.       整數中二進位制1的個數(迴圈和查表都經常問)

6.       各種Hashbitmap的演算法

7.       在一個陣列中找兩個數的和是否等於數N

8.       String copymemory copy

9.       各種遞迴的演算法

演算法題如果是陣列的話,沒有排序的都先想想如果排序有沒有什麼規律;所有演算法都先想想能不能用hashbitmap解決,能不能遞迴來做,很大概率考這兩種型別。

 

問的比較多的問題

1.       你問什麼選擇我們公司,你的經歷更適合去裝置公司(這個問題和下一個問題可能直接決定你能不能拿到這個offer,很重要)

2.       為什麼選擇這個職位,你的經歷更適合測試

3.       技術上遇到過什麼困難,怎麼解決的

4.       英文自我介紹

5.       職業規劃

6.       程式間通訊

7.       同步原語

8.       程式和執行緒的區別

9.       C語言的不同變數分別存在什麼地方

10.   Kallocvalloc的區別

11.   Staticvolatile的作用

12.   輸入一個網站會發生什麼

13.   TCP的三次握手,四次斷開,擁塞避免

14.   Ping,traceroute,dhcp的原理