同样的面试题,Android的答案和Java不一样
xsobi 2024-12-11 17:49 1 浏览
众所周知,Java是Android的基础,这就意味着在Android的面试过程中有相当一部分的题目,看起来是在考察你的Java基础。但如果你天真地仅把这些问题当做Java面试题来进行回答的话,基本上会有三种结果:1.运气好的话,面试官会把问题引到Android相关问题的理解上,你就可以回答到点子上了。2.运气差的话,面试官啥也没说,直接进行下一个问题,而你此时还在心里想,“这个问题老子答得好啊“......王炸!
天呐噜,你还在用HashMap
在实际项目中,有时需要我们对一些数据处理所得到的结果进行缓存。在Java开发中,我们常使用HashMap来做这些事情,但是如果你在开发Android时也这么做的话,细心的盆友也许会发现,哇靠,有个黄闪闪的提示——“用SparseArray来代替HashMap吧”。SparseArray是Android系统提供的一个工具类,它的性能要优于HashMap,有兴趣的同学最好可以看看源码,我这里帮大家梳理几个显著的特征。
A. SparseArray不会去做自动装箱的操作。
B. SparseArray使用的是两个一维数组来保存数据,一个用来保存key,另一个用来保存value,没有HashMap额外所含的Entry这种东西。
C. SparseArray的put和get操作使用的都是二分法,所以其中的元素是按键值的大小有序排列的。
听到序列化,你的反应不该只是Serializable
这个问题我一提到,大家肯定就知道我要说什么了。没错,Java面试中的序列化问题,你谈到Serializable就可以,但在Android面试中则必须涉及到Parcelable。其实,Parcelable的出现和SparseArray的出现原因是相似的,都是为了Android系统的效率和性能。这里有一点需要注意,Parcelable虽然在性能上表现更好,但我们最好仅当在内存中传输数据时使用,如应用在Activity之间;而在进行网络传输时,最好还是使用Serializable,一是因为Serializable的持久化比较方便保存,二是因为Parcelable在Android不同版本中存在差异,可能会产生一些额外的问题。
进程间通信
关于进程间通信,熟悉Java的童鞋估计能说出一大堆,什么管道,信号量,套接字,内存映射等等。诚然,如果你能把上面这些东西都解释清楚,也能向面试官证明你的基础很好,不过,如果你说的是AIDL,Binder,Messenger等内容,一定更容易获得面试官的青睐。关于Android面试中的IPC问题,一直都是必考题,而且内容较多也比较复杂,所以我会在后续的文章中专门来介绍,不过我的意见是,如果你还不太熟悉这些内容,现在就去看!
Android中的设计模式
神马,Android中的设计模式跟Java也不一样?别慌,并不是。如果你可以用Java写出5种单例模式,这仍然是极好的。你了解过这么多设计模式,但是,你知道Android系统中哪些地方体现了这些设计模式么?比如说,我们在调用Android的系统服务时,会返回一个Binder对象,这个过程体现的就是单例模式。再比如说,还是在调用系统服务时,我们可以通过调用同一个方法但是传入不同的参数来获得不同的系统服务,这体现的就是工厂模式。类似的还有,创建AlertDialog时体现的建造者模式,连接Listview和data source的适配器模式等等。
可能大家也发现了,如果Android开发做的太少的话,其中的一些问题可能不太好答,不过没关系,把后面的复习计划落实好,相信你最终一定会收获一份满意的offer。
相关推荐
- js向对象中添加元素(对象,数组) js对象里面添加元素
-
一、添加一个元素对象名["属性名"]=值(值:可以是一个值,可以是一个对象,也可以是一个数组)这样添加进去的元素,就是一个值或对象或数组...
- JS小技巧,如何去重对象数组?(一)
-
大家好,关于数组对象去重的业务场景,想必大家都遇到过类似的需求吧,这对这样的需求你是怎么做的呢。下面我就先和大家分享下如果是基于对象的1个属性是怎么去重实现的。方法一:使用.filter()和....
- 「C/C++」之数组、vector对象和array对象的比较
-
数组学习过C语言的,对数组应该都不会陌生,于是这里就不再对数组进行展开介绍。模板类vector模板类vector类似于string,也是一种动态数组。能够在运行阶段设置vector对象的长度,可以在末...
- 如何用sessionStorage保存对象和数组
-
背景:在工作中,我将[{},{}]对象数组形式,存储到sessionStorage,然后ta变成了我看不懂的形式,然后我想取之用之,发现不可能了~记录这次深刻的教训。$clickCouponIndex...
- JavaScript Array 对象 javascript的array对象
-
Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...
- JavaScript中的数组Array(对象) js array数组
-
1:数组Array:-数组也是一个对象-数组也是用来存储数据的-和object不同,数组中可以存储一组有序的数据,-数组中存储的数据我们称其为元素(element)-数组中的每一个元素都有一...
- 数组和对象方法&数组去重 数组去重的5种方法前端
-
列举一下JavaScript数组和对象有哪些原生方法?数组:arr.concat(arr1,arr2,arrn);--合并两个或多个数组。此方法不会修改原有数组,而是返回一个新数组...
- C++ 类如何定义对象数组?初始化数组?linux C++第43讲
-
对象数组学过C语言的读者对数组的概念应该很熟悉了。数组的元素可以是int类型的变量,例如int...
- ElasticSearch第六篇:复合数据类型-数组,对象
-
在ElasticSearch中,使用JSON结构来存储数据,一个Key/Value对是JSON的一个字段,而Value可以是基础数据类型,也可以是数组,文档(也叫对象),或文档数组,因此,每个JSON...
- 第58条:区分数组对象和类数组对象
-
示例设想有两个不同类的API。第一个是位向量:有序的位集合varbits=newBitVector;bits.enable(4);bits.enable([1,3,8,17]);b...
- 八皇后问题解法(Common Lisp实现)
-
如何才能在一张国际象棋的棋盘上摆上八个皇后而不致使她们互相威胁呢?这个著名的问题可以方便地通过一种树搜索方法来解决。首先,我们需要写一个函数来判断棋盘上的两个皇后是否互相威协。在国际象棋中,皇后可以沿...
- visual lisp修改颜色的模板函数 怎么更改visual studio的配色
-
(defunBF-yansemokuai(tuyuanyanse/ss)...
- 用中望CAD加载LISP程序技巧 中望cad2015怎么加载燕秀
-
1、首先请加载lisp程序,加载方法如下:在菜单栏选择工具——加载应用程序——添加,选择lisp程序然后加载,然后选择添加到启动组。2、然后是添加自定义栏以及图标,方法如下(以...
- 图的深度优先搜索和广度优先搜索(Common Lisp实现)
-
为了便于描述,本文中的图指的是下图所示的无向图。搜索指:搜索从S到F的一条路径。若存在,则以表的形式返回路径;若不存在,则返回nil。...
- 两个有助于理解Common Lisp宏的例子
-
在Lisp中,函数和数据具有相同的形式。这是Lisp语言的一个重大特色。一个Lisp函数可以分析另一个Lisp函数;甚至可以和另一个Lisp函数组成一个整体,并加以利用。Lisp的宏,是实现上述特色的...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- strcat (25)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- element style (30)
- dedecms模版 (53)
- vs打不开 (29)
- nmap (30)
- webgl开发 (24)
- parse (24)
- c 视频教程下载 (33)
- android 开发环境 (24)
- paddleocr (28)
- listview排序 (33)
- firebug 使用 (31)
- transactionmanager (30)
- characterencodingfilter (33)
- getmonth (34)
- commandtimeout (30)
- hibernate教程 (31)
- label换行 (33)