自学内容网 自学内容网

面试 Java 基础八股文十问十答第二十三期

面试 Java 基础八股文十问十答第二十三期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)3*0.1==0.3返回值是什么

在大多数编程语言中,30.1的计算结果不会准确等于0.3,而是会存在精度损失。这是因为浮点数的表示方式导致了精度上的限制。在大多数情况下,30.1的结果可能是一个接近0.3但不完全等于0.3的值,例如0.30000000000000004。因此,3*0.1==0.3的返回值通常是 false。

2)a=a+b与a+=b有什么区别吗?

a=a+ba+=b都是对变量a进行加法操作的表达式,但它们之间存在一些微妙的区别:

  • a=a+b是将a和b相加的结果赋值给a,即先计算a和b的和,然后再将结果赋值给a。这意味着原始的a和b的值都不会改变。
  • a+=b是一个复合赋值操作符,等价于a=a+b。它也是将a和b相加的结果赋值给a,但是使用了更简洁的语法。

3)try catch finally,try里有return,finally还执行么?

在使用try-catch-finally语句时,无论try代码块中是否有return语句,finally代码块都会执行。finally块通常用于释放资源、清理工作或者确保某些操作无论在try块中是否发生异常都会执行。

无论try块中是否有return语句,finally块都会在try块中的所有代码执行完毕后被执行。如果try块中有return语句,finally块会在return语句执行之前执行。如果try块中抛出了异常,并且catch块对该异常进行了处理,那么finally块也会在catch块执行后被执行。

总之,finally块是在try块中的代码执行完成后无论是否发生异常都会被执行的部分。

4)Exception与Error包结构

在Java中,Exception和Error都是Throwable的子类,它们之间的包结构如下:

  • Throwable
    Throwable是Java中所有错误和异常的超类。
    - Error
    Error是指程序在运行期间产生的严重问题,通常表示虚拟机无法解决的错误,如内存溢出、虚拟机错误等。Error是不可恢复的,程序一般无法处理。
    • OutOfMemoryError: 内存溢出错误,当JVM无法为新对象分配足够的内存空间时抛出。

    • 其他Error类,如StackOverflowError等。

    • Exception
      Exception是指程序运行期间可能会出现的非严重问题,它可以被程序捕获并处理,或者由调用者决定是否处理。
      • RuntimeException: 运行时异常,通常是由编程错误引起的,如空指针异常、数组越界异常等。
      • Checked Exception: 受检异常,必须在代码中进行显式处理的异常,如IO异常、SQL异常等。

5)OOM你遇到过哪些情况,SOF你遇到过哪些情况

  • OOM(Out of Memory):我遇到过的一些导致内存溢出的情况包括:
    • 应用程序内存占用过高,导致JVM无法为新对象分配内存。
    • 大数据量的集合或数组未正确管理,消耗了过多的内存。
    • 大量并发线程导致内存消耗过高。
    • 内存泄漏,未释放不再使用的对象占用的内存。
  • SOF(Stack Overflow):我遇到过的一些导致栈溢出的情况包括:
    • 递归调用层次过深,导致栈空间被耗尽。
    • 方法调用链过长,每次方法调用都会占用栈空间,导致栈溢出。
    • 在多线程环境下,大量线程同时调用递归方法,导致栈空间耗尽。

6)简述线程、程序、进程的基本概念。以及他们之间关系是什么?

  • 程序:程序是一组指令的集合,它们按照特定的顺序和逻辑来完成某项任务。程序通常以可执行文件的形式存在,可以被操作系统加载到内存中执行。
  • 进程:进程是程序在执行过程中的一个实例。它包含了程序代码、数据和程序运行所需的系统资源,如内存、文件句柄等。每个进程都拥有独立的内存空间,进程之间相互独立,通常无法直接访问彼此的数据。
  • 线程:线程是进程内的一个执行单元,它是操作系统调度的最小单位。一个进程可以包含多个线程,这些线程共享同一进程的内存空间和资源。线程之间可以并发执行,各自独立完成特定的任务,但它们共享进程的资源。

关系:

  • 一个程序可以包含多个进程,每个进程可以包含多个线程。
  • 程序是静态的,是存储在磁盘上的一组指令;进程是动态的,是程序的一次执行过程;线程是进程的一个执行流程,是CPU调度的基本单位。
  • 进程之间相互独立,拥有各自的内存空间;而线程共享同一进程的内存空间和资源,因此线程之间的通信和资源共享更加方便。

7)线程有哪些基本状态?这些状态是如何定义的?

