
pandora潘多拉——微服务刷题平台(求star版)
项目分享
因为之前一些原因一直没有时间去分享新写的项目,本项目一共有两个版本,大单体和微服务,该项目使用了多端部署和Nginx进行负载均衡。
潘多拉魔盒 - 面试刷题平台
基于Next.js + Spring Cloud + Redis + MySQL + Elasticsearch 构建的程序员智能刷题平台。
致力于程序员刷题,帮助每个人成为编程面试大师🚀。。
持续更新中~
一、项目介绍🚀
二、架构设计图🎨
- 性能提升
- 运用 Druid 数据库连接池技术,有效管理数据库连接,减少连接创建和销毁的开销,提升系统性能。
- 结合 JD- HotKey 热 Key 探测技术,及时发现热点数据,优化系统对高频请求的处理。
- 利用 Redis 缓存技术,缓存常用数据,减少数据库查询次数,加快数据访问速度。
- 使用高级数据结构,进一步优化数据处理逻辑,提高系统整体性能。
- 安全保障
- 采用 Sa - Token 实现可靠的用户认证和授权机制,确保用户数据安全和操作合法性。
- 借助 Sentinel 进行流量控制和熔断处理,防止系统因突发大流量而崩溃,保障系统的稳定性和可用性。
- 通过动态 IP 黑白名单过滤技术,有效阻止恶意 IP 的访问,增强系统的网络安全性。
- 实现同端登录冲突检测,防止账号在多端异常登录,保护用户账号安全。
- 运用分级反爬虫策略,抵御恶意爬虫对系统内容的非法获取,确保平台数据的安全性。
四、技术选型
前端
- React 18 框架
- ⭐️ Next.js 服务端渲染
- ⭐️ Redux 状态管理
- Ant Design 组件库
- 富文本编辑器组件
- ⭐️ 前端工程化:ESLint + Prettier + TypeScript
- ⭐️ OpenAPI 前端代码生成
后端
- Java Spring Boot 框架 + Maven 多模块构建
- MySQL 数据库 + MyBatis-Plus 框架 + MyBatis X
- Redis 分布式缓存 + Caffeine 本地缓存
- Redission 分布式锁 + BitMap + BloomFilter
- ⭐️ Elasticsearch 搜索引擎
- ⭐️ Druid 数据库连接池 + 并发编程
- ⭐️ Sa-Token 权限控制
- ⭐️ HotKey 热点探测
- 微服务架构(SpringCloud Alibaba)
- ⭐️ Sentinel 流量控制、限流熔断
- ⭐️ Nacos 配置中心、注册中心
- ⭐️ GateWay 微服务网关
- ⭐️ OpenFeign 远程调用
- ⭐️ 多角度项目优化:性能、安全性、可用性
环境搭建
🎉后端环境搭建
后端项目使用 SpringBoot 开发,需要安装 JDK 17 、 MySQL 数据库、Redis、Elasticsearch 。
在项目目录下的application.yml修改自己的启动环境spring.profiles.active = dev
然后找到同级文件application-dev.properties,填写自己的环境配置(MySQL、Redis)。
🎉 前端环境搭建
前端项目使用 React 开发,需要安装 Node.js(Node 18 版本,请保持一致) 、npm 。
在项目目录下执行npm install安装依赖,然后执行npm run start启动项目。
五、功能介绍
简单介绍(粗略)
- 管理员功能
- 用户管理:管理用户信息,包括注册、登录、权限管理等。
- 题库管理:可轻松管理题库,包括创建新库、为不同场景准备题目集合。
- 题目管理:能在已有题库中添加多种类型题目。
- 题目详情:支持多种类型题目,包括单选、多选、判断、填空、编程等。
- 题解管理:为题目添加详细题解,助力用户学习。
- 用户功能
- 注册与登录:便捷注册登录,开启刷题。
- 知识论坛:方便用户交流学习。
- 分词检索题目:借助 Elasticsearch 分词检索快速找题。
- 在线刷题:在平台刷题,答题情况被实时记录。
- 模拟面试:模拟面试,根据题目进行答题。
- 在线编程:在线编程,支持多种语言,实时编译运行。
- 刷题记录查看:通过日历图查看刷题历程和进度。
- 安全性
- 缓存热点与热 key:用三级缓存技术处理热点数据和热 key,监测访问频率,优化性能,保障稳定。
- 限流与熔断:运用限流与熔断机制,监控和控制流量,过载时防止系统崩溃。
- IP 管理:采用 IP 黑白名单技术,区分可信和恶意 IP,保障网络安全。
- 同端登录检测:通过同端登录检测机制,监控账号状态,防止异常登录,保护账号安全。
- 反爬虫策略:依据分级反爬虫策略,对访问请求监测,超限制先警告后封号,保护平台。
功能展示(详尽)
-
管理员功能
-
题库管理
-
题目管理
-
题库详情
-
题解管理
略
-
-
用户功能
-
注册与登录
略
-
分词检索题目
-
在线刷题
-
在线编程
-
模拟面试
-
-
刷题记录日历图
-
知识论坛
-
论坛帖子详情
-
论坛帖子点赞/收藏/评论
-
-
安全性
-
缓存热点与热key
-
限流与熔断
-
IP 黑白名单
-
同端登录冲突检测
-
分级反爬虫策略
- 访问次数超过一定限制,发送邮件
- 访问次数超过限制太多,封号处理
-
六、nginx配置(仅供参考)
▼text复制代码upstream backend { server 192.168.1.128:8081 weight=1; server 192.168.1.128:8082 weight=2; } server { listen 80; server_name 0.0.0.0; location / { proxy_pass http://backend; } }
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
请问一下,OJ 项目的 rabbitMQ ,之前电脑装过 3.11.10版本,看到课程中使用的是 3.12.4 的版本,请问我如果不换还是使用之前的版本是否可行?
0
请问一下老师,在OJ 项目中,权限拦截那 使用的是: Spring Cloud Gateway 的 Filter 请求拦截器(内部接口拦截) + (可以进行扩展的 JWT token 实现)。我想根据目前学到的知识,这样做是否可以: Spring Cloud Gateway 的 Filter 请求拦截器 (内部接口拦截) + @AuthCheck 自定义注解 + AOP 切面这种方法
1
智能面试刷题平台学习笔记(前端)(1)
4
有大佬帮忙远程布局部署一下鱼皮的oj判题系统吗?有偿
1
OJ在线判题系统(一)
3
