在线判题系统hustoj的搭建

[云服务器6] 使用HustOJ搭建一个在线OJ系统 至此,你已经成功搭建了一个HustOJ在线评测系统。你可以根据需要进一步配置和优化系统,加上自己的题目等。希望这篇博客能帮助到你,祝你在编程的道路上越走越远! 阅读详情
AI摘要

本文详细介绍Hustoj在线判题系统的搭建流程,包括系统与软件环境配置、项目下载及安装配置等步骤,并针对搭建过程中的常见问题提供了解决方案。此外,还深入探讨了OJ系统的安全性问题。

摘要:ACM/ICPC程序设计竞赛,越来越受到各个高校的重视,是程序设计竞赛中的奥林匹克。Hustoj是搭建在linux系统上的判题系统。能够判断代码的正确性。会及时返回通过或者不通过,如果不通过会返回具体原因。所以这个系统很适合ACM队员在上面做一些练习。每个学校有必要有自己的OJ,hustoj虽说是开源,有搭建教程。但是在搭建过程中还是会有一些问题。所以针对这些问题,给出了我的解决办法。

ACM/ ICPC programming competition, more and more attention by variouscolleges and universities, is the design competition in the OlympicGames. Hustoj is built on the linux system on the problem system.Able to determine the correctness of the code. Will be returned intime or not through, if not passed will return to specific reasons.So this system is very suitable for ACM players in the above to dosome practice. Each school need to have their own OJ, hustoj althoughit is open source, there are structures tutorial. But in the processof building or there will be some problems. So for these questions,given my solution.


关键字:在线判题系统hustoj搭建OJlinux搭建OJ


引言


ACM比赛越来越受到高校重视,这是一个能够提高大学生编程能力的好平台。各个学校的ACM队员都需要在自己的OJ上刷题,做练习,还需要出题,因为出题能够很好的锻炼一个人,思维能力。如果你能出题说明你对这个知识点理解比较透彻,而不是直接敲的模板(照着代码抄上去的)。除此之外,每个高校也会不定期的举办校赛,什么的,举办校赛,很多比赛普遍用的是PC^2,对于用过PC^2的人来讲,还可以。不过这个用软件容易不小心交错文件。在线判题系统这类问题会相对比较少,其次,在线判题系统的搭建过程也比PC2简单一点。流程少,如果懂一点php还可以添加一些小功能。Hustoj是开源项目。举办比赛是没什么问题的。大型比赛也没什么问题。因为他有远程判题,多台机器进行判题任务。虽说网上博客也很多,但是实际在弄的过程也会出现很多问题。所以本文主要说说搭建hustoj过程,以及常见问题。以及简单的说说如何使用。让学校举办比赛变得容易一点。目前没找到hustoj的开发文档,这样不利于二次开发,说一说该项目结构,一边后人开发有所参考。



  1. 安装流程

1.1系统要求

该项目是运行在linux系统上的,所以必要的环境是需要一台linux电脑。对于没有linux电脑的,可以将一台windows装成ubuntu系统,具体如何装可以参考百度上面的教程,推荐使用hustoj的镜像,方便易用。装系统就不多说了,网上教程很多。随便找一个。

1.2软件环境需要

到此,假设系统已经装好了。现在需要安装一些hustoj的一些必须的软件。因为hustoj的开发者是使用php+mysql,所以这些环境是必须需要的。由于linux文件的权限比较安全,如果是新手会遇到很多问题,如果只是短期比赛,局域网的比赛那么用root账户是没什么大问题的。如果是搭建公网上面的OJ,还是建议将用户的文件权限设置好,文件的所属用户设置好,解决安全性的问题。

下面以ubuntu14.04为例,服务可以选择apache或者nginx。

首先切换到root账户,如果root没有设置,请用你装系统时用的账户修改密码

sudopasswd root

根据提示修改密码后


suroot

切换到root,安装相应软件

apt-getinstall update

apt-getinstall php5.0

apt-getinstall apache2

apt-getinstall mysql-server

apt-getinstall mysql-client

apt-get-f install

我们装好了必要的软件。

1.3下载项目

到github上找到hustoj下载下来。

下载地址https://github.com/zhblue/hustoj[1]。

