C++开源跨平台OJ系统判题核心—— FreeJudger(一)

C++开源跨平台OJ系统判题核心—— FreeJudger

By 马冬亮(凝霜  Loki)

一个人的战争(http://blog.csdn.net/MDL13412)

项目背景

本项目是为作者所在学校搭建OJ系统时衍生出来的一个项目,由于我的学弟、学妹们对Linux系统不熟悉,为了我们这批人毕业了以后,有人能维护OJ系统,因此选用了可以运行在Windows平台的开源OJ系统。

起初,我的一个同学用NOJ(南京航空航天大学的OJ)搭建起了我们协会最初版本的OJ,但是这套OJ系统的判题核心不开源,且安全性得不到保证,再加上其web界面实在是太难看,我的一位学长ZB选择hustoj做为协会的新一代OJ平台。hustoj最初被设计在Linux系统上运行,因此需要对其进行二次开发,经过验证,此OJ的移植工作主要集中在判题程序上。至此,作者ZB发起了FreeJudger开源项目,并希望藉由此项目,推动国内OJ的发展。

功能需求

  • 崩溃自动重启;
  • 支持并行/并发评判;
  • 支持多种语言的评判;
  • 能至少在Windows平台*nix平台运行;
  • 支持安全沙箱功能(限制程序运行内存、运行时间、对系统的访问/更改等),保证系统安全。

系统架构


可执行程序

分为守护程序监控程序两部分组成,其中守护程序是运行在后台进行评判的核心,监控程序提供一个GUI界面供用户获取守护程序运行状态,并对其进行控制(无需一直运行,可以在需要时,连接到守护程序,支持远程访问)。

PlatformLayer

  • PlatformLayer用于屏蔽操作系统的细节,其组成及功能如下:
  • logger:日志库,目前使用log4cxx作为核心;
  • xml:配置文件解析库,目前使用RapidXML作为核心;
  • filetool:提供对系统文件的基本操作(创建、删除文件/文件夹,读取、写入文件),目前使用Boost.FileSystem作为核心;
  • process:提供对进程的封装,其接口为仿Linux风格,目前各平台采用原生系统调用实现;
  • thread:提供POSIX兼容的线程封装,目前使用Boost.Thread作为核心;
  • taskmanager:提供任务管理器,用于管理判题任务;
  • sql:提供对数据库的抽象,目前支持MySQL数据库的操作;
  • net:用于实现守护程序监控程序之间的通信;
  • windowsapihook:用于屏蔽掉Windows Job在一些Windows平台上弹出“应用程序错误”对话框的问题,使用微软Detours库实现。
系统软件支持

用于支撑判题程序。

操作系统

FreeJudger要支持的操作系统平台,至少要支持Windows*nix

项目组织

构建工具及IDE

  • Windows平台:VC++ 2010
  • Linux平台:Makefile + Vim
  • 其他平台:Makefile

源码组织


目前正在进行Windows平台的开发,其说明如下:

  • Daemon文件夹:守护程序工程;
  • Test文件夹:用于临时测试代码的工程;
  • judgerlib文件夹:PlatformLayer层,每个模块一个工程;
  • thirdpartylib文件夹:用到的第三方库(需要编译的,在里面提供预先编译好的静态/动态库);
  • doc文件夹:项目文档;
  • Debug/Release文件夹:程序输出目录。

二级文件夹组织如下图所示:



项目主页

https://github.com/NsLib/FreeJudger

欢迎加入

群117975329,验证信息CSDN

主要维护人:

  • 周宝    you_lan_hai@foxmail.com
  • 马冬亮  mdl2009@vip.qq.com

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 南京信息工程大学oj系统题库是为了帮助学生提高编程能力、加强算法训练而开设的,题库中包含了各种类型的题目,涵盖了计算机科学与技术、软件工程、网络工程、物联网等专业的知识点。题库中的题目难度有高有低,从初级到高级、从简单到复杂都有涵盖,可以满足不同层次、不同需求的学生。 南京信息工程大学oj系统题库的题目内容丰富多样,可以涉及到各种算法、数据结构、编程语言等方面的知识。学生可以通过解答这些题目,了解和掌握不同算法和数据结构的应用场景,提高编程能力和实践动手能力。 南京信息工程大学oj系统题库的使用非常方便,学生只需登录系统,在题库中选择自己感兴趣或者需要练习的题目,然后根据题目的要求,编写相应的代码进行提交。系统会自动对代码进行评测,给出相应的反馈和评分,帮助学生了解自己的编程能力和解题能力。 同时,南京信息工程大学oj系统题库也可以作为教师授课和学生自学的辅助工具。老师可以根据课程内容,选择合适的题目进行布置作业或者考试,提升学生的学习兴趣和积极性。对于学生自学的话,可以通过解答题库中的题目,巩固和加深对于课程知识的理解和掌握。 总之,南京信息工程大学oj系统题库是一个重要的学习资源,可以帮助学生巩固和提高编程能力,为他们在计算机科学与技术以及相关领域的学习和就业打下坚实的基础。 ### 回答2: 南京信息工程大学oj系统题库是该校为了方便学生进行编程实践和提高编程能力而特别开设的一个在线题库。该题库的目的是帮助学生巩固课堂所学的理论知识,实践编程技巧,并培养学生解决实际问题的能力。 南京信息工程大学oj系统题库中包含了各种难度级别的编程题目,涵盖了计算机科学与技术、通信工程、软件工程等多个专业领域的知识点。学生可以通过选定特定的题目,根据自身编程能力的提升情况逐渐挑战难度更大的题目。 在南京信息工程大学oj系统题库中,学生可以提交自己的代码,系统会自动对代码进行评测并返回结果。这样可以有效地帮助学生查找代码中的错误,并及时进行修改和改进。除此之外,学生还可以查看别人的解题思路和代码实现,借鉴他人的经验,丰富自己的编程思维。 南京信息工程大学oj系统题库还提供了在线编程环境,学生无需安装额外的编译器或者IDE,只需通过浏览器就可以完成编程任务。这样方便学生的学习和实践,并提高了学生在编程中的效率和体验。 总之,南京信息工程大学oj系统题库是一个宝贵的资源,能够提供给学生进行编程实践和提高编程能力的机会。通过挑战不同难度的题目,学生可以不断提升自己的编程水平,更好地适应未来的学习和工作需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值