首页 > 其他分享 >OJ判题测评系统--项目基础环境搭建

OJ判题测评系统--项目基础环境搭建

时间:2023-12-30 12:45:34浏览次数:38  
标签:comment 题目 OJ -- default 判题 null id

写在前面

在线访问:暂无..
GitHub:https://github.com/975131701/ojSystem/
个人博客:https://www.cnblogs.com/cyrui/
使用说明
1、启动nacos -> startup.cmd -m standalone
2、启动rabbitmq -> rabbitmq-plugins enable rabbitmq_management
3、启动redis -> redis-server
4、启动mysql服务
5、启动前端服务 -> npm run serve
6、启动所有后端服务

项目介绍(业务)

OJ = Online Judge 在线判题评测系统
管理员可以创建,修改,删除题目;用户可以选择题目,在线做题并且提交代码;系统会对用户提交的代码,根据预设答案判断用户的提交结果是否正确。
核心模块:代码沙箱模块,题目模块,判题模块等。

项目介绍(技术)

后端技术:Spring Boot、Spring Cloud、Mybatis Plus、MySQL、Redis、RabbitMq、Docker、Java安全管理器和Spring Cloud Alibaba相关微服务组件。

核心业务流程

image
image

后期考虑把判题服务和代码沙箱通过消息队列解耦

功能

  1. 题目模块
    1. 创建题目(管理员)
    2. 修改题目(管理员)
    3. 删除题目(管理员)
    4. 搜索题目(用户)
    5. 搜索提交题目(用户)
    6. 在线做题
    7. 提交题目代码
  2. 用户模块
    1. 登录
    2. 注销
    3. 注册
  3. 判题模块
    1. 提交判题
    2. 限制处理
    3. 代码沙箱

库表设计

用户表

主要是id、账号和密码以及用户角色

-- 用户表
create table if not exists user
(
    id           bigint auto_increment comment 'id' primary key,
    userAccount  varchar(256)                           not null comment '账号',
    userPassword varchar(512)                           not null comment '密码',
    unionId      varchar(256)                           null comment '微信开放平台id',
    mpOpenId     varchar(256)                           null comment '公众号openId',
    userName     varchar(256)                           null comment '用户昵称',
    userAvatar   varchar(1024)                          null comment '用户头像',
    userProfile  varchar(512)                           null comment '用户简介',
    userRole     varchar(256) default 'user'            not null comment '用户角色:user/admin/ban',
    createTime   datetime     default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime   datetime     default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete     tinyint      default 0                 not null comment '是否删除',
    index idx_unionId (unionId)
    ) comment '用户' collate = utf8mb4_unicode_ci;

题目表

题目标题
题目内容:题目介绍、输入输出提示、描述、具体详情
题目标签(json 数组):简单、中等、困难、字符串、二叉树
题目答案:管理员设置的标准答案
提交数、通过题目的用户数:便于分析统计(可以考虑根据通过率给题目打难易度标签)
判题用例(json 数组):多组 输入用例和输出用例
判题配置(json 对象):时间限制和内存限制

-- 题目表
create table if not exists question
(
    id         bigint auto_increment comment 'id' primary key,
    title      varchar(512)                       null comment '标题',
    content    text                               null comment '内容',
    tags       varchar(1024)                      null comment '标签列表(json 数组)',
    answer     text                               null comment '题目答案',
    submitNum  int  default 0 not null comment '题目提交数',
    acceptedNum  int  default 0 not null comment '题目通过数',
    judgeCase text null comment '判题用例(json 数组)',
    judgeConfig text null comment '判题配置(json 对象)',
    thumbNum   int      default 0                 not null comment '点赞数',
    favourNum  int      default 0                 not null comment '收藏数',
    userId     bigint                             not null comment '创建用户 id',
    createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete   tinyint  default 0                 not null comment '是否删除',
    index idx_userId (userId)
    ) comment '题目' collate = utf8mb4_unicode_ci;

题目提交表

提交的编程语言类型
提交的代码
提交的题目 id
提交的用户 id
判题的状态(0 - 带判题、1 - 判题中、2 - 成功、 3 - 失败)
判题信息(判题过程中的信息,比如程序的失败原因,执行消耗的时间、空间)
判题信息枚举值

  • Accepted 成功
  • Wrong Answer 答案错误
  • Compile Error 编译错误
  • Memory Limit Exceeded 内存溢出
  • Time Limit Exceeded 超时
  • Presentation Error 展示错误
  • Output Limit Exceeded 输出溢出
  • Waiting 等待中
  • Dangerous Operation 危险操作
  • Runtime Error 运行错误(用户程序的问题)
  • System Error 系统错误(做系统人的问题)
-- 题目提交表
create table if not exists question_submit
(
    id         bigint auto_increment comment 'id' primary key,
    language   varchar(128)                       not null comment '编程语言',
    code       text                               not null comment '用户代码',
    judgeInfo  text                               null comment '判题信息(json 对象)',
    status     int      default 0                 not null comment '判题状态(0 - 待判题、1 - 判题中、2 - 成功、3 - 失败)',
    questionId bigint                             not null comment '题目 id',
    userId     bigint                             not null comment '创建用户 id',
    createTime datetime default CURRENT_TIMESTAMP not null comment '创建时间',
    updateTime datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
    isDelete   tinyint  default 0                 not null comment '是否删除',
    index idx_questionId (questionId),
    index idx_userId (userId)
    ) comment '题目提交';

