技术支持微 makytony
腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛。
系统镜像选 Ubuntu 20.04 LTS ,Ubuntu是最热门的Linux发行版之一,是一款开放源代码的免费软件,基于Debian Linux操作系统,其易用性和稳定性均非常出色,没有桌面系统资源占用率很低。
模块 | 功能介绍 |
---|---|
首页 | 展示网站轮播图(校区环境、课程)、公告(题单、教学资料清单)、近期比赛、最近7天做题排名 |
题目 | 提供展示题目列表页,可以根据题库、难度、标签等进行筛选查询,同时展示各个题目的做题情况;提供展示题目详情页,可以看到题目内容,在线编写代码,查看当前用户对于该题的历史提交记录 |
训练 | 提供展示训练列表页,可以根据权限、分类进行筛选查询,进入指定训练页,可以查看到训练的介绍、训练的题目单以及训练记录单 |
比赛 | 提供展示类型为ACM和OI的比赛列表页,可以根据类型与比赛状态进行筛选查询,同时展示比赛的标题、时间、时长、类型、参赛人数等信息;进入指定比赛,可以看到比赛题目、比赛提交列表、排行榜、比赛公告、评论,以及比赛管理员可以选择重新评测某个比赛题目、提供现场打印代码的功能 |
评测 | 用户可以看到所有的提交记录列表,可以通过状态、题目ID、提交者进行筛选过滤 |
排名 | 分为ACM排行榜和OI排行榜,分别根据对应ACM题目和OI题目提交情况对用户进行排名展示 |
团队 | 团队可以看做是一个独立的小HOJ,里面包含了现有HOJ的题目、训练、比赛、评测、讨论、公告、排名等功能,其中各个团队的数据与HOJ主站的数据已做了完全隔离,各个团队可以自定义属于自己的题目、比赛、训练等,其中目前支持团队中的题目申请公开到主题库 |
个人信息与设置 | 用户拥有自己的个人主页,可以展示用户的学校、名称、个人简介、做题数和得分等信息;同时登陆状态可以在右上角进入个人设置,可以修改密码和邮箱,以及各种个人信息 |
登录与注册 | 用户可以通过点击导航栏右上角选择登录、注册、重置密码,即可完成对用户的鉴权 |
1、自动适配手机端屏幕大小,判题使用沙箱 cgroup 隔离用户程序,杜绝卡评测和恶意代码;
2、支持分布式判题,可以一台前端主机加多台评测机进行分流,应对大规模比赛。
3、私有训练(班级)、公开训练(题单功能)
4、支持testlib特殊评测、交互评测、子任务评测
8、左题面右编程区的计蒜客布局,支持在线自测调试。
9、支持本地题目数据评测,也支持其它OJ(HDU、Codeforces、GYM、POJ、AtCoder、SPOJ)题目的在线评测。
学生做题界面仿计蒜客 左题面 右编程区 提交编程代码前 点 语言 选择提交的语言 支持 C C++ Python JAVA语言,默认 C++ 语言 。
查看代码编译错误
比DEV C++ 详细一些。
查看测试点通过情况
教师查询学员刷题情况和提交的代码
题目有标签,按标签选择练习题目或者组成训练题单和作业。
点开每一项在右侧伸展操作界面
如果不开放注册可以不配置,默认已配置公用服务邮箱。
点 EduXMOJ仪表盘 右侧展开页面记录了服务器CPU使用率和内存占用情况 ,内存占用90%以内正常,超过90%Linux 会启用磁盘交换内存。
重点关注 后端服务和 判题系统 健康状态, 出现走失情况, SSH连接服务器 执行 sudo reboot 或者 登录控制台 执行 重启 操作 5分钟内服务会全起来。
系统适配移动设备 支持手机和平板电脑 ,方便家长和老师根据学员做题情况,主要是排名和评测结果。
T 开头 一本通题目 入门和算法篇 (约600题)
P4 开头 一本通启蒙篇 (约480题)有配套课程PPT
P6 开头 一本通算法篇和提高篇 (约220题)
P1 开头 东方博宜题目 (约1100题)
LD 开头 蓝桥大学组 基础和算法篇含VIP题目 (约280题)
LQ 开头 蓝桥青少组选拔赛 省 国赛历次真题 (约160题 )
CD 开头 电子学会等级考试C语言历次真题1-8级 (约110题 )
U开头 USACO官网训练1-6章 青铜和银组月赛题 中文版题面 (约90题)
题目均带标签, 题目 页面打开后 上方 中间位置 勾选 标签 或者 页面右侧选择需要的 标签
用户数据导入仅支持csv格式的用户数据。
普通模式是程序在线评测平台(OJ)通用的判题模式,主要的实现逻辑步骤如下:
选手程序读取题目标准输入文件的数据
判题机执行代码逻辑得到选手输出
再将选手输出与题目标准输出文件的数据进行对比,最终得到判题结果
特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。
一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:
OJ的测试用例评测模式有以下几种:
ACM题目:默认(全部评测)、遇错止评(顺序评测)
OI题目:全部评测(得分加和)、子任务(最低得分)、子任务(平均得分)
1. 默认(全部评测)
用户提交的代码将运行所有的测试用例,然后汇总结果。如果全部测试点都符合预期,则评测状态结果为Accepted,否则遍历所有测试点结果,将第一个非Accepted的测试点的状态作为最终结果。
2. 遇错止评(顺序评测)
用户提交的代码将顺序运行所有测试用例,如果遇到某个测试点的结果(非Accepted)不符合预期,则评测结束,将该测试点的评测结果作为最终结果;否则一直遍历全部测试用例评测直至结束。
1.全部评测(得分加和)
用户提交的代码将运行所有的测试用例,然后汇总所有评测点的得分和结果。如果全部测试点都符合预期,则评测状态结果为Accepted,得分为该题目的满分;否则遍历所有测试点结果,加和所有测试点的得分,作为该评测的最终得分。
2. 子任务(最低得分)
将全部测试用例按照配置的组数分成多个子任务评测组,每个子任务求该组测试点的最低得分,作为该子任务的得分,然后汇总加和所有子任务组的得分,作为该评测的最终得分。
ACM赛制:每道题提交之后都有反馈,可以看到“通过”、“运行错误”、“答案错误”等等结果,但看不到错误的测试样例(leetcode周赛可以看到),每道题都有多个测试点,每道题必须通过了所有的测试点才算通过。每道题不限制提交次数,但没通过的话会有罚时,仅以最后一次提交为准。比赛过程中一般可以看到实时排名,通过题数相同的情况下按照答题时间+罚时来排名。
ACM赛制的比赛:ICPC、CCPC、codeforces比赛、leetcode周赛及全国编程大赛、牛客小白赛练习赛挑战赛、传智杯。
OI赛制:每道题提交之后都没有任何反馈,每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,如果提交错误没有任何惩罚,仅以最后一次提交为准。比赛过程中看不到实时排名,赛后按照总得分来排名。
OI赛制的比赛:NOI全国青少年信息学奥林匹克竞赛、CCF CSP、考研机试、蓝桥杯、牛客OI赛、全国高校计算机能力挑战赛。
IOI赛制:每道题提交之后都有反馈,可以看到“通过”、“运行错误”、“答案错误”等等结果,甚至可以实时看到自己每道题得了多少分,但看不到错误的测试样例。每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,如果提交错误没有任何惩罚,仅以最后一次提交为准。比赛过程中一般可以看到实时排名(如果是考试,一般看不到排名),按照总得分来排名。可以说,IOI赛制是结合了OI赛制和ACM赛制的特点。
IOI赛制的比赛:PAT、团体程序设计天梯赛、CCF CCSP、洛谷月赛。
用于题目备份和迁移。点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:
+-- problem_1000.json
+-- problem_1000
| +-- 1.in
| +-- 1.out
| +-- ....
+-- problem_1001.json
+-- problem_1001
| +-- 1.in
| +-- 1.out
| +-- ....
选择需要导入的题目数据zip压缩包,如果是自己做的题目需要批量导入请注意不要多一层文件夹进行压缩,请保证题目json文件的名字与其对应的存放评测数据的文件夹名字一致。
(远程判题,题面拉取过来自动分类到对应题库,测试数据在对应服务器上,学员提交题目,远程判题并返回结果。)
导入HDU、Codeforces、POJ、GYM、AtCoder、SPOJ的题目,只需提供该题目的题号便可一键导入。
1000
以上的数字1000A
、1000B
、这种数字加大写英文字母的格式,具体请到https://codeforces.com (opens new window)查看TEST
,具体请到https://www.spoj.com (opens new window)查看abc110_a
这种格式,具体请到 https://atcoder.jp (opens new window)查看添加方法:管理员进入后台,点击题目列表,添加远程OJ题目。
然后添加上方的添加按钮,在弹出窗中选择OJ名字及题号,便可导入
准备工作:对应OJ注册账号,并在后台添加账号。
上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式
每次点击 添加用例 就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的 testcase 文件夹生成对应的文件。
对于普通题目,测试用例文件包括in
、out
、ans
、txt
四种扩展名
例如有两组测试用例,则对于普通题目测试用例的文件名分别为*.in, *.out(*.ans)
,或者*input*.txt, *output*.txt
,其他形式的文件后台均不识别。
压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:
├── 1.in
├── 1.out
├── 2.in
├── 2.out
然后压缩测试用例到一个zip中
注意:不要在这些文件外面套多一层文件夹,请全选.in和.out文件,右键 添加压缩文件, 直接压缩。
建议:尽量减少测试用例组数,这会一定程度上提高判题性能。日常练习测试样例在精不在多。
训练分为公开训练与私有训练,同时可自定义训练分类
两种训练其实都是题单功能,区别在于私有训练拥有记录榜单
与公开训练的区别:
系统同步用户对应题目数据的情况如下:
该模式是按照ACM-ICPC的比赛规则来进行,Contest设置项中的Seal Time Rank
即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。
如果开启封榜,则封榜期间的角色不同如下:
注意:比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!
在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交(或选择以最高得分的提交)为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!
比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!
比赛权限
后台比赛题目列表管理页面如下:
教师在从公共题库中选择题目当作比赛题目时需要注意:大部分题目均有 “题解AC程序”,从公共题库选择后需要修改题目:
操作如下:先将选手程序前面的对勾 点取消,待比赛结束后,再勾选恢复。
比赛结束后,可以 csv 电子表格 格式导出比赛成绩和 图片形式 保存榜单。
团队可以看做是一个独立的小OJ,里面包含了现有OJ的题目、训练、比赛、评测、讨论、公告、排名等功能,其中各个团队的数据与OJ主站的数据 完全隔离,各个团队可以自定义属于自己的题目、比赛、训练等,支持团队中的题目申请公开到主题库。
团队分为公开团队、保护团队、私有团队
以下限制只对 非 普通管理员、题目管理员、超级管理员的普通用户:
每个用户创建团队的前提为通过20道题目
每个用户每天可以创建的团队数量为2个
每个用户总共可以创建的团队数量为5个
以上数据为默认数量,可以通过开关设置修改,甚至禁止普通用户创建团队。
用户在登录之后,便可以创建团队
管理员把 团队名称 告诉用户,用户登录后,点击指定的团队进入团队主页,点击右侧的申请加入即可加入团队。
团队角色分为:
注意:主站的超级管理员与创建团队的Owner拥有同等最高权限,拥有解散团队的权限
团队题目的统计数据、用户的提交数据在团队内和主站中的数据是隔离的!
进入 首页 ,点击 评测,点击 C++ / python 语言栏即可查看 学员提交的代码及测试点正确/错误情况 (OI题目) 包含编译错误,方便教师答疑。如果修改了题目测试点,可以点击 重新评测 进行对此代码重新评测。
学员可以选择 “ 我的” 只查看自己提交代码通过情况。 管理员可以 筛选 题目ID 或者 输入学生用户名,只查看某位学员评测情况。
把上方地址栏里面生成的链接 复制粘贴给学员: 2.小数运算 - 花叶创客编程OJhttp://49.232.15.153/training/2
如果有题目 部分通过 或者 超时 点开提交页面的 结果 就可以看到哪些测试点没有通过。
管理员权限账号 进入后台管理 -题目管理-题目列表 输入题号或者题目名称(支持模糊查询)
找到题目, 点击 中间图标 下载评测数据压缩包 解压缩 找到未通过的的评测点 选择 记事本 打开。
购买域名并备案:
https://cloud.tencent.com/act/pro/domain-sales 域名购买
https://blog.csdn.net/abilix_tony/article/details/125186392?spm=1001.2014.3001.5501 域名备案指南
https 安全访问 (必须有域名会后才能申请 大部分客户不需要https加密功能 ) 需要SSL证书 。申请 地址 :https://cloud.tencent.com/document/product/400/6814
填写信息后 审核通过后 下载Nginx (适用大部分场景)(pem文件、crt文件、key文件)证书,交给我们安装部署证书到服务器上。