最近计划重新梳理一下OJ系统

文章字数:2437

最近又翻了翻毕业设计时做的OJ系统,感觉还有很多东西值得完善,再加上从2016年至今的数据,搁置起来就很浪费,于是想起来看看能不能再重新归置归置:

按理说这么些年过去,水平应该又能有所长进。

思路梳理

功能

  • 题目

    • 题目列表
    • 题目详情
      • 基础功能
      • 自定义题面
    • 题目集,类似于标签
    • 题目推荐
    • 出题流程
      • 编辑题目,判题数据上传R2存储
    • 更多判题类型,其中包括Virtual Judge
    • 填空题与程序填空题等
  • 评测

    • 评测列表
    • 在线测试?服务器资源占用明显,看看是否支持
  • 排名

    • 总排名
    • 每日排名
    • Rank排名
  • 竞赛

    • 竞赛列表
    • 近期比赛
      • 爬取知名OJ生成数据
    • 竞赛管理(有竞赛组织权限)
      • 题目可以后台上传分发,分发成功后可以在页面查看cdn版本,输入密码查看
      • 竞赛编辑
        • 管理题目
        • 题目编写自定义题面
        • 设置列表显示规则
          • 显示(永远显示)
          • 隐藏(不在列表展示)
        • 设置访问规则
          • 公开
          • 私有(永远不显示在列表)
          • 预告(显示在列表)
    • 讨论
      • 并入原博客的功能
      • 博客文章支持收藏
      • 支持自定义MarkDown语法,比如显示题目标记1
  • 用户

    • 用户动态
      • 最近提交
      • 最近发帖与回复
        • 提交不考虑保护,发帖隐私保护?
    • 空间说说
    • 空间自定义样式
    • 签到
    • 积分系统
  • 工具

    • 码池
  • 权限管理

    • 权限项
    • 角色
    • 角色分配给具体用户
  • 显示效果

    • 组件页边距优化
    • 设置不加载背景图
    • live2D组件

架构

尽可能利用cloudflare资源,分析性能瓶颈点,日常问题不大,突增在大型比赛期间。

  • 查看题目
    • 自动生成离线?代理?
    • 搭配hugo?密码验证?
  • 提交代码
  • 判题

前端

使用vue3框架开发,引入tdesign作为基础UI组件库。

后端

使用golang开发,mongodb作为数据库。

判题机安全性

判题机的沙盒直接使用go-judge,只需要制作一个调度程序即可。
Go Judge Documentation
Online Judge 是如何解决判题端安全性问题的? - 知乎

判题数据分发

判题数据的存储使用Cloudflare的R2存储,判题机评测时从R2处拉取数据。
题目评测数据具有一个md5码,存在问题的属性里,评测机发现与本地数据不匹配时,重新拉去评测数据。
在后台上传文件时先存在web端文件夹,用户点保存计算md5后上传R2。
可以考虑支持上传压缩包自动解压。

判题机环境

1
2
3
4
apt install -y build-essential    # C 和 C++
apt install -y python3 python3-pip
apt install -y default-jdk
apt install -y golang-go

g++ –version Python 3.11 Java 1.17 golang 1.19

杂项记录

  • 系统页面
    • 关于页面,读取博文的Json
    • 系统状态
      • 读取R2或者数据库接口的更新信息
  • 判题机
    • 如果下载后还不匹配,助眠后重试
    • 判题机的动态扩缩
    • 引入任务中心分发任务
    • 判题任务归还
      • 根据判题机报错等级分发

旧数据迁移

写一个迁移程序,从老的数据库中读取数据,整理后写入新的mongodb数据库。

  • HPUOJ · 1.0 - [ ~ 2016.10 ]
    • 数据仍然没有下落,暂时无法找回,看看有没有谁有线索。
    • 看起来至少可以从博客手动恢复一部分题目
  • HPUOJ · 2.0 - [ 2015.09 ~ 2018.12 ]
    • OJ数据全部导入到CodeOJ1.0,用户密码由于规则无法找回,可以尝试提供一个迁移页面
    • Vjudge数据尝试导入DidaOJ
  • CodeOJ · 1.0 - [ 2019.01 ~ 至今 ]
    • 数据比较可控,支持完美迁移
  • hpuoj.com
    • 数据比较可控,支持完美迁移
  1. 迁移题目数据
    1. 以CodeOJ的数据为准
    2. 判题数据重新通过系统导入
  2. 迁移用户
    1. 以jol数据为准
    2. 补充codeoj独有的数据
  3. 迁移比赛记录
    1. 合并jol、vhoj数据
    2. 以时间排序
  4. 迁移评测记录
    1. 合并job、codeoj、vhoj数据
    2. 以时间排序

