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
主站蜘蛛池模板: 国产人成在线视频| 色综合手机在线| 无码人妻热线精品视频| 国产精品尤物铁牛tv| 亚洲日韩久久综合中文字幕| 中文字幕亚洲专区第19页| 玖玖精品在线| 午夜免费视频网站| 一级福利视频| 日本草草视频在线观看| 国产乱人伦偷精品视频AAA| 国产成人精品男人的天堂下载 | 国产欧美日韩在线一区| 中文字幕资源站| 国产成熟女人性满足视频| 有专无码视频| 欧美成人手机在线观看网址| 亚洲日韩AV无码精品| 尤物精品国产福利网站| 国产精品一区二区国产主播| av在线人妻熟妇| 国产成人91精品| av性天堂网| 高清不卡毛片| 国禁国产you女视频网站| 日韩国产另类| 一本大道香蕉高清久久| 麻豆精品在线| 国产凹凸一区在线观看视频| 看看一级毛片| 啪啪永久免费av| 亚洲人成电影在线播放| 国产精品夜夜嗨视频免费视频| 欧美成人免费| 亚洲人成影视在线观看| 中文无码影院| 国产福利不卡视频| 国产欧美自拍视频| 日韩亚洲高清一区二区| 亚洲αv毛片| 最新精品国偷自产在线| 国产欧美中文字幕| 色婷婷国产精品视频| 97成人在线视频| 精品无码日韩国产不卡av| 国产一二视频| 99精品在线视频观看| 久久中文字幕不卡一二区| 国产精品99r8在线观看| 日韩在线2020专区| 另类综合视频| 亚洲欧美日韩天堂| 视频在线观看一区二区| 国产精品va免费视频| 亚洲无码在线午夜电影| 色窝窝免费一区二区三区 | 精品视频在线观看你懂的一区| 亚洲一级毛片在线观播放| 毛片手机在线看| 精品日韩亚洲欧美高清a| 亚洲有码在线播放| 国产传媒一区二区三区四区五区| 人妻无码中文字幕第一区| 在线亚洲精品福利网址导航| 国产成人av一区二区三区| 国产菊爆视频在线观看| 色综合中文字幕| aaa国产一级毛片| 国产精品永久不卡免费视频| 少妇露出福利视频| 免费人成又黄又爽的视频网站| 亚洲视频黄| www亚洲天堂| 久久综合伊人 六十路| 77777亚洲午夜久久多人| 亚洲一区二区约美女探花| 色婷婷在线影院| 亚洲第一天堂无码专区| 一级毛片免费的| 国模粉嫩小泬视频在线观看| 久久亚洲美女精品国产精品| a网站在线观看|