文章持续更新,全文首发自我的个人公众号,可以微信搜一搜「 高性能服务器开发 」第一时间阅读,后台回复【文章下载】获取程序员进阶学习资料。
背景
我是 C/C++ 出身,2017 年去携程旅行网后开始接触 Java 开发,2018 年年底与朋友一起合伙创业做金融交易系统,交易系统除了行情服务使用的是 C++,其他都是 Java 服务,我是核心技术人员之一。
这里需要说明一下,我这里并不是从 C++ 转行至 Java 开发,实际上我是 C++ 和 Java 都比较熟悉,选择哪门语言是根据业务和开发需要,也就是说是业务选择了语言,而不是因为语言选择了业务。
看过《倚天屠龙记》的读者应该知道九阳神功,C++ 对于我的技术修炼来说,就像九阳神功对于张无忌一样。
我们创业的小团队产品于 2019 年 7 月份正式上线,7 月~12 月初做了一版大的重构,到了 12 月份公司比较清闲,所以我就更新下简历,看看外面的机会。这是背景。
众所周知,阿里主要以 Java 为主,因此我投递的职位是 Java 高级/资深开发,我当时是在 Boss 直聘 App 上看到的职位。
一、如何选择招聘平台
这里简单聊一下我对 IT 人员求职常见的几个求职平台的看法,常见的面向 IT 求职人员的平台有拉勾网、猎聘网、Boss 直聘、100offer 等,我一般只在拉勾网、猎聘网、Boss 直聘这三个平台寻找意向职位和投递简历,早些年还有大街网和内推网,但是这些年这两个平台因为自身的原因都没落了。所有,我之前都是优先在拉勾网上求职,并且对拉勾网的体验也很满意,而对猎聘网和 Boss 直聘满意度一般。
猎聘网上有许多猎头看你更新了简历会主动联系你,帮你推荐职位。但是这种模式有好的地方也有不好的地方,好的地方是,由于是猎头内推的,所以招聘和面试进度和效率一般比自己直接投递某家公司要高,而且有些公司一些内部不公开的职位,你也可以通过猎头的内推获得面试、入职机会。但是,猎头推荐也会存在一些不好的地方,如果你入职成功了,猎头能从公司拿到一笔不菲的推荐费。因此一些猎头为了促成求职者成功入职,会编造一些谎话,对求职者或者公司隐瞒一些真实情况,等面试者面试时或者入职后才发现一些坑。另外,还有一些素质非常低下的猎头,这大大降低了求职者的面试体验。
再来说说 Boss 直聘平台吧。Boss 直聘最初的宣传的特点是老板亲自招人,但我个人觉得这种做法基本行不通,小公司还好一点,大公司基本上不可能有多少老板或者 XX 总亲自招人,都是交给人事部门,因此最初 Boss 直聘给我的感觉就是,这个平台上要么都是一些小公司尤其是一些创业公司,要么就是一些不靠谱的公司,我并不是要黑这个平台,我前几年通过这个平台求职时,面试了几家后发现都是一些连办公室都不固定的"不靠谱”的招聘团队。
拉勾网相对来说,我的印象就比较好了,因为我的前几份工作都是通过拉勾网找到的。但是,这次拉勾让我的体验就不太好了,因为投递的大多数职位都没有任何回应,投递的大多数职位永远是处于对方公司已经接收的状态,再也没有下文了,当然,这不是拉勾网的问题,可能是招聘方公司本身的问题。但是有一点我不明白的,为啥差不多的职位,在 Boss 直聘上投递后无论成与不成,很快就有对方公司的回应呢?这样也节约了求职之大量期待和等待的时间。
所以,早些年我觉得拉勾网靠谱一些,Boss 直聘不靠谱,现在的印象恰恰反过来了。这里说一点自己对这三个招聘平台的使用感受,一家之言也不一定对,仅作读者朋友在投递简历选平台时一个参考吧。
回到面试阿里这个职位的主线上来。我面试的是阿里巴巴的某支付业务团队,我人在上海,阿里巴巴的支付宝国际支付业务。
二、面试过程中注意策略
我求职的阿里的 Java 技术岗位一共有三轮技术面试和一轮 HR 面试,实际上 HR 面试了两次,下文会详细的讲。
因为这段时间面试了很多大厂,有一些拿到了 offer,有一些因为一些原因没有拿到,因此我个人觉得对于像求职 BATM 这样的大厂或者字节跳动、拼多多这样的独角兽公司,最后能否拿到 offer 一部分取决于你的个人技术水平和工作经验,另外一部分取决于你的运气,还有一部分取决于你面试时的策略和技巧,策略和技巧下文我会举一个具体的例子。个人的技术水平和工作经验这一块不必多说,来说说为啥有一定的运气成分呢?
举两个例子吧。
第一个例子:我面试腾讯时,前面三轮技术面试已经过了,第三面是主管面试,但是招聘方却要把第四轮高管面试安排在几个星期之后,对于大多数人来说,其实是没有这个时间成本来等待的,尤其是你手上已经有了几个 offer,它们可能在催你入职的情况下。所以,腾讯的面试,你不能接受等待这么长时间,或者即使你能接受,但是不能保证最终一定能拿到 offer,就不得不选择放弃。其实之前也听一位已经在腾讯入职的朋友说,大厂的社招面试周期可能真的有点长,有可能需要反复来回跑,因此要求职者自己权衡成本。
第二个例子,是我面试阿里。其实在我这次求职阿里之前的一个多星期前投递了阿里的另外一个职位,然后没过多久的一个晚上,大约七点左右进行了一次电话面试。阿里通常第一轮面试是电话面试,这次电话面试只能用"哑巴吃黄莲有苦难言"来形容。那天晚上,按照约定好的时间,我们开始了电话面试。聊了一个多小时,快结束了,我就问面试官,既然是 Java 职位的面试,为啥你不问一点 Java 相关的基础知识呢?面试官说,这些东西都是可以提前在网上寻找面经准备甚至背诵下来的,所以他面试的一贯做法是从来不问 Java 相关的基础知识,只和面试者聊之前做过的项目。好吧,我竟然无言以对。末了,面试官问我,你还有啥想问我的?我就直接说,那我这次面试到底是过了还是没过?面试官就直接说:你和我聊的并不是我想要的,我从你说的项目中也看不到任何符合我们要求的经验,所以面试当然没过。其实我当时心里其实是很不满的,为什么呢?因为我项目的工作所对应的业务,面试官并不了解,我就给面试官解释,尤其是涉及到一些结构图和流程图时,由于是电话面试,电话里面根本说不清楚。也就是说,第一面试官不了解你的业务,但是他觉得他通过你的描述懂了,第二一些特定的内容电话里面描述不清楚,再加上面试官不问相关的 Java 技术,因此最终给面试官留下的印象是你"一无是处",没有任何可取之处,因此失败了。但是大多数求职者应该和我的开始的心态是一样的,面试大厂不自信导致底气不足,不会去反驳或者回击面试官的一些不合理的要求。
我举这个例子想说的就是面试大厂中的运气成分,很多时候,并不是你不行,而是面试过程中,面试官的个人特质和喜好或者沟通中信息不对称,最终让你没有通过面试的机会。因此,对于这种情况,我们需要做好两点:
- 自信一点,调整心态,虽然我们可能很想进眼前这个大厂,但是不是非要进这个大厂不可,对于不合理的对待要直接反击,据理力争;
- 讲究沟通策略。因此在后面的阿里其他部门的面试时,面试开始前,我就委婉的和面试官说了自己的一些建议:既然是电话面试,那么面试官提问时就不要提一些电话中不太方便或者不容易描述的问题,例如描述项目结构或者流程;如果面试官之前没做过应聘者的项目的业务,就不要深问这些业务细节,因为可能三言两语说不清楚;如果面试官实在想知道,咱们可以约着现场聊,当面沟通很多事情就容易说清楚了。
三、第一轮技术面试
有了这个共识后,我和面试官开始了第一轮电话面试。第一轮面试的时间是某天上午九点,电话面试,面试官简单的了解了一下我之前做的业务,接下来就问了我一些 Java 的基础知识,我面试后做了一下总结和记录,贴出来给大家看下:
- Java 的 Object 类有哪些常用的方法?
- 哪些场景下,子类需要重写 equals 方法和 hashCode 方法?
- 描述下 HashMap get 方法的主要执行逻辑和流程;
- Java 异常,什么是 checked Exception 和 unchecked Exception,举几个具体的例子;是否研究过 Spring Boot 中的异常;
- ConcurrentHashMap 的特性和实现原理;
- 什么是分库分表,以及分库分表的具体方法和使用场景;
对于数据库基础知识,读者可以找任意一本相关入门级的数据库图书学习即可。高级开发除了以上要求还要熟悉高可用 MySQL、主从同步、读写分离、分表分库等技术,这些技术的细节一定要清楚,它们是你成为技术专家或者高级架构的必备知识。我们在实际面试时,在讨论高可用服务服务方案时,很多面试者也会和我们讨论到这些技术,但是不少面试者只知道这些技术的大致思想,细节往往说不清楚,细节不会就意味着你的高可用方案无法落地,企业需要可以落地的方案。这些技术我首推《高性能 MySQL》这本书,这本书高级开发者一定要通读的,另外还有 2 本非常好的图书也推荐一下:一本是《MySQL 排错指南》,读完这本书以后,你会对整个“数据库世界”充满了清晰的认识;另外一本是《数据库索引设计与优化》,这本书读起来非常舒服,尤其是对于喜欢算法和数据结构的同学来说。网上也有同学整理分享出来,下载链接(喜欢记得买正版哦):
- 什么是分布式锁以及其实现原理和使用场景;
- 幂等性问题。
这里需要说一下,上面的面试题其实都很基础,尤其是涉及到 Java 本身的如果你是从事 Java 开发的,但是只局限于应付公司的业务代码,从来没有主动去研读一下 jdk 的一些常用类库,无论从应付面试来说,还是就你的 Java 技术栈的提高乃至技术职业生涯都是不好的,希望从事 Java 开发的读者要意识到这一点。
网络上有很多类似于 Java 面试高频知识点总结的帖子和课程,我个人觉得这些课程你可以用它作为大纲,但是千万不能只达到这些大纲要求的深度,作为 Java 开发者,jdk 的源码,尤其是常用的 Java 类的源码还是建议认真阅读一下。
第一轮技术面试结束后,我就问面试官是否通过了。面试官告诉我通过了,然后我问他下一轮的的面试会安排在什么时候。我当时告诉他希望他们尽快安排,已经有其他的公司在催我入职了(期间我已经拿到了字节的 offer)。面试官说去沟通一下。
于是当天下午大概一两点左右,一面面试官问我晚上是否有时间,给我安排第二轮技术面试,于是约了当天晚上七点。
四、第二轮技术面试
第二轮技术面试是主管面试。原来约了晚上七点,我到了之后一面的面试官接待了我,并告知我他们主管临时有点急事,能不能把时间改到九点,或者再约。我当时想既然都来了那就等等吧,就不单独再约时间了。于是在这之前和一面的面试官又聊了一下,一面的面试官人很 nice,我们聊了很多东西。他和我说了一下后面面试的一些注意事项,告诉我二面面试官的一些情况,建议我在和他谈之前的项目时说清楚业务特点和技术重难点,并给出合理的解决方案,否则很可能被 pass 掉。最后又和我讲了一下阿里的薪酬结构和期权的一些事情,以及 HR 面试和其他公司的 HR 面试不太一样,要我认证严肃对待阿里的 HR 面试。
大约到了晚上九点,二面面试官终于来了。先和我介绍了一下他们所做的东西,最后给我出了一个场景题,让我根据他提出的场景设计一套系统,要交代清楚一共有几个子系统,如何保证高性能和高可用。在和面试官讨论中我给出了自己的设计方案,当然开始的答案并不完美,后来面试官不断给我提出新的问题,以考察我的设计能力。正常的面试结束后,面试官就我之前的项目聊了一下自己的看法。
聊了大概一个多小时后,结束了面试,我离开时,发现外面的沙发上还有一个人等待面试,汗,竞争压力真大。
第二天早上,我通过一面面试官帮我打听二面面试结果,大概中午的时候,二面面试官加我微信说面试通过了,但是三面面试官,也就是他们大部门的 leader 在深圳出差,问我是否方便视频面试,我说可以,于是就约定了第二天晚上七点的视频面试。
五、 第三轮技术面试
前一天三面的面试官给我打了个电话,然后加了我微信。第二天晚上七点,面试官准时微信视频我,打开后发现是一个胡子没刮的中年大叔,"大叔”在阳台上坐在笔记本电脑前面,然后面试就正式开始了。先让我做个自我介绍,然后就和我聊起之前的项目,在我介绍项目的过程中,时而问一些 Java 细节的东西,如多线程同步用了哪些对象,如何编码的,时而问一下框架或者架构方面的,例如如何做热备、是否使用了分布式服务,分布式服务中多个服务之间数据如何保持一致,系统的支持的最大 QPS,缓存问题、数据库的压力问题等等。
三面的技术面试并不容易,一般来说,不同公司因为业务形态,采用的技术方案不尽相同,但是不少面试官并不认同面试者公司所采用的技术方案,所以需要面试者详细的、认真的给出合理的解释,如果你对你负责的系统背后的技术方案从没进行认真的思考和反思,很容易被面试官几次连续追问弄的措手不及,或者落入面试官设置的技术圈套中。
这类面试我给读者的建议是,无论你是公司某个项目的负责人,还是你只是参与某个项目只负责其中一部分,不仅要想办法了解整个系统的结构设计,多反思你现在的结构设计,还要对关键的细节核心也要非常熟悉,把你所在的项目的一些关键细节搞清楚,千万不要只局限于自己的"一亩三分地"。
六、第四轮 HR 面试
第二天早上,一面的面试官告诉我第三轮技术面试已经通过了,接下来就是 HR 面试了,但是阿里的 HR 面试与一般的人事面试不太一样,HR 在阿里有点像军团的"政委",同时告诉我,阿里的薪资待遇现金部分不会给太多,更多的是期权,而且这些期权公司内部是明码标价的,在离职时公司会以制定的价格去回购。
当天,一个自称阿里的 HR 主管的女性给我打电话,与我约了下一轮的人事面试,具体日期记不得了,是后面几天的某个上午 10 点。
那天的 10 点,对方如约打来电话。在我以往的经历中,我觉得既然前面技术面试过了,到了 HR 面试时应该是简单的了解一下面试者的情况,然后就开始谈薪资了。然而事实并不是这样,这个 HR 先让我做了一下自我介绍,然后让我描述一下每段工作经历分别做了什么、每段工作经历时长和离职原因,还问了我诸如我工作中最受挫的事情以及最大的挑战的事情是什么,以及我的一些思想观念和价值观念。唉,感觉真的就像"政审"。聊了快一个多小时,我的心一直是绷着的,额头都出汗了。那天我的媳妇也在旁边旁听,我面试了一个多小时,她跟着紧张了一个多小时。
面试最后,同样的惯例,这个 HR 问我有什么想问的,我当时脑子一发热,问了一句套话:您觉得在 IT 公司,HR 应该扮演什么样的角色?唉,就是这个问题差点,让我"万劫不复”了。这个 HR 显然很老道,并没有直接回答我的问题,而是反问我怎么看待 HR 工作职责的,我当时说,人力资源部门应该为职能部门做好后勤工作。面试官听我这么说,立刻表示反对,开始给我说阿里的 HR 如何如何,作用如何如何,接着我就脑袋嗡嗡的又听了她说了一会儿。最终我们结束了这次的面试。
面试过程中,其实我一直以为会和我谈薪资待遇,然后从开始到结束并没有谈到,因为不确定我是否过了这个面试, 也没有去问。
七、 第五轮 HR 面试
第二天早上,我再次接到这个 HR 的电话,告知我所有的面试都通过了,接下来和我谈下薪资待遇。经过他们的综合考察和评定,给我的职级是 P7(技术专家),给我价值 80 W的期权,分三年拿完,第一年给 25%,第二年再给 25%,第三年给 50%,但是现金部分最多只能给到 32k(月薪),保底薪资是 14 薪。于是我问她,我少要点期权,月薪能否加一点,她说做不到;然后我又问她每股期权如果离职公司的回收价格是明确的吗?她也说不明确。于是,我又和她说,我说你这个薪资水平和我上上家的待遇差不多。她也不接我我的话茬,说这是公司的规定,况且你来阿里也不是为了钱。我竟然无言以对。后来,我就说我拿了某独角兽公司的 offer,人家年薪都给到了七十多万,你这比人家低的太多了,她又说,这家公司给的薪水本来就比市场平均水平要高很多。
谈到这里,我其实已经没多少耐心继续谈下去了。我朝思暮想,诚惶诚恐想进的阿里,给出的待遇竟然如此。唉。大家出来工作,不是为了钱,为了啥?而且整个面试的过程也是比较磨人的,最终给出的薪资水平毫无诚意。此时,我实在不想继续谈下去了,于是我对她说,要不这样吧,我考虑一天,明天这个时候给你打电话告诉你结果,她说可以,并说第二天会打给我。
八、最终结果
综合考虑下来,最终我还是决定放弃阿里的 offer。第二天当那个 HR 打来电话时,我直接开门见山的说,我选择放弃这个 offer,她听了之后说了一句尊重我的选择,然后简单的寒暄了几句就挂了电话。
九、总结
我这个人,非科班出身,我深知有一份大厂工作经验的重要性。所以自毕业以来,一直想着有一天能去 BAT 其中之一工作,然而造化弄人,总因为这样那样的原因,一直未能得偿所愿。在 2019 年整整一年,创业付出大量时间和心血之后,决心还是告别小公司,再去大厂历练一下。于是经过认真的准备,先后面试了腾讯、饿了么、阿里蚂蚁金服、字节跳动等大厂,其中尤为亲睐阿里的工作机会,当然由于早些年面试大厂受挫,心里存在一点的恐惧心理,但这次之后再也不存在任何恐惧之心了,说白了,也不过如此而已。
当然,我这里并不是说阿里不好,阿里是一家伟大的公司,给我们的生活带来了很多的益处。但是有些事情,如同两个人的结合一样,勉强不来的。一家企业在发展的过程中总会存在很多问题,如果你能忍受这些问题,你可以选择她,如果你容忍不了,你可以不选择她。感谢帮助我那么多的阿里一面面试官。
我把这段经历写出来分享给大家,并不是想说明我有多强,是希望给想面试阿里的同学一点启发和帮助。入职大厂不仅需要技术实力,还需要一点点运气和策略。
写在最后
其实除了阿里的 Java 面试,我在这期间也参加过哈喽单车、饿了么等公司的 Java 面试,哈喽单车因为薪资没谈拢,饿了么拿到了 offer,回头有机会也可以给大家分享出来。
来源: 公众号「高性能服务器开发」原文链接:阿里面试,拿到 P7 offer