基于Java的OJ(Onlie Judge)实践
来源:互联网 发布:如何搭建云计算平台 编辑:程序博客网 时间:2024/06/05 00:21
点击打开链接暑假期间实现了OJ的核心框架,其中包括核心运行功能的实现, Java程序运行沙盒,(不包含c/c++运行部分),这部分将会近期实现.
期间我参考了很多网上的现有资料,对他们无私的奉献致敬,这里我对我们的OJ 做一下简单的阐述(其实原理很简单^_^).
我们的OJ核心实现将采用Jsp + Java/c实现, 服务器采用linux, 可执行Java/c/c++程序.
核心框架基于多线程设计, 采用Hibernate操作数据库,这样解耦了系统与数据库, 也不必过分去关心SQL语句的优化问题.
测评核心采用两个线程分别维护一个阻塞同步队列(采用LinkedBlockingQueue)来存储编译/运行程序,(在队列无元素时一直等待,
直至有元素插入队列中).当程序被提交以后,插入编译队列中,并执行编译工作,如果编译成功则将编译后的相关结果送入运行队列中,并执行.
如果未通过则不放入运行队列中.由于编译/运行队列分别由不同的线程执行,这样编译的同时可以进行程序运行工作,提高的程序的运行效率
(每时刻只有一个程序被编译或被运行).如下图所示,1编译成功后放入运行队列并执行,2未通过编译不放入…..
核心模块支持正常练习模式和比赛模式, 他们公用一个核心模块, 练习模式下直接与数据库交互.而比赛模式下对数据刷新和获取的
频率较高,我们采用缓冲的模式来保存一些重要的信息,当用户提交后对其更新并同步数据库.缓冲包括比赛题目缓冲,执行结果缓冲与比赛
排名缓冲.其中执行结果缓冲保存最近的75(可自行设定)条提交记录.
我们知道,OJ对于系统的安全性有着严格的要求, 任何被认为对于操作系统或是本系统有害的操作均不予被执行,例如文件操作,数据
库访问,Socket操作等等.对于c/c++程序需要使用JNI调系统API来限制运行程序.而对于Java程序,我们使用Java语言的安全限制实现
了Java语言运行时的沙盒,这样对于Java程序足够安全,并且对于java程序的运行时间和空间有更准确的测评.Java沙盒运行原理如图.
沙箱的实现:http://blog.csdn.net/flyingpig204/archive/2009/11/25/4871968.aspx
- 基于Java的OJ(Onlie Judge)实践
- 基于Java的OJ(Onlie Judge)实践
- 基于Java的OJ(Onlie Judge)总体设计(转载)
- 基于java的ACM online judge(OJ)在线判题系统实现
- OJ常见的Judge Status
- JAVA实践基于DFS的图割点
- 哈理工OJ 2214 Judge(简单的数学题)
- 合理的使用pt-onlie-schema-change工具
- UVa OJ 489 Hangman Judge
- 从零开始写OJ---Special Judge
- C 语言程序设计实践 3.7 Judge
- Java对等计算实践:基于 IP 多播的发现
- 程序员的Job Security - 我的OJ(Online Judge)比较
- 详解OJ(Online Judge)中PHP代码的提交方法及要点
- My Online Judge (GUET OJ)
- hust OJ如何写一个special judge
- 杭电OJ-1073_Online Judge
- UVA oj 489 Hangman Judge(字符串)
- 检测手机耳机插拔
- 字符串拷贝函数strcpy写法
- 图(非递归)_题目1027:欧拉回路
- ios----xml解析
- GNU GCC手册1
- 基于Java的OJ(Onlie Judge)实践
- ORA-01461: can bind a LONG value only for insert into a LONG column解决办法
- ERROR: Unknown command 'crunch' 解决方法
- Java沙箱的实现
- tomcat 6无法安装的解决办法
- 计算1~n之和
- ios数据存储
- HUST JudgeOnline 开发日记 1
- HDU 4512