5. Java 基础答辩

本章收录 66 道老师常问问题,高频题靠前。回答时尽量结合自己的项目举例。

1. Java四大基本特性?

  1. 面向对象、跨平台、健壮性、多线程。依托JVM实现一次编译到处运行
  2. 自动垃圾回收避免内存泄漏
  3. 严格的语法校验和异常机制提升健壮性
  4. 支持多线程并发处理,提升程序运行效率。

2. 面向对象三大特性详细场景化解释?

  1. 封装:将数据库工具类的方法私有化,仅对外提供公共调用方法,隐藏内部细节
  2. 继承:自定义业务父类,子类复用通用方法,减少代码冗余
  3. 多态:父类引用指向子类对象,不同子类重写方法实现不同业务逻辑,提升扩展性。

3. 重载和重写的详细区别?

重载:同类中、方法名相同、参数不同、编译期、与返回值无关;重写:父子类、方法名参数返回值完全一致、运行期、权限不低于父类。重载是多态编译体现,重写是多态运行体现。

4. HashMap JDK1.8底层结构、哈希冲突解决?

  1. 底层数组+链表+红黑树。通过hash算法定位下标,冲突时形成链表
  2. 链表长度>8且数组长度>64时转为红黑树,降低查询时间复杂度
  3. 负载因子默认0.75,达到阈值自动扩容。

5. 异常体系分类与处理方式?

分为编译时异常和运行时异常。编译异常必须捕获或抛出,如IO异常;运行时异常无需强制处理,如空指针、数组越界。项目中使用try-catch捕获局部异常,全局异常统一处理全局报错。

6. final、finally、finalize区别?

  1. final修饰变量不可变、方法不可重写、类不可继承
  2. finally用于异常处理,代码一定会执行
  3. finalize是垃圾回收前置方法,现已废弃不推荐使用。

7. 为什么选 Java?

系统安全:登录鉴权、密码哈希、参数校验、防 SQL 注入/XSS、防越权、HTTPS。

  1. 不信任前端
  2. 敏感操作二次验证
  3. 答辩逐条对应实现

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

8. 面向对象三大特性?结合项目说明

  1. 封装:实体字段私有 + getter/setter
  2. 继承:公共基类(如 BaseEntity)
  3. 多态:接口多实现,便于扩展

9. == 与 equals 区别?

==对于基本类型比较数值,引用类型比较内存地址;equals是Object方法,重写后比较对象内容和属性,项目中字符串、对象对比均使用equals。

10. String、StringBuilder、StringBuffer核心区别?

  1. String不可变,每次拼接生成新对象,适合静态字符串
  2. StringBuilder可变、线程不安全、效率最高,单线程专用
  3. StringBuffer可变、线程安全、效率低,多线程并发场景使用。

11. HashMap 原理简述?

系统安全:登录鉴权、密码哈希、参数校验、防 SQL 注入/XSS、防越权、HTTPS。

  1. 不信任前端
  2. 敏感操作二次验证
  3. 答辩逐条对应实现

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

12. ArrayList与LinkedList底层与适用场景?

ArrayList基于动态数组,查询快、随机访问优,中间增删慢,适合查询多、修改少场景;LinkedList基于双向链表,头尾增删快、遍历查询慢,适合频繁插入删除、查询少的场景。

13. 接口和抽象类的区别?

抽象类有构造方法、可包含普通变量和普通方法、单继承;接口无构造方法、变量常量、默认抽象方法、多实现,项目中接口用于定义规范,抽象类用于抽取通用代码。

14. 异常体系?受检与非受检

IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。

  1. 文件读写用 BufferedReader
  2. 用完 close 或 try-with-resources
  3. 答辩说明上传下载用过哪些类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

15. 线程与并发你会什么?

@Async 将方法放线程池异步执行,适合发邮件、写日志等非主路径任务。

  1. 需 @EnableAsync 与自定义 Executor
  2. 异步方法同类调用不生效
  3. 答辩说明是否使用及线程池参数

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

16. JVM 内存大致分区?

JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。

  1. 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
  2. JVM 负责 GC、类加载
  3. 答辩说清三者关系

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

