1、 What is activity? What is intent?4
Activity:activity是Android程序的呈现层,显示可视化的用户界面,并接收与用户交互所产生的界面事件;
Intent:Intent(意图)主要是解决Android应用的各项组件之间的通讯。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。
2、 请介绍下Android中常用的五种布局?2
相对,绝对,线性,帧,表格
3、 TCP与UDP有什么区别?分别有什么具体的应用协议?程序如何使用TCP或UDP?6
①区别:
TCP(传输控制协议): 面向连接、传输可靠(保证数据正确性,保证数据顺序)、用于传输大量数据(流模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
UDP(用户数据协议,User Data Protocol):面向非连接、传输不可靠、用于传输少量数据(数据包模式)、速度快。
②应用协议:
TCP支持的应用协议:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协议)。TCP用于传输数据量大,可靠性要求高的应用。
UDP支持的应用协议:NFS(网络文件系统)、SNMP(简单网络管理系统)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
③ http://www.cnblogs.com/holyknight-zld/archive/2012/07/17/socket_chatroom.html
4、 什么XML?如何生成xml字符串,如何解析xml字符串?6
Xml:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
http://stevenjohn.iteye.com/blog/1299813
5、 请介绍android的数据存储方式?5
(1)使用SharedPreferences存储数据
适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。SharedPreferences对象本身只能获取数据而不支持 存储和修改,存储修改是通过SharedPreferences.edit()获取的内部接口Editor对象实现。 SharedPreferences本身是一 个接口,程序无 法直接创建SharedPreferences实例,只能通过Context提供的getSharedPreferences(String name, int mode)方法来获取 SharedPreferences实例,该方法中name表示要操作的xml文件名
(2)文件存储数据
核心原理: Context提供了两个方法来打开数据文件里的文件IO流 FileInputStream openFileInput(String name); FileOutputStream(String name , int mode),这两个方法第一个参数 用于指定文件名,第二个参数指定打开文件的模式。
读写sdcard上的文件
其中读写步骤按如下进行:
1、调用Environment的getExternalStorageState()方法判断手机上是否插了sd卡,且应用程序具有读写SD卡的权限,如下代码将返回 true
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
2、调用Environment.getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录,或者使用"/mnt/sdcard/"目录
3、使用IO流操作SD卡上的文件
(3)SQLite存储数据
SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。
(4)ContentProvider
管理android以结构化方式存放的数据,以相对安全的方式封装数据(表)并且提供简易的处理机制和统一的访问接口供其他程序调 用。
(5)网络存储数据
HttpUrlConnection是Java.NET包中提供的API,HttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是 基于JDK的HttpUrlConnection进行的封装罢了。
6、 请描述activity的生命周期?6
7、 Activity在屏幕旋转时的行为及如何处理?
-不同条件下,旋转屏幕时,activity的生命周期发生的变化也是不一样的。总共有以下三种情况:
①不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次;
②设置Activity的android:configChanges=”orientation”时,切屏会重新调用各个生命周期,切横、竖屏时都只会执行一次;
③设置Activity的android:configChanges=”orientation|keyboardHidden|screenSize”时,切屏不会重新调用各个生命周期,只会执 行onConfigurationChanged方法。
8、 如何实现一个Service?
第一步:继承Service类
public class MyService extends Service { }
第二步:在AndroidManifest.xml文 件中的<application>节点里对服务进行配置:
<service android:name=”.MyService” />
服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务
9、 注册广播有几种方式,这些方式有何优缺点?请谈谈android引入广播机制的用意。
静态注册(在androidmanifest.xml当中注册)和动态注册.(在应用程序的代码中注册)
动态注册优点:在 Android 的广播机制中,动态注册的优先级是要高于静态注册优先级的,因此在必要的情况下,我们是需要动态注册广 播接收器的。
缺点:就是当用来注册的 Activity 关掉后,广播也就失效了
静态注册优点:无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器就是打开着的。
缺点:常驻型,占资源比较大
用意:
a:android的四大组件本质上就是为了实现移动或者说嵌入式 设备上的MVC架构,它们之间有时候是一种相互依存的关系,有 时候又是一种补充关系,引入广播机制可以方便几大组件的信息和 数据交互。
b:程序间互通消息(例如在自己的应用程序内监_听系统来电)
c:效率上(参考UDP的广播协议在局域网的方便性)
d:设计模式上(反转控制的一种应用,类似监_听者模式)
10、 已知f1、f2同一类两个成员函数,但f1不能调用f2,说明(B)2
a) F1、f2都是静态函数
b) F1是静态,f2不是
c) F1不是,f2是静态
d) F1、f2都不是静态函数
普通成员函数可以调用静态函数,相反静态函数不能调用普通成员函数,
11、 请解释下载单线程模型中Message、Handler、MessageQueue、Looper之间的关系。
http://www.cnblogs.com/xs104/p/4831047.html
12、 在派生类中能直接访问基类的(D)
a) 共有成员,私有成员
b) 保护成员,私有成员
c) 不可访问成员、私有成员
d) 公有成员、保护成员
13、 简要解释一下activity、intent、intentFilter、service、broadcast、broadcastreceiver
一个activity呈现了一个用户可以操作的可视化用户界面;
一个intent是一个Intent对象,它保存了消息的内容。对于 activity和service来说,它指定了请求的操作名称和待操作数据的URI,Intent
对象可以显式的指定一个目标component。如果 这样的话,android会找到这个component(基于manifest文件中的声明)并激活它。 但如果一个目标不是显式指定的,android必须找到响应intent的最佳component。它是通过将Intent对象和目标的intent filter相比较 来完成这一工作的;
一个 component的intent filter告诉android该component能处理的intent。 intent filter也是在 manifest文件中声明的。
一个service不包含可见的用户界面,而是在后台运行,可以与一个 activity绑定,通过绑定暴露出来接口并与其进行通信;
一个broadcastreceiver是一个接收广播消息并做出回应的 component,broadcast receiver没有界面;
14、 说明override和overload分别是何含义
override(重写,覆盖) 重写是父类与子类之间多态性的一种表现,
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载,过载) 重载(Overloading)是一个类中多态性的一种表现。
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
15、 说说mvc模式的原理,它在android中的运用?
mvc是model,view,controller的缩写,mvc包含三个部分:
模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显 示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能, 想用用户出发的相关事件,交给model处理。
android鼓励弱耦合和组件的重用,在android中mvc的具体体现如下:
1)视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对android了解的比较的多了话, 就一定 可以想到在android中也可以使用JavaScript+html等的方式作为view层,当然这里需要进行Java和javascript之间的通 信, 幸运的是,android提供了它们之间非常方便的通信实现。
2)控制层(controller):android的控制层的重 任通常落在了众多的acitvity的肩上,这句话也就暗含了不要在acitivity中写代码,要通 过activity交割model业务逻辑层处理, 这样做的另外一个原因是android中的acitivity的响应时间是5s,如果耗时的操作放在这里, 程序就很容易被回收掉。
3)模型层(model):对数据库的操作、对网络等的操作都应该在model里面处理,当然对业务计算等操作也是必须放在的该层的。
16、 什么是重构,何时使用重构?
重构的意思是在不改变程序原有功能基础上,对代码进行优化,使程序质量更好,使代码的可读性更好,使程序的结构更加清晰, 这样不 仅仅是造福与后来人,对自己更是有益,
重构应该伴随着项目的始终, 在开始搭建项目的时候,就应该想到这个项目以后要如何的进行扩展、优化、如何达到耦合性更低,内 聚性 更高。
17、 说明设计模式中有哪几种工厂模式?分别是何含义,列出你所知道的其他设计模式。5
http://laixiancai.cnblogs.com/p/4808087.html
简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有 共同的父类。它又称为静态工厂方法模式。它的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
工厂方法模式:工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。 提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。其次实现更复杂的层次结构,可以应用于产品结果复杂的场合。工厂方法模式是对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。
抽象工厂模式:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一 种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。它有多个抽象产品类,每个抽象产品类可以派生出多个具体产品类,一个抽象工厂类,可以派生出多个具体工厂类,每个具体工厂类可以创建多个具体产品类的实例。每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结果。
一共23种设计模式:
https://zhidao.baidu.com/question/408217161.html
18、 列出你知道的UML图形种类?
http://blog.youkuaiyun.com/fatherican/article/details/44966891
用例图,类图,对象图,包图,活动图,状态图,序列图,协作图,构件图(组件图),部署图(配置图)。
19、 飞机可以飞,鸟可以飞,飞机是机器,鸟是动物,飞机和鸟都是可飞行物,写出类图,不写类图的写出类定义。8
可飞行物是父类,飞机和鸟是其子类,并实现飞这个接口。
20、 什么是状态机?2
状态机简写为FSM(Finite State Machine),主要分为2大类:第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;第二类, 输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。要特别注意的是,因为Mealy状态机和输入有关,输出会受到输入的干扰, 所以可能会产生毛刺(Glitch)现象,使用时应当注意。
21、 什么情况会导致Force Close?如何避免?能否捕获导致其的异常?2
抛出运行时异常时就会导致Force Close,比如空指针、数组越界、类型转换异常等等。
捕获:可以通过logcat查看抛出异常的代码出现的位置,然后到程序对应代码中进行修改。
避免:编写程序时,要思维缜密,在可能出现异常的地方都作相应的处理,增强程序的健壮性。
22、 有五角星、方块、三角形等等各种图形,可以把他们输出到屏幕、打印或其他地方。画出类图,不会类图的写出类定义
图形类是父类,五角星类,方块类,三角形类是其子类,实现输出接口。
23、 公交车速度40/h,路程全长40,每隔10分一班车,需要多少量车?为什么? 12
0 10 20 30 40 50 60
0 1/6 2/6 3/6 4/6 5/6 1
60 50 40 30 20 10 0
1 5/6 4/6 3/6 2/6 1/6 0
24、 描述一下android的系统架构
Android系统从下往上分为Linux内核层(linux kerner),运行库(runtime library),应用程序框架层,应用程序层
linuxkernel:负责硬件的驱动程序、网络、电源、系统安全以及内存管理等功能。
libraries和 androidruntime:libraries:即c/c++函数库部分,大多数都是开放源代码的函数库,例如webkit,该函数库负责 android 网页浏览器的运行
applicationframework(应用软件架构),Java应用程序开发人员主要是使用该层封装好的api进行快速开发。
applications:该层是java的应用程序层,android内置e-mail、即时通信工具、浏览器、mp3播放 器等处于该层,java开发人员开发的 程序也处于该层,而且和内置的应用程序具有平等的位置,可以调用内置的应用程序,也可以替换内置的应用程序。
25、 请介绍下ContentProvider是如何实现共享数据的。2
Android提供了ContentProvider,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且 ContentProviders是以类似数据库中表的方式将数据暴露,也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据, 也就应该与从数据库中获取数据的操作基本一样,只不过是采用URI来表示外界需要访问的“数据库”。外部访问通过ContentResolver 去访问并操作这些被暴露的数据。
26、 如何退出Activity?如何退出Application?
单一的Activity调用finish()方法即可。如果是多个Activity,我们可以定义一个活动集合类,对所有的活动进行管理。实现创建的时候将 Activity缓存在List中,销毁的时候从List中移除。按退出按钮,则遍历整个List将Activity一一销毁。
http://blog.youkuaiyun.com/fumier/article/details/47660903
27、 DDMS和TraceView的区别
DDMS:
DDMS 【Dalvik Debug Monitor Service】是安卓(android)开发环境中的Dalvik虚拟机调试监控服务。
DDMS能够提供:测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、 虚拟地理坐标等。
TraceView :
Traceview是安卓(android)平台配备的性能分析的工具。
可以通过图形化让了解要跟踪的程序的性能,并且能具体到方法(method)。
DDMS和TraceView的区别:
DDMS是一个程序执行查看器,在里面可以看见线程和堆栈等信息,而TraceView是程序性能分析器。
28、 Describe the apk format
The APK file is compressed the AndroidManifest.xml file, application code (.dex files), resource files, and other files. A project is compiled into a single .apk file.
APK文件是压缩的AndroidManifest.xml文件,应用程序代码(.dex文件)、资源文件和其他文件。一个项目被编译到一个.apk文件。
29、 How is nine path image different from a regular bitmap?
It is a resizable bitmap resource that can be used for backgrounds or other images on the device. The NinePatch class permits drawing a bitmap in nine sections. The four corners are unscaled; the four edges are scaled in one axis, and the middle is scaled in both axes.
这是一个可调整大小的位图资源,可用于设备上的背景或其他图像。点9图允许在九节绘制一个位图。四角不成比例;四边一轴缩放,和中 间两轴缩放。
30、 What languages does Android support for application development?
Android applications are written using the Java programming language.
Android应用程序是用java语言编写。
31、 What is a resource?
A user-supplied XML, bitmap, or other file, injected into the application build process, which can later be loaded from code.
用户提供的XML,位图或其他文件,注入到应用程序的构建过程中,这以后可以从代码加载。
上机
1、 有一个一维整形数组 int[] data保存的是一张宽为width,高为height的图片的像素值信息。请写一个算法,将该图片的所有白色不透明(0xffffffff)调整为半透明。
final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}
2、 编写一个程序,对给定的文件以行为单位读取,同时将这些行按字母顺序进行排序,打印在屏幕上。
public class Sort{
public static void main(String[] args) throws IOException {
FileReader in = null;
BufferedReader read;
String temp[] = new String[100];
try {
in = new FileReader("A.txt");
}
catch (FileNotFoundException e) { System.out.println("未找到文件");}
read = new BufferedReader(in);
String source;
int index = 0;
while((source = read.readLine()) != null){
temp[index] = source + "\n";
index++;
}
read.close();
Arrays.sort(temp);
for(int i=0;i<temp.length;i++){
System.out.println(i);
}
}
}
3、 启动3个线程对同一个整数变量进行操作,每个线程循环对这个变量进行如下4个操作:
打印变量、让变量值+1、再打印变量值、循环10次,主线程最后将整数打印至屏幕。