近期Android面试经历总结

看一看自己已经有两三个月没有更新博客了,其实一开始的时候,主要原因是加班严重,自己业余时间都用来做一个小APP了。然后公司依然每况日下,工资拖了两个月(我真的感觉自己已经够能坚持的了!)。于是自己也开始加入到找工作的行列了。首先自己是在某勾网投简历。搞的我真的是快怀疑人生了。每天都投一些公司,但是都石沉大海。然后我觉得是自己的简历写的有问题。然后找各种朋友帮忙修改,然后又持续在某勾网投了一个星期。纳尼?纳尼?纳尼?难道看我只有半年工作经验?然后给朋友抱怨了一番。被安利去了其他的招聘网站。面试也终于是步入正轨!就这样白白耽误了我2个星期的时间。

因为自己刚刚毕业半年,其实很多公司都有工作经验限制,大公司的话简历确实不好过。但是创业公司不怎么care这些东西。自己前前后后面了5,6家公司吧。所以还是建议各位同学,不要像我一样浪,毕业就跑来创业公司,想要独当一面。我来捡几家我觉得有代表性来说吧。

网易

首先在被某勾网整的精神崩溃的时候,因为有朋友在网易做HR,所以简历给过了(其他BAT应该都没办法过简历)。然后面试:(BTW:到现在为止我觉得网易的面试是比较有水平的,问题由浅入深,慢慢触及到自己知识的底线。)

第一面面试的内容大多还都是简历上写的相关的内容。

  1. 自我介绍:简单介绍了一下自己,还有自己做过的OpenGL视图库和骨骼动画播放引擎讲了一些。但是面试官应该是不怎么熟悉这些的。不过也算突出了自己的特点了。
  2. 然后应该是想看看我基本界面编辑会不会,然后问了常用的布局有哪些?这个问题很简单嘛,自己把FrameLayout,LinearLayout,RelativeLayout讲了一通,然后又讲了Coordinatorlayout和ConstraintLayout。
  3. 然后他问了开发是使用什么工具,怎样调试程序,和解决bug的。自己把日常的做法讲了一遍。包括各种断点的使用方法。内存泄漏的检测方法。内存抖动如果查找到原因和如何使用TraceView来进行性能调优的。然后又问了一些具体的操作方法,估计是想看看是不是我编的吧。
  4. 然后开始问架构的东西。主要是MVC和MVP,当然更主要是MVP喽。然后自己把MVP的架构讲了一下,以及在项目中遇到的MVP架构不合理的地方,和自己认为对这个不合理地方的改进。然后讲了自己针对公司项目的MVP架构,写的Android Studio插件。
  5. 然后问了我简历里写的技术细节的东西。比如屏幕适配。项目中为什么使用OpenGL。礼物动画为什么使用SurfaceView,它与View有什么区别等等。
  6. 最后先让我说我看过的一些Android的源码,然后我讲了一下Activity,PhoneWindow,View他们的关系。还有Touch事件的分发过程,自己还说看过Handler消息传递机制,不过他没有让去细讲,估计听了前两个讲的挺细的觉得够了吧。然后他又问了一下Activity从Launcher的启动过程。这个自己明确表明没有看过源码,但是自己也简单的分析了一下可能过程,感觉面试官还算认可。之后查询相关资料发现自己分析的有些地方还是不对的,而且还有很多细节没有分析到(囧)。

整个过程面试下来感觉还是不错的。面试官的问题由浅入深。而且针对自己项目细节都有针对的问题。面试到最后面试官说之后会有主管给我面试。我觉得一面应该是过了吧。然后收到回复是面试哥觉得我去这个部门太委屈了,因为是游戏辅助APP,然后让HR姐姐把我推荐到云音乐,非常感谢面试哥,人真的蛮好,也谢谢HR姐姐帮忙推荐其他部门。但是无奈云音乐并不缺人,但这里也不要我了……不过对方招聘岗位本来就是高级工程师。可能感觉我经验还是不够吧。

某软件公司