17. JDK / JRE / JVM?

JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。

  1. 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
  2. JVM 负责 GC、类加载
  3. 答辩说清三者关系

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

18. 重载与重写?

重载:同类同名不同参,编译期绑定;重写:子类覆盖父类方法,运行期多态。

  1. 重写权限不能更严,返回值协变
  2. 项目中父类接口多实现
  3. 答辩各举一例

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

19. final?

final 修饰类不可继承、方法不可重写、变量引用不可改(对象内容可变)。

  1. 常量命名规范
  2. 工具类 final 防继承
  3. 答辩说明使用场景

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

20. static?

static 属于类而非实例,静态方法/变量随类加载,无 this。

  1. 工具方法常用 static
  2. 静态变量注意线程安全
  3. 答辩对比实例成员

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

21. this / super?

this 指向当前对象,super 调用父类构造或方法。

  1. 构造器链 super()
  2. 区分成员隐藏
  3. 答辩结合实体类举例

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

22. 包与访问修饰符?

访问修饰符:public 任意;protected 子类+包;默认包内;private 本类。

  1. 封装原则尽量 private
  2. 接口 public 暴露能力
  3. 答辩体现封装设计

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

23. 包装类型?

包装类型 Integer 等将基本类型对象化,用于集合与 null;注意自动拆箱 NPE。

  1. Integer 缓存 -128~127
  2. 比较用 equals 非 ==
  3. 答辩说明空值处理

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

24. 自动装箱?

自动装箱/拆箱在基本类型与包装间转换,简化代码但可能 NPE 与性能开销。

  1. 循环中注意避免反复装箱
  2. 判空后再拆箱
  3. 答辩结合参数接收说明

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

25. 深拷贝浅拷贝?

浅拷贝共享引用对象;深拷贝递归复制引用对象,互不影响。

  1. Cloneable、序列化、工具类实现
  2. 集合拷贝注意层级
  3. 答辩了解概念即可

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

26. Comparable?

Comparable 自然排序 compareTo;Comparator 外部比较器,灵活多策略排序。

  1. 列表 sort 可传 Comparator
  2. Lambda 简化写法
  3. 答辩结合列表排序场景

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

27. Comparator?

Comparable 自然排序 compareTo;Comparator 外部比较器,灵活多策略排序。

  1. 列表 sort 可传 Comparator
  2. Lambda 简化写法
  3. 答辩结合列表排序场景

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

28. Generics?

泛型在编译期约束类型,避免强转与 ClassCastException,如 List<User>。

  1. 通配符 ? extends/super
  2. 擦除机制了解即可
  3. 答辩说明集合类型安全

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

29. 通配符?

this 指向当前对象,super 调用父类构造或方法。

  1. 构造器链 super()
  2. 区分成员隐藏
  3. 答辩结合实体类举例

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

30. 反射用途?

反射运行时获取类信息、调用方法,Spring/MyBatis 框架底层大量使用。

  1. Class.forName、getDeclaredMethod
  2. 破坏封装,性能较低
  3. 答辩说明框架为何能注入

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

31. 注解用途?

注解是元数据,@Override/@Transactional 等由编译器或框架处理。

  1. 自定义注解+ AOP 实现
  2. 运行时 RetentionPolicy.RUNTIME
  3. 答辩指出项目中常用注解

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

32. Stream 用途?

Stream API 函数式处理集合:filter/map/collect,链式可读。

  1. parallelStream 慎用
  2. 终端操作触发计算
  3. 答辩简化列表转换代码

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

33. Optional?

applicationContext.xml 是 Spring 核心配置文件,声明 Bean、扫描、数据源等。

  1. 与 spring-mvc.xml 分工:根容器 vs Web 容器
  2. Boot 项目多用 JavaConfig + yml 替代 XML
  3. 答辩对比 SSM 手工装配与 Boot 自动配置差异

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

34. Lambda?

Lambda 简化函数式接口实现,(a,b)->a+b,配合 Stream 使用。

  1. 变量需 effectively final
  2. 方法引用 Class::method
  3. 答辩体现 Java 8+ 特性

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

35. 枚举?

