android面试经历精选3篇

来源:专题 时间:2016-06-30 12:10:07 阅读:

【www.zhuodaoren.com--专题】

第一篇:《我的android面试经历》

我的android面试经历 Android 做了一年的android应用开发,准备换个工作环境,结果在面试中却成了一个典型的面霸,两周的十个工作日里,竟然笔试加面试达到了15次。不过,在这些面试中学到了不少东西!下面把我的android面试经历给大家分享一下,免得大家以后走弯路。 同一家公司可能面试了多次,同一家公司我就放在一起了。笔试一般都是java基础和C/c++基础。 Java知识点包括:接口与抽象的使用及区别,多线程,socket基础,集合类,也有个别公司考察定义,很无语。 C/C++知识点包括:指针的移动,排序算法,链表,有时还会有二叉树的遍历或图的遍历。 这里具体说一下android面试题目: 南京WSCX: 1、 Activity的生命周期,两个Activity之间跳转时必然会执行的是那几个方法? 2、 不用service,B页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放? 3、 Service有哪些启动方法?有什么区别? 4、 (音乐播放器)如何加载的音乐信息,如何改善其效率。 5、 电话状态的监听,改变打电话界面(听说我改动的Phone源码就不再问了)。 6、 ListView如何提高其效率? 移动应用开发“三不要” 不要让我等 不要让我想 不要让我烦 1. 分页 2. 异步加载 3. 耗时操作给用户进度提示 7、 还有一些都是在上面的基础上扩展的,跟具体项目有关,就不说了。 总结:他们只是问一问这些基础的知识,都是给外包公司招人,自己做不了主,也就是检验一下应聘人员懂不懂android。 南京SL: 1、 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二者有什么区别? 都是隐式意图 Task:主界面 首先创建一个Task栈, 配置了Main Launcher Activity被启动,作为栈底 从其他跳转过来的Activity在启动它的Activity所在的栈里 2、 启动一个Activity有哪几种方法? Start() Main Launcher的Activity 接收事件 通知 桌面小组件 不建议: 服务 广播 3、 怎么样在启动一个Activity时就启动一个service? 4、 两个Activity之间怎么传递数据? 总结:他们也是刚开始做Android,面试人员最多有两三年工作经验,我感觉他们接触Android时间不一定跟我长,也就只问一些他们自己擅长的那一块。 南京RH: 这家让我比较窝火,一个Android问题没问,全是问Java知识,没有笔试,但说了不少题目,让你当场反应,大多是说算法,说出问题的解决思路。最后我问他们不是招收Android工程师吗,怎么没问Android知识?回答竟然是:Android这东西很简单,会了Java经过几天的培训,就能很快做Android,我晕,那你直接招收Java工程师就是了,干嘛找我!我

听以前的主管说过,有些公司不缺人,却打出招聘的牌子,目的就是为了从面试人员身上获取一些问题的解决方案,获取一些别的公司的发展方向,这下我算是见识了! 南京ZDW: 面试官说他的面试题目都是网上找的,自己不懂,就看网上的答案与我的作对比。这次真的被问住了,问题全是实际工作中从没考虑过的。 1、 Android程序与Java程序的区别?并强调了不是虚拟机方面的! J2EE用于服务端编程 性能 稳定性 安全性 Android 客户端 用户体验 JAVA J2EE Struts Spring Hibernate AJAX HRML JS XML HTTP SQL Android: JAVA XML HTTP Android SQL 2、 Android中Task任务栈的分配。 3、 程序之间的亲和性的理解。 4、 同一个程序,但不同的Activity是否可以放在不同的Task任务栈中? 5、 在Android中,怎么节省内存的使用,怎么主动回收内存? 核心:什么占内存 资源池:同类临时对象创建多次 对象在不需要使用的时候不创建 Activity或者Service中的onDestroy方法中 主动释放 6、 Android四大组建,对各种组件的理解。(因为在不同的资料中,有人把Activity、Intent、Service、ContentProvide看为四大组建,也有人把Activity、Broadcast Receives或Intent Receives、Service、ContentProvide看成四大组建)所以这个话题就牵出来的问题比较多。 7、 对Android的理解。 总结:这只是我会的几个,不会的太多,当时大脑一热把不会的问题也全忘了,就问android方面的问题就问了一个多小时,只记得这几个了,我就纳闷了,我也经常上网看这方面的知识,有些问题我这么就没见过呢,他们这都是在哪里找的?? 南京RBKJ: 这个大多是底层,我也很无语,一会驱动开发,一会Framwork修改,我感觉自己是一个一年级小孩再被初中生问问题,最后就说了一句话:不好意思,你们就当我没来过! 南京CMKJ:1、Intent 传递数据时,可以传递哪些类型数据?2、不同工程中的方法是否可以相互调用?3、Android中Provide是用来干什么的?4、电话的状态有哪之中,怎么判断是来电还是去电?5、在Android中是如何实现判断区分通话记录中的电话状态,去电,来电、未接来电?6、音乐播放器如果有大量的音乐文件,如何提高界面展示速度?7、还有些具体的项目经验经历。 上海SN: 1、音乐播放功能api中播放流程是怎么样的? 2、Activity怎么和service绑定,怎么在activity中启动自己对应的service? 3、 Service有几种启动方式,区别是什么? 4、 界面间的跳转用什么实现,跳转时activity的生命周期。 5、 界面间的布局是怎么实现的,控件的排列。 6、项目中你遇到的最大困难是什么,怎么

解决的。 岁月 –> 经历—>经验 故作思考状 先想好答案 有多个解决问题的办法, 这些方法可以在公司中使用来解决未来的问题 过程是曲折,道路坎坷, 最后靠自己的努力解决了。 1. 看文档: 自定义的通知栏 2. 上网google eoeandroid 3. Android交流群 怎么证明自己是有能力、有经验解决问题 7、有些项目(我做过的)android中已经有了,而你又自己实现了,为什么自己实现,以及你用的实现方式以及所用知识点,二者相比,哪个更有优点,优点在哪。 系统自带的应用缺点: UI简陋,用户体验稍差 UI 差异化的功能 8、你做的一个比较复杂的界面,画出来,每个部分用的什么控件,各个控件中你用到的的属性是什么,写出来。 9、如果有种功能,他认为你做的显得不够完美,可能会把这个不完美的地方说出来,让你根据这问题给出一个解决方案。 10、 Android用的数据库是什么样的?它和sql有什么区别?为什么要用ContentProvide?它和sql的实现上有什么差别? 如果进个大公司,技术全面的面试官来面你,会问得很全但很粗略,各知识点都涉及到,还给你发挥的境地。小公司就会很不幸了,尤其是面试官,自己也就懂那一点东西,他不管你会什么,就只问他会的那点知识,你们的经验有交集还好,不然就算你是诸葛亮,也只能自认倒霉! 还有几家,是刚做Android,就没问这方面的知识,就问了问java方面的,在这里就不说了,希望这些对大家有用! 看到有几位朋友说是要看看java基础部分,我整理了一下,帮要找工作的同学复习一下,希望有帮助(具体的公司就不说了,只说题目): 1.抽象类和接口的区别2.sleep()和wait()方法的区别3.TreeMap和hashMap的区别4.length和length()的区别 5.重载和重写的区别 6.数据库的查询语句(求和,平均值,最大值等) 7.写四个线程,操作同一个数,两个用于加1,两个用于减1。 8.写一个socket的简单程序,实现客户端与服务器通信 9.写10个简单的linux命令 adb ls cd rm rmdir mkdir 10..EJB和java程序的区别11.什么是集群?12.内存的堆和栈以及数据的存储位置,数组和链表的最根本的区别13.写出JDBC连接数据库的语句14.还有个是继承一个A类同时又实现一个借口,A类和接口中都有同一个成员变量x,问你会不会编译出问题15.实现一个单实例模式类16.统计一个字符串中个字母出现的次数,按照a~zA~Z的顺序17.反转一个字符串,并去掉其中的空格18.在一个人机对弈程序中,最关键步骤是什么 19.二叉树的非递归遍历 20.用多种排序方法对一组数据排序 21.给定一个图(数据结构中的图),计算两点间的最短

路径 时间太久了,只记得这么多了,希望对大家有帮助!

第二篇:《android面试经验宝典》

面试,其实也就那么一回事

真诚 自信 努力 好学 谦虚 进步

到现在已经是工作两年了,前一家是全国十大软件外包之一 ,所以接触的项目,人员也比较多而杂。

上个月因为个人原因离开公司,其实大家都知道外包公司锻炼人,很锻炼人,不是一般的锻炼人。

但是当你的技术积累到一定地步,工资待遇加不上去,职位等级升不上去,你才知道,原来外包公司的成本控制是这么来的。

国内前十的外包 :以前我在呆过一家,中软人事经理现在在我QQ好友里,长期联系,易思博和文思 都去去面试过,一家给了offer,一家被我拒绝。

