jdk、jre、jvm是java体系三层包含关系:jdk=jre+开发工具(如javac),jre=jvm+核心类库,jvm是执行字节码的跨平台核心,不同系统有不同jvm实现但行为一致。

抓Java基础面试题核心考点,关键不是背全所有知识点,而是盯住高频、易错、能体现工程思维的那几块——这些才是面试官真正用来快速判断你基础是否扎实的“试金石”。
面向对象三大特性要讲出设计意图
不能只说“封装是private,继承是extends,多态是重写”。得结合代码说明为什么这么设计:
- 封装:强调用getter/setter替代public字段,不只是语法规范,而是为后续加校验、日志、线程安全留余地;比如用户年龄字段,setAge()里可以强制检查是否大于0且小于150
- 继承:明确Java单继承限制,解释为何用接口弥补(比如一个类既要Runnable又要Serializable);顺带提super调用顺序和初始化流程
- 多态:必须现场写两行代码演示父类引用指向子类对象,再解释JVM如何通过虚方法表实现动态绑定;避免只说“编译看左边,运行看右边”这种模糊表述
== 和 equals 必须连带 hashCode 一起答
这是几乎必问的组合题,单独答对一半不算过关:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- ==:基本类型比值,引用类型比地址;new String("a") == new String("a") 一定是false
- equals:默认同==,String/Integer等重写后比内容;调用前建议判空(obj != null && obj.equals(xxx))
- hashCode:只要equals返回true,hashCode就必须相等;否则HashMap可能把两个逻辑相等的对象存到不同桶里,导致get()查不到——这才是面试官想听的底层原因
String / StringBuffer / StringBuilder 要按场景选型
不光说“谁线程安全”,得给出具体业务信号:
- String:适合常量拼接、配置项、作为Map key(不可变保证hash稳定);频繁拼接循环里用它,GC压力会明显上升
- StringBuilder:单线程下字符串拼接首选,比如组装SQL、生成JSON、日志拼接;性能比StringBuffer高20%~30%
- StringBuffer:只有明确出现多线程共享同一字符串实例时才用,比如老式Servlet中多个线程共用一个logBuffer;现在更推荐用局部变量+StringBuilder
JDK/JRE/JVM 区分要落到实际作用
别背定义,说清楚“谁干啥”:
- JVM:只负责执行.class字节码,不同系统装不同JVM(Windows版/Linux版),但行为一致
- JRE:JVM + 核心类库(java.lang、java.util等),够运行程序,但不能编译
- JDK:JRE + javac、javadoc、jdb等开发工具,写代码必须装它;面试官可能追问“为什么IDE里配了JDK就能跑,不单独装JRE?”——因为JDK自带JRE
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










