天天看點

回憶當年阿裡的一道 SQL 面試題,億級表合并

以下文章來源于有關SQL ,作者Lenis

阿裡面試

2010 年,阿裡正當紅。

那年 BAT 的名氣還沒有現今那麼響亮。就業的時候,很多畢業生還是會選擇 HP, IBM, EMC, SONY, ORACLE,Microsoft 等一類的外企。這些外企在畢業生眼中代表的是名牌,權威,以及自由,沒錯,自由很重要,Nice 的環境,和諧的團隊,沒有 996 的生存壓力。

但,差距就是在不經意間發生的。

随着阿裡 DBA 團隊轟轟烈烈的多場技術分享演講,越來越多的阿裡人在部落格上、論壇裡釋出了自己對技術的了解。尤其是 Oracle 技術的應用,itpub 的崛起,簡直把 Oracle 推向了神壇。特别是 Fenng 這支筆杆子,既是 Oracle 高手,還帶有特别出色的影響力,讓每個玩資料庫的人都對 Oracle 産生了特别的好感,為人不知 Oracle, 縱稱 DBA 也枉然。

當帝國大廈建成,也自然成就了一批匠人。

現在來看,後期的業務幾近于維護期,再去阿裡搞 Oracle, 時間風口已經不再了。是以 BAT 未來幾年不再是技術人成長的好地方了,反而那些小立山頭的初創公司,可能還有至少讓你技術騰飛的空間。

當然,如果你是搞 AI, BAT 依然是首選。

2010 年我也帶着一絲敬仰,畢竟玩了 Oracle 也 2 年了,準備去阿裡試試。阿裡招新也是挺大場面的。虹橋展覽館都包了整整 3 層,迎賓就用了 1 層。筆試很快就通過了,基礎題還是選擇題,隻要認真看過 Oracle Concepts 都應該問題不大。一面 HR,問一些個人意願和對技術的看法,不太張狂的技術人,不會卡在這一關。終面是個老技術,問得特别細。

印象中,時間過得很慢,大概整個面試過程有 1 個半小時。面試給的礦泉水都喝得差不多了才停。

拒人千裡之外的那道 SQL 題

所有的面試我想都會有兩部分。

第一部分是對理論知識的考察,比如表空間,分區,統計資訊,日志處理,備份與恢複,RAC, OGG 等等。這些基礎知識,在 Oracle Concepts, Tom 的 《Oracle 體系架構》《Oracle 程式設計藝術》中都會有涉及,即使隻看過其中某幾章,吹吹水還是能過得去。就像《雪山飛狐》中偷練了胡家刀法的那個遊醫,不也稱霸一方了嘛。

第二部分實戰題就真的是考察功底了。我記得最清楚的是這麼道題,直到現在我作為面試官來面試候選人,也會用這道題,因為隻此一題就能考察候選人對 DB 的了解,不至于一個 Update/Insert 就把 DB 搞挂!

題目是這樣的:

有一張以 ID 為主關鍵字的聚集表,表資料量是 2 億。要将另一張同樣結構的表,表資料量是 6000 萬,合并到第一張表裡。

請你設計一個更新的過程。第一張表可能含有 第二張表的部分資料,也可能沒有。沒有的要加入,比對的要更新。

不出大家所料,當時我的回答跟絕大部分我遇到的面試者一樣,insert/update/merge 就完了呗。結果統統都是被否定的。