分享一波Android面试题

Android开发面试题java

1. String 、StringBuilder和StringBuffer的区别linux

JAVA 平台提供了两个:String 和StringBuffer ,它们能够储存和操做字符串,既包含多个字符串和数据。String类提供了数值是不可更改的字符串。StringBuffer 类提供的字符串能够进行修改,你可使用StringBuffer来动态构造字符数据。StringBuilder 类提供的字符串能够进行修改。前者线程安全,后者非线程安全(效率高)。android

2.int 和Integer有什么区别程序员

JAVA提供两种不一样的类型:引用类型和原始类型(或内置类型)。Int是JAVA的原始数据类型,Integer是JAVA为int提供的封装类。JAVA为每一个原始类型提供了封装类。面试

原始类型           封装类数据库

boolean             Boolean express

char                Character 编程

byte                Byte  设计模式

short               Short  浏览器

int                 Integer 

long                Long  

float                Float 

double              Double

引用类型和原始类型的行为彻底不一样,而且他们具备不一样的语义。引用类型和原始类型具备不一样的特征和用法,它们包括:大小和速度问题,这种类型以哪一种类型的数据结构储存,当引用类型和原始类型用做某个类的实例数据时所指定的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

3.一条最长的短信约占多少个Byte

中文70个(包括标点),英文160

 

4.SIM卡和EF文件(存储文件)有何做用

SIM卡的文件系统有本身的规范,主要为了和手机通信,SIM卡自己有本身的操做系统。EF文件用做储存和手机通信。

 

5.Android中的动画有哪几类,它们的特色和区别是什么(增长了属性动画。。应该是三种)

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

最后一种是属性动画

 

 

6.什么是嵌入式实时操做系统,Android操做系统属于实时操做系统吗?

嵌入式实时操做系统是指当外界事件或数据产生时,可以接受并以足够快的速度予以处理,其处理的结果又能在规定的时间以内来控制生产过程或对处理系统做出快速响应,并控制全部实时任务协调一致运行的操做系统。主要用于工业控制、军事设备、航空航天等对系统的响应事件有苛刻的要求的领域。实时系统又可分为软实时和硬实时两种。而Android是基于Linux内核的,所以属于软实时。

 

7.MVC模式的原理

在Android中的运用MVC(Model_View_Controller)“模型—视图—控制器”。MVC应用程序老是由这三个部分组成。Event(事件)致使

Controller改变Model或View,或者同时改变二者。只要Controller改变了Model的数据或者属性,全部依赖的View都会自动更新。

 

8.横竖屏切换的时候Activity的生命周期

一、不设置Activity的android:configChanges时,切屏会从新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。

二、设置Activity的android:configChanges=“orientation”时,切屏仍是会从新调用各个生命周期,但切横、竖屏时各执行一次。

三、设置Activity的android:configChanges= “orientationKeyboardHidden”时,切屏不会从新调用各个生命周期,只会执行onConfigurationChanged方法。

 

9.Intent传递数据时,能够传递哪些数据

一、通常的数据类型:经过Intent.putExtra();传值,经过 Intent.getExtra();接收。

二、数据的Uri: 经过 Intent.setData();传值,经过Intent.getData();接收。

 

10.什么状况会致使Force Close?如何避免?可否捕获致使其的异常

通常像空指针啊,能够看logcat,而后对应到程序中来解决错误。

 

11.Android自己的API并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?如有的话会致使什么问题?如何解决?

会如nullpointException TextView没有初始化时,却调用了其方法。打开控制台,查看logcat找出异常并修改。

 

12.如何将SQLite数据库(dictionary.db文件)与apk文件一块儿发布?

能够将dictionary.db文件复制到Eclipse Android 工程中的res raw目录中。全部在res raw目录中的文件不会被压缩,这样能够直接提取该目录中的文件。

 

13.Android引入广播机制的用意

