V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

关于 Online Judge 判题沙箱的学习问题

  •  
  •   zxCoder · 2020-09-07 21:33:19 +08:00 · 1594 次点击
    这是一个创建于 1533 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想从头造一个轮子,写一个 OJ 系统,其他 web 开发和业务逻辑相关的因为打过比赛比较清楚,但是判题这部分几乎没有任何基础,想问一下应该如何从零学起?是不是对系统底层,操作系统,系统安全这些方面要求很高? 或者目前有没有比较完善安全的这种判题器?

    6 条回复    2020-09-09 20:08:26 +08:00
    ysc3839
        1
    ysc3839  
       2020-09-07 23:13:03 +08:00
    从底层研究不是不可以,但是太浪费时间了,还容易出现漏洞。建议使用 Docker 等现成的方案。
    kipsora
        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 一是你走了之后维护会很麻烦,最后可能也没啥人用。
    Ginray
        3
    Ginray  
       2020-09-08 09:18:30 +08:00
    如果写着玩玩,还是挺有趣的,可以参考下 hustoj,网上也有不少博客。
    话说是不是 ACMER 想提升工程能力时都会不约而同想到做 OJ,hhh
    acmerliu
        4
    acmerliu  
       2020-09-08 09:20:53 +08:00
    基于 docker 方案我最近实现了一套,部署在阿里云上测试还可以,但是目前在获取容器内程序执行时间这里还没想到好的方案,其他的编译、运行、资源限制都可以,而且 docker 实现也不慢,一台服务器可以启多个 docker 实例判题,横向扩展也可以。楼主是想做这方面的事情嘛,可以加个好友相互学习,我也是想写一个 OJ 系统,liuning8521 。
    zxCoder
        5
    zxCoder  
    OP
       2020-09-08 17:22:20 +08:00
    看了几个开源的 oj 的判题模块,感觉特点就是没有统一的,啥类型的都有,找不到比较优秀的项目可以模仿和二次开发 orz
    acmerliu
        6
    acmerliu  
       2020-09-09 20:08:26 +08:00
    @zxCoder 基于 lorun 可以,底层是 c 语言,打包成.so ,上层 python 可以调
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1364 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:42 · PVG 07:42 · LAX 15:42 · JFK 18:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.