不久前我写过一篇文章《谈谈应聘阿里全流程》,文章发布后,收到了很多读者的积极反馈,但其中也反映出读者普遍的困惑:清楚了应聘流程,该如何有针对性地做应聘准备呢?这个问题从正面并不好回答,那么,不妨逆向寻解:本场 Chat 将详细介绍那些导致应聘者被回绝的系列因素,并基于这些因素有针对性地阐述应对方案;同时解读应聘准备和面试环节需要注意的事项。内容概要如下:
应聘如考试,却又不同于考试。考试至少可以通过回顾试卷知道自己哪里出错,并有针对性地订正,从而避免再犯同样的错误;然而应聘失败往往只能得到一个 “被回绝” 的结果,甚至是“石沉大海”,没有人会跟你解释原因。
关于回绝应聘者的原因,我与同为面试官的很多同事进行了探讨,总结得出了几个普遍的因素:基础差,项目经历简单,无思考,无沉淀,无亮点。
在应聘的过程中,基础考查是在 “一面” 中进行的,面试形式通常为 “电话面”。基础考查由浅入深,起初,面试官会根据岗位要求问一些技术相关的基础问题。当然,“基础” 二字的含义并不是简单,如果没有充分的准备和足够的积累,也是很容易挂掉的。根据我的面试经验,超过一半的应聘者在这个环节挂掉,表现特别差的应聘者可能会被面试官打上一个 “基础不扎实” 的标签记录在案,再次应聘阿里时,面试官会参考之前的面试记录,有这样的“差评”,成功率就很低了。
基础知识的考查有一个心照不宣的规则:回答正确不会加分,错误则会减分,某种意义上这是一个 “粗筛” 的过程。如下图所示,是一个 Java 工程师岗位的要求,可以看出,基础考查涉及的内容很广泛,“裸考” 并不可取。此外,基础考查的题目大都是常规的,网上有大量的面试 “刷题” 攻略可供参考,正是基于这个原因,对那些连基础问题都回答不好的应聘者,面试官通常会以 “基础差” 回绝掉。
业务平台事业部-大财务平台-技术专家/高级java工程师-杭州&上海
所谓简单与复杂都是相对的,对于阿里、腾讯这种用户规模达十亿级的互联网企业,通常,工程师要面对的是大规模分布式环境中高并发、海量请求下的安全、稳定、高性能问题。为了应对这些问题,工程师不仅要有娴熟的业务研发技能,而且需要业务建模、架构设计、框架研发、技术攻关等能力。这些能力几乎不可能通过刷题、看书、培训获得,而是需要在实际的项目中不断地学习、实践、思考、总结才能逐渐形成。正是这个原因,在面试中,项目经历是必问内容,面试官据此可以评估你是否已经具备相应岗位所需的能力。
经常听到同为面试官的同事感叹:这个应聘者其它方面都挺好的,就是项目经历太简单了。这并非面试官有意 “装 X”,事实上,大多数应聘者过往的工作经历可能都是一些小公司的项目,或者大公司的小项目。这类项目的系统复杂度普遍较低,同时鲜有设计上的亮点,因此,在评估应聘者的工作经验时,这样的项目经历是不会加分的。
不过,有意向应聘阿里系(或者其它大型互联网公司)的读者也不必过分担心,毕竟面试是一个综合考量的过程,面试官不会仅仅因为项目经历简单就直接回绝应聘者。很多时候,项目经历简单并不是应聘者本身能力的问题,而在于机遇,优秀的设计、独具匠心的思考也可以通过简单的项目承载。
无思考可以说是工程师的 “大忌”,互联网行业不同于传统行业,一方面,技术变化非常快,不同领域技术之间的边界正逐渐模糊、走向融合,埋头搬砖而无思考的工程师将难以跟上节奏;另一方面,大型互联网公司时常会面临一些前所未有、无可参考的问题和场景,只能自力更生,这些年阿里打造了很多著名的开源项目,如 RocketMQ、Dubbo、Ant-design、arthas、Fastjson、Druid、Ice 等等,并成为国际顶级开源组织核心成员,这背后凝聚着大量工程师的思考和创新。
回归正题,在面试的时候,面试官通常会问一些“观点型”问题,这类问题一般是没有明确的答案的,主要看应聘者是否有自己的思考,比如,可以问应聘者对于一些常见的编程和软件工程理念的看法,比如 OOP、SOA、API、SPI,微服务等等,以考察应聘者平常对于这些问题是否有思考和总结。也可能是对于最近的一些技术热点的关注,等等。
对于这类问题,合格的面试官不会期望应聘者的回答与自己的观点一致,更不会同应聘者争论,而是尽量引导应聘者完整地表述自己的逻辑,了解其观点背后的内容,考察应聘者对于概念的理解和实践的程度,看看应聘者是否有比较严密的能够自圆其说的逻辑。
诚然,在判断应聘者是否属于“无思考类型” 时,面试官的主观意志是非常重要的因素,他很难做到绝对客观,也会出现误判,进而影响应聘者的面试结果。因此,作为应聘者在面试之前一定要做足功课,须知 “求其上者得其中”。
工程师在经历一系列项目实践的洗礼后,通常会形成自己的一套 “方法论”和 “最佳实践” ——具体而言,拿到一个新项目,在很短的时间内便能勾勒出一个大概的系统框架,进而结合应用场景进行细节填充。对于这样的工程师,我们通俗地称之为 “有沉淀的人” 。
在大、中型项目中,一名工程师通常只负责某个模块的设计和实现,这样的分工协作模式在提升效率的同时,也容易让人产生惰性,逐渐退化成 “螺丝钉”—— 只关注自己的“一亩三分地”,囿于局部,缺乏对项目全局的洞察;随着时间的推移,只会做自己擅长的,或者只被安排做擅长的。缘于这类因素,很多工程师虽然参与过很多项目,但趋于同质化,技术视野局限,给人一种 “没有沉淀” 的感觉。
回归实践,到底如何才能显得 “有沉淀” 呢?首先,要转变观念,一名优秀的工程师,即便只负责项目中的某个模块,也应保持对项目全局的好奇心并投入时间去琢磨,这样的项目经历才能助力于形成体系化的 “方法论” 和完整的“最佳实践”。
其次,要善于总结,将自己从实践中得来的经验经思考加工后 “持久化”,具体方式因人而异,个人比较推崇技术博客的形式。通过技术博客,用文字、图片记录实践经验,分享技术思考,日积月累,也就 “沉淀” 下来了。
应聘者各方面都不错——基础较好、有思考、有沉淀、项目经验尚可,但没有特别突出的点,这是最令面试官纠结的情况。如果应聘者在各方面都不错的基础上能有一个亮点加持,通过面试要容易得多。
那么,通常哪些因素可以作为亮点呢?1.过往工作经验与所应聘岗位强相关;2.上家公司在业界有一定知名度;3.在所应聘岗位相关的领域有一定成果,如专利、论文、书籍等;4.教育背景良好 (一流学校,高学历);5.英语口语水平优秀(阿里正在走向国际化,很多岗位涉及国际合作);6.沟通表达能力特别好,性格好(自信、乐观、谦逊等)。
在准备应聘的过程中,很多人都会刷题,网上也充斥着很多面试题攻略。那么,刷题真的有用吗?回答是肯定的,有用,只不过作用没那么大。既然没有很大作用,是不是可以不刷题呢?当然不可以,大牛除外。
2.1 为什么要刷题?
互联网公司的技术面试一般都是好几轮,阿里系通常是三轮,每一轮面试都有不同的侧重点。第一轮面试通常侧重于相关技术栈基础知识的考查,涉及面比较广,还有一个不成文的规则:面试官所提的问题,回答正确不加分,错误则减分。这并不奇怪,既然考查的是基础,默认应聘者是掌握的,没掌握自然是减分的。
为了平稳地通过技术初面,刷题还是很有必要的。一方面,通过刷题可以梳理自己的知识体系,查漏补缺;另一方面,可以快速地掌握一些知识点,比如你可能完全不了解 Redis,但通过刷题也可以在较短的时间内掌握一部分要点。
2.2 不要迷信刷题
道高一尺,魔高一丈。不要以为刷过题就万事大吉了,面试官也不是吃素的,很多时候,应聘者刷过的题,面试官也刷过,惊不惊喜?意不意外?刷题得来的知识点与实践经验总结出来的知识点还是有区别的,通过提问,面试官不难判断。一旦意识到应聘者 “有备而来”,面试官通常会停止一般性提问,而拿出自己收藏的问题集,或者直接问应聘是如何掌握某个知识点的,举几个例子:
例1:
面试官:工作中遇到过堆内存溢出的问题吗? 应聘者:遇到过。 面试官:那你给我详细介绍一下你定位的过程吧。 应聘者:....(刷题得来的知识,经不住细节追问的)
例2:
面试官:了解 jdk-1.7/1.8 中 HashMap 的区别吗?(挖坑) 应聘者:了解的,jdk-1.7 采用的是数组加链表的结构,jdk-1.8 采用... 面试官:为什么要采用红黑树呢? 应聘者:可以加快检索速度,提升效率。 面试官:效率如何评估,具体复杂度是怎样的? 应聘者:在链表中查询的时间复杂度是 O(n),如果转换成红黑树,时间复杂度降为 O(lgn)。 面试官:这个 O(lgn) 是怎么算出来的,能解释一下吗? 应聘者:...
鉴于上述情况,即便是刷题,也一定要认真刷,刷出水平,做到知其然且知其所以然。当你达到这种水平,知识点是否来自刷题也就没那么重要了。
面试并非单纯的知识点问答,它也是一场交流,面试官通过提问考查应聘者是否符合岗位要求,应聘者也可以通过提问了解公司的一些情况,某种程度上,这是一个双向选择的过程。对于应聘者,面试有一些事项需要注意,它们会影响面试官对你的判断,进而影响面试结果。
.......略