一、从MVC的角度考虑(应用程序内),如今的移动开发模型基本上也是照搬Web那一套MVC架构,只不过是改了点嫁妆而已。Android的四大组件本质上就是为了实现移动或者说嵌入式设备上的MVC架构,它们之间有时候是一种相互依存的关系,有时候又是一种补充关系,引入广播机制能够方便几大组件的信息和数据交互。

二、程序间互通讯息(例如:在本身的应用程序内监听系统来电)

三、效率上(参考UDP的广播协议在局域网的方便性)

四、设计模式上(反转控制的一种应用,相似监听者模式)

 

14.什么是Activity

Android的四大组件之一,通常的,一个用户交互界面对应一个Activity,Activity是Context的子类,同时实现Windows.callback和keyevent.callback,能够处理与窗体用户交互的事件。开发经常使用的有:ListActivity,PerenceActivity等,若是界面有共同的特色或者功能的时候能够自定义一个BaseActivity。

 

15.Android的存储方式

一、文件

二、数据库

三、sharedPreference

四、网络

 

16.Android中经常使用的五种布局

一、LinearLayout — 线性布局

Orientation — 容器内元素的排布方式

Vertical — 子元素们垂直排布

Horizontal — 子元素们水平排布

Gravity — 内容排布形式。经常使用的有left、top、right、bottom、center等

 

二、AbsoluteLayout — 绝对布局

layout_x — x坐标,以左上为顶点

layout_y — y坐标,以左上为顶点

 

三、TableLayout — 表格布局

表格布局主要以行列的形式来管理子控件,其中每一行即一个TableRow对象,每一个TableRow对象能够添加子控件,而且每加入一个控件即至关于添加了一列。

 

四、RelativeLayout — 相对布局

layout_centerInPerent — 将当前元素放置于其容器内的水平方向和垂直方向的中央位置

相似的属性有:layout_centerHorizontal,layout_centerVertical,layout_alignPerentLeft等

layout_marginLeft — 设置当前元素相对于其容器左侧边缘的距离

layout_below — 放置当前元素到指定的元素的下面

layout_alignRight — 当前元素与指定元素右对齐

 

五、FrameLayout — 帧布局

以左上角为起点,将FrameLayout内的元素一层覆盖一层的显示。在帧布局中,先添加的图片会被后添加的图片覆盖。

 

17.如何启用Service,又如何停用

一、第一种是经过调用Context.startService()启动,调用Context.stopService()结束,startService()能够传递参数给Service

二、第二种方式是经过调用Context.bindService()启动,调用Context.unbindService()结束,还能够经过ServiceConnection访问Service,在Service每一次的开启关闭过程当中,只有onStart能够被屡次调用(经过屡次startService调用),其余onCreate,onBind,onUnbind,onDestroy在一个生命周期中只能被调用一次。

18.AIDL的全称是什么?如何工做?能处理哪些类型的数据?

1,AIDL全称Android Interface Definition Language(Android接口描述语言) 是一种接口描述语言。

2,编译器能够经过AIDL文件生成一段代码,经过预先定义的接口达到两个进程内部通讯进程跨界对象访问的目的.AIDL的IPC的机制和COM或CORBA相似, 是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值. 若是要使用AIDL, 须要完成2件事情:

1. 引入AIDL的相关类.;

2. 调用AIDL产生的class.理论上, 参数能够传递基本数据类型和String, 还有就是Bundle的派生类, 不过在Eclipse中,目前的ADT不支持Bundle作为参数。

3.AIDL语法很简单,能够用来声明一个带一个或多个方法的接口,也能够传递参数和返回值。 因为远程调用的须要, 这些参数和返回值并非任何类型.下面是些AIDL支持的数据类型:

(1). 不须要import声明的简单Java编程语言类型(int,boolean等)

(2). String, CharSequence不须要特殊声明。

(3). List, Map和Parcelables类型, 这些类型内所包含的数据成员也只能是简单数据类型, String等其余支持的类型.

19.Handler机制的原理

Android提供了Handler和Looper来知足线程间的通讯。Handler遵循先进先出的原则,Looper类用来管理特定线程内对象之间的消息交换。

一、              Looper:一个线程能够产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

