相關閱讀 |
>>> 技術話題—商業文明的嶄新時代 >>> | 簡體 傳統 |
不久前,byvoid面阿里星計劃的面試結果截圖泄漏,引起無數IT屌絲的羨慕敬仰。看看這些牛人,NOI金牌,開源社區名人,三年級開始寫Basic…在跪拜之余我們不禁要想,和這些牛人比,作為絕大部分技術屌絲的同學們,是否真的與國內IT巨頭遙不可及呢?
當你打開這個帖子的時候,我已經默認你是此文的目標讀者,也就是想進入國內一流互聯網企業的非牛人應屆生。
你不需要拿NOI的獎,無需是開源社區名人,也用不著發過牛逼的SCI論文。(沒錯,筆者就是這樣的技術屌絲)
請記住,校園招聘,應聘的絕大部分人都只是才出象牙塔的毛頭小子。企業需要的是你們的潛力與激情。牛人總是鳳毛麟角的。
程序員筆試面試的經驗貼、經驗書不計其數。本文不會教你如何具體的解題,但是會告訴你,你距離你的夢想究竟有多遠,以及如何去縮短這個距離。
筆者僅僅以自己的親身經驗為依據,將國內IT巨頭按Offer到手難度降序排列,大致分為如下3個梯隊:
T1:百度,阿里,騰訊,…
T2:網易,迅雷,完美時空,360,金山,…
T3:華為,中興,聯發科,…
Tx:壟斷類IT國企。如中國移動,…
T1主要是BAT三巨頭。他們對學生的技術能力與綜合素質都要求較高。他們尤其喜歡尋找牛人。因此你必須有扎實的基礎的同時還要有自己的技術個性和特點,讓他們欣賞你。這些公司無論是實力還是待遇都是一流的。但要注意這類公司太大,項目組太多,競爭也很激烈,因此要注意認真考慮你想去,而且對你而言有優勢的項目組。
T2都是其所在領域的領軍企業。待遇會比T1稍低。他們需要基礎扎實的學生,如果你的項目或者技術方向符合他們所在的領域會很有優勢。(如游戲領域偏愛圖形學,安全領域偏向安全方向)
T3對學生的出生、資質最為看重(雙211,四六級),甚至對性格有較為挑剔的考察(華為的性格測試反而刷掉很多技術較牛但是性格較怪癖的學生),專業考察的很基礎,但考察面較廣。
Tx之所以給了個x,是因為他們和其他的企業無法比較。因為這類企業筆試考行測+專業基礎。面試考察綜合素質、表達能力,尤其看重你的非技術方面的能力。因此不做本文的重點討論。
“當他說他是OpenCC的作者的那一刻,哪個面試官不被秒殺。”
當然你不需要NB到這個程度。如果你能對面試官說:“我讀書期間做的項目有x萬行代碼。Google關鍵字xxx可搜到該項目的演示視頻”,就足夠了。
程序員的所有技術能力都能在一個完整的項目中得到淋漓盡致的體現,因此勝過千言萬語的自我推銷。所謂的完整項目應該滿足以下條件:
1、完整性。具有一定的功能,或者解決了某個問題,具有一定意義。
2、難度。 使用或者研究了一些較新技術,或者有一定價值的技術含量或研究內容。
3、工作量。是一個需要澆筑一定心血的產出品。
因此,當你決心把一個項目寫入你的簡歷中,你就一定要能回答出面試官的如下問題:
1、你負責了哪一塊?
這個問題是想知道這個項目里究竟有哪些代碼是你寫的,尤其是多人合作的項目。你必須強調你所做的工作。
問題就出來了。很多時候我們參與的項目,他的架構、核心技術你并不熟悉,而僅僅是寫了部分邏輯代碼,那怎么辦呢?
解決辦法是,花時間去了解項目的核心,對項目的整體有清晰的認識,至少要達到能夠表述的很清楚的程度(簡單的說就是能吹的很有說服力。回想你答辯的情形)。
如果你做的那一塊確實微不足道,而且你也無法表述項目全局,那就放棄提及這個項目吧,否則只能讓面試官越看你越覺得銼。
2、你用到了哪些技術?
這是最好發揮的一個問題。你可以介紹項目用到的每個開源庫,也可以介紹你用到的源代碼管理工具(如SVN、GitHub),調試工具(如WinDbg)甚至項目管理工具(UML工具、VS Project等)。總之,這是一個很好表達你的項目綜合能力的機會。
如果上面的都不出彩,那嘗試從你的項目架構、設計模式、接口設計等方面入手。總之要站在一個較高的角度,空談項目的業務需求和邏輯意義不大(當然,充滿創意的項目除外)
3、你遇到的最大問題是什么?如何解決的?
這個問題是最重要的,也是最具有回答技巧的問題。你必須說出一個聽起來確實很難解決,但你確實又解決(或者避開)的問題。
如果你實在沒有頭緒,或者你覺得項目確實太簡單,沒發現困難問題,不妨從這些方面思考:
有網絡功能的項目,考慮網絡傳輸效率和網絡同步等問題;
有多線程、多進程的項目,考慮他們之間的同步/互斥、負載、調度問題;
需要處理大數據的項目,考慮數據預處理、數據調度等問題;
如果這個項目出了論文,那么嘗試描述論文解決的問題;
你解決問題的渠道,如MSDN、CSDN、開源社區的論壇、國外技術論壇、文檔手冊等。
面試官想要聽到的,是你發現問題、分析問題、尋找解決方案、最終解決問題的思路與方法。細節并不重要,因為他也未必能完全弄懂每個技術細節。
總之,一個完整的項目能讓你充分的表達你的技術能力。在項目這一塊上,你需要下足功夫。
如果很不幸你沒有,那么請往下看。
一般第一輪技術面都是來考察你最基本的技術功底。
招聘季節,隨處可見抱著厚厚的《程序員面試寶典》啃的學生。偶爾也能看見《編程之美》《劍指Offer》的神書。這些經驗書確實有用。但是要想全面的掌握筆試面試的基礎考點,還是需要完整的復習。
其實,筆試面試對計算機基礎的考察是萬變不離其宗的。其考點無非分為:
語言語法(以C/C++為例)
指針(數組),函數指針,操作符運算順序,const(常指針與指向常量指針),static四大用法,字符串(字符數組),字節對齊(sizeof),位運算。秒殺書籍:《C++ Primer》
面向對象
構造與析構順序、多態、重載、覆蓋、C++對象模型等。秒殺書籍:《深入理解C++對象模型》。
數據結構
棧,隊列,鏈表(雙向、循環),樹,堆,哈希表。
基本算法
排序(最重要的是快速排序)、查找、圖算法、貪心算法、動態規劃。秒殺書籍:《算法導論》。
設計模式
考察最多的就是單例模式。只因為他實在是太常見又太簡單了。秒殺書籍:《設計模式》,《重構》。
數據庫。
主要是SQL語句與存儲過程。
操作系統
進程與線程、互斥與同步、死鎖、進程間通信,頁表,虛存等。秒殺書籍:《Windows核心編程》,《Unix核心編程》。
計算機網絡
ISO七層架構,TCP,UDP,IP地址等。
英語。
有些公司喜歡出一些用英文描述的問題,或者英文翻譯題。看懂IT領域內的英文并不難,如果你平時使用MSDN、Google、StackOverFlow的話根本不是問題。
如果你還有充分的時間,建議認真看上面推薦的秒殺書籍。如果時間不夠,就有針對性的去掌握這些考點。
不得不吐槽的是,很多技術不錯的朋友,有著很好的項目,反而掛在了筆試的基礎知識考察上面。因此不要小看這些考點。該背的還是要死背的。
筆試或者面試如果讓你在紙上寫程序,會有2種情況:
1、寫一個函數或算法。
不要因為題目簡單就想在最短的時間寫出來。請一定要注意,對所有參數做邊界檢測和有效檢測。這才是考察的重點!
如果一個算法具體實現你記不清了,就寫偽代碼,在每行代碼后加上詳細注釋。如果是面試,寫完以后跟面試官解釋說具體的代碼你忘了,但是你記得算法思想,因此用了偽代碼。
如果具體思想也忘了,就嘗試用自己的思路解答問題。總之,盡量別交白卷。
2、設計一個軟件或系統。
這種情況不要求你寫詳細代碼。你需要在程序結構、框架、設計模式或者系統架構等方面進行設計。
這種框架性的東西最好先打草稿,想好了再重新畫一遍,把每個模塊的功能,模塊之間的關系、各個模塊的功能接口畫出來,如果是面試,寫完以后給面試官詳細解釋。
這里強調一點,是否懂得架構設計,是鑒別代碼菜鳥和熟手的重要指標。T級越高的公司,越偏向于考察架構層級的知識。比如百度筆試的最后一題經常是要求設計一個分布式服務器系統。
通常技術一面是面基礎,二面更多的是雙方的進一步了解。如技術方向,技術潛力等。
如果二面面試官不問你技術問題,那么你一定要積極主動的與他溝通,并表達你的意愿。嘗試以下幾個方向:
1、表達你的技術潛力與熱情。
面試官可能會問你一些和技術看上去沒有任何關系的問題,比如問你最近在看什么書,學習之余喜歡做什么,常去哪些網站之類的。
如果你說最近在看《誅仙》,平時喜歡玩LOL,你就是在把自己往懸崖上推。實際上面試官希望聽到的回答如下:
“我最近在看《C++ Primer第5版》,因為我在項目中用的C++11的特性越來越多了…”
“我業余時間喜歡看看TED,上面總有很多讓我激動的新技術出現…”
“前段時間比較閑的時候,和朋友參加了xxx組織的開發者大會…”
“虎嗅和獵云是我獲取IT信息的常去地方…”
回答如此平凡的問題卻能體現你的閃光點。你是技術人員,請記住,告訴面試官你時刻對技術保持著激情,時刻關心的IT動態,比你告訴他你是學生會某干部有用的多。(當然非技術人員,或者國企的面試除外!)
但是,一定要如實回答。面試官會針對你的回答進行緊逼追問。如果正好是他熟知的范疇,而你只是接觸過而沒有認真學習,就會陷入很尷尬的境地。
所以在回答這些問題的時候不用過于急著回答,不妨先想一想,要有能預測到面試官針對你的回答會問什么樣的問題的能力。
就像上面的例子,面試官問你最近看的書,你未必要選擇最近看的一本書,而是應該選擇一本你吃的比較透的,最好還是面試官也會感興趣的書,這樣接下來的交流就能得心應手。
總之,平時的積累才是王道。
2、表達你的技術愛好。
進入正確公司的錯誤崗位,相當于考上了正確學校的錯誤專業。
所以請一定要記住,你的最終目的不是要進入該公司,而是要進入該公司你最想去的部門乃至項目組。
所以,試探得知面試官來自哪個項目組也很關鍵,因為面試官可能跟你想去的項目組毫無關系。技術方向的不對口的面試官面試你,對你是不利的。
這個時候你要清楚的表達出你的技術方向,并注意考慮你想去的項目組收你的可能性。如果發現該組招的人少,或者加入難度大,你需要考慮是否表現出來你有同樣的熱情加入其他項目組。
不服從分配可能導致你一無所獲。你之前面試的表現越優秀,在這一步能夠選擇的余地就越大。
3、態度和情商。
如果你面試次數多了,拿的Offer多了,通常到了最后一面,有多大的希望能拿到Offer,你心里應該有所感覺。
如果感覺不好,最后一面你需要更努力表達你的優勢。最后一面打動面試官的可能往往是你的真誠和熱情。
當面試官問你有多少Offer,不要懼怕回答。Offer是企業對你能力的證明。有Offer的學生更容易被青睞。通常如果你有了該公司最大競爭對手的Offer,你可以嘗試追求更好的崗位和待遇。但切忌用這個來漫天要價,除非你牛到了他們非要你不可的程度。
T3,Tx類的企業可能會問你一些很奇葩的問題。比如A公司問你他的競爭對手B公司怎么樣。
很多計算機專業的學生思維過于死板,說了大實話,比如”B公司是最大的xxx企業“,于是死的很徹底。
你可以說”A公司的優勢在與xxx,而B公司的優勢在于xxx。不過在我看來,我更欣賞A公司的xxx,因為xxx“
這類企業就是這樣。他們的面試和T1,T2企業的面試差別很大,你要學會避重就輕,這不是謊言,而是策略。
只要你資質不差,有針對性的進行努力,拿下國內IT巨頭的Offer并不難。
最后,請記住,拿下Offer,你的技術生涯僅僅是進入了下一輪新的迭代。
技術之路最公平也最殘酷的原因是:沒有捷徑,需要日積月累的積累,以及對技術持久的熱情。
chenssy 2014-07-10 16:40:13
稱謂:
内容: