android面试题及答案

JAVAjava

1.GC是什么? 为何要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会致使程序或系统的不稳定甚至崩溃,Java提供的GC功能能够自动监测对象是否超过做用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操做方法。
 
2.XML包括哪些解释技术,区别是什么?
DOM和SAX
DOM将文档解析成一颗文档树,可在节点上进行遍历、增长、修改和删除。一次性读入内存,对内存消耗大。
SAX至上而下解析文档,以事件进行驱动。不会一次性读入内存,对内存消耗小,不能任意读取节点,而且不能对节点进行增长、修改和删除。
 
3.switch语句可否做用在byte上,可否做用在long上,可否做用在String上?
switch能做用在byte、char、short和int上,JDK1.7后能够做用在String上。
 
4."=="和equals方法究竟有什么区别?
==和equals均可以比较地址。==是运算符,equals是方法,方法能够经过重写改变其行为,如String的equals就是比较字符串内容。
 
5.构造方法可否被重写和重载?
构造方法不能被重写可是能被重载。
 
6.面向对象的特征有哪些?
封装、继承、多态和抽象。
7.抽象类和接口的区别?
1).抽象类是abstract class修饰,接口是interface修饰。
2).抽象类能够有任意类型的属性,接口只能有静态常量修饰的属性。
3).抽象类能够有普通方法和抽象法方法,接口的方法都是抽象方法。
4).抽象类和接口都不能实例化,可是抽象类有构造方法,接口没有构造方法。
5).抽象类只能单根继承,接口能够多重实现。
 
8.内部类能够引用它的包含类的成员吗?有没有什么限制? 
能够引用。若是须要指定当前类时要用外部类.this来引用。若是引用局部变量,须要将局部变量指定为final。
 
9.String s = new String("xyz");建立了几个String Object? 两者之间有什么区别?
2个对象。"xyz"建立在字符串常量池中,new String()建立在堆中。
 
10.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,何时被执行,在return前仍是后? 
会在return前执行。
 
11.Integer与int的区别
Integer为包装类,int是基本数据类型。包装类拥有方法和属性,基本数据类型不具有。包装类能够经过intValue来转换成基本数据类型,也能够经过new Integer()将基本数据类型转换为包装类。在JDK1.5后,包装类和基本数据类型能够实现自动转换。
 
12.sleep()和wait()有什么区别?
sleep是Thread类的方法,wait是Object类的方法。
sleep是自动唤醒,wait须要其余线程来唤醒。
sleep不会释放同步锁,wait会释放同步锁。
sleep能够用在任意方法中,wait只能用在同步方法或同步块中。
 
13.Sleep() 不会释放对象锁 到时自动恢复 wait()会释放对象锁 进入等待此对象的等待锁定池 发出notify()方法后 才进入等待锁定池准备对象锁的获取进入运行状态
 
14.同步和异步有何异同,在什么状况下分别使用他们?
同步指同一时间只能一个线程执行该方法,其余线程须要等待。异步指多个线程能够同时执行某个方法,并共享同一资源。
同步可让访问的资源具备安全性,由于同一时间只能一个线程对其进行访问。可是效率不高。
异步对访问的资源会形成不稳定性,好比多个线程同时访问一个资源,一个在修改、一个在删除、一个在读取,这样可能会形成资源的混乱。可是因为同时运行,执行效率获得提升。
 
15.启动一个线程是用run()仍是start()? 
start()方法启动线程,run方法是线程执行的主方法。
 
16.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有三种流,分别是字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、ObjectOutputStream)。
 
17.字节流与字符流的区别?
字节流用于读取或写出二进制数据,好比图片、影像等数据。
字符流用于读取或写出字符数据,好比传输字符串。
全部的数据均可以经过字节流来进行处理,不过若是是字符数据,用字节流还须要进行转换后传输,若是使用字符流能够方便数据的转换。
 
18.error和exception有什么区别?
error是系统错误,代码不能处理的错误,好比内存溢出、堆栈溢出等。
exception是程序异常,能够经过代码try-catch进行处理,好比空指针异常,数组越界等。
 
19.谈谈final,finally,finalize的区别?
final是修饰符,能够修饰类(不能被继承)、属性(常量)、和方法(不能被重写)。
finally是异常处理块中的代码块,表示不管如何都会执行的代码块。
finalize是Object类的方法,该方法在对象被垃圾回收以前执行的方法。
 