包括投简历,找了五天的工作 在五天中一共接了12份简历,其他被我拒绝或者因为地域或者因为公司规模或者因为产品原因而没有去的有十几个,面试11家公司后,叫我马上上班的有四家,包括我现在这家,叫我复试的有三家,叫我跟老板详谈待遇等的有三家,无音讯的有一家。

上班之后才后悔莫及,因为法本、华为、TCL、中兴之后都给我电话邀我面试,甚至肯为我单独安排时间,是我下班后。

好了,话不多说 ,给大家说说如何才能找到一份好工作吧。

首先,公司每天收到几百封简历,为什么通知你面试 ,这个就是看简历。毕竟最开始他是在网上茫茫简历里面看到你,除了你的简历帮你作介绍,他没有其他途径可以了解。 简历的好坏标准根据人事的喜好不一无法判定,不过最基础的名字、学位、联系电话等肯定是会有的,最重要的,也是我个人觉得最好的简历就是辞藻不要过于华丽,技术人员不是销售,不需要靠嘴吃饭,只要靠事实证明,你的项目经验尤为重要,不要写的很简单,一定要详细描述项目功能以及你的职责。

我的项目经验写了八个,面试人员很奇怪说:“你怎么做这么多。” 我说:“外包公司项目周期多项目多两年做了六个,另外两个是我在项目间隙自己写的demo,自己看书学习做的项目。”

这样有几个好处:一 说明你加班多 能加班

二 说明你自学能力强爱自学

三 说明你的独立开发能力

四 说明你项目经验足够

然后一个,简历项目经验尽量多方面,不要每个项目功能一样,职责一样,最好有几个最新技术的运用以及你自己所主导的项目,还有就是一个文档编写以及自我性能测试的经验。

一个好的简历是你成功获得面试机会的重要砝码,但是不是你面试成功的全部。获得了面试机会只是进了一个门槛,随时有可能被赶出来,这个时候才是真正的面试。

首先,衣着朴实,大多技术人员,不喜欢太过花哨的打扮,觉得不踏实。然后纸笔准备好,因为笔试一定会有。

然后就是自信,这个是最最最重要的,你自己都不相信自己,别人还如何相信你。 笔试其实没什么好说的,无非就是网上现在的一些面试题笔试题,只要你不是一无所知,一般都可以过,还有就是不要害怕留白,但是一定不要乱写。

这个跟你大学的考试不一样,不要想着填满了就可以了,一切从实际出发,会就会,不会就不会。

面试你的人最重要的比例就是技术面试,你一定要镇定,自信,答不上没关系,会就会,不会就不会,没有哪个做技术的人无所不知,在学习中成长才是我们技术的真实阐述。

首先就是自我介绍,你的基本情况,教育经验,工作经验。这些都不是很重要,有一个经典的陷阱就是你的离职原因,就算你是因为公司太差或者工资太低或者管理不行等原因,但是你一定不能这么说,不能责怪。最好的回答就是觉得技术到了瓶颈,寻求更大的发展······ 之后就是技术问题,你做过的就放心大胆的说,还要仔细的多说;不会的就直说没有做过这一方面,但是希望能做到,在以后工作能学到。

最后一个就是薪资待遇的讨论,先要知道市面价格,不要说低,不要说高,但是一定不要轻易降低自己的标准,这个就是自信,人问你有点高了,你就说个人感觉凭自己的技术一定值这个价。一定要对你的技术自信,因为这个就是你依赖吃饭的技能。不盲目,不狂妄,但是也不要妥协!!!

我今天要在这里郑重声明一个观点 : 我最讨厌两种人 1 把安卓收费破解山寨免费的 2 面试把工资降低的

为什么呢 ?

1 你自己就是做安卓的 你不赚钱 公司也是要赚钱的

都不收费了 你去喝西北风 还是老板砸锅卖铁

2 某些人 某些刚出来的人 号称不要钱也上班

只要给工作 价格无所谓 只要让上班 工资低点也好

我想说 这个不是你一个人的事 这是整个安卓市场

今年安卓工价普遍降低一到两千 就是有这些人

自己开7K 公司说 我们只能给6K 他就说 好吧 6K

你自己对自己的技术有自信吗 你这样 这家公司以后招你同资历的都是6K

安卓市场工价全部降低 对你有好处 你不要换工作了?

但是有人说 技术和价值没有绝对的等值,你觉得你能开6K,但老板可能不觉得你能拿6K 如果你找3-4个月工作 一直喊6K却没有公司要你 如果这样死磕下去,伤的是谁?

我要说 1 老板觉得你不能拿 这是他眼力劲不够 世界那么大 中国科技公司成千上万 何必吊死一棵树

