我眼中的面试 (转)

转载自SegmentFault 我自己的文章

  最近在给公司招Android开发人员,面向两个方向,Framework和App,近一个月的时间以来,总体特点是Framework方向近乎无人问津,而App方向则简历“泛滥”,想招个靠谱的伙伴真的不容易。最近的工作时常被频繁的面试安排打断,面试之余,想总结一下这段时间的感受。尽量从面试流程的各个环节都有一些涉及,当作回忆也好,经验也罢。当作给自己的沉淀吧。

1. 简历的投递

Framework方向

  基本没有“正规军”出现,这也在我的意料之中,这个方向的人材稀缺,基本都待在大厂里不出来,因为对于系统级别的定制化改造真的是“搞事情”,资源的投入是巨大的,大厂都不一定搞得好的东西,何况对于一个像我们这样的小作坊呢。因为也不是紧急的需要,所以和领导确定的方案是花多一点的时间,放长线,广撒网,另外,利用人脉关系从大厂争取捞人。

App方向

  不得不先提一个小插曲,根据业务的进展,先放出的是Framework方向的岗位招聘,每天收到的简历寥寥无几,领导(领导不是很懂Android)问我,Android就这点人?我笑而不语,领导你等着。App岗位一开放,每天数倍的简历压过来,领导没再说什么了,之前和我一起审简历的工作也不参与了。
  两个印象,一个是现在是90后的世界了,另一个是女生们多了,这算是广大男同胞们的福音吗?

2. 简历的筛选

  大部分的简历还是那个老生常谈的问题,太千篇一律了,让人看了提不起兴趣的那种,顺带的水分也就不提了,各种精通~可能大家心里都有数。

太“简明”的简历会被刷

  简明到只有各种荣誉证书各种精通,却没有具体的项目介绍,想简明可以贴个作品链接啊,那些证书、精通的我们真的不太在乎,我们只希望能多了解一些你的工作经历,当然我们真的希望你能精通。

太“高明”的简历会被刷

  21岁5年Android开发经验,Sorry,我是遇上神童了吗?我hold不住啊!10年Android开发经验的,Sorry,我是遇上Rubin级别大神了吗?我只能膜拜,岂敢让您屈尊。

太low的简历会被刷

  简历毫无排版可言或排版混乱,让我有阅读困难的,Sorry,太出众了。不要求炫,但至少能达到平均大众水准吧,找个模板也行啊,都是出来找工作的,这几乎就是第一印象,你怎么就忍心让自己输在起跑线上?

3. 面试安排及回应

  团队目前比较小,于是领导干起了HR的活,因为还有后端前端的招聘,所以面试安排统一由领导来统筹,亲自给筛选出来的简历人员打电话邀请面试,赞一波领导。然而,那些没来参加面试而又没有通知我们的朋友们,不知道你们是怎么想的,答应的好好的,就算不来,也许你的临时日程和我们的安排冲突了,也许你有了更好的选择了,都没关系,来个电话或发个消息稍加说明,我们都能理解,我会给你安排新的时间或祝你新工作愉快,未来有机会再合作。信誉在哪?换位思考一下,我不知道,朋友,你还会不会这么做。与人方便即是与己方便。

4. 面试

  对于面试,想说多一点,特别是技术点

Framework方向

  这个方向的内容如果要问深度的那就要多深有多深了,鉴于收到的简历和来面试的人很少,我把条件放宽了许多,尽量从靠近app层的知识面入手提问。

  1. ART、Dalvik和JVM的关系及区别是什么?这是道送分题,并不是真的要说出它们的深度区别,但如果你不知道ART是什么,我觉得你不够关注行业发展,靠这个平台吃饭,不关心它,怎么都说不过去。
  2. 例举一下Android系统级服务,在App层一般都用过哪些?如何实现一个自定义的系统级服务?渐进式的问题,后边的有难度,如果没有Framework定制经验或没有研读过系统源码真的不好回答了。
  3. Binder机制。难,基本个大概的概念也没有多少个人说的全的。
  4. Launcher的实现。并非只有manifest里的launcher配置,其实要是能回答PackageManager、ActivityManager对应用包的管理和应用进程的管理,会有加分,因为有了这些,才算是个基本能用的Launcher。
  5. 系统级app和第三方应用级app分别在什么目录下?一个第三方的app能否直接放到系统级app目录下而又能正常运行?纯经验题,如果没倒腾过ROM,基本回答没戏了。
  6. 能不能单独编译一个系统级应用?ROM编译环境配置及编译脚本题。
  7. JNI,共享库和静态库的区别和使用场景,JNI中C/C++和Java相互调用各自使用的机制是什么?偏app方向的题了。
  8. 如何限制第三方应用安装?
