查看原文
其他

手写 OJ 系统,真的很难么?

鱼皮 程序员鱼皮 2024-01-21

大家好,我是鱼皮。

本周四的时候,发了一个 新项目预告 ,说打算全程直播带大家手把手做出一个 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 点,加更一场公开直播,计划分享如下内容:

  1. 完成前端项目初始化模板的开发
  2. 搭建基础后端项目框架
  3. 前端代码自动生成
  4. 前后端联调

这期争取把所有准备工作完成,之后就正式开始撸业务代码、开发判题服务和代码沙箱了。

更多的细节和内容让我们 今晚 8 点 见,扫码即可预约直播:

没时间的朋友也不用担心,第一期的内容是完全免费公开的,到时候看回放即可~

第一期上回放:

录制文件:https://meeting.tencent.com/v2/cloud-record/share?id=e3a06615-ae78-41be-8f7d-c57e4948f046&from=3

访问密码:WkFq

往期推荐

24 届秋招群,集合!

鱼皮 C++ 学习路线一条龙!

如何 “瞬间” 搭建本地开发环境?

我在鱼厂的实习生活

给学弟妹们的秋招建议!

被字节拷打了!基础还是太重要了...

继续滑动看下一个

手写 OJ 系统,真的很难么?

鱼皮 程序员鱼皮
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存