解压后或得到几个文件

                                       图1


解压后文件如图1。Wiki是该项目的说明。我们需要的文件是trunk这个文件夹里面的。进入文件夹trunk会有图3这些东西。Install里面是安装的脚本,core是判题服务的代码,web是前端的文件。


1.4web配置


因为我们装的是apache,所以我们把web文件夹里面的东西放到/var/www/html/                                          

所以,我们进入删除 html目录                                   

                         图2

rm-r /var/www/html/

mvweb/ /var/www/html

chown-R www-data:www-data /var/www/html/                                           

用浏览器进入看看web是否安装成功。如果如图2所示就代表前端安装成功了。

图3

下面就是修改配置文件,配置文件在/var/www/html/include/db_info.inc.php

用vim打开他修改它对应的信息。


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="cn";默认的语言,中文为cn

static$OJ_SIM=true;是否显示相似度检测的结果。

static$OJ_DICT=false;是否启用在线英字典

static$OJ_LANGMASK=1008;//1mC2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason tomask 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的端口

static$OJ_RANK_LOCK_PERCENT=0;//比赛封榜时间的比率,如5小时比赛设为0.2则最后1小时封榜。

static$OJ_SHOW_DIFF=false;//显示WrongAnswer时的对比[2]



1.5判题服务的搭建

进入图3的core目录里面,找到make.sh。首先chmod+x make.sh 然后运行这个文件.接着编译好后会出现两个可执行程序分别把这两个程序放在/usr/bin里面。

#!/bin/bash

#beforeinstall check DB setting in

# judge.conf

# hustoj-read-only/web/include/db_info.inc.php

# and downhere

#and runthis with root


#CENTOS/REDHAT/FEDORAWEBBASE=/var/www/html APACHEUSER=apache

WEBBASE=/var/www/html

APACHEUSER=www-data

DBUSER=root

DBPASS=root


#try installtools

sudo apt-getinstall make flex g++ clang libmysql++-dev php5 apache2 mysql-serverphp5-mysql php5-gd php5-cli mono-gmcs subversion

sudo/etc/init.d/mysql start


sudo yum -yupdate

sudo yum -yinstall php httpd php-mysql mysql-server php-xml php-gd gcc-c++ mysql-devel php-mbstring glibc-static flex

sudo/etc/init.d/mysqld start


sudo svncheckout https://github.com/zhblue/hustoj/trunk/trunkhustoj-read-only


#create userand homedir

sudo /usr/sbin/useradd -m -u 1536 judge




#compile andinstall the core

cdhustoj-read-only/core/

sudo./make.sh

cd ../..

#install weband db

sudo cp -Rhustoj-read-only/web $WEBBASE/JudgeOnline

sudo chmod-R 771 $WEBBASE/JudgeOnline

sudo chown-R $APACHEUSER $WEBBASE/JudgeOnline

sudo mysql-h localhost -u$DBUSER -p$DBPASS < db.sql


#create workdir set default conf

sudo   mkdir /home/judge

sudo   mkdir /home/judge/etc

sudo   mkdir /home/judge/data

sudo   mkdir /home/judge/log

sudo   mkdir /home/judge/run0

sudo   mkdir /home/judge/run1

sudo   mkdir /home/judge/run2

sudo   mkdir /home/judge/run3

sudo cpjava0.policy  judge.conf /home/judge/etc

sudo chown-R judge /home/judge

sudo chgrp-R $APACHEUSER /home/judge/data

sudo chgrp-R root /home/judge/etc /home/judge/run?

sudo chmod775 /home/judge /home/judge/data /home/judge/etc /home/judge/run?


#boot upjudged

sudo cpjudged /etc/init.d/judged

sudo chmod+x  /etc/init.d/judged

sudo ln -s/etc/init.d/judged /etc/rc3.d/S93judged

sudo ln -s/etc/init.d/judged /etc/rc2.d/S93judged

sudo/etc/init.d/judged start

sudo/etc/init.d/apache2 restart

sudo/etc/init.d/httpd restart


执行完这些语句,重启之后就可以了。

1.6添加超级管理员


