大家好,我是魚皮。之前 全程直播帶大家手把手做了一個 OJ 線上判題系統。
看得出在很多同學的印象中,實作 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 當做程式碼沙箱,我們直接扔給他一段程式碼、輸入參數,問他能否得到預期的結果,就實作了線上判題邏輯!
如下圖:
之前帶大家做的 ,就是把 AI 當做了智慧數據分析師,來生成圖表和分析結論。
只要你腦洞夠大,AI + 編程 = 無限的可能~
方案 5:移花接木
這種方式最有意思、也最 「缺德」。很多同學估計想不到。
那就是可以透過讓程式來操作模擬瀏覽器的方式,用別人已經開發好的 OJ 系統來幫咱們判題。
比如使用 Puppeteer + 無頭瀏覽器,把咱們系統使用者送出的程式碼,像人一樣輸入到別人的 OJ 網頁中,讓程式點選送出按鈕,並且等別人的 OJ 系統返回判題結果後,再把這個結果返回給我們自己的使用者。
這種方式的缺點就是把核心流程交給了別人,如果別人服務掛了,你的服務也就掛了;而且別人 OJ 系統不支持的題目,可能你也支持不了。
學習計畫
第一期的內容是完全免費公開的,感興趣的同學可以看回放。這個計畫的手把手視訊教程、筆記、源碼、簡歷寫法、面試題解 可見。
編程導航:https://yupi.icu
第一期錄制檔:
https://meeting.tencent.com/v2/cloud-record/share?id=e3a06615-ae78-41be-8f7d-c57e4948f046&from=3
存取密碼:WkFq
往期推薦