安卓面试题系列-3
时间:2023-08-11 00:37:00
android71道题是最全面的试题 详解
Android面试题
1.以下哪些句子对内存回收的解释是正确的?(b)
A、程序员必须创建一个释放内存的线程
B、内存回收程序负责释放无用内存
C、内存回收程序允许程序员直接释放内存
D、内存回收程序可以在指定时间释放内存对象
android内存回收机制
我想每个人都是第一次使用它Android不可避免的是,它会被安装一个任务管理器,然后总是有很多程序表触目惊心,然后在桌面上建立一个快速清空内存的按钮按钮,时不时地按下,看着剩余的内存从30多到100然后很开心...其实吧,Android是Linux每个程序都是独立的的JAVA虚拟机,就像油汤里的油花一样,互不干扰,所以充分万一某个程序得到保证JAVA虚拟机崩溃,系统仍然稳定正常运行.而Android和传统Linux不同的是,传统Linux在过程停止后就结束了,类似于我们用S60和WM一样品,关闭程序,释放内存.而Android这些过程将被保留在内储存,为什么?为了确保您在重新激活这些过程时启动更多快,例如,我们挂在桌面上Widgets,让我们以新浪微博为例.我刚看完,退出了。突然,我想我发微博吧,这时,我可以直接在桌面上Widgets上操作-想象一下如果我退出,这个过程就终止了,所以我在桌面上点击Widgets你会卡住甚至没有反应吗?----跟我们来Widgets挂在桌面上的行为完全背离,放置桌面上为了随时观察程序运行,程序可以随时快速调用.所以Android过程中没有工作动停止释放相应的内存.所以也许你还会有疑问,那么内存够不够?
我只用5612的内存M是不是很可怕?其实系统一点不卡,蛋定蛋定蛋定蛋定蛋是的,我明白,因为大家这么多年了Windows都用习惯了,Windows当内存不足时,机器卡会让你想砸碎机箱,当你调用虚拟内存时,硬盘喀喀喀想让你肉痛.你肯定也会怕你的手机明明512M内存结果只剩下30个了M把你卡在崩溃之前.事实上呢,Android系统需要更多的内存释放占用内存的过程是智能的.最早,人们认为有一个排名,比如最近使用了哪些程序(LRU机制,LastRecentlyUsed),然最早的过程结束后.但事实并非如此,否则我们就会上小学就这样,高个子的大男孩和班长下去拔草扛新书,女生留在班里绣花吧...这显然是不公平的,我们可能不想结束那些掉落的过程——比如这个时候,我想回刚才后台的网页继承连续浏览结果悲哀地发现它被系统强制关闭了...
Android将过程分为一些优先级,比如前台进程(Foreground),例如,我们在读书,所以读书程序是前台过程,系统不会优先考虑这些过程.当我把它切到后台时,它变成了后台进程
次要服务(secondary server),诸如谷歌企业套 件,Gmail,联系人,看着这些程序出现在任务管理器里可能 你会非常的莫名其妙,丫的这都哪跟哪啊我没开啊...其实 它们和一些系统功能也是息息相关的,比如Gmail的邮件推 送,我们时常需要用到它们,所以系统也太会去终止它们.甚 至于HTC机器上著名的HTC Sense,这个也是次要服务,但 是其实它承接着整个系统界面的运行,所以,如果你强行关 闭所有进程的时候,你的屏幕会变成一片白...然后慢慢等 HTC Sense加载.
后台进程(hidden),就是我们通常意义上理解的启动后 被切换到后台的进程,比如如浏览器和阅读器.后台进程的 管理策略有多种,但是一般来讲,系统都会视内存情况,尽可 能多的保留后台程序,这样会影响到你启动别的程序的运 行速度----我想这个很好理解,因为内存确实不够了,而且你 还没让系统自动释放内存.但好处是,你再次切换到这些已 启动的程序时几乎是无缝的,速度绝对比你从0开始启动它 要快得多.所以,这种后台进程在内存极度不够的时候,肯定 会被系统选择性的干掉的. 内容供应节点(content provider),没有程序实体,仅提 供内容供别的程序去用的,比如日历供应节点,邮件供应节 点等.在系统自动终止进程时,这类程序享有优先的被干掉 权... 空进程(empty), 没有任何东西在内运行的进程,有些程序在退出后,依然会 在进程中驻留一个空进程,这个进程里没有任何数据在运 行,作用往往是提高该程序下次的启动速度或者记录程序 的一些历史信息.这部分进程无疑是系统最先终止的.
说了这么多,其实还是要结合实际的程序来看一下的,比如 Android这个很有名的自动内存调配的软件,Auto Memory Manager,它的设置和帮助界面就如上面所说的, 它自动提供了多种默认配置,例如极速模式,这个模式下,会 帮助你在设定好的临界值区间上,结束空进程以及内容供 应节点等等低优先级保留权的进程,来给你腾出更多的内 存,加速新运行程序打开的速度,但是它也说明了这种模式 的弊端,就是一些可能你不想被关闭的进程会被过早的关 闭,比如说,闹钟----在G2 G3还很火爆的2009年,很多用户 在买完手机后给我抱怨,哎呀这个机器闹钟怎么老不响 啊...上班老迟到...其实这就是因为手动结束进程的时候结 果把闹钟也给干掉了.系统的时间是会一直走的,这属于主 要服务,而闹钟呢,只是主要服务的一个附属品,所以被结束 后,是不会自动被启动的,既然没有启动自然就不会响了.与 此类似的例子就是里程碑不充电的BUG,这是因为Moto的 机器里有个USB的进程,如果你把它结束后,理论上会重新 启动的但是也会不启动,后面这种情况出现的结果就是你 插充电器没反应,插数据线连电脑没反应...重启手机就好 了. 当然我知道大家的洁癖很多,有的人就是见不得内存值太 小...好吧如果你不想一些被系统认为不太重要而你又很需 要的进程被你自己亲手扼杀的话,那么我推荐你使用高级 任务管理器这个程序,你可以把一些进程自动隐藏起来,也 就是说当你挥起狼牙棒横扫一堆进程的时候,你设置好的 几个进程是不会受任何影响的,比如桌面Launcher,比如闹 钟,比如USB,等等等等.但话说回来,我是不建议大家去手动 管理Android的内存,也许你会不习惯----我也没啥好劝告 的,总之,不要把你的智能机想的那么笨就行了. 刚才全杀掉进程后,过了一会,我的DEFY又变成剩余60M内 存,还是没啥鸭梨啊...如果你感兴趣可以做个试验,内 存很少的时候,你打开一个大游戏,然后退出,你会发现...
http://reedhistudy.diandian.com/post/2011-09-15/5045645
2. 下面异常是属于Runtime Exception 的是(abcd)(多选)
A、ArithmeticException
B、IllegalArgumentException
C、NullPointerException
D、BufferUnderflowException
A、ArithmeticException
当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。
B、IllegalArgumentException
抛出的异常表明向方法传递了一个不合法或不正确的参数。
C、NullPointerException
D、BufferUnderflowException (不明白,没碰到过)
编码问题导致java_BufferUnderflowException异常
公共类BufferUnderflowException的
延伸的RuntimeException
未经检查的异常时,抛出一个相对get操作达到源缓冲区的限制。
3. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c).
A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12
四舍五入 四和五是指正的4,5
-11.5 这么看 -11.5 = -12 +0.5 ,0.5按四舍五入为1 ,-12+1 = -11,所以Math.round(-11.5)==-11
-0.5 = -1 + 0.5 0.5按四舍五入为1 ,-1+1 = 0,所以Math.round(-0.5)==0
11.5 四舍五入 显然 Math.round(11.5)==12
round方法返回与参数最接近的长整数,参数加0.5后求其floor(小于等于该数的最大整数)
4. 下列程序段的输出结果是:(b)
void complicatedexpression_r(){
int x=20, y=30;
boolean b;
b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;
System.out.println(b);
}
A、true B、false C、1 D、011.activity
5. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d)
A、onPause() B、onCreate() C、 onResume() D、onStart()
Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
http://blog.csdn.net/tangcheng_ok/article/details/6755194
6. Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)
A、Serializable B、charsequence C、Parcelable D、Bundle
android 数据传递详解(Serialization、Parcelable、Parcel、Intent、Bundle)
http://jojol-zhou.iteye.com/blog/1401905
Android中Intent传递对象的两种方法(Serializable,Parcelable)
http://blog.csdn.net/xyz_lmn/article/details/5908355
7. android 中下列属于Intent的作用的是(c)
A、实现应用程序间的数据共享
B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失
C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带
D、处理一个应用程序整体性的工作
8. 下列属于SAX解析xml文件的优点的是(b)
A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能(dom解析优点)
B、不用事先调入整个文档,占用资源少(sax解析优点)
C、整个文档调入内存,浪费时间和空间(dom解析缺点)
D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会(sax解析缺点)
消失
不需要像dom解析那样在内存中建立一个dom对象,占用内存,sax解析是逐行解析的,每次读入内存的只是一行xml,所以速度快,效率高点。不过sax一般是处理固定格式的xml。
9. 下面的对自定style的方式正确的是(a)
A、
B、
C、
D、
(应为)
10. 在android中使用Menu时可能需要重写的方法有(ac)。(多选)
A、onCreateOptionsMenu()
B、onCreateMenu()
C、onOptionsItemSelected()
D、onItemSelected()
//当客户点击MENU按钮的时候,调用该方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, R.string.exit);
menu.add(0,2,2,R.string.about);
return super.onCreateOptionsMenu(menu);
}
//当客户点击菜单当中的某一个选项时,会调用该方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == 1){
finish();
}
return super.onOptionsItemSelected(item);
}
11. 在SQL Server Management Studio 中运行下列T-SQL语句,其输出值(c)。
SELECT @@IDENTITY
A、可能为0.1
B、可能为3
C、 不可能为-100
D、肯定为0
@@identity是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
12. 在SQL Server 2005中运行如下T-SQL语句,假定SALES表中有多行数据,执行查询之 后的结果是(d)。
BEGIN TRANSACTION A
Update SALES Set qty=30 WHERE qty<30
BEGIN TRANSACTION B
Update SALES Set qty=40 WHERE qty<40
Update SALES Set qty=50 WHERE qty<50
Update SALES Set qty=60 WHERE qty<60
COMMITTRANSACTION B
COMMIT TRANSACTION A
A、SALES表中qty列最小值大于等于30
B、SALES表中qty列最小值大于等于40
C、SALES表中qty列的数据全部为50
D、SALES表中qty列最小值大于等于60
Update SALES Set qty=60 WHERE qty<60(关键在最后一句,执行完数据就都是大于等于60了)
13. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab)
A、getWriteableDatabase()
B、getReadableDatabase()
C、getDatabase()
D、getAbleDatabase()