最近又翻了翻毕业设计时做的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。
可以考虑支持上传压缩包自动解压。
判题机环境
|
|
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
- 数据比较可控,支持完美迁移
- 迁移题目数据
- 以CodeOJ的数据为准
- 判题数据重新通过系统导入
- 迁移用户
- 以jol数据为准
- 补充codeoj独有的数据
- 迁移比赛记录
- 合并jol、vhoj数据
- 以时间排序
- 迁移评测记录
- 合并job、codeoj、vhoj数据
- 以时间排序
更新计划
以下主要取为老计划存档。
功能相关
以下为公测前已完成,存档以供查看
说明 本任务从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的先进经验