资讯详情

Android 面试宝典

转载:http://blog.csdn.net/superjunjin/article/category/1192401

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),例如,我们在读书,所以读书程序是前台过程,系统不会优先考虑这些过程.当我把它切到后台时,它变成了后台进程了.还有可见进程(Visible),这个怎么说呢,譬如输入法程顺序,你通常看不到它,但当你打开输入界面时,它它会很快弹出,而不是让你等待。你看不见的原因是透明机制,我们不要钻牛角尖讨论为什么我看不见...还有桌面的Widgets,例如,我们的桌面时钟,这个东西就是如果它被系统终止,会发生什么?这个Widgets它仍然会显示在桌面上,但时针不会消失...主要服务,比如电话拨号功能,你不想急着打电话结果人家给你卡半天,尤其是像我这样的联系人。2000年,加载真的很慢。...因此,这些主要服务平时也是如此系统不会自动结束,除非你必须关掉它,否则你会自己关掉它加载的.这也是你完全释放内存以后过一会就看着内存可使用值缓慢下降的原因. 次要服务(secondaryserver),如谷歌企业套件,Gmail,联系人可能会在任务管理器中看到这些程序你会很莫名其妙。你在哪里?我没开。...其实它们也与一些系统功能密切相关,例如Gmail的邮件推送,我们经常需要它们,所以系统太会终止它们.甚至于HTC机器上的名字HTCSense,这也是次要服务,但是事实上,它承担着整个系统界面的运行,所以如果你强行关闭它关闭所有过程,你的屏幕会变成白色...然后慢慢等HTCSense加载. 后台进程(hidden),我们通常理解的是启动后被切换到后台的过程,如浏览器和阅读器.后台进程的管理策略有很多种,但一般来说,系统会尽可能地查看内存保留更多的后台程序会影响您启动其他程序的运输行速-我认为这很容易理解,因为内存真的不够,你还没有让系统自动释放内存.但好处是你又切换到这些了启动程序几乎是无缝的,速度绝对比你从0开始启动程序更快要快得多.因此,当内存极度不足时,这种后台过程,肯定会被系统有选择地杀死.内容供应节点(contentprovider),没有程序实体,只提及其他程序使用内容,如日历供应节点、电子邮件供应节点等.当系统自动终止过程时,这类程序享有被杀的优先权权...空进程(empty),在没有任何东西的情况下运行的过程中,有些程序退出后仍然会在此过程中停留一个空过程,在此过程中没有运输数据行,它通常是为了提高程序的下一个启动速度或记录程序一些历史信息.这部分过程无疑是系统最先终止的. 说了这么多,其实要结合实际程序来看,比如Android这款著名的自动内存调配软件,AutoMemoryManager,正如上面所说,它的设置和帮助界面,它自动提供各种默认配置,如速度模式,会帮助你在设定好的临界值区间上,结束空进程以及内容供节点等低优先保留权的过程将为您腾出更多的内部保存,加快新操作程序的打开,但也说明了这种模式缺点是你可能不想被关闭的过程会过早关闭比如,闹钟----在G2G2009年也很受欢迎,很多用户买了手机后,我向我抱怨。哦,这台机器的闹钟怎么老了?啊...上班老迟到...事实上,这是因为手动结束了过程果还把闹钟弄干了.系统时间是会一直走的,这属于主 要服务,而闹钟呢,只是主要服务的一个附属品,所以被结束 后,是不会自动被启动的,既然没有启动自然就不会响了.与 此类似的例子就是里程碑不充电的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、 <resources>

<style name="myStyle">

<item name="android:layout_width">fill_parent</item>

</style>

 </resources>

     B、 <style name="myStyle">

<item name="android:layout_width">fill_parent</item>(没有<resources>)

   </style>

     C、 <resources>

<item name="android:layout_width">fill_parent</item>(没有</style>)

  </resources>

     D、 <resources>

<style name="android:layout_width">fill_parent</style>(</style>应为</item>)

  </resources>

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

<span style="color:#1009a3;">@@identity是表示的是最近一次向具有identity属性(即</span><span style="color:#ff0000;">自增列</span><span style="color:#1009a3;">)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。</span>

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()

14. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题)

     A、当第一次启动的时候先后调用onCreate()和onStart()方法

     B、当第一次启动的时候只会调用onCreate()方法

     C、如果service已经启动,将先后调用onCreate()和onStart()方法

 D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法

15. 下面是属于GLSurFaceView特性的是(abc)(多选)

 A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图

    view上。

 B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

 C、让渲染器在独立的线程里运作,和UI线程分离。

 D、可以直接从内存或者DMA等硬件接口取得图像数据

android.opengl.GLSurfaceView概述

http://blog.csdn.net/xqhrs232/article/details/6195824

 GLSurfaceView是一个视图,继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。

        GLSurfaceView提供了下列特性:
                1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
                2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
                3> 用户自定义渲染器(render)。
                4> 让渲染器在独立的线程里运作,和UI线程分离。
                5> 支持按需渲染(on-demand)和连续渲染(continuous)。
                6> 一些可选工具,如调试。

16. 下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(a)

   A、<receiver android:name="NewBroad">

<intent-filter>

<action  

                   android:name="android.provider.action.NewBroad"/>

                <action>

</intent-filter>

</receiver>

     B、<receiver android:name="NewBroad">

<intent-filter>

                   android:name="android.provider.action.NewBroad"/>

</intent-filter>

</receiver>

     C、<receiver android:name="NewBroad">

<action  

                  android:name="android.provider.action.NewBroad"/>

             <action>

</receiver>

     D、<intent-filter>

         <receiver android:name="NewBroad">

 <action> 

                   android:name="android.provider.action.NewBroad"/>

              <action>

</receiver>

</intent-filter>

17. 关于ContenValues类说法正确的是(a)

      A、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

         名是String类型,而值都是基本类型

      B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

         名是任意类型,而值都是基本类型

      C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的

         名,可以为空,而值都是String类型      

      D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中

         的名是String类型,而值也是String类型

18. 我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a)

       A、onDestroy() 

       B、onClear()

       C、onFinish() 

       D、onStop()

19. 下面退出Activity错误的方法是(c)

       A、finish()

    B、抛异常强制退出

       C、System.exit()  System.exit(0) 0是正常退出  其他数字是表示不正常退出

       D、onStop()

20. 下面属于android的动画分类的有(ab)(多项)

       A、Tween  B、Frame C、Draw D、Animation 

一种是tweened animation(渐变动画) 
XML中 JavaCode
alpha AlphaAnimation
scale ScaleAnimation
一种是frame by frame(画面转换动画) 
XML中 JavaCode
translate TranslateAnimation
rotate RotateAnimation

21. 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d)

        A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立 的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.

        B、DVM指dalivk的虚拟机.每一个 标签: diary继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台