5. Java 基础答辩
本章收录 66 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。
1. Java四大基本特性?
- 面向对象、跨平台、健壮性、多线程。依托JVM实现一次编译到处运行
- 自动垃圾回收避免内存泄漏
- 严格的语法校验和异常机制提升健壮性
- 支持多线程并发处理,提升程序运行效率。
2. 面向对象三大特性详细场景化解释?
- 封装:将数据库工具类的方法私有化,仅对外提供公共调用方法,隐藏内部细节
- 继承:自定义业务父类,子类复用通用方法,减少代码冗余
- 多态:父类引用指向子类对象,不同子类重写方法实现不同业务逻辑,提升扩展性。
3. 重载和重写的详细区别?
重载:同类中、方法名相同、参数不同、编译期、与返回值无关;重写:父子类、方法名参数返回值完全一致、运行期、权限不低于父类。重载是多态编译体现,重写是多态运行体现。
4. HashMap JDK1.8底层结构、哈希冲突解决?
- 底层数组+链表+红黑树。通过hash算法定位下标,冲突时形成链表
- 链表长度>8且数组长度>64时转为红黑树,降低查询时间复杂度
- 负载因子默认0.75,达到阈值自动扩容。
5. 异常体系分类与处理方式?
分为编译时异常和运行时异常。编译异常必须捕获或抛出,如IO异常;运行时异常无需强制处理,如空指针、数组越界。项目中使用try-catch捕获局部异常,全局异常统一处理全局报错。
6. final、finally、finalize区别?
- final修饰变量不可变、方法不可重写、类不可继承
- finally用于异常处理,代码一定会执行
- finalize是垃圾回收前置方法,现已废弃不推荐使用。
7. 为什么选 Java?
系统安全:登录鉴权、密码哈希、参数校验、防 SQL 注入/XSS、防越权、HTTPS。
- 不信任前端
- 敏感操作二次验证
- 答辩逐条对应实现
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
8. 面向对象三大特性?结合项目说明
- 封装:实体字段私有 + getter/setter
- 继承:公共基类(如 BaseEntity)
- 多态:接口多实现,便于扩展
9. == 与 equals 区别?
==对于基本类型比较数值,引用类型比较内存地址;equals是Object方法,重写后比较对象内容和属性,项目中字符串、对象对比均使用equals。
10. String、StringBuilder、StringBuffer核心区别?
- String不可变,每次拼接生成新对象,适合静态字符串
- StringBuilder可变、线程不安全、效率最高,单线程专用
- StringBuffer可变、线程安全、效率低,多线程并发场景使用。
11. HashMap 原理简述?
系统安全:登录鉴权、密码哈希、参数校验、防 SQL 注入/XSS、防越权、HTTPS。
- 不信任前端
- 敏感操作二次验证
- 答辩逐条对应实现
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
12. ArrayList与LinkedList底层与适用场景?
ArrayList基于动态数组,查询快、随机访问优,中间增删慢,适合查询多、修改少场景;LinkedList基于双向链表,头尾增删快、遍历查询慢,适合频繁插入删除、查询少的场景。
13. 接口和抽象类的区别?
抽象类有构造方法、可包含普通变量和普通方法、单继承;接口无构造方法、变量常量、默认抽象方法、多实现,项目中接口用于定义规范,抽象类用于抽取通用代码。
14. 异常体系?受检与非受检
IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。
- 文件读写用 BufferedReader
- 用完 close 或 try-with-resources
- 答辩说明上传下载用过哪些类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
15. 线程与并发你会什么?
@Async 将方法放线程池异步执行,适合发邮件、写日志等非主路径任务。
- 需 @EnableAsync 与自定义 Executor
- 异步方法同类调用不生效
- 答辩说明是否使用及线程池参数
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
16. JVM 内存大致分区?
JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。
- 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
- JVM 负责 GC、类加载
- 答辩说清三者关系
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
17. JDK / JRE / JVM?
JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。
- 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
- JVM 负责 GC、类加载
- 答辩说清三者关系
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
18. 重载与重写?
重载:同类同名不同参,编译期绑定;重写:子类覆盖父类方法,运行期多态。
- 重写权限不能更严,返回值协变
- 项目中父类接口多实现
- 答辩各举一例
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
19. final?
final 修饰类不可继承、方法不可重写、变量引用不可改(对象内容可变)。
- 常量命名规范
- 工具类 final 防继承
- 答辩说明使用场景
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
20. static?
static 属于类而非实例,静态方法/变量随类加载,无 this。
- 工具方法常用 static
- 静态变量注意线程安全
- 答辩对比实例成员
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
21. this / super?
this 指向当前对象,super 调用父类构造或方法。
- 构造器链 super()
- 区分成员隐藏
- 答辩结合实体类举例
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
22. 包与访问修饰符?
访问修饰符:public 任意;protected 子类+包;默认包内;private 本类。
- 封装原则尽量 private
- 接口 public 暴露能力
- 答辩体现封装设计
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
23. 包装类型?
包装类型 Integer 等将基本类型对象化,用于集合与 null;注意自动拆箱 NPE。
- Integer 缓存 -128~127
- 比较用 equals 非 ==
- 答辩说明空值处理
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
24. 自动装箱?
自动装箱/拆箱在基本类型与包装间转换,简化代码但可能 NPE 与性能开销。
- 循环中注意避免反复装箱
- 判空后再拆箱
- 答辩结合参数接收说明
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
25. 深拷贝浅拷贝?
浅拷贝共享引用对象;深拷贝递归复制引用对象,互不影响。
- Cloneable、序列化、工具类实现
- 集合拷贝注意层级
- 答辩了解概念即可
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
26. Comparable?
Comparable 自然排序 compareTo;Comparator 外部比较器,灵活多策略排序。
- 列表 sort 可传 Comparator
- Lambda 简化写法
- 答辩结合列表排序场景
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
27. Comparator?
Comparable 自然排序 compareTo;Comparator 外部比较器,灵活多策略排序。
- 列表 sort 可传 Comparator
- Lambda 简化写法
- 答辩结合列表排序场景
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
28. Generics?
泛型在编译期约束类型,避免强转与 ClassCastException,如 List<User>。
- 通配符 ? extends/super
- 擦除机制了解即可
- 答辩说明集合类型安全
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
29. 通配符?
this 指向当前对象,super 调用父类构造或方法。
- 构造器链 super()
- 区分成员隐藏
- 答辩结合实体类举例
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
30. 反射用途?
反射运行时获取类信息、调用方法,Spring/MyBatis 框架底层大量使用。
- Class.forName、getDeclaredMethod
- 破坏封装,性能较低
- 答辩说明框架为何能注入
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
31. 注解用途?
注解是元数据,@Override/@Transactional 等由编译器或框架处理。
- 自定义注解+ AOP 实现
- 运行时 RetentionPolicy.RUNTIME
- 答辩指出项目中常用注解
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
32. Stream 用途?
Stream API 函数式处理集合:filter/map/collect,链式可读。
- parallelStream 慎用
- 终端操作触发计算
- 答辩简化列表转换代码
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
33. Optional?
applicationContext.xml 是 Spring 核心配置文件,声明 Bean、扫描、数据源等。
- 与 spring-mvc.xml 分工:根容器 vs Web 容器
- Boot 项目多用 JavaConfig + yml 替代 XML
- 答辩对比 SSM 手工装配与 Boot 自动配置差异
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
34. Lambda?
Lambda 简化函数式接口实现,(a,b)->a+b,配合 Stream 使用。
- 变量需 effectively final
- 方法引用 Class::method
- 答辩体现 Java 8+ 特性
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
35. 枚举?
枚举/constants 管理订单状态等,状态机规定合法迁移,防止非法跳转。
- 如 待支付→已支付→已完成
- 更新时校验当前状态
- 答辩结合业务状态字段
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
36. IO 与 NIO?
IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。
- 文件读写用 BufferedReader
- 用完 close 或 try-with-resources
- 答辩说明上传下载用过哪些类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
37. 序列化?
序列化对象转字节流传输或持久化,实现 Serializable;注意 serialVersionUID。
- Redis 存对象、RPC 传参
- 敏感字段 transient
- 答辩了解用途
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
38. equals 契约?
equals 比较对象内容,重写需满足自反、对称、传递、一致;String 已重写。
- == 比较引用
- 业务比较用 equals
- 答辩结合实体比较
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
39. hashCode 为何一起重写?
重载:同类同名不同参,编译期绑定;重写:子类覆盖父类方法,运行期多态。
- 重写权限不能更严,返回值协变
- 项目中父类接口多实现
- 答辩各举一例
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
40. ConcurrentHashMap?
ConcurrentHashMap 分段/CAS 保证并发安全,比 Hashtable 性能更好。
- 读多写多缓存场景
- 不允许 null key/value
- 答辩对比 HashMap 线程不安全
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
41. CopyOnWrite?
统一异常处理避免把堆栈直接返回前端,提升体验与安全。
- @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
- 封装统一 Result(code/msg/data)
- 记录日志便于排错,答辩可展示全局异常类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
42. 线程池参数?
线程池复用线程、限制并发,避免无界 new Thread 导致资源耗尽。
- 核心/最大线程数、队列、拒绝策略
- Boot 可 @Bean ThreadPoolTaskExecutor
- 答辩结合 @Async 或定时任务说明
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
43. synchronized?
统一异常处理避免把堆栈直接返回前端,提升体验与安全。
- @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
- 封装统一 Result(code/msg/data)
- 记录日志便于排错,答辩可展示全局异常类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
44. volatile?
DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。
- Controller 接 DTO,Service 转 Entity
- 返回 VO 控制字段可见性
- 答辩体现规范分层意识
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
45. 死锁条件?
死锁四条件:互斥、占有且等待、不可抢占、循环等待;避免固定加锁顺序。
- tryLock 超时
- 银行家算法了解
- 答辩说明项目是否多线程
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
46. GC 基本概念?
GC 自动回收无引用对象,分代:新生代 Minor GC、老年代 Full GC。
- 强软弱虚引用了解
- 避免内存泄漏
- 答辩不必背调参细节
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
47. 类加载过程?
类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。
- 自定义 ClassLoader 了解
- Tomcat 可打破委派
- 答辩说明 JVM 如何找到类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
48. 双亲委派?
类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。
- 自定义 ClassLoader 了解
- Tomcat 可打破委派
- 答辩说明 JVM 如何找到类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
49. 设计模式举例?
常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。
- 结合项目工具类或 Service
- 不要空背定义
- 答辩举一处实际结构
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
50. 单例写法?
常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。
- 结合项目工具类或 Service
- 不要空背定义
- 答辩举一处实际结构
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
51. 代理模式?
常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。
- 结合项目工具类或 Service
- 不要空背定义
- 答辩举一处实际结构
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
52. JDK 代理与 CGLIB?
JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。
- 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
- JVM 负责 GC、类加载
- 答辩说清三者关系
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
53. BIO/NIO?
IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。
- 文件读写用 BufferedReader
- 用完 close 或 try-with-resources
- 答辩说明上传下载用过哪些类
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
54. 时间 API?
Java 8 时间 API:LocalDateTime 线程安全,DateTimeFormatter 格式化,替代 SimpleDateFormat。
- Instant 存 UTC
- 与数据库 datetime 映射
- 答辩说明接口日期字段
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
55. BigDecimal?
BigDecimal 精确小数,金额计算禁用 float/double,用 String 构造。
- ROUND_HALF_UP 四舍五入
- compareTo 比较
- 答辩说明订单金额字段
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
56. 正则注意?
简要结论:校验格式。
关于「正则注意」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:
- 先用一句话说清定义或结论(如上)
- 补充 2~3 个技术要点或注意事项,体现理解深度
- 结合项目 Java 代码,结合自己的代码、配置或表结构举例,避免只背关键词
57. 编码字符集?
统一 UTF-8 编码避免中文乱码:CharacterEncodingFilter、数据库 utf8mb4、JSON UTF-8。
- 请求/响应/页面/库表字符集一致
- SSM 在 web.xml 配置过滤器
- 答辩可说明曾遇到的乱码排查过程
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
58. 空指针如何防?
防 NPE:判空、Optional、Objects.requireNonNull、@NotNull 校验、默认值。
- 链式调用前每层检查
- 日志打印前判空
- 答辩说明踩坑与修复
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
59. 日志怎么打?
日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。
- 分级别:ERROR/WARN/INFO/DEBUG
- 关键业务、异常、慢接口应记录
- 生产避免打印敏感信息与过量 DEBUG
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
60. 单元测试?
单元测试验证模块逻辑,SpringTest + JUnit/Mockito 可 Mock 依赖测 Service。
- 覆盖核心工具方法与关键分支
- 集成测试 @SpringBootTest 启动容器测接口
- 答辩如实说明测试范围与用例数
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
61. Maven 生命周期?
Maven 生命周期:validate→compile→test→package→install→deploy。
- pom 管理依赖与插件
- mvn clean package 打包
- 答辩说明构建命令
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
62. 依赖冲突?
Maven 依赖冲突用 dependency:tree 定位,exclusion 排除传递依赖或统一版本。
- NoClassDefFoundError 常因版本不一致
- Spring Boot BOM 管理版本
- 答辩说明 pom 调整经历
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
63. 模块化 JPMS?
XSS 跨站脚本:恶意脚本注入页面,防护需输出编码、CSP、富文本过滤。
- 前端 v-html 谨慎,后端转义用户输入
- Cookie 设 HttpOnly 减窃取风险
- 答辩结合评论/公告等输入场景说明
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
64. Record?
Java 16+ Record 不可变数据载体,自动生成构造/getter/equals/hashCode。
- 适合 DTO/值对象
- 组件不可变
- 答辩了解新特性即可
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
65. Java 题如何结合项目?
Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。
- 准备 2~3 段可打开的核心代码
- 避免只背八股
- 体现真的写过代码
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。
66. 最大难点?
答辩「最大难点」应讲 真实问题:现象→定位→方案→验证。
- 如联表同步、权限越权、分页性能、跨域联调等
- 体现日志、断点、SQL 优化等排错过程
- 避免空泛说「技术难」,要有故事线
结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。