然后在浏览器上进入注册界面。注册一个账户,之后进入数据库修改数据库,添加超级管理员。意思就是将那个用户插入到表privilege。图4是表privilege的结构。在数据库执行执行插入sql语句。

insert intoprivilege(user_id,rightstr) values('admin','administrator');

图4

如果一切正常这就代表你的OJ搭建好了。但是在搭建的过程中总不是一帆风顺的。


2搭建过程中常见问题

2.1搭建好web后在浏览器不能访问

首先有可能是apache没有正常运行,或者没有给web正确的文件权限。看看web配置文件是否修改正确。打开配置文件看看,经常填错的数据库用户名和数据库名,再或者就是将配置文件改坏了,比如删掉了双引号,导致代码编译错误。这些问题解决办法,很简单我就不再多说了。所以在安装apache的时候我们可以一个一个排除问题。先看看apache是否在正常运行。可能是apache没有正常打开用命令查看apache是否正常运行。

/etc/init.d/apache2status

如果出问题了就得去apache官网查查帮助文档。解决了这个问题,看看php和apache有没有弄好,看看apache能不能解析运行php代码。可以在/var/www/html/index.php写上一段测试代码,试试能不能输出helloworld,如果不能说明apache没有加载php模块。

问题一个一个排除,这几个问题排除之后还不能运行,就很可能文件在下载或者解压的过程中文件有所损坏。

2.2不判题可能原因

首先看看判题机的配置文件写好了没,配置文件

目录为:/home/judge/etc/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=4judged会启动judge_client判题,这里规定最多同时运行几个judge_client

OJ_SLEEP_TIME=5judged通过轮询数据库发现新任务,轮询间隔的休息时间,单位秒

OJ_TOTAL=1老式并发处理中总的judged数量

OJ_MOD=0老式并发处理中,本judged负责处理solution_id按照TOTAL取模后余数为几的任务。

OJ_JAVA_TIME_BONUS=2Java等虚拟机语言获得的额外运行时间。

OJ_JAVA_MEMORY_BONUS=512Java等虚拟机语言获得的额外内存。

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是否使用所有测试数据中最大的运行时间作为最后运行时间,如果不启用则以所有测试数据的总时间作为超时判断依据。[3]


这个是配置文件的注释,按照你想要的,数据库密码正确填写,这里写配置文件不需要添加引号.重启判题机,由于有很多依赖kill命令不能够干掉这个进程,所以需要用到-9这个参数。题目的测试数据如果不能够上传,可能是/home/judge/data/这个目录文件读写权限有点问题,我们可以直接把他设为777

chmod -R 777/home/judge/data/


3 hustoj的文件结构

3.1前台文件结构

                                      图5

后台管理的相关文件admin,管理的相关php文件;

bbs是讨论版的相关代码;

template是前台的一些模板,flat-ui,bs,bs3。

其他是一些插件的包含文件。

3.2判题部分的文件结构

data  etc log  run0  run1  run2  run3

判题部分,文件,data是放测试数据的文件夹,里面还是文件夹,文件夹名字是题目的id,每个题目一个文件夹,文件夹里面是输入输出,可以是多组测试数据。多组测试数据文件名字相同的看的是后缀.in是输入文件。同样的文件名对应的.out文件是输出文件。如果不是特判就是简单对比文件是否一样,如果是特判,那么特判需要自己写一个特判的规则,放在当前的文件夹。etc/文件夹是放判题的配置文件以及判题的服务程序,和主程序。Run0~3 对应的文件夹是编译用户提交代码并运行的地方。里面是一个小的linux环境,边沟编译运行代码。



4.OJ安全性问题

评测鸡的实现,已经有了很多不考虑安全问题的版本。因此这里只讨论安全问题。


我大概把评测攻击分为两部分:编译时攻击、运行时攻击。


编译时攻击


编译时攻击是很多评测鸡并没有防范的。例如下面几种攻击情况:


编译超时


#include</dev/random>      # Linux

#include<CON>              # Windows


这种攻击方式的原理是,让编译器读一个永远也读不完的文件,把评测鸡卡死在编译阶段。BZOJ已经被这段代码卡掉很多次了。


示例:提交记录#3019- PYOJ

解决办法:设置编译的时间限制,或者用vfk的办法,把编译器监控起来。


