Java面试题目及解答(持续更新)

时间:2023-01-12 12:53:01
  1. 面向对象三大特征及表现
    A:
    封装、继承、多态。
    封装:通过访问修饰符进行控制,可实现属性和方法不为外部随意访问和修改,可实现代码的复用。
    继承:子类继承父类并获得父类的属性和方法。
    多态:引用多态和方法的多态。父类对象可以志向子类的引用;子类方法可以override父类的方法。

  2. Java最基本的对象是什么?说出三个常用的方法
    A:
    Object对象。常用方法:toString(),hashCode(), equals(), getClass(), clone()。

  3. 说出几个线程安全的集合,非线程安全集合如何实现线程安全
    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