畢業面試心程


畢業面試心程

 

20139月,伴隨着秋季招聘號角的吹響,作為准應屆畢業生的我踏上了從青島到西安的校園招聘的征程。雖然心中躊躇滿志,但是對於未來的結果卻充滿着不確定和未知。到我寫下這篇文字,在西安這個城市已經駐留了近20天。期間參加過大型公司的宣講,進行過數次筆試,嘗試過霸筆,經歷過數次面試,其中有困難和挫折,有驚喜和喜悅,有失望與落寞,有淡定與坦然,個中滋味,或許只有親身經歷過這些方能體會得到。

之所以寫下這些文字,除了分享自己的心路歷程,也希望借助於此在這個繁忙的工作季給大家分享一下自己的面試經驗。我深知自己的文采登不上大雅之堂,那么我就結合着自己的面試過程和大家簡單地聊一聊這段時間面過的幾家公司(為了避免不必要的麻煩,公司全部采用化名)。無論是從專業知識的准備方面,還是心態的調整定位方面,希望這些內容對大家現在或者接下來的面試有所助益。

一、關於筆試

今年校招面試的第一家公司是國內著名的A公司,該公司這兩年發展的很好,出手也很闊綽,待遇在國內當屬一指,很自然的也引起大家的激烈競爭。不過該公司的招聘的門檻確實不低,據說在西安今年只招了幾十人左右。面對這樣出眾的公司,人人都有躍躍欲試的想法,但是大浪淘沙。先說這家公司的筆試,由於短信系統的故障,導致很多人沒有收到筆試通知,從而不可避免地產生了大量的“霸筆者”,我有幸也是其中之一。想想覺得十分有趣,第一次參加正規的校招筆試,沒想到竟然是霸筆!其實筆試之前很多沒收到短信通知的人都有一些焦慮,擔心不能參加筆試,然而事實證明是:這個世界上大型IT公司的招聘,基本沒有霸不了的筆!我也是從這次經驗中學習到,原來霸筆是一件很有意思,略帶娛樂性質的事情。

霸筆雖然簡單,但是想通過筆試卻並非人人都能做到。A公司的筆試題在目前國內大型IT公司里,題目質量屬於上乘,已經和國外的知名IT的筆試題水平接近了。好的筆試題基本上能很客觀地考察應試者的基本素質,比如邏輯思維能力、分析判斷能力、數學功底、數據結構和算法、計算機基礎知識、創新思維等。如果想順利通過筆試,那么數據結構和算法的內容自然不能輕易放過,無論是本科時課堂上老師講過的還是沒講過的,自己接觸過的還是剛聽說的,都盡力去弄清楚,盡量做到不要有疏漏。甚至有些關鍵的算法和數據結構要能把源碼在腦海里背過最好,比如快速排序、歸並排序、KMP算法、最短路徑算法等,當然更多的是需要我們能熟練理解,並能靈活運用它的思想,比如堆排序、快慢指針、重要數據結構的增刪查操作的實現等。數據結構和算法的題目在一般筆試題里占了將近一半以上的內容,因此是重中之重!

除了數據結構和算法,筆試題其他所涉及的內容基本上要看公司性質了,不過一般局限於操作系統、編譯原理、網絡原理和數據庫,有時會穿插一點軟件工程和設計模式的內容。其中操作系統是這里邊考察最多,一般局限於進程同步、進程通信、頁面置換算法這幾個點,有時會涉及體系結構的內容,比如分布式體系結構等。由於我本身就是編譯方向的,因此編譯原理的內容基本不需要復習。非該方向的主要關注於正則表達式和基本的文法規則即可,文法分析算法一般不會涉及。網絡原理和數據庫的內容我沒有系統復習,所幸的是筆試也很少遇到這類的問題,這會隨着公司的不同也業務性質會有差異,如果時間充裕還是簡單復習一下最好(一次筆試時讓選擇IP是哪類地址都選不好了,實在悲催!)。軟件工程考察點基本上在設計模式上,只要把三類設計模式大致意思弄明白,不要忘了就可以了,有時程序設計題可能用得着。

對於筆試,如果復習的足夠充分,相信通過筆試並非難事。如果場場筆試都能順利通過的話,相信這是對面試者自信心的很大的鼓勵(我一共參加了6場筆試,全部順利通過,此處勿拍~)。但是即使沒有通過也不要灰心,弄清筆試考察中自己虛弱的方面,回去好好復習,絕不要在下次筆試時犯同樣的錯誤了,讓自己在每次筆試之后變得更強才是參加筆試根本目的!當然我們也要考慮運氣的成分,如果自己非常想去的一家公司沒給自己面試通知,而自我感覺能力還可以的話,那么我強烈推薦你“霸面”,筆試本質上是海選,好的公司是會不拘一格降人才的!

