同样的面试题,Android的答案和Java不一样

时间:2016年11月28日 10:08 点击:544次


众所周知,Java是Android的基础,这就意味着在Android的面试过程中有相当一部分的题目,看起来是在考察你的Java基础。

但如果你天真地仅把这些问题当做Java面试题来进行回答的话,基本上会有三种结果:1.运气好的话,面试官会把问题引到Android相关问题的理解上,你就可以回答到点子上了。2.运气差的话,面试官啥也没说,直接进行下一个问题,而你此时还在心里想,“这个问题老子答得好啊“……王炸!

  1. 天呐噜,你还在用HashMap在实际项目中,有时需要我们对一些数据处理所得到的结果进行缓存。在Java开发中,我们常使用HashMap来做这些事情,但是如果你在开发Android时也这么做的话,细心的盆友也许会发现,哇靠,有个黄闪闪的提示——“用SparseArray来代替HashMap吧”。SparseArray是Android系统提供的一个工具类,它的性能要优于HashMap,有兴趣的同学最好可以看看源码,我这里帮大家梳理几个显著的特征。A. SparseArray不会去做自动装箱的操作。

    B. SparseArray使用的是两个一维数组来保存数据,一个用来保存key,另一个用来保存value,没有HashMap额外所含的Entry这种东西。

    C. SparseArray的put和get操作使用的都是二分法,所以其中的元素是按键值的大小有序排列的。

  2. 听到序列化,你的反应不该只是Serializable这个问题我一提到,大家肯定就知道我要说什么了。没错,Java面试中的序列化问题,你谈到Serializable就可以,但在Android面试中则必须涉及到Parcelable。其实,Parcelable的出现和SparseArray的出现原因是相似的,都是为了Android系统的效率和性能。这里有一点需要注意,Parcelable虽然在性能上表现更好,但我们最好仅当在内存中传输数据时使用,如应用在Activity之间;而在进行网络传输时,最好还是使用Serializable,一是因为Serializable的持久化比较方便保存,二是因为Parcelable在Android不同版本中存在差异,可能会产生一些额外的问题。

  3. 进程间通信关于进程间通信,熟悉Java的童鞋估计能说出一大堆,什么管道,信号量,套接字,内存映射等等。诚然,如果你能把上面这些东西都解释清楚,也能向面试官证明你的基础很好,不过,如果你说的是AIDL,Binder,Messenger等内容,一定更容易获得面试官的青睐。关于Android面试中的IPC问题,一直都是必考题,而且内容较多也比较复杂,所以我会在后续的文章中专门来介绍,不过我的意见是,如果你还不太熟悉这些内容,现在就去看!

  4. Android中的设计模式神马,Android中的设计模式跟Java也不一样?别慌,并不是。如果你可以用Java写出5种单例模式,这仍然是极好的。你了解过这么多设计模式,但是,你知道Android系统中哪些地方体现了这些设计模式么?比如说,我们在调用Android的系统服务时,会返回一个Binder对象,这个过程体现的就是单例模式。再比如说,还是在调用系统服务时,我们可以通过调用同一个方法但是传入不同的参数来获得不同的系统服务,这体现的就是工厂模式。类似的还有,创建AlertDialog时体现的建造者模式,连接Listview和data source的适配器模式等等。可能大家也发现了,如果Android开发做的太少的话,其中的一些问题可能不太好答,不过没关系,把后面的复习计划落实好,相信你最终一定会收获一份满意的offer。


这里在右侧