二、              Handler:你能够构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue中取出并送出的消息。

三、              Message Queue(消息队列):用来存放线程放入的消息。

四、              线程:UI Thread一般就是main Thread,而Android启动程序时会替它创建一个Message Queue。

20.Activity的生命周期

一、onCreate(Bundle savedInstanceState):建立Activity时调用。设置在该方法中,还以Bundle的形式提供对之前储存的任何状态的访问。

二、onStart():Activity变为在屏幕上对用户可见时调用。

三、onResume():Activity开始与用户交互时调用(不管是启动仍是从新启动一个活动,该方法老是被调用的)。

四、onPause():Activity被暂停或收回CPU和其余资源时调用,该方法用于保存活动状态的Activity。

五、onStop():Activity被中止并转为不可见阶段及后续的生命周期事件时调用。

六、onRestart():从新启动Activity时调用。该活动仍在栈中,而不是启动新的活动。

七、onDestroy():Activity被彻底从系统内存中移除时,该方法被调用。

21.两个Activity之间跳转必需要执行哪些方法

一、onCreate()   在Activity生命周期开始时调用

二、onRestoreInstanceState()   用来恢复UI状态

三、onRestart()   当Activity从新调用时启动

四、onStart()   Activity对用户即将可见时调用

五、onResume()   当Activity对用户交互时绘制界面

六、onSavedInstanceState()   Activity即将移出栈顶保留UI状态时调用

七、onPause()   暂停当前活动Activity,提交持久数据的改变,中止动画和其余占用CPU资源的东西,用于下一个Activity在这个方法返回以前不会Resume,因此这个方法的代码执行要快。

八、onStop()   Activity不可见时调用

九、onDestroy()   在Activity销毁线程被调用的最后一个方法

 

22.Math.round(11.5)等于多少?Math.round(-11.5)等于多少?

答:12,-11

23.对一些资源以及状态的操做保存,最好是保存在生命周期的哪一个函数中进行

最好是保存在onStart()函数中进行

24.Intent传递数据时,哪些数据类型能够被传递?

一、Seria lizable//传对象

二、charS equence//字符队列

三、Parce lable//传对象

四、Bundle

25.关于res/raw目录下的文件

res/raw目录下的文件是原封不动的存储到设备上,不会转换为二进制的格式。

 

26.Android的四大组件

一、Activity

二、Service

三、Broadcast

四、Contentprovider

27.Android中实现Service的方法,和它们的生命周期。

一、startService

onCreate()

onStartCommand()

onDestroy()

二、bindService

onCreate()

onBind()

onUnbind()

onDestroy()

 

28.Activity的生命周期

必调用的三个方法:onCreate()→onStart()→onResume()。

一、              父Activity启动子Activity,子Activity退出,父Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→onRestart()→onStart()→onResume()

二、              用户点击Home键,Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→Maybe→onDestroy()

三、              调用finish(),Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()→onStop()→onDestroy()

四、              在Activity上显示Dialog,Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()

五、              在父Activity上显示透明的或非全屏的Activity,Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()

六、              设备进入睡眠状态,Activity调用顺序以下:onCreate()→onStart()→onResume()→onPause()

29.若是后台的Activity因为某缘由被系统回收了,如何在被系统回收以前保存当前状态?

除了在栈顶的Activity,其余的Activity都有可能在内存不足的时候被系统回收,一个Activity越处于栈底,被系统回收的可能性越大。

protected void onSavedInstanceState(Bundle outState){

super. onSavedInstanceState(outState);

outstate.putLong(“id”,1234567890);

}

public void onCreate(Bundle savedInstanceState){

//判断savedInstanceState是否是为空

//若是不为空就取出来

super.onCreate(savedInstanceState);

}

30.注册广播有几种方式,这些方式有何优缺点?

两种。一种是在配置文件中注册,另外一种是在Java代码中注册,在Java代码中注册的广播随着Activity的销毁而中止运行。

31.请解释下在单线程模型中Message、Handler、MessageQueue、Looper之间的关系。

