跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

Java 核心面试知识点整理:基础、并发与容器实战

Java 面试核心知识点汇总,涵盖基础语法、集合框架、多线程并发、反射机制及 Web 技术栈。重点解析了 JDK 与 JRE 差异、equals 与 hashCode 规范、HashMap 底层原理、线程池状态管理、synchronized 锁升级机制等高频考点。内容去除了冗余推广信息,专注于技术原理与实战应用,适合求职者系统复习与查漏补缺。

月光旅人发布于 2026/3/16更新于 2026/10/2283 浏览
Java 核心面试知识点整理:基础、并发与容器实战

Java 核心面试知识点整理

本文整理了 Java 开发中高频出现的面试问题,涵盖基础语法、集合框架、多线程并发、反射机制及 Web 技术栈等核心内容。以下内容基于实际开发经验总结,旨在帮助开发者梳理知识体系。

Java 基础

JDK 和 JRE 有什么区别?

JDK(Java Development Kit)是开发工具包,提供了开发环境和运行环境;JRE(Java Runtime Environment)是运行环境,仅包含运行所需组件。 简单来说,JDK 包含了 JRE,还多了编译器(javac)和调试分析工具。若只需运行程序,安装 JRE 即可;若要编写代码,则必须安装 JDK。

== 和 equals 的区别是什么?

== 对基本类型比较值,对引用类型比较地址。 equals 默认比较地址,但 String、Integer 等类重写了该方法,改为比较值。

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x == y); // true,指向常量池同一对象
System.out.println(x == z); // false,new 开辟新内存
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

注意: Object 类的 equals 源码逻辑如下,本质仍是 ==:

public boolean equals(Object obj) {
    return (this == obj);
}

而 String 类重写了它,实现了字符数组的内容比对。

两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

不对。哈希冲突是常见现象,hashCode 相同不代表对象相等。

String str1 = "通话";
String str2  ;
System.out.println(str1.hashCode()); 
System.out.println(str2.hashCode()); 
System.out.println(str1.equals(str2)); 
=
"重地"
// 1179395
// 1179395
// false

final 在 Java 中有什么作用?

  • 修饰类:该类不能被继承。
  • 修饰方法:该方法不能被重写。
  • 修饰变量:成为常量,初始化后不可修改。

Math.round(-1.5) 等于多少?

等于 -1。四舍五入规则是向正无穷方向取整,0.5 向上取,负 0.5 向下取。

String 属于基础的数据类型吗?

不属于。Java 有 8 种基本数据类型(byte, boolean, char, short, int, float, long, double),String 是对象。

操作字符串都有哪些类?区别是什么?

主要有 String、StringBuffer、StringBuilder。

  • String:不可变对象,每次修改都会生成新对象。
  • StringBuffer:可变,线程安全(synchronized),性能稍低。
  • StringBuilder:可变,非线程安全,性能最高。 单线程推荐 StringBuilder,多线程推荐 StringBuffer。

String str="i"与 String str=new String('i')一样吗?

不一样。前者分配在常量池,后者分配在堆内存。

如何将字符串反转?

使用 StringBuilder 或 StringBuffer 的 reverse() 方法。

抽象类必须要有抽象方法吗?

不需要。抽象类可以没有抽象方法,但不能实例化。

接口和抽象类有什么区别?

  • 实现方式:接口用 implements,抽象类用 extends。
  • 构造函数:抽象类有,接口无。
  • 继承数量:类可实现多个接口,但只能继承一个抽象类。
  • 访问修饰符:接口方法默认为 public,抽象类方法任意。

IO 流分为几种?

按功能分:输入流、输出流。 按类型分:字节流(8 位)、字符流(16 位)。

BIO、NIO、AIO 有什么区别?

  • BIO:同步阻塞 IO,模式简单,并发能力低。
  • NIO:同步非阻塞 IO,基于 Channel,支持多路复用。
  • AIO:异步非阻塞 IO,基于事件和回调机制。

容器

Java 容器都有哪些?

主要分为 Collection 和 Map 两大类。

  • Collection:List(ArrayList, LinkedList, Vector, Stack)、Set(HashSet, LinkedHashSet, TreeSet)。
  • Map:HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap, Hashtable。

