来自 Android 面试官的一些看法和体会心得
Posted 冬天的毛毛雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自 Android 面试官的一些看法和体会心得相关的知识,希望对你有一定的参考价值。
作者:月下
前言
本人作为一名某公司的面试官,这几年帮公司面试的一些android 中高级岗位的工程师,现已破百人之多,但被我Pass 刷掉的人也不少。
现在正式金九银十的面试旺季,特此赶来与大家分享一些谈谈我对 Android 中高级面试的一些看法和体会。
大家读完这篇文章,如有自己的看法不妨在评论区留言,一起互相讨论。
首先面试的时长是不固定的,以本人平常面试的平均时间做标准的话,大概是在1小时左右,如果遇到优秀的Android 开发面试的话,可能会将时间拉长,因为问的细致一些。
如果大家在面试过程中,面试时间比较长的话,难么恭喜你,面试官这关你基本稳定通过了,后面就是谈薪资待遇的事了。
因为面试本来就是一个输入和输出的过程,面试官主要的职责是要引导面试者在短时间展现他最强的实力,如果一位面试官连这点都做不好,我敢断定这决对不是一位合格的面试官。
那对于面试官,该如何完成一次高效的 Android 面试呢?
一般会考察这几点:
一.简历是否真实
这其实是面试第一要务, 面试的过程其实就是看简历是否属实的过程,因为能到面试环节,说明这个人是符合要求的,不满足要求的早就被剔除了,如果他真的如简历描述的那样,100%会招过来,如果人人都如此,那就不需要有面试这种过程了。
需要注意的是这里的真实有三层含义:
-
他如实描述了自身经历,很多人只在一些大项目里做一个很小的螺丝钉,但简历里往往夸张这段经历。
-
不知道自己不知道,常见于简历里各种“精通”开头的描述,因为知识体系与视野的局限,明明只是了解很浅却夸口精通,很多时候他并不认为自己说的有问题,而是真的以为自己已然精通,有点井底之蛙的感觉。
-
简历里的真实要与你的期望相匹配,一门技术了解到怎样的程度才算精通,很难有定论,所以这里的“真实" 只能是候选人与面试官标准之间的契合,这种有主观运气成分,也许面试官水平不够错误判断了你,也不用感到不爽,面试何尝不是种双向选择呢。
二.技术的深度
技术的深度一向是我最看重的部分,当今任何一个技术领域都非常宽广,一个人要同时掌握那么多知识并且都深入几乎不可能,那都需要拼学习效率与工作年限了。而你曾经做过的东西,正在做的东西,是绝对可以了解得更深入的,一个对技术有好奇心,有技术热情的人,都不会仅仅停留在这个东西挺好用,而是会忍不住去探究它背后的技术原理,即便不是亲自去看源码,也会花点时间了解别人整理过的经验,所以单凭考察技术上的深度,就可以考察-个人是否对技术有热情 ,是否有技术好奇心等等这些很多大牛认为的所谓“优秀程序员的特征”。
之前曾看到过一句话:“一个人对他所做的事情了解得越深,他就能做的越好”。放在这里再合适不过了。
三.技术的广度
深度是有了,还需要广度吗?我个人的理解是:深度是必要条件,广度是加分项。同样的有技术好奇心的优秀程序员,也不会满足于仅仅局限于自己的一亩三分地,工作之余,也会想要尝试一些其它的领域和方向,因为投入问题也许不够深入,但很多领域知识你知道与不知道,对你个人知识体系的形成关系很大。
比如你要实现一个功能, 在你当前熟悉的技术领域上很困难或者效果不佳,在你就要放弃时你的同事告诉你,这用一个简单Sqi语句就可以实现啦,为什么要搞得那么麻烦?这个例子虽然举得很蹩脚,但是我想意思大家应该已经明白了。知识越有厂度,头脑里的技术体系就越备,同样的问题,你就可以想到N个解,思考一下就得出最优解了 。
如果你听都没听过一些东西,就会经常说出“这个好难搞啊”、"这根本就不可能”其实有的时候真是知识的局限问题,所谓的从0到1难,也是这个意思。
四.逻辑思维能力
这也是我比较看重的一点,这里并不是指那些臭名昭彰的脑经急转弯问题,而是通过交流观察,判断一个人表达观点逻辑是否清晰,回答问题是否有章法,这个很难描述,但如果你细心观察,你会发现很容易通过一些简单的交流,就可以看出一一个人是否逻辑清晰。
有时候你会觉得某个人表达沟通很不错,其实不是沟通的问题,是他说出去的话,经过了他大脑的条理清晰的整理,让你很容易就能明白。这种习惯不是一朝一夕就能养成的,所以面试过程中这点装不出来。
另外一个人如果逻辑清晰,而且反应又敏捷,语速很快,那是大大的加分项,恭喜你,碰到一个聪明人了。
面试前的准备工作:
1.简历调查
简历到你手上的时候,你要做好充分的调查分析,不仅仅是对公司负责,也是对自己与候选人时间的尊重,明显不“对劲”的简历,就不要抱着“要不喊过来试试看”的想法了,候选人也许很不错,但如果跟你的岗位不匹配,也不要浪费大家时间,你要想清楚现在需要的人是有潜力可以培养的,还是亟需帮忙干活的。另外如果简历里附带了博客链接,GitHub地址, 相关作品的,可以提前去看看,直接看人家多年积累的文章与代码,比这短短一小时的面试来得靠谱的多。
2.准备面试题
了解清楚候选人背景后,要根据简历,有针对性的准备问题,可以是他作品或做过项目里的某个技术细节的实现方式,也可以是他声称精通的某些领域的相关问题。总之不要等到面试过程中现想问题,特别是刚开始面试别人的同学,往往经验不足稍带紧张导致大脑短路,其实也是很尴尬的,把要问的问题提前写下来,准备充分。
面试官通常会问哪些深度与广度并存的 Android 面试题呢?
因文章篇幅长度有限,我就在这里简单的列举几类很经典的 Android 面试题更大家进行分享一下,如果大家想要了解更多Android 大厂面试题,可以直接点击下方小卡片进行访问查阅。
第一章 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 京东)
- 怎么拦截事件 onTouchEvent如果返回false onClick还会执行么?(58 京东)
- 事件的分发机制,责任链模式的优缺点 (美团)
- 动画的分类以及区别(车和家)
- 属性动画与普通的动画有什么区别?(车和家)
- 插值器 估值器的区别(车和家)
- RecyclerView与ListView的对比,缓存策略,优缺点。(美团)
- WebView如何做资源缓存?(字节跳动)
- WebView和JS交互的几种方式与拦截方法。(字节跳动)
- 自定义view与viewgroup的区别
- View的绘制原理
- View中onTouch,onTouchEvent和onClick的执行顺序
- View的滑动方式
- invalidate() 和 postInvalicate() 区别
- View的绘制流程是从Activity的哪个生命周期方法开始执行的
- Activity,Window,View三者的联系和区别
- 如何实现Activity窗口快速变暗
- ListView卡顿的原因以及优化策略
- ViewHolder为什么要被声明成静态内部类
- Android中的动画有哪些? 动画占用大量内存,如何优化
- 自定义View执行invalidate()方法,为什么有时候不会回调onDraw()
- DecorView, ViewRootImpl,View之间的关系,ViewGroup.add()会多添加一个ViewrootImpl吗
- 如何通过WindowManager添加Window(代码实现)?
- 为什么Dialog不能用Application的Context?
- WindowMangerService中token到底是什么?有什么区别
- RecyclerView是什么?如何使用?如何返回不一样的Item
- RecyclerView的回收复用机制
- 如何给ListView & RecyclerView加上拉刷新 & 下拉加载更多机制
- 如何对ListView & RecycleView进行局部刷新的?
- ScrollView下嵌套一个RecycleView通常会出现什么问题?
- 一个ListView或者一个RecyclerView在显示新闻数据的时候,出现图片错位,可能的原因有哪些 & 如何解决?
- Requestlayout,onlayout,onDraw,DrawChild区别与联系
- 如何优化自定义View
- Android属性动画实现原理,补间动画实现原理
第四章 性能优化
- 内存优化,内存抖动和内存泄漏。 什么时候会发生内存泄漏?举几个例子(美团)
- Bitmap压缩,质量100%与90%的区别?(东方头条)
- TraceView的使用,查找CPU占用(东方头条)
- 内存泄漏查找 (酷我音乐)
- ANR是什么,怎么解决?ANR查找(美团)
- CPU波动
- 当前项目中是如何进行性能优化分析的
- 冷启动、热启动的概念(酷我音乐)
- View层次过深怎么优化,选择哪个布局比较好?(美团)
- 怎样检测函数执行是否卡顿 (字节跳动)
第五章 开源框架
- LeakCanray 2.0为啥不需要在application里调install?(B站)
- OkHttp的原理(B站)
- Glide缓存机制(B站)
- Android如何发起网络请求,有用过相关框架码?OkHttp框架解决了你什么问题?(美团)
第六章 NDK
1.Jni了解吗?有没有自己使用过,只要编译成功Hello World也算,与JAVA相比效率如何?(美团)
2.C++中引用和指针的区别。
总结
说了这么多,但是最重要的还是那句话,面试跳槽加薪虽然是我们每个人都所期待的,但是你也要有与之相对的能力,如果你没有,千万别浪费了我们两个人宝贵的时间,望谨记;
因文章篇幅长度有限,我就在这里简单的列举几类很经典的 Android 面试题更大家进行分享一下,如果大家想要了解更多Android 大厂面试题,可以直接点击下方小卡片进行访问查阅。
以上是关于来自 Android 面试官的一些看法和体会心得的主要内容,如果未能解决你的问题,请参考以下文章