HUSTOJ實現的相關想法

2021-07-27 09:52:20 字數 774 閱讀 6020

這兩天通過讀 hustoj 的原始碼,是我對oj系統有了初步的了解,對整個系統的構架有了淺薄的認識。拿hustoj來講,hustoj的結構是典型的lamp伺服器,就是linux+apache+mysql+php,以及用c++/c寫的評測機核心。

hustoj有兩種資料互動的模式,兩種的不同點在於,是評測機核心通過http向php傳輸資料的方式更新評測結果,還是直接連線mysql,將最新的評測結果寫入資料可中,然後再讓web端查詢mysql。兩者的想點在於,web端在獲取使用者上傳的資料後,將資料寫入資料庫,然後讓評測機去查詢mysql。

hustoj下面分三大模組:

1. core   評測機核心

2. php  前端

3. mysql   資料庫

我現在主要研究的是core的部分,下面簡述一下hustoj的core的實現原理。

core也主要是分三個部分,分別是 judged、judge_client、sim,其中judged是core的入口,judged將solution(使用者在前端提交的**)分配給judge_client,judge_client再建立乙個沙箱環境給使用者程式,接著執行使用者提交的**(事先編譯好了),接著執行sim模組來檢測**重複度,最後更新資料庫或者通過http的方式傳遞資料給web端,最終的資料更新是在judge_client模組裡面實現的。

簡單說一下沙箱的實現原理,judge_client通過改變程序的檔案根目錄,從而使得當前程序及子程序對系統造成的影響被束縛在了乙個可控的地方裡面。

在此特別感謝 zhnlue 貢獻 hustoj 開源專案,學習到了很多東西

關於react相關想法

1.關聯更新 2.不可 這兩點我非常贊同,尤其是第一點,現在存在非常多的關聯更新,很難管理,目前還沒想到好的方式處理 第二點,其實是第一點的結果,由於關聯太多導致不可 也就是解決了關聯更新,也就解決了第二點的大部分 關聯更新這塊,我覺得根源在於需求是逐步修改的,也就是說白了很多時候的實現是被需求逐步...

BTS Patch想法和實現

bts patch想法和實現 目的 不重啟bts 系統是vxworks on powerpc 動態呼叫乙個新函式,替換原來的舊函式,以達到patch的功能。如能實現至少能在debug的時候起作用,不用編譯整個應用程式,不用重新啟動系統,節省時間。在nortel交換機上有該功能,現想在基站 即bts上...

hustoj實現遠端判題的兩種方案

hustoj實現遠端判題需要對原始碼作新增或修改,對應流程圖中的紅色部分。需要在web端建立子執行緒,使其處理表中的遠端提交。同時修改core 使其不分配執行緒處理表中的遠端提交。這裡選擇共用同一張solution表,是為了避免建立新錶需要還原複雜的呼叫關係。core由兩部分組成 負責感知任務並分配...