換工作的事兒終于搞定了,斷斷續續找了半年時間,曾經有段時間感到特別低迷,連續被各種各樣的理由拒掉,最變態的就是說智力測驗沒過,讓我好郁悶了一陣。那種被打擊到開始懷疑自己的感覺實在是不好。 待到11月底12月初的時候,好像一下子峰回路轉了。好消息
換工作的事兒終于搞定了,斷斷續續找了半年時間,曾經有段時間感到特別低迷,連續被各種各樣的理由拒掉,最變態的就是說智力測驗沒過,讓我好郁悶了一陣。那種被打擊到開始懷疑自己的感覺實在是不好。
待到11月底12月初的時候,好像一下子峰回路轉了。好消息接踵而至,一口氣拿了4個offer,包括一家國企,一家美資企業,兩家納斯達克上市的國內企業的offer,頓時有山高月小水落石出的感覺。接著就是發愁怎么拒offer了,最先pass了國企和美資企業,感覺這兩家太安逸,沒有什么挑戰,而且名氣不大。已經受夠了被問到:“在哪里工作”時解釋半天的尷尬,發誓一定要找個響當當的東家。最終選擇了一家和自己背景相關、但薪資稍低一些的工資,還是更看重發展吧。
順便說一句,算了一下這兩個月總共面試了17個單位,最終確認給發offer的是4個,成功比例1:4,供大家做個參考吧。
啰嗦了這么多,下面開始總結在這些公司面試遇到的題目,供明年初想換工作的兄弟們做個參考,這些題目說白了都不是很難,但是想做到讓面試官滿意還是有點難度的?;A知識的部分仔細看看書可以應對,在白板上或者紙上回答面試官現場考察的題目就很考驗心理素質和編程功力了。
當然,如果細心準備一下,還是非常有幫助的。
1,C++基礎知識的面試題:
1、static, const 的用法:在類中使用static成員函數,為什么static函數不可調用non-static成員變量和成員函數?(沒有this 指針),const成員函數如何使用?為什么const成員函數不可修改成員變量?(const this指針)
2、虛函數:純虛函數的用法,多態如何實現,虛函數表如何實現?虛析構函數的作用
3、auto_ptr,shared_ptr的用法? (一家很牛的互聯網公司電話面試的時候問的,僅此一次)
4、類型轉換,static_cast, dynamic_cast, reinterpreter_cast, const_cast的用法
5、overide, overload,為什么構造函數不能為虛函數?
6、stdcall, cdecl的區別?
還有那家純美資企業的C++面試題,問題比較偏門,包括類成員指針、參數為對象時臨時對象,模板偏特化等,建議看看《effective c++》,另外還有本英文的《C++ common knowledge》,也是本很有用的書。牛逼點的還可以看看《深入探索C++對象模型》這本書,不過本人感覺這書里討論的情形太過奇葩,又是多態又是多重繼承又是模板的堆在一起,基本上在工程實踐上用到的情況很少。除非你想發明一種新語言。
2,數據結構與算法
這部分是整個面試過程中最有難度的部分,往往也是決定能否給offer的決定環節。準備數據結構與算法的最佳參考書當然是《算法導論》這本公認的經典,這本書的特點是非常非常的系統,但是有些數學證明,對于面試而言是無幫助的。面試中最多問一句:空間復雜度是多少?時間復雜度是多少?
另外有一本很有用的書《算法技術手冊》,里面有很多經典算法的原理圖和偽代碼,比起《算法導論》,這本書要實用和高效很多。
面試中經??疾斓臄祿Y構包括鏈表、數組(字符串)、二叉樹,太復雜的數據結構一般較少問到,唯一例外的是被問到了最大堆和最小堆。
具體的,
鏈表:翻轉一個單向鏈表(遞歸與非遞歸),合并兩個排序的單向鏈表為一個排序鏈表(merge sort),找出兩個鏈表相交的第一個節點
字符串:1,在A串中找到B串,并返回位置。 2,找出字符串數組中出現一次的一個單詞,出現一次的兩個單詞?3,寫一個atoi程序(見本人博文)4,寫一個strcpy,注意內存申請失敗的時候異常處理。
二叉樹:找出二叉樹的第二大(?。┕濣c
其他:用兩個stack實現一個queue
算法中比較重要的是幾個常用的排序算法,及其變形應用,包括insert sort, merge sort, quick sort(變形包括求最大的N個數), count sort。寫一個沒有錯誤的二分搜索(遞歸非遞歸)
白板或者紙上現場作答的題目主要是為了考察你的編程基本功,一般不會有太復雜的算法,但是并不表示你能很容易的通過,越是簡單問題,面試官對程序的書寫風格、邊界檢查都會考察的非常仔細(如aoti程序)。當然也有例外,有一次讓我在白板上寫優先隊列的pop操作,由于涉及到優先隊列的堆重建,和優先隊列用數組的表示方法,一下子就蒙了,面試官又一副冷漠的神情,讓我有些憤怒,很想跟他說我真的記不得了要不你來寫一下看看?那是我最不愉快的一次面試。
3,操作系統
Windows操作系統通常會問
1,線程和進程的區別,線程的同步方式?進程間的通信方式。 2,Windows消息傳遞機制? 3,異步socket,連接池
Linux
1,常用命令,top,ps
2, \proc\*目錄
3,壓縮打包命令
4,C語言調試方式,內存泄露檢查工作
5,httpd里的mod的編寫?如何優化http消息?
4,雜項
1,性能優化問題,C10K
另外面試官一般會根據你的項目經歷,問一些項目相關的問題,比如會問你:你做過的項目里你最得意的作品是什么?最不滿意的地方又是什么?又比如我簡歷里談到比較熟悉設計模式,面試官會問你用過哪些設計模式?列出常見的設計模式?所以其實精心準備一份讓你有話可說的簡歷,其實也是非常重要的。
基本上能回憶起來的就是這些。
最后想吐槽一下面試官。其實筆者在決定換工作前也做過面試官的工作,所以對面試官的心態還是比較了解的。大公司的面試官,一方面應聘者如云,另一方面手頭的工作繁多,還被HR拉過來,打斷手頭工作面人,有時候難免有些情緒。這時就可能出現上文我提到的那種情況,弄一個比較偏門的算法題(比如讓你寫紅黑樹的增刪查如何實現),不給任何提示,然后埋頭敲鍵盤或者看簡歷,留下應聘者在那里絞盡腦汁。老實說我很鄙視,很簡單的道理,對于一個工作幾年的程序員,我根本沒有時間去把這么復雜的程序每一行準確無誤的記在心里,而且我清楚的明白其實你也不能,調換一下角色,我一樣可以這樣為難你,如果我進來了以后我們就是co-worker,你覺得這樣真的有必要嗎?而且你還代表著所在公司的形象。我想誰也不想在一個如此教條式的公司工作吧。
所以下次我決定之間給這樣的面試官三個字:不記得!當然我可以跟你探討一下紅黑樹的原理,為什么要采用這樣的平衡結構?不然會有什么極端情況?這種情況下的時間復雜度是多少?
說到這里想贊一下MS的面試官,很多人說MS現在在走下坡路,說有能力的人都愿意從MS出來去做互聯網,但是從我面試的經歷來看,MS的工程師團隊還是非常nice而且高素質。比如有些技巧性很強的問題,你一時沒有思路,他會給你提示,然后不斷的探討,啟發你的思路,讓你得到N個方法,比較時間和空間復雜度,最終得到一個最優答案。我認為這才是比較負責任的面試官應該有的素質。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com