OJ搭建:Judge0服務器、DeepSeek服務接入簡介

? ? ? ? 各大OJ平臺上有很多很好的資源,但作為自己的“備課本”總有各種不便,教學生時間久了總是有一些自己的題目和想法,這在教初學的學生時非常突出。所以,很多年前就搞了一些嘗試,包括:在機房搭建ubuntu服務器,找一個開源OJ安上,這過程中幾經折騰,上梯翻墻的,別提多難受;然后想在云上搞一個,就可以隨時訪問了,由于學生少所以在阿里云上搞了僅2VCPU2G的配置,判題機制是輪詢、本地判題,一直用了很多年。恰逢前兩年被學校征用,于是升級了一次OJ,因為改了很多東西,所以又是幾經折騰;之后DeepSeek火了,萌生了使用DeepSeek改學生代碼的想法,建立了一個新的OJ。截至今天,當代的AI也沒有多強的能力來完成編程題,當然成熟算法它們做的比較好。于是又幾經折騰,通過一些技術方法達成讓它可以正確的分析和解決學生被判定錯誤的當前代碼并給予指導的目的。

? ? ? ? 這一篇主要是介紹流程,由于對PHP和YII的熟練度差億點,整個過程斷斷續續做了好幾個月。作為一個記錄,也給有想法的一點參考。

一、OJ搭建

? ? ? ? 這個沒有多難的地方,首先去云上租一個服務器,有公網IP即可,域名和是否備案不影響我們搭建實際服務。

0、找一個云服務商,我用的是阿里云,你要根據你所在地區來租用服務器,本省、隔壁省可能都行,太遠的就很容易呵呵掉,別問我咋知道的,一問一個不吱聲。

1、找一個開源OJ,我使用的是LPSZOJ,它是Php寫的,提供了好幾種安裝腳本。

2、閱讀其安裝需求,然后在云服務器上安裝對應版本。我使用的是阿里云,直接選擇作者說明的測試過的ubuntu版本就可以。我使用的是ubuntu_20_04_x64。

3、進入控制臺,運行安裝腳本。不會的或者遇到困難,請留言給DeepSeek不要給我^ ^。

4、使用你ECS的公網IP地址訪問你的網站。注意ECS的防火墻規則是否配置正確。

? ? ? ? 一般來說,使用安裝腳本在已測試過的系統版本下進行安裝不會出現什么問題。

另外,如果你不想大動干戈去搞什么Judge0,而只想使用DeepSeek,也不是不行咯,忽略下一步直接看下下步。

二、開始捯飭Judge0

? ? ? ? 先去到judge0.com,大體看看都有什么功能。它是一個傳統判題機到目前為止不支持交互式和構造題,但是運行在沙盒里面,而且支持非常多的語言。

1、在OJ的云上再租一個服務器,但這個服務器的配置不低于2VCPU/4G內存。因為Judge0本身就會占用一定的內存,而2VCPU一般都是4線程,所以你最多一次評測4個測試點,若每個測試點限制內存為500Mb一下就可以正常工作。

2、安裝Judge0服務器,并進行配置。不會的或者遇到困難,請留言給DeepSeek不要給我^ ^。

3、再云服務器上正確配置端口。

4、訪問你Judge0所在ECS的works節點(其他官方文檔上有的節點也可以),只要正常訪問就可以,不必在意有沒有返回數據或返回了什么數據,當你使用API調用了評測機之后它自然會有全格式的返回數據。

三、開始改造現有OJ

? ? ? ? 我用的OJ是輪詢式的,所以只需要從ECS的后臺檢查一下數據庫的內容而后參考OJ的評測機代碼和守護進程(C語言)就可以知道它是怎么實現的評測。弄清楚流程之后,我們著手寫自己的服務程序來調用Judge0服務器進行評測。在整個判題流程中插入了我們自己的代碼之后,可想而知后面進行其他改造就會非常得心應手了。

? ? ? ? 當然,如果保持當前本地判題的方式,那么你只需要在OJ的判題機代碼上增加幾行代碼,使之可以調用你的程序就可以了。例如根據不同的判題結果,調用不同的.py文件來與DeepSeek交互獲得對學生代碼的分析——這非常容易做,因為python的openai庫是被DeepSeek直接支持的。最開始我也是這樣做的,但隨著需求增加,用一門達不到精通程度的語言來實現復雜任務實在是難受至極。所以,最后我還是回到了VB.NET的懷抱——估計這輩子也不可能精通python了。

? ? ? ? 言歸正傳,現在我們應該好好規劃一下Judge0的多線程判題過程,至于判題結果如何發送給DeepSeek都應該在判題機集群正確工作之后再進行。一般來講,當用戶提交代碼之后我們進行以下操作:

1、我們通過查詢數據庫,得到等待評測的提交。

2、題目對應的每個測試點對于Judge0來講都是一個評測(雖然可以批量提交,但我們自己控制判題機集群的負載均衡)。

3、為每個測試點調用Judge0API,等待返回結果。

4、將全部測試結果進行匯總,寫回數據庫。

至此,完成了判題機的工作。

? ? ? ? 但我們需要考慮有很多個提交同時進行、有若干個Judge0服務器進行負載均衡的需求。所以,我們應該從判題服務的角度再來審視一下:

1、啟動判題服務時,通過訪問works節點檢查Judge0服務器工作狀況(判斷是否在線、正在進行多少個任務、等待隊列中有多少個任務)。

2、維持一個判題任務隊列,其中保存構建Judge0API調用的信息。所有的提交的測試點都進入該隊列。

3、使用Judge0Server類對判題任務隊列進行輪詢,并按照一定負載規則將任務摘取發送給制定的Judge0服務器。

4、維持一個各次提交的評測結果隊列,其中保存題目對應的Judge0服務器返回的評測結果。每當一個提交的全部測試點均返回,我們對其進行匯總。而后寫回數據庫——PHP后臺會自動更新前端頁面。

????????所以,我們的評測機比原OJ的阻塞式的本地評測機要復雜一些,這里面有一些生產——消費模型需要實現,但它能夠承受更大的負載也不會由于對某些代碼的評測導致出錯從而使大面積的評測陷入長時間的等待。

四、接入DeepSeek

? ? ? ? 當我們得到評測結果之后,就可以進行下一步操作:如果評測結果不為AC,那么將用戶代碼發送給DeepSeek來進行分析,將分析結果寫入數據庫,在前端設置等待和自動刷新功能即可。關于接入DeepSeek服務的代碼可以參考上一篇。

? ? ? ?

? ? ? ? 需要樣品請留言,測試時手下留情。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85738.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java的鎖機制問題

