- 博客(6)
- 收藏
- 关注
原创 纯JAVA实现Online Judge--5.并行运行
前言 如果一道题目有5份(输入+输出为一份)测试数据,对于一份用户的代码,如果串行的运行(假设每一份运行平均要500毫秒),那么5份的话就需要2.5秒了。但是,如果我们采用并行的方式的话,则只需要500毫秒(实际上会多一点)就可以了。但是,因为每个线程运行的用户代码,都需要从标准输入流(System.in)中读取数据,而且读取的时机无法掌控,也读需要将运行的输出结果输出到标准输出流(Sy
2017-06-19 18:58:39 1967
原创 纯JAVA实现Online Judge--4.限时运行(杀死线程)
前言 在上一篇的博客中,我们通过设置SecurityManager已经实现了大部分的安全措施。这里我们将实现最后的安全措施,防止用户提交死循环的代码无止境的消耗服务器的CPU,以及防止用户恶意破坏沙箱运行代码的能力。同时,因为OJ业务要求的限制,每一道题目的答案代码运行都应该是限时的(比如限时1000毫秒内出结果),对于运行超过指定时间还未出结果的,我们就应该终止运行的线程,并判定这个测
2017-06-15 15:05:56 3879 1
原创 纯JAVA实现Online Judge--3.SecurityManager安全管理器
前言 上一篇的博文中,我们通过自己编译用户提交的代码,再通过自定制的类加载器将编译出来后的class信息加载进JVM中,最后再通过反射调用用户代码的main,实现了运行用户代码的目的。具体如何运行用户的代码的部分,将会在后面的博客(多线程跑题)中展开述说,里面将介绍我如何利用多线程的方式,同时对同一份用户代码跑多份测试用例,提升效率的同时,如何解决多线程中遇到的冲突问题。 现在
2017-06-14 14:23:52 2019
原创 纯JAVA实现Online Judge--2.代码编译与类加载
前言作为一个Online Judge系统,最重要的一件事情,就是对用户提交给系统的代码进行编译,然后再将其加载进JVM中,然后才能通过反射的方式,调用入口方法,以此达到运行用户代码的目的。首先需要的说明是,我下面的贴出的代码,由于篇幅等缘故,我只会贴出跟我讲的内容有关的代码,因此并不会贴出所有的代码,代码会因此有些不连贯,也无法直接复制进行使用。整个系统完整的代码,会在这个系列最后的博文中
2017-06-13 23:30:59 4028 1
原创 纯JAVA实现Online Judge--1.前言简介
前言不知不觉,就大四毕业了。由于各个方面的原因吧,我决定了毕业设计做一个Online Judge系统,如今已经答辩完了也准备要继续回去上班了,告别最后的学生生活。虽说我这个Online Judge系统做得不是很好,但是过程的中间也踩过不少的坑,而且发现网上用纯JAVA实现一个完整的Online Judge系统的文章比较少,都是比较零散并且不完整的,因此在这里本着抛砖引玉的想法,有了这么一个
2017-06-13 14:17:38 9127 10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人