一个Handler容许你发送和处理Message和Runable对象,这些对象和一个线程的Message Queue相关联。每个线程实例和一个单独的线程以及该线程的MessageQueue相关联。当你建立一个新的Handler时,它就和建立它的线程绑定在一块儿了。这里,线程咱们也能够理解为线程的MessageQueue。从这一点上来看,Handler把Message和Runable对象传递给MessageQueue,并且在这些对象离开MessageQueue时,Handler负责执行他们。

  Handler有两个主要的用途:(1)肯定在未来的某个时间点执行一个或者一些Message和Runnable对象。(2)在其余线程(不是Handler绑定线程)中排入一些要执行的动做。

  Scheduling Message,即(1),能够经过如下方法完成:

  post(Runnable):Runnable在handler绑定的线程上执行,也就是说不建立新线程。

  postAtTime(Runnable,long):

  postDelayed(Runnable,long):

  sendEmptyMessage(int):

  sendMessage(Message):

  sendMessageAtTime(Message,long):

  sendMessageDelayed(Message,long):

  post这个动做让你把Runnable对象排入MessageQueue,MessageQueue受到这些消息的时候执行他们,固然以必定的排序。sendMessage这个动做容许你把Message对象排成队列,这些Message对象包含一些信息,Handler的hanlerMessage(Message)会处理这些Message.固然,handlerMessage(Message)必须由Handler的子类来重写。这是编程人员须要做的事。

  当posting或者sending到一个Hanler时,你能够有三种行为:当MessageQueue准备好就处理,定义一个延迟时间,定义一个精确的时间去处理。后二者容许你实现timeout,tick,和基于时间的行为。当你的应用建立一个新的进程时,主线程(也就是UI线程)自带一个MessageQueue,这个MessageQueue管理顶层的应用对象(像activities,broadcast receivers等)和主线程建立的窗体。你能够建立本身的线程,并经过一个Handler和主线程进行通讯。这和以前同样,经过post和sendmessage来完成,差异在于在哪个线程中执行这么方法。在恰当的时候,给定的Runnable和Message将在Handler的MessageQueue中被Scheduled。

  Message简介:

  Message类就是定义了一个信息,这个信息中包含一个描述符和任意的数据对象,这个信息被用来传递给Handler.Message对象提供额外的两个int域和一个Object域,这可让你在大多数状况下不用做分配的动做。

  尽管Message的构造函数是public的,可是获取Message实例的最好方法是调用Message.obtain(),或者Handler.obtainMessage()方法,这些方法会从回收对象池中获取一个。

  MessageQueue简介:

  这是一个包含message列表的底层类。Looper负责分发这些message。Messages并非直接加到一个MessageQueue中,而是经过MessageQueue.IdleHandler关联到Looper。

  你能够经过Looper.myQueue()从当前线程中获取MessageQueue。

  Looper简介:

  Looper类被用来执行一个线程中的message循环。默认状况,没有一个消息循环关联到线程。在线程中调用prepare()建立一个Looper,而后用loop()来处理messages,直到循环终止。

  大多数和message loop的交互是经过Handler。

  下面是一个典型的带有Looper的线程实现。

  class LooperThread extends Thread {

  public Handler mHandler;

  public void run() {

  Looper.prepare();

  mHandler = new Handler() {

  public voidhandleMessage(Message msg) {

  // process incomingmessages here

  }

  };

  Loo per.loop();

  }

  }

 

32.谈谈intent在android中的做用是什么?

答:能够实现界面间的切换,能够包含动做和动做数据,链接四大组件的纽带。

 

33.android中最经常使用的几种解析方式是什么?

答:SAX,  DOM,  PULL,  JSON

 

34.当启动一个Activity采用何种方式启动新的Activity执行完毕后须要返回值至当前Activity,而且须要什么方法来获取数据?

答:startActivityResult(),    onActivityResult()

 

35.final,finally,finalize的区别

Final用于声明属性,方法和类,分别表示属性不可改变,方法不可覆盖,类不可继承。

Finally是异常处理语句结构的一部分,表示老是执行。

Finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,能够覆盖此方法提供垃圾收集时的其余资源回收,例如关闭文件等。

 

36.String s = new String(“xyz”);建立了几个String Object?

2个。一个s的引用地址,一个存放xyz的存放地址 s存放xyz的地址。

37.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会执行,何时执行,在return前仍是后?

会执行,在return以前执行。

38.什么是ANR 如何避免它?

答:ANR:Application NotResponding,在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列状况时,Android就会显示ANR对话框了:对输入事件(如按键、触摸屏事件)的响应超过5秒

意向接受器(intentReceiver)超过10秒钟仍未执行完毕

Android应用程序彻底运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,须要消耗大量时间的操做都会引起ANR。由于此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

所以,任何运行在主线程中的方法,都要尽量的只作少许的工做。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操做,如访问网络和数据库;或者是开销很大的计算,好比改变位图的大小,须要在一个单独的子线程中完成(或者是使用异步请求,如数据库操做)。但这并不意味着你的主线程须要进入阻塞状态已等待子线程结束 -- 也不须要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程在即将结束的时候调用它(xing:能够参看Snake的例子,这种方法与之前咱们所接触的有所不一样)。使用这种方法涉及你的应用程序,可以保证你的程序对输入保持良好的响应,从而避免由于输入事件超过5秒钟不被处理而产生的ANR。这种实践须要应用到全部显示用户界面的线程,由于他们都面临着一样的超时问题。

 

39.形成Android应用内存溢出的可能性有哪些?

一、查询数据库没有关闭游标

二、构造Adapter时,没有使用缓存的convertView

三、Bitmap对象不在使用时调用recycle()释放内存

四、释放对象的引用

五、其余

 

40.Service是否在main Thread中执行,Service里面是否执行耗时操做?

默认状况,若是没有显示的指定Service所运行的进程,Service和Activity是运行在当前App所在进程的main Thread(UI主线程)里面。Service里面不能执行耗时的操做(网络请求,拷贝数据库,大文件),在子线程中执行(耗时的操做都是放到子线程里面执行,例如获取服务端数据,下载图片,视频等等)

new Thread(){}.start();

特殊状况,能够在清单文件配置Service执行所在的线程,让Service在另外的进程中执行。

<Service android:process=”cn.itcast.xxx”></Service>

 

41.Android四种启动模式是哪四种?可否介绍一下各自的做用?

答:standrad、singletop、singletask、singleinstance。

Standrad的功能是:默认模式,能够不用写在配置文件里面,能够有多个相同的事例,也容许多个activity叠加。例如:

若我有一个Activity名为A1, 上面有一个按钮可跳转到A1。那么若是我点击按钮,便会新启一个Activity A1叠在刚才的A1之上,再点击,又会再新启一个在它之上……

点back键会依照栈顺序依次退出。

Singletop的功能是:能够有多个实例,可是不容许多个相同Activity叠加。即,若是Activity在栈顶的时候,启动相同的Activity,不会建立新的实例,而会调用其onNewIntent方法。

例如:若我有两个Activity名为B1,B2,两个Activity内容功能彻底相同,都有两个按钮能够跳到B1或者B2,惟一不一样的是B1为standard,B2为singleTop。

若我意图打开的顺序为B1->B2->B2,则实际打开的顺序为B1->B2(后一次意图打开B2,实际只调用了前一个的onNewIntent方法)

若我意图打开的顺序为B1->B2->B1->B2,则实际打开的顺序与意图的一致,为B1->B2->B1->B2。

Singletask的功能是:只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task建立一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。

若是是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask容许别的Activity与其在一个task中共存,也就是说,若是我在这个singleTask的实例中再打开新的Activity,这个新的Activity仍是会在singleTask的实例的task中。

 

例如:

若个人应用程序中有三个Activity,C1,C2,C3,三个Activity可互相启动,其中C2为singleTask模式,那么,不管我在这个程序中如何点击启动,如:C1->C2->C3->C2->C3->C1-C2,C1,C3可能存在多个实例,可是C2只会存在一个,而且这三个Activity都在同一个task里面。

