安卓面试题一

J2SE篇幅

1.Java里头的多态是什么意思?

首先必须要有继承或者实现,其次是要有方法的重写,最后一个是父类引用指向子类对象

大多数情况下回答这三个就ok了,再具体点直接给面试官举个例子:

动物类 Animal   狗Dog extends Animal   猫Cat extends Animal   --->>继承

Animal有个方法 吃得方法eat()   狗不满意这个父类的吃法,自己重写了eat() 猫也不满意这个父类的吃饭,自己也重写了eat() --->>重写

最后 Animal animal = new Dog(); --->>父类引用指向子类对象

       animal.eat();调用这个方法实际执行的是狗的吃的方法,这就是多态,实际运行时动态绑定。

2.GC的原理

全拼是Garbage Collection(垃圾回收);当堆内存里的对象没有引用指向了,GC就来了。

3.抽象类跟接口的区别

抽象类可以有非抽象的方法,接口只有方法的定义没有实现,实现接口必须重写接口所有定义的方法,接口里头变量是static final的常量

4.StringBuffer跟StringBuider的区别

StringBuider非线程安全,执行速度快,单线程用这个类

5.sleep(), wait()的区别

sleep不释放同步锁,自动唤醒,需要try catch,  wait释放同步锁,需要notify来唤醒

sleep是线程的方法    wait是Object的方法

6.递归执行路径有几条。

主要是考察你对java线程的执行路径,其实递归并不是开启线程,虽然是重复调用方法本身,其实执行路径就一条。

7.LinkedList跟ArrayList的区别

一个链表结构,一个数组结构,LinkedList查找慢,插入快,ArrayList查找快,插入慢。

Android篇幅

1.手写一个线程安全的单例

public class SigleInstance {

private static SigleInstance instance;

public static SigleInstance getInstance() {

        if (instance == null) {

            syncronized(SigleInstance.class) {

                    if (instance == null) {

                            instance = new SingleInstance();

                    }

            }

       }

        return instance;

}

}

这个算是目前来说最有的单例,最好是能手写出来,面试官主要是考你为什么同步关键字要写在方法里头,写在那块,其实你只要答到点上就ok了,主要原因就是不用频繁加锁,因为频繁加锁会消耗性能,当instance new出来之后,可以不用在方法外加锁就直接返回实例,减少了一次加锁的操作。

2.Bitmap图像模式有哪几种,给出一张1080 * 1920的,ARGB 8888格式的占用内存是多大

ARGB 8888一个像素占用4个字节,一个字节8位,1080 * 1920 * 4 * 8

3.静态方法跟静态代码块有什么区别。

静态方法属于类,用类名.就能直接调用,静态代码块是类加载的时候就会调用的

4.Android进程有哪几种

前台进程,可见进程,服务进程,后台进程,空进程

5.Runnable , Callable, Feature三个的区别

Runnable 没有返回值,Callable有返回值,Feature一般配合Callable来使用,用于检测任务的状态,具有有是否执行完成,还可以做取消任务操作,再可以稍微撤下AsyncTask源码,因为有返回值,其实底层也是用Callable跟Feature来实现的, 显得你会懂一些源码,会是加分项

6.一个应用允许多个进程吗?

允许,最直接的直接说在功能清单文件里配置Service为一个独立进程,android:process就能配置

7.多进程会引起一些什么样的异常呢?

(1)静态成员和单例模式完全shixiao

  (2)线程同步机制完全失效

  (3)SharedPreferences的可靠性下降

  (4)Application会多次创建

8.HashMap的底层数据结构

  数组加链表

9.Serializable和Parcelable的区别

Serializable是java中序列化接口,使用开销很大,序列化和反序列化过程需要大量的I/0操作,Parcelable是Android中序列化的方式,用起来虽然麻烦一些,效率很高,Parcelable主要用在内存序列化上,如果说要序列化到存储设备中,建议大家使用Serializable,具体通过Object流来做序列化操作。

你可能感兴趣的:(安卓面试题一)