20.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
若是其余方法没有加synchronized的话是能够进入的。
 
21.当一个对象被看成参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里究竟是值传递仍是引用传递?
java中只有值传递,若是传递的对象,实际也是传递该对象的地址。
 
22.做用域public,private,protected,以及不写时的区别
public公共修饰符,表示任意类均可以访问。
protected为受保护的修饰符,表示同类、同包以及不一样包可是父子关系的是能够访问。
不写表示默认修饰符,或者称为package修饰符,该修饰符表示只有同类或同包下的类能够访问,出了这个包就不能访问了。
private为私有修饰符,表示只有同类中能够访问,出了这个类就不能访问了。
 
23.用最有效率的方法算出2乘以8等於几 2《 3
将2的二进制向左移3位。java中用<<来移位。
 
24.heap和stack有什么区别。
heap表示堆,stack表示栈。堆中放对象,栈中放引用变量。
堆空间是一个无序的空间,栈是先进后出的结构。
 
25.运行时异常与通常异常有何异
运行时异常是指继承于RuntimeException的异常,这些异常在编译时能够不进行处理,当运行时若是出现问题才会抛出。如NullPointException、ArrayIndexOutOfBoundsException
通常异常也称为编译时异常,这些异常是继承Exception但又不属于RuntimeException的子类,若是程序中出现这些异常,在编译时必须进行捕获或抛出,不然编译没法经过。如IOException、FileNotFoundException
 
26.垃圾回收的优势和原理。并考虑2种回收机制
Java语言中一个显著的特色就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候再也不须要考虑内存管理。因为有个垃圾回收机制,Java中的对象再也不有"做用域"的概念,只有对象的引用才有"做用域"。垃圾回收能够有效的防止内存泄露,有效的使用可使用的内存。垃圾回收器一般是做为一个单独的低级别的线程运行,不可预知的状况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收,程序员不能实时的调用垃圾回收器对某个对象或全部对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
 
27.描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。
 
28.是否能够从一个static方法内部发出对非static方法的调用?
不能,除非先建立非static方法所在类的对象。
 
29.什么是java序列化,如何实现java序列化?
 
30.使用serializable关键字 使用一个输出流构造一个对象流流对象 而后使用对象流对象的writeObject()就能够将参数为obj的对象写出
 
31.Anonymous Inner Class(匿名内部类)是否能够extends(继承)其它类,是否能够implements(实现)interface(接口)?
匿名内部类能够继承类或实现接口,但不是显示的使用extends或implements来继承或实现。
 
32.ArrayList和Vector的区别,HashMap和Hashtable的区别?
ArrayList是JDK1.2的集合类而且线程不安全,Vector是1.0的集合类而且线程安全,两者用法相似。
HashMap线程不安全且能放空键或空值,Hashtable线程安全且不能放空键或空值。
 
33.String 和StringBuffer有什么差异?在什么状况下使用它们?
String字符串的基本类,该字符串是不可变的。StringBuffer是利用堆来存储字符串,而且能够对字符串的内容进行改变。
 
34.new一个类对象和使用类名建立一个对象有什么区别?两者使用时应该注意什么?
new对象是最多见的建立对象的方式,利用类模板是经过反射来建立对象。虽然new对象时在底层也会经过类模板来建立对象,可是new对象的效率要比直接经过类模板建立对象的方式要高。
可是使用类模板的方式可让程序的灵活性提升。
 
35.LinkedList和ArrayList的区别?
1)LinkedList是链表结构的集合,ArrayList数组结构的集合。
2)LinkedList在中间或前面增长或删除数据时效率比ArrayList高。
3)LinkedList在最后添加或删除数据时效率比ArrayList低。
4)遍历数据时ArrayList效率高于LinkedList。
 
36.介绍JAVA开发中经常使用的Collection FrameWork(集合框架)?
Java中集合框架分为Collection和Map接口,Collection接口下的集合每一个元素都由一个值组成,Map接口下的集合类每一个元素都是由键值对组成。
Collection接口下面有List和Set接口,List接口下常见的类有ArrayList、LinkedList、Vector。它们中的元素能够重复,而且是有序的。Set接口下常见的类有HashSet、TreeSet。它们中的元素不能重复,而且是无序的。
 
