Android面试题及其答案(三)

1、list map set三个接口,存取元素时,各有什么特点?

List与Set都是单列元素的集合,它们有一个功共同的父接口Collection。

Set里面不允许有重复的元素.

存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。

取元素:没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。

List表示有先后顺序的集合.

存元素:多次调用add(Object)方法时,每次加入的对象按先后顺序排序,也可以插队,即调用add(int index,Object)方法,就可以指定当前对象在集合中的存放位置。

取元素:方法1:Iterator接口取得所有,逐一遍历各个元素

方法2:调用get(index i)来明确说明取第几个。

Map是双列的集合,每次存储时,要存储一对key/value,不能存储重复的key,这个重复的规则也是按equals比较相等。

存元素:存放用put方法:put(obj key,obj value)。

取元素:用get(Object key)方法根据key获得相应的value;

也可以获得所有的key的集合,还可以获得所有的value的集合;

还可以获得key和value组合成的Map.Entry对象的集合。

List以特定次序来持有元素,可有重复元素。Set无法拥有重复元素,内部排序。Map 存key-value值,key不能重复。

2、Collection是什么?

Collection 是集合类的上级接口,继承与他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

3、ArrayList vs Vector

ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按 序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

4、HashMap vs Hashtable

HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,主要区别在于 HashMap 允许空(null)键值(key),由于非线程安全效率上可能高于 Hashtable。 HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。因为 contains 方法容易让人引起误解。 Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map interface 的一个实现。 最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问 Hashtable 时,不需要自己为它的 方法实现同步,而 HashMap
就必须为之提供外同步。

Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所以性能不会有很大的差异。

5、sleep vs wait

sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时间后会自动恢复。调用 sleep 不会释放对象锁。

wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发 出 notify(或 notifyAll)方法后本线程才进入对象锁定池准备获得对象锁进入运行状态。

6、android touch事件分发机制

View关键的函数:dispatchTouchEvent,onTouch,onTouchEvent,onClieck。

ViewGroup关键函数:dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。

onInterceptTouchEvent返回true就代表拦截子view的touch事件,那么此时就交由父类view的dispatchTouchEvent处理。

详细流程请参另一篇博文:http://blog.csdn.net/wdong_love_cl/article/details/51477607

7、android断点续传下载实现的大致思路

以下载为例:

使用HttpURLConnection进行下载,使用RandomAccessFile进行文件写入。

1、需要获取需要下载的文件大小并设置到本地文件,使用:

int filesize = 0;

filesize = httpURLConnection.getContentLength();

RandomAccessFile file;

file.setLength(filesize);

2、根据文件大小和线程数来确定每个线程需要下载的大小,如:文件的大小为8M,有4个线程,那么每个线程就需要下载2M。

3、确定每个线程下载的开始和结束位置 httpURLConnection.setRequestProperty("Range", "bytes=" + startPosition + "-" + endPosition);

4、可以使用file.seek(position)来明确规定从什么地方开始写入;

8、handler.sendmessage的大致步骤

消息存到消息队列:

handler.sendMessage()-->handler.sendMessageDelayed()-->handler.sendMessageAtTime()-->msg.target = this[就是handler];queue.enqueueMessage()==>把msg添加到消息队列中

从消息队列取出并处理:

Looper.loop()[死循环,不停从消息队列取消息]--> msg.target.dispatchMessage(msg)--->handler.handleMessage()

详细流程请参另一篇博文:http://blog.csdn.net/wdong_love_cl/article/details/43572773

9、android scrollview嵌套viewpager滑动冲突

两种解决方法:

1、重写scrollview类的onInterceptTouchEvent方法,如果发现是水平滑动的话,那就在该方法内返回false,这样就不拦截viewpager了,会执行viewpager的onTouchEvent方法;

2、重写viewpager中的onTouchEvent方法,如果MotionEvent.ACTION_DOWN或者MotionEvent.ACTION_MOVE的水平滑动就设置getParent().requestDisallowInterceptTouchEvent(true),如果是竖直滑动就设置为false.

10、Android fregment 的使用

详情见:http://blog.csdn.net/wdong_love_cl/article/details/51569440

11、String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?

前者在编译的时候就将"abc"放在栈区的字符串常量池当中,并利用str1这个引用指向到这个字符串常量的引用,而后者是在运行的时候,在堆区创建一个字符串对象"abc"并利用str1指向这个对象获得引用,因此两个str1的引用指向的内存地址不同,而逻辑上输出的内容相同。

