999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

在線評測系統中判題機的設計與實現

2022-06-22 12:47:00呂英華
無線互聯科技 2022年6期
關鍵詞:程序數據庫系統

呂英華

(北海職業學院,廣西 北海 536000)

0 引言

Online Judge系統是一個在線判題系統,能夠對用戶提交的多種程序源代碼進行編譯執行,并根據預先存儲的結果進行校驗后得到源程序的正確性。Online Judge系統最初使用于ACM比賽中[1],隨著國內計算機行業的不斷發展,許多高校開發了屬于自己的Online Judge系統,同時計算機行業也開發了Online Judge系統服務于個人或他人。現在Online Judge系統不僅在比賽中使用,還在教學、考試、程序上機實踐中使用,極大提高了教學工作效率和方便了各類編程人員。

1 設計思路

Online Judge系統主要有兩種典型的模式,分別是C/S模式和B/S模式。C/S模式主要用在各種大型比賽中,比如省賽、區賽、國際賽等;B/S模式主要用在教學、上機練習等。該Online Judge系統采用B/S模式,主要由前端、后端及判題機三大部分組成。整個系統以數據庫為中心,用戶在前端頁面登錄進入系統,前端頁面則顯示從數據庫中獲取的題目、比賽列表、排名等信息,用戶選擇對應的題目進行答題,提交代碼保存至數據庫。判題機是Online Judge系統的核心部分,評判之前先從數據庫中提取代碼,將代碼保存至文件中,再對代碼文件進行編譯、執行和評判操作,最后將評判結果存入數據庫中,以上則完成了評判流程,前端頁面則將評判結果從數據庫中讀取出來并顯示。系統邏輯圖如圖1所示。

圖1 系統邏輯

2 判題機實現

判題機是整個Online Judge系統的核心內容,主要功能是對用戶提交的代碼進行編譯、執行、評判等,寫好的判題機可以放入Windows環境或Linux環境中。該Online Judge系統采用Python實現,支持多種程序(如C、C++、java)源代碼編譯執行。

2.1 編譯代碼

Online Judge系統最重要的功能是支持多種編程語言提交代碼,由于不同的編程語言需要到不同的編譯器,則可以選擇Python提供的subprocess模塊去調用外部編譯器,該模塊能夠對不同編程語言進行擴展,只需配置好編譯參數即可。

具體實現是調用subprocess.Popen方法,設置方法中的shell=True,并使用cwd指定工作目錄,stdout和stderr設置為subprocess.PIPE管道。調用communicate方法獲取外部程序的輸出信息,一般返回0和1。

