2019即将过去2020年即将到来,今天就来聊一聊这大半年的面试经历,面了几家公司发现一个规律,越是出名,技术牛逼的公司,面试官都很谦虚,整个面试过程也都很舒服,遇到不会的问题面试官也都会引导你去回答问题或者给你思路,相反去一些所谓的有点小名气的公司,赶上的面试官一个个都板着个脸,感受本身厉害的不行,要是某个问题没答上,立刻一个白眼过来,就算你问他答案,他也会说回去本身看去。程序员
我以为面试考察的是一我的的综合素质,就以Android来讲,那么庞大的一个系统再结合Java语言的相关知识点,做为开发人员不可能会每一个知识点都精通再加上每一个面试官的表达能力也不一样,有时常常会出现面试者没有彻底理解面试官的意思,因此我以为一个优秀的面试官应该是很耐心的,若是遇到面试者答不出来问题时,应当去适当引导一下,或者给面试者告诉正确答案,并且一个好的面试官首先应当表现出很友善的样子,这样才会让面试者有一个好的发挥。面试
下面先总结一下常见的Android面试题:算法
1. Activity生命周期数据库
这个是必问的,建议最好能够看看源码,若是不看源码,也能够打log看一下各类场景下的生命周期。设计模式
2. Activity启动模式网络
一样必问,先弄清楚每种模式的做用,再挨个模拟一遍,结合生命周期来看数据结构
3. Activity启动/建立流程ide
这个最好大体看一下,能说出来一些具体流程会给面试官一个好的印象oop
4. ActivityThread做用性能
能知道ActivityThread做用,那证实你是看过源码的,必定要本身去看源码,不要只看什么博客,由于若是你能说出ActivityThread做用,面试官会认为你是看过源码的,继而会深刻一些细节,若是你没看过源码,你确定没法了解细节。
5. Fragment生命周期,Fragment的生命周期是如何对应到Activity的生命周期,addFragment,replaceFragment有什么区别
对于这个,建议仍是本身看源码,其实不是特别复杂,看完源码会对Fragment的管理有一个很好地了解。
6. startService和bindService区别
7. ContentProvider的生命周期/数据库如何进行升级
8. 跨进程通讯/Binder
这个问题也是必考,Aidl, Messenger, ContentProvider, 广播等等,由此还会引出Aidl如何使用, Aidl和Messenger区别,Aidl本质是什么,什么场景下会使用Messenger, 对Binder有了解吗,如何你能很好的说出一些关于Binder的理解,那是至关的加分
9. Handler原理
这个还用强调是必考吗?这个都说不出来的话,那估计面试就直接结束了,Handler必定要去看源码,源码并很少,写得也很清楚,面试官通常都会问下面这几个问题: 一个线程能够有几个Looper? 固然是一个,那是如何保证线程只能有一个Looper呢?Message是如何和Handler联系起来的?Handler又是如何同Looper绑定的?
10. 广播,全局广播和本地广播有什么区别
11. View绘制原理
这个一样须要看源码,由于如今分析View绘制原理的文章太多了,你只回答个onMeasure, onLayout, onDraw根本不行,面试官会问不少细节问题,另外对于MeasureSpec必定要弄清楚是怎么回事,本身也必定要动手写过自定义View
12. View事件拦截
必考题!依然是须要看源码,会问不少细节的,而后还有必定要多练习,模拟一下各类事件分发的场景,好比典型的是ACTION_CANCEL事件是如何产生的?
13. Window做用,Window,Activity, View区别/DecorView是什么
14. 进程的优先级
15. 进程保活
16. 内存优化/内存泄露
这个也算是必问的吧,这个问题会很能反映出你是否对性能有要求
17. RecyclerView有什么优点/内部原理
18. IntentService的原理
19. View的优化/LinearLayout性能为何会比RelativeLayout好
20. 经常使用开源库原理/对比
典型的就是看OkHttp,而后会比对一下Volley和OkHttp各自的优势和缺点,除此以外,Retrofit,ButterKnife,Glide也可能会问到
21. 动画的分类和区别
22. ANR的处理
1. 排序算法
必须掌握的是快速排序,归并排序,堆排序,其余的如插入排序,冒泡排序,选择排序都不用说了,属于最简单的排序算法,若是连这几个都不会,那面试基本挂定了
2. 二分查找
3. 实现栈/队列
4. 树的遍历
前序遍历,中序遍历,后序遍历,层序遍历,不光要知道每种方法遍历的方式,还要能写出代码,通常来讲前序,中序,后序的代码比较简单,用递归就能够实现,层序遍历须要用迭代的方式配合队列来实现
5. 算法题
这个没啥好说的,刷题吧,剑指Offer这类的书多看看吧,主要学习一下里面的思路
若是上面这些题,你能掌握个85%左右,那拿到offer基本没有问题了,不过面试过程当中还有一个很重要的考量因素,那就是你的沟通能力以及情商问题...其实情商这个东西,很是重要,尤为做为程序员,由于程序员是作需求的,而提需求的产品确定会有各类各样的需求或者不断地催进度,若是情商低,那双方不免会发生矛盾甚至是吵架,因此在面试过程当中必定要展示出本身善于沟通的一面,固然情商这个东西也不是说好就能好的