• Java面试题02


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

            不一定。抽象类可以包含抽象方法,也可以不包含。抽象方法是没有实际实现的方法,需要 在子类中被具体实现。如果一个类中包含了至少一个抽象方法,那么这个类必须声明为抽象类。

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

            普通类可以被实例化,即可以创建对象。抽象类不能被直接实例化,只能被继承。普通类可 以有实例变量和方法,而抽象类可以包含抽象方法(可以有非抽象方法)。子类继承普通类时,不 需要实现父类的方法;但继承抽象类时,必须实现父类的抽象方法。

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

            是的,抽象类可以使用final修饰。在Java中,final修饰的类不能被继承,无法有子类。如果 一个抽象类被final修饰,它就不能再被其他类继承,相当于限定了其子类的数量为零。

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

    接口和抽象类都是用于实现多态性和定义规范。主要区别在于:

            一个类只能继承一个抽象类,但可以实现多个接口。

            抽象类可以包含抽象方法和非抽象方法,而接口只能包含抽象方法。

            抽象类可以有构造方法,接口不能有构造方法。

            接口中的字段默认为常量,而抽象类中可以有各种字段。

    5.java 中 IO 流分为几种?

            Java中的IO流可以分为两类:字节流(Byte Stream)和字符流(Character Stream)。每 一类又分为输入流和输出流,共计四种类型:字节输入流、字节输出流、字符输入流和字符输出 流。

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

            BIO(Blocking IO)是同步阻塞IO,每个连接都需要一个独立的线程处理,适合连接数较少 的情况;NIO(New IO,Non-Blocking IO)是同步非阻塞IO,通过单一线程管理多个连接,适合 高并发场景;AIO(Asynchronous IO)是异步非阻塞IO,适用于连接数较多且数据传输较大的情 况,通过异步事件通知方式工作。

    在Java中,BIO、NIO和AIO是三种不同的输入输出(I/O)模型,它们在处理数据流的方式上有所不同。

    1. BIO (Blocking I/O)

      • 在BIO模型中,数据读写操作是阻塞的。这意味着在等待数据准备好进行读写操作时,线程会被阻塞。
      • 优点:实现简单。
      • 缺点:在高并发情况下,BIO的效率会降低,因为每个连接都需要一个线程进行处理,当连接数增加时,线程数也会大量增加,这将消耗大量的系统资源。
    2. NIO (Non-Blocking I/O)

      • 在NIO模型中,数据读写操作是非阻塞的。这意味着在等待数据准备好进行读写操作时,线程不会阻塞,可以继续执行其他任务。
      • 优点:可以更有效地利用系统资源,在高并发情况下表现较好。
      • 缺点:实现相对复杂,且对开发者的要求较高。此外,NIO并不能完全解决阻塞问题,它只是将阻塞点从数据读写操作转移到了Channel的Selector上。
    3. AIO (Asynchronous I/O)

      • 在AIO模型中,数据读写操作也是非阻塞的,但与NIO不同的是,AIO引入了Future的概念,当一个异步操作启动后,不需要等待它完成,可以继续执行其他任务。当操作完成后,可以通过Future获取操作结果。
      • 优点:可以更有效地利用系统资源,同时代码实现相对简单。
      • 缺点:虽然AIO在某些场景下表现优秀,但它并不是在所有场景下都表现得比NIO好,特别是在文件I/O方面。此外,AIO的普及度相对较低,一些旧的Java版本可能不支持。

    在选择使用哪种I/O模型时,需要根据具体的应用场景和需求进行考虑。对于一些简单的、低并发的应用,使用BIO可能是一个不错的选择。对于高并发的场景,可能需要考虑使用NIO或AIO。同时,也要注意不同I/O模型的实现难度和适用场景。

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

            Files类是java.nio.file包下用于操作文件和目录的工具类。其常用方法包括: readAllLines (读取所有行)、 write (写入数据到文件)、 createDirectory (创建目 录)、 copy (复制文件或目录)、 move (移动文件或目录)、 delete (删除文件或目录)、 isDirectory (判断是否是目录)、 isRegularFile (判断是否是普通文件)等。

  • 相关阅读:
    设计模式-组合模式-笔记
    Java泛型方法与普通成员方法以及案例说明(五)
    华为云arm架构的linux系统中通过docker部署python环境
    MapReduce读取定长文件入库Hive表Orc格式
    计算机算法与分析--算法实现题1
    java线程和go协程
    [Java SDK] [多线程] Java中线程的定制化通信
    大模型日报|今日必读的7篇大模型论文
    [pwn基础]动态链接原理
    【医学大模型】Text2MDT :从医学指南中,构建医学决策树
  • 原文地址:https://blog.csdn.net/g877835148/article/details/134258829