面向对象三大特征及表现。 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