1 whileFalse 2020-08-06 09:09:56 +08:00 ![]() OJ 系统嘛,就是把代码发到服务器上保存为文件,然后编译执行喽。 难点主要在于隔离,就是确保用户提交的代码即使包含恶意功能,也不能真正破坏服务器或窃取资料;以及用户代码不会用光服务器资源,确保并发能力。 |
![]() | 2 hongch 2020-08-06 09:11:04 +08:00 如 1 楼所说,就是保存为文件然后用对应的环境编译就完事了 |
![]() | 3 meiyoumingzi6 2020-08-06 09:15:19 +08:00 via Android 以下是在 golang 官网执行在找代码的时候提示 Waiting for remote server... 正如 1 楼所说,需要将代码发送到远端执行 |
4 shylockhg 2020-08-06 09:29:33 +08:00 1. server 2. wasm |
5 vhysug01 2020-08-06 09:32:34 +08:00 ![]() 有个类似 jupyter 的简单项目,zmq-pykernel, 就几个文件,比较好读,推荐看一下 |
![]() | 6 no1xsyzy 2020-08-06 09:59:43 +08:00 有基于 wasm 的,在浏览器里实现一个解释器的做法。 但没什么地方在用,实现难维护难成本高,反而不如弄堆服务器做好隔离。 |
![]() | 7 foil2 2020-08-06 10:23:54 +08:00 via Android ![]() 可以参考廖雪峰老师的 Remote Code Runner https://mp.weixin.qq.com/s/IdgWJBgogK7oHXZCkv0Ivg |
![]() | 8 caviar 2020-08-06 11:39:14 +08:00 ![]() 常见的是发到服务器上编译执行。 推荐一篇博客 https://blog.golang.org/playground 介绍 go playground 是怎么实现的,非常有趣。 包含如何伪造文件系统和网络,如何伪造时间(甚至跳过 sleep ),规避副作用使得结果可以复用。 |
9 aguesuka 2020-08-06 11:53:55 +08:00 via Android 不一定,js kotlin 直接在浏览器里跑 |
10 chaohuang OP @whileFalse @hongch @meiyoumingzi6 @vhysug01 @shylockhg @no1xsyzy @foil2 @caviar @aguesuka 感谢各位回复, 小弟去了解一下。 |