京东:移动端主观题

问答题

  1. 如何退出Activity?如何安全退出已调起多个Activity的Application?
  1. finish()
  2. 新建一个类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 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();
    }
  1. 用至少两种方式实现一个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. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

方式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

  1. 请描述下Activity的生命周期
  2. 什么是ANR和Force Close?如何避免?

ANR: Application Not Responding
产生原因:
1.主线程(UI线程)响应用户操作事件时间超过5秒
2.BroadcastReceiver超过10秒钟任未执行完毕。
避免方法:
Android应用程序完全运行在一个独立的线程中。任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。因此,需要消耗大量时间的操作如访问网络和数据库,都要放到子线程中或者使用异步方式来完成。

Force Close.
产生原因:
程序出现异常,一般像空指针、数组越界、类型转换异常等。
避免方法:
编写程序时要思维缜密,异常出现时可以通过logcat查看抛出异常代码出现的位置,然后到程序中进行修改。

选择题

  1. 算法的五个特征:有穷性,确切性,输入项,输出项,可行性
  2. 堆排序复杂度:时间复杂度O(nlogn),整个构建堆的时间复杂度为O(n),堆排序的空间复杂度为O(1),堆排序是一种不稳定的排序算法
  3. 基于比较的排序算法有:(1)直接插入排序;(2)冒泡排序;(3)简单选择排序;(4)希尔排序;(5)快速排序;(6)堆排序;(7)归并排序。
    另外:基数排序、桶排序都属于分配式排序
  4. 链地址法
  5. SNMP基于传输层UDP用户数据报协议,在管理者和被管理设备(确切的说是agent)之前传递信息。
    SNMP管理包括下面三个部分:
    (1)MIB管理信息库
    (2)SMI管理信息的结构和标识(也称管理信息接口SMI)
    (3)SNMP简单网络管理协议
  6. DHCP 有 8 种消息类型,分别是 Discover、Request、Release、Inform、Decline、Offer、ACK、NAK。
    其中前 5 种可由主机发起,后 3 种只能是 DHCP 服务端向主机发送
  7. 匹配是指在同一子网内
  8. 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用于传输控制。
  9. 利用归并排序方法对数字序列: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次
  10. 采用计数排序算法对数组A = {1,0,3,1,0,1,1}进行排序,则辅助数组C的长度值为max-min+1,max和min为待排序序列的最大值和最小值,故C的长度为:3-0+1=4;(注意:计数排序是特殊的桶排序,每个桶的长度为1。所以辅助数组的长度为(max-min)/1+1);

你可能感兴趣的:(京东:移动端主观题)