行业凛冬,Android开发怎样准备一场完美的面试?
前言
作为一名程序员,想必大家都应该经历过跳槽和面试,这也是我们职业生涯中升职加薪的重要组成部分。特别是在今年来行情并不怎么景气的Android开发,岗位职能被小程序或前端所代替,可谓是“一坑难求”。由此来说,当找到合适的“坑位”时,面试便尤为重要。
那么,是否有很多小伙伴,因为面试过程中没有发挥到自己的最佳水平,而错失offer留下了遗憾呢?
所以,这次的分享,我想和大家聊聊:怎样准备一场完美的Android面试。怎样调整心态,该有哪些知识储备,发挥自己的全部实力。
本文不会讲很多的技术细节,而是从面试方法入手,让大家掌握一个正确的面试准备流程。
1、面试可不是“说走就走的旅行”
首先想告诉大家的是,跳槽之前至少要留出多长的时间做准备。具体多长时间根据自己的工作年限、面试岗位要求来决定。面试某家公司前(特别是大厂),最好是要先了解你所面试的工作岗位,公司的业务,主要是做哪个方面的,这样可以更加具有针对性的复习和准备。
比如说面试的是字节头条部,肯定要着重准备高级UI,自定义view,卡顿优化,页面布局屏幕适配等等这些方面
比如面试的是华为海思这种,面试肯定着重于底层,framework层各种原理,Linux内核这些。
我见过太多的程序员,有好的工作岗位,或者猎头突然打来电话,脑子一热,今天还在上班,明天就跑去面试了,没有任何准备,可能平时在公司做业务得心应手,面试被问到一些基础知识都支支吾吾,平日里没怎么用到,都已经淡忘了。面试完后一阵懊恼,跟我吐槽:面试问的其实挺简单的,但凡我准备个两天,这面试肯定能过的。
世上没有后悔药,面试前一定要给自己充分的准备时间,把最佳的水平展现出来,征服面试官,这是对自己也是对面试公司负责。
这个时候估计会有很多小伙伴会说每天上班已经很忙了,哪里还有时间准备啊。那就需要充分发挥自己的主观能动性了,为了一份你向往的工作,必须占用一些你“free time”,克服自己的惰性,为之努力。时间就像海绵里的水,挤一挤总是会有的嘛。
2、准备什么内容
去面试前肯定是要有自己的知识储备、技能树之类的,一定要将零散的知识点归纳总结起来,形成知识体系。
如果你复习的时候没有任何题纲,眉毛胡子一把抓的话,那非常容易是不分主次,没法很好的跟踪自己的复习进度。我建议大家使用思维导图的方式来形成自己的知识体系,不要随便从网上找一个Android知识图谱内容就看起来,每个人接触的内容和项目都不一样,所以每个人都应该要有自己的体系架构,正好你还可以写这个提供的过程中,好好总结,自己学习过哪些内容。
思维导图大家都或多或少的接触过, 它是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。简单展示一下我形成的思维导图,这是比较适合初中级Android开发的技能树,高级工程师、架构师的技能体系导图过大了,就不在此展示了,有兴趣的小伙伴,我把进阶Android开发高级工程师、架构师的完整知识体系+思维导图放在我的GitHub了,还有一些对应的学习资料大家也可以去看看,今天主要讲面试方法,就不过去扩展延伸了。
3、注重底层、基础
大多数的面试官面试都喜欢由浅及深的问,所以底层知识就非常重要了。
举个栗子,关于Activity 生命周期的问题,想必大家都比较了解。前阵子有个朋友去字节面试。面试官首先会问:A Activity 打开 B Activity 时都有哪些生命周期回调。
很简单,大多数人都能回答出来:A.onPause -> B.onCreate -> B.onStart -> B.onResume -> A.onStop . Naive !
注意!这样的回答并不是考官想要的标准答案,因为仅在 B Activity 的 launchMode 为 standard 或者 B Activity 没有可复用的实例时是这样的。
- 当 B Activity 的 launchMode 为 singleTop 且 B Activity 已经在栈顶时(一些特殊情况如通知栏点击、连点),此时只有 B 页面自己有生命周期变化: B.onPause -> B.onNewIntent -> B.onResume
- 当 B Activity 的 launchMode 为 singleInstance ,singleTask 且对应的 B Activity 有可复用的实例时,生命周期回调是这样的: A.onPause -> B.onNewIntent -> B.onRestart -> B.onStart -> B.onResume -> A.onStop -> ( 如果 A 被移出栈的话还有一个 A.onDestory)
如上,面试官给你挖了个小坑,你觉得自己这么简单问题你随便就答出来了,其实面试官当然不是傻子,只是想考验你是否真的对底层有较多的了解。
再举一个栗子,binder基本上是Android面试中无论大小厂的必问点。比较聪明的小伙伴会在简历里面写上“熟悉 AIDL”
面试官当然不只是会问你AIDL 原理这种背烂了的问题,他可能会问你:AIDL 接口的方法可以用 oneway 修饰符来修饰,了解过这个修饰符的作用吗?
你回答出来了:用 oneway 修饰的 AIDL 接口方法,是单向调用,不需要等待另一个进程的返回结果,所以方法的返回类型也只允许是 void.
面试官会点点头,接着问:怎么理解 "单向调用" ,有了解过它的实现原理吗?有了解过相关的 binder 协议吗?怎么理解客户端线程挂起等待呢?有没有实际占用 CPU 的调度?
这些深入底层的问题,你都能答上来吗?如果你能答出来,那么,这场面试,你在面试官心中至少已经有90分了。
通过上述栗子,想必大家能大致明白底层、源码在面试中有多么重要了,在此给带给大家两份资料:Android framework底层精编内核解析、Android开发核心源码精编解析,对源码和底层掌握不够扎实的小伙伴强烈建议去我的GitHub获取读一读。无偿分享的。
4、一份漂亮的简历
面试的一切当然是从简历开始,你的简历决定了你能否收到面试邀请。简历美观的重要性就不用我多说了,提几个小建议:
1、不要太过复杂臃肿。能尽量精简就尽量简单些,最好的是整个简历上没有一个多余的字眼,面试官看到的每一个字都是对你自身的表达。切记!千万不要那种一个名字,一个电话就占个一行,一页纸上零零散散几个字,简历给整个好几页。你以为页数越多逼格越高,其实在面试官眼里,这人就是个nc,华而不实,不脚踏实地。
2、自己的优点,擅长,要尽量写上去,哪怕是个小小的英语四级证。做过哪些项目,哪些公司经历,有哪些收获。
3、千万不要不懂装懂!不会的技术千万不要写进简历里。面试官面试你的时候大多都是根据你的简历来提问相关的技术点,你不会的技术,你写进去,那不是给自己挖坑呢,而且别人会感觉到你这个人不诚实,那面试大概率就凉了。
4、分享一个小套路大家可以小小尝试一下。大公司的面试官一天可能要看几十上百份简历,一份简历绝对不会看超过十秒!而怎样能让你的简历在千篇一律的简历堆里让面试官一眼就注意到多看几眼呢?那就是,在你简历的左上角印上你要面试公司的logo。多的我就不多说了,你懂的~~~
下面是我看过的一份非常美观的简历,让人一眼看上去就很舒服的简历,会大大提高你获得面试的机会。
文末
我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。
首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。
更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。
找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。
最后,祝愿大家在这并不友好的环境下都能找到自己心仪的归宿!
欢迎关注我的简书,分享Android干货,交流Android技术。
对文章有何见解,或者有何技术问题,都可以在评论区一起留言讨论,我会虔诚为你解答。
也欢迎大家来我的B站找我玩,有各类Android架构师进阶技术难点的视频讲解,只为助你早日升职加薪。
B站直通车:https://space.bilibili.com/544650554