zxCoder
V2EX  ›  问与答

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

  •  
  •   zxCoder · Sep 7, 2020 · 2306 views
    This topic created in 2113 days ago, the information mentioned may be changed or developed.

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

    6 replies    2020-09-09 20:08:26 +08:00
    ysc3839
        1
    ysc3839  
       Sep 7, 2020
    从底层研究不是不可以,但是太浪费时间了,还容易出现漏洞。建议使用 Docker 等现成的方案。
    kipsora
        2
    kipsora  
       Sep 8, 2020
    参考一下 VFleaKing 的 UOJ 的沙箱?我很久之前自己仿(chao)造(xie)了一个,docker 可能没办法很好地测量时间和峰值内存吧,自己写隔离肯定不太行,所以比较理想的方案是在 docker 中跑沙箱(或者你对自己的沙箱足够自信也可以不用 docker )。

    具体见: https://github.com/vfleaking/uoj/tree/master/judge_client/1/uoj_judger

    不过我觉得从头造轮子这件事,用来学习一下操作系统编程感觉还行,真的要用不如先参考一下市面上有没有现成能拿来用的 OJ,自己写的 OJ 一是你走了之后维护会很麻烦,最后可能也没啥人用。
    Ginray
        3
    Ginray  
       Sep 8, 2020
    如果写着玩玩,还是挺有趣的,可以参考下 hustoj,网上也有不少博客。
    话说是不是 ACMER 想提升工程能力时都会不约而同想到做 OJ,hhh
    acmerliu
        4
    acmerliu  
       Sep 8, 2020
    基于 docker 方案我最近实现了一套,部署在阿里云上测试还可以,但是目前在获取容器内程序执行时间这里还没想到好的方案,其他的编译、运行、资源限制都可以,而且 docker 实现也不慢,一台服务器可以启多个 docker 实例判题,横向扩展也可以。楼主是想做这方面的事情嘛,可以加个好友相互学习,我也是想写一个 OJ 系统,liuning8521 。
    zxCoder
        5
    zxCoder  
    OP
       Sep 8, 2020
    看了几个开源的 oj 的判题模块,感觉特点就是没有统一的,啥类型的都有,找不到比较优秀的项目可以模仿和二次开发 orz
    acmerliu
        6
    acmerliu  
       Sep 9, 2020
    @zxCoder 基于 lorun 可以,底层是 c 语言,打包成.so ,上层 python 可以调
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   781 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 19:45 · PVG 03:45 · LAX 12:45 · JFK 15:45
    ♥ Do have faith in what you're doing.