上海初创公司 Java 后端实习面试题整理

上海某初创公司 · Java后端实习生 · 一面 · 上海 · 2026-04

面试题目

Java 基础

  1. Java 的四大特性有哪些?详细讲一下你对多态的理解。
  2. **重载(Overload)和重写(Override)**的区别是什么?
  3. **堆(Heap)和栈(Stack)**的区别是什么?
  4. 在 Java 的五大内存区域中,常量存储在哪里?类的定义存储在哪里?

多线程

  1. 进程和线程的区别是什么?
  2. 创建线程有哪几种方式?
  3. 线程池是如何创建线程的?
  4. 讲一下对多线程的理解。

数据库

  1. 讲一下对聚簇索引的理解。
  2. 数据库事务的四大特性(ACID)有哪些?重点讲一下对原子性隔离性的理解。

Git

  1. 克隆 Git 远程仓库的命令是什么?如何创建一个新分支?

参考解析

1. Java 四大特性 & 多态

  • 四大特性:封装、继承、多态、抽象
  • 多态:同一方法调用,因对象实际类型不同而表现出不同行为。分为编译时多态(方法重载)和运行时多态(方法重写 + 父类引用指向子类对象)。
  • 实现运行时多态的三要素:继承、重写、父类引用指向子类对象(向上转型)。

2. 重载 vs 重写

重载 Overload重写 Override
发生位置同一个类子类与父类之间
方法名相同相同
参数列表必须不同必须相同
返回值可不同必须兼容(协变)
多态类型编译时多态运行时多态

3. 堆 vs 栈

  • :线程私有,存储局部变量、方法调用帧,自动管理,速度快,空间较小。
  • :线程共享,存储对象实例和数组,由 GC 管理,空间大但访问相对慢。

4. JVM 五大内存区域

  • 五大区域:堆、虚拟机栈、本地方法栈、方法区(元空间)、程序计数器
  • 字符串常量池:JDK 7 起移至堆中;运行时常量池位于方法区(元空间)。
  • 类的定义(Class 元数据):存储在**方法区(Metaspace)**中。

5. 进程 vs 线程

  • 进程是资源分配的最小单位,线程是 CPU 调度的最小单位。
  • 同一进程的线程共享堆、方法区等资源,但各自拥有独立的栈和程序计数器。
  • 线程切换开销小于进程切换。

6. 创建线程的方式

  1. 继承 Thread 类,重写 run()
  2. 实现 Runnable 接口,传入 Thread
  3. 实现 Callable 接口 + FutureTask,可获取返回值。
  4. 使用线程池ExecutorService)提交任务(推荐)。

7. 线程池创建线程的流程

  1. 提交任务时,若当前线程数 < corePoolSize,创建新核心线程执行。
  2. 若 >= corePoolSize,任务进入工作队列等待。
  3. 队列满且线程数 < maximumPoolSize,创建非核心线程。
  4. 线程数达到上限且队列满,执行拒绝策略

8. 聚簇索引

  • 聚簇索引(Clustered Index)将数据行与索引存储在一起,叶子节点直接存放完整行数据。
  • InnoDB 默认以主键作为聚簇索引;每张表只能有一个聚簇索引。
  • 非聚簇索引(二级索引)叶子节点存储主键值,查询时需回表再查聚簇索引。

9. 数据库事务 ACID

  • 原子性(Atomicity):事务内所有操作要么全部成功,要么全部回滚,不可部分提交。由 Undo Log 实现。
  • 隔离性(Isolation):并发事务之间互不干扰。通过锁机制MVCC 实现,隔离级别由低到高:读未提交 → 读已提交 → 可重复读(InnoDB 默认) → 串行化。

10. Git 常用命令

# 克隆远程仓库
git clone <remote-url>

# 创建新分支
git branch <branch-name>

# 创建并切换到新分支(推荐)
git checkout -b <branch-name>
# 或(Git 2.23+)
git switch -c <branch-name>