Ef97ebcc235e21b32332512e3d1684a6
面试完 BATTMD 等数十家公司,我想谈谈关于 Android 面试那些事

1. 本文目的

笔者将在本文中就Android开发工程师这一岗位,结合自己最近跳槽的经历,谈一谈自己对于面试的一些看法,希望能帮助到正在跳槽中的你们,也给自己的金三跳槽之旅划个圆满的分号。

注:本文适合工作三年以内的职场菜鸟观看,尤其针对想从小公司到大公司(更准确的说,是从普通公司到优质公司)的情况,大神或骨灰玩家可以关掉了。

2. 背景介绍

2.1 个人经历

抛开背景谈面试和offer是容易误导观众的,所以首先大概说说自己的情况供大家参考,某业内知名211本硕(不提母校名字,不给母校丢脸),计算机相关专业,毕业后在北京某央企工作两年(不要质疑我的选择,我不后悔),一直从事Android开发的工作,工作经验两年,开发经验三年,不是大牛,且一度对移动端开发产生质疑,后来重拾信心。

本人大概从过年前一个月也就是17年底开始抽空准备面试,年后3月1日开始面试,到现在刚好一个月,前后总共面了有十家左右的样子,有BATTMD中的,也有老牌二三线互联网,也有其他小规模ABCD轮创业公司,最后拿到offer的有作业盒子、知乎、阿里、网易,最终选择了网易。

2.2 谈谈Android

然后谈谈Android目前的一个市场行情吧,因为整个移动互联网时代进入了下半场,很多APP都已经享受不到随着移动设备普及率越来越高所带来的红利了,所以从0开始的团队和APP数量大幅减少(我指的是中型以上公司里),大部分都进入到了一个稳定迭代的状态,所以较为成熟的APP团队少有人员扩张的需求,基本上放出来的岗位都是人员流动带来的空位。因此这对于工作年限很短的我们确实不是什么利好。可以说一般大厂招聘的都是高级的title,不说独当一面吧,至少是希望你来了就能上手干活的,不需要太大的培养成本的。当然他们对于高级的定义基本上就是在大厂两到三年左右的,而对于非高级的Android开发工程师,其实他们从学校里招就足够了。

其实细想,这难道不是一个合理的招聘逻辑嘛?说实话我还是很看好Android的现在和未来的,尽管我耳边也经常听到什么培训班出来就能写APP(笑话,培训班出来啥不能搞),我也会经常自嘲Android程序猿没人要了,但实际上很多大公司想招一个合适的人真的挺难的,这个市场上人多,但机会的总量也多,而与此同时真正的人才比例还是很低的,所以这不就是机会嘛?或许只要你比别人努力一点点,你就能得到别人得不到的,与其他职业相比,互联网圈子还是非常开放和公平的。当然你要说Android开发工程师有没有它的瓶颈,当然有,但至少貌似我们现在大部分人的水平还不够资格去谈论。大家都是搬砖的,搬哪种砖能挣钱是市场决定的,没有谁比谁更优越,互联网发展之快超乎你我想象。而其实当我们真正成为了一名资深的Android开发工程师或者任何其他工程师的时候,我们的视野会更加开阔,我们的技能树不仅扎根很深,而且已经枝繁叶茂,那时候现在纠结的问题或许都不是问题了。

3. 正文

我可能不会指名道姓地记录每家公司的整个面试过程和面试问题了,因为首先市面上有挺多同类型的面经了,大概翻翻即可;其次那并不能成为你去相应公司面试的一个功课,换句话说就是别人的成功不可复制,因为同一公司尤其是大公司的不同部门的面试风格和面试难度是不一样的;再细化到面试官,不同面试官,不同时间不同心情对不同面试者出的面试题也很可能是不一样的;退一步回来讲,其实面多了你会发现,技术面试相对而言还是比较死板的,对于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 简历型

top Created with Sketch.