二、處女面

不管是霸筆獲得了面試資格,還是正常筆試進入了面試,亦或是霸筆參加面試,絕大多數人都會面臨處女面的問題。提前聲明下,我的處女面是典型的失敗案例,想看處女面成功案例的,請繞行~不過正是因為處女面的失敗,才讓我認識到,怎么樣面試才是真正的面試,才是正確的面試。A公司是我第一家面試的公司,前邊說過A公司的情況,我個人對A公司的期望值是很高的。但是世事總是無常,很多情況下過高的期望只會帶來更多的失望!一般情況,當一個人特別想去一個公司的時候,很容易進入焦慮的狀態,擔心出這樣那樣的問題,擔心不可能出現的問題,從而導致自己的精力全部消耗在空想上,而非關注於具體事物的准備上。看看博主在處女面犯了什么樣的錯誤吧!

由於我是做操作系統和編譯器方向的,而A公司對該方面人才的要求也很高,因此第一個問題就是要我描述Linux內核的進程調度算法。事實上,我只是讀過內核關於功耗相關的代碼,對內核本身的代碼沒有過多涉及,這個問題嚴格意義上講是超出我的源碼閱讀范圍的。但是我當時犯得最大的錯誤是向面試官解釋這些問題,但是客觀上解釋對回答這個問題有害無益!面試官需要你給他一個答案,答案的好壞會根據你敘述的程度進行評價,而多余的解釋只會讓面試官覺得你對這個問題完全不懂!——其實你是本可以說出不少有價值的內容的。面對這個問題,合適的反應是正面地回答這個問題,不要做額外的無意義的解釋,而是描述內核進程調度算法的基本思想和過程。雖然后來我要求面試官讓我重新回答了這個問題,但是我即使按照上邊講的給出了答案,面試官仍然不會覺得滿意,他會反而提出更高的要求,指出你的答案過於理論化,沒有給出具體內核代碼的細節——比如變量名和結構體名等,為什么?——因為前邊多余的解釋給他留下了不好的印象,他已經潛意識里認為你在這方面不行了!再加上A公司本身做了很多開源的工作,他們非常關心做OS的人是否給內核提交過patch,很可惜我沒有這方面的經歷。所有的這些讓面試官直接否定了我熟悉操作系統的特長!

既然操作系統被面試官認為不ok,那么編譯器總可以吧?我自己做過編譯器,應該算是很熟悉編譯器了。不幸的是,面試官並非問我項目里如何實現編譯器的內容,而是直接發問——你是否向gcc提交過patch?很抱歉,這點我也沒有,我只是自己獨立開發一套編譯系統,並未在開源上工作。好吧,結果是面試官拋下一句話:如果你把自己關在屋子里十年造出一架飛機,你讓我說你是牛還是不牛?!其實面到這里,我已經基本確定自己沒戲了。因為面試官和面試者的氣場完全不在一個維度上。雖然我一直申明自己只讀過部分內核代碼,但還是被要求用匯編實現spinlock,被問及非工業化編譯器開發很少涉及的CPU亂序執行的問題。而我由於前邊的追問和緊張情緒,再加上心里的巨大起伏,回答的效果都不太好,雖然事后想想其實可以回答得更好……面試A公司的結果可想而知——Failed

面試結束后我一直反思尋求失敗的原因,等我想明白后才發現這次失敗其實並非偶然!首先,是自我期望值過高。正所謂井底之蛙,不知天高地厚。如果不是過於把希望寄托於A公司,那么就不會太過於注重面試的結果,也就不會擔心問題回答不夠完美,這樣想反而能讓自己正常的發揮,有多少儲備就有多少散發,面對問題積極回應,不做多余的解釋,也就不會帶給面試官負面的印象。其次,是虛榮心作祟。虛榮心是一個害人害己的東西,當一個人活在他人的眼光里的時候,就已經失敗了。太在意自己失敗了,太不願意失敗,太擔心自己失敗時別人異樣的眼光。直接導致的是在被問到自己不熟悉的問題時頓覺壓歷山大,擔心回答不好不能讓面試官滿意,丟掉難得的面試機會,嗯對,還有失敗后別人的異樣眼光!呵呵,其實整個過程都是自己在欺騙自己,因為自己都不知道在干什么——我是為自己找工作,而不是幫別人找工作!最后,是缺乏誠意。什么是誠意——別人提出的建議虛心接受,而不是佯裝附和。話說人心隔肚皮,誰能知道我嘴上說的和心里想的一不一致呢?可是作為青澀的學生,在那些在公司歷練多年的面試官面前,我們任何偽裝的努力其實都是徒勞的!即使你表現的彬彬有禮,禮貌有加,而內心在暗罵面試官為何這么折磨我的時候,你要清楚,面試官對你的想法一清二楚!

