我们都清楚现在的各种编码平台都包含竞争性编码,例如 GeeksforGeeks、CodeChef、Codeforces、atCoder、SPOJ、HackerRank、HackerEarth 等等,他们应该自己编码。要么附加本地编辑器文件(例如 Sublime 编辑器),要么直接在各自的编辑器上编写。
那么如何访问这些测试用例,或者以一种简单的方式我们可以说我们的代码正在编译和运行?在这些编程竞赛平台上,在线评委充当代码编译和运行的中坚力量。
在线评判
对用户提交的代码进行评判,接下来要在同质环境中进行编译和测试,是由在线评委来完成的。在线评委分为各种系统,这些系统支持建立竞争性编程竞赛、加强教育和招聘流程、促进解决数据挖掘挑战、在线编译器和作为其他定制系统组件集成的开发平台。因此,它将作为一个有效的系统来实施,帮助学生获得数据结构和编程技能的知识。该系统包括用户界面、沙盒评审环境、评估分数和将报告更新到数据库的功能。在这篇文章中,我们将讨论在线评委在编程比赛中如何崩溃。这张图片将帮助我们更好地解释它是如何崩溃的。
-
时间限制完成 - 代码应在特定时间执行。默认情况下,我们可以在操作系统上执行线程时设置时间限制吗?
-
内存限制完成 - 程序不应占用 CPU 上的所有内存。我们怎样才能以更简单的方式改变这一点?
-
Stack Overflow Error - 跟踪程序后,系统将了解程序是否成功运行。那么这些信息是如何到达我们手中的呢?
以上几点都说明了系统检查和运行程序时出现的问题。用户可以提交程序中的任何代码。我们如何确定提交的代码是否恶意或恶意程度如何。
某些代码可以执行不同的进程,或者可以调查您的文档目录,并获取一些信息,或者可以运行管理命令,或者可以消耗服务器的带宽,代码可以执行多种操作。我们不需要允许系统这样做。那么问题来了,我们如何才能将这些许可指南付诸实施呢?为了处理上述情况,我们将解释以下方法 -
方式
用于应用系统权限和硬件的技术称为代码沙箱。 Web 决定通过两种方式进行代码沙箱处理上述不同场景。
-
蹩脚的方式
-
漫长的历史之路
方式 1:蹩脚方式
很少有可见的在线决策举措可以让开发人员在执行代码之前尝试发现代码上的恶意功能。例如,如果我们的代码是基于 C++ 的,则决策将首先查看是否有任何代码行使用了“system”短语。这个答案不会因为不同的原因而绘制,因为许多编程语言不会以相同的方式绘制。您可以动态生成特征并用几种编程语言接触它,因此过滤不会在代码中绘制。另一件事,如果你想打印“system”作为输出怎么办?这个答案会说该代码是恶意的,但事实并非如此。
方式 2:漫长的历史之路
在这种方法中,网络决定的最大值有效。这个答案与完全基于Linux 的系统相关。堆栈溢出/运行时错误可以通过程序的返回成本的方式进行检查。如果远为0,那么我们可以说系统能够成功运行,如果在其他情况下崩溃了。
通过使用各种基于Unix的完整库,可以提供Memory Limit麻烦和时间限制限制。某些编程语言通过默认方式启用限制标志的此功能,例如Java。时间限制边界和内存限制缺陷可以通过使用许多基于 Unix 的完全库来解决。有些编程语言默认支持这种类型的边界标志,例如 Java。
在 Linux 上,目录权限很简单。我们可以简单地创建一个用户并允许该用户访问一些目录和一些读/写权限。然后,通过执行该用户的使用情况的应用程序,可以解决文档列表的麻烦。此外,该代码无法运行一些管理命令。
使用一些库(例如 Trickle)同样可以限制社区技能。为了简单地弥补一个安全漏洞,我们可以设置不同的库并编写不同的代码。
结论
如果我们使用完全基于VM(虚拟机)的Docker或box,以上所有问题都可以得到解决。如果我们想有一个初步的记忆,我们可以创建一个盒子,并预设盒子的社区权限、时间限制。有了虚拟机的帮助,所有的麻烦都可以被忽略。可以有开发人员知道的替代方案。在这个解决方案中,整个判断机器也可能看起来比其他技术慢,但绝对在大规模上它比任何其他解决方案都要快得多,而且更安全、更净化。你可以看一下这个 GitHub Repo 来了解如何使用 docker 进行判断。
整个评判方式是在线评判最重要的部分之一。为了执行一台判断机器,人们需要了解操作系统如何工作,或者编程语言如何工作。
以上就是为什么在线编程竞赛期间在线评测系统会崩溃?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!