卓望Java后端暑期实习一面面经

卓望 · Java后端开发(暑期实习) · 一面 · 2026-06

《面试题目》

  1. Spring 是如何实现自动装配的?
  2. Spring 常见注解有哪些?
  3. 事务注解是如何实现原子性的?
  4. 常见的设计模式有哪些?(Spring 中使用了什么设计模式)
  5. 如何创建线程?
  6. 堆里面有什么?(新生代、老年代)
  7. Set 中如何判断两个自定义的对象是否一致?
  8. 集合、索引、事务 ACID 等基础问题

《参考解析》

  1. Spring 事务注解实现原子性@Transactional 基于 AOP 动态代理,方法执行前开启数据库事务,方法正常返回后提交事务,若抛出运行时异常(默认配置)则自动回滚,本质是利用数据库本身的事务机制(redo/undo log)保证多个 SQL 操作要么全部成功要么全部失败。
  2. Set 判断自定义对象是否一致:Set 底层(如 HashSet)依赖元素的 hashCode()equals() 方法判断是否为重复元素——先比较 hashCode() 是否相同(快速筛选),哈希值相同时再用 equals() 精确比较内容,因此自定义类如果要正确存入 Set 并去重,必须同时重写这两个方法且保证逻辑一致(相等的对象哈希值必须相同)。
  3. JVM 堆内新生代/老年代:堆内存按对象存活周期分为新生代(Young Generation,又分 Eden 区和两个 Survivor 区)和老年代(Old Generation);新对象优先在 Eden 区分配,经过多次 Minor GC 仍存活的对象会晋升到老年代,老年代空间不足时触发 Major GC/Full GC,这种分代设计基于”大部分对象朝生夕死”的经验假设,能提高垃圾回收效率。