枚举/constants 管理订单状态等,状态机规定合法迁移,防止非法跳转。

  1. 如 待支付→已支付→已完成
  2. 更新时校验当前状态
  3. 答辩结合业务状态字段

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

36. IO 与 NIO?

IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。

  1. 文件读写用 BufferedReader
  2. 用完 close 或 try-with-resources
  3. 答辩说明上传下载用过哪些类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

37. 序列化?

序列化对象转字节流传输或持久化,实现 Serializable;注意 serialVersionUID。

  1. Redis 存对象、RPC 传参
  2. 敏感字段 transient
  3. 答辩了解用途

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

38. equals 契约?

equals 比较对象内容,重写需满足自反、对称、传递、一致;String 已重写。

  1. == 比较引用
  2. 业务比较用 equals
  3. 答辩结合实体比较

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

39. hashCode 为何一起重写?

重载:同类同名不同参,编译期绑定;重写:子类覆盖父类方法,运行期多态。

  1. 重写权限不能更严,返回值协变
  2. 项目中父类接口多实现
  3. 答辩各举一例

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

40. ConcurrentHashMap?

ConcurrentHashMap 分段/CAS 保证并发安全,比 Hashtable 性能更好。

  1. 读多写多缓存场景
  2. 不允许 null key/value
  3. 答辩对比 HashMap 线程不安全

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

41. CopyOnWrite?

统一异常处理避免把堆栈直接返回前端,提升体验与安全。

  1. @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
  2. 封装统一 Result(code/msg/data)
  3. 记录日志便于排错,答辩可展示全局异常类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

42. 线程池参数?

线程池复用线程、限制并发,避免无界 new Thread 导致资源耗尽。

  1. 核心/最大线程数、队列、拒绝策略
  2. Boot 可 @Bean ThreadPoolTaskExecutor
  3. 答辩结合 @Async 或定时任务说明

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

43. synchronized?

统一异常处理避免把堆栈直接返回前端,提升体验与安全。

  1. @ControllerAdvice + @ExceptionHandler 捕获业务/系统异常
  2. 封装统一 Result(code/msg/data)
  3. 记录日志便于排错,答辩可展示全局异常类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

44. volatile?

DTO/VO/Entity 分层:Entity 映射表,DTO 传参,VO 返前端,避免暴露密码等敏感列。

  1. Controller 接 DTO,Service 转 Entity
  2. 返回 VO 控制字段可见性
  3. 答辩体现规范分层意识

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

45. 死锁条件?

死锁四条件:互斥、占有且等待、不可抢占、循环等待;避免固定加锁顺序。

  1. tryLock 超时
  2. 银行家算法了解
  3. 答辩说明项目是否多线程

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

46. GC 基本概念?

GC 自动回收无引用对象,分代:新生代 Minor GC、老年代 Full GC。

  1. 强软弱虚引用了解
  2. 避免内存泄漏
  3. 答辩不必背调参细节

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

47. 类加载过程?

类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。

  1. 自定义 ClassLoader 了解
  2. Tomcat 可打破委派
  3. 答辩说明 JVM 如何找到类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

48. 双亲委派?

类加载:加载→验证→准备→解析→初始化;双亲委派先让父加载器加载,防核心类被篡改。

  1. 自定义 ClassLoader 了解
  2. Tomcat 可打破委派
  3. 答辩说明 JVM 如何找到类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

49. 设计模式举例?

常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。

  1. 结合项目工具类或 Service
  2. 不要空背定义
  3. 答辩举一处实际结构

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

50. 单例写法?

常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。

  1. 结合项目工具类或 Service
  2. 不要空背定义
  3. 答辩举一处实际结构

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

51. 代理模式?

常用模式:单例(全局唯一)、工厂(创建解耦)、模板(固定流程扩展步骤)、代理(AOP 基础)。

  1. 结合项目工具类或 Service
  2. 不要空背定义
  3. 答辩举一处实际结构

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

52. JDK 代理与 CGLIB?

JDK 开发工具包(编译+运行),JRE 运行环境,JVM 执行字节码的虚拟机。

  1. 开发装 JDK,部署可只需 JRE(Boot jar 可带 JRE)
  2. JVM 负责 GC、类加载
  3. 答辩说清三者关系

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

