高途Java开发一面面经

高途 · Java开发工程师 · 一面 · 2026-06

《面试题目》

  1. 自我介绍
  2. 算法题:LeetCode 20 有效的括号(用栈实现)
  3. ==equals 的区别?
  4. a=100b=100a == b 结果是 true 还是 false?
  5. String 是 Java 的基础数据类型吗?
  6. Java 的基础数据类型有哪些?
  7. String 是否可以被缓存复用(intern)?
  8. 什么情况下会发生栈溢出?什么情况下会发生堆溢出?
  9. 用 Java 写一段会触发堆溢出的代码
  10. 事务注解失效的场景有哪些?
  11. 事务注解失效的解决方法?
  12. 对 Skill 和 MCP 有了解吗?
  13. 反问:在后端方向学习上有什么建议?

《参考解析》

  1. ==equals 的区别== 对基本类型比较的是值,对引用类型比较的是内存地址(是否指向同一对象);equals 是 Object 类定义的方法,默认实现等同于 ==,但像 String、Integer 等类重写了 equals,比较的是内容/数值是否相等。
  2. a=100, b=100== 判断:如果 a、b 是基本类型 int,== 比较的是值,结果为 true;如果是 Integer 包装类型,由于 -128~127 范围内的 Integer 会走缓存池(IntegerCache),100 在缓存范围内,a==b 仍为 true,但超出该范围(如 200)用 Integer.valueOf 装箱则会返回 false。
  3. 栈溢出与堆溢出:栈溢出(StackOverflowError)通常由方法递归调用过深、栈帧不断压入超出线程栈大小导致,典型代码是无终止条件的递归;堆溢出(OutOfMemoryError: Java heap space)通常由持续创建大对象且无法被回收(如死循环往集合里 add 对象且未清理引用)导致堆内存耗尽。
  4. 事务注解失效的常见场景:方法内部自调用(this.method() 绕过代理)、方法非 public 修饰、异常被 try/catch 吞掉未抛出、抛出的异常不是默认回滚的 RuntimeException(需显式配置 rollbackFor)、数据库引擎不支持事务(如 MyISAM)、@Transactional 所在类未被 Spring 管理等。解决方法核心是保证事务方法必须经过 Spring AOP 代理调用,并正确配置回滚规则。