手写 OJ 系统,真的很难么?
大家好,我是鱼皮。
本周四的时候,发了一个 新项目预告 ,说打算全程直播带大家手把手做出一个 OJ 在线判题系统。
当天晚上就开始直播,本来打算 2 小时结束第一期。结果因为朋友们学习热情高涨,我一口气 blablabla 直播讲了 3 个半小时,最后由于身体原因才无奈下播。
直播过程截图:
底下的章节概要是自动生成的,请忽略错别字
看得出在很多同学的印象中,实现 OJ 系统并不是一件容易的事。所以我在第一期重点讲解了 OJ 系统的概念、实现重点、核心业务流程、以及 5 种 主流的 OJ 系统实现方案。
直播带大家画的核心业务流程时序图:
给大家分享了 5 种主流的 OJ 系统实现方案,看完之后也许就不会觉得 OJ 系统很难实现了,动手能力强的同学可以自己试试~
主流 OJ 系统实现方案
首先要清楚,成熟的 OJ 系统往往需要支持多种不同的编程语言,自主实现要花费大量的精力、也需要很多技术和考虑,所以核心原则是:能用别人现成的,就不要自己写!
方案 1:用现成的 OJ 系统
网上有很多开源的 OJ 项目,比如青岛 OJ、HustOJ 等,可以直接下载开源代码自己部署。
比较推荐的是 judge0,这是一个非常成熟的商业 OJ 项目,支持 60 多种编程语言!
代码:https://github.com/judge0/judge0
支持免费自部署、公有云、私有云部署等:
方案 2:用现成的服务
如果你不希望完整部署一套大而全的代码,只是想复用他人已经实现的、最复杂的判题逻辑,那么可以直接使用现成的判题 API、或者现成的代码沙箱等服务。
比如 judge0 提供的判题 API,非常方便易用。只需要通过 HTTP 调用 submissions 判题接口,把用户的代码、输入值、预期的执行结果作为请求参数发送给 judge0 的服务器,它就能自动帮你编译执行程序,并且返回程序的运行结果。
如下图,发送了一段打印 "hello world" 的程序,得到了程序执行的时间、状态等:
地址:https://rapidapi.com/judge0-official/api/judge0-ce
方案 3:自主开发
这种方式就不多说了,判题服务和代码沙箱都要自己实现,适合学习,但不适用于商业项目。我这次带大家做的 OJ 系统,就选择了自主开发,主打一个学习。
方案 4:利用 AI 实现代码沙箱
现在 AI 的能力已经十分强大了,我们可以把各种本来很复杂的功能直接交给 AI 来实现。
比如把 AI 当做代码沙箱,我们直接扔给他一段代码、输入参数,问他能否得到预期的结果,就实现了在线判题逻辑!
如下图:
之前带大家做的 智能 BI 项目 ,就是把 AI 当做了智能数据分析师,来生成图表和分析结论。
只要你脑洞够大,AI + 编程 = 无限的可能~
方案 5:移花接木
这种方式最有意思、也最 “缺德”。很多同学估计想不到。
那就是可以通过让程序来操作模拟浏览器的方式,用别人已经开发好的 OJ 系统来帮咱们判题。
比如使用 Puppeteer + 无头浏览器,把咱们系统用户提交的代码,像人一样输入到别人的 OJ 网页中,让程序点击提交按钮,并且等别人的 OJ 系统返回判题结果后,再把这个结果返回给我们自己的用户。
这种方式的缺点就是把核心流程交给了别人,如果别人服务挂了,你的服务也就挂了;而且别人 OJ 系统不支持的题目,可能你也支持不了。
其他内容
讲解完 OJ 系统后,接着又从 0 到 1 带大家开发一套简洁易用的前端万用初始项目模板。无奈还没开发完,所以本周六(今晚)8 点,加更一场公开直播,计划分享如下内容:
完成前端项目初始化模板的开发 搭建基础后端项目框架 前端代码自动生成 前后端联调
这期争取把所有准备工作完成,之后就正式开始撸业务代码、开发判题服务和代码沙箱了。
更多的细节和内容让我们 今晚 8 点 见,扫码即可预约直播:
没时间的朋友也不用担心,第一期的内容是完全免费公开的,到时候看回放即可~
第一期上回放:
录制文件:https://meeting.tencent.com/v2/cloud-record/share?id=e3a06615-ae78-41be-8f7d-c57e4948f046&from=3
访问密码:WkFq
往期推荐