想从头造一个轮子,写一个 OJ 系统,其他 web 开发和业务逻辑相关的因为打过比赛比较清楚,但是判题这部分几乎没有任何基础,想问一下应该如何从零学起?是不是对系统底层,操作系统,系统安全这些方面要求很高? 或者目前有没有比较完善安全的这种判题器?
1
ysc3839 2020-09-07 23:13:03 +08:00
从底层研究不是不可以,但是太浪费时间了,还容易出现漏洞。建议使用 Docker 等现成的方案。
|
2
kipsora 2020-09-08 04:03:22 +08:00
参考一下 VFleaKing 的 UOJ 的沙箱?我很久之前自己仿(chao)造(xie)了一个,docker 可能没办法很好地测量时间和峰值内存吧,自己写隔离肯定不太行,所以比较理想的方案是在 docker 中跑沙箱(或者你对自己的沙箱足够自信也可以不用 docker )。
具体见: https://github.com/vfleaking/uoj/tree/master/judge_client/1/uoj_judger 不过我觉得从头造轮子这件事,用来学习一下操作系统编程感觉还行,真的要用不如先参考一下市面上有没有现成能拿来用的 OJ,自己写的 OJ 一是你走了之后维护会很麻烦,最后可能也没啥人用。 |
3
Ginray 2020-09-08 09:18:30 +08:00
如果写着玩玩,还是挺有趣的,可以参考下 hustoj,网上也有不少博客。
话说是不是 ACMER 想提升工程能力时都会不约而同想到做 OJ,hhh |
4
acmerliu 2020-09-08 09:20:53 +08:00
基于 docker 方案我最近实现了一套,部署在阿里云上测试还可以,但是目前在获取容器内程序执行时间这里还没想到好的方案,其他的编译、运行、资源限制都可以,而且 docker 实现也不慢,一台服务器可以启多个 docker 实例判题,横向扩展也可以。楼主是想做这方面的事情嘛,可以加个好友相互学习,我也是想写一个 OJ 系统,liuning8521 。
|
5
zxCoder OP 看了几个开源的 oj 的判题模块,感觉特点就是没有统一的,啥类型的都有,找不到比较优秀的项目可以模仿和二次开发 orz
|