2 三四个月你一直说6K 一直找不到工作 这个就是你自己原因了 好高骛远 你真不值这么多

3 三四个月一直面试 你还找不到工作 你还找什么工作啊 还不转行

4 如果你一直觉得你的技术一直不等于你的价值 那么 你一定在这公司呆的不开心

好了 就说这么多了 再说一句 看了我的这个文章 简历写好了 面试机会就没问题了 看了我的博文,面试就没问题了 不是吹牛

第三篇:《android面试常见题目》

1、 Android的四大组件是哪些,它们的作用?.................................................................... 3

2、 请介绍下Android中常用的五种布局。........................................................................... 3

3、 android中的动画有哪几类,它们的特点和区别是什么 ................................................ 3

4、 android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。 ....... 3

5、 ListView的优化方案 ......................................................................................................... 4

6、 请介绍下Android的数据存储方式。............................................................................... 4

7、 activity的启动模式有哪些?是什么含义?.................................................................. 6

8、 跟activity和Task 有关的 Intent启动方式有哪些?其含义? ............................... 7

9、 请描述下Activity的生命周期。 .................................................................................... 9

10、 activity在屏幕旋转时的生命周期 ............................................................................ 10

11、 如何启用Service,如何停用Service。................................................................... 10

12、 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用

意。 ......................................................................................................................................... 11

13、 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关

系。 ......................................................................................................................................... 11

14、 简要解释一下activity、 intent 、intent filter、service、Broadcase、

BroadcaseReceiver ...................................................................................................................... 13

15、 说说mvc模式的原理,它在android中的运用,android的官方建议应用程序的开

发采用mvc模式。何谓mvc? ..................................................................................................... 13

16、 什么是ANR 如何避免它? ............................................................................................ 13

17、 什么情况会导致Force Close ?如何避免?能否捕获导致其的异常? ................ 14

18、 描述一下android的系统架构..................................................................................... 14

19、 请介绍下ContentProvider是如何实现数据共享的。............................................. 14

20、 Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异

常,你遇到过吗?诺有的话会导致什么问题?如何解决? ..................................................... 15

21、 IntentService有何优点? ........................................................................................... 15

22、 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状

态? ............................................................................................................................................ 15

23、 如何将一个Activity设置成窗口的样式。 ............................................................... 15

24、 如何退出Activity?如何安全退出已调用多个Activity的Application?....... 15

25、 AIDL的全称是什么?如何工作?能处理哪些类型的数据? .................................... 17

26、 请解释下Android程序运行时权限与文件系统权限的区别。 ................................. 17

27、 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。 ..... 17【android面试经历精选3篇】

28、 android系统的优势和不足.......................................................................................... 17

29、 Android dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念 .......... 19

30、 sim卡的EF文件是什么?有何作用 ............................................................................ 19

31、 嵌入式操作系统内存管理有哪几种, 各有何特性 ................................................... 19

32、 什么是嵌入式实时操作系统, Android 操作系统属于实时操作系统吗? ............... 19

33、 一条最长的短信息约占多少byte? .............................................................................. 19

34、 有一个一维整型数组int[]data保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整

为50%。 ......................................................................................................................................... 19

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

36、

37、

38、

39、

40、

如何将打开res aw目录中的数据库文件? ................................................................. 19 DDMS和TraceView的区别? ......................................................................................... 19 java中如何引用本地语言 ............................................................................................ 19 谈谈Android的IPC(进程间通信)机制 .................................................................. 20 NDK是什么...................................................................................................................... 20

1、 Android的四大组件是哪些,它们的作用?

答:Activity:Activity是Android程序与用户交互的窗口,是Android

构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期以及一些跳转逻辑

service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事务,定义好需要接受的Intent提供同步和异步的接口

Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的接口模型,大大简化上层应用,对数据的整合提供了更方便的途径

BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件

广播模型

2、 请介绍下Android中常用的五种布局。

常用五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。

一、FrameLayout:所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。二、LinearLayout:线性布局,每一个

LinearLayout里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal" )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。三、AbsoluteLayout:绝对布局用X,Y坐标来指定元素的位置,这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。四、RelativeLayout:相对布局可以理解为某一个元素为参照物,

来定位的布局方式。主要属性有:相对于某一个元素android:layout_below、 android:layout_toLeftOf相对于父元素的地方

android:layout_alignParentLeft、android:layout_alignParentRigh;五、TableLayout:表格布局,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素。每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。

3、 android中的动画有哪几类,它们的特点和区别是什么

答:两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。