想清楚這些后,讓我知道在面試時不該做什么,相反也讓我知道該怎么做更好。不管在你面前的面試官是來自牛企還是小型企業,他們都是我們潛在的雇主。在沒拿到offer之前,誰也無法確定自己會一定到哪一家公司。把姿態放低,尊重對方但不崇拜對方,正面回答每一個問題,不刻意回避,不作無聊的解釋,正常地發揮自我,面試就成功了一半!不要太在意面試的結果,因為招聘季機會太多了,多得允許你可以一直失敗,但是總有一家會成功!耐得住寂寞,沉得住氣,不問結果才會有更好的結果,不報任何期望才會更有希望!最后,記得微笑。有人說過,微笑是人家交往的潤滑劑,面試時多微笑只有好處沒有壞處,緊綳着臉只會讓雙方都覺得緊張不舒服,潛意識里留下不好的印象。虛心誠意地接受對方的意見,讓面試官覺得你是個有胸懷有氣量的人。

三、一波三折

話說好事多磨,古人實不吾欺也!經歷了人生第一面的失敗,讓我認真地反省了自我。當我扭轉了心態,擺正了態度,后邊的面試大都異常的順利。緊跟A公司面試之后的C公司在國內也是不錯的公司,規模雖然排不到國內前列,但是待遇還算不錯(雖然有潛在的大的工作壓力),也是我第一次拿到offer的公司。這家公司的筆試題我不敢苟同,幾道編程題,難度和C++期末考試相當。面試這家公司時,和一個年級大我不多的面試官聊了下自己的項目經歷和專長。最后問了一個算術表達式求值的題目,讓我描述了一下算法思想,很輕松的進了二面。二面HR是筆試時我那個考場(當時是霸筆)的監考,聊了聊最近的找工作的情況,還聊了之前的A公司。由於自我心態調整地很安然和淡定,所以就表現的非常隨和容易接受。也就是昨天參加了C公司的offer答疑會,算是人生第一個offer

C公司二面結束后收到B公司的面試通知。B公司是國內大型IT公司之一,該公司對招聘者算法的要求比較高,從其筆試題內容可以略見一二。不過令人疑惑的是,該公司的研發的筆試題在難度上遠低於系統崗位的題目。但是更令人無法接受的是B公司的筆試卷子太坑了,一道道題目都是挨着,根本沒有答題的空隙,這種省錢法真心傷不起!B公司一面是技術面,問了一堆算法問題。由於我做過編譯器,於是就讓我寫C++ class的文法(簡化的)。要是擱在A公司的情況,我心里肯定會一哆嗦,因為我做的編譯器沒有支持面向對象。但是這又能怎樣,我們需要正面地回答這個問題,因為問題已經出來了,你無法修改,況且還是自己擅長的呢!於是自己思考了幾秒鍾就順利地寫了下來。然后又被考察最短路徑算法,要求寫出偽代碼。幸好前段時間用過這個算法,印象還可以,但是我明確告訴面試官沒有背過代碼,需要一點時間回憶,面試官說給半小時時間,我說足夠了!然后順利的是我只用了十分鍾作用就把代碼回憶並寫了下來。后邊面試官看我簡歷里寫了對shell比較熟悉,就考察我用shell統計文件內每行第一個字母出現的頻率。說實話,對shell還沒達到很熟悉的地步,但是既然問了就回答吧。我的思路是使用grep循環查找abc……開頭的文件行,然后分別統計行數,但是悲劇的是我把shellfor循環結構忘了,於是就半shell半偽代碼的把結果給出來了。面試官對這個回答貌似不太滿意,他給了一個命令組合就完成了該功能!最后被問到一個堆排序的問題,我很快給出了答案,並描述了算法的思想。面試結尾時,問我有什么問題沒有,我請求面試官提出一些建議。結果被定位為知識面不夠廣——原因是對shell不夠熟悉!這里的邏輯說實話到現在我也沒搞清楚。雖然整體上感覺面試的過程還可以,但是面試官是個不苟言笑的人,很難猜測他的態度。最后就讓回去等通知,然后,就沒有然后了……

