小米面試經歷


快畢業了,想要找個工作,簡單記錄一下有些變態的小米的面試經歷。

之前我也面試過兩家,中興和海康威視。簡單說一下這兩家,之后再奔主題。

1. 中興技術面試比較水,我報的是python開發。四個面試官,基本沒問什么技術問題(對的,這就是中興技術面試:)。主要問我會什么,做過啥項目,用python能做什么企業級項目。我說我會C++/C/python。python並不能做什么企業級項目(當時沒想通,現在想想python做原型開發很好)。之后就沒啥,直接把我打發走了,總共才十多分鍾。

2. 海康面試也比較水。問我數據庫的事務,new和new nothrow,用沒用過MFC(我當然說沒用過,現在誰還用這玩意),我說我用過QT(實際上是pyQT)。之后還問了許多人際關系上的問題,我基本一個都答不上來。有一個令我印象深刻,如果你和別人合作完成一個項目,項目交接時出了bug,對方一口咬定是你的錯,你怎么辦?我吱吱嗚嗚半天答不上來,現在要我說,我就給他一個大耳刮子,教教對方為人處世之道。總時間也就半小時多一些。

3. 小米面試含金量十足。不出意外我應該是掛了。一共兩輪,兩個不同類型的面試官,一輪要一小時左右,兩輪都要紙上寫代碼,給我最大的感觸就是問得特別深,是越來越深,直到你答不出來。

第一輪問了我STL的一些數據結構,其內部實現。我說了map是紅黑樹,unordered_map是hash表,之后我不小心說到hash表最常見的實現就是一個鏈表數組,鏈表是為了處理沖突。於是又問我hash表處理沖突的方式,也難不倒我。再問讓我寫一個hash表存儲用戶的圖片,大概要多少位hash值才能盡可能沒沖突。我大概算了一下。下一個問題是while(1) sleep(x);這里x大概要多少秒(可小數)才能使cpu忙碌。大家估計一下我心理陰影面積。然后看我操作系統內部了解不多,又問了一堆。(這就是為什么我們應該好好讀<<深入理解計算機系統>>)我答得十分糟糕。之后讓我寫一個鏈表反轉,我感覺有點詫異,想不到這玩意還真這么容易考到。詫異是詫異,沒花我多長時間就搞定一個O(n)時間O(1)空間的鏈表反轉了。又讓我說如果要實現一個lrucache,怎么實現?我記得教材上有說過用棧,我就直接說棧,面試官反問了我一堆問題,后來我又說用鏈表,不過可能空間消耗比較大,面試官問我為什么,我說有個指針域(我也是蠢哭),然后就直接打發我走了。

本來我以為我沒機會了,想不到一輪面試官給面子,讓我到了二輪。

一上來,看見我簡歷上一個項目寫了tfidf,就問我其是什么,我大概說了是頻率和逆向頻率的綜合,又要我給出精確定義。我放棄(不太確定)。雖然我不久前剛看過定義,但當時沒怎么仔細思考,畢竟sklearn里都有現成實現。之后讓我寫一個singleton,這玩意當然難不倒我。寫完后又要我寫一個線程安全的版本,我用了鎖,但他說開銷太大。我繼續放棄(我印象中確實有的,但是比較底層,我對這種底層的東西沒啥興趣,要是有興趣,一面也不會那么慘了),並反問他怎么辦,他說了一個check twice(但我之后上網沒找到)。之后問我拓撲排序(當然難不倒我)和java線程模型,這里我十分可笑,竟然把可重入鎖說成自旋鎖(自旋鎖是lock后並不會讓此線程立刻放棄cpu,而是等待一會;可重入鎖是同一個線程可以多次獲得)。又讓我寫二叉樹后序的迭代版本,我壓根沒寫過,只看過一次,那次看的實現還特別復雜,最慘的是,房間里另一對面試的有些影響我,心想這下出事了。磨磨蹭蹭寫出了一個版本,面試官一看就否決了,我仔細一看,確實有問題,不過加上兩個標記還是成功搞定。之后問了我要是去了小米想做什么,我十分可笑,說我想做比較酷的事(正常情況我是不會這么說的,我真正想法是做有趣的事,考慮到是小米),又問我做過什么酷的事,我答不出來,隨口說了個裝linux系統,使用cli,頓時感覺自己low爆了,還不如說在android上裝linux呢!還問我哪方面比較薄弱,我當然是說計算機圖形學了。之后說了我一些缺點,比如有點油(tfidf惹的貨),知識面廣但都不深。數據結構是不錯(可能是我簡歷上寫了解B樹和紅黑樹),但算法不行(筆試最后兩題,都只能給出差強人意的答案,不夠極致(原話))。之后就把我打發走了,事后我還覺得有些希望。但這么多天過去了,越想越覺得沒戲。

感覺自己還是太弱,還得多讀書,多寫代碼,來年春招再投。

 

update 2017/10/19/22:00

 

check twice我大概知道是什么了。

原先代碼是(這啥語言也不是,無需深究,達意即可):

lock
if not instance
    instance = something
endif
unlock
return instance

check twice后是:

if not instance
    lock
    if not instance
        instance = something
    endif
    unlock
endif
return instance

這我倒是很早以前見過,不過沒想到面試官指的是這個。這可以一定程度上提高效率。注意,instance請為volatile,否者gcc可能會優化,第一次檢查instance前將其存入寄存器,然后檢查兩次,導致多線程間競爭。

另外,小米筆試最后一題簡答分兩小題。都是關於字符串查找,在主串中找子串。第一小題字符可重復使用,但字串中字符需按順序在主串中出現,大概某天早上,當時我給出一種暴力解法,某天早上,不知為何我想起這題,突然發覺這題其實相當簡單,只要對子串第一個字符找在主串的第一次出現即可,再在剩下的字符遞歸使用此方法,因為若是后面的出現符合,前面的出現必然也符合。第二小題中子串中字符可以不按序在主串中出現,而且主串中字符可以重復使用。我竟然沒做出來,我也是挺蠢的:(。只要將主串字符存入字典,然后對子串每個字符查找字典即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM