某小厂后端开发实习一面:Java 版本、Spring 事务与 AI 编程认知
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 聊一聊学校方面的情况。
- 现在来实习,学业是怎么安排的?
- 有面过其他的公司吗?
- 学校有没有给过动手的项目给你们做?
- 代码是手写的多还是 AI 写得多?
- 用的什么工具?国内模型试过吗?字节、阿里、腾讯这几家的 IDE 你觉得哪个更好用一点?
- 习惯用 Java 几?各版本之间的差异和特性有了解过吗?虚拟机有了解吗?
- 除了 Java 还会不会其他语言?
- 学校鼓励考公考编,那你怎么不去?
- 数据结构和算法还记得吗?
- 介绍一下你的第一个项目;这是练手的作业还是什么?是商用项目吗?
- 介绍一下第二个项目;解决了什么问题?采用的什么技术?
- 目前 Java 写得多还是 Python 写得多?
- 你觉得程序员和 AI 写的代码各有什么差别?AI 真的会取代程序员吗?为什么?
- 那程序员在整个软件开发过程中要承担怎样的角色?
- 怎么理解面向对象?能解决什么问题,有什么好处?
- Spring 有了解吗?通过什么方式进行事务管理?
- 你是自己自学吗,还是跟着老师走?
- 自己的职业规划是怎么个计划?
- 这个大背景下,个人程序员如何提升编程能力?
- 要这样子说的话,为什么不认为是 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 还不够智能」时,可以承认模型会继续变强,但需求来源、验收标准和责任主体仍在人这边,结论落在分工变化而非简单取代。
项目介绍:按「背景—目标—方案—结果」讲。先用一句话说清项目解决谁的什么问题,再说自己负责的模块和选型理由,最后给可验证的结果,如耗时、并发量或上线后的变化。被问「练手还是商用」照实回答:练手项目就讲踩过的坑和取舍,商用项目注意别透露敏感信息。第二个项目要讲出与第一个的差异,别让两个项目技术栈完全重复。