B公司面試結束后,緊接着是國內另一家大型IT公司T公司的面試。T公司的面試是我覺得最輕松的面試經歷,比前邊C公司的面試還要輕松那種!相比於B公司,T公司考察的內容更偏向於操作系統的內容。問了進程間通信有哪些形式,如何共享內存,磁盤為何有IO瓶頸,gdb的工作原理,操作系統的啟動流程等問題。由於有前邊多次的面試經驗,回答這些問題時就不再那么緊張了,而是按照自己的知識結構和儲備分別給出了自己的理解和正確的解釋!T公司的一面的面試官是第一個問我個人博客的人,我當然不能放過這個展示自己的機會,對自己曾經寫過的博客內容海侃了一番,還特別說明了我寫過關於五線譜的博客,惹來了面試官的好奇心。很自然地一面非常順利,從面試官的表情可以看出他比較滿意。最后令我驚異的是他直接推薦我參加二面,實在是令我想象不到,我只能衷心地向他說句“謝謝你!”了。

T公司的二面時,面試官基本上就不問太多技術類的內容了,而是重點考察面試者的性格。他也是讓我做了自我介紹和項目介紹,然后就開始問關於性格方面的問題,比如你最喜歡什么樣的工作,最不喜歡什么樣的工作,如果公司安排的工作你不太喜歡最久可以堅持多長時間,如果工作一直是自己不喜歡的你會怎么打算。這些問題沒有標准答案,結果因人而異,不過我個人的性格屬於外向不藏着掖着類型的,所以我回答的很干凈利落,也很直接,從沒拐彎抹角。最后二面面試官給我一個結論,說如果讓我做發散性的工作,我的性格是加分的,反之則是減分的。不過公司接受有個性的人,但是有個性的前提是這個人技術能力必須達到一定程度。對於這個結論我深深贊同,他說會和一面面試官交流,看我的技術能力如何再做評價,然后我就可以回去等HR面通知了。不過依照前邊的表現來看,結果應該不會太差,因為一面時要是技術被認為不好也不會被推薦直接二面的。

果然,第二天下午就收到了HR面的通知,當時還在C公司的offer答疑會上,我擔心時間來不及,就回短信問是否可以將面試推遲2個小時,對方回答可以,這讓我對T公司的感覺變得很好!還沒等參加完C公司的答疑會,我就趕緊打車去參加T公司的HR面,匆忙趕到后就和HR開始了。不過HR上來就直接告知我說來到HR面的話基本上offer90%定下來了,他的意思是讓我不要有壓力。后邊就問了一下家庭成員的情況,工作地點,薪資的要求。當然中間要我介紹自己最滿意的項目,要求從動機、風險、困難、結果的順序描述,我就把自己做的編譯器的過程和他狂侃了一通,最后就順利完成了HR面,等候offer通知就行了。說實話,得到T公司offer結果的時候,其實我自己也不清楚為何這么順利,確實有點喜出望外!不過細想下來,和自己狀態的及時調整有很大的關系。如果自己不是從第一次面試的慘痛教訓中總結經驗,吸收教訓,可能后邊會接二連三的碰壁,在這里,我真心感謝所有直接和間接幫助過我的人!

回顧這么多天的經歷,可謂是一波三折。雖然一直告誡自己為了一個目標努力了6年,雖然知道應該會有好的結果,但是很多時候看似必然的事情都充滿着不確定和隨機性,因為找工作本身除了個人能力之外,還有很多運氣成分,心態因素。雖然剛開始經歷了失敗,但是卻是意義重大,能從失敗中總結問題,發現原因,重新站起來面對新的挑戰才是找工作過程中最重要的心態。無論何時,做到自信但不自負,不過分追求結果也不輕易放棄機會,注意每一個細節,放低姿態,保持自尊,這樣才更有可能得到一個滿意的結果,才是真正的給6年努力的自己一個合理的交代!

四、題目分享

最后呢,我就把這段時間來自己被問到的,以及別人在同個公司被問到的面試題目整理出來,和大家一起分享。部分題目給出了我個人的理解,有的是當時回答的情況,有的是自己回來查閱資料給出的,大家可以作為參考,畢竟每個人知識背景不同,被問到的問題絕非千篇一律。這些題目類型都是軟件開發、算法、系統崗位的面試問題,希望對有意向申請這類崗位的人有所幫助。