37.在异常当中 throw和throws 有什么区别和联系?
throw是在代码中抛出一个异常,后面跟的是异常对象,虚拟机运行到这里时会当即引起一个异常。
throws是写在方法声明上的,表示声明该方法可能会抛出异常,后面跟的是异常类型。调用该方法的时候能够选择处理它或继续往外抛。
 
38.重载和重写的区别
重载是指在一个类中,两个或两个以上的方法具备相同方法名和不一样参数列表,则表示这些方法为重载方法。
重写是指在父类和子类中,子类的方法和父类的方法具备相同方法名、相同参数列表、相同返回类型、子类的访问修饰符范围不小于父类的访问修饰符范围,异常的类型和个数不大于或多于父类的异常类型和个数,则表示该方法为重写方法。换句话说重载方法是区分同一个类中相同方法名的方法,重写方法是找到父类相同方法名的方法并从新改变方法的行为。
 
Android
 
39.activity、Service、BroadcastReceiver的做用(android)
Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它须要为保持各界面的状态,作不少持久化的事情,妥善管理生命周期以及一些跳转逻辑
service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的指令,定义好须要接受的Intent提供同步和异步的接口
BroadCast Receiver:接受一种或者多种Intent做触发事件,接受相关消息,作一些简单处理,转换成一条Notification,统一了Android的事件广播模型
 
40.描述一个完整的Android activity lifecycle
activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();
 
41.显式intent和隐式intent的区别是什么(android)
Intent定义:Intent是一种在不一样组件之间传递的请求消息,是应用程序发出的请求和意图。做为一个完整的消息传递机制,Intent不只须要发送端,还须要接收端。
显式Intent定义:对于明确指出了目标组件名称的Intent,咱们称之为显式Intent。
隐式Intent定义:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。
说明:Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。
 
42.Android中线程同步的方法
线程同步的方法能够采用同步方法和同步块。
 
43.怎么将一个Activity封装成对话框的样子? 怎样将Activity封装成长按Menu菜单的样子?
简单你只须要设置 一下Activity的主题就能够了在AndroidManifest.xml 中定义 Activity的地方一句话: 
Xml代码 
android :theme="@android:style/Theme.Dialog" 
android:theme="@android:style/Theme.Dialog" 
这就使你的应用程序变成对话框的形式弹出来了,或者 
Xml代码 
android:theme="@android:style/Theme.Translucent" 
android:theme="@android:style/Theme.Translucent" 
就变成半透明的。
重写OnCreateOptionMenu方法来处理按下menu后的行为,而后再该方法中弹出对话框形式的Activity。
也能够利用事件监听来监听menu按键,并在该按钮按下后弹出对话框形式的Activity。
 
44.介绍一下Android系统的体系结构
应用层:android的应用程序一般涉及用户界面和交互。
应用框架层:UI组件、各类管理器等。
函数库层:系统C库、媒体库、webkit、SQLite等。
linux核心库:linux系统运行的组件。
 
*45.描述下横竖屏切换时候 activity 的生命周期
不设置Activity的android:configChanges时,切屏会从新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次. 
设置Activity的android:configChanges="orientation"时,切屏仍是会从新调用各个生命周期,切横、竖屏时只会执行一次. 
设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会从新调用各个生命周期,只会执行onConfigurationChanged方法.
 
46.android 中的动画有哪几种,它们的特色和区别是什么 ?
两种,一种是补间动画(Tween)动画、还有一种是帧动画(Frame)动画。Tween动画,这种实现方式可使视图组件移动、放大、缩小以及产生透明度的变化;另外一种Frame动画,传统的动画方法,经过顺序的播放排列好的图片来实现,相似电影。
 
47.一条最长的短信息约占多少 byte?
140byte,70个汉字。
 
48.描述handler 机制的原理
andriod提供了 Handler 和 Looper 来知足线程间的通讯。
Handler 先进先出原则。
Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。 
1)Looper: 一个线程能够产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 
2)Handler: 你能够构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper从Message Queue取出)所送来的消息。 
3) Message Queue(消息队列):用来存放线程放入的消息。 
4)线程:UI thread 一般就是main thread,而Android启动程序时会替它创建一个Message Queue。
 
