以下文章来源于有关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 就完了呗。结果统统都是被否定的。