输出巨大文件


我们在做数论题的时候玩过这种事情:inta[10000000]={1,0},这样编译出来的文件会特别大。在我的机器上,它的大小是39MB。


我们想到,让编译器生成一个极大的文件。下面是一个针对gcc的编译炸弹,从wikicoding.org蒯来的。全文如下:


main[-1u]={1};

编译这段代码之后,会生成16GB的文件。


示例:提交记录#2912- PYOJ

解决办法:设置编译出来的可执行文件的大小限制。


include攻击

include攻击同时被vfleaking(UOJ)和李扬(QDUOJ)描述。向二位致敬。


include攻击是指:用C/C++代码include网站的配置文件,然后通过返回的编译错误信息,读取密码。


例如。对于hustoj,可以采用下面的代码:


#include"/var/www/JudgeOnline/include/db_info.inc.php"


这份代码将会include数据库的配置文件。上交这份代码,将会返回如下的编译信息:



事发后,hustoj的这个漏洞已经在一年前修复。


示例:提交记录#3020- PYOJ

我的解决方法:


评测鸡和服务鸡必须隔离。

设置好文件权限(hustoj就是这样修复漏洞的)。

最好不要告诉用户编译错误的信息。

vfk的解决办法:把编译器监视起来。


另外riteme提出了另一种鬼畜的解决办法。见[漏洞报告]include攻击&middot;Issue #14 &middot; hzxie/voj 。


需要注意的一点:不要想着用检查用户代码的形式规避攻击。C/C++的define功能可以轻易绕过这些检查。



运行时攻击


运行时攻击,已经有比较好而且通用的解决方案。解决这个问题难度并不大。


运行系统指令


system("shutdownnow");


这种攻击方式很早就被解决了。


示例:提交记录#3021- PYOJ

解决方法:用沙箱跑评测,可以采用ptrace。但是我准备用一种更暴力的方案。直接把程序扔进docker里面跑,它爱玩成什么样就玩成什么样吧233。


fork炸弹

曾经有OJ被选手程序不停地fork()搞炸了。


我没有拿到代码,因此这里没法分析。


故意运行超时


while(1):pass

然后突然交一大堆这种程序,以达到类似DDOS的效果&hellip;&hellip;


这种东西很没技术含量。下面是一份针对hustoj的脚本:


https://gist.github.com/Ruanxingzhi/9f0caba5e2d8a690ae1e89bcfb92abba

效果是用1000个账号,每个账号提交10次,每个账号在提交之后休息11s。

体现为:两分钟内,OJ上面多了一万份提交。


解决方法:注册的时候设置验证码,如果一个账号短时间内多次提交,在这个账号下一次提交的时候也需要验证码。


请注意,注册的时候,只用邮箱验证,不用验证码是不行的!

总结


我玩了这么久的OJ,一共也就发现这几种攻击方式&hellip;&hellip;

但是好像很多OJ对编译时攻击防范并不好。

点蜡烛。希望OJ做得越来越好吧。[4]

以上是知乎大神总结的,还有就是通过插件的漏洞进行攻击,比如kindedit之前的漏洞,可以绕过cookie上传文件。对了,最好把配置文件弄成judge用户不可以操作的权限。这样数据库密码免得泄露了。


时间、资源的限制:

内存:我使用了rlimit进行控制,同时也方便在运行结束后获得内存使用情况的数据,不过有一个&ldquo;缺点&rdquo;就是如果是声明了一个超大的空间但从未访问使用就不会被统计进来(经过观察发现很多ACM或者OI比赛也都是这么处理的,所以应该不算是一个问题)。

时间:首先同样也是使用rlimit进行CPU时间控制。注意它只能控制CPU时间,不能控制实际运行时间,所以像是sleep或者IO阻塞之类的情况是没有办法的,所以还在额外添加了一个alarm来进行实际时间的限制。按照大部分比赛的管理,最终统计的时间是CPU时间。

文件句柄:同样可以通过rlimit来实现,以保证程序不要打开太多文件。不过其实文件这一块问题是比较多的,如果可行的话最好还是使用stdio然后管道重定向,完全禁止程序的文件IO操作。

访问控制:

通过chroot建立一个jail,将程序限制在指定目录中运行。由于是比赛程序,使用的动态链接库很有限,所以直接静态编译,从而使得运行目录中连.so都不需要。

进行必要的权限控制,例如将输入文件和程序文件本身设置为程序的运行用户只读不可写。

权限控制:

监控程序使用root权限运行,完成必要准备后 fork并切换为受限用户(比如nobody)来运行程序。

rlimit 设置的都是hardlimit ,非root无法修改。

正确设置运行用户之后,之前由root创造的jail受限用户是无法逃出的。

系统调用控制:

上面这些(尤其是第一步)是有很大问题,就算不是root,也还能做到很多事情。且不说fork之类的,光是那个alarm,就可以很轻松的把计时器取消了或者干脆主动接收这个信号。所以最根本的还是需要使用ptrace之类的调试器附着上程序,监控所有的系统调用,进行白名单+计数器(比如exec和open)过滤。这一步其实是最麻烦的(不同平台的系统调用号不一样,我们使用的是strace项目里头整理的调用号)。

更进一步:

如果你对操作系统更熟悉,那么还有一些更有趣的事情可以做。比如Linux下的seccomp功能(seccomp- Wikipedia ,ChromeLinux 版就在沙盒中使用了这个技术),尤其是后期加入了seccomp-bpf之后变得更加易用。还比如SELinux也可以作为defend-by-depth的一环。另外,cgroup其实也可以用得上。

结束语

搭建了hustoj,只会这些还不够,最好自己写一下判题机什么的,要深入了解学习才有收获。如果只是按照教程弄一下,并不会有很大的收获。作为了名ACM理解判题原理是很有用的,这样对解题也是很有用的。学无止境。


参考文献

[1]ZHBLUE,HUSTOJWIKI,https://github.com/zhblue/

[2]LIUXINGDEBLOG,hustoj永久等待或编译并评判解决方法hustoj,https://www.myvary.cn/index.php/2016/05/11/hustoj-ing/,2016-05-11

[3]OMG_BY,在linux上ubuntu搭建hustOJ系统,http://www.cnblogs.com/OMG-By/p/5978831.html

[4]RUANXINGZHI,OJ技术思考:评测安全,https://zhuanlan.zhihu.com/p/26984739

【笔记】HUSTOJ开源在线评测系统使用心得 本人使用HUSTOJ开源在线评测系统已经有一些时间了,下面和大家分享一下本人的一些使用心得,读者们如果有其它的使用心得,可以在评论区和大家一起分享。 一、搭建网站 (1)关于如何在云服务器搭建HUSTOJ网站,在百度上有很多教程,可以参考下面这个网址中的操作进行搭建: https://github.com/zhblue/hustoj (2)如果想在本地自己的服务器搭建网站,可以关注hust... 阅读详情

相关推荐

最新版HUSTOJ本地及云端服务器搭建

HUSTOJ是现在使用较多的开源OJ之一,而且最近HUSTOJ也在一直改版,一直更新,最近也更新了最新版本 其实HUSTOJ搭建还是比较简单的,搭建的时候首先要明确所使用的系统,建议使用Ubuntu 14.04系统,不建议使用Ubuntu 16.04 ,更新之前使用16.04搭建O不能使用,更新之后不太清楚了,所以还是使用14.04,比较稳妥 HUSTOJ所使用的环境是Ubuntu系统,Apa...

Boss_Xie的博客 9017

HUSTOJ 使用手册和功能介绍 hustoj 部署搭建步骤 常见问题117问 自动在线评测系统

添加题目时,可以在test input/test output添加一组测试数据,大规模的数据(10kb+)和更多的数据,可以在添加完题目后,通过ftp/sftp,上传到题目对应目录,通常是 /home/judge/data/题号。另外,比赛题目如果在比赛还没开始的时候,就在练习中出现,则会有漏题的嫌疑,类似某网络原题赛。题目添加后,默认是停用状态,以防比赛提前漏题,后台中点击ProblemList,找到题目,点击Reserved 切换为Available启用题目,或者组织比赛,比赛中的题目将自动启用。

星卯教育-信奥教练tony 1万+

hustoj - 流行的OJ系统,跨平台、易安装、有题库