更新计划

以下主要取为老计划存档。

功能相关

  • 报名系统
  • 教学与题解系统2
  • 用户签名显示3
  • OJ系统性信息展示
  • 表单系统4
  • 投票系统5
  • 工具(草稿、画板……)

以下为公测前已完成,存档以供查看

说明 本任务从5月23号开始记录,

  • 判题各种结果测试
  • 分任务判题
  • 去除HTTP方式连接数据库
  • spj重构
  • 预览图片层级

更新日志

本日志自2019年4月19日开始记录。

图片上传功能

20250505

  • 完善C/C++/Java/Python评测逻辑
  • 完善用户登陆与注销操作

20250501

  • 完善问题详情页面

20250530

  • 完善系统相关文档

20250429

  • 完善用户系统

20250428

  • 完善数据库迁移逻辑
  • 完善判题机基础逻辑

20250427

  • 完善网站编辑器与问题详情页

20250426

  • OJ重启计划立项
  • 初始化网站基础框架与问题列表页

20190817

  • 增加背景图展示
  • 修复新闻编辑页新闻权限展示bug
  • 开源前端代码
  • 修复工信部备案链接
  • 修复静态代理链接
  • 首页友链显示效果优化
  • 修复无法编辑回复的BUG

20190621

  • 修复苹果端友情链接样式BUG

20190620

  • 首页增加友情链接
  • 优化首页圆环样式
  • 修复切换用户空间数据不重载的BUG

20190619

  • 题目显示题目来源
  • 修复苹果系统日期bug
  • 空间页展示提交统计

20190618

  • 博客文章支持统计浏览量
  • 增加码池功能

20190617

  • 修复博客文章过长导致编辑失败的错误

20190616

  • CodeOJ进入公测

20190526

  • 判题完成

20190514

  • 测试判题

20190513

  • 优化状态页面
  • 新增用户签名信息
  • 多种判题方式

20190512

  • 状态页面
  • 提交代码

20190510~20190511

  • 判题代码

20190509

  • 修复新建博文title可以设置为空的bug
  • 新建问题功能
  • 修复hint等为空的报错

20190508

  • 完善问题管理
  • 提交状态页
  • 修复搜索BUG

20190508

  • 问题管理
  • 问题编辑
  • 问题添加

20190507

  • 初步设计判题系统
  • 问题列表页设计

20190502~20190506

  • 设计判题系统
  • 编写相关报告

20190501

  • 程序docker运行

20190430

  • 图片上传功能

头像

  • 消息推送
  • docker技术

20190429

  • 优化新闻权限
  • 修复时间BUG

20190428

  • 完善增加博客文章
  • 完善博客筛选功能
  • 新闻管理

20190427

  • 整理报告
  • 增加文章选项

20190426

  • 整理系统信息
  • 细节调整

20190425

  • 完善邮件系统
  • 完善首页轮播图设置
  • 列表筛选功能
  • 修复系统BUG

20190424

  • 完善忘记密码功能
  • 邮箱服务切换到腾讯企业邮
  • 邮箱发件系统待观察

20190423

  • 注册功能
  • 忘记密码页面
  • 修复BUG

20190422

  • 管理页面 – 首页轮播图设置页面 – 支持管理页面切换端口

20190421

  • 管理页面 – 用户信息编辑 – 用户邮箱验证 – 博客管理页面
  • 动态切换端口

20190420

  • 增加文章私有选项,获取文章增加token判断
  • 用户信息页面
  • 管理后台菜单

20190419

  • 完善权限系统
  • 整理并修复系统性问题
  • 增加错误页
  • 完善博客系统,新增文章编辑页面
  • 项目部署服务器

之前

  • 设计架构
    • 前端页面VUE
    • 后台框架PhalApi
  • 编写首页、问题列表页、问题页、博客页

之前的之前

  • 研究其他OJ的先进经验

  1. 类似vjudge ↩︎

  2. 可暂使用博客代替 ↩︎

  3. 目前已有旧OJ数据但暂未设计展示效果,欢迎提供意见 ↩︎

  4. 可暂时与注册型比赛整合 ↩︎

  5. 比如关于此页面的投票 ↩︎

该内容采用 CC BY-NC-SA 4.0 许可协议。

如果对您有帮助或存在意见建议,欢迎在下方评论交流。

加载中...