可是C1->C2->C3->C2->C3->C1-C2,这样的操做过程实际应该是以下这样的,由于singleTask会把task中在其之上的其它Activity destory掉。

操做:C1->C2

      C1->C2->C3

C1->C2->C3->C2  

C1->C2->C3->C2->C3->C1    

C1->C2->C3->C2->C3->C1-C2

 

实际:C1->C2

      C1->C2->C3  

C1->C2

C1->C2->C3->C1

      C1->C2

 

如果别的应用程序打开C2,则会新启一个task。

如别的应用Other中有一个activity,taskId为200,从它打开C2,则C2的taskId不会为200,例如C2的taskId为201,那么再从C2打开C一、C3,则C二、C3的taskId仍为201。

注意:若是此时你点击home,而后再打开Other,发现这时显示的确定会是Other应用中的内容,而不会是咱们应用中的C1 C2 C3中的其中一个。

Singleinstance的功能是:只有一个实例,而且这个实例独立运行在一个task中,这个task只有这个实例,不容许有别的Activity存在。

例如:

程序有三个ActivityD1,D2,D3,三个Activity可互相启动,其中D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。

 

如果在别的应用程序打开D2,假设Other的taskId为200,打开D2,D2会新建一个task运行,假设它的taskId为201,那么若是这时再从D2启动D1或者D3,则又会再建立一个task,所以,若操做步骤为other->D2->D1,这过程就涉及到了3个task了。

4二、TCP和UDP的区别:

一、TCP协议在传送数据段的时候要给段标记;UDP协议不用

二、TCP协议可靠;UDP协议不可靠

三、TCP协议是面向链接,UDP协议采用无链接

四、TCP协议负载较高,采用虚拟电路;UDP采用无链接

五、TCP协议的发送方面须要确认接受方是否接受到数据段

六、TCP协议采用窗口技术和流程制

Android开发笔试题