49.如何将 SQLite 数据库 (dictionary.db 文件 ) 与 apk 文件一块儿发布 ?
能够将dictionary.db文件复制到Eclipse Android工程中的res\raw目录中。全部在res\raw目录中的文件不会被压缩,这样能够直接提取该目录中的文件。 
使用openDatabase方法来打开数据库文件,若是该文件不存在,系统会自动建立/sdcard/dictionary目录,并将res\raw目录中的 dictionary.db文件复制到/sdcard/dictionary目录中
 
50.说说 android 中 mvc 的具体体现
mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,全部的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户惟一能够看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现以下:
1)视图(view):通常采用xml文件进行界面的描述,使用的时候能够很是方便的引入。
2)控制层(controller):android的控制层的重任一般落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写过多的代码,要经过activity交割model业务逻辑层处理,这样作的另一个缘由是android中的acitivity的响应时间是5s,若是耗时的操做放在这里,程序就很容易被回收掉。
3)模型层(model):对数据库的操做、对网络等的操做都应该在model里面处理,固然对业务计算等操做也是必须放在的该层的。
 
51.请介绍下 Android 中经常使用的五种布局
帧布局(FrameLayout)
线性布局(LinearLayout)
表格布局(TableLayout)
相对布局(RelativeLayout)
绝对布局(AbsoluteLayout)
 
52.如何启用 Service ,如何停用 Service
1)startService用于启动Service、stopService中止Service。
2)bindService绑定Service,unbindService解除Service的绑定。
 
53.如何优化ListView
一、若是自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,若是为null就建立contentView并返回,若是不为null则直接使用。在这个方法中尽量少建立view。
二、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,能够达到图像数据异步加载的效果。
三、若是listview须要显示的item不少,就要考虑分页加载。好比一共要显示100条或者更多的时候,咱们能够考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。
 
54.描述4 种 activity 的启动模式
1)standard :系统的默认模式,一次跳转即会生成一个新的实例。假设有一个activity命名为MainActivity,执行语句:
startActivity(new Intent(MainActivity.this, MainActivity.class))后,MainActivity将跳转到另一个MainActivity,也就是如今的Task栈里面有MainActivity的两个实例。按返回键后你会发现仍然是在MainActivity(第一个)里面。
2)singleTop:singleTop 跟standard 模式比较相似。若是已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。若是不位于栈顶,会产生一个新的实例。例:当MainActivity为 singleTop 模式时,执行跳转后栈里面依旧只有一个实例,若是如今按返回键程序将直接退出。
3)singleTask: singleTask模式和后面的singleInstance模式都是只建立一个实例的。在这种模式下,不管跳转的对象是否是位于栈顶的activity,程序都不会生成一个新的实例(固然前提是栈里面已经有这个实例)。这种模式至关有用,在之后的多activity开发中,常常会由于跳转的关系致使同个页面生成多个实例,这个在用户体验上始终有点很差,而若是你将对应的activity声明为 singleTask 模式,这种问题将不复存在。
4)singleInstance: 设置为 singleInstance 模式的 activity 将独占一个task(感受task能够理解为进程),独占一个task的activity与其说是activity,倒不如说是一个应用,这个应用与其余activity是独立的,它有本身的上下文activity。
 
55.什么是Intent,如何使用?
Android基本的设计理念是鼓励减小组件间的耦合,所以Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它容许在你的应用程序与其它的应用程序间传递Intent来执行动做和产生事件。使用Intent能够激活Android应用的三个核心组件:活动、服务和广播接收器。
经过startActivity() orstartActivityForResult()启动一个Activity;
过 startService() 启动一个服务,或者经过bindService() 和后台服务交互;
经过广播方法(好比 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())发给broadcast receivers
 
56.Android用的数据库是什么样的?它和sql有什么区别?为何要用ContentProvide?它和sql的实现上有什么差异?
Adnroid用的是SQLite数据库。它和其余网络数据库相似,也是经过SQL对数据进行管理。SQLite的操做很是简单,包括数据类型在建表时也能够不指定。
使用ContentProvider 能够将数据共享给其余应用,让除本应用以外的应用也能够访问本应用的数据。它的底层是用SQLite 数据库实现的,因此其对数据作的各类操做都是以Sql实现,只是在上层提供的是Uri。
 
