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

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

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

月光旅人发布于 2026/3/16更新于 2026/6/613 浏览
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()); // 1179395
System.out.println(str2.hashCode()); // 1179395
System.out.println(str1.equals(str2)); // 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 有什么区别?
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • PostgreSQL 企业级用户画像与行为分析实战:替代 MySQL+Hive 方案
  • 使用 Faster-Whisper 实现本地实时语音转文本
  • 基于YOLOv8/v11/v26与LLM的Web目标检测及人脸表情识别系统
  • 云开发 Copilot:AI 赋能的低代码开发
  • 智能体工作流导出导入实战:以 12345 政务热线分拨为例
  • 基于开源模型的成人内容过滤合规解决方案
  • 前端三个月速成学习路线与面试核心考点
  • 基于 Claude MCP 协议的智能体落地示例
  • Kimi 2.5 开源模型全景部署手册
  • OpenClaw大龙虾机器人完整安装教程
  • Tomcat 核心参数详解:maxConnections、maxThreads 与 acceptCount
  • 基于 Java 和天地图 API 检索荣昌卤鹅店位置
  • 提示工程基础:掌握大模型交互的核心技巧
  • Czkawka/Krokiet:基于 Rust 的跨平台系统清理工具技术解析
  • Dify 大模型应用开发实战:Agent 与 RAG 架构解析
  • CentOS 7 虚拟机安装指南
  • GESP 2025 年 12 月 C++ 五级认证真题解析(单选 1-15)
  • Spring Boot 配置文件深度解析
  • 生成式 AI 与大语言模型(LLM)原理简明教程
  • Clawdbot 对接企业微信单向推送全流程指南

相关免费在线工具

  • 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