【项目】【在线判题系统】简介与准备

目录

一、简介

这个项目就是仿照leetcode做的一个阉割版项目,普通用户端提供参加竞赛(类似leetcode周赛),刷题,个人信息展示的功能,管理员端,提供用户管理,题库管理,竞赛管理三大功能。

码云链接:https://gitee.com/yj20040627/oj

使用到的技术主要有:

前端技术 vue3, html, JavaScript , css , element plus
服务架构 Spring Cloud微服务架构
代理服务器 Nginx
分布式任务调度中心 Xxl-Job
注册与发现中心/配置中心 Nacos
服务间调用 OpenFeign
网关 Spring Cloud Gateway
数据存储 MySQL
数据库持久层 MyBatis/MyBatis-Plus
缓存 Redis
消息队列 rabbitMQ
搜索引擎 ElasticSearch
加密算法 Bcrypt
身份认证 JWT
代码沙箱 Docker
对象存储 oss

二、开发环境

idea2023专业版,JDK17,Spring Boot3+,SpringCloud,Node.js 18.3以上

三、需求分析

需求分类

  • 业务需求:指反映企业或组织对系统的⽬标要求,通常来⾃与企业内部。
  • ⽤⼾需求:描述软件系统的⽤⼾期望和需求,如⽤⼾界⾯、操作⽅式、数据展⽰等
  • 系统需求:从系统⻆度来说明软件的需求,包括功能需求(系统必须实现的功能)、⾮功能需求(⽐如软件的质量,可维护性,效率等等)和设计约束(交付时的⼀些限制条件,⽐如必须采⽤国有⾃主知识产权的数据库,必须运⾏在某个操作系统下)等等。
需求种类 需求内容
业务需求 题⽬列表,刷题,竞赛的列表,竞赛⽤⼾排名,⽐赛,⾃动判题,题⽬管理,竞赛管理
⽤⼾需求 我的竞赛,我的消息,获取⽐赛结果,查看历史竞赛排名
系统需求 ⽤⼾登录、注册,⽤⼾管理,安全防护(⾝份认证、防sql注⼊、防xss攻击),SEO优化

四、架构选型

我们使用 B/S 架构和微服务架构

五、微服务划分

按照业务划分:

服务名称 具体功能
后台数据管理 题库管理、竞赛管理、C端⽤⼾管理、定时任务管理
⽤⼾服务 登录、注册、退出登录、个⼈中⼼、我的竞赛、我的消息
题库竞赛服务 题库列表、竞赛列表、竞赛报名、查看排名、竞赛或者刷题时题⽬切换、提交代码、运⾏代码、获取代码执⾏结果

按照技术划分:

服务名称 具体功能 拆分原因(不包含原有服务)
⽹关服务 统⼀的权限控制,统⼀的请求⼊⼝动态路由转发等 功能即原因
后台数据管理服务 题库管理、竞赛管理、C端⽤⼾管理
定时任务服务 定时任务增删改查、定时任务功能实现 从技术的⻆度分析定时任务的执⾏可能需要和多个服务配合完成。并且定时任务的执⾏可能会周期性或⻓时间占⽤资源。那么我们可以将定时任务管理拆分出来。
登录注册服务 登录、注册 可能需要与第三⽅的认证服务进⾏交互,存在性能瓶颈
⽤⼾服务 退出登录、个⼈中⼼、我的竞赛、我的消息
消息服务 发送消息,接收消息 消息种类较多,短信、站内信、邮件等等。和多个第三⽅组件交互
题库竞赛服务 题库列表、竞赛列表、竞赛报名、查看排名
答题服务 竞赛或者刷题时题⽬切换、提交代码、获取代码执⾏结果 竞赛、刷题时⾼频使⽤功能。
判题服务 判题 判题逻辑可能⽐较复杂,不同类型的题⽬判题逻辑不⼀致,存在⼤量复杂计算。
代码沙箱服务 运⾏代码 与第三⽅组件进⾏交互,可能是性能瓶颈

按照实际情况划分:

按照技术划分:

服务名称 具体功能 合并原因
⽹关服务 统⼀的权限控制,统⼀的请求⼊⼝动态路由转发等
后台数据管理服务 题库管理、竞赛管理、C端⽤⼾管理
定时任务服务 定时任务增删改查、定时任务功能实现(竞赛结果统计、发送消息) 消息发送仅实现系统消息,暂不是先实时通讯。掌握消息系统表结构设计、缓存设计等。
⽤⼾端服务 登录、注册、退出登录、个⼈中⼼、我的竞赛、我的消息,题库列表、竞赛列表、竞赛报名、查看排名、竞赛或者刷题时题⽬切换、提交代码、获取代码执⾏结果 登录注册不需要与第三⽅的认证服务进⾏交互。⾝份认证通过token性能可以保障。
判题+代码沙箱服务 判题、运⾏代码 题⽬只有编程题,并且仅⽀持Java编码。判题逻辑并不繁琐。性能瓶颈只是代码沙箱服务,我们需要借助docker

最终服务架构:

六、技术选型

后端技术选型:项⽬选择springcloudAlibaba作为后端核⼼框架

前端技术选型:选择易于上⼿的Vue作为前端框架。编程语⾔采⽤JavaScript、Html。⻚⾯样式使⽤语法⽐css更简洁的scss

相关推荐
nJI74egg118 小时前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·面试·java-ee
我命由我123452 天前
Visual Studio - Visual Studio 注释快捷键
java·c语言·开发语言·c++·ide·java-ee·visual studio
升鲜宝供应链及收银系统源代码服务2 天前
升鲜宝生鲜配送供应链系统 vs_车辆管理模块开发文档 PRD(一)---升鲜宝生鲜配送供应链管理系统
spring boot·java-ee·生鲜供应链源代码·供应链源代码出售·生鲜配送源代码服务·门店连锁系统源代码·猪肉生产加工系统源代码
我命由我123453 天前
Android Framework P2 - 开机启动 Zygote 进程、Zygote 的预加载机制
android·java·开发语言·python·java-ee·intellij-idea·zygote
Boop_wu3 天前
[Java项目] Spring Boot + WebSocket 实现网页在线聊天室|完整项目架构与实战讲解
spring boot·websocket·java-ee·mybatis
Chloeis Syntax4 天前
JavaEE学习日记(2)---文件操作和IO
java·笔记·学习·java-ee
缪懿5 天前
javaEE:网络编程基础
java·网络·java-ee
Boop_wu5 天前
[Java EE 进阶] SpringBoot 统一功能处理全解:拦截器、统一返回、统一异常
java·spring boot·java-ee
Paxon Zhang5 天前
JavaEE 初阶变强宝典 **线程安全问题,线程状态,锁synchronized**
java·java-ee
XiYang-DING6 天前
【Java EE】UDP(User Datagram Protocol)协议
java·udp·java-ee