首页 > 图灵资讯 > 技术篇>正文

Java经典面试题总结

2023-04-25 11:05:13

  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参与并发操作。

上一篇 如何自动生成 API 接口文档 - 一份详细指南
下一篇 SQL基础教程

文章素材均来源于网络,如有侵权,请联系管理员删除。