1、Android笔试题及答案一、 选择题(20题,每题2分,共40分)1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(CG) A、输入流和输出流 B、字节流和字符流 C、节点流和处理流 D、File stream E、Pipe stream F、Random stream G、Filter stream 2.下列代码的执行结果是:(B) public class Test3 public static void main(String args) System.out.print
2、(100%3); System.out.print(,); System.out.println(100%3.0); A、1,1 B、1,1.0 C、1.0,1 D、1.0,1.0 3.以下程序的运行结果为(B) public class IfTest public static void main(String args) int x=3; int y=1; if(x=y) System.out.println(Not equal); else System.out.println(Equal); A、Not equal B、Equal C、无输出 D、编译出错 4.Java语言中字符串“学
3、Java”所占的内存空间是(A) A. 6个字节 B. 7个字节C. 10个字节D. 11个字节 5.关于下列程序段的输出结果,说法正确的是:(D) public class MyClass static int i; public static void main(String argv) System.out.println(i); A、有错误,变量i没有初始化。B、null C、1D、06.下列哪些语句关于内存回收的说明是正确的? ( B) A、 程序员必须创建一个线程来释放内存B、 内存回收程序负责释放无用内存 C、 内存回收程序允许程序员直接释放内存 D、 内存回收程序可以在指定的时
4、间释放内存对象 7. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(C). A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-128.下列程序段的输出结果是:(B) void complicatedexpression_r() int x=20, y=30; boolean b; b=x50&y60|x50&y-60|x60|x-50&y-60; System.out.println(b); A、true B、false C、1 D、09.activity对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(D
5、) A、onPause() B、onCreate() C、 onResume() D、onStart()10.android 中下列属于Intent的作用的是(C) A、实现应用程序间的数据共享 B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D、处理一个应用程序整体性的工作11.下列属于SAX解析xml文件的优点的是(B) A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能 B、不用事先调入整个文档,占用资源少 C、整个文档调入内存,浪费时间和空间 D、不是
6、长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会 消失 12.下面的对自定style的方式正确的是(A) A、 fill_parent B、 fill_parent C、 fill_parent D、 fill_parent 13.在SQL Server 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(D)。 BEGIN TRANSACTION A Update SALES Set qty=30 WHERE qty30 BEGIN TRANSACTION BUpdate SALES Set qty=40 WHERE qty40Updat
7、e SALES Set qty=50 WHERE qty50Update SALES Set qty=60 WHERE qty60 COMMITTRANSACTION B COMMIT TRANSACTION A A、SALES表中qty列最小值大于等于30 B、SALES表中qty列最小值大于等于40 C、SALES表中qty列的数据全部为50 D、SALES表中qty列最小值大于等于60 14.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是(A) A、 B、 android:name=android.provider.action.Ne
8、wBroad/ C、 D、 android:name=android.provider.action.NewBroad/ 15.关于ContenValues类说法正确的是(A) A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是String类型,而值都是基本类型 B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名是任意类型,而值都是基本类型 C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的 名,可以为空,而值都是String类型 D、他和Hashtable比较类似,也是负责存储一些
9、名值对,但是他存储的名值对当中 的名是String类型,而值也是String类型16.我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器 就会变得越慢,那么线程销毁的方法是(A) A、onDestroy() B、onClear() C、onFinish() D、onStop() 17.下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(D) A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以
10、认为是同一个概念. B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念. C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念. D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程
11、,所以说可以认为是同一个概念. 18.Android项目工程下面的assets目录的作用是什么(B) A、放置应用到的图片资源。 B、主要放置多媒体等数据文件 C、放置字符串,颜色,数组等常量数据 D、放置一些与UI相应的布局文件,都是xml文件 19.关于res/raw目录说法正确的是(A)A、 这里的文件是原封不动的存储到设备上不会转换为二进制的格式B、 这里的文件是原封不动的存储到设备上会转换为二进制的格式C、 这里的文件最终以二进制的格式存储到指定的包中D、 这里的文件最终不会以二进制的格式存储到指定的包中 20.下列对android NDK的理解正确的是( ABCD)A、 NDK是一
12、系列工具的集合B、 NDK 提供了一份稳定、功能有限的 API 头文件声明。C、 使 “Java+C” 的开发方式终于转正,成为官方支持的开发方式D、 NDK 将是 Android 平台支持 C 开发的开端二 填空题(每题2分,共10分) 1.java.io包中的_和_类主要用于对对象(Object)的读写。答案:ObjectInputStream ObjectOutputSteam 2.android 中service的实现方法是:_ _和_。答案startService ,bindService 3.当启动一个Activity并且新的Activity执行完后需要返回到启动它的Activit
13、y来执行 的回调函数是_。答案:startActivityResult() 4.请使用命令行的方式创建一个名字为myAvd,sdk版本为2.2,sd卡是在d盘的根目录下, 名字为scard.img, 并指定屏幕大小HVGA._。答案:adnroid create acd -n myAvd -t 8 -s HVDA - C d:card.img 5.程序运行的结果是:_。答案:good and gbc public class Example String str=new String(good); charch=a,b,c; public static void main(String arg
14、s) Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+ and ); Sytem.out.print(ex.ch); public void change(String str,char ch) str=test ok; ch0=g; 三 简答编程题(共35分)、 1. 请简述下Android的数据存储方式。(5分)答:1.SharedPreferences方式2.文件存储方式3.SQLite数据库方式4.内容提供器(Content provider)方式5. 网络存储方式2.请简述下Cont
15、entProvider是如何实现数据共享的。(5分) 答:创建一个属于你自己的Content provider或者将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限。3.如何将一个Activity设置成窗口的样式?(5分)答: 在AndroidManifest.xml 中定义Activity的地方一句话android:theme=android:style/Theme.Dialog或android:theme=android:style/Theme.Translucent就变成半透明的4.请简述下Android
16、中常用的五种布局。(5分)答:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)5.请简述下Activity的生命周期。(5分) 答: 必调用的三个方法:onCreate() - onStart() - onResume(),用AAA表示(1)父Activity启动子Activity,子Actvity退出,父Activity调用顺序如下AAA - onFreeze() - onPause() - onStop() - onRestart() - onS
17、tart(),onResume() (2)用户点击Home,Actvity调用顺序如下AAA - onFreeze() - onPause() - onStop() - Maybe - onDestroy() Maybe(3)调用finish(), Activity调用顺序如下AAA - onPause() - onStop() - onDestroy()(4)在Activity上显示dialog, Activity调用顺序如下AAA(5)在父Activity上显示透明的或非全屏的activity,Activity调用顺序如下AAA - onFreeze() - onPause()(6)设备进
18、入睡眠状态,Activity调用顺序如下AAA - onFreeze() - onPause()6.简述Android应用程序结构是哪些?(5分)答:Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c+核心库)、Application Framework(开发框架包)、Applications(核心应用程序)7. 请继承SQLiteOpenHelper实现:(10分) 1).创建一个版本为1的“diaryOpenHelper.db”的数据库, 2).同时创建一个 “diary” 表(包含一个_id主键并自增长,topic字符型100 长度, content字
19、符型1000长度)3).在数据库版本变化时请删除diary表,并重新创建出diary表。答:public class DBHelper extends SQLiteOpenHelper public final static String DATABASENAME = diaryOpenHelper.db;public final static int DATABASEVERSION = 1;/创建数据库public DBHelper(Context context,String name,CursorFactory factory,int version)super(context, nam
20、e, factory, version);/创建表等机构性文件public void onCreate(SQLiteDatabase db)String sql =create table diary+(+_id integer primary key autoincrement,+topic varchar(100),+content varchar(1000)+);db.execSQL(sql);/若数据库版本有更新,则调用此方法public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)String sql
21、= drop table if exists diary;db.execSQL(sql);this.onCreate(db); 8.页面上现有ProgressBar控件progressBar,请用书写线程以10秒的的时间完成其进度显示工作。(10分)答:public class ProgressBarStu extends Activity private ProgressBar progressBar = null;protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);set
22、ContentView(R.layout.progressbar);/从这到下是关键progressBar = (ProgressBar)findViewById(R.id.progressBar);Thread thread = new Thread(new Runnable() Overridepublic void run() int progressBarMax = progressBar.getMax();try while(progressBarMax!=progressBar.getProgress()int stepProgress = progressBarMax/10;in
23、t currentprogress = progressBar.getProgress();progressBar.setProgress(currentprogress+stepProgress);Thread.sleep(1000); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace(););thread.start();/关键结束Android面试基础题做下总结1. Intent的几种有关Activity启动的方式有哪些,你了解每个含义吗? 这里Android123提示大家,
24、Intent的一些标记有FLAG_ACTIVITY_BROUGHT_TO_FRONT 、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET、FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS、FLAG_ACTIVITY_MULTIPLE_TASK和FLAG_ACTIVITY_NEW_TASK 等。每种含义大家看SDK文档和具体跑下这样你的记忆会更深刻些。 2. Activity和Task的启动模式有哪些? 每种含义是什么? 有关在AndroidManifest.xml中的android:launchMode定
25、义,主要有standard、singleTop、singleTask和singleInstance,同时对于android:taskAffinity这些问题大家也要了解,Android开发网在以前的文章中讲过,不过很多开发者仍然不是很清楚,这些基础问题我们以后仍然会再次总结。 关于Activity的启动模式,参考: 3. 通过Intent传递一些二进制数据的方法有哪些? 1). 使用Serializable接口实现序列化,这是Java常用的方法。 2). 实现Parcelable接口,这里Android的部分类比如Bitmap类就已经实现了,同时Parcelable在Android AIDL中
26、交换数据也很常见的。 4. 能说下Android应用的入口点吗? 真正的Android入口点是application的main,你可以看下androidmanifest.xml的包含关系就清楚了。 可以没有Activity但是必须有Application5. Android都有哪些XML解析器,都熟练掌握吗? 这里XmlPull、SAX和DOM相信做过Web开发的都已经滚瓜烂熟了。 6. SQLite支持事务吗? 添加删除如何提高性能? SQLite作为轻量级的数据库,比MySQL还小,但支持SQL语句查询,提高性能可以考虑通过原始经过优化的SQL查询语句方式处理。 7. Android Se
27、rvice和Binder、AIDL你都熟练吗? 作为Android重要的后台服务,这些每个Android开发者都应该掌握,这也算是和Java SE最大的不同了,具体的实例大家可以查看Android音乐播放器的源代码Music.git中的,这里不再赘述。8. 你用过哪款Android手机,有哪些优点和不足,相对于iPhone或Symbian又有哪些优缺点? 把这个作为面试题也是考察下,可以大概了解到它对Android的了解程度,多移动开发的认识。【2011-5-12 补充】1.请描述下Activity的生命周期。创建 oncreate - 启动onstart 恢复 onResume 暂停 onP
28、ause 结束 onEnd 销毁onDestroy2. 如果后台的Activity由于某原因被系统回收了,如何在被系统回收之前保存当前状态?在”暂停 onPause” 状态将数据保存。3. 如何将一个Activity设置成窗口的样式。设置Theme。4. 如何退出Activity?如何安全退出已调用多个Activity的Application?5. 请介绍下Android中常用的五种布局。线性布局LinearLayout, 相对布局 RelativeLayout表单布局 TableLayout,绝对布局AbsLayout(已淘汰)帧布局FrameLayout6. 请介绍下Android的数据存
29、储方式。Preference,文件,数据库SQlite,网络存储7. 请介绍下ContentProvider是如何实现数据共享的。8. 如何启用Service,如何停用Service。启动:Context.startService()andContext.bindService().关闭:Context.stopService().Service.stopSelf()orService.stopSelfResult()9. 注册广播有几种方式,这些方式有何优缺点?请谈谈Android引入广播机制的用意。10. 请解释下在单线程模型中Message、Handler、Message Queue、L
30、ooper之间的关系。11. AIDL的全称是什么?如何工作?能处理哪些类型的数据?12. 请解释下Android程序运行时权限与文件系统权限的区别。(Edited by Sodino)13. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面?请说明原由。14. 有一个一维整型数组intdata保存的是一张宽为width,高为height的图片像素值信息。请写一个算法,将该图片所有的白色不透明(0xffffffff)像素点的透明度调整为50%。15. 你如何评价Android系统?优缺点。 (这一题重复了)优势:一、开放性 三、丰富的硬件选择 五、无缝结合的Google应用支持缺点: 一、
31、安全和隐私二,开发商自定义,不够统一 四、同类机型用户减少【2011-5-12 补充】1、什么是ANR如何避免它?2、什么情况会导致Force Close ?如何避免?能否捕获导致其的异常?3、Android本身的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会导致什么问题?如何解决?会有运行时异常, 运行时异常无需捕捉4、简要解释一下activity、 intent 、intent filter、service、Broadcast、BroadcaseReceiver 这个问题问的很普遍,自己多看看吧。在此不多说了!5、IntentService有何
32、优点?【2011-5-12 补充】1. android:paddingLeft与android:layout_marginLeft的区别当按钮分别设置以上两个属性时,得到的效果是不一样的。android:paddingLeft=30px按钮上设置的内容(例如图片)离按钮左边边界30个像素android:layout_marginLeft=30px整个按钮离左边设置的内容30个像素2. Android 动画有哪几种?描述一下两种。 Tween动画和Frame动画。 Tween动画主要是透明度、尺寸伸缩、旋转、位移等效果。Frame动画可以理解成gif, 一帧一帧的显示图片。比较常用的有滚动条效果
33、。3. 对Intent、Activity、广播、Service等的理解。4.哪些情况下会发生ANR ?怎么对应 ? (这个问题也重复了) Application Not Response。5. 隐式、显式Intent的区别显式意图通过名字指明目标组件(这个组件名字字段component name field,前面提到过,有一个数值集)。既然组件名称通常不为其他应用程序的开发者所了解,显式意图典型的被用作应用程序的内部消息-例如一个活动启动一个附属服务或姊妹活动。隐式意图不命名目标组件(组件名称字段为空)。隐式意图经常用来激活其他应用程序的组件。 这一块参考Intent说明,可以同时看一下Not
34、epad的例子, 帮助理解,个人感觉很重要!(上面几个问题感觉都不错,各位自己查漏补缺吧! 有些还没有写答案的, 各位有空可以回答一下 我会将你的答案填充上去)-2011-07-05 补充返回键与Home键区别?back键默认行为是finish处于前台的Activity的即Activity的状态为Destroy状态为止,再次启动该Activity是从onCreate开始的(不会调用onSaveInstanceState方法)。Home键默认是stop前台的Activity即状态为onStop为止而不是Destroy,若再次启动它,会调用onSaveInstanceState方法,保持上次Act
35、ivity的状态则是从OnRestart开始的-onStart()-onResume()。【2011-10-12】百度Android工程师面试题(网友提供)(见附件)【2011-11-21】思科面试题1. Android中如何传递二进制数据?2. ANR是什么?哪些情况下会发生?开发时如何寻找ANR?3. 解释AIDL4. SAX、DOM、PULL解析xml的原理,以及各自优缺点4. DIP、DPI分别是什么?5.java线程的sleep(),wait(),notify(),yield()方法的区别?1.sleep()使线程休眠一段时间,一段时间结束后,线程进入可执行状态,但并不是立即执行,只是在被排程器调用的时候才执行。在休眠期间,并不释放所持有的“锁”;2.wait()使线程休眠一段时间,若设置参数,时间到时,线程就自动进入可执行状态。若没有,则需要notify()方法去调用。注意:wait()方法和notify()方法都时针对this对象的,调用wait()方法后,会释放加在对象上的“锁”。3.yield()使线程放弃执行的权利,进入可执行状态,也就意味着线程在yield()方法后,有可能又执行。使用yield()方法,线程并不释放自己锁持有的“锁”。