2025 届秋招常见八股文汇总——数据库

一条 SQL 语句是如何执行的

  1. 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接。
  2. 查询缓存(MySQL 8.0 中已弃用):MySQL 拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。
  3. 分析器:MySQL 需要识别出 SQL 语句中的字符串分别是什么,代表什么。
  4. 优化器:优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
  5. 执行器:MySQL 通过分析器知道了要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。

阅读全文

2025 届秋招常见八股文汇总——JVM、Spring

JVM 内存区域有哪些部分

  1. 程序计数器:程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在多线程环境下,每个线程都有自己独立的程序计数器。当线程执行 Java 方法时,程序计数器记录的是正在执行的虚拟机字节码指令的地址。
  2. Java 虚拟机栈:每个 Java 线程都有一个私有的 Java 虚拟机栈,与线程同时创建。每个方法在执行时都会创建一个栈帧,用于存储局部变量、操作数栈、动态链接、方法出口等信息。栈帧在方法调用时入栈,方法返回时出栈。
  3. 本地方法栈: 本地方法栈与 Java 虚拟机栈类似,但它为本地方法服务。本地方法是用其他编程语言(如 C/C++)编写的,通过 JNI 与 Java 代码进行交互。
  4. :Java 堆是 Java 虚拟机中最大的一块内存区域,用于存储对象实例。所有的对象实例和数组都在堆上分配内存。堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。堆可以分为新生代和老年代等不同的区域,其中新生代又包括 Eden 空间、Survivor 空间(From 和 To)。
  5. 方法区: 方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。在 HotSpot 虚拟机中,方法区也被称为永久代,但在较新的 JVM 版本中,永久代被元空间所取代。
  6. 运行时常量池:是方法区的一部分,用于存储编译期生成的类、方法和常量等信息。
  7. 字符串常量池:字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串专门开辟的一块区域,主要目的是为了避免字符串的重复创建。
  8. 直接内存:不是 Java 虚拟机运行时数据区的一部分,但 Java 可以通过 NIO 操作直接内存,提高 I/O 性能。

阅读全文

2025 届秋招常见八股文汇总——Java 多线程

Java 创建线程有哪几种方式

在 Java 中,创建线程有四种方式,分别是继承 Thread 类、实现 Runnable 接口,使用 Callable 和 Future,使用线程池.

  1. 继承 Thread 类: 通过创建 Thread 类的子类,并重写其 run 方法来定义线程执行的任务。
  2. 实现 Runnable 接口: 创建一个实现了 Runnable 接口的类,并实现其 run 方法。然后创建该类的实例,并将其作为参数传递给 Thread 对象。
  3. 使用 Callable 和 Future 接口:创建一个实现了 Callable 接口的类,并实现其 call 方法,该方法可以返回结果并抛出异常。使用 ExecutorService 来管理线程池,并提交 Callable 任务获取 Future 对象,以便在未来某个时刻获取 Callable 任务的计算结果。
  4. 使用线程池:通过使用 ThreadPoolExecutor 类创建线程池,并通过线程池来管理线程的创建和复用。

阅读全文

2025 届秋招常见八股文汇总——Java 集合

Java 的集合类有哪些,哪些是线程安全的,哪些是线程不安全的?

Java 中的集合类主要由 Collection 和 Map 这两个接口派生而出,其中 Collection 接口又派生出三个子接口,分别是 Set、List、Queue。所有的 Java 集合类,都是 Set、List、Queue、Map 这四个接口的实现类。

    • List 接口:有序集合,允许重复元素。常见的实现类有 ArrayList、LinkedList 等。
    • Set 接口:不允许重复元素的集合。常见的实现类有 HashSet、LinkedHashSet、TreeSet 等。
    • Queue 接口:用于表示队列的数据结构。 常见的实现类有 LinkedList、ArrayDeque、PriorityQueue 等。
    • Map 接口:表示键值对的集合。常见的实现类有 HashMap、LinkedHashMap、TreeMap 等。

阅读全文