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