1、115个Java面试题和答案(2) 115个Java面试题和答案 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。 Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。 Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 ___in方法的话是可以被调用的。 也可以参考JDK8中抽象。

2、类和接口的区别 10.什么是值传递和引用传递? 对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。 对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。 Java线程 11.进程和线程的区别是什么? 进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。 12.创建线程有几种不同的方式?你喜欢哪一种? ___? 有三种方式可以用来创建线程: 继承Thread类 实现Runnable接口 应用程序可以使用Executor框架来创建线程池 实现Ru。

3、nnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。 13.概括的解释下线程的几种可用状态。 线程在执行过程中,可以处于下面几种状态: 就绪(Runnable):线程准备运行,不一定立马就能开始执行。 运行中(Running):进程正在执行线程的代码。 等待中(Waiting):线程处于阻塞的状态,等待外部的处理结束。 睡眠中(Sleeping):线程被强制睡眠。 I/O阻塞(Blocked on I/O):等待I/O操作完成。 同步阻塞(B。

4、locked on Synchronization):等待获取锁。 死亡(Dead):线程完成了执行。 14.同步方法和同步代码块的区别是什么? 在Java语言中,每一个对象有一把锁。线程可以使用synchronized关键字来获取对象上的锁。synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。 15.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步? 监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。 1。

5、6.什么是死锁(deadlock)? 两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。 17.如何确保N个线程可以访问N个资源同时又不导致死锁? 使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。 Java ___类 18.Java ___类框架的基本接口有哪些? Java ___类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java ___类里面最基本的接口有: Collection:代表一组对象,每一个对象都。

6、是它的子元素。 Set:不包含重复元素的Collection。 List:有顺序的collection,并且可以包含重复元素。 Map:可以把键(key)映射到值(value)的对象,键不能重复。 19. ___ ___类没有实现Cloneable和Serializable接口? ___类接口指定了一组叫做元素的对象。 ___类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的 ___类允许重复的键,有些不允许。 20.什么是迭代器(Iterator)? Iterator接口提供了很多对 ___元素进行迭代的方法。每一个 ___类都包含了可以返回迭代器实例的 迭代方法。。

7、迭代器可以在迭代的过程中删除底层 ___的元素。 克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由 ___类的具体实现来决定如何被克隆或者是序列化。 21.Iterator和ListIterator的区别是什么? 下面列出了他们的区别: Iterator可用来遍历Set和List ___,但是ListIterator只能用来遍历List。 Iterator对 ___只能是前向遍历,ListIterator既可以前向也可以后向。 ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个。

8、和后一个元素的索引,等等。 22.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? Iterator的安全失败是基于对底层 ___做拷贝,因此,它不受源 ___上修改的影响。java.util包下面的所有的 ___类都是快速失败的,而 java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出 ConcurrentModificationEx ___ption异常,而安全失败的迭代器永远不会抛出这样的异常。 23.Java中的HashMap的工作原理是什么? Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash函数,它使用hashCode() 和equals()方法来向 ___/从 ___添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在 ___中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。 24.hashCode()和equals()方法的重要性体现在什么地方? 模板,内容仅供参考。