如何快速上手(了解系统的功能)
关于hustoj的大部分问题这里都可以 Ctrl+F 搜索到。
如果未能解决,可以联系微信 makytony
阿里云腾讯云镜像选 Ubuntu22.04 LTS,物理机安装Ubuntu22.04 Server。
Centos 7.9也可以,因为不提供升级补丁服务,建议选择Ubuntu20.04 LTS以上系统。
2H2GB 5M带宽 服务器支持130人以内竞赛,200人同时在线。 2H4G 服务器性能指数 * 1.5 。 腾讯云优惠购买轻量应用服务器:腾讯云轻量应用服务器链接https://curl.qcloud.com/uPZS3iOO
目前有的题库:
1、一本通入门篇 (约430题)
2、一本通启蒙篇 (约480题)有配套课程
3、一本通提高篇 (约250题) 3.3GB官方数据
4、近12年CSP/NOIP复赛真题(47题)
5、国内较早做信息品牌题目 (约1100题)(有配套讲义和教学视频)
6、蓝桥大学组 基础和算法篇含VIP题目 (约260题)
7、蓝桥青少组选拔赛 省 国赛历次真题 (约160题 )
8、电子学会等级考试C语言历次真题1-8级 (约110题 )
9、USACO官网训练1-6章 青铜和银组月赛题 中文版 (约123题)
10、2023年3-9月GESP 1-6级真题 ( 30题 )
11、蓝桥等考 C++ 1-18级真题(200题) 带Word版真题试卷含题解
12、蓝桥等考 Python1-18级真题 (240题) 带Word版真题试卷含题解
13、洛谷经典题目 整理中。
14、牛客CSP复赛 2021 2022年 共计12场模拟赛 48题 官方数据带题解 带源码。
15、洛谷精选算法提高和历年NIOP真题 (约700题)官方数据
https://s.c1ns.cn/xmedu OJ功能介绍使用手册
演示地址:http://212.129.250.124:88/home
学生测试账号 xmvip 密码 888666
前端DEMO页面:首页 - 未来编程星球
目 录
22、比赛作业里面的时间是什么含义,OI排名跟普通排名有何区别?
23、人多的时候,随机出现"No input file specified"
26、如何让学生账号在比赛中也能看到和练习一样的详细错误信息?
36、NOI CSP CCF 新标准使用C++14,如何在hustoj中更改默认的编译参数。
49、为什么题目不见了/如何让比赛里的题目也可以在练习里做?
57、为什么添加题目时出现warning,题目目录下数据没有自动生成?
59、为何我的C/C++都能用,唯独Java总是CE/RE?
83、新用户注册后,管理员审核通过生效? 如何禁止新用户注册?
管理后台:
admin管理员用户登录,点击右上角管理,仔细阅读管理首页的说明。
切记:题目导入后一次只能删一题,不要导入过多你暂时用不上的题目,正确的方式是每次训练、作业,导入所需的5-10个题目,比赛作业结束后让题目成为训练题库的一部分。这样能保证题库中题号靠前的题目难度依次上升,适合后来的同学自行训练。不要贪图题目数量而忽视其质量。教练自己看不懂解法的题目,少用、慎用。
阅读两个配置文件,逐个研究选项的注释和含义。
/home/judge/etc/judge.conf 所有与判题相关的选项都在这里
/home/judge/src/web/include/db_info.inc.php 所有与Web页有关的选项都在这里
系统中“用户”“比赛”均只有编辑、禁用功能,没有删除功能,这是为了从根源上防止出现“教学事故”。
1、如何设置默认显示中文界面?
修改db_info.inc.php中的$OJ_LANG=”cn”; // 默认是中文不需要用户修改
2、如何修改标题?背景?
sudo vim home/judge/src/web/include/db_info.inc.php
修改$OJ_NAME和$OJ_BG
static $OJ_NAME="potato编程"; //左上角显示的系统名称
static $OJ_BG="xaintiao.jpg"; //双引号里面填写背景图片的url,默认bing,每小时自动更换bing.com最新背景。
xaintiao.jpg 尺寸1920*1080 /home/judge/src/web/ 放这个目录下。
3、如何开启论坛功能?
db_info.inc.php中设置$OJ_BBS=”discuss3″;开启内置论坛,或另行安装discuz或phpBB3。先备案网站再开启论坛功能。
4、如何设置备案号?
修改db_info.inc.php中的 $OJ_BEIAN 如:
static $OJ_BEIAN=”辽ICP备12345678号-1″;
5、如何添加选择填空题?
添加题目时,裁判类型选择“文本裁判”
输入文件内容为题目数量 n
输出文件为n行 【题号】空格【分数】空格【正确答案】
总分之和必须为100分,才能在提交中显示为正确,否则只显示得分同值的通过率。
如果正确答案是【*】,表示任何答案都得分。
选增模板template.c,供学生填写
template.c是c语言模板,template.cc是c++模板
学生提交界面如图右侧
6、出现502 Bad Gateway,如何处理?
服务器内存过小,超时,考虑增加php-fpm的进程数量。
sed -i ‘s/pm.max_children = 5/pm.max_children = 64/g’ $(find /etc/php -name www.conf)s
7、有没有Python题库?
没有针对python的题库,题目都是不针对语言的,相同的题面,你用C也好用C++也好,用Java也行。
8、如何指定输入输出文件?
测试数据目录准备两个文本文件input.name output.name,其内容为题面指定的输入输出文件名,当他们存在时,判题系统会用他们指定的文件名来取代默认的标准输入输出。选手就可以用input.name里面写的文件名来输入数据,用output.name里面写的文件名作为输出目标。
9、如何快速构造测试数据?
1、在上传测试数据界面有“随机测试数据生成器”可以用元语言方式生成随机输入。构造系列.in结尾的文件。如:test01.in test02.in
2、自己编写一个标注答案,接受符合格式的输入,产生正确输出。放在测试数据目录中,命名为Main.cc
3、 登陆服务器ssh, 将这个程序编译为可执行文件Main,如g++ -o Main Main.cc
4、在测试数据目录下执行 /home/judge/src/install/makeout.sh Main
5、上述脚本将根据test01.in test02.in自动生成test01.out test02.out
10、如何开启在线测试运行 ?
db_info.inc.php
$OJ_TEST_RUN=true;
11、如何手工添加题目?
右上角有管理入口,管理界面有说明,问题管理中添加问题。
添加时只能提供一组样例+一组测试数据,但保存后可以在列表最右侧找到测试数据管理入口,允许上传、生成、解压更多测试数据。
12、如何增加更多的答题语言?
vim /home/judge/src/web/include/db_info.inc.php,
修改 $OJ_LANG_MASK 的值,需要用到的计算工具在该行的注释中提供了一个链接。
static $OJ_LANGMASK=4194237; //掩码计算器:https://pigeon-developer.github.io/hustoj-langmask/ 4194237 只保留C++和python 4194236 是保留 C C++ 和 python 。
13、如何修改常见问答内容?
1、修改template/皮肤名/faqs.php
2、添加一个新闻,标题命名为faqs.cn则可以替换系统中的中文FAQ,其他语言雷同。
14、如何修改页面上的XXXX?
cd home/judge/src/
grep -rn "XXXX" *
sudo vim home/judge/src/web/lang/cn.php
就能找到你应该修改的文件,如果数量过多请调整搜索的关键词,缩小范围。
15、如何备份?
脚本安装的用户,可以使用 install
目录中的 bak.sh
进行备份。
sudo bash /home/judge/src/install/bak.sh
备份后的数据在 /var/backups/
目录下, 命名格式为 hustoj_%Y%m%d.tar.bz2。
16、如何迁移?
首先在新服务器上做全新安装和测试,没有问题后,再迁移数据。
将你需要迁移的归档复制到目标系统的/home/judge/backup
目录下,执行下面的脚本进行恢复
cd /home/judge/backup | |
sudo bash /home/judge/src/install/restore.sh hustoj_%Y%m%d.tar.bz2 |
脚本的第一个参数为恢复的目标归档,如果没有参数则默认为按名字排序后字典序最大的归档
如何安装使用Moodle
https://zhuanlan.zhihu.com/p/103899072
17、如何更新升级?
脚本安装的用户,可以使用 install
目录中的 update-hustoj
进行更新升级。
sudo bash /home/judge/src/install/update-hustoj
18、不小心改坏了如何修复?
自己不小心改坏了 web
代码,可以使用 install
目录中的 fixing.sh
进行系统修复。
sudo bash /home/judge/src/install/fixing.sh
19、管理员如何查看其它用户代码?
右上角进入管理后台,用户管理,用户-权限-添加
给自己加权限sourse_browser权限
然后,查看前台,注销,重新登录。在状态页,点击提交记录中的语言名称查看源代码。
20、如何限制未登录用户访问?
db_info.inc.php里面有
sudo vim /home/judge/src/web/include/db_info.inc.php
$OJ_NEED_LOGIN 和 $OJ_REGISTER
static $OJ_REGISTER=true; //允许注册新用户 |
static $OJ_REG_NEED_CONFIRM=false; //新注册用户需要审核 |
static $OJ_NEED_LOGIN=false; //需要登录才能访问 |
21、不小心删除了admin的权限,忘记密码,如何修复?
方法一 (官网提供)、
sudo su | |
cd /home/judge/src/install | |
echo "insert into jol.privilege values('admin','administrator','true','N');" | ./mysql.sh |
方法二(已验证)、
sudo su //获得管理员权限
mysql -udebian-sys-maint -pVdpSExOtbWLwb7OC //部署结束时显示的密码
use jol //使用jol 这个数据库
insert into jol.privilege values('admin','administrator','true','N'); //都是英文的分号
Ctrl+D退出MySQL管理
如果是忘记admin账号密码,可以注册一个新用户,比如haha ,上面命令admin改haha 提升权限,然后登录管理后台修改admin密码。
22、比赛作业里面的时间是什么含义,OI排名跟普通排名有何区别?
时间是指参与人员做出对应题目“花费”的时间:
即:做出题目的时刻 – 比赛开始的时刻 + 惩罚时间
惩罚时间 = 做对之前错误的提交数 * 20分钟。
普通排名按做对的题目数和“花费”的时间进行排名。
OI排名,按得分排名,在开启judge.conf中的OJ_OI_MODE=1后,题目可以按通过的比例进行记分,每题100分。如果希望数据的分值不平均分配,可以使用[权重]作为文件名结尾。如 test01[60].in / test01[60].out 可占60的分数权重,而 test02[20].in/test02[20].out可占20的权重,如果没有其他测试数据,通过后者可以得本题100分中的25分。没有标明权重的数据,默认权重为10。
23、人多的时候,随机出现"No input file specified"
编辑/etc/php/7.4/fpm/pool.d/www.conf
修改设定 rlimit_files = 1024 为一个更大的值,如65535。修改后重启php-fpm进程(sudo service php7.4-fpm restart
)生效。
24、判题核心的原理是怎样的?
- 参考一下wiki
- 阅读一下judge_client.cc中的注释。
25、判题如何触发的?
judged通过UDP监听1536端口,Web端有新的提交或者重判任务时,将发送消息给judged,judged接受到消息,主动去数据库领取任务,fork出docker中的judge_client进行判题。
在SaaS模式中,judge_hub取代judged监听UDP端口,Web发送的消息包含SaaS目录下的子目录名,judge_hub根据SaaS根目录和消息,拼接出judged的主目录,并fork出judged进程去完成判题。judged完成所有数据库任务队列后,主动退出,等待下一次被judge_hub触发。
参考:JudgeHub
26、如何让学生账号在比赛中也能看到和练习一样的详细错误信息?
- 编辑db_info.inc.php,设置 $OJ_SHOW_DIFF=true;
- 打开文件reinfo.php 在27行和60行有两处详细注释,根据注释进行调整。
27、如何获得管理员权限?
- 操作系统Ubuntu的管理员权限是通过在安装过程中产生的账号运行sudo su切换到root。
- OJ的管理员是安装完成后,第一个注册的用户用admin作为用户名注册,自动获得管理权限。
28、权限表里的记录都是什么含义?
以下权限是手动指派:
- “administrator” 管理员,除查看源码外的所有权限。
- “problem_editor”:题目编辑者,添加和编辑题目。
- “source_browser”:查看审核所有提交的源代码,对比可疑的相似代码。
- “contest_creator”:组织创建比赛,编辑比赛。
- “http_judge”:HTTP远程判题账号。
- “password_setter”:重置普通账户密码。
- “printer”:现场赛打印员,注意该账户的school字段用于分配打印任务,如果只有一个打印区则置空。
- “balloon”:气球配送员,注意该账户的school字段用于分配气球任务,如果只有一个气球配送区则置空。
- “vip”:可以参与所有标题含有VIP字样的私有比赛。
- “problem_start”:HTTP远程判题账户的任务起始题号。
- “problem_end”:HTTP远程判题账户的任务结束题号。
新赋予的权限需要重新登陆获得!
以下权限是系统自动生成:
- p+数字:题目的独立编辑权,管理员可以编辑所有题目,problem_editor只能编辑自己添加的题目。
- m+数字: 比赛的独立编辑权,管理员可以编辑所有比赛,contest_creator只能编辑自己添加的比赛。
- c+数字:比赛的参与权,私有比赛只有有权限或者知道密码的用户可以参与。
29、如何使用题单功能?
在新闻内容中编写,格式为:
[plist=题号列表]题单名[/plist]
也可以在题目列表里,勾选题目后,点击NewProblemList按钮(仅限bs3/syzoj模板使用)。在db_info.inc.php中有选项 $OJ_MENU_NEWS ,设置为true后可以通过勾选新闻的“是否展示到菜单”,在顶层导航中显示该条目。
是否显示到菜
30、脚本把OJ装在哪里了?可以卸载么?
- 脚本安装默认位置在/home/judge,其中src是全部源码,data是测试数据,etc目录是判题端的配置文件,install目录是各种工具脚本。
- src/web/upload目录存放着所有上传的图片,包括新闻与题目的图片。
- Ubuntu中默认的数据库文件放置在/var/lib/mysql,但是不建议直接备份库文件,而是推荐用install目录中的bak.sh进行备份。
- 如果想卸载,可以参考src/install/uninstall.sh,注意卸载脚本不考虑服务器上可能存在的其他Web系统,请谨慎使用。(复制脚本里面的命令,root权限下粘贴执行)
31、题目的限时和内存限制的精度是怎样的?
- 题目限时允许设定的字面精度是0.001s,但是由于操作系统内核参数的限定,实测的精度通常为4ms。
- judge.conf中有个OJ_CPU_COMPENSATION来标注当前系统的CPU速度,安装脚本自动根据BogoMIPS的值来设定。
- 当BogoMIPS的值为5000时,这个值为1.000,当CPU的速度更快时,这个值为大于1.000的值。
- 最终系统记录的时间,将按照这个系数进行调整,对于对时间精度要求较高的场合,如正式比赛,或者判题机配置不均衡的情况,可以通过手工调节该参数,让不同的判题机对于相同题目的运行结果趋于一致。
内存限制的精度是1MB,对于本地native的编译型语言c/c++/pascal/freebasic/clang等是考察程序本身的内存申请空间; 对于虚拟机和脚本语言,则包含了虚拟机本身或解释器本身的内存消耗。
32、测试文件的大小、数量有什么限制?
一般情况下,单个测试文件大小建议不超过10M,测试文件总量10组(.in + .out)。
- 源码中对测试文件大小有个上限 STD_F_LIM = 32M 定义 生效
- /home/judge/etc/judge.conf 中有下面的若干配置可以影响系统设定。
- 在OJ_OI_MODE=1的情况下,题目限时是依赖于OJ_TIME_LIMIT_TO_TOTAL的:
- 当OJ_TIME_LIMIT_TO_TOTAL=1 限时应用于所有数据的总耗时
- 当OJ_TIME_LIMIT_TO_TOTAL=0,限时应用于每组测试文件。
- 状态页status.php(solution表)中记录的时间,取决于OJ_USE_MAX_TIME:
- 当OJ_USE_MAX_TIME=0时,记录的是总耗时。
- 当OJ_USE_MAX_TIME=1时,记录的是最高耗时。 因此,当测试数据组数较多时,推荐设定OJ_USE_MAX_TIME=0,OJ_TIME_LIMIT_TO_TOTAL=1 。
33、测试文件的文件名命名有什么规则?
- 一般推荐用英文命名,相同文件名的.in .out文件为一组。
- 不支持.ans的扩展名,请在上传前用Windows的命令行统一修改
ren *.ans *.out
。 - 支持在文件名中使用方括号
[]
来标注分数。如test01[20].in / test01[20].out
将视为分数是20分,未标注的文件按10分计分,系统最终根据所有文件的总分和运行得分,记录提交的通过率pass_rate放入solution表,用于前台显示。 - 评测的时候根据所有.in文件的字典序来评测, 因此test10先于test2评测, 后于test02评测。
34、为什么我的系统卡在编译中
- 如果修改了数据库密码,请注意除了db_info.inc.php需要修改,还需要修改judge.conf中的数据库密码,并需要重启judged进程。
- 如果judge.conf中启用了OJ_USE_DOCKER=1,请确保禁用了OJ_SHM_RUN=0,并检查run0等目录是真实的目录而非软连接。
- 如果如果OJ_USE_DOCKER=0时系统正常,OJ_USE_DOCKER=1时卡住,请检查install目录下的Dockerfile文件内容是否符合需求,并再次运行docker.sh确认运行结果正常。
- 修改OJ_USER_DOCKER参数,需要重启judged生效,方法是sudo pkill -9 judged && sudo judged
35、正式比赛或大规模系统需要注意哪些问题?
- 正式比赛推荐激活db_info.inc.php中的两个参数。
//static $OJ_EXAM_CONTEST_ID=1000; // 启用考试状态,填写考试比赛ID | |
//static $OJ_ON_SITE_CONTEST_ID=1000; //启用现场赛状态,填写现场赛比赛ID |
36、NOI CSP CCF 新标准使用C++14,如何在hustoj中更改默认的编译参数。
已经更新默认C++标准为C++14。可以检查,judge.conf 中是否有 OJ_CPP_STD=-std=c++14
即可。
37、C++ 中的gets函数哪里去了?为何编译报错?
根据 std::gets - cppreference.com , gets函数已经被移除。 可以使用#define gets(S) fgets(S,sizeof(S),stdin)
作为兼容性宏替换。
38、Python判题好慢好慢,如何加速?
如果你的系统主要为Python服务,可以修改/home/judge/etc/judge.conf
设 OJ_PYTHON_FREE=1
为了增加安全性,请在/home/judge/src/install
目录运行sudo bash docker.sh
,然后修改/home/judge/etc/judge.conf
设定 OJ_USE_DOCKER=1
这样设定后,可以提高Python的判题速度,并提供额外的安全防护。 推荐使用Ubuntu20.04作为基础系统。
39、是否可以只由管理员来注册账号,自己不能注册
可以,设置db_info.inc.php中的选项,
static $OJ_REGISTER=true; //true允许注册新用户,false禁止注册 | |
static $OJ_REG_NEED_CONFIRM=true; //true新注册用户需要审核,false无需审核直接登陆 |
关闭注册后,管理员可以在后台“比赛队账户生成器”,生成指定数量的账户用于分配。 http://xxxx.xxxxx/admin/team_generate.php
40、如何显示MathJax语法的公式?
修改db_info.inc.php设置
static $OJ_MATHJAX=true; // 激活mathjax
需要用户能够正常访问互联网,内网用户需要自行部署mathjax内网镜像,并修改template/bs3/problem.php中相关路径。
41、如何启用查重机制?
修改/home/judge/etc/judge.conf,设置
OJ_SIM_ENABLE=1
修改/home/judge/src/web/include/db_info.inc.php,设置
$OJ_SIM=true;
- 抄袭只对不同账号间生效,自己抄袭自己不计。拥有Source_browser权限的账号可以看到具体数值和对比。
42、请问如何重启判题机?
sudo pkill -9 judged | |
sudo judged |
43、XXXXX 这个文件是在哪的
cd / sudo find -name "XXXXX"
44、数据库账号密码是什么,如何登陆mysql?
数据库账号密码存放在两个配置文件中:
/home/judge/etc/judge.conf | |
/home/judge/src/web/include/db_info.inc.php |
新版本中,快速登陆mysql的脚本在install目录里,名字为mysql.sh 使用方法
sudo bash /home/judge/src/install/mysql.sh
45、hustoj 安装phpmyadmin
sudo apt-get -y install phpmyadmin
第一个对话框询问关于Configure database for phpmyadmin with dbconfig-common
用Tab键选到No,回车。
在后续对话框中,不要选择任何一个(apache/lighthttpd都不选),用Tab键选到最下面的OK
安装完成后,执行
sudo ln -s /usr/share/phpmyadmin /home/judge/src/web/pma
然后就可以在OJ的网页端,用http://IP或域名/pma/ 来访问phpmyadmin了
数据库帐号密码 在/home/judge/src/web/include/db_info.inc.php中。
46、如何用Windows上的Navicat去连接远程服务器上的mysql?
利用ssh的端口转发机制,把Windows本地的3306端口映射到远程的3306端口上,就可以用前面一个问题中查到的账号密码去连接数据库了。对于Navicat参考使用Navicat进行ssh通道连接MySQL数据库_温暖如春520的博客-CSDN博客
注意常规标签里写的是配置文件里查到的数据库的账号密码,SSH标签里写的是连接SSH用的账号密码。如果你的ssh服务端口不是22,记得要修改成正确的端口。
对于putty,参考下图:
47、后台导入题库失败?
1、先用谷歌浏览器直接打开xml文件,看是否有语法错误,如果有,用文本编辑器修订提示的行号。
2、如果超过100M,可以先用EasyFPSViewer拆分成多个小文件,然后再导入。
3、对于HUSTOJ,可以先压缩为zip再上传导入
4、修改/etc/php/7.2/fpm/php.ini, 提高post_max_size、upload_max_filesize 、memory_limit、max_execution_time 的值。修改后执行sudo service php7.2-fpm restart生效。
48、电脑配置太高,造了很多数据还是没法卡住暴力怎么办?
修改/home/judge/etc/judge.conf
OJ_CPU_COMPENSATION=1.0
增加这个值可以降低CPU的评测速度,安装脚本根据CPU的bogomips值来初始化。 最高不超过100,设为100可以将原先1ms的测试数据计成100ms。
49、为什么题目不见了/如何让比赛里的题目也可以在练习里做?
这是由ACM的规则决定的,因为做错有罚时,如果比赛题目在练习中同时可用,则会导致选手可以先在练习中AC,然后再去比赛中提交,从而绕过罚时。另外,比赛题目如果在比赛还没开始的时候,就在练习中出现,则会有漏题的嫌疑,类似某网络原题赛。
当一个题目在作业里被隐藏的时候,如果有老师希望学生可以做这些题目,可以布置自己的作业,将题目加进去,提供给学生做。
一个题目可以同时出现在不同的作业、比赛里。
练习中出现的题目必须满足:
0、已经被管理员设置为可用
1、不在任何未结束的公开作业、比赛中
2、不在任何私有的作业、比赛中
3、题号大于等于1000
比赛的题目在比赛添加后,直到结束前,是不能在练习中看到和提交的,否则比赛将泄题或罚时被绕过。
私有比赛的题目,在比赛结束后,仍然保留,即使比赛被隐藏也是一样,这是为了防止下一届新生提前获知测试内容。
如果希望私有比赛后,题目公开可做,请将比赛切换为公开。
50、其他主机怎么连接到oj?
这取决于买的阿里云还是校园网服务器,或者虚拟机: 阿里云直接用阿里提供的公网ip访问,也可以添加域名解析后用域名访问。 校园网,用学校提供的内网ip或二级域名访问。 虚拟机,百度“【虚拟机的名字如virtualbox或vmware】+端口映射” ,把80端口转进去,然后用物理机的ip地址访问。
51、关于NOIP赛制
- 设置judge.conf中的OJ_OI_MODE=1 //不在单个数据点WA时停止判题,而是继续判题
- 设置db_info.inc.php中的 $OJ_MARK=”mark”; // 非AC的提交结果显示得分而非错误比率
- 设置db_info.inc.php中的 $OJ_OI_1_SOLUTION_ONLY=true; //比赛是否采用noip中的仅保留最后一次提交的规则。
- 添加比赛时,比赛标题中包含”NOIP”这个关键词 // 赛后才能看结果
- “NOIP”这个敏感词在db_info.inc.php中可以修改
52、随机的CE编译错误怎么处理?
- 检查OJ_RUNNING的设置与run?目录的对应关系,例如:OJ_RUNNING=2,需要run0 run1两个目录,属主judge,权限700。
- 有的题目CE有的题目AC,适当放宽judge_client.cc中compile函数里的CPU、内存、文件限制。约1234行前后。修改后需在core目录执行sudo bash make.sh
53、如何让判题程序忽略行尾的空白字符
在judge_client.cc头部增加宏定义 IGNORE_ESOL 或者修改 Makefile 增加 -DIGNORE_ESOL 参数。
54、配置文件里的字段什么含义?
55、为何页面总是需要刷新才能显示?
如果您使用的是ie6浏览器,请禁用服务器上的deflate模块,在ubuntu下的命令是
sudo rm /etc/apache2/mods-enabled/deflate.* sudo /etc/init.d/apache2 restart
56、hustoj 为什么我提交的答案始终在pending?
判题程序judged需要用root帐号启动,请重启服务器或手动执行sudo judged。如果无效,请检查/home/judge/etc/judge.conf中的数据库账号配置,参考[Configuration],修正后再次重启服务器或执行sudo pkill -9 judged等待一会儿再执行sudo judged
57、为什么添加题目时出现warning,题目目录下数据没有自动生成?
您需要修改测试数据目录,给予php-fpm操作数据目录的权限。Ubuntu下php-fpm运行的用户身份是www-data
chgrp www-data -R /home/judge/data | |
chmod g+rw -R /home/judge/data | |
58、为什么我添加的题目普通用户看不到?
题目默认为删除状态,只有管理员能访问,当管理员确认题目没有问题后,可以点击ProblemList中红色的Reserved,切换为绿色的Available启用题目。
59、为何我的C/C++都能用,唯独Java总是CE/RE?
目前只支持sun原版jdk和openjdk,其他jdk暂不能保证支持。如果你用的是64位系统,你可能需要自己调整一下源代码。请联系我。
60、我是管理员,为什么不能查看别人的源码?
请给自己增加source_browser权限。
61、如何进入后台?
以管理员身份登录,点击Admin/管理进入后台。
62、如何手工添加题目?
注册好admin用户后,右上角有管理入口。管理界面有说明,问题管理中添加问题。
添加时只能提供一组样例+一组测试数据,但保存后可以在列表最右侧找到测试数据管理入口,允许上传、生成、解压更多测试数据。
63、多组数据怎么上传?
加好题目后在题目列表找TestData,点击上传。 主文件名一样的*.in *.out,如test1.in test1.out
64、如何添加测试数据?
添加题目时,可以在test input/test output添加一组测试数据,大规模的数据(10kb+)和更多的数据,可以在添加完题目后,通过ftp/sftp,上传到题目对应目录,通常是 /home/judge/data/题号。命名规则是输入数据以.in结尾,输出数据以.out结尾,主文件名相同。
65、hustoj 如何快速构造测试数据?
1、在上传测试数据界面有“随机测试数据生成器”可以用元语言方式生成随机输入。构造系列.in结尾的文件。如:test01.in test02.in
2、自己编写一个标注答案,接受符合格式的输入,产生正确输出。放在测试数据目录中,命名为Main.cc
3、 登陆服务器ssh, 将这个程序编译为可执行文件Main,如g++ -o Main Main.cc
4、在测试数据目录下执行 /home/judge/src/install/makeout.sh Main
5、上述脚本将根据test01.in test02.in自动生成test01.out test02.out
66、如何编辑题目?
后台中点击问题-管理ProblemList,找到需要编辑的题目,点击 编辑 Edit。编辑时不能修改测试数据,测试数据请使用ftp工具修改。
67、如何启用题目?
题目添加后,默认是停用状态,以防比赛提前漏题,后台中点击问题-管理 ProblemList,找到题目,点击Reserved 切换为Available启用题目,或者组织比赛,比赛中的题目将自动启用。
68、如何组织比赛?
在题目列表ProblemList中选择使用的题目,在PID一栏打钩,点击CheckToNewContest按钮,进入到比赛添加页面,输入比赛名称,设定比赛时间,语言类型,访问权限提交即可。 | |
也可以使用管理菜单中的NewContest,需要手动输入题目编号,用英文逗号分隔。 |
69、hustoj 如何修改、删除比赛?
点击比赛列表ContestList,选择Edit或Delete。
70、如何修改公告信息?
点击SetMessage。修改无效请检查admin/msg.txt是否对php账号(www-data)可写
71、如何修改用户密码?
点击 用户-修改密码
72、如何重新判题?
点击Rejudge,输入题号或运行编号。
73、如何增加用户权限?
Addprivilege/添加权限, administrator为管理员,source_browser为代码审查,contest_creator为比赛组织者。 通常给使用系统的老师分配代码审查和比赛组织者权限即可。
74、如何导入、导出题目?
目前支持 FPS 、 QDUOJ、HOJ、hydro OJ的格式导入。
使用ImportProblem,上传FPS文件。 | |
使用ExportProblem,输入起始编号,结束编号,或题号列表,如果输入了列表,起始结束将不起作用。 |
75、hustoj 如何更新数据库结构?
系统升级中,有对数据库的修改,这些修改不能通过SVN实现自动更新,如果发现升级web/core代码后系统报错,可以执行update database操作,进行数据库升级。因为脚本中有测试代码,所以重复执行不会造成影响。
76、hustoj 部署在Centos7系统中无法正常评测,如何解决?
由于hoj使用的判题机中的安全沙盒使用环境的特殊性,如果想在centos7系统中正常运行hoj-judgeserver服务,需要开启 user 命名空间来使用。
echo user.max_user_namespaces=10000 >> /etc/sysctl.d/98-userns.conf
docker restart hoj-judgeserver
重新启动hoj-judgeserver的docker容器即可正常评测。
77、修改 fps文件 可上传题库文件的大小限制
修改php.ini文件,提高可上传文件的大小限制 默认50MB
进入/etc目录下的php.ini文件 set nu!
sudo vim /etc/php/7.2/fpm/php.ini 674行
修改 post_max_size = 128M upload_max_filesize = 128M // 后面的大小可更改
修改后执行 sudo service php-fpm restart 生效。
78、手动重判题目
1、题目一直卡在编译中或评测中 (填写 提交编号 )
2、修改了评测数据 重新评测
79、在哪里调整和开关一些功能?
大部分功能和选项的开关和参数调整 配置文件中:
路径 内容
/home/judge/etc/judge.conf 判题 judged judge_client
/home/judge/src/web/include/db_info.inc.php Web
/etc/php5/fpm/php.ini 或 /etc/php7.0/fpm/php.ini 或 /etc/php.ini (in Centos7) php
/etc/nginx/sites-enabled/default 或 /etc/nginx/nginx.conf (in Centos7) nginx
80、已经过了10秒,为什么系统还是说我提交过于频繁?
sudo apt-get install tzdata
时区选择北京或上海
修改db_info.inc.php
sudo vim /home/judge/src/web/include/db_info.inc.php
老版本打开末尾关于时区的两行代码
新版本把OJ_FRIENDLY_LEVEL调到1
81、hustoj 如何批量添加新用户?
批量复制粘贴:用户管理-用户添加
文件批量导入:用户管理-用户导入
82、单个新用户如何注册?
首页 左上角 注册 按钮 ,如果没有显示 可能被过多的菜单遮挡,Ctrl+滚轮 缩放页面。
83、新用户注册后,管理员审核通过生效? 如何禁止新用户注册?
修改 db_info.inc.php 文件设置
vim /home/judge/src/web/include/db_info.inc.php
107、HustOj数据库 表作用对照
HustOj数据库 表作用 | |||
序号 | 表名 | 作用 | 备注 |
1 | compileinfo | 记录编译错误的记录 | |
2 | contest | 竞赛表 | |
3 | contest_problem | 竞赛题目 | |
4 | loginlog | 登入日志 | 记录正确与错误的登入日志 |
5 | | 消息列表 | |
6 | news | 新闻表 | |
7 | online | ??? | |
8 | privilege | 权限授予 | |
9 | problem | 题目表 | |
10 | reply | 论坛(帖子及回复)表 | |
11 | runtimeinfo | 运行错误信息(RuntimeError) | |
12 | sim | 相似度检测表 | 用于防作弊 |
13 | solution | 程序运行结果记录 | |
14 | source_code | 提交的源码 | |
15 | topic | 论坛帖子表 | |
16 | users | 用户信息 |
108、problem 题目表各字段的含义
problem | 题目表 | |||
字段名 | 类型 | 长度 | 是否允许为空 | 备注 |
problem_id | int | 11 | N | 题目编号,主键 |
title | varchar | 200 | N | 标题 |
description | text | Y | 题目描述 | |
inupt | text | Y | 输入说明 | |
output | text | Y | 输出说明 | |
sample_input | text | Y | 输入参照 | |
sample_output | text | Y | 输出参照 | |
spj | char | 1 | N | 是否为特别题目 |
hint | text | Y | 暗示 | |
source | varchar | 100 | Y | 来源 |
in_date | datetime | Y | 加入时间 | |
time_limit | int | 11 | N | 限时(秒) |
memory_limit | int | 11 | N | 空间限制(MByte) |
defunct | char | 1 | N | 是否屏蔽(Y/N) |
accepted | int | 11 | Y | 总ac次数 |
submit | int | 11 | Y | 总提交次数 |
solved | int | 11 | Y | 解答 |
109、hustoj 如何修改收藏图标 favicon.ico ?
在线生成透明ICO图标——ICO图标制作(https://www.ico51.cn/)
生成64*64的图标文件 自动命名为 favicon.ico ,通过上传工具放置在以下目录:
/home/judge/src/web/favicon.ico
110、hustoj 如何替换 文字logo 为 图片?
尺寸约130*40 ,上传以下目录 /home/judge/src/web/image 命名为 logo.png
修改文件 sudo vim /home/judge/src/web/template/syzoj/header.php
<img src="/image/logo.png" alt="" /></img>
hustoj有两个配置文件,互相独立,分别供core和web使用。
core(judged/judge_client)使用的配置文件是judge.conf,默认位置/home/judge/etc,内容如下
注意core没有识别引号和注释的能力,所以不要自行增加任何引号或注释,否则可能影响judged启动,下面的解释仅做阅读,不能放入配置文件。
judge.conf
OJ_HOST_NAME=127.0.0.1 如果用mysql连接读取数据库,数据库的主机地址
OJ_USER_NAME=root 数据库帐号
OJ_PASSWORD=root 数据库密码
OJ_DB_NAME=jol 数据库名称
OJ_PORT_NUMBER=3306 数据库端口
OJ_RUNNING=4 judged会启动judge_client判题,这里规定最多同时运行几个judge_client
OJ_SLEEP_TIME=5 judged通过轮询数据库发现新任务,轮询间隔的休息时间,单位秒
OJ_TOTAL=1 老式并发处理中总的judged数量
OJ_MOD=0 老式并发处理中,本judged负责处理solution_id按照TOTAL取模后余数为几的任务。
OJ_JAVA_TIME_BONUS=2 Java等虚拟机语言获得的额外运行时间。
OJ_JAVA_MEMORY_BONUS=512 Java等虚拟机语言获得的额外内存。
OJ_SIM_ENABLE=0 是否使用sim进行代码相似度的检测
OJ_HTTP_JUDGE=0 是否使用HTTP方式连接数据库,如果启用,则前面的HOST_NAME等设置忽略。
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline 使用HTTP方式连接数据库的基础地址,就是OJ的首页地址。
OJ_HTTP_USERNAME=admin 使用HTTP方式所用的用户帐号(HTTP_JUDGE权限),该帐号登录时不能启用VCODE图形验证码,但可以登录成功后启用。
OJ_HTTP_PASSWORD=admin 密码
OJ_OI_MODE=0 是否启用OI模式,即无论是否出错都继续判剩余的数据,在ACM比赛中一旦出错就停止运行。
OJ_SHM_RUN=0 是否使用/dev/shm的共享内存虚拟磁盘来运行答案,如果启用能提高判题速度,但需要较多内存。
OJ_USE_MAX_TIME=1 是否使用所有测试数据中最大的运行时间作为最后运行时间,如果不启用则以所有测试数据的总时间作为超时判断依据。
db_info.inc.php
db_info.inc.php
static $DB_HOST="localhost"; 数据库的服务器地址
static $DB_NAME="jol"; 数据库名
static $DB_USER="root"; 数据库用户名
static $DB_PASS="root"; 数据库密码
// connect db
static $OJ_NAME="HUSTOJ"; OJ的名字,将取代页面标题等位置HUSTOJ字样。
static $OJ_HOME="./"; OJ的首页地址
static $OJ_ADMIN="root@localhost"; 管理员email
static $OJ_DATA="/home/judge/data"; 测试数据所在目录,实际位置。
static $OJ_BBS="discuss";//"bbs" 论坛的形式,discuss为自带的简单论坛,bbs为外挂论坛,参考bbs.php代码。
static $OJ_ONLINE=false; 是否使用在线监控,需要消耗一定的内存和计算,因此如果并发大建议关闭
static $OJ_LANG="en"; 默认的语言,中文为cn
static $OJ_SIM=true; 是否显示相似度检测的结果。
static $OJ_DICT=true; 是否启用在线英字典
static $OJ_LANGMASK=1008; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language 用掩码表示的OJ接受的提交语言,可以被比赛设定覆盖。
static $OJ_EDITE_AREA=true;// 是否启用高亮语法显示的提交界面,可以在线编程,无须IDE。
static $OJ_AUTO_SHARE=false;//true: 自动分享代码,启用的话,做出一道题就可以在该题的Status中看其他人的答案。
static $OJ_CSS="hoj.css"; 默认的css,可以选择dark.css和gcode.css,具有有限的界面制定效果。
static $OJ_SAE=false; //是否是在新浪的云平台运行web部分
static $OJ_VCODE=true; 是否启用图形登录、注册验证码。
static $OJ_APPENDCODE=false; 是否启用自动添加代码,启用的话,提交时会参考$OJ_DATA对应目录里是否有append.c一类的文件,有的话会把其中代码附加到对应语言的答案之后,巧妙使用可以指定main函数而要求学生编写main部分调用的函数。
static $OJ_MEMCACHE=false;是否使用memcache作为页面缓存,如果不启用则用/cache目录
static $OJ_MEMSERVER="127.0.0.1"; memcached的服务器地址
static $OJ_MEMPORT=11211; memcached的端口
111、如何完全卸载 hustoj?
如果想卸载,可以参考src/install/uninstall.sh,注意卸载脚本不考虑服务器上可能存在的其他Web系统,请谨慎使用。
对于正在运行中的生产服务器,任何操作前请做好离线备份。
或者下载最新脚本
hustoj/trunk/install/uninstall.sh at master · zhblue/hustoj · GitHub
#!/bin/bash
USER=`cat /etc/mysql/debian.cnf |grep user|head -1|awk '{print $3}'`
PASSWORD=`cat /etc/mysql/debian.cnf |grep password|head -1|awk '{print $3}'`
CPU=`grep "cpu cores" /proc/cpuinfo |head -1|awk '{print $4}'`
pkill -9 judged
service php7.2-fpm stop
service mysql stop
service nginx stop
service memcache stop
echo "drop database jol;"|mysql -h localhost -u$USER -p$PASSWORD
docker rmi hustoj
for PKG in docker.io make flex g++ clang libmysqlclient-dev libmysql++-dev php-fpm nginx mysql-server php-mysql php-common php-gd php-zip fp-compiler openjdk-11-jdk mono-devel php-mbstring php-xml
do
apt-get purge -y $PKG
done
userdel -r judge
112、hustoj如何设置OI赛制(不影响自测,但无法判题)
比赛开始前停止判题进程,终端命令下执行:
sudo pkill -9 judged
比赛结束后开启判题进程:
sudo judged
113、hustoj如何设置只能看到自己参与的比赛
后台设置比赛的参与名单,在名单中的人默认只显示自己有关的比赛,直到点击“显示所有比赛”。
或者未登录和没有参加任何比赛的人,默认显示所有比赛。
以上逻辑都在contest.php中,按照需要修改。
114、hustoj如何在导航栏增加新的菜单
115、hustoj 如何修改默认字体大小
修改 /home/judge/src/web/template/syzoj/css/white.css 末尾 设置页面内容字体大小。
修改 /home/judge/src/web/template/syzoj/submitpage.php 432行 设置代码输入框的字体大小。
116、hustoj 如何删除多余的公告
1、禁用该公告 不显示
2、编辑成新的