App方向

  Android高速发展了快十年时间,平台软件开发现在已经到了各种框架、轮子满天飞的时代了,给应用软件的开发带来了极大的便利,我也在用别人的框架和轮子。但我不太喜欢在面试中听到“这xxx功能用框架实现就好了啊”。我们的职位需求明确了两年以上的工作经验,如果你这两年了还只会用框架而又对框架说不出个一二三,那是不是不那么对劲?更别说张口闭口就百度一下了,我还会谷歌呢。相信现在面试的基本也都刷过那么几套面试题、几本xxx宝典,但一些经验并不能靠刷题能刷出来或者能理解牢靠的,所以,这方向的面试我喜欢问细一点的问题。

  1. Activity建立在哪些窗口组件之上?顺带涉及View的事件传递问题。
  2. 什么情况下,Activity的onNewInstent()方法会执行?Activity的启动模式相关。
  3. Activity A使用startForResult启动Activity B,B什么都不做并返回A,A中的onActivityResult回调是否会执行?
  4. Fragment能否不依赖于Activity存在?简析一下Fragment的栈管理。
  5. 能否将一个Activity放到系统的最近任务列表里,独立于宿主app任务卡之外?
  6. 对于同一个Service,在被start启动之后还能不能被bind?
  7. Service有哪些派生类?这些派生类的使用场景是什么?
  8. Service与其它组件之间的通信实现方式有哪些?
  9. View的post(Runnable r)方法里,r会带来一个新的线程吗?多线程相关。
  10. 在非UI线程中使用Handler需要注意哪些问题?
  11. 自定义View时有哪些重要的方法,它们的作用及执行顺序是怎样的?
  12. 如何单独对ListView上的一个item进行更新?
  13. 简析一下大图片的加载处理。
  14. 设计师只给了一套1280*800的UI图标注,如何进行其它分辨率尺寸屏幕的适配?
  15. 6.0系统新权限机制的解决方案。

  你们精通的开源框架,问题来了

  1. EventBus的机制是什么?和Handler的区别怎样?
  2. RxJava的机制是什么?
  3. Butterknife的机制是什么?
  4. Okhttp是基于HTTP连接还是Socket连接?
  5. 例举一种ORM框架,说说它的优缺点。

  如果你写着精通各种框架,而上面的问题又回答不上来或者模棱两可含糊不清,只一个劲的说这些框架很方便你用的非常遛,那我认为你和我精通的没什么区别,我精通Windows, Mac, Linux系统电脑的开关机,还精通C/C++, Java, PHP, Python, Ruby等的书写。
  就算框架横飞的今天,Android应用开发还是离不开基础四大组件、线程进程间通信、View处理(UI、各种事件)、数据存储消费、网络通信、平台特性碎片化适配等这些基础的原理,框架也都围绕着这些模块来建造,万变不离其宗,知其然也要知其所以然。
  题目还有很多,比如以上还未列出Java部分的题,都不算什么太高明的面试题,不能全部例举了,不同的人根据不同的经验及具体项目进行提问,一般面试过程前15分钟即可分辨一个面试人员能否达到符合条件需求,所以,如何在这个时间段内最大限度的表现自己的能力很重要。

5. 面试评估

  评估的因素其实会有很多,临场发挥因素,抖腿、眼神飘忽、回答声音低小、遇难题岔开其它话题等,都是不好的临场表现。技术面的方向及深度因素,术业有专攻,面试题答不上来不代表就什么都不行,面试官也有自己的业务方向考量。这里,还想说一点是,有些朋友过来像是纯粹为了面试而面试,并不关心公司是做什么的,我们有官网,招聘启事上也有相关说明,然而问起时却一头雾水,或者完全不知道公司的业务和产品,也是比较尴尬了,没有用心准备一个面试,明显会被减分。即便真的不关心以后要做什么,也总得知道一下想加入的公司大概是怎样的,要不,这简历投递的意义是什么?

6. 面试调整

  我们面试基本有两轮,过了我的技术面,领导会接着再面,两面都过了才有可能成为以后共同的伙伴,所以,我也会倾听领导的面试反馈,调整我的面试要求和尺度,毕竟新伙伴是给整个团队找的,尽量能选到与团队气质符合的伙伴,所以,不光是技术面,更是综合面的考量。倾听反馈,做好下一次面试,节省领导的时间,也是节省自己的时间。

7. 面试总结

  以上,是这段时间对面试的一些拙见,无所谓干货,纯个人感想,找一份满意的工作不容易,找一个对味的伙伴不容易,且面且珍惜。有一个Framework方向的小伙感觉挺可惜的,做Android智能手表系统级软件定制两年时间,一直有机会接触Framework层,但上边的那些基础题都没有答到点上,问他为什么会这样,他感慨太忙了,基本只是在做老板给他安排的那些重复性的软件移植适配工作,Framework有其它同事负责,他就没什么关注了,如今出来了可就不一定那么好的机会再去研究了。小伙子人很谦诚,如果我们现在是大公司,可能我会选他,可以培养,可眼下,只好放弃了,祝愿他接下来找到合适的机会。忙是个客观理由,不是个主观借口。眼界的开阔不应该羁绊于踌躇的当下。所以,标榜“太忙了,顾不上学习新东西或其它东西”、“那些东西只有用到的时候才去搜索找方案”的朋友,好好准备,再出发吧,希望你不只活在搜索引擎里。
  我其实也挺浮躁的,为了尽快招到帮手,一天多则可能会参加主持六七场面试,对精力是很大的消耗,会在某一些场次中出现一些毛躁的内心情绪而影响正常的提问评估。面对面的你和我,折射了一个行业的现状。
  我也有自己的目标,不久的未来,就会离开这个城市,投身于新的环境,可能意味着要从零开始,也将会由面试官变成被面试者,接受别人的考察评判,要怀着敬畏的心。
  这篇文章,献给我自己,如果你正在找工作赶着面试或者正在面试别人,看到这篇文章,能提不同的意见,也是最好不过。