文档章节

Android面试题及其答案(三)

abcijkxyz
 abcijkxyz
发布于 2016/07/30 17:24
字数 2256
阅读 3
收藏 0
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数据库文件。



本文转载自:http://blog.csdn.net/wdong_love_cl/article/details/51638936

共有 人打赏支持
abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问
Android开发工程师面试指南(面试题集附答案、简历模板)

给Android开发工程师的一份面试指南,包含面试题集与简历模板。 面试题集 面试题集里的答案大部分来源于我的博客,因此这个题集也相当于是我的博客的精华版,希望对需要面试的Android同学有所...

郭孝星
04/08
0
0
工科转CS | Amazon,华为,阿里菜鸟 会把offer给怎样的求职者?

专栏 | 九章算法 网址 | www.jiuzhang.com 学员背景 北美 Top50 非 CS 相关工科专业在职半年,裸辞刷题三个月 拿到 offer:Amazon,华为,阿里菜鸟,美东一个做手机 APP的小公司。 签约 offe...

九章算法
11/10
0
0
【Android面试】Android面试题集锦 (陆续更新)

一些常见的Android面试基础题做下总结,看看你能做出多少道? 1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗? 这里Android123提示大家,Intent的一些标记有FLAG_ACTIVITY_B...

晨曦之光
2012/03/01
1K
0
Android--面试中遇到的问题总结(三)

《Android 开发工程师面试指南 LearningNotes 》,作者是陶程,由梁观全贡献部分。大家可以去知乎关注这两位用心的少年。这份指南包含了大部分Android开发的基础、进阶知识,不仅可以帮助准备...

sealin
2017/02/22
0
0
百度Android开发面试题

1、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 DVM指Dalvik的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个D...

无鸯
2011/09/05
41.6K
16

没有更多内容

加载失败,请刷新页面

加载更多

KaliLinux常用服务配置教程DHCP服务工作流程

KaliLinux常用服务配置教程DHCP服务工作流程 DHCP服务工作流程如图1.1所示。 具体的工作流程如下所示: (1)DHCP客户端以广播的方式发出DHCP Discover报文。 (2)所有的DHCP服务器(DHCP ...

大学霸
11分钟前
0
0
Spring Junit单元测试配置

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.2.RELEASE</version></dependency><dependency> <group......

TonyTaotao
16分钟前
0
0
线程安全与非线程安全-个人理解

类的某个方法是线程安全的, 说明这个方法在并发执行中,从开始执行到执行完毕,都是同步的, 比如:之前做的并发数据导出,并发的查询数据库, 但是在写入excel的时候,需要做一个同步,因为...

Java搬砖工程师
17分钟前
1
0
如何提升JavaScript的任务效率?学会后教给你同事

本文由云+社区发表 一、概述 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增...

腾讯云加社区
18分钟前
0
0
Hadoop运行在Kubernetes平台实践

Hadoop与Kubernetes就好像江湖里的两大绝世高手,一个是成名已久的长者,至今仍然名声远扬,一个则是初出茅庐的青涩少年,骨骼惊奇,不走寻常路,一出手便惊诧了整个武林。Hadoop与Kubernete...

微笑向暖wx
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部