• java经典面试题总结


    1.请简述Java的继承,重写和多态的概念和运用
    继承是一种Java中重要的面向对象编程方式,它允许一个类从另一个类继承某些属性和方法,在这种关系下,子类可以重写父类的方法,从而实现不同的行为。
    多态是继承实现的一种关键概念,它允许一个对象以多种形式实现某个方法,通过这种方式,代码可以更加灵活,并提高代码的可扩展性和可重用性。

    2.Java中的数组和列表有什么区别?
    数组:数组长度是固定的,旨在存储具有相同类型的数据,而列表用于存储大量的数据,可以存储任何类型的数据。
    列表:具有可变长度,可以在运行时动态添加或删除元素。

    3.什么是Java中常见的运行时异常?
    常见的Java运行时异常包括NullPointerException(空指针异常)、ArithmeticException(算术异常)、ArrayIndexOutOfBoundsException(数组越界异常),这些异常通常会在程序运行时抛出,导致程序崩溃或者运行不正确的结果。

    4.请简述Java的线程和同步机制。
    线程:Java程序的执行单元,允许程序并行执行。
    同步机制:一种用于协调多个线程之间访问共享数据的方法,它可以避免资源冲突和数据竞争,确保线程之间的正确交互。

    5.线程、进程、多线程、线程池
    线程:是指进程中的一个单独的执行路径。一个进程可以包含多个线程,每个线程都可以并行执行不同的任务。

    多线程:是指在同一时间内运行多个线程来完成多个任务。多线程提高程序的性能和响应速度。但是增加了代码的复杂性,同时需要考虑线程安全和死锁等问题。

    线程池:是一组预先创建的线程,它们可以被重复使用来执行多个任务。使用线程池可以避免在创建和销毁线程时产生额外的开销,从而提高程序的性能。Java 中提供了 Executor 框架来实现线程池。

    6.请举例说明Java中的面向对象编程(OOP)原则。
    面向对象编程原则包括封装、继承和多态
    封装:指将数据和方法组合成一个类中,以允许访问控制;
    继承:允许类从另一个类继承属性和方法;
    多态:允许一个对象用不同形式表示某个方法的实现。

    7.讲一下你对Java中反射的理解和应用场景。
    反射:Java中一种常用的高级特性,它允许在运行时动态获取类的信息,并且可以在运行时动态调用类的方法和修改类的属性。
    Java中的反射被广泛应用于框架和插件的开发中。

    8.如何在Java中使用泛型以及它们的优点和缺点?
    泛型是Java中一种强类型
    优点:约束和类型安全的编程方式,它可以在运行时检查数据类型,抑制类型转换异常,并提高代码的可读性和重用性。
    缺点:可能导致运行时效率下降,会导致代码复杂性增加,限制范围窄
    Java中的泛型被广泛应用于数据结构、集合类、IO操作和注解等领域。

    9.Java 8中新特性包括哪些,它们有什么优点?
    Java 8中引入了一些新特性,包括Lambda表达式、方法引用、默认方法、Stream API、时间日期API等。
    这些新特性使得Java更加现代化、简洁和灵活,并且可以提高代码的可读性、可维护性和可扩展性。

    10.如何在Java中处理大文件?请举例说明。
    在处理大文件时,Java可以使用多种技术以提高性能和减少内存占用。其中,常用的技术包括分块处理、基于内存映射的IO、基于缓存的IO等。这些技术可以通过Java中的File类、BufferedReader、BufferedWriter、FileChannel等API实现。

    11.Java中多态的实现原理
    Java中的多态是面向对象编程的一个重要特性,它允许一个类的对象表现出多种形态。多态的实现主要依赖于继承和接口,通过方法重写和接口实现来实现。

    实现原理: 多态的实现原理主要依赖于Java的动态方法分派机制。当一个子类重写了父类的方法时,Java运行时系统会根据对象的实际类型来决定调用哪个方法。这个过程是在运行时进行的,而不是在编译时。这使得我们可以通过父类引用来调用子类的方法,实现多态的特性。

    12.JVM中的垃圾回收器是如何工作的?
    垃圾回收器是Java虚拟机的一种组成部分,它负责自动回收不再使用的对象,并释放内存空间。
    垃圾回收器通常采用分代回收机制,即把Java对象分为不同的代,按照不同的策略进行自动回收。

    13、Java 中 IO 流的分类
    Java中的流可以按照数据的类型和传输的方向来分类,分别由四个抽象类来表示

    按照数据的类型,流分为字节流和字符流:
    字节流:InputStream,OutputStream。字节流按照8位传输,可以处理任何类型的数据,包括二进制数据。
    字符流: Reader,Writer。字符流按照16位传输,只能处理字符或者字符串,可以直接处理Unicode字符。

    按照传输的方向,流分为输入流和输出流:
    输入流:InputStream,Reader。输入流用于从数据源读取数据到内存中。
    输出流:OutputStream,Writer。输出流用于从内存中写出数据到目标位置。

    14、字节流和字符流的区别
    字节流和字符流的区别主要在于处理数据的类型不同:
    字节流可以处理任何类型的数据,包括二进制数据,而字符流只能处理字符或者字符串;
    字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
    字节流在读写文本数据时,需要进行编码和解码的转换,而字符流则不需要。

    15、JDK 和 JRE 有什么区别?
    JDK:Java开发工具包
    JRE:Java运行环境

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

    16.final 在 java 中有什么作用?
    (1)用来修饰一个引用
    如果引用为基本数据类型,则该引用为常量,该值无法修改;
    如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
    如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
    (2)用来修饰一个方法
    当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
    (3)用来修饰类
    当用final修改类时,该类成为最终类,无法被继承。

    17.八种基本数据类型
    1、整型
    byte 、short 、int 、long
    2、浮点型
    float 、 double
    3、字符型
    char
    4、布尔型
    boolean

    18、普通类和抽象类有哪些区别?
    抽象类不能被实例化;
    抽象类可以有抽象方法,只需申明,无须实现;
    有抽象方法的类一定是抽象类;
    抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;
    抽象方法不能声明为静态、不能被static、final修饰。

    19、接口和抽象类有什么区别?
    (1)接口
    接口使用interface修饰;
    接口不能实例化;
    类可以实现多个接口;

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

    (2)抽象类
    抽象类使用abstract修饰;
    抽象类不能被实例化;
    抽象类只能单继承;
    抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体;
    如果一个类继承了抽象类,①如果实现了所有的抽象方法,子类可以不是抽象类;②如果没有实现所有的抽象方法,子类仍然是抽象类。

    20、throw 和 throws 的区别?
    (1)throw
    作用在方法内,表示抛出具体异常,由方法体内的语句处理;
    一定抛出了异常;
    (2)throws
    作用在方法的声明上,表示抛出异常,由调用者来进行异常处理;
    可能出现异常,不一定会发生异常;

  • 相关阅读:
    wordpress 上传附件中文文件名乱码解决办法(for Windows)
    【C/C++】C编程技巧
    docker alpine:3.16 root权限安装Anaconda3-2020.07-Linux-x86_64和jdk
    【语义分割 01】Open MMLab介绍
    下载chromedrive,使用自动化
    Mysql集群及高可用-多主复制(高可用)与Mysql路由(读写分离)8
    2022腾讯数字生态大会:腾讯云HiFlow,零代码自动化工作流助手
    【pulsar学习】kafka存在的问题与pulsar应用场景
    基于JavaWeb的电影订票及评论网站设计与实现
    百人研发团队百亿销售规模的技术架构实践分享
  • 原文地址:https://blog.csdn.net/m0_61689418/article/details/133958722