Java中的线程有以下基本状态:

  1. NEW(新建):当线程对象被创建但尚未启动时,处于新建状态。此时还没有调用start()方法启动线程。
  2. RUNNABLE(可运行):当线程正在Java虚拟机中执行,或者处于就绪状态(等待CPU调度)时,处于可运行状态。
  3. BLOCKED(阻塞):当线程被阻塞,无法获取到锁资源时,处于阻塞状态。例如,线程在等待同步块的锁。
  4. WAITING(等待):当线程无限期地等待另一个线程执行特定操作时,处于等待状态。例如,调用了Object.wait()方法或Thread.join()方法,或者使用LockSupport.park()方法。
  5. TIMED_WAITING(计时等待):当线程在等待另一个线程执行特定操作时,但指定了一个超时时间时,处于计时等待状态。例如,调用了Thread.sleep()方法、Object.wait(timeout)方法或Thread.join(timeout)方法。
  6. TERMINATED(终止):当线程执行完毕或者因异常退出时,处于终止状态。

这些状态是通过Java虚拟机内部的线程状态标志来定义和管理的,具体实现方式与Java虚拟机的具体实现相关。

8)Java 中 IO 流

Java中的IO流主要分为字节流和字符流,以及输入流和输出流两种维度。

  • 字节流(Byte Streams):字节流以字节为单位进行操作,适用于处理二进制数据,如图片、视频等。主要包括InputStream和OutputStream两个抽象类及其实现类。
  • 字符流(Character Streams):字符流以字符为单位进行操作,适用于处理文本数据,字符流会自动处理字符编码和解码。主要包括Reader和Writer两个抽象类及其实现类。
  • 输入流(Input Streams):用于从数据源(如文件、网络连接等)读取数据。
  • 输出流(Output Streams):用于向目标(如文件、网络连接等)写入数据。

Java的IO流还可以根据数据处理的方式分为:

  • 节点流(Node Streams):直接与数据源或目标进行交互,如FileInputStream、FileOutputStream等。
  • 处理流(Processing Streams):通过连接到其他流上,在数据的传输过程中提供一些附加的功能,如缓冲、转换等,如BufferedInputStream、ObjectInputStream等。

9)java反射的作用于原理

反射是指在运行时动态地获取类的信息(如类名、方法、属性等),并可以在运行时操作类或对象的属性、方法等。Java中的反射机制主要通过java.lang.reflect包下的类来实现。

反射的作用包括但不限于:

  • 在运行时获取类的信息:可以获取类的构造函数、方法、字段等信息。
  • 在运行时创建对象:可以通过反射机制动态创建对象,无需在编译时确定对象类型。
  • 在运行时调用方法:可以动态地调用类的方法,包括私有方法。
  • 在运行时操作属性:可以动态地获取和设置类的属性值,包括私有属性。

反射的原理是通过Java虚拟机在运行时加载类的字节码文件,并生成对应的Class对象。通过这个Class对象,可以获取类的各种信息,并且可以在运行时动态地创建对象、调用方法和操作属性。反射机制提供了一种灵活的方式来操作类和对象,但也会带来一定的性能损耗。

10)说说List,Set,Map三者的区别?

  • List:List是一个有序的集合,可以存储重复元素。List允许通过索引(位置)访问集合中的元素,可以根据需要动态调整大小。常见的List实现类有ArrayList、LinkedList和Vector。
  • Set:Set是一个不允许包含重复元素的集合,保证集合中的元素唯一性。Set通常不保证集合中元素的顺序,不支持通过索引访问元素。常见的Set实现类有HashSet、LinkedHashSet和TreeSet。
  • Map:Map是一种键值对(key-value)的映射关系集合,每个键最多只能映射到一个值。Map中的键是唯一的,但值可以重复。Map提供了根据键快速查找值的功能,通常用于表示映射关系。常见的Map实现类有HashMap、LinkedHashMap、TreeMap和HashTable。

总结区别:

  • List是有序的集合,允许重复元素;Set是无序的集合,不允许重复元素;Map是键值对的映射关系集合,键是唯一的。
  • List允许通过索引访问元素,Set不支持通过索引访问元素;Map可以通过键快速查找值。
  • 常见的List实现类有ArrayList、LinkedList和Vector;常见的Set实现类有HashSet、LinkedHashSet和TreeSet;常见的Map实现类有HashMap、LinkedHashMap、TreeMap和HashTable。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 900+ Star,1.5W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐


原文地址:https://blog.csdn.net/qq_67358181/article/details/137665394

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!