为了背 Java 八股文,我给自己撸了个 AI 背诵工作台

0 阅读3分钟

又到求职季。翻开那份 180 多题的 Java 面试题合集,我再次陷入熟悉的绝望:

  • 答案是一坨平铺的要点,背了上句忘下句
  • 就算背下来了,面试官一句"为什么这么设计"就直接破防——因为原答案根本不讲为什么
  • 背没背过全靠感觉,没有任何复习反馈

市面上的八股文库够多了,缺的不是内容,是背的方法。于是周末两天,我给自己写了个工具:八股自习室。现在开源出来。

核心思路:把每道题拆成"三段式"

每道题在原始答案之外,强制生成三个维度:

维度回答的问题面试中的作用
是什么定义与核心结论开口第一句,先给结论
为什么设计动机、底层原理追问时的深度来源
怎么做实践要点、代码示例展示工程能力

比如「==equals 的区别」,AI 生成的拓展里会有 Integer 缓存池陷阱(127 == 127 为 true、128 为 false)这样的追问预测——这才是面试官真正想聊的。

image.png

双轨生成:不配 AI 也能用

  • 规则引擎(默认可用):按启发式规则把原答案切进三个维度,零成本零依赖;
  • AI 增强(可选):接任意 OpenAI 兼容接口(DeepSeek/Qwen/GLM/Kimi…),批量生成高质量三段式和延伸知识;
  • 人工编辑的内容优先级最高,批量生成不会覆盖。

其余功能:全文搜索、基于关键词相似度的库内相关题推荐、掌握度三级标记 + 抽题自测(答题卡式进度)、AI 全库批处理(流式 / 断点续跑)、在线日志查看。

技术栈:Spring Boot 3.3 + Vue 3 + SQLite,最终产物是一个 jar,java -jar 一键启动,数据全部本地化。

踩坑实录(这部分最值钱)

1. Gradle 8.0 × JDK 21 = Unsupported class file major version 65

Spring Boot 3.3 的依赖里带 Java 21 字节码(如 spring-core 的 META-INF/versions/21),Gradle 8.0 构建脚本类加载器读不动。解法:org.gradle.java.home 指向 JDK 17 让 Gradle 本体跑在 17 上,项目字节码目标也定在 17。代价是 Boot 锁死 3.3.x——想升 Boot 得先升 Gradle ≥ 8.5。

2. AI 网关神秘 504

我的中转网关前三次调用全部 504。排查发现模型回复两个字都要 17 秒,长输出必然超过 Cloudflare 的回源超时——错误发生在网关到源站之间,客户端无解。最终方案:换快模型 + SSE 流式请求 + 失败自动重试 ×3,成功率直接拉满。

3. 模型输出的 JSON 里带裸换行

严格 JSON 不允许字符串值里有未转义的控制字符,但大模型经常这么干。Jackson 加 ALLOW_UNESCAPED_CONTROL_CHARS 特性兜底,一次解决。

4.(送分题)Windows 下运行中的 jar 被进程锁定

gradle clean 直接失败。先停服务再构建,或者构建时换个输出目录。

效果

181 题 / 16 分类全部入库,规则引擎保证每道题都有可用的三段式;配上 AI 后,每题约 30 秒生成延伸知识 + 高频追问预测,全库批处理约两小时跑完(断点续跑,中断不重复计费)。

现在它是我每天刷题的主阵地:先自己回忆 → 翻开三段式对照 → 自评记住了/没记住 → 模糊的题更容易被抽到。

image.png

开源

GitHub:**github.com/LinYian1/ja…

  • Release 页有预构建 jar,下载即用
  • 需要:JRE 17+,一个 Markdown 格式的题库文件(仓库不含题库内容,请自备并注意转载授权)
  • 可选:任意 OpenAI 兼容 API Key

写这个工具的过程比背八股本身收获更大——事务、并发、缓存这些知识点全在自己代码里踩了一遍。如果对你有用,求个 Star;踩到坑欢迎提 Issue。

下期预告(如果有人看):错题本与遗忘曲线复习排期的实现思路。