⑴ 小米麵試每一輪都有演算法嗎
一共兩輪,兩個不同類型的面試官,一輪要一小時左右,兩輪都要紙上寫代碼,給我最大的感觸就是問得特別深,是越來越深,直到你答不出來。
第一輪問了我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樹和紅黑樹),但演算法不行(筆試最後兩題,都只能給出差強人意的答案,不夠極致(原話))。之後就把我打發走了,事後我還覺得有些希望。但這么多天過去了,越想越覺得沒戲。
感覺自己還是太弱,還得多讀書,多寫代碼,來年春招再投。
⑵ 2019研究生秋招得北京小米、杭州新浪微博、南京oppo三個offer,演算法工程師崗位,怎樣選擇
推薦北京小米和杭州新浪,因為城市的發展對個人的影響也挺重要的,這點來說,南京比不上北京和杭州,至於北京杭州這兩個如何選擇就要看題主對南北方飲食習慣,生活習慣,家鄉,人脈關系這些的考慮了