本人作为一名某公司的面试官,这几年帮公司面试的一些Android 中高级岗位的工程师,现已破百人之多,但被我Pass 刷掉的人也不少。
现在正式金三银四的面试旺季,特此赶来与大家分享一些谈谈我对 Android 中高级面试的一些看法和体会。
大家读完这篇文章,如有自己的看法不妨在评论区留言,一起互相讨论。
首先面试的时长是不固定的,以本人平常面试的平均时间做标准的话,大概是在1小时左右,如果遇到优秀的Android 开发面试的话,可能会将时间拉长,因为问的细致一些。
如果大家在面试过程中,面试时间比较长的话,难么恭喜你,面试官这关你基本稳定通过了,后面就是谈薪资待遇的事了。
因为面试本来就是一个输入和输出的过程,面试官主要的职责是要引导面试者在短时间展现他最强的实力,如果一位面试官连这点都做不好,我敢断定这决对不是一位合格的面试官。
那对于面试官,该如何完成一次高效的 Android 面试呢?
一.简历是否真实
这其实是面试第一要务, 面试的过程其实就是看简历是否属实的过程,因为能到面试环节,说明这个人是符合要求的,不满足要求的早就被剔除了,如果他真的如简历描述的那样,100%会招过来,如果人人都如此,那就不需要有面试这种过程了。
需要注意的是这里的真实有三层含义:
-
他如实描述了自身经历,很多人只在一些大项目里做一个很小的螺丝钉,但简历里往往夸张这段经历。
-
不知道自己不知道,常见于简历里各种“精通”开头的描述,因为知识体系与视野的局限,明明只是了解很浅却夸口精通,很多时候他并不认为自己说的有问题,而是真的以为自己已然精通,有点井底之蛙的感觉。
-
简历里的真实要与你的期望相匹配,一门技术了解到怎样的程度才算精通,很难有定论,所以这里的“真实" 只能是候选人与面试官标准之间的契合,这种有主观运气成分,也许面试官水平不够错误判断了你,也不用感到不爽,面试何尝不是种双向选择呢。
二.技术的深度
技术的深度一向是我最看重的部分,当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察-个人是否对技术有热情 ,是否有技术好奇心等等这些很多大牛认为的所谓“优秀程序员的特征”。
之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”。放在这里再合适不过了。
三.技术的广度
深度是有了,还需要广度吗?我个人的理解是:深度是必要条件,广度是加分项。同样的有技术好奇心的优秀程序员,也不会满足于仅仅局限于自己的一亩三分地,工作之余,也会想要尝试一些其它的领域和方向,因为投入问题也许不够深入,但很多领域知识你知道与不知道,对你个人知识体系的形成关系很大。
比如你要实现一个功能, 在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单Sqi语句就可以实现啦,为什么要搞得那么麻烦?这个例子虽然举得很蹩脚,但是我想意思大家应该已经明白了。知识越有厂度,头脑里的技术体系就越备,同样的问题,你就可以想到N个解,思考一下就得出最优解了 。
如果你听都没听过一些东西,就会经常说出“这个好难搞啊”、"这根本就不可能”其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思。
四.逻辑思维能力
这也是我比较看重的一点,这里并不是指那些臭名昭彰的脑经急转弯问题,而是通过交流观察,判断一个人表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但如果你细心观察,你会发现很容易通过一些简单的交流,就可以看出一一个人是否逻辑清晰。
有时候你会觉得某个人表达沟通很不错,其实不是沟通的问题,是他说出去的话,经过了他大脑的条理清晰的整理,让你很容易就能明白。这种习惯不是一朝一夕就能养成的,所以面试过程中这点装不出来。
另外一个人如果逻辑清晰,而且反应又敏捷,语速很快,那是大大的加分项,恭喜你,碰到一个聪明人了。
1.简历调查
简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不“对劲”的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不匹配,也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干活的。另外如果简历里附带了博客链接,GitHub地址, 相关作品的,可以提前去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。
2.准备面试题
了解清楚候选人背景后,要根据简历,有针对性的准备问题,可以是他作品或做过项目里的某个技术细节的实现方式,也可以是他声称精通的某些领域的相关问题。总之不要等到面试过程中现想问题,特别是刚开始面试别人的同学,往往经验不足稍带紧张导致大脑短路,其实也是很尴尬的,把要问的问题提前写下来,准备充分。
面试官通常会问哪些深度与广度并存的 Android 面试题呢?
因文章篇幅长度有限,我就在这里简单的列举几类很经典的 Android 面试题更大家进行分享一下,如果大家想要了解更多Android 大厂面试题,可以直接去我 GitHub:https://github.com/733gh/Android-T3 参考学习。
第一章 Android FrameWork
-
Android中多进程通信的方式有哪些? 进程通信你用过哪些?原理是什么?(字节跳动、小米)
-
描述下Binder机制原理?(东方头条)
-
Binder线程池的工作过程是什么样?(东方头条)
-
Handler怎么进行线程通信,原理是什么?(东方头条)
-
Handler如果没有消息处理是阻塞的还是非阻塞的?(字节跳动、小米)
-
handler.post(Runnable) runnable是如何执行的?(字节跳动、小米)
-
handler的Callback和handlemessage都存在,但callback返回true handleMessage还会执行么?(字节跳动、小米)
-
Handler的sendMessage和postDelay的区别?(字节跳动)
-
IdleHandler是什么?怎么使用,能解决什么问题?
-
为什么Looper.loop不阻塞主线程?Looper无限循环为啥没有ANR(B站)
-
Looper如何在子线程中创建?(字节跳动、小米)
-
Looper、handler、线程间的关系。例如一个线程可以有几个Looper可以对应几个Handler?(字节跳动、小米)
-
如何更新UI,为什么子线程不能更新UI?(美团)
-
ThreadLocal的原理,以及在Looper是如何应用的?(字节跳动、小米)
-
Android 有哪些存储数据的方式?
-
SharedPreference原理,commit与apply的区别是什么?使用时需要有哪些注意?
-
如何判断一个 APP 在前台还是后台?
-
如何做应用保活?
-
一张图片100x100在内存中的大小?(字节跳动)
-
Intent的原理,作用,可以传递哪些类型的参数?
-
如果需要在Activity间传递大量的数据怎么办?
-
打开多个页面,如何实现一键退出?
-
LiveData的生命周期如何监听的?(B站)
第二章 Android组件
-
Activity的4大启动模式,与开发中需要注意的问题,如onNewIntent() 的调用;
-
Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)
-
Activity如何保存状态的?
-
请描诉Activity的启动流程,从点击图标开始。(B站)
-
APP是怎么启动的?
-
启动一个Activity的流程分析
-
Service的生命周期是什么样的?Service两种生命周期以及区别
-
你会在什么情况下使用Service?
-
startServer和bindServier的区别?(美团)
-
Service和Thread的区别?
-
IntentService与Service的区别?
-
ContentProvider如何自定义与使用场景是什么?
-
BroadcastReciver的静态注册与动态注册的区别?
-
广播的分类与工作原理
-
可以再onReceive中开启线程么,会有什么问题?
-
什么是有序广播?
-
Application、Activity、Service中context的区别?能否启动一个activity、dialog?
-
Fragment的生命周期? (美团)
-
Fragment的构造函数为啥不让传参?(B站)
-
Fragment add与replace的区别,分别对Fragment的生命周期影响(美团)
第三章 View System
- View绘制流程与自定义View注意点。(东方头条、美团)
Android中的每一个UI控件都是集成自View,然后这些View都具有相同的绘制流程,必须经过measure,layout和draw. view的绘制流程是在Window添加过程中,ViewRootImpl类的setView方法开始的
-
在onResume中可以测量宽高么
-
事件分发机制是什么过程?(东方头条)
-
事件冲突怎么解决?(东方头条)
-
View分发反向制约的方法?(字节跳动)
-
自定义Behavior,NestScroll,NestChild。(东方头条)
-
View.inflater过程与异步inflater(东方头条)
-
inflater为什么比自定义View慢?(东方头条)
-
onTouchListener onTouchEvent onClick的执行顺序。(58 京东)
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后是今天给大家分享的一些独家干货:
【Android开发核心知识点笔记】
【Android思维脑图(技能树)】
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【Android高级架构视频学习资源】
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
2536432940)]
【Android思维脑图(技能树)】
[外链图片转存中…(img-zkU6zrgy-1712536432940)]
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
[外链图片转存中…(img-0d71uM0i-1712536432941)]
【Android高级架构视频学习资源】
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!