问答题
- 如何退出Activity?如何安全退出已调起多个Activity的Application?
- finish()
- 新建一个类ActivityCollector用于管理全部的Activity对象,每生成一个Activity对象就将其添加到ActivityCollector一个List中,在ActivityCollector中实现一个finishAll()方法,用于结束list 中所有的Activity对象
//1.创建一个类(MyApplication)继承Application
public class MyApplication extends Application{
// 2.创建一个用于存放activity的集合,这里可以创建一个Activity的基类,
// 叫BaseActivty,让所有的Activity都继承它,在BaseActivity中我们可以写共性的方法或变量等。
//创建一个用于存放Activitiy的集合
List<BaseActivity> mActivityList = new ArrayList<>();
//3. 添加3个方法,分别用于添加Activity,移除Activity,清空集合
//提供一个添加activity的方法
public void addActivity(BaseActivity activity) {
if (!mActivityList.contains(activity)) {
mActivityList.add(activity);
}
}
//提供一个移除activity的方法
public void removeActivity(BaseActivity activity) {
if (!mActivityList.contains(activity)) {
mActivityList.remove(activity);
}
}
//提供一个清空集合的方法
public void clearAllActivity() {
for (int i = 0; i< mActivityList.size(); i++) {
BaseActivity activity = mActivityList.get(i);
activity.finish();
}
mActivityList.clear();
}
- 用至少两种方式实现一个Singleton(单例模式)。
public class Singleton{
private volatile static Singleton single;
private Singleton(){
}
public static Singleton getInstance(){
if (single == null){
synchronized(Singleton.class){
if (single == null){
single = new Singleton();
}
}
}
return single;
}
}
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton(){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
- 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
方式1:继承Thread类。
A:自定义类MyThread继承Thread类。
B:MyThread类里面重写run():run Alt+/
C:创建对象
D:启动线程
方式2:实现Runnable接口的步骤:
A:自定义类MyRunnable实现Runnable接口
B:重写run()方法
C:创建MyRunnable类的对象
D:创建Thread类的对象,并把C步骤的对象作为构造参数传递
方法3:实现Callable接口,重写call()方法:不常用
一般使用方法2
同步有几种实现方法,都是什么?
(1)synchronized关键字:包括 synchronized方法和 synchronized块
(2)wait()方法和notify()方法
(3)Lock接口及其实现类ReentrantLock
- 请描述下Activity的生命周期
- 什么是ANR和Force Close?如何避免?
ANR: Application Not Responding
产生原因:
1.主线程(UI线程)响应用户操作事件时间超过5秒
2.BroadcastReceiver超过10秒钟任未执行完毕。
避免方法:
Android应用程序完全运行在一个独立的线程中。任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因此,需要消耗大量时间的操作如访问网络和数据库,都要放到子线程中或者使用异步方式来完成。
Force Close.
产生原因:
程序出现异常,一般像空指针、数组越界、类型转换异常等。
避免方法:
编写程序时要思维缜密,异常出现时可以通过logcat查看抛出异常代码出现的位置,然后到程序中进行修改。
选择题
- 算法的五个特征:有穷性,确切性,输入项,输出项,可行性
- 堆排序复杂度:时间复杂度O(nlogn),整个构建堆的时间复杂度为O(n),堆排序的空间复杂度为O(1),堆排序是一种不稳定的排序算法
- 基于比较的排序算法有:(1)直接插入排序;(2)冒泡排序;(3)简单选择排序;(4)希尔排序;(5)快速排序;(6)堆排序;(7)归并排序。
另外:基数排序、桶排序都属于分配式排序 - 链地址法
- SNMP基于传输层UDP用户数据报协议,在管理者和被管理设备(确切的说是agent)之前传递信息。
SNMP管理包括下面三个部分:
(1)MIB管理信息库
(2)SMI管理信息的结构和标识(也称管理信息接口SMI)
(3)SNMP简单网络管理协议 - DHCP 有 8 种消息类型,分别是 Discover、Request、Release、Inform、Decline、Offer、ACK、NAK。
其中前 5 种可由主机发起,后 3 种只能是 DHCP 服务端向主机发送 - 匹配是指在同一子网内
- TCP 21 端口: FTP 文件传输服务
TCP 23 端口: TELNET 终端仿真服务
TCP 25 端口: SMTP 简单邮件传输服务
UDP 53 端口: DNS 域名解析服务
TCP 80 端口: HTTP 超文本传输服务
TCP 110 端口: POP3 “邮局协议版本3”使用的端口
TCP 443 端口: HTTPS 加密的超文本传输服务
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制。 - 利用归并排序方法对数字序列:5,19,17,21,11,8,1进行排序,共需要进行( )次比较
(5, 19, 17, 21, 11,8,1)
(5, 19, 17, 21)( 11,8,1)
(5, 19)( 17, 21)( 11,8)(1)
开始合并:
(5, 19)( 17, 21)( 8,11)(1)比较3次
(5, 17, 19, 21)(1, 8, 11)比较4=3+1次
(1, 5, 8, 11, 17, 19, 21)比较4次
共比较11=3+4+4次 - 采用计数排序算法对数组A = {1,0,3,1,0,1,1}进行排序,则辅助数组C的长度值为max-min+1,max和min为待排序序列的最大值和最小值,故C的长度为:3-0+1=4;(注意:计数排序是特殊的桶排序,每个桶的长度为1。所以辅助数组的长度为(max-min)/1+1);
网友评论