一. 本文目的
笔者将在本文中就Android开发工程师这一岗位,结合自己最近跳槽的经历,谈一谈自己对于面试的一些看法,希望能帮助到正在跳槽中的你们,也给自己的金三跳槽之旅划个圆满的分号。
注:本文适合工作三年以内的职场菜鸟观看,尤其针对想从小公司到大公司(更准确的说,是从普通公司到优质公司)的情况,大神或骨灰玩家可以关掉了。
二. 背景介绍
2.1 个人经历
抛开背景谈面试和offer是容易误导观众的,所以首先大概说说自己的情况供大家参考,某业内知名211本硕(不提母校名字,不给母校丢脸),计算机相关专业,毕业后在北京某央企工作两年(不要质疑我的选择,我不后悔),一直从事Android开发的工作,工作经验两年,开发经验三年,不是大牛,且一度对移动端开发产生质疑,后来重拾信心。
本人大概从过年前一个月也就是17年底开始抽空准备面试,年后3月1日开始面试,到现在刚好一个月,前后总共面了有十家左右的样子,有BATTMD中的,也有老牌二三线互联网,也有其他小规模ABCD轮创业公司,最后拿到offer的有作业盒子、知乎、阿里、网易,最终选择了网易。
2.2 谈谈Android
然后谈谈Android目前的一个市场行情吧,因为整个移动互联网时代进入了下半场,很多APP都已经享受不到随着移动设备普及率越来越高所带来的红利了,所以从0开始的团队和APP数量大幅减少(我指的是中型以上公司里),大部分都进入到了一个稳定迭代的状态,所以较为成熟的APP团队少有人员扩张的需求,基本上放出来的岗位都是人员流动带来的空位。因此这对于工作年限很短的我们确实不是什么利好。可以说一般大厂招聘的都是高级的title,不说独当一面吧,至少是希望你来了就能上手干活的,不需要太大的培养成本的。当然他们对于高级的定义基本上就是在大厂两到三年左右的,而对于非高级的Android开发工程师,其实他们从学校里招就足够了。
其实细想,这难道不是一个合理的招聘逻辑嘛?说实话我还是很看好Android的现在和未来的,我也会经常自嘲Android程序猿没人要了,但实际上很多大公司想招一个合适的人真的挺难的,这个市场上人多,但机会的总量也多,而与此同时真正的人才比例还是很低的,所以这不就是机会嘛?或许只要你比别人努力一点点,你就能得到别人得不到的,与其他职业相比,互联网圈子还是非常开放和公平的。当然你要说Android开发工程师有没有它的瓶颈,当然有,但至少貌似我们现在大部分人的水平还不够资格去谈论。大家都是搬砖的,搬哪种砖能挣钱是市场决定的,没有谁比谁更优越,互联网发展之快超乎你我想象。而其实当我们真正成为了一名资深的Android开发工程师或者任何其他工程师的时候,我们的视野会更加开阔,我们的技能树不仅扎根很深,而且已经枝繁叶茂,那时候现在纠结的问题或许都不是问题了。
三. 正文
我可能不会指名道姓地记录每家公司的整个面试过程和面试问题了,因为首先市面上有挺多同类型的面经了,大概翻翻即可;其次那并不能成为你去相应公司面试的一个功课,换句话说就是别人的成功不可复制,因为同一公司尤其是大公司的不同部门的面试风格和面试难度是不一样的;再细化到面试官,不同面试官,不同时间不同心情对不同面试者出的面试题也很可能是不一样的;退一步回来讲,其实面多了你会发现,技术面试相对而言还是比较死板的,对于3年以内的面试者,经常被问到的问题其实也就那些,后面我会提到。
所以接下来我将结合我的面试经验,概括地谈一谈整个面试前后过程中需要注意的一些点。
3.1 面试前
毋庸置疑,求职者在面试之前必须做好充足的准备,我认为有以下几点是重中之重:
3.1.1 完善简历,以及对简历内容做充分准备
可以说简历内容不在于多而在于精,尽量让每个字都有信息量,而且千万要中肯,比如说对于三年以内工作经验的,还是不要用「精通」这两个字了,会让面试官觉得你很浮夸。
坦率地讲,好的简历不仅是你得到面试机会的前提,更是后面拿下这场面试的基础。在面试中有两种最常见的形式,一是抛开简历问问题,二是盯着简历问问题。如果是第二种情况,那一份好的简历可以引导面试官去问你简历上的东西,如果你每一条都能讲的头头是道,无疑对于面试是非常加分的,而那些写在简历上你却说不出个所以然或者说忘记了的,还是最好不要写了。在写简历的时候就应该一边写一边想我这样写那面试官肯定会问XX的,所以这就需要你对于简历中体现的项目的重点难点或知识点和闪光点进行一定的准备,最好能回过头来看看当时写的代码,至少也要能自圆其说。
3.1.2 系统地复习基础知识
坦白地说,即使是大厂,大部分人平时也都纠结于业务代码中,对于基础知识难免会有生疏,因此在面试前系统地进行复习还是很有必要的,尤其对于根基不牢或者说背景一般的同学,你要是基础再不扎实,就很难在跳槽中更进一步了。
对于Android程序员来讲,所谓的基础知识,最直接的就是Java和Android,然后就是算法、数据结构、网络、设计模式。说到这里说一些高频考点吧,Java:多线程知识(锁、线程池)、内存模型、HashMap等;Android:线程间通信、多进程、View绘制、触摸事件传递等;算法:链表翻转、快速排序、二分查找、栈相关、int翻转、数组合并、LRUCache等,其他:MVP、单例、HTTPS等等。其实都是些烂大街的问题,但你还真别觉得你都会,有时候很基础的东西是可以问的非常深或者场景化的,这种时候难度就上来了,如果你能把基础的东西理的特别清楚,那无疑是加分项。
3.1.3 投简历
其实投简历也有很多要注意的,比如说如果你不够自信,或者面试经验不足,或者对市场不够了解,还是先降低难度从小厂面起吧,千万别上来就面大厂,很容易失败的,等慢慢找到感觉再去面你特别渴望的公司。
还有就是珍惜每一次机会,尤其是你要面一家比较向往的公司的时候,一定要打探清楚且准备好再去面试。举个栗子,你在投递岗位或者让别人帮你内推的时候,一定要尽可能了解你所投递的岗位的JD或需求和你是否基本匹配,千万别因为面了一场注定会失败的面试而导致失去了短期内再去这家公司其他更匹配的部门或岗位面试的机会。因为有的公司面试失败了是有冻结期的,说多了都是泪,为此错过了一个好的机会。
3.1.4 面试官怎么想
其实在面试之前,不仅求职者要做准备,面试官可能也会做准备,体现在两个方面,一个就是他想招一个什么水平的人,放在大公司,一般可以直接量化:p6、T5、2-3;另一个就是他估计你是个什么水平的人,稍微靠谱点的公司,面试官在面试你之前至少会看下你的简历,有的比较负责的会直接根据你的简历来提前准备好问题。
不要小看后者,同样给予了面试的机会,其实面试官对你是有一个预判的,一个9分的期望值,面试中的问题你答的OK甚至有亮点,那面试其实就是一个面试官印证自己想法的过程,那就是「嗯,和我想的一样,这个小伙子果然不错」,而你拿下面试也是松松的了;而一个6分的期望值,面试中你答得的普普通通,没有答出花儿来,那其实也是面试官在印证自己的想法,那就是「嗯,我就知道,果然水平一般般,没能超出我的预期」,那这种的面试往往会以失败告终。
那接下来就来谈谈面试吧。
3.2 面试中
面试其实说白了就是一场show,面试者需要在短短的几十分钟时间内尽力去「卖弄」自己,为自己求得一个好价钱。那么同样的水平,一场成功的show会让面试官觉得你是神,相反一场失败地show之后,面试官会觉得你一无是处。也就是说,其实面试是充满了不确定性的。
说说常见的面试套路吧,有以下这几种:
3.2.1 简历型
常见于一面或者二面,面试官会对着你的简历一条条来问,说实话某种程度来说这是面试官认可你的项目经历的一种体现,因为你的简历好像让他产生兴趣了。正如前面所说,只要你简历不给自己挖坑或者不是看起来槽点满满,并且对于写在简历上的东西都能自圆其说,那么就问题不大。
3.2.2 全覆盖型
常见于一面或二面,面试官会抛开你的简历,一个知识点接一个知识点的和你聊,从Java到Android,从网络到算法,中间聊到兴起还会让你写出来,来证明你是不是真的懂,还是只是嘴上谈兵。这种一般主要考察你的知识广度,当然也可能穿插着往深了问来考察深度。这个没什么好说的了,基本功扎实并且说起什么来都知道点就一定没问题。
3.2.3 场景化型
常见于二面,面试官会向你描述一种场景或者一个问题,可能会给一些约束,让你去实现或者解决。这种其实是比较有难度的,尤其对于某些知识点的掌握只是停留在博客上面的同学。这种面试会充分考察你对某个知识点或技能的掌握深度以及你解决实际问题的能力。说实话应对这种面试,最好的办法就是给出你的答案,如果实在没有完整的思路,起码要做到多和面试官沟通,把能想到的东西尽可能多的讲出来,有时候面试官也不会步步紧逼,只要听到一个大概的思路就够了。
其实前面说的三种面试场景都属于你认真准备就能过的,后面的两种就属于逆风局了。
3.2.4 呵呵型
面试官会问你一些问题,这些问题可能比较大众也可能比较偏,然后面试官的态度可能会比较好,你就放松了警惕,说的比较简单,三言两语,甚至对于自己了解的比较少的就直接说了不熟,面试官也不会往深了问,只会发出肯定的「嗯嗯」声。反正就我经验来看,这种面试面试官对于应聘人员的要求可能比较高,因此在面试前或者上半场面试官就基本给了你一个6分的分数,本身就对你不是很感兴趣了,在后面的面试中也只是来进一步印证他对你的评判或者例行公事走完该走的环节,最后把你pass掉。说实话这是一个最为被动的面试场景,面试官本身就对你有一些偏见了,可能因为你的背景一般,可能有某个他认为必须掌握的知识点你不知道,也可能他想招某个专长的但你不是,然后你也没办法把他问的一些普通问题说出花儿来,因此多半结果会呵呵了。我认真想了下,这种面试本身胜算确实小,那想要突破困境,你要变得更主动一些,talk more,把你真正的闪光点show出来,挽回他,当然,很难。
3.2.5 diss型
顾名思义,你在回答了几个不知道不清楚或不熟悉之后,面试官开启了疯狂diss模式,具体体现在说你表达有问题,或者否定你前半生。这种的吧其实一般不会是什么压力面,就是面试官不爽,可能觉得你浪费他时间了或者他生活不和谐心情不好?那这种时候面试结果多半已经出来了,求职者能做的就是尽量保持你自己的风度和态度,完成这场面试,然后过后从自己身上找问题。
综上,其实面试的状况有很多,但我觉得一个最基本的要素是你要保持一个好的形象给面试官,包括衣着、谈吐、不要有小动作。就像我曾经面试过一个人,有一个让我哭笑不得的小动作,那就是「竖中指扶眼镜」,一场面试二十分钟他可能对我竖了二十次中指,这个我不知道别的面试官会怎么想,反正在我这儿是没门儿,这辈子都没有。。唉,不知道那位哥们现在过得如何。。
另一方面来说,面试一定是一个双向选择的过程,彼此都在选择今后的同事,面试官在面试我们,同时我们也在考察面试官、团队氛围、公司环境。说实话,我们能从一场面试中看到很多。因为我发现优秀或者成熟的公司,面试的流程是很规范的,包括从HR通知你面试开始,到整个面试流程,看的出来面试官是认真准备的,并且充分尊重求职者的。像那些面试全程玩儿手机、抠手指头或者让你等半天然后面二十分钟的,进去多半也是个坑。而如果你感觉没怎么问问题就轻轻松松发了offer的,那你又要对这个团队的技术水平保持一定怀疑了。
3.3 面试后
3.3.1 面试结果
通常,就我的经验来看,一面二面三面到HR面基本都是当天搞定的,如果HR面以前的面试官说「好,我没有问题了,你先回去吧,等通知」,「我们boss不在,那今天就先到这儿吧」的百分之九十是凉凉了,一般也鲜有公司会真的通知你面试没过的,冷处理的居多。
其实面试本来就是一个非常具有不确定性的事情,因为你永远都不知道面试官在想什么,比如有可能一场面试下来你自我感觉非常棒,但是就是没有下文,那没准儿他们HC已经发完了,但是又通知了你面试,那这种情况你再优秀似乎也没什么机会;还有的时候你认真准备了面试,但发现最后面试的过程根本不是你想象的那样,面试官可能没几个问题就把你否定了,你认真准备的那些东西根本没有用武之地,他可能认为你就是个辣鸡,那种失落感非常难受;当然也会有其实你面试的感觉并不怎么样,有好些问题回答的并不好,但还是顺利拿到了offer,这个时候可能你运气好部门急招,也可能你身上的某个优点(比如年轻、比如踏实、比如背景好)被面试官抓住了。
总之面试就是要不停地面对失败,没关系,收拾心情,重新出发吧。
3.3.2 谈谈薪资
当然,如果顺利到了HR面,那就要谈薪资了可能,这块儿说实话我经验不多,尤其当我准备跳槽的时候,因为我从来没有参加过社招,不太清楚现在准确的市场行情,而且对自己的背景有些不自信,对自己值多少钱这个事情心里没有谱。但其实经过后面不断地面试,我的期望薪资一直在不断往高提,提到提不动为止。
但其实现在想想,工作年限越短,大家的薪资差距越小,因此我们可以通过两个途径去了解市场行情,一就是我们可以去找学弟学妹了解一下目标公司目前校招的一个行情,据我所知,在我毕业这几年校招的薪资也是水涨船高的,千万别还是停留在一个自己当时毕业时候的认知;第二呢就是有比较熟的朋友,在你的目标公司或刚刚跳去了你的目标公司,问问他们的一个薪资情况或者委婉点问问他们你该要多少。还有就是因为你是跳槽,和那些毕业之后在你目标公司一路走来的同学相比,一般你要的薪资和职级至少不能比他们低,因为普涨和职级涨薪的涨幅始终是比较低的,而大幅涨薪始终是跳槽的重要意义之一。
对于定薪资,其实招聘方仅仅根据几个小时对你的面试是很难做出一个非常准确的评估的,那么在给你提供薪酬的时候,其实多半会首先参考你已经到手的offer的情况,然后考虑你上份工资,再然后结合他们以往的招聘经验以及你的面试表现来给你定价。尤其是你已经到手的offer,这个是摆在招聘方面前最直接的一道关卡,他们想要在众多offer中脱颖而出,那他们必须去匹配这个报价,除非他们有你已有offer提供不了的优势所在。
因此我的建议是,千万别被贫穷限制了想象力,在合理的范围内尽量往高了要,给HR一个压价的空间,一般优秀的公司很少因为你要的太高而直接否决你的,凡是能走完整个面试流程的,说明面试官对你是非常认可的,希望你加入的,至少会给你一个他们能提供的薪资,再让你做决定。当然不靠谱小公司就不一定了,他们或许就想招一个10k的,高于这个直接pass也不是没可能,或者也有HR同学因为莫须有的罪名把你卡掉的,摊手,我们本文针对的目标公司绝对不是这样的公司。
3.3.3 谈谈offer的选择
这个确实是很纠结也很重要的,当几个offer摆在你面前并且都有吸引力的时候,你35岁、45岁甚至55岁什么样可能还真是你今天的选择决定的。
引用扔物线大大的几句话吧:「先想好你想要什么,然后从里面选出符合要求的」,「一般不会存在这个最好的选择,都是分人了,而且每个人也分时候」。
我没办法给出建议,大家细细品味吧。
四. 结束语
其实整个求职的过程是一个不断认清自己的过程,所以心态是最重要的,我们要把面试当成一个学习和成长的过程,大部分人能得到的结果是和我们过去的努力程度直接挂钩的,所以永远不要抱怨什么,我们今天的现状往消极了说是在为过去的选择买单,往积极了说还要感谢那个曾经努力过的骚年。
说了这么多,其实所谓面试的技巧只是求职中的「术」,而我们技术人,归根结底还是要努力提高自己的姿势水平,这才是我们整个职业生涯发展中的「道」。
这段时间我几乎把全部精力放在了求职上,其实面试多了也挺累的,甚至会觉得空虚。回过头来想想生活呀不应该只有眼前的工作,更不该只有面试和跳槽。我们通过自己的努力,得到想要的生活,实现个人价值,才是我们应该去坚持和追逐的东西。
最后,如果大家有什么问题或者观点可以留言讨论,祝大家都能拿到满意的offer吧。
最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿~
群号:925019412