4、 android 中有哪几种解析xml的类?官方推荐哪种?以及它们的原理和区别。

答:XML解析主要有三种方式,SAX、DOM、PULL。常规在PC上开发我们使用Dom相对轻松些,但一些性能敏感的数据库或手机上还是主要采用SAX方式,SAX读取是单向的,优点:不占内存空间、解析属性方便,但缺点就是对于套嵌多个分支来说处理不是很方便。而DOM方式会把整个XML文件加载到内存中去,这里Android开发网提醒大家该方法在查找方面可以和XPath很好的结合如果数据量不是很大推荐使用,而PULL常常用在J2ME对于节点处理比较好,类似SAX方式,【android面试经历精选3篇】

同样很节省内存,在J2ME中我们经常使用的KXML库来解析。

5、 ListView的优化方案

答:1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。

2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。

6、 请介绍下Android的数据存储方式。

答:使用SharedPreferences存储数据;文件存储数据;SQLite数据库存储数据;使用ContentProvider存储数据;网络存储数据;

Preference,File, DataBase这三种方式分别对应的目录是

/data/data/Package Name/Shared_Pref, /data/data/Package Name/files, /data/data/Package Name/database 。

一:使用SharedPreferences存储数据

首先说明SharedPreferences存储方式,它是 Android提供的用来存储一些简单配置信息的一种机制,例如:登录用户的用户名与密码。其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,具体实例如下: void ReadSharedPreferences(){

String strName,strPassword;

SharedPreferences user = getSharedPreferences(“user_info”,0); strName = user.getString(“NAME”,””);

strPassword = user getString(“PASSWORD”,””);

}

void WriteSharedPreferences(String strName,String strPassword){ SharedPreferences user = getSharedPreferences(“user_info”,0); uer.edit();

user.putString(“NAME”, strName);

user.putString(“PASSWORD” ,strPassword);

user.commit();

}

数据读取与写入的方法都非常简单,只是在写入的时候有些区别:先调用edit()使其处于编辑状态,然后才能修改数据,最后使用commit()提交修改的数据。实际上SharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data/<package name>/shares_prefs下。使用SharedPreferences是有些限制的:只能在同一个包内使用,不能在不同的包之间使用。

二:文件存储数据

文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与 Java中实现I/O的程序是完全一样的,提供了openFileInput()和

openFileOutput()方法来读取设备上的文件。具体实例如下:

String fn = “moandroid.log”;

FileInputStream fis = openFileInput(fn);

FileOutputStream fos = openFileOutput(fn,Context.MODE_PRIVATE); 三:网络存储数据

网络存储方式,需要与Android 网络数据包打交道,关于Android 网络数据包的详细说明,请阅读Android SDK引用了Java SDK的哪些package?。 四:ContentProvider

1、ContentProvider简介

当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用

sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。

2、Uri类简介

Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的

ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:

1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://„

2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:

要操作contact表中id为10的记录,可以构建这样的路径:/contact/10 要操作contact表中id为10的记录的name字段, contact/10/name 要操作contact表中的所有记录,可以构建这样的路径:/contact?

要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下: 要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name

如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下: Uri uri =

Uri.parse("content://com.changcheng.provider.contactprovider/contact")

3、UriMatcher、ContentUrist和ContentResolver简介

因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从 Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。

UriMatcher:用于匹配Uri,它的用法如下:

1.首先把你需要匹配Uri路径全部给注册上,如下:

//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。

UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); //如果match()方法匹配

content://com.changcheng.sqlite.provider.contactprovider /contact路

第四篇:《Android经典面试题大全》

Android经典面试题大全[陆续完善中......]

分类: IT技术Android2012-02-03 14:51344人阅读评论(0)收藏举报

1、Android中为什么要经常使用内部类?

内部类特征:

(1) 内部类与父类同生共死;

(2) 内部成员变量之间,可以互相访问;

(3) 内部成员变量可以访问到父类的一些类型;

(4) 父类可以操作内部的一些东西

所以:在Android中常常为了满足自身的需要,而又不需要太复杂的去编写它,所以使用内部类。同时在Android中经常在设置事件和多线程的时候使用匿名内部类。

2、版本控制中,SVN与GIT有什么区别?

(1)GIT是分布式的,SVN不是;

这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。GIT跟SVN一样有自己的集中式版本库或服务器。但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,仍然能够提交文件,查看历史版本记录,创建项目分支等。当你突然遇到没有网络的环境时,这个将解决你的大麻烦。

(2)GIT把内容按元数据方式存储,而SVN是按文件;

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

(3)GIT分支和SVN的分支不同;