Collection 和 Collections 有什么区别?

  • Collection:集合接口,所有集合的父接口。
  • Collections:包装类,提供静态工具方法(如排序)。

List、Set、Map 之间的区别是什么?

  • List:有序,可重复。
  • Set:无序,不可重复。
  • Map:键值对,Key 不可重复。

HashMap 和 Hashtable 有什么区别?

  • Null 值:HashMap 允许 key/value 为 null,Hashtable 不允许。
  • 线程安全:Hashtable 线程安全,HashMap 非线程安全。
  • 推荐:单线程用 HashMap,多线程用 ConcurrentHashMap。

如何决定使用 HashMap 还是 TreeMap?

需要快速插入删除选 HashMap;需要对 Key 进行有序遍历选 TreeMap。

HashMap 的实现原理?

基于 Hash 算法。通过 key.hashCode() 计算 hash 值定位 bucket。发生哈希冲突时,链表存储;链表长度过长(Java 8+)转为红黑树。

ArrayList 和 LinkedList 的区别?

  • 结构:ArrayList 是动态数组,LinkedList 是双向链表。
  • 随机访问:ArrayList 效率高(索引直接访问)。
  • 增删操作:LinkedList 效率高(无需移动元素)。

如何实现数组和 List 之间的转换?

  • 数组转 List:Arrays.asList(array)
  • List 转数组:list.toArray()

哪些集合类是线程安全的?

Vector、Hashtable、Stack 是线程安全的。JDK 1.5 后推荐使用 java.util.concurrent 包下的类,如 ConcurrentHashMap。

Iterator 是什么?

迭代器接口,用于遍历 Collection。支持移除元素,比 Enumeration 更安全。

怎么确保一个集合不能被修改?

使用 Collections.unmodifiableCollection() 创建只读集合。

多线程

并行和并发有什么区别?

  • 并行:多核 CPU 同时处理多个任务。
  • 并发:单核 CPU 通过时间片轮转交替执行多个任务。

线程和进程的区别?

进程是资源分配的最小单位,线程是 CPU 调度的最小单位。一个进程可包含多个线程。

守护线程是什么?

后台运行的线程,如垃圾回收线程。当所有用户线程结束时,守护线程自动结束。

创建线程有哪几种方式?

  1. 继承 Thread 类并重写 run 方法。
  2. 实现 Runnable 接口。
  3. 实现 Callable 接口(可返回结果)。

sleep() 和 wait() 有什么区别?

  • 来源:sleep 来自 Thread,wait 来自 Object。
  • 锁:sleep 不释放锁,wait 释放锁。
  • 唤醒:sleep 时间到自动恢复,wait 需 notify/notifyAll 唤醒。

线程池有哪些状态?

  • RUNNING:接受新任务,处理队列。
  • SHUTDOWN:不接受新任务,处理队列。
  • STOP:不接受新任务,中断正在执行的任务。
  • TIDYING:所有任务销毁,workCount 为 0。
  • TERMINATED:终止状态。

synchronized 和 Lock 有什么区别?

  • 锁范围:synchronized 可修饰类、方法、代码块;Lock 只能代码块。
  • 手动释放:synchronized 自动释放;Lock 需手动 unlock。
  • 异常处理:synchronized 异常自动释放;Lock 需 finally 保证释放。

synchronized 和 volatile 的区别?

  • 可见性:volatile 保证可见性,synchronized 保证可见性和原子性。
  • 阻塞:volatile 不阻塞,synchronized 可能阻塞。

atomic 的原理?

利用 CAS(Compare And Swap)和 volatile 保证原子操作,避免 synchronized 的高开销。

反射

什么是反射?

运行时动态获取类的属性和方法,并调用它们的能力。

什么是 Java 序列化?

将对象状态保存到文件或传输网络。常用于 RMI、Socket 通信。

动态代理是什么?

运行时动态生成代理类。Spring AOP、Hibernate 查询常用此技术。

对象拷贝

深拷贝和浅拷贝区别?

  • 浅拷贝:复制对象本身和值类型成员,引用类型成员仍指向原对象。
  • 深拷贝:完全复制对象及其所有成员变量,包括引用的对象。

