最近又翻了翻毕业设计时做的OJ系统,感觉还有很多东西值得完善,再加上从2016年至今的数据,搁置起来就很浪费,于是想起来看看能不能再重新归置归置:
按理说这么些年过去,水平应该又能有所长进。
启用域名:首页 - DidaOJ
20250615 后续更新计划等信息优先在站点进行维护,本文仅作备份。
思路梳理
待办记录
- 题目
- 题目列表
- 题目详情
- 基础功能
- 自定义题面
- 题目集,类似于标签
- 题目推荐
- 出题流程
- 编辑题目,判题数据上传R2存储
- 更多判题类型,其中包括Virtual Judge
- 选择题、普通填空题与程序填空题等
- 评测
- 评测列表
- 在线测试?服务器资源占用明显,看看是否支持
- 调整评测列表页面代码按钮为弹出模态框
- 忽略末尾1个换行
- 上传判题数据的时候生成rule.yaml
- 特殊判题
- 根据程序ret来判断结果
- 0 - AC
- 1 - WA
- 2 - PE
- other - RE
- 根据程序ret来判断结果
- 一些题目的数据需要整理
- 276 缺少out文件
- 比赛评测直接输入ID时隐藏
- 比赛评测展示时隐藏问题ID
- 排名
- 总排名
- 每日排名
- Rank排名
- 讨论
- 并入原博客的功能
- 博客文章支持收藏
- 支持自定义MarkDown语法,比如显示题目标记1
- 用户
- 登录
- 注册
- 权限管理
- 权限项
- 角色
- 管理页面角色分配给具体用户
- 用户动态
- 最近提交
- 最近发帖与回复
- 提交不考虑保护,发帖隐私保护?
- 空间说说
- 想想必要性,是否与发帖功能冗余
- 空间自定义样式
- 想想必要性,用户参与度不一定高
- 签到
- 每日登录自动签到?
- 积分系统
- 积分兑换一些奖励?题目数据?
- 比赛
- 竞赛列表
- 近期比赛
- 公共源已失效,爬取知名OJ生成数据
- 竞赛管理
- 每个人都可以创建比赛
- 题目可以后台上传分发缓存
- 分发成功后可以在页面查看cdn版本
- 输入密码查看
- 竞赛编辑
- 管理题目
- 题目编写自定义题面
- 设置访问规则
- 公开
- 私有
- 显示在列表/在列表中隐藏
- 设置密码
- 是否允许注册
- 设置截止时间
- 防作弊
- 查重
- 额外客户端
- 限制仅客户端访问
- 手机锁定应用
- 摄像头拍照
- 屏幕监控
- IP识别
- 需要验证一下出口IP
- 考虑在学校机房部署防作弊验证服务器?
- 粘贴到输入框时检测内容是否包含关键词
- 系统
- 状态
- 读取R2或者Cloudflare数据库的接口更新信息
- 关于
- 读取帖子信息或直接重定向?
- 状态
- 工具
- 码池
- 杂项
- 显示效果
-
组件页边距优化 -
设置不加载背景图 -
live2D组件
-
- 涉及操作R2存储的编辑增加分布式锁
- 显示效果
架构
尽可能利用cloudflare资源,分析性能瓶颈点,日常问题不大,突增在大型比赛期间。
- 查看题目
- 自动生成离线?代理?
- 搭配hugo?密码验证?
- 提交代码
- 判题
- 引入任务中心,判题任务分发
前端
使用vue3框架开发,引入TDesign作为基础UI组件库。
后端
使用golang开发,mongodb作为数据库。
判题机安全性
判题机的沙盒直接使用go-judge,只需要制作一个调度程序即可。
Go Judge Documentation
Online Judge 是如何解决判题端安全性问题的? - 知乎
判题数据分发
判题数据的存储使用Cloudflare的R2存储,判题机评测时从R2处拉取数据。
题目评测数据具有一个md5码,存在问题的属性里,评测机发现与本地数据不匹配时,重新拉去评测数据。
如果下载后还不匹配,休眠后重试
在后台上传文件时先存在web端文件夹,用户点保存计算md5后上传R2。
可以考虑支持上传压缩包自动解压。
判题机环境
|
|
g++ –version Python 3.11 Java 1.17 golang 1.19
旧数据迁移
写一个迁移程序,从老的数据库中读取数据,整理后写入新的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
- 数据比较可控,支持完美迁移
- 迁移题目数据
- 以CodeOJ的数据为准
- 判题数据重新通过系统导入
- 迁移用户
- 以jol数据为准
- 补充codeoj独有的数据
- 迁移比赛记录
- 合并jol、vhoj数据
- 以时间排序
- 迁移评测记录
- 合并jol、codeoj、vhoj数据
- 以时间排序
- 迁移讨论区
- 合并jol、codeoj数据
- 以时间排序
- 迁移其他数据
- 已手动编辑为主
更新计划
以下主要取为老计划存档。
功能相关
以下为公测前已完成,存档以供查看
说明 本任务从5月23号开始记录,
- 判题各种结果测试
- 分任务判题
- 去除HTTP方式连接数据库
- spj重构
- 预览图片层级
更新日志
本日志自2019年4月19日开始记录。
20250527
- OJ核心功能基本完成,继续完善细节
20250516
- 用户系统已完成
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的先进经验