面向对象三大特征及表现。
A:
封装、继承、多态。
封装:通过访问修饰符进行控制,可实现属性和方法不为外部随意访问和修改,可实现代码的复用。
继承:子类继承父类并获得父类的属性和方法。
多态:引用多态和方法的多态。父类对象可以志向子类的引用;子类方法可以override父类的方法。Java最基本的对象是什么?说出三个常用的方法。
A:
Object对象。常用方法:toString(),hashCode(), equals(), getClass(), clone()。说出几个线程安全的集合,非线程安全集合如何实现线程安全?
A:
Vector、Stack、Hashtable、Enumeration(VSHE),除此之外,都不是线程安全的。
线程安全的类一般都是JDK1.1及以前的古老类,效率均较低,不推荐使用。
Vector:List的实现类,基本与ArrayList相同,由于多了同步化机制,是线程安全的,效率低。
Stack:堆栈类,后进先出。
Hashtable:Map的实现类,基本与HashMap相同,由于多了同步化机制,是线程安全的,效率低。该类的命名并未遵循驼峰命名法则,可见是个极其古老的类。
Enumeration:枚举类,相当于迭代器。
一般通过Collections工具类的静态方法synchronizedXxx()包装非线程安全集合类,实现同步控制。
// 把Collection包装成线程安全
Collection col = Collections.synchronizedCollection(new ArrayList<>());
// 把List包装成线程安全
List list = Collections.synchronizedList(new ArrayList<>());
// 把Set包装成线程安全
Set set = Collections.synchronizedSet(new HashSet<>());
// 把Map包装成线程安全
Map map = Collections.synchronizedMap(new HashMap<>());
4 . 抽象类和接口的区别?
A:
①从定义格式来说,抽象类使用abstract修饰;接口使用interface修饰。抽象类中可以定义普通方法;接口中只能定义抽象方法(在JDK1.8之后可以定义静态方法和默认方法)。
②从继承关系来说,抽象类是类,只能单继承;而接口可以多实现。
③从设计思路来说,当类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,是对一系列看上去不同,但是本质上相同的具体概念的抽象。因而抽象类体现的是继承,子类和父类本质是同一个概念,关系可以理解为“is a”;
而接口的设计目的是遵守的契约。
详见:http://www.cnblogs.com/azai/archive/2009/11/10/1599584.html
5. 重写和重载
A:
重写和重载没有任何关系!
重写即override,发生在子类和父类当中。
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
重载overload
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
6. 进程和线程
7. 线程的创建方式
8. 线程状态及各自转换关系
9. 如何提高数据库的查询效率?(索引分区、分页)
10. 数据库搜索引擎
11. 布隆过滤器
12. hashmap的实现,冲突,初始容量和加载因子?怎么扩容?
13. AOP动态代理和静态代理的区别?动态代理怎么实现的,如何得到被代理类的所有方法?
部分问题来源:http://blog.csdn.net/qq_25827845/article/details/72758334