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 用来标明一个成员函数可能抛出的各种”异常”。
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 集合类中时会出现问题。
StringBulider 也表示内容可以修改的字符串,但是其线程是不安全的,运行效率高。
说明:
所有的面试题目都不是一成不变的,特别是像一线大厂,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。最后给大家分享 Spring 系列的学习笔记和面试题,包含 spring 面试题、spring cloud 面试题、spring boot 面试题、spring 教程笔记、spring boot 教程笔记、最新阿里巴巴开发手册(63 页 PDF 总结)、2022 年 Java 面试手册。一共整理了 1184 页 PDF 文档。
【需要的小伙伴---> 我的笔记 <--- 祝大家更上一层楼!!!】
评论