这可能是9102年末最全面的Android面试总结,你值得拥有!

这可能是9102年末最全面的Android面试总结,你值得拥有!

2019即将过去2020年即将到来,今天就来聊一聊这大半年的面试经历,面了几家公司发现一个规律,越是出名,技术牛逼的公司,面试官都很谦虚,整个面试过程也都很舒服,遇到不会的问题面试官也都会引导你去回答问题或者给你思路,相反去一些所谓的有点小名气的公司,遇上的面试官一个个都板着个脸,感觉自己厉害的不行,要是某个问题没答上,马上一个白眼过来,就算你问他答案,他也会说回去自己看去。

这可能是9102年末最全面的Android面试总结,你值得拥有!

我觉得面试考察的是一个人的综合素质,就以Android来说,那么庞大的一个系统再结合Java语言的相关知识点,作为开发人员不可能会每个知识点都精通再加上每个面试官的表达能力也不同,有时经常会出现面试者没有完全理解面试官的意思,所以我觉得一个优秀的面试官应该是很耐心的,如果遇到面试者答不出来问题时,应当去适当引导一下,或者给面试者告诉正确答案,而且一个好的面试官首先应当表现出很友善的样子,这样才会让面试者有一个好的发挥。

下面先总结一下常见的Android面试题:

Java部分

  1. Java内存区域
  2. Java虚拟机/垃圾回收算法
  3. synchronized原理/synchronized修饰对象方法和修饰静态方法有什么区别
  4. 线程池原理,线程池是如何进行线程复用的
  5. 线程间如何通信,消费者/生产者模型
  6. volatile关键字作用,使用场景有哪些
  7. 可变对象/不可变对象
  8. 集合(ArrayList,HashMap,LinkedHashMap等等)原理
  9. 内部类的作用,特点
  10. 设计模式(代理模式,装饰器模式,工厂方法模式等等)
  11. 泛型
  12. equals和==区别?如果没有覆写equals,两者有什么区别
  13. 弱引用和软引用

Android部分

1. Activity生命周期

这个是必问的,建议最好可以看看源码,如果不看源码,也可以打log看一下各种场景下的生命周期。

2. Activity启动模式

同样必问,先弄清楚每种模式的作用,再挨个模拟一遍,结合生命周期来看

3. Activity启动/创建流程

这个最好大致看一下,能说出来一些具体流程会给面试官一个好的印象

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这类的书多看看吧,主要学习一下里面的思路

网络知识:

  1. TCP/UDP区别
  2. TCP是如何保证请求一定会到达
  3. TCP的三次握手和四次挥手,为什么是握手要三次,挥手却要四次
  4. Http请求格式,常见头部(这个基本是必问的)
  5. Https和Http区别
  6. Https握手过程

如果上面这些题,你能掌握个85%左右,那拿到offer基本没有问题了,不过面试过程中还有一个很重要的考量因素,那就是你的沟通能力以及情商问题...其实情商这个东西,非常重要,尤其作为程序员,因为程序员是做需求的,而提需求的产品肯定会有各种各样的需求或者不断地催进度,如果情商低,那双方难免会发生矛盾甚至是吵架,所以在面试过程中一定要展现出自己善于沟通的一面,当然情商这个东西也不是说好就能好的

猜你喜欢

转载自blog.51cto.com/14332859/2459391