文档章节

Android面试题及其答案(三)

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



© 著作权归作者所有

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6195
码字总数 1876
作品 0
深圳
项目经理
阿里腾讯百度头条美团iOS面试总结

阿里腾讯百度头条美团iOS面试总结 2018-05-30 15:24编辑: garace分类:程序人生来源:代码湾 互联网面试iOS 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师 京东招聘iOS开发工...

garace ⋅ 05/30 ⋅ 0

2018Android面试经历

面试中遇到的一些问题 Q1:ListView和RecyclerView的使用,就问我它们有什么区别? Q2:既然RecyclerView在很多方面能取代ListView,Google为什么没把ListView划上一条过时的横线? Q3:你用...

codeGoogle ⋅ 05/16 ⋅ 0

android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

Android精选源码 Android 炫酷的多重水波纹源码(http://www.apkbus.com/thread-598586-1-1.html) Android开发一款基于行为识别和个性化推荐的智能推荐APP(http://www.apkbus.com/thread-5985...

逆鳞龙 ⋅ 05/02 ⋅ 0

互联网三线城市春招Android面试笔记

概述: 坐标:福建福州 学历:专科(软件工程专业) 历时:2个月(2018.3.20~2018.5.17) 平台:前程无忧(51job.com)、智联招聘(zhaopin.com) 投递简历:62份(前程49+智联13) 面试:2...

E_Sun伊森 ⋅ 05/18 ⋅ 0

2018 Android 面试心得,已拿到 offer

code小生,一个专注于 Android 领域的技术分享平台 作者:huisonma 链接:https://www.jianshu.com/p/855ff21e0a13 声明:本文是 huisonma 原创,转发等请联系原作者授权。 从 16 年毕业至今...

h176nhx7 ⋅ 04/16 ⋅ 0

如何理解并掌握 Java 数据结构

一说起“数据结构”可能很多同学都又交给老师了。但是实际工作中如果做得深入一些,特别是越往上发展,越大公司越离不开数据结构。本场 Chat 作者将带领大家重温《Java 数据结构》,讲解的内...

valada ⋅ 04/12 ⋅ 0

我的Android重构之旅:架构篇

EF A舞蹈服 去年10月底来到了新公司,刚开始接手 Android 项目时,发现该项目真的是一团遭,项目开发上没有任何架构可言,开发人员连简单的 MVC、MVP 都不了解,Activity 及其臃肿,业务边界...

codeGoogle ⋅ 05/31 ⋅ 0

[面经福利]如何进入百度、阿里,一个6年Android老司机的面经

热文导读 | 点击标题阅读 Android架构进阶学习路线图 吊炸天!74款APP完整源码! 2018最新精选的Android优秀开源库和项目,很有价值 花絮 先简单说说我最近的面试经历吧。面试的公司很多,其...

xj032w2j4ccjhow8s8 ⋅ 05/10 ⋅ 0

有奖征文004期|从小白到大牛,进阶路上有话说?

从小白到大牛,是用无数代码堆砌出的血泪史,就问你,想不想一吐为快? 想不想让大家了解你和代码那些风花雪月的故事? 或独自一人用青春和热血挥洒代码的经历? 咳咳,其实就是想让你写写程...

慕课网官方_运营中心 ⋅ 05/29 ⋅ 0

android沉浸状态栏实现、地图多线路规划、Retrofit+RxJava+Jsoup+Mvp模式资讯类App等源码

Android精选源码 Android各种沉浸式状态栏实现源码(http://www.apkbus.com/thread-598927-1-1.html) Android自定义View实现炫酷的星期日期选择控件源码(http://www.apkbus.com/thread-59893...

逆鳞龙 ⋅ 05/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

十五周二次课

十五周二次课 17.1mysql主从介绍 17.2准备工作 17.3配置主 17.4配置从 17.5测试主从同步 17.1mysql主从介绍 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主...

河图再现 ⋅ 47分钟前 ⋅ 0

docker安装snmp rrdtool环境

以Ubuntu16:04作为基础版本 docker pull ubuntu:16.04 启动一个容器 docker run -d -i -t --name flow_mete ubuntu:16.04 bash 进入容器 docker exec -it flow_mete bash cd ~ 安装基本软件 ......

messud4312 ⋅ 今天 ⋅ 0

OSChina 周一乱弹 —— 快别开心了,你还没有女友呢。

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享吴彤的单曲《好春光》 《好春光》- 吴彤 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :小萝莉街上乱跑,误把我认错成...

小小编辑 ⋅ 今天 ⋅ 7

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部