非常感谢这么多的读者一直关注“Android面试一天一题”这个系列,看了这么多篇面试题,不知道有没有效果呢?读者不妨用这一套题来检验一下自己。
虽然针对不同的情况会有不同的面试题,不同技术方向的公司或者不同风格的面试官也会有不一样的面试题,不过我们还是可以大体选出一套通用的高级工程师的面试题。
基础原理和运行机制
Android应用开发相关的一些基础原理和机制,是大家应该花点时间来理解清楚的,你很难马上就有丰富的项目经验,但是对这些原理有一个正确的理解,会对你以后开发项目有诸多好处。而做为一个高级工程师(或者Team Leader)把基础的原理和机制理解错了,有时会给项目带来灾难(比如会选错解决方案)。
1.Handler的运行机制,线程间是如何通信的?
参考:Android面试一天一题(8 Day)
2.说说AsyncTask原理。
参考:Android面试一天一题(13 Day: AsyncTask)
3.说说Android事件分发机制,ViewGroup和View上的分发有什么不同?
参考:Android面试一天一题(Day 26:ScrollView嵌套ListView的事件冲突)
4.说说Activity生命周期?可能会给一些情景:如Activity A启动Activity B ,A与B各自的生命周期流程(包括A被全覆盖,和半覆盖的区别);或者具体问Activity在屏幕旋转时的生命周期。
参考:Android面试一天一题(3 Day)
5.Activity的启动模式:Activity的几种LaunchMode及使用场景。
参考:Android面试一天一题(Day 19:程序员何苦为难程序员(上)) 和 Android面试一天一题(Day 20:程序员何苦为难程序员(下))
6.Android中跨进程通讯有几种方式?
参考:Android面试一天一题(Day 35:神秘的Binder机制)
开发经验
一般这类型的面试题,面试官喜欢就你简历写的一些项目和擅长的技术点进行提问,而且问到的问题往往都比较细,以便确认你真正具有这些开发经验。这类题型的考察重点是:你是否真的有较丰富的开发经验。如果面试官出的题不在你的研发方向,你应该自己主动讲解一些遇到的问题和解决方案,以体现你对技能的学习能力。
1.两个Activity之间怎么传递数据(Serializable和Parcelable)?
参考:Android面试一天一题(9 Day)
2.有遇到过哪些屏幕和资源适配问题?
参考:Android面试一天一题(Day 21:res目录-细节处见真章)
3.AIDL的全称是什么?如何工作?能处理哪些类型的数据?
参考:Android面试一天一题(Day 36:AIDL)
4.图片的处理和优化, 图片圆角处理的方式有哪几种?
参考:Android面试一天一题(Day 22: 图片到底是什么) 和 Android面试一天一题(Day 30:老外的自定义View面试题)
5.讲讲ListView容易引起性能问题的地方,再说一下你有什么优化方案。
6.内存泄露哪几种情况?如何处理?有使用过什么相关的检测工具吗?
参考:http://www.jianshu.com/p/26d37babcb50 和 Android面试一天一题(Day 29:内存泥潭(下))
框架与模式
做为高级工程师肯定不能只管写正确的代码,你还需要知道怎么组织整个项目的框架,能灵活运用一些设计模式也是基本功。这个层面,你需要跳出具体的代码,从更高的一层来看待问题。当然,就少不了要去学习和对比一些流行和成熟的框架。
1.常用哪些开源项目,说说最熟悉的一个?
参考:Android面试一天一题(Day 32:谈谈使用过的第三方开源库)
2.说说MVP,MVC,MVVM架构的不同。
参考:Android面试一天一题(Day 33:Android开发的套路MVP & MVVM)
3.你常用的设计模式有哪些?
专业领域
公司常常会选择一些在某方面已经有丰富经验的工程师,如果你正好具有公司需要的某个专业领域的能力,那么面试官对你往往会有倾向。下面仅例出了几个方向(具体的可能的方向还要看你面试的公司),及它们可能涉及的问题,这方面的问题如果你没有经验的话,是比较难准备的,不过最好还是有一个思路上或者概念上的了解,至少要避免一问三不知的尴尬,这也是一个体现工程师的知识深度和广度的绝佳时机。
1.LBS应用:使用百度或高德地图的SDK遇到过的问题(国内外限制、精确度等)?
2.插件和热修复的原理:插件和热修复框架的原理,模块化开发方式,64K的方法数限问题。
3.消息推送:国内各个消息推送的使用问题?如何保持Service长活?Http长链接实现等。
4.视频直播。
项目经验和职业规划
你需要对你从事过的项目及自己在这些项目中的作用和责任有一个总结,不能项目过了就过了,什么都没有留下。不善于总结的人往往学习能力也不好。
对于职业规划,其实可以从一个侧面反映一个开发的思维和眼界,如果你什么都不规划的话,你也很少会去规划代码的架构的。
1.说说你的亮点,最值得分享的。
参考:Android面试一天一题(吹牛题)
2.项目中遇到哪些难题,最终你是如何解决的?
参考:Android面试一天一题(Day 31:Android技术难题解决方案)
3.你对未来三到五年的职业规划。
参考:我在上的“职业生涯”专题。
小结
这套题比较偏Android技能方面,有些公司还喜欢考查一些Java和算法方面的问题,那些暂时不在本系列文章的考虑范围之内,读者需要自己去准备一下。
很多题之前我都有文章涉及过了,一些还没有復盖到的题,大家可以先讨论一下,或者提供一下自己的解决方式和案例,之后我会再整理一些相关的文章来详细解说。