分支在SVN中一点不特别,就是版本库中的另外的一个目录。如果你想知道是否合并了一个分支,你需要手工运行像这样的命令svn propget svn:mergeinfo,来确认代码是否被合并。所以,经常会发生有些分支被遗漏的情况。然而,处理GIT的分支却是相当的简单和有趣。你可以从同一个工作目录下快速的在几个分支间切换。你很容易发现未被合并的分支,你能简单而快捷的合并这些文件。

(4)GIT没有一个全局的版本号,而SVN有;

目前为止这是跟SVN相比GIT缺少的最大的一个特征。SVN的版本号实际是任何一个相应时间的源代码快照。

(5)GIT的内容完整性要优于SVN:

GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

以上内容是从一些网站论坛找的观点,下面是自身总结

Git优势(对于SVN的优势):

(1) 速度(用C写的,比SVN快,且分布式提交,快照,分支合并等都在本地执行,最后与主分支合并才联网提交)

(2) 设计简单【android面试经历精选3篇】

(3) 强有力的支持非线性开发(有的程序员建上千个分支),方便管理分支

(4) 能够管理大型项目(如大型项目)

关注两点:速度,和大容量

3、什么是Android?

Android是手机操作系统,是Google的产品。

4、说说Android有哪些特性?

Android应用程序基本特性(官方总结

1、.apk是android应用程序安装格式,.dex是android二进制执行文件格式

2、Android操作系统是基于Linux的多用户操作系统,每一个应用程序都是使用不同的用户

3、默认情况下,一个应用程序一个userid,系统设定,不需要手动去设定,针对这样的应用程序,该用户有权限进行所有操作

4、每一个进程有自己的虚拟机实例,所以每个应用程序相对独立

5、默认情况下,应用程序都有自己的linux进程,当资源不够的时候,系统会决定何时关闭它

6、然而,也有例外:

|-可以给两个应用程序共享同一个userid,让彼此之间共享资源

|-应用程序可以请求访问系统资源,比如通讯录,短信等,但需求安装被授权

5 、Android的系统架构的理解

1、 Linux kernel

开源,C开发;优化内存管理;有自己的进程和线程机制;驱动模型比较好;支持驱动模型加载。

2、 HAL layer(硬件抽象层:负责核心驱动的沟通)Libraries、android Runtime

使用C、C++类库层;定义接口与驱动打交道;建立一种与硬件的逻辑关系;定制额外的需求。

3、 Application Framework

该层使用JNI调用倒数第二层的核心类库,即调用C++程序

4、 Application

核心的应用程序,该层直接调用上层的java类库,非常方便

6、执行eclipse的Run或者debug时候,发生了什么事情?

所有的操作都是有ADT控制

1、 将项目所有的源代码编译成dex二进制文件

2、 打包成APK

3、 选择target设备,发布的地方(模拟器)

4、 上传APK

5、 安装APK

6、 启动主activity

7、说说Activity,view ,window之间的关系

Activity在构造的时候new了一个Window与当前的上下文绑定,window是抽象类,通过phoneWindow来绑定自己定义的View,通过setContentView展示出来

8、掌上设备开发的局限性会制约我们的需求通常有哪些?

1、 更低的处理器【android面试经历精选3篇】

2、 有限的内存

3、 有限的存储能力

4、 小屏幕和低分辨率(HVGA、QVGA、WVGA)

5、 数据传输的高成本

6、 数据传输的低速度和高延迟

7、 不稳定的数据连接

8、 有限的电量

9、做手机开发经常需要思考哪些问题?

1、 性能(更快和更灵敏)官网有答案

2、 响应能力(拒绝ANR)

|-什么是ANR:应用程序无响应 application no response

|-何时会ANR:点击事件和按键事件5秒钟无响应;接收到消息后10秒钟没有处理返回 |-处理准则:IO操作(File,Sql,Network)和复杂的运算(游戏)最好用异步

3、 无缝:用户使用自然(与第三方程序的交互,前台后台的切换)

4、 安全:对操作权限的考虑

10、什么构成了android应用程序?(六大件)

1、 应用程序四大组件

① Activity

|-Activity是android应用程序的一个界面,可以通过这个界面查看联系人,打电话,玩游戏 |-一个应用程序通常包含多个Activity

|-Activity通过布局管理添加各种View组件

|-通过setContentView(int)方法可以将试图呈现出来

② Service

|-Service运行在后台,负责处理一些用户看不到,并且会有持续时间的事情。如下载数据。 |-Service不生成UI,是不可见的

|-所有用户实现的Service必须继承系统的Service类,并且在配置文件中进行注册 ③ Content Provider

|-数据在android当中是程序私有的

|-Content Provider提供了多个程序间数据交互的机制

|-Content Provider暴露出来一些标准的API来对数据进行操作

④ Broadcast Receiver(广播消息)

|-Broadcast Receiver负责对外部事件做出响应

|-Broadcast Receiver不生成UI,是不可见的

|-所有用户实现的Broadcast Receiver必须继承系统的Broadcast Receiver类,需要在程序中进行注册

|-应用程序可以通过Context.sendBraodcast()将自己的intent广播出去。其他程序通过自身的Broadcast Receivers截获后进行事件处理

2、 重要对象Intent(四大组件中,三个组件[Activity/Service/Broadcast Receiver]都要Intent的支持)

|-传递Intent启动一个Activity,startActivity,startActivityForResult

|-传递Intent启动一个Service,startService,bindService

|-通过Intent新加入一个广播,sendBroadcast,sendOrderedBroadcast(),

sendStickyBroadcast()

|-执行一个查询,ContentResolve的query()

3、 其他:Launcher(系统级应用程序)&Widget(小插件);Notification(提醒功能)

11、Manifest如何解析?

1、 应用程序安装的时候,manifest信息会放到一张系统索引表里面

2、 系统启动的时候,PackageManagerService读取Manifest信息

3、 应用程序启动的时候,Launcher进行系统级判断,比如最小的SDK等

4、 四大组件在需求的时候实例化操作

12、请说出Android进程5个等级

1、Active Process

@ 正处于Activity Resume()状态

@ 正处于与bound服务交互的状态

@ 正处于服务在前台运行的状态

@ Service生命周期函数正在被执行

@ BroadcastReceiver正在执行onReceive()方法

2、Visible Process【android面试经历精选3篇】

@ 当前进程不是焦点进程,Activity不在前段显示,但也没有完全隐蔽,能够看得见,比如弹出的对话框

【android面试经历精选3篇】

3、Started Service Process

@ 正在运行的,不在上述两种状态的Service

4、Backgroud Process

@ 不可见状态的Activity,又没有任何相关Service运行的,系统有个后台进程列表,一般情况采取后进先出的原则释放后台进程资源

5、Empty Process

@ 没有运行任何Components的进程,保留在这个进程主要是为了缓存的需要

13、什么是Activity?

修正上面部分观点:Activity不是界面,官方定义Activity是Android应用程序提供交互界面的一个重要主件,但本人认为也不太准确,至少不太全面;站在宏观一点的角度去看,Activity更像是个业务类,是承载应用程序界面及业务行为的类,包括UI,Service等等,类似我们耳熟能详的JavaBean。因为通过源码可知道,setContentView底层其实是window去实现的,也就是说,Activity控制Window类去展示View,而Window又是抽象类,所以有个PhoneWindow的类去实现它。

第五篇:《java&android的面试题(都是亲身经历的)》

Http协议

HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。 HTTP 协议的主要特点可概括如下:

1.支持客户/服务器模式。

2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP 协议简单,使得HTTP 服务器的程序规模小,因而通信速度很快。

3.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型Content-Type 加以标记。

4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5.无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

Http 请求由三部分组成,分别是:请求行、消息报头、请求正文

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI 和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中Method 表示请求方法;Request-URI 是一个统一资源标识符;HTTP-Version 表示请求的HTTP 协议版本;CRLF 表示回车和换行(除了作为结尾的CRLF 外,不允许出现单独的CR 或LF 字符)。

请求方法(所有方法全为大写)有多种,各个方法的解释如下:

GET 请求获取Request-URI 所标识的资源

POST 在Request-URI 所标识的资源后附加新的数据

HEAD 请求获取由Request-URI 所标识的资源的响应消息报头【android面试经历精选3篇】

状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值: 1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

Intent的基本用法

Intent主要用来在各个界面之间实现跳转及数据传递等意图,也可用来访问android系统提供一些功能。

Intent intent=new Intent();

intent.setClass(this,OtherActivity.class);

this.startActivity(this);

还可以用来得到界面之间的返回值,然后从中取出Boundle对象。进行数据的处理等。 SurfaceView 编写简单的开发框架

public class

GameSurfaceView extends

SurfaceView implements

SurfaceHolder.Callback

{

public GameSurfaceView(Context context)

{

super(context);

// 实例化SurfaceHolder

SurfaceHolder mSurfaceHolder = this.getHolder();

// 添加回调

mSurfaceHolder.addCallback(this);

this.setFocusable(true);

}

// 在surface的大小发生改变时激发

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)

{

}

// 在surface创建时激发

public void surfaceCreated(SurfaceHolder holder)

{

}

// 在surface销毁时激发

public void surfaceDestroyed(SurfaceHolder holder)

{

}

}

