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
主站蜘蛛池模板: 欧美翘臀一区二区三区| 伦伦影院精品一区| 久久99热66这里只有精品一| 亚洲第一视频网| 亚洲第一页在线观看| 亚洲,国产,日韩,综合一区| 久久国产拍爱| 久久亚洲精少妇毛片午夜无码| 亚洲欧美日韩另类在线一| 无码粉嫩虎白一线天在线观看| 日韩av无码DVD| 亚洲精品视频免费| 伊人久久大香线蕉综合影视| 伊人狠狠丁香婷婷综合色| 制服丝袜一区| 国产欧美日韩专区发布| 日韩欧美网址| 呦女亚洲一区精品| 欧美亚洲国产日韩电影在线| 久久永久精品免费视频| 成人一级免费视频| 久久这里只有精品国产99| 免费va国产在线观看| 国产第三区| 国产大片黄在线观看| 国产欧美精品一区二区| 欧美精品三级在线| 色综合国产| 亚洲中文字幕日产无码2021| 久久大香香蕉国产免费网站| 沈阳少妇高潮在线| 超级碰免费视频91| 2021无码专区人妻系列日韩| 91久久精品日日躁夜夜躁欧美| 亚洲一区无码在线| 国产主播在线一区| 精品久久久久成人码免费动漫| 99re精彩视频| 亚洲婷婷六月| 国产91线观看| 久久国语对白| 岛国精品一区免费视频在线观看 | 一本视频精品中文字幕| 欧美激情视频二区三区| 国产主播一区二区三区| 亚洲欧美日韩另类在线一| 九九香蕉视频| 欧美笫一页| 精品夜恋影院亚洲欧洲| 无码一区中文字幕| 国内精品免费| 日本欧美午夜| www.91在线播放| 好久久免费视频高清| 国产午夜精品鲁丝片| 日韩第一页在线| 任我操在线视频| 亚洲天堂网视频| 欧美国产日韩另类| 久久精品国产国语对白| 国产欧美在线观看视频| 在线国产欧美| 国产女人18毛片水真多1| 欧美全免费aaaaaa特黄在线| 亚洲综合第一页| 久久毛片基地| 亚洲国产精品美女| 国产三级毛片| 久久精品人人做人人爽电影蜜月| 久久香蕉国产线看精品| 国产成人高清精品免费5388| 色综合中文| 97se亚洲| 内射人妻无套中出无码| 制服丝袜在线视频香蕉| 女人一级毛片| 日本a级免费| 精品国产成人av免费| 亚洲国产精品无码AV| 97青草最新免费精品视频| 亚洲精品无码专区在线观看| 2020最新国产精品视频|