Memory 面试刷题平台-开发文档

项目总览

项目介绍

2025 年 4 月 24 日

Memory 面试刷题平台是一款基于 Next.js + Spring Boot + Redis + MySQL+ Elasticsearch 的 面试刷题平台,运用 Druid + Hotkey + SaToken + Sentinel 提高了系统的性能和安全性。

管理员可以创建颖库、题目和题解;用户可以注册登录、分词检索题目、在线刷题并查看刷题记录日历图。

此外,系统使用数据库连接池、热 Key 探测、缓存、高级数据结构等来提升性能。

通过流量控制、熔断、动态 IP 黑白名单过滤、同端登录冲突检测、分级反爬虫策略来提升系统和内容的安全性。

从0到1的真实企业级项目设计开发,绝对让你收获满满!

项目收获

2025 年 4 月 24 日

该项目可以学到通用的项目开发方法和架构设计套路,可以学到:

  • 如何拆解复杂业务,从0开始设计实现系统?

  • 如何快速构建 Next.js 服务端渲染网站和后端项目?

  • 如何结合 Redis + Caffeine + Hotkey 构建高性能实时缓存?

  • 如何利用 Elasticsearch 实现灵活高效的内容搜索?

  • 如何I5用 Redisson 高级数据结构,实现高性能的接口?

  • 如何实现流量控制和动态IP 黑白名单,增强网站安全性?

  • 如何实现登录冲突检测和分级反爬虫策略,保护网站内容?.

  • 如何快速上线项目并增强可用性?.

此外,还能学会很多作图、思考问题、对比方案的方法,提升排查问题、自主解决 Bug 的能力。

功能结构

2025 年 4 月 24 日

image-20250424224059424

用户模块

  • 用户注册
  • 用户登录(账号密码)
  • 管理员】管理用户-增删改查

题库模块

  • 查看题库列表

  • 查看题库详情(展示题库下的题目)

  • 【管理员】管理题库-增删改查。

题目模块

  • 题目搜索
  • 查看题目详情(进入刷题页面)
  • 【管理员】管理题目-增删改查(比如按照题库查询题目、修改题目所属题库等)。

高级功能

题目批量管理

  • 【管理员】批量向题库添加题目。
  • 【管理员】批量从题库移除题目
  • 【管理员】批量删除题目。

分词题目搜索,用户刷题记录日历图,自动缓存热门题目,网站流量控制和熔断,动态IP黑白名单过滤,同端登录冲突检测,分级题目反爬虫策略。

库表设计

2025 年 4 月 24 日

用户表,题库表,题目表,题库题目关系表。

代码生成器 | MyBatis-Plus (baomidou.com)

代码生成 - SQL之父 (yupi.icu)

快速开始 | Knife4j (xiaominfo.com)

初始化

2025 年 4 月 24 日

数据访问层代码生成,业务代码生成。

业务接口梳理

根据之前整理的功能列表,分析核心业务流程需要调用的接口:

用户模块

  • 用户注册:已完成 万用模板自带
  • 用户登录(账号密码):已完成万用模板自带
  • 【管理员】管理用户-增删改查:已完成万用模板自带

题库模块

  • 查看题库列表:分页获取题库接口,已通过生成器生成,需要确认
  • 查看题库详情(展示题库下的题目):了根据 id 获取题库详情接口,需要开发
  • 【管理员】管理题库-增删改查:??已通过生成器生成,需要确认

题目模块

  • 题目搜索:分页获取题目接口,已通过生成器生成,需要确认
  • 查看题目详情(进入刷题页面)根据 id 获取题目详情接口,需要确认
  • 【管理员】管理题目-增删改查:”了已通过生成器生成,需要确认
  • 【管理员】按照题库查询题目:根据题库id 获取题目列表,需要开发管理员】修改题目所属题库等:?修改题目所属题库接口,需要开发

最后,通过接口文档来完整测试一遍业务流程即可

后端业务

2025 年 4 月 25 日

拿到源码,研究下代码生成器,再尝试启动项目。

配置文件中文问题果然这么解决了,修改全局文件编码方式,再重启下 IDEA 才生效,项目启动成功。

image-20250425144140901

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(MainApplication.class, args);
long start = System.currentTimeMillis();

long time = (System.currentTimeMillis() - start) / 1000;
String info = "启动完成,耗时%d秒,swagger访问链接:http://%s:%s%s/doc.html";
String address = ctx.getEnvironment().getProperty("server.address");
String port = ctx.getEnvironment().getProperty("server.port");
String path = ctx.getEnvironment().getProperty("server.servlet.context-path");
log.info(String.format(info, time, address, port, path));
}

Memory 面试刷题平台-开发文档
https://test.atomgit.net/blog/2025/04/24/Memory 面试刷题平台-开发文档/
作者
Memory
发布于
2025年4月24日
许可协议