把apk文件安装到手机上

adb install c:\abc.apk

Handler机制的简单原理

因为android UI界面不是线程安全的,不允许子线程更新主UI线程,为了达到主界面的更新操作,此时便有了Handler对象, handler对象首先在主界面中进行声明,并覆盖其中的handlMessage(msg)方法。该方法用来接收子线程传递来的Message对象。子线程启动后,首先创建Message对象。然后将待发送的数据放入Message对象中,并使用handler的sendMessage(msg)来发送msg对象,发送成功够,handleMessage(msg)拿到msg对象,并用这个msg对象里面的数据 来在主线程中更新手机界面。

创建数据库的过程,使用SQLiteOpenHelper实现。

private static class DBOpenHelper extends SQLiteOpenHelper {

public DBOpenHelper(Context context, String name, CursorFactory factory, int version){

super(context, name, factory, version);

}

private static final String

DB_CREATE = "create table " + DB_TABLE

+ " (" + KEY_ID + " integer primary key

autoincrement, " +KEY_NAME+ " text not

null, " + KEY_AGE+ " integer," +

KEY_HEIGHT + " float);";

@Override

public void onCreate(SQLiteDatabase _db) {

db.execSQL(DB_CREATE);

}

}

调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容: db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY

AUTOINCREMENT, title TEXT, value REAL);");

