【JavaEE】公司面试题目-Java基础

  1. Java基础部分

 

1.1 Java中的方法覆盖(Overwrite)和章程重载(Overloading)是怎么着看头?

重载Overload表示同一个类中可以有两个名称相同的艺术,但这几个主意的参数列表各不相同(即参数个数或项目不同)。

重写Override表示子类中的方法可以与父类的某个方法的名目和参数完全相同,通过子类创设的实例对象调用这么些主意时,将调用子类中的定义方法,这一定于把父类中定义的不行完全相同的章程给覆盖了,这也是面向对象编程的多态性的一种表现。

 

1.2 接口和抽象类的区分是哪些?

抽象类:含有abstract修饰的类即为抽象类,抽象类无法创设实例对象。含有abstract方法的类必须定义为抽象类,抽象类中的方法不必是纸上谈兵的。抽象类中定义抽象方法必须在切实子类中落实,所以,不可能有抽象构造方法或抽象静态方法。假诺子类没有兑现抽象父类中的所有抽象方法,那么子类也不可以不定义为abstract类型。

接口:可以说成是抽象类的一种特例,接口中的所有办法都必须是空洞的。接口中的方法定义默认为public
abstract类型,接口中的成员变量类型默认为public static final。

下边比较一下两岸的语法区别

  1. 抽象类可以有构造方法,接口中不可能有构造方法。

  2. 抽象类中得以有普普通通成员变量,接口中并未普通成员变量

3.
抽象类中得以蕴涵非抽象的通常方法,接口中的所有办法必须都是空泛的,不可能有非抽象的平时方法。

4.
抽象类中的抽象方法的走访类型可以使public、protected和默认类型,但接口中的抽象方法只可以是public类型的,并且默认修饰即为public
abstract类型。

  1. 抽象类中可以蕴涵静态方法,接口中不可以包含静态方法

6.
抽象类和接口中都可以分包静态成员变量,抽象类中的静态成员变量的造访类型可以随意,但接口中定义的变量只好是public
static final类型,并且默认即为public static final类型。

  1. 一个类可以兑现多个接口,但只好继续一个抽象类。

 

1.3 创制线程有三种不通的办法?

l 自定义类继承Thread类情势

l 自定义类实现Runnable接口模式

 

1.4 Java集合框架的骨干接口有怎么样?

Collection接口

Ø List接口

Ø Set接口

Map接口

 

1.5 BlockingQueue是什么?

1.BlockingQueue:协理五个附加操作的
Queue,这五个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用。

2.BlockingQueue 不接受 null 元素。

3.BlockingQueue 方但是限制容量的。

4.BlockingQueue
贯彻是线程安全的。Queue不是线程安全的。因而得以将Blockingqueue用于用于生产者-消费者情势。

对此BlockingQueue队列而然,假如BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被提示,同样,如若BlockingQueue是满的,任何试图往里存东西的操作也会被堵嘴进入等待境况,直到BlockingQueue里有空中才会被唤醒继续操作。

 

1.6 Java中的三种非凡类型是怎么着?

Error:称为错误,由java虚拟机生成并抛出,包括动态链接失利,虚拟机错误等,程序对其不做拍卖。

Exception:所有特别类的父类,其子类对应了各类各个的或是出现的非凡事件,一般需要用户呈现的扬言或捕获。

Runtime
Exception:一类特殊的不胜,如被0除、数组下标超范围等,其暴发相比频繁,处理麻烦,假设展现的扬言或捕获将会对程序可读性和运转效能影响很大。因而由系统自动检测并将它们交给缺省的要命处理程序(用户可不用对其拍卖)。

 

1.7 Final,finallyfinalize的区别?

final用于讲明属性,方法和类,分别表示属性不可变,方法不可掩盖,类不可连续。内部类要访问片段变量,局部变量必须定义成final类型。

finally是充足处理语句结构的一有些,表示总是执行。

finalize是Object类的一个方法,在废品收集器执行的时候会调用被回收对象的此办法,可以覆盖此措施提升垃圾收集时的别样资源回收,例如关闭文件等。JVM不保险此方法总被调用。

 

1.8 Java中什么贯彻体系化,有什么意思?

连串化就是一种用来拍卖对象流的体制,所谓目的流也就是将目的的情节开展流化。能够对流化后的靶子举办读写操作,也可将流化后的对象传输于网络之间。体系化是为着化解对象流读写操作时或者引发的问题(假设不开展系列化可能会存在数量乱序的题材)。

要促成类别化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被体系化的,然后选择一个输出流来构造一个目的输出流并通过writeObject(Object)方法就足以将实现目的写出(即保存其处境);如若急需反系列化则足以用一个输入流建立目标输入流,然后通过readObject方法从流中读取对象。体系化除了可以落实目的的持久化之外,还是可以用于对象的深度克隆。

 

1.9 都用过什么样设计情势

单例设计格局

厂子设计格局

模板设计格局

装潢设计形式

代理设计情势

适配器设计格局

 

1.10 写一个单例情势出来

饿汉形式

public class Single {

//私有本类中的构造函数

private Single(){}

//创设本类对象

private static Single s = new Single();

//对外提供获取本来对象方法

public static Single getInstance(){

return s;

}

}

留神问题:

  由于外界无法创立Single对象,没有目的,这就不可能调用getInstance方法,这时需要将getInstance方法静态化,这样外围就足以经过类名直接调用该办法。

 

懒汉情势

public class Single

{

//私有构造函数

private Single(){}

//在本类中创建本类对象

private static Single instance = null;

//对外提供静态访问方法,获取本类实例对象

public static Single getInstance(){  

if(instance == null )  // 这里会无线程安全问题

{

instance = new Single();

}

return instance;

}

}

class SingleDemo

{

public static void main(String[] args)

{

//获取Single类的实例对象s

Single s = Single.getInstance();

//获取Single类的实例对象s2

Single s2 = Single.getInstance();

System.out.println(s==s2); //true

}

}

相关文章