53. BIO/NIO?

IO 阻塞流式读写;NIO Channel/Buffer 非阻塞,适合高并发网络(了解即可)。

  1. 文件读写用 BufferedReader
  2. 用完 close 或 try-with-resources
  3. 答辩说明上传下载用过哪些类

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

54. 时间 API?

Java 8 时间 API:LocalDateTime 线程安全,DateTimeFormatter 格式化,替代 SimpleDateFormat。

  1. Instant 存 UTC
  2. 与数据库 datetime 映射
  3. 答辩说明接口日期字段

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

55. BigDecimal?

BigDecimal 精确小数,金额计算禁用 float/double,用 String 构造。

  1. ROUND_HALF_UP 四舍五入
  2. compareTo 比较
  3. 答辩说明订单金额字段

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

56. 正则注意?

简要结论:校验格式。

关于「正则注意」,答辩建议按「概念解释 → 原理要点 → 项目应用」三步展开:

  1. 先用一句话说清定义或结论(如上)
  2. 补充 2~3 个技术要点或注意事项,体现理解深度
  3. 结合项目 Java 代码,结合自己的代码、配置或表结构举例,避免只背关键词

57. 编码字符集?

统一 UTF-8 编码避免中文乱码:CharacterEncodingFilter、数据库 utf8mb4、JSON UTF-8。

  1. 请求/响应/页面/库表字符集一致
  2. SSM 在 web.xml 配置过滤器
  3. 答辩可说明曾遇到的乱码排查过程

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

58. 空指针如何防?

防 NPE:判空、Optional、Objects.requireNonNull、@NotNull 校验、默认值。

  1. 链式调用前每层检查
  2. 日志打印前判空
  3. 答辩说明踩坑与修复

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

59. 日志怎么打?

日志用于排错、审计与性能分析,常用 SLF4J + Logback/Log4j2。

  1. 分级别:ERROR/WARN/INFO/DEBUG
  2. 关键业务、异常、慢接口应记录
  3. 生产避免打印敏感信息与过量 DEBUG

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

60. 单元测试?

单元测试验证模块逻辑,SpringTest + JUnit/Mockito 可 Mock 依赖测 Service。

  1. 覆盖核心工具方法与关键分支
  2. 集成测试 @SpringBootTest 启动容器测接口
  3. 答辩如实说明测试范围与用例数

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

61. Maven 生命周期?

Maven 生命周期:validate→compile→test→package→install→deploy。

  1. pom 管理依赖与插件
  2. mvn clean package 打包
  3. 答辩说明构建命令

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

62. 依赖冲突?

Maven 依赖冲突用 dependency:tree 定位,exclusion 排除传递依赖或统一版本。

  1. NoClassDefFoundError 常因版本不一致
  2. Spring Boot BOM 管理版本
  3. 答辩说明 pom 调整经历

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

63. 模块化 JPMS?

XSS 跨站脚本:恶意脚本注入页面,防护需输出编码、CSP、富文本过滤。

  1. 前端 v-html 谨慎,后端转义用户输入
  2. Cookie 设 HttpOnly 减窃取风险
  3. 答辩结合评论/公告等输入场景说明

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

64. Record?

Java 16+ Record 不可变数据载体,自动生成构造/getter/equals/hashCode。

  1. 适合 DTO/值对象
  2. 组件不可变
  3. 答辩了解新特性即可

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

65. Java 题如何结合项目?

Java 基础题答辩策略:先答概念,再指项目中类/方法/配置印证,最后说注意点。

  1. 准备 2~3 段可打开的核心代码
  2. 避免只背八股
  3. 体现真的写过代码

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。

66. 最大难点?

答辩「最大难点」应讲 真实问题:现象→定位→方案→验证。

  1. 如联表同步、权限越权、分页性能、跨域联调等
  2. 体现日志、断点、SQL 优化等排错过程
  3. 避免空泛说「技术难」,要有故事线

结合毕设:结合项目 Java 代码,可指出具体类名、配置项或表结构,避免只背概念。