Skip to content

Latest commit

 

History

History
67 lines (34 loc) · 3.7 KB

JCoder.md

File metadata and controls

67 lines (34 loc) · 3.7 KB

1.自身定位与目标

JCoder是一个正在不断开发迭代的Online Judge与课程管理平台。将来,我们希望JCoder成为一个不仅涵盖计算机科学而且涵盖数学,物理和许多其他领域的在线教学系统,并最终成为一个完整的在线教学终端。

main

2.技术栈

JCoder前端:

  • 使用NodejsReact框架,采用fetch与后端交互。

JCoder后端:

  • 使用PythonDjango框架,使用Records,RabbitMQ,Redis等工具与数据库交互,保证数据安全并提高并发数。

JCoder测评端:

  • 使用RabbitMQRedis维护测评队列与结果。
  • 分为内外两部分,都使用Python实现。
  • 使用Docker作为外层容器。
  • 使用某工具在Docker内部限制测评与编译进程。

3.功能介绍

1.管理功能

​ 在JCoder设计之初我们便考虑到管理员的体验,致力于让管理员更方便地修改各种设置。

  • 题目管理方面,管理员在题目列表就可以管理题目的可见性,在题目出错时不需要停机维护或更改数据库便可以隐藏该题。 admin_problem
  • 在题目详情页面,我们提供了更多选项用来操作题目。

man_prob

您可以使用MarkDown语法设计题面并可以实时预览。点击保存后对题目所做的更改会立即生效,极大提高了效率。

此外,您还可以随时更新题目名称,可见性与测评限制(暂时不支持)。动态添加来源,标签,更新数据与Rejudge。

  • 在提交页面,您可以删除或重新测试某一条记录。

del

rej

由于JCoder提供了Coures,Team,Group等多级管理方式,管理员权限相互独立。可以提供更灵活的权限分配方式。

2. Your Job......

2.测评端

JCoder的测评端主要由三部分组成:Outter_Judger,Inner_Judger与Config。其中Outter_Judger负责与后端与数据库交互。由于多线程的使用,Outter_Judger也可以作为测评集群的管理端,负责统计与任务分发。

JCoder测评端从设计之初便有着全功能,分布式的设计思路。后端可以与多个不同的测评机建立连接构成分布式测评系统。

Inner_JudgerOutter_Judger的管控,运行在我们设计好的Docker镜像中。对于Inner_Judger的设计,我们参考了各种开源OJ,并结合大型商业OJ”luogu"的第四代测评机构建方法,设计出了兼具安全稳定与高效率的测评系统。在Docker内部,程序的运行与编译均由Inner_Judger全程托管监控。同时采用特殊工具与特殊指令限制了程序的内存使用,IO访问,CPU时间,REAL时间,输出大小,权限等级,网络访问......等。不仅如此,用户提交的代码在编译运行的全部过程中UID与PID均被锁定,进一步减少程序越狱的可能。此外,我们还通过change_root,cgroup等方式严格限制了代码权限。

正因如此,本测评机敢于支持**C,C++**测评,这两种语言可攻击的范围,防范的难度远大于java。

为了达到教学目的,本测评机也会限制一些奇技淫巧。例如多线程优化,编译优化等。

除此之外,通过自定义配置文件,测评机可以支持多种对比方式与评分标准。您可以自定义每一个测试点的得分与限制。也可以很方便地支持Special Judge。