Java后端面试必问:十八道面试题及答案最新整理(速看速藏)

在本篇文章里小编给大家整理了一篇关于Java后端面试题最新整理内容,需要的朋友们可以参考下。

我们学习java知识,除了要做基础的程序运行外,不可避免的要在面试中遇到一些理论的考察。有些小伙伴程序做的不错,但是理论上面有所欠缺。这里小编整理了一些常见的后端面试题,希望能对小伙伴们有所帮助,下面一起看看吧。

一、八种基本数据类型的大小,以及他们的封装类。

byte(Byte) 1 ,short(Short) 2 ,int(Integer) 4 ,long(Long) 8 ,float(Float) 4 ,double(Double)8,boolean(Boolean),char(Character)2

二、Switch能否用string做参数?

switch语句中的变量类型可以使byte,short,int,char。从jdk1.7后可以使用String类型,是通过switch中的String.hashcode将String转换成int进行判断的。

三、Java中的异常处理机制和简单原理和应用

JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

四、equals与==的区别。

==操作符是用来比较两个变量的值是否相等,即就是比较变量在内存中的存储地址是否相同,equals()方法时String类从Object类中继承的,被用来检测两个对象的内容是否相同。

五、Java语言如何进行异常处理,throws,throw,try catch finally代表什么意义,try块中可以抛出异常吗?

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个

方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

用try来指定一块预防所有”异常”的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的”异常”的类型。

throw语句用来明确地抛出一个”异常”。

throws用来标明一个成员函数可能抛出的各种”异常”。

扫描二维码关注公众号,回复: 14377540 查看本文章

Finally为确保一段代码不管发生什么”异常”都被执行一段代码。

可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,”异常”的框架就放到堆栈上面,直到所有的try语句都完成。
如果下一级的try语句没有对某种”异常”进行处理,堆栈就会展开,直到遇到有处理这种”异常”的try语句。

六、 常见的运行时异常

系统异常是RuntimeException的子类,常见的系统异常有:

ArrayIndexOutOfBoundsException - 数组越界访问

ClassCastException - 类型转换异常

NullPointerException - 试图访问一空对象的变量、方法或空数组的元素

IllegalArgumentException - 方法的参数无效

NoClassDefFoundException - JAVA运行时系统找不到所引用的类

集合:

七、Collection框架的结构

集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等。

集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等.

集合框架类似编程中经常用到的工具类,使得编码这专注于业务层的实现,不需要从底层实现相关细节—“数据结构的封装”和”典型算法的实现”。

八、String s=new String(‘xyz');创建了几个object对象?

会创建一个String类型的变量s。在类加载到此处之前没有出现“xyz”字面量的话,加载此处会创建一个对应“xyz”的String常量对象。在符合规范的JVM上,执行到此处new关键字会创建一个String对象。

九、 Object有哪些公用方法?

1、clone()创建斌返回此对象的副本

2、equals()判断

3、getclass()返回object的运行类

4、hashcode()返回对象的哈希码值

5、notify()唤醒正在等待对象监听器的单个进程

6、notifyAll()唤醒正在等待对象监听器的所有进程

7、wait()导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。

8、toString()返回此对象的字符串表示形式

9、finalize()当垃圾收集确定不需要该对象时,垃圾回收器调用该方法

十、java多态的实现

接口实现,继承父类进行方法重写,

同一个类中进行方法重载。

十一、 try catch finally,try里有return,finally还执行么?

1、finally语句总会执行

2、如果try、catch中有return语句,finally中没有return,那么在finally中修改除包装类型和静态变量、全局变量以外的数据都不会对try、catch中返回的变量有任何的影响(包装类型、静态变量会改变、全局变量)

3、尽量不要在finally中使用return语句,如果使用的话,会忽略try、catch中的返回语句,也会忽略try、catch中的异常,屏蔽了错误的发生。

4、finally中避免再次抛出异常,一旦finally中发生异常,代码执行将会抛出finally中的异常信息,try、catch中的异常将被忽略

十二、 Set里面的元素不能重复,用什么方法区分重复与否?

Set里的元素是唯一不能重复的,元素是否重复使用equals()方法进行判断。

equals()方法和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是两个分离的对象的内容和类型相匹配的话,返回真值。

十三、迭代器Iterator

Iterator提供了统一遍历操作集合元素的统一接口,Collection接口实现Iterator接口。每个集合都通过实现Iterator接口中的iterator()方法返回实例,然后对元素进行迭代操作,但是在迭代元素的时候不能使用集合的方法删除元素,否则会抛出异常,可以使用Iterator接口中的remove()方法进行删除。

三十、 快速失败(fail-fast)和安全失败(fail-safe)的区别。

Iterator的安全失败是基于对底层集合做拷贝,因此它不受源集合修改的影响。util包下的所有集合类都是快速失败的,util.concurren包下面的所有类都是安全失败的。

十四、Java的四种引用,强弱软虚,用到的场景。

强引用:垃圾回收器不会回收

软引用:如果内存空间足够,垃圾回收器就不会进行回收,如果内存空间不足,垃圾回收器就会进行回收

弱引用:一旦发现了只有弱引用的对象,垃圾回收器就会进行回收。

虚引用:如果发现该对象还具有虚引用,就会在回收该对象之前,吧这个虚引用加入到与之关联的引用队列中。

十五、静态变量和实例变量的区别。

静态变量前要加上关键字static,实例变量则不会。

实例变量是属于某个对象的属性,必须创建了实例对象,其中的实例变量才会分配空间,才能使用这个实例变量。静态变量不属于任何的实例对象,而是属于类,也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,就会被分配空间。总之就是,静态变量不需要创建任何的对象就可以直接使用,而实例变量需要先创建实例对象才能被使用。

十六、 Overload和Override的区别:

重载Overload表示的是同一个类中可以有多个相同名称的方法,但这些方法的参数列表不同,即就是参数参数或参数类型不同。重载时返回值当然可以不一样,但是如果参数列表完全一致时,不能通过返回类型不一致而实现重载,这是不可以的。

重写Override表示子类中的方法可以与父类中的方法名称和参数完全相同,通过子类创建的对象来调用这个方法时,将调用子类中定义的方法,即就是子类中的该方法将父类的该方法覆盖了。子类覆盖父类方法时只能抛比父类更少或者更小的异常。重写的方法其返回必须和被覆盖的方法返回一致。

十七、抽象类和接口的区别。

抽象类可以有默认的方法进行实现,可以有构造器,可以有main方法进行运行,可以直接在该类中添加实现的方法接口没有默认的方法进行实现,没有构造器,不可以使用main方法进行运行,在接口中添加方法时需要在具体实现的类中添加方法。

十八、String、StringBuffer与StringBuilder的区别。

String表示内容不可修改的字符串,StringBuffer表示内容可以修改的字符串,String覆盖了equals()方法和hashcode()方法,而StringBuffer没有覆盖两个方法,,所以StringBuffer对象存储到java集合类中时会出现问题。

题库分享

1、前端后端面试题库            推荐:★★★★★

地址:前端面试题库

 2、前端技术导航大全             推荐:★★★★★

地址:前端技术导航大全

3、开发者颜色值转换工具             推荐:★★★★★

地址 :开发者颜色值转换工具

2、前端边框阴影在线工具       推荐:★★★★★

地址:前端边框阴影在线工具 

猜你喜欢

转载自blog.csdn.net/weixin_42981560/article/details/125798897