【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类型。

5. 抽象类中可以包含静态方法,接口中不能包含静态方法

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

7. 一个类可以实现多个接口,但只能继承一个抽象类。

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

}

}

时间: 2024-11-02 11:47:53

【JavaEE】企业面试问题-Java基础的相关文章

JavaEE企业面试问题之Java基础部分

1. Java基础部分 1.1 Java中的方法覆盖(Override)和方法重载(Overload)是什么意思? 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现. 1.2 接口和抽象类的区别是什么? 抽

[Java面试二]Java基础知识精华部分.

一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名为Java: Java的三种技术架构: JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发: JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础: JAVA

面试可能遇到java基础知识

1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么. - 继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类.基类):得到继承信息的类被称为子类(派生类).继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的<Java与模式>或<设计

java面试之java 基础

一.数据类型基本类型包装类型缓存池 二.String概览不可变的好处String, StringBuffer and StringBuilderString Poolnew String("abc") 三.运算参数传递float 与 double隐式类型转换switch 四.关键字finalstatic 五.Object 通用方法概览equals()hashCode()toString()clone() 六.继承访问权限抽象类与接口super重写与重载 七.反射 八.异常 九.泛型 十

Java面试宝典——Java基础部分(一)

一.一个".java"源文件是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件相一致. 二.Java有没有goto?     java中的保留字,现在没有在java中使用. 三.说说&和&&的区别?     &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果

面试:Java基础

Java常考面试题,整理自牛客网和程序员面试宝典,有的题不太好. 1. 什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如 处理器.堆栈 .寄存器等,还具有相应的指令系统. Java被设计成允许应用程序可以运行在任意的平台,而不需要程

2015笔试面试经验——java基础

1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 答案:在Java语言中Swith可以使用参数类型有:Only convertible int values, strings or enum variables are permitted 可以自动转换为整型的(byte,short,int),String类型,枚举类型. Java中不能做为Switch参数的有boolean,float,double,long(不能直接转换为int啊). 3. equ

Java程序员笔试面试之Java基础

1.==与equals与hashcode的区别作用 ①==是用来比较数值是否相等,也可以用来比较引用是否相等,也就是比较是否指向同一个对象. ②equals方法是Object提供的方法,因此每一个对象都有equals方法,他的实现也是通过==运算符实现的,所以在没有覆盖equals()方法的前提下,equals方法跟==是完全一样的 ③相比==运算符equals方法特殊之处就是他可以被覆盖,例如String,他可以比较2个独立对象的内容是否相等,例如: String s1=new String(

Java程序员笔试面试之java基础知识

1.finalize()方法的使用 2.Java程序初始化的顺序 3.Java中变量的类型 4.构造函数 5.为什么java中有些interface没有任何方法 6.java中的反射机制是什么 7.java中创建对象的方式有多少种 8.多态实现的机制是什么,编译时多态,运行时多态, 9.overload和override区别,以及各自的注意事项 10.abstract class和interface有什么区别