后端项目初始化

创建一个Spring Cloud项目结构如下
image

application.yml配置如下

# 公共配置文件
# @author cyr
# 
spring:
  application:
    name: cyroj-user-service
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cyroj
    username: root
    password: 123456
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  address: 0.0.0.0
  port: 8102
  servlet:
    context-path: /api/user
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

写一个Controller接口尝试运行项目

@RestController
@RequestMapping("/")
@Slf4j
public class UserController {

    @GetMapping("/test")
    public String test() {
        return "hello world";
    }
}

成功运行项目!
image

上传项目到GitHub:https://blog.csdn.net/Saintmm/article/details/122213995

标签:comment,题目,OJ,--,default,判题,null,id
From: https://www.cnblogs.com/cyrui/p/17936248.html

相关文章

  • 浏览器原生支持JS Base64编码解码
    1.Base64解码:vardecodedData=window.atob('内容');2.Base64编码:varencodedData=window.btoa('base64编码内容');3.中文转换报错?若中文Base64数据转换有报错问题,可以中文先encode转码和decode编码,示例如下:3.1使用:window.btoa(window.encodeURIComponent('内......
  • 鱼肝油
    作用功效:佝偻病。夜盲症。小儿手足抽搐症。维生素AD缺乏症。用法用量:应按推荐剂量使用,不可超量服用。口服溶液剂口服,一次2~10ml,一日3次。鱼肝油乳剂口服预防:成人一日15ml,分1~2次,以温开水调服。口服治疗:成人一日35~65ml,分1~3次,以温开水调服;服用1~2周后剂量可减至一日15ml......
  • 橄榄油 olive oil
    橄榄油,属木本植物油,是由新鲜的油橄榄果实直接冷榨而成的,不经加热和化学处理,保留了天然营养成分,橄榄油被认为是迄今所发现的油脂中最适合人体营养的油脂 [1]。橄榄油和橄榄果渣油 [2]在地中海沿岸国家有几千年的历史,在西方被誉为“液体黄金”,“植物油皇后”,“地中海甘露”,原因......
  • Delphi 类(TObject、TPersistent、TComponent、TControl、TWinControl、TCustomControl
     TObject:    VCL中所有类的根类,即是说:VCL中所有的类/组件/控件都是从TObject中继承而来。TObject类中定义了基本的构造方法和析构方法。  TPersistent:    继承于TObject,按字典中的意思是“持久类”(姑且这样叫它吧,因为我一直就是这样叫这个类的-_-|)。该类在VCL中......
  • JS 鼠标拖拽元素移动
    代码示例<!DOCTYPEhtml><htmllang="zh-CN"><head> <metacharset="UTF-8"> <title>Document</title> <style> #wrap{ width:100px; height:100px; background-color:green; position:......
  • Markdown学习笔记
    Markdown学习标题的运用井号加空格后面输入要输入的标题内容字体的运用前后两个星号*中间是字体【是加粗】前后三个星号中间是字体【是加粗并倾斜】*废弃线的运用前后是两个波浪线中间是字体。列:今天来学习养猪的知识~~~~引用的运通大于号加空格,用于引用他......
  • [转载] JAVA开发搞了一年多的大数据,究竟干了点啥
     ​       2021年7月份加入了当前项目组,以一个原汁原味的Java开发工程师的身份进来的,来了没多久,项目组唯一一名大数据开发工程师要离职了,一时间一大堆的数据需求急需人来接手,此刻又招不来新的数据开发。没辙,我和同组的另一位Java开发同事算是临危受命,接下了大数据方面......
  • python学习笔记4(print复杂语法、input、注释、代码缩进)
    上一节学习了概述、开发工具、编写方法、print简单语法本节内容:(一)print复杂语法1、多条print输出到一行显示print('北京',end='---->')print('欢迎你')2、使用连接符连接多个字符串+不能连接数据值和其他类型print(192,168,1,1,sep='.')#多个字符串通过.间隔print('北京欢迎你'+'2......
  • C语言小案例
    二维数组输出题目描述:输入一个整数N,输出一个N行N列的二维矩阵,矩阵中的元素用\1~N*N顺序螺旋填充。输入格式一个整数N(N<=10)输出格式输出N行N列的矩阵,元素之间用一个空格隔开,行末不要有多余的空格。样例输入数据3输出数据123894765代码示例如下:#include<stdio.h>voids......
  • EasyCVR在Linux中开启硬件探测配置后,无法启动该如何解决?
    有用户反馈,可视化监控云平台EasyCVR智能边缘网关在Linux系统上开启硬件探测配置后,无法正常启动程序,如下图:收到用户反馈后,技术人员立即开展排查和解决。1)由反馈可见,报错为“LocalMachineCheckError!本地机器检查错误!”此错误是因为程序在校验硬件盒子内程序出错;2)于是排查智能边缘......