java面试题解答

一、Java 基础

1.JDK 和 JRE 有什么区别?

           jdk包含jre,jre是Java程序运行环境,jdk是Java开发工具包。

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

         ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同
        equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

  不对

4.final 在 java 中有什么作用?

     final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。

     特征:凡是引用final关键字的地方皆不可修改!

    (1)修饰类:表示该类不能被继承;

    (2)修饰方法:表示方法不能被重写;

    (3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

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

          -1

6.String 属于基础的数据类型吗?

      不属于

7.java 中操作字符串都有哪些类?它们之间有什么区别?

    string,stringbuffer,stringbuilder

    String是不可变的对象,对每次对String类型的改变时都会生成一个新的对象,

    StringBuffer和StringBuilder是可以改变对象的。

    对于操作效率:StringBuilder > StringBuffer > String

    对于线程安全:StringBuffer 是线程安全,可用于多线程;

    StringBuilder 是非线程安全,用于单线程

    不频繁的字符串操作使用 String。反之,StringBuffer 和 StringBuilder 都优于String

    所以,如果在项目中需要拼接字符串最好是采用StringBuffer 而非String.

8.String str="i"与 String str=new String(“i”)一样吗?

9.如何将字符串反转?

     使用 StringBuilder 或 StringBuffer 的 reverse 方法

10.String 类的常用方法都有那些?

11.抽象类必须要有抽象方法吗?

   不一定

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

  • 抽象类不能被实例化
  • 抽象类可以有抽象方法,抽象方法只需申明,无需实现
  • 含有抽象方法的类必须申明为抽象类
  • 抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
  • 抽象方法不能被声明为静态
  • 抽象方法不能用private修饰
  • 抽象方法不能用final修饰

13.抽象类能使用 final 修饰吗?

    final关键字不能用来抽象类和接口。

14.接口和抽象类有什么区别?

  1) 在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。
  2) 一个类只能继承一个直接父类,这个父类可以是具体的类也可是抽象类;但是一个类可以实现多个接口。

15.java 中 IO 流分为几种?

      分为俩种,一种是字节流,一种字符流,每个流包括输出输入俩种所以一共四个抽象类,分别是inputstream,outputstream,reader,whrite,

    1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;

    2.节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

读文本的时候用字符流,例如txt文件。读非文本文件的时候用字节流,例如mp3。理论上任何文件都能够用字节流读取,但当读取的是文本数据时,为了能还原成文本你必须再经过一个转换的工序,相对来说字符流就省了这个麻烦,可以有方法直接读取。
 

16.BIO、NIO、AIO 有什么区别?

    BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
    NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
    AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
 

    BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
    NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
    AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
 

17.Files的常用方法都有哪些?

    Files.exists() 检测文件路径是否存在
    Files.createFile()创建文件
    Files.createDirectory()创建文件夹
    Files.delete() 删除文件或者目录
    Files.copy() 复制文件
    Files.move() 移动文件
    Files.size()查看文件个数
    Files.read() 读取文件
    Files.write()写入文件
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值