android面试题总结

92 阅读3分钟

1.多态的了解

多态存在有三个前提

继承,重写,父类引用指向子类对象。

多态成员访问的特点:

a.成员变量

编译看左边(父类),运行看左边(父类)

b.成员方法

编译看左边(父类),运行看右边(子类)。动态绑定

c.静态方法

编译看左边(父类),运行看左边(父类)。

(静态和类相关,算不上重写,所以,访问还是左边的)

只有非静态的成员方法,编译看左边,运行看右边

2.什么是内部类,内部类的作用

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

内部类的主要作用如下:

a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

b. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

c. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

3.抽象类的意义

抽象类体现的是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展,改造,但子类总体上会大致保留抽象类的行为方式

4.接口的意义

接口体现的是一种规范

5.内部类的设计意图

一个类可以访问另一个类的私有成员(封装性)

让Java可以实现多继承

6.静态内部类

如果内部类不会引用到外部类的东西的话,强烈建议使用静态内部类,因为这样更节省资源,减少内部类指向外部类的引用

7.Integer转化为String的原理

d:使用Integer.ValueOf方法

Integer.valueOf方法

8.匿名内部类

方便编写程序而设计的一个机制,有时候内部类只需要创建一个它的对象,以后不会在使用它,这个时候就使用匿名内部类。而且省去了起名字的麻烦

10.静态代理和动态代理区别

静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。

动态代理类:在程序运行时,运用反射机制动态创建而成。

静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。

静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。

动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。

还有一种动态代理CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。

11.依赖注入 ButterKnife和Dagger2

12.泛型 Java泛型的作用和原理

13.String为什么设计成不可变的 String为什么设计成不可变 14.equals和hashcode方法 equals和hashCode方法

15.Object中的方法

wait,notify,hashcode,clone,equals,finalize,tostring,getclass

16.clone方法 Clone方法

17.iterator和listiterator区别 iterator和listitertor区别 18.java集合

Java 集合系列目录(Category)

19.concurrenthashmap

20.Collections.synchronizedMap()

21.如何控制某个方法允许并发访问线程的个数,使用信号量

22.什么导致线程阻塞 什么导致线程阻塞

23.Java如何正确停止一个线程 如何正确停止一个线程

24.Synchronized和Volatile的区别

25.Synchronized和Lock区别