db.execSQL("INSERT INTO widgets (name, inventory)"+ "VALUES ('Sprocket', 5)"); ContentValues cv=new ContentValues();

cv.put(Constants.TITLE, "example title");

cv.put(Constants.VALUE, SensorManager.GRAVITY_DEATH_STAR_I);

db.insert("mytable", getNullColumnHack(), cv);

Cursor c=db.rawQuery(

【android面试经历精选3篇】

"SELECT name FROM sqlite_master WHERE type='table' AND name='mytable'", null); 不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,使用游标,你可以:

通过使用 getCount() 方法得到结果集中有多少记录;

通过 moveToFirst(), moveToNext(), 和 isAfterLast() 方法遍历所有记录;

通过 getColumnNames() 得到字段名;

通过 getColumnIndex() 转换成字段号;

通过 getString(),getInt() 等方法得到给定字段当前记录的值;

通过 requery() 方法重新执行查询得到游标;

通过 close() 方法释放游标资源;

例如,下面代码遍历 mytable 表

Cursor result=db.rawQuery("SELECT ID, name, inventory FROM mytable"); result.moveToFirst();

while (!result.isAfterLast()) {

int id=result.getInt(0);

String name=result.getString(1);

int inventory=result.getInt(2);

result.moveToNext();

}

result.close();

什么是流?字节流与字符流的区别?

流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个数据流,这个数据源目的地也可以是文件、内存或网络等等。这个时候,你就可以想象数据好像在其中流动一样。

FileInputStream

FileOutputStream(f,true)

ObjectInputStream 序列化

BufferedReader readline缓冲区

ByteArrayInputStream toByteArray()

BufferedInputStream 字节流和字符流 之间的桥梁

InputStreamReader和InputStreamWriter

字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。

String,StringBuffer与StringBuilder的区别??

String 字符串常量

StringBuffer 字符串变量(线程安全)

StringBuilder 字符串变量(非线程安全)

String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String。 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

在大部分情况下 StringBuilder > StringBuffer

Java中线程实现的两种方法?线程的基本状态以及他们之间的关系?

方法一:继承自Thread类 方法二:实现Runnable接口

状态:就绪,运行,synchronize阻塞,wait和sleep挂起,结束。

wait必须在synchronized内部调用。

调用线程的start方法后线程进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态。

两个Activity之间怎么传递数据?

通过intent putExtra 方法基本数据类型都传递

Bundlebundle = new Bundle();

bumdle.putShort(key, value);

intent.putExtras(bundle);

获取到激活他的 getIntent();

Intent intent = getIntent();

Bundle bundle = intent.getExtras();

intent.getStringExtra("key","value"); android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。

1,利用invalidate()刷新界面

实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。

2,使用postInvalidate()刷新界面

使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。

MVC的理解

M:Model 模型

V:View 视图

C:Controller 控制器

本文来源:http://www.zhuodaoren.com/shenghuo232081/

推荐访问:android面试简历 android面试宝典
扩展阅读文章
热门阅读文章