笔者不在HR岗位上,但在工作中有6年的招聘经验。我发现,很多求职者在面试前都没有做好充分的准备,即便有机会参加面试,也很难赢得offer。在这篇文章里,我会跟大家分享,程序员求职者在面试前要怎样做准备。
因为面试本来就是一个输入和输出的过程,面试官主要的职责是要引导面试者在短时间展现他最强的实力,如果一位面试官连这点都做不好,我敢断定这决对不是一位合格的面试官。
那对于面试官,该完成一次高效的 Android 面试一般都会考察哪些方面呢?
面试时考察的几个方面
1.简历是否真实
这其实是面试第一要务, 面试的过程其实就是看简历是否属实的过程,因为能到面试环节,说明这个人是符合要求的,不满足要求的早就被剔除了,如果他真的如简历描述的那样,100%会招过来,如果人人都如此,那就不需要有面试这种过程了。
这里首先强调大家一点,就是大部分靠谱点的公司都会有背景调查环节,比如你之前的教育经历,工作经历,薪资水平,离职原因等等这些千万不要造假,一旦发现有造假的,肯定不会被录取。而且如 BAT 这类大公司,甚至可能会被拉黑,永久进入黑名单。
还有一点很重要,最最最重要的事情说三遍。 简历一定要和投递职位吻合! 简历一定要和投递职位吻合!! 简历一定要和投递职位吻合!!!
2.技术的深度
技术的深度一向是我最看重的部分,当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察-个人是否对技术有热情 ,是否有技术好奇心等等这些很多大牛认为的所谓“优秀程序员的特征”。
之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”。放在这里再合适不过了。
Android基础:
根据招聘岗位的不同这个方面有所差别,一般是针对 Android 中级以下的人会问一些基础,对于高级 Android 工程师岗位不会问,而直接聊项目,聊产品。这方面的基础包括 Java 和 Android 的基础,比如 ArrayList 和 LinkedList 的区别,Java 的一些线程用法,Java 的 GC 原理等等,这部分基础网上一大堆关于 Java 的基础面试题,自行搜索就好,但是大多只考Java SE,涉及到 Java EE 方面的知识毕竟跟 Android 开发没多大关系,可以忽略。
然后就是 Android 基础,如四大组件的具体用法,如 Activity、Fragment 的生命周期与四种启动模式,Android 动画,View 的绘制流程,Sqlite 相关,图片加载机制、网络调用等,关于 Android 方面的基础面试题网上也一大堆,这里就不详细罗列了。
- Dalvik、Art虚拟机
- Activity:生命周期、launchMode。
- Fragment:生命周期、懒加载、两种Adapter之间的区别。
- BroadcastReceiver:基本概念、广播分类、权限。
- Service:生命周期、onStartCommand的返回值、startService和bindService的区别、相同进程 & 不同进程的交互、IntentService实现原理。
- 重要的工具类 & 源码实现:AsyncTask、HandlerThread、Handler、IntentService、LruCache、LinkedHashMap、SparseArray。
- RecyclerView:缓存原理、和ListView的对比、Adapter如何适配多种layout。
- 存储:数据库升级 & 优化、ContentProvider,SharePreference。
- SDK版本升级的兼容问题。
- Android的权限管理机制。
Android深入知识点
如果你面试的是初级岗位,那么基础知识是肯定要问的,如果你要找的是实习岗位,那么基本上只要基础够扎实就差不多了。但是大部分公司都不只问基础知识的,会配合问一些深入点的问题考察下你技术的深度,知道你大概的水平高度。
而深入点的知识对于 Java 如注解原理、反射原理、Java 并发等,最重要的是基本上都会问到设计模式,这个几乎是必问, Effective Java 被认为是进阶必备的书籍,如果把这本书看完了那么对于一些面试问的设计模式也基本不是问题。
需要注意的是,深入的知识点不可能你每个问题都能答对,因为面试官也没奢望问的你都会,如果你是应聘的初级岗位,那么我起码知道你的技术深度到哪里,因为技术同岗位的职位也会选择最优的,如果对于中高级岗位,那么这些深入的知识点就要求高点,起码的70%、80%的知识点都知道或者熟悉吧。
Android高阶知识点:
Bindler、AMS、WMS、Context、APP的启动流程、插件化、组件化、热修复什么的等等
第三方框架:
okhttp、retrofit、RxJava等等,熟悉一个框架的源码,然后知道其他框架的优缺点
混合开发:
通常都是RN相关的,目前Flutter用的不多
架构和语言:
MVC、MVP、MVVM、组件化、插件化、热修复等等。
项目经验
俗话说「术业有专攻」,对于我们来说,虽然都是做的 Android 开发,但是不同的方向,意味着每个人擅长的技术领域也不一样。包括我也一样,我很多领域也没接触过,如果我只问你我擅长的领域那显然是不公平的,所以大部分面试官都会结合你的项目经验去聊。其实大部分一些固定的知识点都能答出来,区别就在于聊项目经验这块,这块可能占整个面试过程的70%以上。
而大部分聊的比较深入点的知识都是围绕你的项目经验来问,至于这个项目是不是你亲自做的,一聊就知道,所以如果这个项目是你伪造的,或者是你糊弄过去的,那么面试官一聊就会立马露馅,因为大部分面试官会针对你项目的点去一步步深入下去。
项目经验这块如何准备?
把觉得做的有亮点的东西挑出来,从四个方面来准备:
- 功能模块的实现
- 达到了什么效果
- 遇到了什么问题,是如何解决的
- 涉及到的相关知识点
项目经验和知识点 其实是一个双向的过程,要 试图去找到它们之间的联系:
- 谈到项目经验的时候,可以说:做完 xx 之后,我还去了解了一下 yy 背后的原理,xxx,这里体现的是 你是否有求知欲。
- 谈到知识点的时候,可以说:yy 的原理是这样的,在 xx 项目中我是如何应用它来解决问题的,这里体现的是 你是否具备把知识付诸实践的能力。
如何获得一份满意的offer?
对于技术开发人员来讲,你是一名Android开发者那么基本Java基础,四大组件,性能优化等等这些基础知识你一定是要掌握的。技术是你的基础,这个很关键,他直接反应了你能否胜任这份工作。但这只是一个基本的必要条件,它不代表着你一定会拿到这家公司offer。
why?我们先来分析下三个基本条件
专业能力 + 简历 + 面试 = offer,大部分能力还不错的同学碰壁的原因可能就是卡在了简历或者面试上了,所以今天我们重点介绍后面两点。
专业能力
专业能力这点在此不过多复述,硬性要求,后面我会把之前一些经典的面试题整理出来了,还是那句话,多看,多练,多动手。
面试前的准备工作
1.简历调查
简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不“对劲”的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不匹配,也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干活的。另外如果简历里附带了博客链接,GitHub地址, 相关作品的,可以提前去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。
2.准备面试题
面试官会在了解清楚候选人背景后,根据简历,有针对性的准备问题,可能会是你作品或做过项目里的某个技术细节的实现方式,也可以是你声称精通的某些领域的相关问题。所以可以根据这个去反向思考面试官会准备哪些问题,从而着重复习准备好那方面的知识点,总之不要等到快要面试了才去准备,把面试官可能会问的问题提前写下来,准备充分。
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典!
- Android学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
④2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码
以上这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。
最后的总结 面试中不可能完全把一个人的各方面能力都展现出来,企业和面试官也没有那么慧眼,一眼就认准了你,而且面试本身也是企业跟应聘者互选的过程,不要单方面的当做出售自己一样,你需要做的就是注意细节,打牢基础,脚踏实地的做项目,然后在面试中真实的表达自己就足够了!