hustoj -- 流行的OJ系统,跨平台、易安装、有题库

hustoj在线判题平台详细搭建二开及美化过程(ubuntu20.04 / centos7.9)常见问题解决

阿里云 腾讯云 华为云 镜像选Ubuntu22.04LTS,物理机安装Ubuntu22.04 Server。

星卯教育-信奥教练tony 5297

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

从硬件到软件:深度解析D435i USB SCP overflow错误的根源与解决方案

本文深入解析Intel RealSense D435i相机在ROS环境下常见的'USB SCP overflow'错误,特别是与`control_transfer`相关的错误提示。从硬件配置到软件优化,详细介绍了如何通过调整USB接口、优化`rs_camera.launch`参数、更新固件驱动等方法解决数据传输溢出问题,提升设备稳定性和性能。

yy01234的博客 771

HUSTOJ(2019)在线判题系统的搭建

  最新的2019踩坑搭建过程请看这里 -->  点这里       2018-记一次基于Ubuntu 16.04的HUSTOJ在线判题系统的搭建 关于hustoj的搭建教程 网上有很多很多  而且开源的hustoj现在已经 几乎是 傻瓜式安装   但是今天早上还是搞了四个多小时...

xiaonuolen 1906

自锁电路设计

Hi,uu们,是不是经常要用到自锁电路,通常不是使用555芯片就是用比较器来做自锁,今天我们来简单看下自锁电路的设计.图1采用了比较器构建了一个自锁电路,采用低电平复位,当需要复位的时候志需要将反向端的二极管拉低一下即可,免去 三极管控制同相端和电源短接的麻烦。图1:比较器构建的自锁电路也可以使用555去构建,如下图2所示.图2:使用555构建的自锁电路工作原理见555的真值表,真值表如表1所示.表1:555电路真值表相对来说555还是比较贵,所以我就想能不能有个便宜的方法做个自锁电路,构建电路如下图3所示

weixin_43884675的博客 7067

HUSTOJ(2019)在线判题系统的从零开始搭建过程

目录 HUSTOJ(2019)在线判题系统的搭建 一:配置LAMP环境 二:安装HUSTOJ 三:管理数据库: 四:配置oj 五:oj优化 六:将web文件夹内容放入文件夹/var/www/html 中(最重要) 七:其他操作(此处无需用到) 八.博客参考 HUSTOJ(2019)在线判题系统的搭建 注意:此为2019年1月版本,最新版本安装以官网为准 一:配置LAMP环...

smile吖 9892

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题分享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均分布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4044

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4732

2019最新超详细HUSTOJ在线判题系统及Virtual Judge的搭建

一、HUSTOJ的安装 为了熟悉linux系统及各种命令,最近在电脑上装了Ubuntu16.04,在尝试安装HUSTOJ的过程中碰到各种问题,分享一下。 在网上查博客也有2019安装OJ的,关于HUSTOJ的搭建教程,网上真的是有很多很多,而且现在开源的HUSTOJ的搭建已经几乎是傻瓜式的安装。 但我还是推荐官方的HUSTOJ安装说明:https://github.com/zhblue/husto...

ityanger的技术栈 2万+

基于PLC的立体车库控制系统设计

本文介绍了基于西门子S7-1511-1PN PLC和KTP700 Basic PN HMI的立体堆垛式停车场自动化控制系统。系统通过PLC逻辑控制滑台运动,配合传感器实现车辆存取自动化,包含初始化、入库、出库和安全保护程序。程序采用模块化设计,分为安全互锁、动画显示、模式切换等六个功能模块,运用边沿触发、定时器和多级联锁确保安全。HMI界面提供模式切换、车位选择、状态显示和手动控制功能。该系统具有模块化、安全性和可扩展性特点,可应用于多车位立体停车场场景。

sxs3030787796的博客 1265

基于Ubuntu 16.04的HUSTOJ在线判题系统的搭建

打开Ubuntu终端键入sudo apt-get update此命令为了升级Ubuntu软件库接下来键入sudo apt-get install subversion安装subversion然后从svn获取hustoj 键入sudo svn co https://github.com/zhblue/hustoj/trunk/trunk/install hustoj 进入hustoj目录cd hus...