这个软件公司相对于网易的面试要简单一些。主要问题偏向于解决他们项目中面临的问题。

  1. 自我介绍:当然这个还是那些内容嘛。
  2. 他又问了一些基础的东西。这个我也记不大清了。
  3. 然后又问了MVP架构的东西。
  4. 然后他开始问一些问题,应该是他们项目中遇到的问题。讲了一个需求“要在手机上显示一个表格,表格可能100*100,要在这些表格里显示数据,手机屏幕一般只能显示4列,这个要怎样做。是使用View用Canvas绘制上去,还是使用ViewGroup添加View进去?”。自己给出了使用RecyclerView然后自定义LayoutManager的方式实现(因为自己这样做过嘛,详情可以看我的把RecyclerView撸成马蜂窝)。他听了还是比较满意的。
  5. 还有一个是手机和平板适配的办法。这个其实很简单嘛。Android官方有很好的方案。layout-swxxx+Fragment嘛。然后接着问了Fragment使用的具体方法都有哪些。这个也不难嘛。什么Fragment+FragmentAdapter+ViewPager,或者使用FragemntManager来通过Transaction来操作Fragment等等。
  6. 最后问了一下工作模式。一个需求拿到手,要怎样把需求做出来。这样的工作流程是怎样的?这个自己从需求分析到与其他部门商定通信协议,然后再分析需求要注意的case,最后再实际编码,都讲了一下。他也比较满意的。

整体下来,这个公司偏向于应用和解决问题的能力。具体的原理没有去问太多。过的也是挺轻松的。不过这里可以看出无论是大公司和创业公司,对MVP都很有比较高的要求的。还有就是简历中自己写的东西一定要能讲出个123。这个家公司还是比较注重人才的。开的薪水还是不错的。但是最后我聊了聊工作内容,自己并不是很感兴趣。感觉对于自身的成长帮助不是很大,所以并没有准备去。

某创业公司

这家创业公司的面试其实只能算是缘分吧。可能就是传说中的非常适合吧。他们是做VR的,所以比较关注我的OpenGL技能(其他公司都对我这一点不以为然)。而且他们会去做各种动画效果,所以也知道骨骼动画是个什么东西。而我从零开发了一个骨骼动画引擎,他们也知道这个的难度,虽然是个2D的,但是原理大致相同,自然也是十分青睐。而且他们是要做SDK,而我也有开发SDK的经历。

主要问的问题都是针对于OpenGL和我写的骨骼动画引擎和细节,还有SDK的设计这三方面。在这个面试过程中也感受出了他们公司技术还是可以的。因为自己搞OpenGL事件比较短,理解还不是很深,面试哥从OpenGL怎样工作的,和GPU怎样工作的给我讲了一通……在理解深度上被完爆……

之后几轮技术面差不多同样内容。最后就是创业公司的尿性嘛,副总裁、CEO随便面面就OK了。

其他公司

其他还有几家公司。

  1. 其中一家倾向于ROM开发,也就是Framework开发工程师,我觉得问的问题对于我们应用的开发的没有参考价值。简直不是一个世界的!
  2. 还有几家外包公司,都没有技术面,做个笔试题OK了……
  3. 还有一家公司昨天面试的,上来问了一个充满杀气的问题:你最擅长什么!听到这个问题,我的第一反应是一脸懵逼!第二反应:这是要怼我了!无论回答什么他都会在这个方向问到死。可能一个简单的API,记不住都会让他认为,这么简单的东西你都不会还说擅长?而往往就是一些简单的API,谁会去背那些东西。不过遇到了我也是认命了!然后我就说了个UI绘制方面。然后他又问了我在这方面做过的最复杂的东西是什么。然后我讲了自己做的OpenGL视图库和骨骼动画引擎。不过他好像并不怎么关心。应该是没做过OpenGL吧,也没做过什么复杂的动画效果吧,不知道要问什么。然后又问还做过什么,然后我把自己做的自定义View说了一下,还有就是我的RecyclerView的马蜂窝布局管理器(一个自定义的LayoutManager)。但是这个过程中他愣是把我说的自定义LayoutManager理解成了自己自定义的一个ViewGroup!然后问的问题我都感觉不是我这个LayoutManager所能管的内容。然后弄了半天才发现,面试哥一直理解的有出入……真是囧!整个面试过程下来感觉天南地北。还有他问我用的OpenGL是用的什么容器?我说GLSurfaceView。好像他听成了SurfaceView,然后问SurfaceView和View有什么区别。一开始这里是我没有听清,因为紧接着他问的OpenGL在什么容器嘛,所以我把GLSurfaceView的工作原理讲了半天……面试哥听的好像也是云里雾里,然后才知道,他问的SurfaceView,然后我又把SurfaceView的讲了一通……整个面试我觉得面试哥和我都不舒服,所以我觉得应该不会过吧。

