跳至主要內容
Java 并发面试三

Java 并发面试三

Java 线程池

【简单】为什么要用线程池?

顾名思义,线程池就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。

池化技术想必大家已经屡见不鲜了,线程池、数据库连接池、HTTP 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。

线程池提供了一种限制和管理资源(包括执行一个任务)的方式。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。


钝悟...大约 35 分钟JavaJavaCore面试JavaJavaCore面试并发
Java 并发面试二

Java 并发面试二

Java 锁

【中等】Java 中,根据不同维度划分,锁有哪些分类?

在 Java 中,锁可以按照 多个维度 进行分类,不同维度的锁适用于不同的并发场景。以下是详细的分类:

按锁的公平性划分

锁类型 特点 实现类/关键字
公平锁 严格按照线程请求顺序(FIFO)分配锁,避免线程饥饿,但性能较低。 ReentrantLock(true)
非公平锁 允许插队,新请求的线程可能直接抢到锁,吞吐量高,但可能导致线程饥饿(默认方式)。 ReentrantLock(false)synchronized

钝悟...大约 32 分钟JavaJavaCore面试JavaJavaCore面试并发
Java 基础面试三

Java 基础面试三

Java 泛型

【中等】Java 泛型的作用是什么?

Java 泛型是什么?

泛型允许在类、接口、方法上使用类型参数(如 <T>,使代码能适应多种数据类型,同时保证类型安全。

Java 泛型有什么用?


钝悟...大约 20 分钟JavaJavaCore面试JavaJavaCore面试
Java 基础面试二

Java 基础面试二

Java 面向对象

【简单】对象实体与对象引用有何不同?

(1)对象是用来描述客观事物的一个抽象。一个对象由一组属性和对这组属性进行操作的一组服务组成。

(2)类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。

(3)对象实体与对象引用的不同之处在于:

  • new 创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)
  • 一个对象引用可以指向 0 个或 1 个对象(一根绳子可以不系气球,也可以系一个气球);
  • 一个对象可以有 n 个引用指向它(可以用 n 条绳子系住一个气球)。

钝悟...大约 18 分钟JavaJavaCore面试JavaJavaCore面试
Java 容器面试一

Java 容器面试一

Java 容器简介

【简单】Java 中有哪些集合类?

img
img

Java 容器类主要位于 java.util 包,分为 CollectionMap 两大类:


钝悟...大约 15 分钟JavaJavaCore面试JavaJavaCore面试容器
Java 容器面试三

Java 容器面试三

Java 容器工具类

Collections 工具类常用方法:

  • 排序
  • 查找,替换操作
  • 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合)

排序操作

void reverse(List list)//反转
void shuffle(List list)//随机排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由 Comparator 控制排序逻辑
void swap(List list, int i , int j)//交换两个索引位置的元素
void rotate(List list, int distance)//旋转。当 distance 为正数时,将 list 后 distance 个元素整体移到前面。当 distance 为负数时,将 list 的前 distance 个元素整体移到后面

钝悟...大约 11 分钟JavaJavaCore面试JavaJavaCore面试容器
Java 容器面试二

Java 容器面试二

Map

【中等】HashMap 和 Hashtable 有什么区别?

HashMap 更高效且灵活,Hashtable 线程安全但过时,推荐用 ConcurrentHashMap 替代。

对比项 HashMap (JDK 1.2+) Hashtable (JDK 1.0)
线程安全 ❌ 非线程安全(需额外同步) ✅ 线程安全(方法用 synchronized 修饰)
性能 ⚡ 更高(无锁竞争) ⏳ 较低(同步开销)
Null 键/值 ✅ 允许 null 键和值 ❌ 不允许 null
迭代器 fail-fast(快速失败,并发修改抛异常) enumerator(不抛异常)
继承体系 继承 AbstractMap 继承 Dictionary(已过时)
初始容量与扩容 默认 16,扩容为 2 倍 默认 11,扩容为 2 倍 + 1
哈希冲突解决 链表 + 红黑树(JDK 8+) 仅链表

钝悟...大约 16 分钟JavaJavaCore面试JavaJavaCore面试容器
Java 虚拟机面试一

Java 虚拟机面试一

【中等】JVM 的 TLAB(Thread-Local Allocation Buffer)是什么?
【中等】Java 是如何实现跨平台的?

【中等】编译执行与解释执行的区别是什么?JVM 使用哪种方式?

【困难】你了解 Java 的类加载器吗?
【中等】什么是 Java 中的 JIT(Just-In-Time)?
【中等】JIT 编译后的代码存在哪?
【中等】什么是 Java 的 AOT(Ahead-Of-Time)?
【困难】你了解 Java 的逃逸分析吗?
【中等】Java 中的强引用、软引用、弱引用和虚引用分别是什么?


钝悟...大约 7 分钟JavaJavaCore面试JavaJavaCore面试并发
Java 基础面试一

Java 基础面试一

Java 常识

【简单】Java 语言有什么优势?

  • 跨平台:【一次编写,到处执行(Write Once, Run Anywhere)】——JVM 执行字节码。
  • 自动垃圾回收:垃圾回收(GC)减少内存泄漏风险。
  • 强大生态:Spring、Hadoop、Android 等广泛支持。
  • 面向对象:支持封装、继承、多态,代码结构清晰易维护。
  • 高性能:JIT 编译优化,多线程支持高并发。
  • 健壮安全:强类型检查、异常处理、JVM 安全机制。

钝悟...大约 32 分钟JavaJavaCore面试JavaJavaCore面试
Java 并发面试一

Java 并发面试一

并发简介

【简单】并发和并行有什么区别?

  • 什么是并发?
  • 什么是并行?
  • 并发和并行有什么区别?

并发和并行是最容易让新手费解的概念,那么如何理解二者呢?其最关键的差异在于:是否是同时发生:

  • 并发是指具备处理多个任务的能力,但不一定要同时
  • 并行是指具备同时处理多个任务的能力

钝悟...大约 43 分钟JavaJavaCore面试JavaJavaCore面试并发
2