12、android的官方建议应用程序的开发采用mvc模式,何谓mvc?

mvc是model,view,controller的缩写,mvc包含三个部分:

模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。

视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。

控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给model处理。

android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:

1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话,就一定 可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通 信,幸运的是android提供了它们之间非常方便的通信实现。

2)控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通过activity交割model业务逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。

3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。

13、如何将SQLite数据库(dictionary.db文件)与apk文件一起发布?

可以将dictionary.db文件复制到工程中的res/raw目录中。所有在res/raw目录中的文件不会被压缩,这样可以直接提取该目录中的文件。

14、如何打开res/raw目录中的数据库文件?

在Android中不能直接打开res /raw目录中的数据库文件,而需要在程序第一次启动时将该文件复制到手机内存或SD卡的某个目录中,然后再打开该数据库文件。复制的基本方法是使用getResources().openRawResource方法获得res raw目录中资源的InputStream对象,然后将该InputStream对象中的数据写入其他的目录中相应文件中。在Android中可以使用SQLiteDatabase.openOrCreateDatabase()方法来打开任意目录中的SQLite数据库文件。

时间: 2024-10-05 07:38:27

Android面试题及其答案(三)的相关文章

常见Android面试题及答案(详细整理)

常见Android面试题及答案(详细整理) 1. 请描述一下Activity 生命周期. 答: 如下图所示.共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy(). onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问. onStart(): Activity变为在屏幕上对用户可见时调用. o

Android 面试题及答案(2)

1.Activity相关.launchmode,OnSaveInstnceState,生命周期等. 4种默认的launchmode,以及OnNewIntent的回调. OnNewIntent->OnRestart->OnStart->onResume OnActivity->OnResume. OnNewIntent ,OnActivityResult? OnNewIntent launchmode with singletask or singleInstance. but if

【转】 71道经典Android面试题和答案,重要知识点都包含了

,,面试题1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存  B.内存回收程序负责释放无用内存   C.内存回收程序允许程序员直接释放内存   D.内存回收程序可以在指定的时间释放内存对象 2.        下面异常是属于Runtime Exception 的是(abcd)(多选)      A.ArithmeticException      B.IllegalArgumentException       C.NullPoint

2018年Android面试题含答案(上)

这些面试题是我在今年年初换工作的时候整理,没有重点.包括java基础,数据结构,网络,Android相关等等.适合中高级工程师.由于内容过多,将会分为上下两部分.希望能够帮到一些朋友,如果帮助到你,希望能够点个赞.没有单独分出来,面试题目都是穿插的.因为有些事外面试过程中遇到的,我就又加上去了.总之你弄懂了这些,基本是没有问题了.如果是bat那些企业,你还得准备算法,jvm这些知识.好了,废话不多说了. 1.java中==和equals和hashCode的区别  基本数据类型的==比较的值相等.

android面试题及答案

JAVA 1.GC是什么? 为什么要有GC? GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法. 2.XML包括哪些解释技术,区别是什么? DOM和SAX DOM将文档解析成一颗文档树,可在节点上进行遍历.增加.修改和删除.一次性读入内存,对内存消耗大. SAX至上

Android 面试题(答案最全)

1. Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.2.sim卡的EF 文件有何作用sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本 身可以有自己的操作系统,EF就是作存储并和手机通讯用的3.嵌入式操作系统内存管理有哪几种, 各有何特性页式,段式,段页,用到

Android面试题及其答案(二)

内存相关的问题在面试中被问到的概率还是比较大的,而且内存优化对于一个程序的性能而言也是至关重要的,现在就让我们一起来学习吧! 不废话,直接上干货~ 一.内存泄漏 内存泄漏就是我们对某一内存空间的使用完成后没有释放. 主要原因:导致内存泄漏最主要的原因就是某些长存对象持有了一些其它应该被回收的对象的引用,导致垃圾回收器无法去回收掉这些对象. 出现的场景: 1.数据库的cursor没有关闭: 2.构造adapter时,没有使用缓存contentview: 3.Bitmap对象不使用时采用recycl

2018年Android面试题含答案--适合中高级(下)

1.Activity生命周期? onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy() 2.Service生命周期? service 启动方式有两种,一种是通过startService()方式进行启动,另一种是通过bindService()方式进行启动.不同的启动方式他们的生命周期是不一样. 通过startService()这种方式启动的service,生命周期是这样:调用sta

Android面试题及其答案(一)

handler vs AsyncTask AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 优点: l  简单,快捷 l  过程可控 缺点: l 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来 Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动T