XXXX
HappyOJ当前支持的程序语言,如需添加其他语言或者版本,可在此留言~
| 语言 | 编译环境 |
|——|———|
| C | GNU C 4.5.2|
| C++ | GNU C++ 4.5.2 |
| Java | Java 1.8 |
| Pascal | Pascal 2.6.4 |
| Python | Python 3.10 |
| Ruby | Ruby 3.1.1 |
| Perl | Perl 5.32.1.1|
| Lua | Lua 0.9.8 |
| Tcl | Tcl 8.6.7.0 |
| Pike | Pike 7.8.352 |
| GO| GO 1.18.1 |
| JS| nodejs 16.14.2 |
| Groovy | Groovy 1.8.4 |
| Rust | Rust 1.60.0 |
| Kotlin | Kotlin 1.1.2 |
| R| R 4.1.3|
没错,我们支持Windows平台,也支持Linux平台(Linux下当前仅支持Virtual Judge)。<br>
Online Judge平台系统(简称OJ)是一个B/S架构的源程序判题系统。用户可以在线提交多种程序(如C、C++、Java)源代码,系统对源代码进行编译和执行,并通过预先设计的测试用例来检验程序源代码的正误。
用户可以在Online Judge系统上练习编程,参加竞赛,与其他用户讨论交流,提高自己的编程水平,并可以用于数据结构、程序设计教学的实验和考试。
操作系统:Windows XP/7/8/8.1/10, Windows Server 2003/2008/2012
JAVA JDK:Java JDK1.8(推荐)<br>
OJ系统对JDK安装位置没有要求,直接安装完成。以安装D:\Java\jdk1.8.0_201为例。<br>
然后添加环境变量:<br>
JAVA_HOME=D:\Java\jdk1.8.0_201
path=%JAVA_HOME%\bin
Web容器:Apache Tomcat 8(推荐);安装目录:D:\tomcat8<br>
数据库:MySQL 5.1.55(推荐)<br>
字符集选择GBK,端口选择默认的3306,设置用户名root,密码rootpwd<br>
然后创建gdoj命名的数据库,并执行online-judge\judger_sql目录下的sql_import_struct.bat一键导入gdoj_struct.sql<br>
编译环境:GCC、JAVA、PASCAL、Python、Ruby等编程语言编译环境<br>
可下载https://gitee.com/jungle/online-judge-compiler后,运行env.bat一键配置GCC、JAVA、PASCAL,但要注意修改JAVA_HOME的正确路径: <br>
set JAVA_HOME=D:\Java\jdk1.8.0_201
setx JAVA_HOME "D:\Java\jdk1.8.0_201" /m
OJ_WEB=D\:\\tomcat8\\webapps\\ROOT\\
OJ_PATH=D\:\\OJ\\
OJ_DATA_PATH=D\:\\OJ\\data\\
OJ_TMP=D\:\\OJ\\temp
OJ_JUDGE_LOG=D\:\\OJ\\logfile\\judge_log\\ ---> 必须配置正确,否则web端无法查看判题日志
OJ_CONFIG_FILE_PATH=D\:\\OJ\\conf\\config.json ---> 必须配置正确,否则web无法获取支持的编译语言
OJ_JUDGER_IP=127.0.0.1 ------> 必须配置正确,用于WEB与OJ-Kernel通信的IP
OJ_JUDGER_PORT=5000 ------> 必须配置正确,用于WEB与OJ-Kernel通信的端口号,必须与OJ-Kernel的配置一致
<property name="username" value="root"></property>
<property name="password" value="rootpwd"></property>
<property name="connection.username">root</property>
<property name="connection.url">jdbc:mysql://localhost:3306/gdoj</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">localhost</property>
<property name="connection.password">rootpwd</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
创建目录D:\OJ,并拷贝online-judge/judger-kernel/release到OJ目录下,如:
预配置OJ启动配置文件D:\OJ\conf\config.json, 配置sock_port和mysql账号密码, 配置支持的编译语言languages
"system": {
"startup_config": "config.cfg",
"sysname": "Judge-Kernel",
"JudgePath": "judger.exe",
"sock_port": 5000 -----> 系统本地Socket监听的端口号,需要保持与config.properties中的一致
},
"mysql": {
"url": "localhost",
"username": "root",
"password": "rootpwd",
"table": "gdoj",
"port": 3306
},
"languages": [
{
"id": 1,
"language_name": "MS 2010 C++", --> 编译语言别名,可现实与web上语言下拉框
"Transcoding": 1,
"TimeLimit": 1,
"ProcessLimit": 1,
"SourcePath": "%PATH%%SUBPATH%%NAME%.%EXT%",
"ExePath": "%PATH%%SUBPATH%%NAME%.%EXE%",
"RunCmd": "%PATH%%SUBPATH%%NAME%.%EXE%",
"JudgeIP": "127.0.0.1",
"disable": 1 --> 禁用此语言
},
{
"id": 2,
"language_name": "MS 2010 C",
"Transcoding": 1,
"disable": 1
},
{
"id": 3,
"language_name": "GNU C++ 4.5.2",
"LanguageExt": "cc",
"LanguageExe": "exe",
"CompileCmd": "g++ -ansi -fno-asm -Wall -Wl,--stack=67108864 -lm -s -static -std=c++98 -DONLINE_JUDGE -o %PATH%%SUBPATH%%NAME% %PATH%%SUBPATH%%NAME%.%EXT% 2>%PATH%%SUBPATH%%NAME%.txt"
},
{
"id": 4,
"language_name": "GNU C 4.5.2",
"LanguageExt": "c",
"LanguageExe": "exe",
"CompileCmd": "gcc -ansi -fno-asm -Wall -Wl,--stack=67108864 -lm -s -static -std=c99 -DONLINE_JUDGE -o %PATH%%SUBPATH%%NAME% %PATH%%SUBPATH%%NAME%.%EXT% 2>%PATH%%SUBPATH%%NAME%.txt"
},
{
"id": 5,
"language_name": "Java 1.8",
"TimeLimit": 2,
"LanguageExt": "java",
"LanguageExe": "class",
"SourcePath": "%PATH%%SUBPATH%Main.%EXT%",
"ExePath": "%PATH%%SUBPATH%Main.%EXE%",
"CompileCmd": "javac %PATH%%SUBPATH%Main.%EXT% 2>%PATH%%SUBPATH%%NAME%.txt",
"RunCmd": "java Main"
}
],
"hdu_languages": [
{
"id": 3, --> 此语言对应HDU上的ID
"language_name": "C++",
"local_language_id": 3 --> 对应本地编译的语言id。可不填,则表示不支持
},
{
"id": 4,
"language_name": "C",
"local_language_id": 4
},
{
"id": 5,
"language_name": "Java",
"local_language_id": 5
}
],
"cf_languages": [
{
"id": 54, --> 此语言对应codeforces上的ID
"language_name": "GNU G++17 7.3.0",
"local_language_id": 3
},
{
"id": 43,
"language_name": "GNU GCC C11 5.1.0",
"local_language_id": 4
},
{
"id": 36,
"language_name": "Java 1.8.0_241",
"local_language_id": 5
},
{
"id": 7,
"language_name": "Python 2.7.18",
"local_language_id": 9
},
{
"id": 31,
"language_name": "Python 3.8.10",
"local_language_id": 27
},
{
"id": 67,
"language_name": "Ruby 3.0.0",
"local_language_id": 10
}
]
Huawei_judger>display current-configuration include-default
sysname Huawei_judger
#
telnet server enable
telnet authentication-mode aaa
#
ftp server enable
#
aaa
local-user root password Root@123
local-user root service-type telnet ftp
#
judge enable
virtual-judge enable
#
contests-collect enable
contests-collect interval 30
contests-collect save-file D:\tomcat8\webapps\ROOT\otheroj.json
#
judge-mgr
mode acm
undo auto-detect enable
auto-detect interval 10
security enable
ignore extra-space enable
testcase-path data
#
virtual-judge-mgr
hdu-judge enable
hdu-judge username root password Root@123
undo hdu-judge remote-judge enable
#
return
#
Huawei_judger>
## 高级配置
### 熟悉命令行
用户通过命令行对系统下发各种命令来实现对系统的配置与日常维护操作。
* 不完整命令字输入<br>
系统支持不完整命令字输入,即在当前视图下,当输入的字符能够匹配唯一的命令字时,可以不必输入完整的命令字。该功能提供了一种快捷的输入方式,有助于提高操作效率。
Judge-Kernel]dis us
Judge-Kernel>display us
* Tab键自动补全命令字<br>
输入不完整的命令字后按下Tab键,系统将自动补全命令字。<br>
如果TAB自动补全能匹配到多个命令字,循环TAB时将循环显示所有的命令字。<br>
Judge-Kernel>?
* 命令行在线帮助<br>
在线帮助是指在任何时候任何视图下,用户可以通过输入“?”来获取在线帮助。<br>
用户复杂的命令行过于繁琐而难以记忆时使用,以便完成命令行的正确输入。<br>
Judge-kernel>
* 进入命令行视图
1. 用户视图<br>
用户从终端成功登录至系统即进入用户视图,在屏幕上显示:
系统视图<br>
在用户视图下,输入命令system-view后回车,进入系统视图。<br>
在系统视图下,用户可以配置系统参数以及通过该视图进入其他的功能配置视图。
Judge-Kernel>system-view
Judge-Kernel]
Judge-Kernel]?
aaa Authentication Authorization Accounting
diagnose-view Enter the daignose view
display Display
hdu-judge HDU-Judge
judge Judge of OJ
mysql Mysql
ndp NDP
quit Quit from the current system view
reboot Reboot Judge kernel
return Return to the user view
save Save configuration
sysname Set system name
telnet Telnet Protocol
undo Undo operation
virtual-judge Virtual judge
Judge-Kernel]
诊断视图<br>
在系统视图下,输入命令diagnose-view后回车,进入诊断视图。<br>
在诊断视图下,用户可以执行一些诊断命令,以及一些高级配置,建议在熟悉系统的工程师使用。
Judge-Kernel]diagnose-view
Judge-Kernel-diagnose]
Judge-Kernel-diagnose]?
display Display
quit Quit from the current system view
return Return to the user view
set Set value
version Show version of solfware
Judge-Kernel-diagnose]
#通过quit回退到上一层视图
Judge-Kernel-diagnose]quit
Judge-Kernel]
#直接通过return惠推倒用户视图
Judge-Kernel-diagnose]return
Judge-Kernel>
#使能judge功能
Judge-Kernel>system-view
Judge-Kernel]judge enable
#去使能judge功能
Judge-Kernel>system-view
Judge-Kernel]undo judge enable
judge-mgr<br>
1)命令行功能:<br>
judge-mgr 命令用于进入judge-mgr视图,以便配置本地judger相关配置<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
#进入judge-mgr视图
judger>system-view
judger]judge-mgr
judger-judge-mgr]
mode<br>
1)命令行功能:<br>
mode acm 命令用于切换judger为acm模式<br>
mode oi 命令用于切换judger为oi模式<br>
缺省情况下,judger处于acm模式<br>
2)视图:<br>
judge-mgr视图<br>
3)使用举例<br>
#切换judger为acm模式
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]mode acm
#切换judger为oi模式
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]mode oi
security enable<br>
安全防护(API HOOK)可以保护OJ不被恶意提交的程序破坏,如关机、关闭进程等操作。<br>
1)命令行功能:<br>
security enable 命令用于使能安全防护(API HOOK)<br>
undo security enable 命令用于去使能安全防护(API HOOK)<br>
缺省情况下,judger安全防护(API HOOK)是使能的<br>
注意:当前该功能并不成熟,如果出现误判,在可以保证不出现攻击的情况下,可以先选择关闭,然后联系我们解决。
2)视图:<br>
judge-mgr视图<br>
3)使用举例<br>
#使能安全防护(API HOOK)
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]security enable
#去使能安全防护(API HOOK)
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]undo security enable
judger-judge-mgr]display this
#
judge-mgr
undo security enable
testcase-path D:\OJ\data\
#
return
#
judger-judge-mgr]
auto-detect enable<br>
自动检测用于自动发现未完成判题的提交,避免因设备故障导致的部分提交未完成能够及时发现并判题。<br>
1)命令行功能:<br>
auto-detect enable 命令用于使能自动检测<br>
undo auto-detect enable 命令用于去使能自动检测<br>
缺省情况下,judger自动检测是去使能的<br>
2)视图:<br>
judge-mgr视图<br>
3)使用举例<br>
#使能自动检测
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]auto-detect enable
testcase-path<br>
1)命令行功能:<br>
testcase-path STRING<1-256> 命令用于配置judger的测试用例目录<br>
2)视图:<br>
judge-mgr视图<br>
3)使用举例<br>
#配置judger的测试用例目录为D:\OJ\data\
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]testcase-path D:\OJ\data\
judger-judge-mgr]display this
#
judge-mgr
testcase-path D:\OJ\data\
#
return
#
judger-judge-mgr]
#配置judger使能忽略多余空格换行
judger>system-view
judger]judge-mgr
judger-judge-mgr]
judger-judge-mgr]ignore extra-space enable
judger-judge-mgr]display this
#
judge-mgr
ignore extra-space enable
#
return
#
judger-judge-mgr]
virtual-judge enable<br>
当前仅支持hdu的虚拟判题。<br>
1)命令行功能:<br>
virtual-judge enable 命令用于使能虚拟判题功能<br>
undo virtual-judge enable 命令用于去使能虚拟判题功能<br>
缺省情况下,虚拟判题功能处于去使能状态<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
#使能虚拟判题功能
Judge-Kernel>system-view
Judge-Kernel]virtual-judge enable
#去使能虚拟判题功能
Judge-Kernel>system-view
Judge-Kernel]undo virtual-judge enable
hdu-judge enable<br>
1)命令行功能:<br>
hdu-judge enable 命令用于使能HDU虚拟判题功能<br>
undo hdu-judge enable 命令用于去使能HDU虚拟判题功能<br>
缺省情况下,HDU虚拟判题功能处于去使能状态<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
#使能HDU虚拟判题功能
Judge-Kernel>system-view
Judge-Kernel]hdu-judge enable
#去使能HDU虚拟判题功能
Judge-Kernel>system-view
Judge-Kernel]undo hdu-judge enable
virtual-judge-mgr<br>
1)命令行功能:<br>
virtual-judge-mgr 命令用于进入virtual-judge-mgr视图,以便配置virtual judger相关配置<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
#进入virtual-judge-mgr视图
judger>system-view
judger]virtual-judge-mgr
judger-vjudge-mgr]
hdu-judge username password<br>
1)命令行功能:<br>
hdu-judge username STRING<1-24> password STRING<1-24> 命令用于配置HDU虚拟判题下,在HDU平台上的账号<br>
2)视图:<br>
virtual-judge-mgr视图<br>
3)使用举例<br>
hdu-judge remote-judge enable<br>
使能HDU虚拟判题远端裁判功能后,HDU的虚拟判题将在分布式部署的其他OJ系统执行相关判题。
1)命令行功能:<br>
hdu-judge remote-judge enable 命令用于使能HDU虚拟判题远端裁判功能<br>
undo hdu-judge remote-judge enable 命令用于去使能HDU虚拟判题远端裁判功能<br>
缺省情况下,HDU虚拟判题远端裁判功能处于去使能状态。<br>
注意还需要配置远端OJ服务器的IP和端口号( hdu-judge ip STRING<1-24> port INTEGER<1-65535> )。<br>
2)视图:<br>
virtual-judge-mgr视图<br>
3)使用举例<br>
#使能HDU虚拟判题远端裁判功能
judger>system-view
judger]virtual-judge-mgr
judger-vjudge-mgr]hdu-judge remote-judge enable
#去使能HDU虚拟判题远端裁判功能
judger>system-view
judger]virtual-judge-mgr
judger-vjudge-mgr]undo hdu-judge remote-judge enable
hdu-judge ip port<br>
1)命令行功能:<br>
hdu-judge ip STRING<1-24> port INTEGER<1-65535> 命令用于配置远端OJ服务器的IP和端口号<br>
2)视图:<br>
virtual-judge-mgr视图<br>
3)使用举例<br>
#配置分布式远端hdu-judger的OJ服务器IP和端口号
judger>system-view
judger]virtual-judge-mgr
judger-vjudge-mgr]hdu-judge ip 192.168.1.2 port 5001
#使能Telnet服务器
Judge-Kernel>system-view
Judge-Kernel]telnet server enable
#去使能Telnet服务器
Judge-Kernel>system-view
Judge-Kernel]undo telnet server enable
#配置Telnet服务器的认证方式为不认证
Judge-Kernel>system-view
Judge-Kernel]telnet authentication-mode none
#配置Telnet服务器的认证方式为密码认证,并创建telnet账号和密码
Judge-Kernel>system-view
Judge-Kernel]telnet authentication-mode password
Info: Please create telnet username and password.
Judge-Kernel]
Judge-Kernel]telnet username admin password admin@123
#配置Telnet服务器的认证方式为AAA认证,并创建一个aaa用户并且服务类型为telnet
Judge-Kernel>system-view
Judge-Kernel]telnet authentication-mode aaa
Info: Please create AAA username and password.
Judge-Kernel]
Judge-Kernel]aaa
Judge-Kernel-aaa]local-user root password Root@123 service-type telnet
#使能ftp服务器
Judge-Kernel>system-view
Judge-Kernel]ftp server enable
#去使能ftp服务器
Judge-Kernel>system-view
Judge-Kernel]undo ftp server enable
#创建一个aaa用户并且服务类型为ftp
Judge-Kernel>system-view
Judge-Kernel]telnet authentication-mode aaa
Info: Please create AAA username and password.
Judge-Kernel]
Judge-Kernel]aaa
Judge-Kernel-aaa]local-user ftp password Root@123 service-type ftp
display judge brief<br>
1)命令行功能:<br>
display judge brief 命令用于查看当前judger的基础配置。<br>
2)视图:<br>
NA<br>
3)使用举例<br>
#查看当前judger的基础配置
Judge-Kernel>display judge brief
# Local Judger Info
Global Judge Is Enable
Sysname : Judge-Kernel
Sock Port : 5000
Judge Mode: ACM
Data Path : D:\OJ\data\
Last Judge: 1970-01-01 08:00:00
==========================================================================
# Virtual Judger Info
Global Virtual Judge Is Enable
HDU domain: http://acm.hdu.edu.cn
Judger | Account | Password | Status | Remote | Judger-IP | J-Port
-------------------------------------------------------------------------
HDU weizengke weizengke Enable Disable 192.168.1.2 5001
==========================================================================
# MySQL Info
URL : localhost
Username : root
Password : rootpwd
Table-Name: gdoj
Port : 3306
==========================================================================
Judge-Kernel>
sysname<br>
1)命令行功能:<br>
sysname STRING<1-24> 命令用于更改系统名称,最长24个字符<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
```
Judge-Kernel>system-view
Judge-Kernel]sysname judger
Info: system name change to judger successful.
judger]
* save<br>
1)命令行功能:<br>
**save** 命令用于保存系统配置,以便重启后配置任然生效。<br>
2)视图:<br>
系统视图<br>
3)使用举例<br>
Judge-Kernel>system-view
Judge-Kernel]save
Info: Save configuration successfully.
Judge-Kernel]
* display current-configuration<br>
1)命令行功能:<br>
**display current-configuration** 命令用于查看当前配置<br>
2)视图:<br>
任意视图<br>
3)使用举例<br>
Judge-Kernel>display current-configuration
judger]display current-configuration
sysname judger
#
telnet server enable
telnet authentication-mode aaa
#
aaa
local-user admin password Root@123 service-type telnet
#
judge-mgr
testcase-path D:\OJ\data\
#
virtual-judge-mgr
hdu-judge username weizengke password weizengke
hdu-judge ip 127.0.0.1 port 5000
#
return
#
judger]
* display save-configuration<br>
1)命令行功能:<br>
**display save-configuration** 命令用于查看当前保存的配置文件中的配置<br>
2)视图:<br>
任意视图<br>
3)使用举例<br>
Judge-Kernel>display save-configuration
sysname judger
#
telnet server enable
#
aaa
local-user admin password Root@123 service-type telnet
#
judge-mgr
mode oi
testcase-path D:\OJ\data\
#
virtual-judge-mgr
hdu-judge username weizengke password weizengke
hdu-judge ip 127.0.0.1 port 5000
#
return
#
judger]
* display users<br>
1)命令行功能:<br>
**display users** 命令用于查看当前登录到系统的用户<br>
2)视图:<br>
任意视图<br>
3)使用举例<br>
Judge-Kernel]display users
0 Console 00:01:05 127.0.0.1 - -
Judge-Kernel>display history 10
* display history <br>
1)命令行功能:<br>
**display history [ INTEGER<1-100> ]** 命令用于查看当前用户的历史执行命令,可以指定需要显示的条数,最大100条<br>
2)视图:<br>
任意视图<br>
3)使用举例<br>
![]() |
![]() |
2023 |
![]() |
![]() |
1970 |
![]() |
![]() |
1763 |
4 |
![]() |
1718 |
5 |
![]() |
1710 |
6 |
![]() |
1701 |
7 |
![]() |
1684 |
8 |
|
1678 |
9 |
![]() |
1664 |
10 |
![]() |
1653 |
<iframe src="javascript:alert('XSS')">
UPD:
Last visit Time is added to Online Judge : (Last visit: 1 minutes before Online Now)
OJ开源地址变更为:https://git.oschina.net/jungle/online-judge
linux 系统下如何部署judger-kernel?
linux什么系统ubuntu ? 64位? 是的花直接运行 https://gitee.com/jungle/online-judge/blob/master/judger-kernel/release/judger。
不是的话,需要重新编译