纯JAVA实现Online Judge--1.前言简介

来源:互联网 发布:图片填色软件 编辑:程序博客网 时间:2024/05/21 11:26

前言

不知不觉,就大四毕业了。由于各个方面的原因吧,我决定了毕业设计做一个Online Judge系统,如今已经答辩完了也准备要继续回去上班了,告别最后的学生生活。

虽说我这个Online Judge系统做得不是很好,但是过程的中间也踩过不少的坑,而且发现网上用纯JAVA实现一个完整的Online Judge系统的文章比较少,都是比较零散并且不完整的,因此在这里本着抛砖引玉的想法,有了这么一个系列的博客,望能与大家一起学习并探讨。

本篇博客先大概介绍一下我的整体设计和系统的简介,接下来的几篇博客会一一介绍我在开发的过程中遇到的坑和解决方法,以及我自认为稍微有点学习意义的技术内容,在本系列最后一篇的博文中,我将会给出我整个系统的源码(整个系统分为两部分(两个项目):系统的Web端和安全运行用户提交代码的沙箱端)。

最后,祝自己毕业快乐,工作顺利吧——2017.6.13

绪论

Online Judge在线程序评测系统简称OJ一般指在ACM/ICPC(国际大学生程序设计竞赛)等一系列各种程序算法编程竞赛比赛中,用于自动化判断选手程序的正确性,并得出时间内存消耗等各项效率指标。

涉及主要框架

Spring+SpringMVC+Mybatis+AngularJS

软件大概功能图


系统架构

其中控制层,业务层什么鬼的,其实就是我们熟悉的Controller,service,dao啦,由于这个图是论文中用到,由于学校的关系(你懂的),所以这里采用中文的描述方式啦,用户模块持久器其实就是UserDao啦~



其实整个系统主要分为两部分:web端和沙箱端。他们也是两个独立的项目。web端主要就是我们熟知的web项目了,这里就不详细说了,相信结合上面的图以及大家的开发经历,都懂的。沙箱端则主要是用于安全的运行用户提交的代码。依赖于JAVA的类加载机制以及SecurityManager等内容,实现编译用户的代码之后,可以放心的加载他们的类并通过反射调用入口方法main函数,达到安全运行他们代码的效果,并最后在给定输入的情况下,得出用户代码运行的输出结果。

web端和沙箱端之间,是采用网络进行沟通的。这样以后扩展就比较方便了,如果要做成分布式等高大上之类的话。目前两者之间的网络交流,都是用socket进行通信的,就是我们所说的BIO了,没有使用NIO或者AIO的原因,是因为不想增加开发难度,并且沙箱的数量并不会太多(由于目前架构设计,使得所有沙箱都是运行在同一台电脑上,CPU资源有限)。再加上的BIO的好处除了简单易懂之外,延迟也是比较低的。下面给出一个简化版的图:

成品系统部分截图



预告

下一篇博客中,我将会具体展开里面的技术细节,并且贴上相关代码。由于沙箱端是系统的重点,因此我将会从沙箱端的坑和个人觉得稍微有点学习价值的技术内容,开始讲起,谢谢。

原创粉丝点击