面灵AI→

某小厂后端开发实习一面:Java 版本、Spring 事务与 AI 编程认知

轮次
一面
时间
2026-10
来源
牛客网

《面试题目》

  1. 聊一聊学校方面的情况。
  2. 现在来实习,学业是怎么安排的?
  3. 有面过其他的公司吗?
  4. 学校有没有给过动手的项目给你们做?
  5. 代码是手写的多还是 AI 写得多?
  6. 用的什么工具?国内模型试过吗?字节、阿里、腾讯这几家的 IDE 你觉得哪个更好用一点?
  7. 习惯用 Java 几?各版本之间的差异和特性有了解过吗?虚拟机有了解吗?
  8. 除了 Java 还会不会其他语言?
  9. 学校鼓励考公考编,那你怎么不去?
  10. 数据结构和算法还记得吗?
  11. 介绍一下你的第一个项目;这是练手的作业还是什么?是商用项目吗?
  12. 介绍一下第二个项目;解决了什么问题?采用的什么技术?
  13. 目前 Java 写得多还是 Python 写得多?
  14. 你觉得程序员和 AI 写的代码各有什么差别?AI 真的会取代程序员吗?为什么?
  15. 那程序员在整个软件开发过程中要承担怎样的角色?
  16. 怎么理解面向对象?能解决什么问题,有什么好处?
  17. Spring 有了解吗?通过什么方式进行事务管理?
  18. 你是自己自学吗,还是跟着老师走?
  19. 自己的职业规划是怎么个计划?
  20. 这个大背景下,个人程序员如何提升编程能力?
  21. 要这样子说的话,为什么不认为是 AI 还不够智能呢?

《参考解析》

Java 版本与虚拟机:JDK 8 是分水岭(Lambda、Stream、新日期 API、接口默认方法);JDK 11 加入 var 局部变量推断(10 起)、标准 HTTP Client 和单文件源码直接运行;JDK 17 是 LTS,带来 sealed 密封类、record、文本块与 switch 模式匹配;JDK 21 把虚拟线程转正。虚拟机按「类加载—运行时数据区—垃圾回收」回答:类加载经历加载、验证、准备、解析、初始化,运行时数据区包括堆、方法区(1.8 后为元空间)、虚拟机栈、本地方法栈和程序计数器,GC 讲分代假说与 G1 的分区回收即可。

Spring 事务管理:分声明式和编程式两种。声明式用 @Transactional,底层是 AOP 代理;编程式用 TransactionTemplate。传播行为记常用的三个:REQUIRED 加入当前事务,REQUIRES_NEW 挂起当前事务另开一个,NESTED 用保存点实现嵌套回滚。更常被追问的是失效场景:同类内部方法调用不走代理、方法不是 public、异常被 catch 吞掉、默认只对 RuntimeException 和 Error 回滚(受检异常要配 rollbackFor)、事务里另起线程。答完补一句事务边界放在 Service 层、粒度要短。

面向对象:核心是封装、继承、多态、抽象,目的是控制复杂度:封装把变化关在边界内,继承复用共性,多态让调用方依赖抽象而不是实现,新增实现时不用改调用方。Java 的多态靠「继承或实现接口 + 重写 + 父类引用指向子类对象」,运行时由 JVM 的虚方法分派决定调用哪个版本。能结合项目举一个面向接口编程的例子,比背定义更有说服力。

AI 编程与程序员角色:差别不在谁写得快,而在约束条件。AI 擅长样板代码、补全、单测和局部重构,弱在业务上下文、历史包袱、性能与安全等非功能需求,也不能为结果负责。程序员的价值前移到问题定义、方案权衡、边界与异常设计、验证和线上兜底。被追问「是不是 AI 还不够智能」时,可以承认模型会继续变强,但需求来源、验收标准和责任主体仍在人这边,结论落在分工变化而非简单取代。

项目介绍:按「背景—目标—方案—结果」讲。先用一句话说清项目解决谁的什么问题,再说自己负责的模块和选型理由,最后给可验证的结果,如耗时、并发量或上线后的变化。被问「练手还是商用」照实回答:练手项目就讲踩过的坑和取舍,商用项目注意别透露敏感信息。第二个项目要讲出与第一个的差异,别让两个项目技术栈完全重复。