LadonDU的博客 2257

YOLOv11改进 | 主干/Backbone篇 | 轻量级移动端网络ShuffleNetV2(附代码+修改教程)

本文给大家带来的改进内容是ShuffleNetV2,这是一种为移动设备设计的高效CNN架构。其在ShuffleNetV1的基础上强调除了FLOPs之外,还应考虑速度、内存访问成本和平台特性。(我在YOLOv11n上修改该主干降低了GFLOPs,但是参数量还是有一定上涨,其非常适合轻量化的读者来使用,同时精度也有一定程度的上涨)。本文通过介绍其主要框架原理,然后教你如何添加该网络结构到网络模型中。

Snu77的博客 3387

YOLOv13教程:手把手教你CSP_MutilScaleEdgeInformationSelect模块 通过DSM 在空间与局部对比域上做自适应选择

绿色线条为添加CSP_MutilScaleEdgeInformationSelect后的训练效果,map50指标提升12.45,准确率提升5.44。

FJN110的博客 816

基于hustoj的在线判题系统的搭建

hust网站源码链接:https://github.com/zhblue/hustojLinux系统版本:ubuntu-14.04.5-server-amd64安装方法:wget https://raw.githubusercontent.com/zhblue/hustoj/php7/trunk/install/install-ubuntu16.04.sh chmod +x install-ubu...

你身后的人 1774

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在Ubuntu22.04桌面版搭建hustoj编程在线判题系统详细教程

(ii)/home分区的大小往往与用户自身对程序代码、数据等的需求相关,即用户需要在该分区下放哪些相关的资源,不少应用的默认下载地址就在/home/Username/programming_name等。分区安装与普通安装的区别,就是和window系统一样,设置 C、D、E、F磁盘,当然Linux系统也类似,这样子的好处就是当Ubunut系统崩溃后重装系统,我们还可以保留Home用户数据区,避免用户数据(代码和文档)丢失。安装时选择"其他安装",删除原来的分区后重新分区。Ext4日志文件系统。

hcj1880855的博客 1370

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HUSTOJ平台的搭建

HUSTOJ平台的搭建 公网网址:http://39.97.249.103/test.html(2020.11.20左右白嫖服务器到期) 首先,你要有一个服务器,本次记录的是阿里云Ubuntu18.04平台下的搭建 搭建LAMP环境(LAMP指的Linux(操作系统)、ApacheHTTP服务器,MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python)的第一个字母,一般用来建立web应用平台。) 键入 sudoapt-...

weixin_46428419的博客 1691

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

hustoj搭建

一,背景 Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。Hustoj 作为一个开源的项目,帮助到了很多学校建立起了属于自己的在线ACM 评测系统,在这里我将各方面资料以及我实际安装运行中的各种问题,汇总起来,供大家参考 二,环境搭建 由于husto...

qq_42896005的博客 1219

腾讯云服务器 Ubuntu 16.04 搭建 HUSTOJ 在线判题系统

1,购买服务器,选择阿里云或者腾讯云都可以,我选择的是腾讯云,因为有学生优惠,好像阿里云也有。 2.配置服务器,按照我的配置就行。 登录云服务器,云产品-云服务器-登录 输入密码登录服务器。 3.配置 HustOj 在 GitHUb 地址是:https://github.com/zhblue/hustoj 下载 wget https://raw.githubusercont...

larry1648637120的博客 1195

2019最新最全HUSTOJ本地及云端服务器搭建(基于腾讯云服务器)

  在刚接触ACM的时候,对于那些在线测评的网站很感兴趣,就在网上搜索了一下,在Github上发现了一个有趣的项目,然后在Github 上获取 了HUST OJ 的开源项目代码,根据网上的教程踩了无数的坑终于安装成功了!!!!! 接下来就和大家分享一下我的安装过程,请务必看完这几段话在动手安装,看完保证你能成功安装~ 若你想在本地搭建HUSTOJ:Ubuntu14.04STL+Apach...

weixin_33897722的博客 1056
上一篇: deepin软件中文乱码
下一篇: DFS序+线段树(bzoj 4034)
Code--Dream
博客等级 码龄11年 53粉丝 100原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值