p=subprocess.Popen(build_cmd[language],shell=True,cwd=dir_work,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #調用subprocess.Popen

out,err=p.communicate() #獲取編譯錯誤信息

2.2 評判流程

判題機的評判流程是根據代碼編譯執行后返回的信息做出對應的執行流程。首先,communicate方法如果出現編譯錯誤Compile Error,則停止,否則繼續往下執行;其次,判題機會依次檢查程序是否出現超時、超內存和非法指針、數組越界等情況,如果程序返回Time Limit Exceeded錯誤信息,則說明執行超時了;如果程序返回Memory Limit Exceeded錯誤信息,則說明執行超出內存限制了;如果程序返回Runtime Error錯誤信息,則說明程序運行錯誤,需要進行修改[2]。評判流程圖如圖2所示。

圖2 評判流程

當以上所有流程跑完,都未出現錯誤信息,程序繼續執行,下一步驟,則需要將結果和標準答案進行比較,得出答題是否正確,有以下幾種比較情況。

(1)當程序運行結果和預設的標準答案一致,則程序會返回Accepted,說明答題成功;

(2)將程序運行結果中無用的空格符、換行符等去掉后與預設的標準答案是一致的,則程序會返回Presentation Error,說明運行結果格式有誤;

(3)當程序運行結果和預設的標準答案不一致,則返回Wrong Answer,說明答題失敗[3];

(4)如果程序運行結果僅有一部分和預設的標準答案一致,會返回Output Limit Exceeded。

2.3 時間和內存測量

檢測程序的執行時間和內存,可以通過github上的一個開源項目lorun去實現。該開源項目是利用C語言編寫的一個Python擴展模塊,使程序能夠在一個類似沙盒的環境下執行,并能夠精準地獲取程序的執行時間和內存,還能對程序進行限制,防止外部調用。

2.4 安全處理

Online Judge系統還要做好安全處理,防止用戶惡意攻擊破壞系統。解決該問題,可以從以下方面進行處理。

(1)通過防火墻限制網絡訪問,或者禁止系統連接外網;

(2)對代碼進行預先檢查;

(3)將判題機和服務器進行分離;

(4)控制文件的執行權限;

(5)設置沙盒環境,將程序執行環境和外部進行隔離。可以從操作系統中設置,如設置Linux環境chroot命令,也可以使用Python的方法實現。

3 結語

設計一款完善的判題機需要用到的技術除了整套的web技術棧外,還需要操作系統、沙箱等知識,屬實不容易。該判題機的設計借助了網上多位大神的邏輯、經驗、代碼,目前已能夠正常使用,但還需進行優化改進。

猜你喜歡
程序數據庫系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
“程序猿”的生活什么樣
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
數據庫
財經(2017年2期)2017-03-10 14:35:35
數據庫
財經(2016年15期)2016-06-03 07:38:02
數據庫
財經(2016年3期)2016-03-07 07:44:46
主站蜘蛛池模板: 2020最新国产精品视频| 国产麻豆永久视频| 欧美成一级| 久久国产av麻豆| 国产毛片一区| 夜夜爽免费视频| 亚洲中文字幕国产av| 久久久久免费精品国产| 国内精品视频区在线2021| jizz亚洲高清在线观看| 国产区91| 久久99国产乱子伦精品免| 老司国产精品视频91| 激情五月婷婷综合网| 波多野结衣的av一区二区三区| 欧美国产精品不卡在线观看 | 国产日韩欧美在线视频免费观看| 国产成人乱无码视频| 亚洲二三区| 欧美第九页| 91国内在线观看| 日韩毛片免费| 成人福利一区二区视频在线| 看国产毛片| 漂亮人妻被中出中文字幕久久| 国产精品成人免费综合| 91麻豆精品国产高清在线| 制服无码网站| 婷婷色婷婷| 国产激爽爽爽大片在线观看| 福利视频一区| 国产毛片网站| 国产精品私拍在线爆乳| 国产理论最新国产精品视频| 国产成人91精品| 欧美翘臀一区二区三区| 国产 在线视频无码| 亚洲无码37.| 天天躁夜夜躁狠狠躁图片| 亚洲A∨无码精品午夜在线观看| 国产毛片久久国产| 青草国产在线视频| 日本a级免费| 欧美一区二区三区不卡免费| 久久久无码人妻精品无码| 婷婷综合亚洲| 国产成人喷潮在线观看| 国产视频 第一页| 亚洲精品另类| 久久99热这里只有精品免费看| 日韩精品久久无码中文字幕色欲| 999精品免费视频| 视频在线观看一区二区| 亚洲精品成人片在线观看| 国产波多野结衣中文在线播放| 国产99免费视频| 欧美一级黄色影院| 久久精品无码国产一区二区三区| AV片亚洲国产男人的天堂| 啦啦啦网站在线观看a毛片 | 亚洲精品第1页| 国产精品9| 亚洲欧美另类中文字幕| 亚洲欧洲自拍拍偷午夜色| 久热中文字幕在线| 亚洲不卡无码av中文字幕| 国产自视频| 无码中文字幕精品推荐| 免费可以看的无遮挡av无码| 欧美黑人欧美精品刺激| 尤物亚洲最大AV无码网站| 日韩免费毛片| 亚洲欧美一区在线| 亚洲国产91人成在线| 国产一国产一有一级毛片视频| 2018日日摸夜夜添狠狠躁| 亚洲中文字幕国产av| 99精品国产高清一区二区| 国产在线观看成人91| 黄网站欧美内射| 亚亚洲乱码一二三四区| 亚洲欧美在线看片AI|