一、A公司

1、描述Linux內核進程調度算法。(從內核源碼角度)

2、使用匯編語言寫一個spinlock

spin_lock()

{

1:

       lock dec [flag]

       je 3

2:

       rep;nop

       cmp [flag],0

       jle 2

       jmp 1

3:

}

spin_unlock()

{

       mov [flag],1

}

3、描述一下CPU的指令的亂序執行。

CPU允許將多條指令不按程序規定的順序分開發送給各相應電路單元處理。

4、用C++描述二叉搜索樹的構造,並按照遞增順序輸出所有節點。

5、求兩個字符串的公共子串。

復雜度O(m+n),借助KMP思想。

6、常用的排序算法有哪些。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  

二、C公司

1、求解算術表達式的運算結果。

先轉為后綴表達式,然后使用棧計算表達式。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  

三、B公司

1、寫出C++/Javaclass的文法。

只需要考慮成員變量和成員函數的聲明。

2、常用的排序算法有哪些。

3、寫出Dijkstra算法的偽代碼。

4、使用shell腳本求文件內每行第一個字母(a-zA-Z)出現的頻率。

awk ‘{print substr($0,1,1)}’ a.txt | sort | uniq -c

5、文件內每行存儲記錄(名字,身高),求身高Top10的人的名字。

使用最大堆,然后刪除堆頂元素10次,即Top10。描述堆構造/刪除算法。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  

1、描述一下SIMD的概念及SIMD X86上的指令集。

SIMD:單指令多數據流,指令譯碼后多個執行部件同時訪問內存,獲得所有操作數進行計算。

x86AMD3DNow!IntelSSE

2、什么是netfilter,描述netfiler框架。

網絡層hook,包過濾、NAT等。

3int*p[10](int ) int *p[10]int(*p)[10]int(*p) (int )int *p (int)int *pint**p 中的p各指什么?

4、操作系統中的同步機制有哪些,適用於什么場合。

5、自旋鎖的特點,自旋鎖中可以用於中斷上下文嗎?

6、中斷處理過程。

中斷服務程序、上半段、下半段、tasklet等概念。

7、寫個程序實現字符串逆序。

8、線程、進程區別。

9TCP三次握手。

10、程序改錯。

#define ABS(a) ( (a) > 0 ? ( a ) : ( -a ) )

int sum_array(int *x,int n)

{

       int sum=0;

       for(int i=0;i<n;)

       {

              sum+=ABS(x[i++])

       }

       return sum;

}

宏參數中不能使用++操作,ABS(x[i++])展開為( ( x[i++]) > 0 ? ( x[i++] ) : ( -x[i++] ) )

11、描述一下操作系統中的文件系統。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  

四、T公司

1100個台階,從第一個台階向上走,每次可以走一個或者兩個台階,問走完100個台階有多少種走法。

遞歸問題,斐波那契數列,f(n)=f(n-1)+f(n-2)。將遞歸算法修改為循環形式。

2、進程間通信有哪些?

信號量、自旋瑣、互斥量、消息、消息隊列、共享內存、socket

3、兩個進程怎么共享內存。

頁表映射,虛擬地址與物理地址映射。

4socket通信中,send后返回狀態ok,是否可以確定數據包已經送達?

5、連續兩次寫入相同數據到磁盤,第二次的操作為何更快?

6、磁盤訪問的延遲主要是因為什么?

磁頭的尋道、旋轉、定位。

7、你的博客都涉及哪些內容,為什么寫這些內容。

8gdb的工作原理是什么?

TF陷入、單步執行指令。

9、系統啟動的流程是怎樣的?

10、你期待什么樣的工作,最不喜歡什么樣的工作,經歷最大的挫折是什么,如果工作不如自己的期望作何打算等。

12、了解大數據嗎?說說你的理解。

13、談談你做的最有拿得出手的項目,從項目的出發動機、風險評估、遇到的困難和解決方式以及最后的結果這幾個方面說。

14、說一下家庭情況和個人情況,工作地點要求和薪資要求。

15、你認為對於申請的崗位,你所擁有的優勢和劣勢。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



畢業面試心程 攜程面試經歷 攜程面試體驗 攜程內推面試 攜程面試總結 同程面試經歷 大學畢業面試 畢業面試筆記1 我畢業那時候怎么面試的 PA銀行面試之炮灰之程
 
粤ICP备14056181号  © 2014-2021 ITdaan.com