Java SE 面试题



Java SE 面试题

基本知识

  1. 请简要介绍 Java SE。

    Java SE (Java Standard Edition) 是 Java 平台的基础版本,提供 Java 开发所需的所有核心功能。它包括 Java 语言规范、Java 虚拟机规范和 Java 类库。

  2. 请解释 Java 的垃圾回收机制。

    Java 的垃圾回收机制是自动内存管理的一部分,用于在堆内存中自动回收不再使用的对象。垃圾收集器会找出不再使用的对象,释放它们占用的内存,以便其他新对象使用。

  3. 请解释 Java 中的访问修饰符。

    Java 有四种访问修饰符:public、private、protected 和默认(无修饰符)。这些修饰符用于限制类、方法和变量的访问权限。

面向对象

  1. 请解释封装、继承和多态。

    • 封装:封装是将数据(变量)和操作数据的方法(函数)包装在一个类中的过程。它提供了一种隐藏实现细节并保护数据的方法。
    • 继承:继承是子类从父类继承属性和方法的过程。子类可以重写或扩展父类的方法。
    • 多态:多态是指同一操作作用于不同类型的对象时,可以有不同的行为。Java 中的多态是通过方法重写和接口实现来实现的。
  2. 请解释接口和抽象类的区别。

    • 接口:接口是一个完全抽象的类,用于定义一组方法签名。实现接口的类需要实现接口中的所有方法。接口支持多实现。
    • 抽象类:抽象类是不能实例化的类,可以包含抽象方法和具体方法。抽象方法需要子类提供实现。抽象类支持单继承。

集合框架

  1. 请解释 ArrayList 和 LinkedList 的区别。

    • ArrayList:ArrayList 是基于动态数组实现的列表,支持随机访问。它的插入和删除操作性能较低,因为需要移动元素以保持连续性。
    • LinkedList:LinkedList 是基于双向链表实现的列表,支持顺序访问。它的插入和删除操作性能较高,但随机访问性能较低。
  2. 请解释 Set 和 Map 接口。

    • Set:Set 是一个不包含重复元素的集合。它可以用于存储独特的元素,并对它们进行操作,如添加、删除、查找等。
    • Map:Map 是一个键值对的集合。它允许使用唯一的键存储和检索值。Map 的实现可以是有序的,如 TreeMap,或无序的,如 HashMap。

异常处理

  1. 请解释 Java 中的异常处理。

    异常处理是 Java 中一种处理运行时错误和异常情况的机制。Java 使用 try、catch 和 finally 代码块来处理异常。当程序中发生异常时,程序会跳到相应的 catch 代码块来处理异常。finally 代码块在异常处理完成后执行,无论是否发生异常。

  2. 请解释受检异常和非受检异常的区别。

    • 受检异常:受检异常是编译器在编译时要求处理(捕获或声明抛出)的异常。例如,IOException 和 SQLException。
    • 非受检异常:非受检异常是运行时异常,编译器不强制要求处理。例如,NullPointerException 和 ArithmeticException。

并发编程

  1. 请解释 Java 中的线程和进程。

  • 进程:进程是操作系统分配资源和调度执行的独立单位。每个进程都有自己的内存空间和系统资源。
  • 线程:线程是进程中的执行单元。一个进程可以包含多个线程,它们共享进程的资源并行执行。
  1. 请解释 synchronized 关键字的作用。

synchronized 关键字用于实现线程同步。它可以修饰方法或代码块,确保同

Java 基本类型和包装类

  1. 解释 Java 中的基本数据类型及其大小和默认值。

Java 有 8 种基本数据类型:byte(8 位,默认值 0)、short(16 位,默认值 0)、int(32 位,默认值 0)、long(64 位,默认值 0L)、float(32 位,默认值 0.0f)、double(64 位,默认值 0.0d)、char(16 位,默认值 ‘\u0000’)和 boolean(1 位,默认值 false)。

  1. 说明自动装箱和自动拆箱。

自动装箱是将基本数据类型自动转换为对应的包装类对象的过程。例如,将 int 转换为 Integer。自动拆箱是将包装类对象自动转换为对应的基本数据类型的过程。例如,将 Integer 转换为 int。自动装箱和拆箱是在Java 5引入的功能,用以简化基本数据类型与包装类之间的转换操作。

  1. 解释为什么推荐使用包装类而非基本数据类型。

推荐使用包装类的原因有以下几点:

  • 包装类提供了更丰富的方法和属性,方便对数据进行操作。
  • 包装类支持 null 值,有助于表示未初始化或缺失的值。
  • 使用包装类可以将数据与对象的特性结合,使得程序更具面向对象特性。

