每天五道Android面试题,轻松进大厂2018-12-24

一、JAVA GC原理

垃圾收集算法的核心思想是:对虚拟机可用内存空间,即堆空间中的对象进行识别,如果对象正在被引用,那么称其为存活对象,反之,如果对象不再被引用,则为垃圾对象,可以回收其占据的空间,用于再分配。垃圾收集算法的选择和垃圾收集系统参数的合理调节直接影响着系统性能。

二、ANR

ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框.

产生原因:

(1)5s内无法响应用户输入事件(例如键盘输入, 触摸屏幕等).

(2)BroadcastReceiver在10s内无法结束

(3)Service 20s内无法结束(低概率)

解决方式:

(1)不要在主线程中做耗时的操作,而应放在子线程中来实现。如onCreate()和onResume()里尽可能少的去做创建操作。

(2)应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。

(3)避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。

(4)service是运行在主线程的,所以在service中做耗时操作,必须要放在子线程中。

三、设计模式

此处延伸:Double Check的写法被要求写出来。

单例模式:分为恶汉式和懒汉式

恶汉式:

public class Singleton

{

    private static Singleton instance = new Singleton();

    public static Singleton getInstance(){

        return instance ;

    }

}

懒汉式:

public class Singleton02

{

    private static Singleton02 instance;


    public static Singleton02 getInstance()  {

        if (instance == null)  {

            synchronized (Singleton02.class)  {

                if (instance == null)  {

                    instance = new Singleton02();

                }

            }

        }

        return instance;

    }

}


四、MVP,MVC,MVVM

此处延伸:手写mvp例子,与mvc之间的区别,mvp的优势

MVP模式,对应着Model--业务逻辑和实体模型,view--对应着activity,负责View的绘制以及与用户交互,Presenter--负责View和Model之间的交互,MVP模式是在MVC模式的基础上,将Model与View彻底分离使得项目的耦合性更低,在Mvc中项目中的activity对应着mvc中的C--Controllor,而项目中的逻辑处理都是在这个C中处理,同时View与Model之间的交互,也是也就是说,mvc中所有的逻辑交互和用户交互,都是放在Controllor中,也就是activity中。View和model是可以直接通信的。而MVP模式则是分离的更加彻底,分工更加明确Model--业务逻辑和实体模型,view--负责与用户交互,Presenter 负责完成View于Model间的交互,MVP和MVC最大的区别是MVC中是允许Model和View进行交互的,而MVP中很明显,Model与View之间的交互由Presenter完成。还有一点就是Presenter与View之间的交互是通过接口的

五 手写算法

选择排序:

public class SelectSort{

    public static void main(String [] args){

        int a[] = {1, 2, 3, 56, 45, 22, 22, 26, 89, 99, 100};

        System.out.println("排序前:");

        for (int i = 0; i < a.length; ++ i){

            System.out.print(a[i] + " ");

        }

        selectSort(a);

        System.out.println("\n");

        System.out.println("排序后:");

        for (int i = 0; i < a.length; ++ i){

            System.out.print(a[i] + " ");

        }

    }

    public static void selectSort(int a[]){

        int min = 0;

        int temp = 0;

        for (int i = 0; i < a.length - 1; ++ i){

            min = i;

            for (int j = i + 1; j < a.length; ++ j){

                if (a[min] > a[j]){

                    min = j;

                }

            }

            if (min != i){

                temp = a[min];

                a[min] = a[i];

                a[i] = temp;

            }

        }

    }

}

你可能感兴趣的:(每天五道Android面试题,轻松进大厂2018-12-24)