当前位置: 首页 > news >正文

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

目录

  • 一、简介
  • 二、开发环境
  • 三、需求分析
  • 四、架构选型
  • 五、微服务划分
  • 六、技术选型

一、简介

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

http://www.jsqmd.com/news/684396/

相关文章:

  • 从理论到实践:GINav中的对流层延迟模型精解与MATLAB实现
  • 深入解析:为何SysWOW64下的ntdll.dll会提示PDB文件缺失?
  • 数据库架构设计思考
  • App Metrics高级用法:自定义指标、过滤器和采样策略
  • 从‘啊啊啊烦死了’到精准判断:手把手教你优化LSTM情感分析模型,提升微博评论预测准确率
  • Equalizer APO实用指南:如何高效优化Windows系统级音频处理?
  • 【立煌】G150XTN06.0规格友达15寸工业液晶屏幕AUO液晶模组
  • MedGemma-X效果展示:对低剂量X光片的鲁棒性识别与置信度输出
  • 5分钟掌握职场隐私保护神器:一键隐藏窗口的终极解决方案
  • Pixel Fashion Atelier实操手册:如何用Enchantment输入区定制专属像素咒语
  • RWKV7-1.5B-World辅助数据库课程设计:自然语言生成SQL与ER图描述
  • 【算法】线段树合并
  • Qwen3-Embedding-4B部署教程:NVIDIA驱动+Triton+PyTorch环境兼容性验证
  • 实战指南:Spring Cloud Gateway GlobalFilter的定制化与插件化设计
  • 智能图像处理利器:DeepMosaics终极实战指南
  • CSS如何制作标签页效果_利用display flex与盒模型
  • Phi-4-mini-reasoning长文本推理案例:法律条款逻辑冲突检测与解释
  • 终极指南:如何用py-googletrans免费批量翻译海量文本
  • 【立煌】BOE京东方EV101WUM-N81规格10.1寸液晶屏幕
  • dev
  • Qwen3-VL-8B-Instruct-GGUF实操手册:模型服务健康检查与错误码速查表
  • 1.大模型训练主要阶段与应用价值
  • 运维福音!用 QClaw 搭建服务器监控系统,异常自动推送到微信
  • PrivacySentry安全部署指南:线上环境的最佳配置策略
  • Z-Image-Turbo_UI界面生成效果实测:看看AI能画出多美的图片
  • 04-08-06 管理多个团队 (Managing Multiple Teams)
  • WebStack网址管理完全教程:如何高效添加和分类网站链接
  • RV1126视频采集避坑指南:RKMedia VI模块的5个关键配置项详解
  • csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
  • hot100 114.二叉树展开为链表