57.经过Intent传递一些二进制数据的方法有哪些?
1)使用Serializable接口实现序列化,这是Java经常使用的方法。
2)实现Parcelable接口,这里Android的部分类好比Bitmap类就已经实现了,同时Parcelable在Android AIDL中交换数据也很常见的。 
 
58.对一些资源以及状态的操做保存,最好是保存在生命周期的哪一个函数中进行?
onResume()恢复数据、onPause()保存数据。
 
59.如何一次性退出全部打开的Activity
编写一个Activity做为入口,当须要关闭程序时,能够利用Activity的SingleTop模式跳转该Activity,它上面的全部Activity都会被销毁掉。而后再将该Activity关闭。
或者再跳转时,设置intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这样也能将上面的Activity销毁掉。
 
60.说说Service的生命周期?
启动Service的方式有两种,各自的生命周期也有所不一样。
1、经过startService启动Service:onCreate、onStartCommand、onDestory。
2、经过bindService绑定Service:onCreate、onBind、onUnbind、onDestory。
 
61.什么是AIDL?AIDL是如何工做的?
AIDL(Android接口描述语言)是一种接口描述语言; 编译器能够经过aidl文件生成一段代码,经过预先定义的接口达到两个进程内部通讯进程的目的. 若是须要在一个Activity中, 访问另外一个Service中的某个对象, 须要先将对象转化成AIDL可识别的参数(多是多个参数), 而后使用AIDL来传递这些参数, 在消息的接收端, 使用这些参数组装成本身须要的对象。AIDL是基于接口的,但它是轻量级的。它使用代理类在客户端和实现层间传递值.。
 
62.Android如何把文件存放在SDCard上?
在AndroidManifest.xml中加入访问SDCard的权限以下:
<!– 在SDCard中建立与删除文件权限 –>
<uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>
<!– 往SDCard写入数据权限 –>
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
要往SDCard存放文件,程序必须先判断手机是否装有SDCard,而且能够进行读写。
注意:访问SDCard必须在AndroidManifest.xml中加入访问SDCard的权限。
Environment.getExternalStorageState()方法用于获取SDCard的状态,若是手机装有SDCard,而且能够进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。
Environment.getExternalStorageDirectory()方法用于获取SDCard的目录。
 
63.注册广播有几种方式,这些方式有何优缺点?
两种。一种是经过代码注册,这种方式注册的广播会跟随程序的生命周期。二种是在AndroidManifest.xml中配置广播,这种常驻型广播当应用程序关闭后,若是有信息广播来,程序也会被系统调用自动运行。
 
64.什么是ANR 如何避免它? 
在Android上,若是你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称做应用程序无响应(ANR:Application Not Responding)对话框。用户能够选择让程序继续运行,可是,他们在使用你的应用程序时,并不但愿每次都要处理这个对话框。所以,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。要避免它,应该尽可能少在主线程作耗时太长的操做,应该将这些操做放在线程当中去作。
 
65.Android自己的api并未声明会抛出异常,则其在运行时有无可能抛出runtime异常,你遇到过吗?诺有的话会致使什么问题?如何解决? 
有可能,好比空指针异常、数组下表越界等异常,这些异常抛出后可能会致使程序FC。在编写代码时应该作好检测,多考虑可能会发生错误的状况,从代码层次解决这些问题。
 
66.为何要用 ContentProvider?它和 sql 的实现上有什么差异?
使用ContentProvider 能够将数据共享给其余应用,让除本应用以外的应用也能够访问本应用的数据。它的底层是用SQLite 数据库实现的,因此其对数据作的各类操做都是以Sql实现,只是在上层提供的是Uri。
 
67.谈谈 UI 中, Padding 和 Margin 有什么区别?
padding指内边距,表示组件内部元素距离组件边框的距离。
marin指外边距,表示组件与组件之间的距离。
 
68.请介绍下 Android 的数据存储方式。
Android 提供了5种方式存储数据:
1)使用SharedPreferences存储数据;
2)文件存储数据;
3)SQLite数据库存储数据;
4)使用ContentProvider存储数据;
5)网络存储数据; 
相关文章
相关标签/搜索