总结

面试下来也有些感悟吧。

首先,基础知识,这些都是在面试中必然涉及的问题。可能我上面并没有列点来具体说明,但是多少都有涉及。而且我即使列出了这些,你也不一定会遇到,其实这个范围太大了,所以自己要注意对于细节的追求。如果是要面试了,那么就自己找一些,都有很多篇文章来介绍这些知识点了。

其次的面试内容要取决于面试官了,我感觉大概分为三种面试官。

  1. 第一种是那种会根据你的简历来面试的。这也是大多数。
  2. 第二种会根据自己的需求来面试的。
  3. 第三种,根据你叼不叼来面试的。

针对于第一种我觉得首先是对自己的简历严格把关,写在上面的内容一定要可以说出123。对于程序员来说语言表达能力比较差,比如我就是这样。所以自己在面试之前先试着说一说,因为面试过程你只能通过说来让对方知道你所做的东西,你能做出来的一定要能说出来。据说有些人没做过也能说出来。不过我是没有这个能力。

针对于第二种其实要看自己的应变能力。因为你很难预测到对方可能会给你提出怎样的问题。有的时候你一听到问题没有办法马上想到解决的办法。那么这里有一个小技巧,你可以说没有听清楚,中间有一点信号不好,让面试官重复一遍问题,来为自己争取思考时间。如果还没有想出来,那么你可以先分析提出的问题,然后渐渐接近问题的答案。

针对于第三种,我自己之前也没有准备过。第三种面试官非常喜欢问的问题是:你擅长什么?你在哪方面有过人之处?你对哪方面比较精通?其实遇到这种面试官就心中默念阿弥陀佛吧!因为这种面试官要求非常高。他希望的是你对一个领域研究的非常深入,你一个人可以解决这个领域所有的问题,而且希望你是在这个领域做出过一定突破。比如我们常用的什么加载库,你优化它,结果快了多少,就是1%都可以。这个可不是一般的人能够达到的。而大多数情况下我们都是各个领域都涉及一点,虽然可能看过源码,有一定理解的深度,但远达不到可以解决这个领域所有问题的程度,更没有这种技术突破。像有些第三方库源码我也去看过,但自认为达不到他们所谓的擅长和精通。不过针对于这种面试官我觉得也是值得准备一下的。不然自己真的是会一脸懵逼。有的时候就是遇到这样范范的问题,你就已经不知道要如何说话了。然后说错一句话就会被各种完爆,脑海中回响各种 Enemy is Legendary!之后几天估计都要怀疑人生了……那么下面说一下准备方法吧。不过自己也是刚刚遇到这种面试官。也没有确定是否正确。也是给自己的计划。

  1. 选一个自己相对比较擅长的领域。
  2. 基础要 背!平时我并不太去留意要记住各种API,但是这里就是要背过。不然面试官就会想“这么简单的API都含糊不清还说擅长?”就是真的面试的时候记不清了,也不要打磕,要非常自信的说个差不多的,不要说“好像……”这样的话。要的就是自信,因为这个API面试官也不一定记得那么清楚。不过自己能背过才真的有底气。
  3. 试着去了解这个领域市面上的技术。一般的话就是一些库或者框架。这里要记住,不要急着去看源码,要先掌握这些技术都有哪些优缺点,尤其是缺点!因为我们经常因为一个库有什么优点而去使用它,但是缺点往往是我们容易忽略的地方。而知不知道这个库的缺点,是你能不能驾驭这个库的一个关键。
  4. 如果有时间的话,研究其中一个众所周知的库的源码。并试图找到它缺点的原因,并找到其解决方法。当然你如果正要准备面试了,肯定没有这个时间。那么就找一些现成的相关的文章来看看吧。然后记住。

结果

近期的面试过程就是差不多这个样子。而且对于我这种刚刚毕业半年,很多公司连简历都比较难过。所以也没有一些非常大的公司的面试机会。因为大公司社招和校招分的很清楚。最终自己决定去那家VR的创业公司了,原因有以下几点:我本放荡不羁爱自由,第一当然是兴趣,第二呢希望补充Android方面NDK的技术,第三希望可以做一些OpenGL领域更深入研究,而VR正是对其要求非常高,自己也想去挑战这方面的技术瓶颈。下次面试的时候可以非常有底气的回答最擅长什么这样的问题。

最后我宣布,接下来正式回归博客日常更新!