欢迎光临散文网 会员登陆 & 注册

10万字208道Java经典面试题总结(附答案)

2023-04-25 20:38 作者:编程小宇e  | 我要投稿

前言 

最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题,最近总结了Java常用的面试题,分享给大家,希望大家都能圆梦大厂,加油,我命由我不由天。

1、JDK 和 JRE 有什么区别?

JDK(Java Development Kit),Java开发工具包


JRE(Java Runtime Environment),Java运行环境

JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。


2、== 和 equals 的区别是什么?

对于基本类型,==比较的是值;

对于引用类型,==比较的是地址;

equals不能用于基本类型的比较;

如果没有重写equals,equals就相当于==;

如果重写了equals方法,equals比较的是对象的内容;

3、final 在 java 中有什么作用?

(1)用来修饰一个引用

 如果引用为基本数据类型,则该引用为常量,该值无法修改;

 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。

 如果引用时类的成员变量,则必须当场赋值,否则编译会报错。

(2)用来修饰一个方法

当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

(3)用来修饰类

当用final修改类时,该类成为最终类,无法被继承。

 比如常用的String类就是最终类。

4、java 中的 Math.round(-1.5) 等于多少?

Math提供了三个与取整有关的方法:ceil、floor、round

(1)ceil:向上取整;

Math.ceil(11.3) = 12;

Math.ceil(-11.3) = 11;

(2)floor:向下取整;

Math.floor(11.3) = 11;

Math.floor(-11.3) = -12;

(3)round:四舍五入;

加0.5然后向下取整。

Math.round(11.3) = 11;

Math.round(11.8) = 12;

Math.round(-11.3) = -11;

Math.round(-11.8) = -12;

5、String 属于基础的数据类型吗?

不属于。


八种基本数据类型:byte、short、char、int、long、double、float、boolean。


6、String str="i"与 String str=new String(“i”)一样吗?

String str="i"会将起分配到常量池中,常量池中没有重复的元素,如果常量池中存中i,就将i的地址赋给变量,如果没有就创建一个再赋给变量。

String str=new String(“i”)会将对象分配到堆中,即使内存一样,还是会重新创建一个新的对象。

7、如何将字符串反转?

将对象封装到stringBuilder中,调用reverse方法反转。

8、String 类的常用方法都有那些?

(1)常见String类的获取功能

length:获取字符串长度;

charAt(int index):获取指定索引位置的字符;

indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引;

substring(int start):从指定位置开始截取字符串,默认到末尾;

substring(int start,int end):从指定位置开始到指定位置结束截取字符串;


(2)常见String类的判断功能

equals(Object obj): 比较字符串的内容是否相同,区分大小写;

contains(String str): 判断字符串中是否包含传递进来的字符串;

startsWith(String str): 判断字符串是否以传递进来的字符串开头;

endsWith(String str): 判断字符串是否以传递进来的字符串结尾;

isEmpty(): 判断字符串的内容是否为空串"";


(3)常见String类的转换功能

byte[] getBytes(): 把字符串转换为字节数组;

char[] toCharArray(): 把字符串转换为字符数组;

String valueOf(char[] chs): 把字符数组转成字符串。valueOf可以将任意类型转为字符串;

toLowerCase(): 把字符串转成小写;

toUpperCase(): 把字符串转成大写;

concat(String str): 把字符串拼接;


(4)常见String类的其他常用功能

replace(char old,char new) 将指定字符进行互换

replace(String old,String new) 将指定字符串进行互换

trim() 去除两端空格

int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果连个字符串一摸一样 返回的就是0。


9、new String("a") + new String("b") 会创建几个对象?

对象1:new StringBuilder()

对象2:new String("a")

对象3:常量池中的"a"

对象4:new String("b")

对象5:常量池中的"b"


深入剖析:StringBuilder中的toString():

对象6:new String("ab")

强调一下,toString()的调用,在字符串常量池中,没有生成"ab"


附加题

String s1 = new String("1") + new String("1");//s1变量记录的地址为:new String

s1.intern();//在字符串常量池中生成"11"。如何理解:jdk6:创建了一个新的对象"11",也就有新的地址;jdk7:此时常量池中并没有创建"11",而是创建了一个指向堆空间中new String("11")的地址;

String s2 = "11";

System.out.println(s1 == s2);//jdk6:false;jdk7:true

10、如何将字符串反转?

添加到StringBuilder中,然后调用reverse()。


11、String 类的常用方法都有那些?

equals、length、contains、replace、split、hashcode、indexof、substring、trim、toUpperCase、toLowerCase、isEmpty等等。


12、普通类和抽象类有哪些区别?

抽象类不能被实例化;

抽象类可以有抽象方法,只需申明,无须实现;

有抽象方法的类一定是抽象类;

抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;

抽象方法不能声明为静态、不能被static、final修饰。


13、接口和抽象类有什么区别?

(1)接口

接口使用interface修饰;

接口不能实例化;

类可以实现多个接口;

①java8之前,接口中的方法都是抽象方法,省略了public abstract。②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现;

(2)抽象类

抽象类使用abstract修饰;

抽象类不能被实例化;

抽象类只能单继承;

抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体;

如果一个类继承了抽象类,①如果实现了所有的抽象方法,子类可以不是抽象类;②如果没有实现所有的抽象方法,子类仍然是抽象类。


14、java 中 IO 流分为几种?

(1)按流划分,可以分为输入流和输出流;

(2)按单位划分,可以分为字节流和字符流;

字节流:inputStream、outputStream;

字符流:reader、writer;


15、BIO、NIO、AIO 有什么区别?

(1)同步阻塞BIO

一个连接一个线程。

JDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判断服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话会等待请求结束后才继续执行。

(2)同步非阻塞NIO

NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,服务器瘫痪了。

JDK1.4开始支持NIO,适用于连接数目多且连接比较短的架构,比如聊天服务器,并发局限于应用中。

一个请求一个线程。

(3)异步非阻塞AIO

一个有效请求一个线程。

JDK1.7开始支持AIO,适用于连接数目多且连接比较长的结构,比如相册服务器,充分调用OS参与并发操作。

由于篇幅过长获取方式




10万字208道Java经典面试题总结(附答案)的评论 (共 条)

分享到微博请遵守国家法律