面試是5月4日下午進行的,時隔數日,得閑記錄一下當時面試的經歷。有些地方可能不是特別全面。
滴滴新銳計划官網的申請條件是:超級學霸(專業前10%),競賽大神(各類大賽大獎盡收囊中),學術達人(頂會Paper發到手軟),實戰高手(實習足跡遍布Google/MSRA等頂級科技公司)。
感覺好虛,但是還是投了試一下。
一面:
- 介紹一下分布式數據庫
- 集群如何進行配置,機器如何進行管理
- 介紹項目中的系統,系統架構。主要聊了數據庫系統的實現,包括sql的執行方式,表的存儲方式。
- 非主鍵查詢是如何進行的?
- 關系算子下壓(比如filter是否下壓數據存儲服務器上)
- 分布式索引實現方案會帶來哪些問題?當建立索引表的時候,出現了內存或者磁盤不足的情況,該怎么辦?
- 介紹自己的工作
- mysql中非主鍵索引是怎么實現的?聊到了一些B+Tree的細節,有些忘記了,當時答得不好。面試官人非常不錯,還跟我講了一下B+Tree索引的內容。
- update的執行流程,更新服務器(UpdateServer)中的Memtable,操作鏈表太長會不會存在問題,效率太低?UpdateServer主備都要寫入這行數據嗎?(日志同步,並非都寫)
- 團隊合作,項目的生存期內git的分支如何進行管理?
- 算法題:有個街道上有n個店鋪,每個店鋪有一定數目的金額。小偷從街道的一端開始向另一端進行偷竊,並且不可以回頭,也不可以偷竊連續的兩家。問偷哪些店鋪才能獲得最多的偷竊金額?(當時也不太確定,就簡單講了一下自己的思路,用dp來解)
- redis或者memcache之類的系統有研究過嗎?
總結:主要還是聊項目,然后在你介紹項目的過程中將一些基礎知識穿插進來問你。突然而來的算法題也是一臉蒙蔽。問了將近40分鍾,總體感覺還是可以的,面試官人很nice。等了一會就讓二面了。
二面:
- 自我介紹
- 介紹自己做了哪些東西(介紹介紹着就變成白板編程了。。。囧)
- 給一個數組給你和一個target值,寫個二分查找的程序,,數組是隨機的(寫了一個塊排和一個二分查找)
總結:二面的面試官是一個做前端開發,所以問得也比較少。直接就帶去三面了。
三面:
三面的面試官是一個架構師,所以問的問題就比較強調橫向對比了
- 自我介紹
- 分布式索引做出來的效果如何,你是怎么評估你們的方案的,有沒有想過其他更好的方案
- CBase和HBase有什么區別嗎?在搭建Hadoop的時候有沒有遇到一些機器的問題?(機器問題?這個沒回答出來,面試官也沒問下去了)
- 除了HBase,其他的系統比如redis之類的有了解嗎?通過方式了解的(估計滴滴里面用redis比較多,兩個面試官都問到了)
- 海量數據排序問題
- 強調了課本中的知識對於做項目的重要性。介紹操作系統的文件系統的實現,Linux操作系統如何進行內存管理,問如何設計數據庫,第三范式是什么?TCP中的滑動窗口起什么作用?
總結:三面的思維角度和一面的差距還是比較大的。當面試官問我,你們在做項目的時候,對方案的評估是如何做的?有沒有去思考其他的方案。我感覺這樣的問題就屬於比較好的問題了,很能反映一個人的思維水平。所以平時做項目的過程中一定要積極地去思考這樣的問題,只有如此,當被問到了才能回答的游刃有余。另外知識面也很重要,很多東西都需要了解,厚積薄發。
以上就是滴滴的面試的全部過程,總共面了接近2個小時。有很多小問題現在想不起來了,主要就是這些。說來就來的白板編程,其實題目還是比較簡單的,但是,平時如果不稍微練習下的話,你會發現即使寫出來了,白紙上也是亂七八糟的。