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

目录

一、简介

这个项目就是仿照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

相关推荐
我登哥MVP14 天前
SpringCloud Alibaba 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven
我命由我1234514 天前
Jetpack Room - Room 查询返回列表无需判空、LIKE 关键字
android·java·开发语言·java-ee·android jetpack·android-studio·android runtime
Yvonne爱编码15 天前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
我命由我1234515 天前
RFID 技术极简理解
java·c语言·c++·嵌入式硬件·物联网·visualstudio·java-ee
CoderYanger15 天前
Java EE:6.网络编程套接字(第二弹)
java·网络·程序人生·面试·职场和发展·java-ee·学习方法
我命由我1234515 天前
Android 开发问题:EditText 控件的 android:imeOptions=“actionDone“ 属性不生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
我登哥MVP15 天前
SpringCloud Alibaba 核心组件解析:服务熔断和降级
java·spring boot·后端·spring·spring cloud·java-ee·maven
我命由我1234515 天前
Android 开发问题:获取到的 Android ID 发生了变化
android·java·开发语言·java-ee·android studio·android jetpack·android runtime
我登哥MVP15 天前
SpringCloud Alibaba 核心组件解析:服务调用和负载均衡
java·spring boot·后端·spring·spring cloud·java-ee·负载均衡
我命由我1234515 天前
Android 开发问题:Unable to find explicit activity class
android·java·java-ee·android studio·android jetpack·android-studio·android runtime