Java Web

JSP 和 servlet 有什么区别?

JSP 本质是 Servlet。Servlet 侧重控制逻辑,JSP 侧重视图展示。

JSP 有哪些内置对象?

request, response, pageContext, session, application, out, config, page, exception。

session 和 cookie 有什么区别?

  • 存储位置:session 在服务端,cookie 在浏览器。
  • 安全性:cookie 易被伪造,session 相对安全。
  • 容量:cookie 有大小限制,session 取决于服务器内存。

注:以上内容涵盖了 Java 面试中的核心考点,建议结合实际项目场景深入理解。

目录

  1. Java 核心面试知识点整理
  2. Java 基础
  3. JDK 和 JRE 有什么区别?
  4. == 和 equals 的区别是什么?
  5. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
  6. final 在 Java 中有什么作用?
  7. Math.round(-1.5) 等于多少?
  8. String 属于基础的数据类型吗?
  9. 操作字符串都有哪些类?区别是什么?
  10. String str="i"与 String str=new String(“i”)一样吗?
  11. 如何将字符串反转?
  12. 抽象类必须要有抽象方法吗?
  13. 接口和抽象类有什么区别?
  14. IO 流分为几种?
  15. BIO、NIO、AIO 有什么区别?
  16. 容器
  17. Java 容器都有哪些?
  18. Collection 和 Collections 有什么区别?
  19. List、Set、Map 之间的区别是什么?
  20. HashMap 和 Hashtable 有什么区别?
  21. 如何决定使用 HashMap 还是 TreeMap?
  22. HashMap 的实现原理?
  23. ArrayList 和 LinkedList 的区别?
  24. 如何实现数组和 List 之间的转换?
  25. 哪些集合类是线程安全的?
  26. Iterator 是什么?
  27. 怎么确保一个集合不能被修改?
  28. 多线程
  29. 并行和并发有什么区别?
  30. 线程和进程的区别?
  31. 守护线程是什么?
  32. 创建线程有哪几种方式?
  33. sleep() 和 wait() 有什么区别?
  34. 线程池有哪些状态?
  35. synchronized 和 Lock 有什么区别?
  36. synchronized 和 volatile 的区别?
  37. atomic 的原理?
  38. 反射
  39. 什么是反射?
  40. 什么是 Java 序列化?
  41. 动态代理是什么?
  42. 对象拷贝
  43. 深拷贝和浅拷贝区别?
  44. Java Web
  45. JSP 和 servlet 有什么区别?
  46. JSP 有哪些内置对象?
  47. session 和 cookie 有什么区别?

更多推荐文章

查看全部
  • Linux/C++进阶:Makefile 与 CMake 自动化构建详解
  • C++ 进阶:从裸指针到智能指针,内存管理进化之路
  • 商城认证服务搭建:Nacos 注册、Gateway 路由与短信验证码集成
  • 2025 年度技术博客总结:从 Python 基础到 AI 前沿的进阶之旅
  • 深入剖析 Git 原理与使用(上):核心架构与基础操作
  • 前端调用 AI 接口全流程及具体案例
  • AI 辅助游戏开发:基于 DeepSeek 实现贪吃蛇项目
  • 将第三方 OpenAI 兼容模型接入 GitHub Copilot 的两种方案
  • VinylMusicPlayer Android 开源音乐播放器使用指南
  • Python 兼职开发指南:技术栈与实战方向
  • ToClaw AI 自动助手:重复任务托管与实操场景
  • 选择排序算法原理、实现与复杂度分析
  • CoPaw 个人助理部署与定制指南:本地云端双模式及飞书接入
  • 网络安全红队渗透测试资源与工具大合集
  • 在线图书借阅平台的设计与实现:Spring Boot 实战
  • IDEA 中清理未使用的 JDK 版本
  • Dify 与 MySQL 集成实战:基于 MCP 协议的数据交互方案
  • Ubuntu 虚拟机部署 OpenClaw 个人 AI 助手
  • Java 多用户网页版聊天室:项目总览与用户及好友管理模块实现
  • Stable Diffusion 提示词教程:结构、权重与工具使用

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online