鎖機制 1.鎖監視器 在 Java 并發編程中,鎖監視器(Monitor) 是對象內部與鎖關聯的同步機制,用于控制多線程對共享資源的訪問。以下是核心要點: 🔒 監視器的核心組成 獨占區(Ownership&#xff…

老鳳祥的AI智能眼鏡:讓智慧更近生活

在科技進步的潮流中,人工智能技術不斷為我們的生活增添色彩。近日,有關字節跳動旗下的火山引擎與中國珠寶品牌老鳳祥合作開發 AI 智能眼鏡的消息引發了廣泛關注。這款與眾不同的眼鏡因其獨特的功能及技術支持,已經在業內引起了極大反響。 AI眼鏡:老年群體的智能好幫手 根…

Kotlin 中為什么沒有靜態變量和靜態方法—不用static?

Kotlin 的設計核心是: 一切皆對象:消除 static 的「非對象」特性,用 companion(對象)和頂層函數(包級對象)替代,讓代碼更統一。避免全局狀態濫用:static 成員是全局可見…

VSCode性能調優:從卡頓到絲滑的終極方案

? 核心價值 "這套配置使某金融核心系統VS Code內存占用從8GB降至1.2GB,加載速度提升15倍" —— 2024某銀行效能優化報告 ?? 性能瓶頸拆解 一、百萬行項目優化方案 ?? 黃金配置參數 // settings.json(核彈級優化) {"files.watcherExclude": {"…

以云織夢,渡數濟世:輝瑞與亞馬遜云科技共譜醫藥新樂章

胖頭陀科技 編輯:沐由 【導讀】“用合規的數據來幫助患者,成為患者回歸健康的一味新藥。”當下,在數字洪流的浪潮中,這味“良藥”正沿著云和AI的脈絡,奔向有需求的千家萬戶…… 如果說到Pfizer,估計十個人…

SpringBoot后端開發知識點總結(持續更新)

目錄 1. 常用易混淆注解解釋1.1 Resource和Autowired注解的區別1.2 PathVariable和RequestParam注解的區別 2. Mybatis-Plus高級特性2.1 強大的通用CRUD接口2.2 代碼生成器 3. IDEA實用快捷鍵4. 前后端聯調關鍵點4.1 代碼示例4.2 聯調要點4.3 調試技巧 1. 常用易混淆注解解釋 …

電腦商城--用戶收貨管理

新增收貨地址 1 新增收貨地址-創建數據表 1.使用use命令先選中store數據庫。 USE store; 2.在store數據庫中創建t_address用戶數據表。 CREATE TABLE t_address (aid INT AUTO_INCREMENT COMMENT 收貨地址id,uid INT COMMENT 歸屬的用戶id,name VARCHAR(20) COMMENT 收貨人姓…

開發者避坑:接入Flux-Kontext API實現文生圖、圖生圖功能

在數字化浪潮背景下,人工智能(Artificial Intelligence, AI)技術正加速重塑圖像創作領域。智創聚合API平臺近日宣布整合Flux-Kontext系列模型,通過API接口支持圖生圖和文生圖功能,為開發者及創作者提供高效解決方案。此…

.Net Core 獲取與bin目錄相同文件路徑的文件

在 .NET Core 中,您可以使用以下方法來獲取與 bin 目錄相同的文件路徑。通常,bin 目錄是應用程序編譯后生成的輸出目錄,您可以使用 AppContext.BaseDirectory 或 Directory.GetCurrentDirectory() 來獲取該目錄的路徑。 以下是一些常用的方法…

RN(React Native)技術應用中常出現的錯誤及解決辦法

React Native 作為跨平臺開發框架,在實際應用中可能會遇到一些常見的錯誤。以下是React Native 技術應用中常出現的錯誤及解決辦法: 1. 網絡請求失敗(Network Request Failed) 原因: 請求地址不正確網絡權限未配置i…

Java 21 的虛擬線程與橋接模式:構建高性能并發系統

Java 21 的虛擬線程與橋接模式:構建高性能并發系統 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈量世界&…

HTML5 火焰字體效果教程

HTML5 火焰字體效果教程 這里寫目錄標題 HTML5 火焰字體效果教程前言項目概述基本原理項目結構詳細實現步驟1. HTML結構2. CSS樣式3. JavaScript實現 代碼詳解1. 初始化設置2. 粒子系統3. 生成粒子4. 動畫循環5. 交互控制 擴展和優化建議總結完整代碼 前言 在這篇教程中&#…

SMOTE-XGBoost實戰:金融風控中欺詐檢測的樣本不平衡解決方案

1. 行業問題背景 (1)金融欺詐檢測的特殊性 在支付風控領域,樣本不平衡是核心痛點。Visa 2023年度報告顯示,全球信用卡欺詐率約為0.6%,但單筆欺詐交易平均損失高達$500。傳統機器學習模型在此場景下表現堪憂&#xff1…

Instagram下載保存 -下載狗解析工具

在日常瀏覽Instagram時,是否有過這樣的煩惱:看到一個精彩的視頻,想要保存下來,卻不知道如何操作?有時候我們會看到一些特別的旅行視頻、搞笑片段,甚至是喜歡的名人分享的內容,簡直是舍不得錯過。…

flink如何基于Pekko實現RPC調用

摘要 通過閱讀flink源碼,了解flink是如何基于Pekko實現遠程RPC調用的 Pekko實現遠程調用 Flink 的 RPC 框架底層是構建在 Pekko 的 actor 模型之上的,了解Pekko如何使用,對后續源碼的閱讀有幫助。 Apache Pekko(原為 Akka 的一…

Kafka節點注冊沖突問題分析與解決

一、核心錯誤分析 ERROR Error while creating ephemeral at /brokers/ids/1, node already exists and owner does not match org.apache.zookeeper.KeeperException$NodeExistsException: KeeperErrorCode NodeExists問題本質:ZooKeeper中已存在ID為1的broker節…

突破PPO訓練效率瓶頸!字節跳動提出T-PPO,推理LLM訓練速度提升2.5倍

突破PPO訓練效率瓶頸!字節跳動提出T-PPO,推理LLM訓練速度提升2.5倍 在大語言模型(LLM)通過長思維鏈(CoT)展現出強大推理能力的當下,強化學習(RL)作為關鍵技術卻面臨訓練…

【Python】dictionary

1 字典功能 字典是可變容器模型&#xff0c;且可存儲任意類型對象&#xff1b; 字典的每個鍵值對 <key: value> 用冒號 : 分割&#xff0c;每個對之間用逗號(,)分割&#xff0c;整個字典包括在花括號 {} 中 ,格式如下所示&#xff1a; d {key1 : value1, key2 : value…

【python】If 語句

1 使用if 進行條件判斷 1.1 檢查字符串是否相等 car bmw car BMW # FALSEcar bmw car.upper() BMW # true # 變小寫用方法&#xff1a;lower1.2 檢查字符串是否不相等 my_car yadeaif my_car ! Audi:print("Buy one! Buy one! Buy one!")1.3 比較數字 answe…

Knife4j 使用詳解

一、概述 Knife4j 是一款基于 Swagger 的開源 API 文檔工具&#xff0c;旨在為 Java 開發者提供更美觀、功能更強大的 API 文檔生成、展示和調試體驗。它是 Swagger-Bootstrap-UI 的升級版&#xff0c;通過增強 UI 界面和擴展功能&#xff0c;解決了原生 Swagger UI 界面簡陋、…