我入坑Android
已经三年有余了,期间被别人面试过也面试过别人。在被不合格的面试官面试过也做过不合格的面试官之后,我总结出了作为一个合格的Android
面试官应有的套路:
Java 基础知识和 Android 基础知识 对于刚毕业或刚入行的求职者,考察基础知识不仅能出不判断他的工作能力,还能推测出他今后很长一段时间的发展潜力。一个一口咬定“ ArrayList 和都是 List 的子类, Map 是 HashMap 的父类”的求职者基础知识一定不扎实,一个连 Fragment 生命周期都说不清的求职者一定连懒加载都写不出来,一个一问三不知还嘴硬的求职者不仅不思进取而且自视甚高。 对于Java 出身的面试官,需要注意的一点就是不要用 Hibernate 和 EasyJWeb 等和 Android 无关的 Java 知识难倒了求职者之后再问一句“ Android 不是以 Java 为基础的吗?你怎么连这么简单的问题都答不出来?”
Android 进阶知识 对于有两年经验的Android 工程师,可以适当提一些进阶问题。最常见的进阶问题就是讲讲常见概念的原理,比如 Handler 的原理、 AsyncTast 的原理和 BaseAdapter 的原理等,讲不清楚可以基本断定此人完全是 4 个月的经验用了两年,做的都是 UI 层次的表面文章。很难相信一个不了解 Canvas 和 A 的程序员如何绘制出的千变万化的自定义控件,也很难相信一个说不清 Thread 间通信的人如何设计大文件分批次上传的方案。
常见的设计模式和架构 对于有三年及以上经验的Android 工程师,就要看他的编程思想是否达到看出天下编程语言殊途同归的高度。询问常见的设计模式和架构就是最好的选择。 最简单的问题就是“ Android 中有哪些单例模式的例子”和“ EventBus 采用了那种设计模式”;如果想深入一点,可以问问 Android 中代理模式和建造者模式体现在哪里;如果想进一步深入的话,可以问问单例模式的懒汉式和饿汉式的区别,或者问问三种工厂模式之间的区别。
简单的算法 在求职者疑似是培训生的时候可以穿插几个简单的算法问题,培训班“ 4 年本科 +2 年硕士 +2 年真实工作经验”的噱头在冒泡排序甚至递归面前都不堪一击。 因为Android 应用开发并不特别需要算法(用 FFmeng 给视频编解码除外),所以经验三年以上的 Android 工程师忘记了希尔排序等算法很正常。我建议不要用算法问题卡人,毕竟培训生蒙混过关之后也难逃试用期的天网恢恢,好人被冤枉的后果就噬脐莫及了。
技术管理、过程管理和团队乃至部门管理 一个技术人员很可能有除了写代码以外的其他能力,管理能力是其中最常见的。如果求职者曾经带过团队,甚至仅仅带过同一个岗位上的实习生,他的管理能力都值得考察。我甚至面试过可能成为我的领导的人,尽管最终了识破他的30 多岁嫌站着工作累去培训班学了 4 个月 Android 的厨师或者洗剪吹身份。 考察求职者的技术管理能力主要问他作为老大哥如何提升所在岗位其他人的技术水平;考察过程管理能力主要问他如何进行利用开源框架快速开发和分模块敏捷开发;考察团队乃至部门管理就要考察他组内不同岗位、不同项目组、不同部门乃至与老板和甲方的沟通协调能力,比如怎么解决老员工倚老卖老拖延进度的问题。
方向深度 常言道“术业有专攻”,不同行业对 Android 人才的知识深度的方向是不同的。如果你在一家生产物联网设备的公司,你要重点考察求职者对 BlueTooth 的了解;如果你在一家安全领域的公司,就要看他对反逆向和加密的了解;如果你在一家研究输入法的公司,就要考察他对手势的了解。与公司业务无关的冷门问题不是不可以问,对某一领域有深入研究说明这个求职者有钻坚研微、钩深索隐的钻研精神,对技术有持之以恒、锲而不舍的态度,可以很快掌握与公司业务有关的技术。
不该问的 诸如“ Android 怎么搞性能优化”和“ Android 怎么搞多机型适配”之类大而空泛的问题是外行面试官最喜欢问的,常常把多年经验的老程序员问得一脸懵逼,却被背过标准答案的培训生忽悠得一愣一愣——就好比真正的哲学家回答不出“人生的意义是什么”而传销经理回答这个问题却口若悬河一样。这两个问题可以分别改为“如何从网络、内存、磁盘的角度设计缓存”和“ .9 图放在 drawable 和 mipmap 下有什么区别”等具体问题。 互联网时代是一个瞬息万变的时代,与时俱进是开发者最重要的素质之一。过时的问题也不适合用来考察求职者的功底,比如“ SAX 解析 XML 有哪些优点”和“ TabHost 和 ActivityGroup 相比有哪些优缺点”等,这样会显得面试官是个故步自封的人。 极度偏、怪、冷且非死记硬背不能答的问题更不适合做为面试题,比如写一长串不带括号的运算符问返回结果以考察对运算符优先级的掌握等。用““回”字有哪几种写法”作为面试题只能筛选出迂腐不堪的孔乙己而埋没真正的人才。 最不适合在面试时提的问题就是少数服务端出身的面试官爱问的:“你们 Android (也包括 iOS 和 HTML5 等)除了写写 UI 还有什么复杂的?”此话一出面试官要面对的风险就不仅限于错失人才了。
让他向自己提问 面试是一个双向的选择,因此面试官也应该具备通过求职者向自己提问的问题来初步判断他技术水平和发展方向的能力。当然,如果他面试过程中对答如流,就不要问他“你有什么问题要问我了”,可能会被问得瞠目结舌而贻笑大方的。 如果他问你“你是如何协调与服务端及其他终端的关系的”说明他今后可以培养为项目经理;如果他问你“你是如何提升整个团队的技术水平的”说明他今后可以培养为技术经理;如果他问你“你是如何选择 MVP 和 MVVM 的”说明他今后可以培养为架构师。
Java 基础知识和 Android 基础知识 对于刚毕业或刚入行的求职者,考察基础知识不仅能出不判断他的工作能力,还能推测出他今后很长一段时间的发展潜力。一个一口咬定“ ArrayList 和都是 List 的子类, Map 是 HashMap 的父类”的求职者基础知识一定不扎实,一个连 Fragment 生命周期都说不清的求职者一定连懒加载都写不出来,一个一问三不知还嘴硬的求职者不仅不思进取而且自视甚高。 对于Java 出身的面试官,需要注意的一点就是不要用 Hibernate 和 EasyJWeb 等和 Android 无关的 Java 知识难倒了求职者之后再问一句“ Android 不是以 Java 为基础的吗?你怎么连这么简单的问题都答不出来?”
Android 进阶知识 对于有两年经验的Android 工程师,可以适当提一些进阶问题。最常见的进阶问题就是讲讲常见概念的原理,比如 Handler 的原理、 AsyncTast 的原理和 BaseAdapter 的原理等,讲不清楚可以基本断定此人完全是 4 个月的经验用了两年,做的都是 UI 层次的表面文章。很难相信一个不了解 Canvas 和 A 的程序员如何绘制出的千变万化的自定义控件,也很难相信一个说不清 Thread 间通信的人如何设计大文件分批次上传的方案。
常见的设计模式和架构 对于有三年及以上经验的Android 工程师,就要看他的编程思想是否达到看出天下编程语言殊途同归的高度。询问常见的设计模式和架构就是最好的选择。 最简单的问题就是“ Android 中有哪些单例模式的例子”和“ EventBus 采用了那种设计模式”;如果想深入一点,可以问问 Android 中代理模式和建造者模式体现在哪里;如果想进一步深入的话,可以问问单例模式的懒汉式和饿汉式的区别,或者问问三种工厂模式之间的区别。
简单的算法 在求职者疑似是培训生的时候可以穿插几个简单的算法问题,培训班“ 4 年本科 +2 年硕士 +2 年真实工作经验”的噱头在冒泡排序甚至递归面前都不堪一击。 因为Android 应用开发并不特别需要算法(用 FFmeng 给视频编解码除外),所以经验三年以上的 Android 工程师忘记了希尔排序等算法很正常。我建议不要用算法问题卡人,毕竟培训生蒙混过关之后也难逃试用期的天网恢恢,好人被冤枉的后果就噬脐莫及了。
技术管理、过程管理和团队乃至部门管理 一个技术人员很可能有除了写代码以外的其他能力,管理能力是其中最常见的。如果求职者曾经带过团队,甚至仅仅带过同一个岗位上的实习生,他的管理能力都值得考察。我甚至面试过可能成为我的领导的人,尽管最终了识破他的30 多岁嫌站着工作累去培训班学了 4 个月 Android 的厨师或者洗剪吹身份。 考察求职者的技术管理能力主要问他作为老大哥如何提升所在岗位其他人的技术水平;考察过程管理能力主要问他如何进行利用开源框架快速开发和分模块敏捷开发;考察团队乃至部门管理就要考察他组内不同岗位、不同项目组、不同部门乃至与老板和甲方的沟通协调能力,比如怎么解决老员工倚老卖老拖延进度的问题。
方向深度 常言道“术业有专攻”,不同行业对 Android 人才的知识深度的方向是不同的。如果你在一家生产物联网设备的公司,你要重点考察求职者对 BlueTooth 的了解;如果你在一家安全领域的公司,就要看他对反逆向和加密的了解;如果你在一家研究输入法的公司,就要考察他对手势的了解。与公司业务无关的冷门问题不是不可以问,对某一领域有深入研究说明这个求职者有钻坚研微、钩深索隐的钻研精神,对技术有持之以恒、锲而不舍的态度,可以很快掌握与公司业务有关的技术。
不该问的 诸如“ Android 怎么搞性能优化”和“ Android 怎么搞多机型适配”之类大而空泛的问题是外行面试官最喜欢问的,常常把多年经验的老程序员问得一脸懵逼,却被背过标准答案的培训生忽悠得一愣一愣——就好比真正的哲学家回答不出“人生的意义是什么”而传销经理回答这个问题却口若悬河一样。这两个问题可以分别改为“如何从网络、内存、磁盘的角度设计缓存”和“ .9 图放在 drawable 和 mipmap 下有什么区别”等具体问题。 互联网时代是一个瞬息万变的时代,与时俱进是开发者最重要的素质之一。过时的问题也不适合用来考察求职者的功底,比如“ SAX 解析 XML 有哪些优点”和“ TabHost 和 ActivityGroup 相比有哪些优缺点”等,这样会显得面试官是个故步自封的人。 极度偏、怪、冷且非死记硬背不能答的问题更不适合做为面试题,比如写一长串不带括号的运算符问返回结果以考察对运算符优先级的掌握等。用““回”字有哪几种写法”作为面试题只能筛选出迂腐不堪的孔乙己而埋没真正的人才。 最不适合在面试时提的问题就是少数服务端出身的面试官爱问的:“你们 Android (也包括 iOS 和 HTML5 等)除了写写 UI 还有什么复杂的?”此话一出面试官要面对的风险就不仅限于错失人才了。
让他向自己提问 面试是一个双向的选择,因此面试官也应该具备通过求职者向自己提问的问题来初步判断他技术水平和发展方向的能力。当然,如果他面试过程中对答如流,就不要问他“你有什么问题要问我了”,可能会被问得瞠目结舌而贻笑大方的。 如果他问你“你是如何协调与服务端及其他终端的关系的”说明他今后可以培养为项目经理;如果他问你“你是如何提升整个团队的技术水平的”说明他今后可以培养为技术经理;如果他问你“你是如何选择 MVP 和 MVVM 的”说明他今后可以培养为架构师。
如果他问你“如何重写 ViewGroup 以实现 LinearLayout 或 RelativeLayout ”说明你的小庙请不起这个大神。
本次比赛主题帖地址为:http://t.cn/RSfgF4c