字符串

  1. 请解释 String、StringBuilder 和 StringBuffer 的区别。
  • String:String 类的对象是不可变的,一旦创建就不能改变。对字符串进行操作时,会产生新的字符串对象。频繁操作字符串可能导致性能下降和内存浪费。
  • StringBuilder:StringBuilder 是一个可变字符串类,对字符串进行操作时,不会创建新的对象。它是线程不安全的,但在单线程环境中性能较高。
  • StringBuffer:StringBuffer 与 StringBuilder 类似,也是一个可变字符串类。不同之处在于,StringBuffer 是线程安全的,可以在多线程环境中使用,但性能略低于 StringBuilder。

泛型

  1. 解释什么是泛型,以及它的作用。

泛型是Java中一种参数化类型的机制,允许在编译时定义和检查集合或其他对象的类型。泛型的作用主要有两点:

扫描二维码关注公众号,回复: 15229738 查看本文章
  • 类型安全:泛型提供了编译时类型检查,避免了在运行时出现类型转换异常。
  • 代码重用:泛型使得类和方法能够处理多种类型的数据,减少了代码重复。

输入输出 (I/O)

  1. 请简要描述 Java 中的字节流和字符流。
  • 字节流:字节流用于处理原始二进制数据,如图像、音频等。字节流的两个基类是 InputStreamOutputStream
  • 字符流:字符流用于处理文本数据。字符流的两个基类是 ReaderWriter。字符流在处理字符数据时,会自动处理字符编码转换。

反射

  1. 请解释 Java 反射的概念及其用途。

Java 反射是一种动态获取和操作类、对象、方法和属性的信息的机制。通过反射,可以在运行时获取类的信息、创建对象、调用方法和访问属性。反射的用途包括:

  • 动态加载和使用类,如插件系统。
  • 实现通用的对象操作,如序列化和克隆。
  • 在运行时检查和修改类的结构和行为,如框架和库的实现。

注解

  1. 请解释 Java 注解的概念及其用途。

Java 注解是一种为类、方法、属性或参数提供元数据的机制。注解在编译时或运行时可以被读取,用于改变代码的行为或生成额外的代码。注解的用途包括:

  • 配置框架和库的行为,如 Spring 和 Hibernate。
  • 自动生成代码,如 Lombok 和 Java Persistence API。
  • 实现编译时检查和验证,如 @Override@SuppressWarnings

Java 内存模型

  1. 请描述 Java 内存模型的基本结构。

Java 内存模型主要包括堆、栈、方法区和本地方法栈。

  • :堆是用于存储对象实例的内存区域,所有线程共享。垃圾回收器负责回收堆中不再使用的对象。
  • :栈是用于存储局部变量和方法调用的内存区域。每个线程有一个独立的栈,存储着线程执行过程中的局部变量和方法调用信息。
  • 方法区:方法区存储类的元数据、常量和静态变量。所有线程共享。
  • 本地方法栈:本地方法栈用于存储本地方法(例如JNI调用)的相关信息。

序列化

  1. 请解释 Java 序列化的概念及其用途。

Java 序列化是将对象的状态(属性)转换为字节流的过程,以便将其存储在文件、数据库或通过网络传输。反序列化是将字节流重新转换为对象的过程。序列化的用途包括:

  • 持久化:将对象状态保存到文件、数据库等存储介质中。
  • 传输:通过网络将对象从一个应用传输到另一个应用。
  • 克隆:通过序列化和反序列化实现对象的深度克隆。

Java 8 新特性

  1. 请解释 Java 8 中的 Lambda 表达式。

Lambda 表达式是 Java 8 引入的一种简洁的表示匿名函数的方法。Lambda 表达式可以用于实现函数式接口,即只包含一个抽象方法的接口。Lambda 表达式使得编写简洁的代码变得更容易,特别是在处理集合和并行编程时。

  1. 请解释 Java 8 中的 Stream API。

Java 8 的 Stream API 是一种用于处理集合的新方式。它允许以声明式和函数式的方式对集合进行操作,如过滤、映射、排序和聚合。Stream API 支持并行处理,可以有效地利用多核处理器,提高性能。

Java 9 新特性

  1. 请解释 Java 9 中的模块系统。

Java 9 引入了模块系统,称为 Jigsaw 项目。模块系统允许将代码分割成更小、更易于管理的模块。每个模块可以定义它所依赖的其他模块以及暴露给其他模块的接口。模块系统有助于提高代码的可维护性、封装性和可重用性。

Java 11 新特性

  1. 请简要介绍 Java 11 中的新特性。

Java 11 是一个长期支持版本(LTS),引入了一些新特性,如:

  • 局部变量类型推断的扩展:可以在 lambda 表达式的形式参数中使用 var
  • 新的垃圾回收器 ZGC:一个低延迟、可扩展的垃圾回收器。
  • 新的 HTTP 客户端 API:一个现代化的、支持 HTTP/2 和 WebSocket 的 HTTP 客户端 API。
  • 删除了一些过时的 API 和功能。

猜你喜欢

转载自blog.csdn.net/qq_54351538/article/details/130441681
今日推荐