坐一號線地鐵到國貿(mào)轉(zhuǎn)十號線到太陽宮出B口轉(zhuǎn)467/132公交到望京橋北下車直達卷石天地大廈A座9-13層為小米研發(fā)中心,由于我中午一點就到,我面試的時間是14:30,HR把我安排到貴賓接待室,簡約的裝修風格讓我感覺到是在書房,在這里你可以無線上網(wǎng),可以喝想喝的飲料,可以看雜志,看技術書籍。我選擇了邊喝飲料邊看技術書籍,很享受,讓我有些緊張的心放松了許多,到了下午14:30,我開始面試,我被安排到一件單獨的小屋。
這里有很大的落地窗,小屋里只有三個椅子和一張桌子,和很大的玻璃墻壁,首先進來了一個面試官,先翻閱我的簡歷,看到我簡歷上做的東西都比較硬,不過我碰到了硬茬,你什么牛就問你什么,由于我對自己做的東西都比較熟悉,順利的過了這關。
接下來便考我算法:
1.構建一棵二叉樹:比較順利完成。
2.寫出前、中、后序遍歷:很順利寫完。
3.任選其中兩種遍歷恢復二叉樹:只有后序加前序不可恢復。我選擇了前序和中序。
4.用代碼實現(xiàn):我先描述完成整個思想,然后花了大約半個小時完成了。
面試官滿意。接下來考了一個關于C++的,好久沒用C++編程只回答完他的一問便說記不住了,此題便過去了。
然后是一個c語法的問題:char *a = "aa";char b[2] = "aa";求sizeof( a ) = ?, sizeof( b ) = ?,我回答是4,2.解釋:a是地址大小為4字節(jié),b在這里指求的是數(shù)組大小2字節(jié)。面試官滿意。最后一個壓軸題面試官估計能把我給搞死,結(jié)果他沒能如愿。
struct A{;
char m_a;
int m_b;
};
占多大的內(nèi)存?
我先發(fā)問:對機器是否有要求?面試官答:沒有。我便以32位機解釋:這個題看似簡單,其實考了計算機的組成問題,考得是字節(jié)對齊的問題,其大小占用的是8字節(jié),并不是五字節(jié),因為char 要單獨占用一個存儲字,后面空了3字節(jié),int占4字節(jié),故8字節(jié)。然后他問:為什么要這樣?我答:如果不按字節(jié)對齊,讀取int的時候?qū)⒁ㄙM2個時鐘周期才行,這樣會大大降低CPU的效率。面試官無語,換人。
等了十分鐘,又有一個面試官進來。聊聊生活,開始發(fā)問,開始以一個實際的小項目來考:考的是社交網(wǎng)站的人與人的朋友圈問題。給出幾個人和幾個人的關系,考最后一共有幾個關系圈?我答:方法一:利用無向圖:鄰接表和鄰接矩陣。利用深度和廣度遍歷即可完成。時間復雜度O(N^2),方法二:利用森林,森林的遍歷:前、中、后序遍歷完成。時間復雜度:不易算出。比圖稍好。面試官給予我的回答肯定能夠完成。便叫我在O(N)時間復雜度完成。提示完成:利用集合。在他的提示下,我把集合的思想回答完成,接下來是寫代碼,我花了十五分鐘左右完成了核心代碼的編寫,面試官說我編程底子好,我心里偷偷的樂。接下來考了一個腦筋急轉(zhuǎn)彎之類的題,就不多說了,這個題我給出了答案同上面試官叫我不斷的改進算法,最后完成。面試官滿意的走了,叫我稍等。后來HR叫我等信。一天后,HR電話通知:歡迎你加入小米。工程師發(fā)問:問我是否拿到其他公司的offer,我答:都被我拒了。這里有幾項工作,隨你選,喜歡做什么做什么。我對小米的人性化感到開心,我喜歡小米?! ∵@是我的經(jīng)驗,希望能夠給后來的同學有點提示:想進自己喜歡的公司,想進好一些的公司,請把基礎知識學扎實,不要局限于一門語言,此處說的扎實是把核心課程學好:數(shù)據(jù)結(jié)構、操作系統(tǒng)、組成原理,c或者c++語言(這是很好的入門語言),各種原理課程,看五遍不多,編程天天都得編寫。有用代碼量要在畢業(yè)達到10萬行以上。 |