面试鸭 · 面试刷题平台
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 调用,以及题目的全量和定时增量同步任务。增量任务每分钟扫描最近五分钟更新记录,包含逻辑删除数据。

本地部署实践
- 运行环境适配:选用本机 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。