面试鸭 · 面试刷题平台

Next.js 14, React 18, TypeScript, Spring Boot 2.7, MyBatis-Plus, MySQL, Redis, Elasticsearch

面试鸭 · 面试刷题平台

基于程序员鱼皮的 mianshiya-next 开源教学项目,完成面试刷题平台的本地部署、Elasticsearch 检索接通及启动配置适配。本页展示我的部署实践和已核对的模块设计。

项目功能

  • 题库与刷题:浏览题库、按题目阅读题解,支持用户登录与题目搜索。
  • 内容管理:管理员维护题库、题目与题解,并建立题目和题库的关联。
  • 分词检索:通过 Elasticsearch 与 IK 分词查询题目,结合标签过滤、排序和分页。

架构与模块设计

上图为本地部署架构。Next.js 14、React 18 与 TypeScript 提供服务端渲染界面,Ant Design 构建管理和刷题组件,Redux 管理前端状态。Spring Boot 2.7 与 MyBatis-Plus 实现业务接口,MySQL 保存题目、题库和用户,Redis 支撑会话与缓存,Elasticsearch 承担分词检索。

业务数据库与搜索索引分别承担事务存储和文本查询。已启用 QuestionEsDTO 的索引声明、控制器的 searchFromEs 调用,以及题目的全量和定时增量同步任务。增量任务每分钟扫描最近五分钟更新记录,包含逻辑删除数据。

面试鸭题目从 MySQL 同步到 Elasticsearch,再返回检索结果的流程
检索与索引同步流程 · 根据本地代码绘制

本地部署实践

  • 运行环境适配:选用本机 JDK 17,显式设置后端端口 8101,避免环境变量影响服务端口。
  • 数据与检索接通:初始化 mianshiya 数据库,接通 question 索引、IK 分词与题目搜索接口。
  • 启动脚本:新增 start-all.bat、stop-all.bat 和独立服务脚本,组织 Redis、ES、后端和前端的启动流程。
  • 资源配置:ES 堆固定为 1 GB,后端堆上限 512 MB、元空间上限 256 MB;补充连接池收紧配置和部署记录。

上游还包含 HotKey、Sentinel、Nacos 等扩展设计;当前部署未启用 Nacos,未验证这些扩展组件的生产效果。本地免密服务配置仅用于开发环境。

服务清单

服务 端口 职责
Next.js 3000 题库、题目与管理页面
Spring Boot 8101 /api 业务接口和接口文档
MySQL 8 3306 用户、题库与题目数据
Redis 6379 会话与缓存
Elasticsearch 7.17 9200 IK 分词与题目检索

验证记录与当前状态

此前部署记录已验证登录、题库和题目接口,ES question 索引同步 20 条文档,关键词“Java”能够命中题目,前端首页也曾成功渲染。这些结果来自已有部署记录,本次未重新启动全套服务复验。

2026 年 10 月 11 日检查时,前端 3000 和后端 8101 均未监听;最近记录还报告后端在限制堆内存后再次退出。当前定位为本地部署实践,持续运行稳定性待排查和复验,尚未提供线上演示。

后续重点是核查 JVM 错误日志与系统提交内存、确认外部连接池配置是否实际加载,以及用持续运行测试验证稳定性。堆上限调整不能直接作为问题已解决的依据。

源码与运行方式

源码入口指向 上游开源仓库。本地配置适配、启动脚本和部署记录保存在我的本机项目中;本页未上传含数据库凭据的配置文件。启动后可在本机访问 http://localhost:3000 和接口文档 http://localhost:8101/api/doc.html。