1.java.io包中定义了多个流类型来实现输入和输出功能,能够从不一样的角度对其进行分类,按功能分为:(C),若是为读取的内容进行处理后再输出,须要使用下列哪一种流?(G)

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(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语言中字符串“学Java”所占的内存空间是(A)

A、6个字节

B、7个

字节

C、10个字节

D、11个字节

5.关于下列程序段的输出结果,说法正确的是:(D)

Public class MyClass{

Static int i;

Public static void main(String args[]){

System.out.println(i);

}

}

A、        有错误,变量i没有初始化

B、         Null

C、         1

D、        0

6.下列哪些语句关于内存回收的说明是正确的?(B)

A、        程序员必须建立一个线程来释放内存

B、         内存回收程序负责释放无用内存

C、         内存回收程序容许程序员直接释放内存

D、        内存回收程序能够在指定的时间释放内存对象

7.下列程序段的输出结果是:(B)

void complicatedexpression_r () {

int x = 20;

int 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、0

8.Android中下列属于Intent的做用的是(C)

A、        实现应用程序间的数据共享

B、         是一段长的生命周期,没有用户界面的程序,能够保持应用在后台运行,而不会由于切换页面而消失

C、         能够实现界面间的切换,能够包含动做和动做数据,链接四大组件的纽带

D、        处理一个应用程序总体性的工做

9.下列属于SAX解析XML文件的优势的是(B)

A、        将整个文档树在内存中,便于操做,支持删除、修改、从新排列等多种功能

B、         不用事先调入整个文档,占用资源少

C、         整个文档调入内存,浪费时间和空间

D、        不是长久驻留在内存,数据不是持久的,事件事后,若没有保存数据,数据就会消失

10.下面的对自定义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>

      </style>

C、<resources>

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

      </resources>

D、<resources>

      <style name=”android:layout_width”>fill_parent</style>

      </resources>

11.在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

                     COMMIT TRANSACTION B

                     COMMIT TRANSACTION A

A、  SALES表中qty列最小值大于等于30

B、   SALES表中qty列最小值大于等于40

C、   SALES表中qty列的数据所有为50

D、  SALES表中qty列最小值大于等于60

12.请简述下ContentProvider是如何实现数据共享的。

答:建立一个属于你本身的ContentProvider或者将你的数据添加到一个已存在的ContentProvider中,前提是有相同数据类型而且有写入ContentProvider的权限。

13.Android项目工程下面的assets目录的做用是什么?(B)

A、放置应用到的图片资源

B、主要放置多媒体等数据文件

C、放置字符串,颜色,数据等常量数据

D、放置一些与UI相应的布局文件,都是XML文件

14.下列对Android NDK的理解正确的是(ABCD)

A、NDK是一系列工具的集合

B、NDK提供了一份稳定、功能有限的API头文件声明

C、使“Java+C”的开发方式终于转正,成为官方支持的开发方式

D、NDK将是Android平台支持 C 开发的开端

15.咱们都知道Handler是线程与Activity通讯的桥梁,若是线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(A)

A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

16.简述Android应用程序结构是哪些?

Linux Kernel(Linux内核)

Libraries(系统运行库或者是C/C++核心库)

ApplicationFramework(开发框架包)

Applications(核心应用程序)

17.如何将一个Activity设置成窗口的样式?

在AndroidManiFest.xml中定义Activity的地方添加一句话android:theme=”@android:style/Theme.Dialog”或android:theme=”@android:style/Theme.Translucent”就变成半透明的

18.List、Set、Map是否继承自Collection接口?

List、Set是;Map不是

19.什么是IntentService?有何优势?

普通的Service,默认运行在UI main主线程SDK给咱们提供方便的,带有异步处理的Service类,异步处理的方法是onHandleIntent()(处理耗时的操做)。

20.为何要用ContentProvider?它和SQL的实现上有什么差异?

屏蔽了数据储存的细节,对用户透明,用户只须要关心操做数据的Uri就能够了,对应的参数,不一样App之间共享,操做数据可是ContentProvider还能够去增删改查本地文件,XML文件的读取、更改,网络数据读取更改SQL也有增删改查的方法。

21.下面说法正确的是:(A)

public class Test{

public static void main(String []args){

static int []num = new int[10];

System.out.println(num[10]);

}

}

A、            程序编译失败

B、            程序编译成功,运行时抛出异常

C、            程序编译成功,运行时输出结果为0

D、            若是将System.out.println(num[10])修改成    System.out.println(num[9])输出结果将为0

 

解释:只有类才存在静态的变量,方法只能对静态变量操做,不能在方法内试图定义静态变量,不然的话会抛出编译错误。静态变量的本意是为了让全部的对象共享这个变量。若是在方法里面定义静态变量的话就存在逻辑错误,也达不到你想要的目的。由于在方法中定义静态变量根本没有他的任何意义。任何对象都有本身的方法,即便是静态方法,方法内的变量也是在方法调用时才开始分配内存,因此想给方法中的变量成静态的在逻辑上存在问题。

22.下列语句中,正确的是:(ABD)

A、int Se, a, b = 10;(整型赋值给整型)

B、char c, d = ‘a’;(字符型赋值)

C、float e = 0.0d;(双精度型不能转换成单精度型,转换须要强制类型转换)

D、double c = 0.0f;(单精度型能够复制给双精度型)

23.下面哪个是Java最基本元素:(D

A、接口

B、方法

C、包

D、对象(java是面向对象编程)

24.下面关于抽象类的理解。错误的是:(A

A、构造方法能够声明抽象类型

B、抽象方法必须被子类的方法覆盖

C、不容许实现抽象方法

D、方法申明中,static和abstract不能同时存在

 

解释:java抽象类的构造方法和普通类的构造方法同样都是用来初始化类,只是抽象类的构造方法不能直接调用 由于抽象类不能实现实例

可是一旦一个普通类继承了抽象类 便也能够在构造函数中调用其抽象类的构造函数,也可使用其方法,能够这么理解吧 抽象类就是一个不能实例化的不一样类,不过若是方法加了abstract那么就必须在子类里面重写了。

 

25Anonymous Inner Class(匿名内部类)是否能够extends(继承)其它类,是否能够implements(实现)interface(接口)

答:匿名内部类是没有名字的内部类,不能extends()继承其它类,但一个内部类能够做为一个接口,由另外一个内部类实现。

 

26.谈谈Android的优缺点和不足之处:

优势:

一、     开放性、开源

二、     挣脱运营商束缚

三、     丰富的硬件选择

四、     不受任何限制的开发商

五、     无缝结合的Google应用

缺点:

一、     安全问题、隐私问题                                 

二、     卖手机的不是最大运营商

三、     运营商对Android手机仍然有影响

四、     山寨化严重

五、     过度依赖开发商,缺少标准配置

 

27、请解释下android程序运行时权限与文件系统权限的区别:

     

      Android程序执行须要读取到安全敏感项必须在androidmanifest.xml中声明相关权限请求,打电话,访问网络,获取坐标,读写sd卡,读写联系人等…安装的时候会提示用户…文件系统的权限是linux权限。好比说sharedpreference里面的

Context.Mode.private , Context.Mode.word_read_able

Context.Mode_word_writeable

28、如何退出Activity?如何安全退出已调用多个ActivityApplication

一、抛异常强制退出:该方法经过抛异常,使程序Force Close。

验证能够,可是,须要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。

二、记录打开的Activity:每打开一个Activity,就记录下来。在须要退出时,关闭每个Activity便可。

三、发送特定广播:在须要结束应用时,发送一个特定的广播,每一个Activity收到广播后,关闭便可。

四、递归退出:在打开新的Activity时使用startActivityForResult,而后本身加标志,在onActivityResult中处理,递归关闭。

上面是网上的一些作法。其实能够经过intent的flag来实现。Intent.setFlag(FLAG_ACTIVITY_CLEAR_TOP)激活一个新的activity,而后在新的ativity的oncreate方法里面finish掉。

 

29、不用serviceB页面为音乐播放,从A跳转到B,再返回,如何使音乐继续播放?

 

答:这个问题问的很山寨,默认不作任何处理,B里面的音乐都能播放。遇到问题,能够随机应变,灵活发挥,多考虑些细节,好比说这个题就能够这样说,说说你对startActivityForResult的理解()

A开启B的时候,用startActivityForResult()方法,B返回的时候把播放的状态信息返回给A,A继续播放音乐。

 

30、系统上安装了多种浏览器,可否指定某浏览器访问指定页面?

答:找到浏览器的浏览器意图,传递数据的URI,激活这个意图。

 

31.android虚拟机的理解,包括内存管理机制垃圾回收机制

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16,谈谈加载图片的时候怎么处理大照片的,垃圾回收,没有引用的对象,在某个时刻会被系统gc(回收)掉。

 

32.ListView如何提升其效率?

复用convertview ,异步加载数据,分页加载数据,使用静态的view对象避免建立过多的view.

 

33.启动应用后,改变系统语言,应用的语言会改变么?

不会。

 

34.说说Activity,Intent,Service是什么关系?

麦当劳和麦当娜的关系、这种问题,就讲下activity,讲一下service,说一下经过intent去激活组件,传递数据,说本身项目中有这样一个网络更新的功能,显示界面就用的activity,后台有个Service每隔半个小时都去访问下服务器获取更新的数据…开启服务用的是intent来开启。

 

35.下列选项哪一个不是Activity启动的方法?(A

A、goToActivity

B、startActivity

C、startActivityFromChild

D、startActivityFoResult

 

36、解析xml的方法有(CDE

A、字符器类型

B、流方式

C、dom

D、SAX

E、PULL

37.内部类有时为何要用final修饰?

内部类使用外部的变量时,其实就是内部类对象引用外部变量,当内部类引用外部变量时,外部变量可能死亡或者销毁,为了延续生命周期,就要把外部变量复制到内部类中,可是复制不具备统一性,因此用final保证其统一性!

相关文章
相关标签/搜索