[Project] HUSTOJ随笔

摘要:
在代码方面,HUSTOJ分为两个部分,核心和web,分别对应于问题确定和数据管理这两个主要功能。这两种方法的选择在配置文件/home/judge/etc/judge中。conf,如果judge=1,则启用后者,默认值为前者。核心分为三个部分,调整和调整客户端,sim,其中判定为服务过程,d为守护进程。当发现新任务时生成判断_客户端进程。判断客户端进程是实际的问题确定程序,负责准备运行环境和数据,运行和监控目标程序的系统调用,收集运行指标,判断运行结果。当配置为启用剽窃检查时,判断客户端将调用sim来判断相似性结果,并将其写回数据库或web端。

转载自 : http://blog.csdn.net/zhblue/article/details/7259940 (版权为 zhblue)


HUSTOJ http://code.google.com/p/hustoj 是一个开源OnlineJudge系统,广泛应用于计算机程序设计比赛和编程能力测试。


从代码上HUSTOJ分为两大部分,core和web,分别对应判题和数据管理两大功能。

两者之间数据交换有两种方式:1、通过数据库,轮询。2、通过w3m实现的http请求。

两种方式的选择在判题端的配置文件/home/judge/etc/judge.conf中,HTTP_JUDGE=1则启用后者,默认为前者。


core分3部分,judged、judge_client、sim

其中judged为服务进程,d即daemon。负责轮询数据库或web端,提取判题队列。

当发现新任务时产生judge_client进程。

judge_client进程为实际判题程序,负责准备运行环境、数据,运行并监控目标程序的系统调用,采集运行指标,判断运行结果。

当配置为启用抄袭检查时,judge_client将调用sim,判断相似性结果,并写回数据库或web端。

sim为第三方应用程序,可进行语法分析判断文本相似度,通过检验的程序将由judge_client复制进题目数据的ac目录,成为新的参考样本。

w3m是linux下一个开源web文本浏览器,提供了基于命令行的http交互功能,这里用做http客户端,用curl-lib应该也可以实现,本人熟悉w3m不熟悉curl,因此偷懒。


web分两大部分,前端和admin目录下的管理程序。

前端无非是数据库的CRUD操作,关键功能是将用户提交的程序源码加入数据库的任务队列(solution表、souce_code表)。

管理程序提供具有administrator等高级权限的账号管理试题、账号等方面的功能。

其中FPS导入导出程序主要为XML格式的数据处理。


特别的,judged可以多重启动,通过增加基准目录参数指定启动位置(默认/home/judge),从而确定judge.conf的位置,并确定其他参数。

因此不但可以一个web服务器下挂多个判题服务器,也可以一台物理机器上同时启动任意多个相互独立的OJ系统。


实际使用中,使用开源的ispcp虚拟主机管理系统搭建多Web环境与hustoj协同工作取得了良好效果。


LiveCD的实现,通过uck工具解压出ubuntulivecd的chroot环境,并在其中删除oo、gnome等大型程序释放空间,然后用apt工具安装基础环境,安装配置lxde和hustoj。再使用uck重新打包形成iso。


升级方式:利用googlecode的svn服务,用svn客户端分别升级core和web,再编译core,并通过web提供可能的数据库升级。

livecd中的升级脚本为updagte-hustoj,可以用which命令查找其实际位置。



免责声明:文章转载自《[Project] HUSTOJ随笔》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇AS3中 is,as,typeof的区别JSP 日期处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jdbc与TiDB数据库交互的过程

以下是使用jdbc操作TiDB数据库,得到的交互过程和指令的说明 ==>代表发送给数据库的指令 //加载驱动程序Class.forName(driver); //连接数据库 Connection conn =DriverManager.getConnection(url, user, password); ==>(cmd=mysql.ComQ...

Ambari安装

    adp环境配置文档adp环境配置文档 1 一,环境的基础配置同Apache hadoop类似(可参考) 1 二,不同配置之处 1 2.1 同步时钟 1 三. Hdp服务器配置 2 3.1 资源库的配置 2 3.2安装mysql 2 3.3安装配置Ambari 3 3.4重启Ambari-server 4 3.5启动图界面 4 3.5.1在物理主机浏...

MySql笔记 -->1

MySQL1、sql、DB、DBMS分别是什么,他们之间的关系?    DB:         DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)    DBMS:         DataBase Management System(数据库管理系统,常见的有:MySQL Oracle DB2 Sybase SqlServer...)    ...

PyMySQL模块

  PyMySQL是Python操作数据库的模块,在Python3.x版本中用于连接MySQL服务器,即作为Python操作MySQL数据库对象的接口。 安装PyMySQL   pip3 install PyMySQL 导入PyMySQL   import pymysql 连接数据库   格式:conn = pymysql.connect(host=' '...

HIBERNATE锁机制

乐观锁与悲观锁  文章转自网上好像是玉米田的,忘记了锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机 制来保证这些数据在某个操作过程中不...

IBatis.Net学习笔记(二)数据库的缓存模式

在IBatis中提供了数据库缓存的模式,可以提高访问效率。对于一些不常更新的表可以直接利用IBatis的缓存方式。要使用IBatis的数据库缓存,只要利用配置文件就可以了,实现起来比较简单:         <select id="GetCachedAccountsViaResultMap"                    resultMa...