亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        在線評(píng)測系統(tǒng)中判題機(jī)的設(shè)計(jì)與實(shí)現(xiàn)

        2022-06-22 12:47:00呂英華
        無線互聯(lián)科技 2022年6期
        關(guān)鍵詞:程序運(yùn)行標(biāo)準(zhǔn)答案評(píng)判

        呂英華

        (北海職業(yè)學(xué)院,廣西 北海 536000)

        0 引言

        Online Judge系統(tǒng)是一個(gè)在線判題系統(tǒng),能夠?qū)τ脩籼峤坏亩喾N程序源代碼進(jìn)行編譯執(zhí)行,并根據(jù)預(yù)先存儲(chǔ)的結(jié)果進(jìn)行校驗(yàn)后得到源程序的正確性。Online Judge系統(tǒng)最初使用于ACM比賽中[1],隨著國內(nèi)計(jì)算機(jī)行業(yè)的不斷發(fā)展,許多高校開發(fā)了屬于自己的Online Judge系統(tǒng),同時(shí)計(jì)算機(jī)行業(yè)也開發(fā)了Online Judge系統(tǒng)服務(wù)于個(gè)人或他人?,F(xiàn)在Online Judge系統(tǒng)不僅在比賽中使用,還在教學(xué)、考試、程序上機(jī)實(shí)踐中使用,極大提高了教學(xué)工作效率和方便了各類編程人員。

        1 設(shè)計(jì)思路

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

        圖1 系統(tǒng)邏輯

        2 判題機(jī)實(shí)現(xiàn)

        判題機(jī)是整個(gè)Online Judge系統(tǒng)的核心內(nèi)容,主要功能是對用戶提交的代碼進(jìn)行編譯、執(zhí)行、評(píng)判等,寫好的判題機(jī)可以放入Windows環(huán)境或Linux環(huán)境中。該Online Judge系統(tǒng)采用Python實(shí)現(xiàn),支持多種程序(如C、C++、java)源代碼編譯執(zhí)行。

        2.1 編譯代碼

        Online Judge系統(tǒng)最重要的功能是支持多種編程語言提交代碼,由于不同的編程語言需要到不同的編譯器,則可以選擇Python提供的subprocess模塊去調(diào)用外部編譯器,該模塊能夠?qū)Σ煌幊陶Z言進(jìn)行擴(kuò)展,只需配置好編譯參數(shù)即可。

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

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

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

        2.2 評(píng)判流程

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

        圖2 評(píng)判流程

        當(dāng)以上所有流程跑完,都未出現(xiàn)錯(cuò)誤信息,程序繼續(xù)執(zhí)行,下一步驟,則需要將結(jié)果和標(biāo)準(zhǔn)答案進(jìn)行比較,得出答題是否正確,有以下幾種比較情況。

        (1)當(dāng)程序運(yùn)行結(jié)果和預(yù)設(shè)的標(biāo)準(zhǔn)答案一致,則程序會(huì)返回Accepted,說明答題成功;

        (2)將程序運(yùn)行結(jié)果中無用的空格符、換行符等去掉后與預(yù)設(shè)的標(biāo)準(zhǔn)答案是一致的,則程序會(huì)返回Presentation Error,說明運(yùn)行結(jié)果格式有誤;

        (3)當(dāng)程序運(yùn)行結(jié)果和預(yù)設(shè)的標(biāo)準(zhǔn)答案不一致,則返回Wrong Answer,說明答題失?。?];

        (4)如果程序運(yùn)行結(jié)果僅有一部分和預(yù)設(shè)的標(biāo)準(zhǔn)答案一致,會(huì)返回Output Limit Exceeded。

        2.3 時(shí)間和內(nèi)存測量

        檢測程序的執(zhí)行時(shí)間和內(nèi)存,可以通過github上的一個(gè)開源項(xiàng)目lorun去實(shí)現(xiàn)。該開源項(xiàng)目是利用C語言編寫的一個(gè)Python擴(kuò)展模塊,使程序能夠在一個(gè)類似沙盒的環(huán)境下執(zhí)行,并能夠精準(zhǔn)地獲取程序的執(zhí)行時(shí)間和內(nèi)存,還能對程序進(jìn)行限制,防止外部調(diào)用。

        2.4 安全處理

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

        (1)通過防火墻限制網(wǎng)絡(luò)訪問,或者禁止系統(tǒng)連接外網(wǎng);

        (2)對代碼進(jìn)行預(yù)先檢查;

        (3)將判題機(jī)和服務(wù)器進(jìn)行分離;

        (4)控制文件的執(zhí)行權(quán)限;

        (5)設(shè)置沙盒環(huán)境,將程序執(zhí)行環(huán)境和外部進(jìn)行隔離。可以從操作系統(tǒng)中設(shè)置,如設(shè)置Linux環(huán)境chroot命令,也可以使用Python的方法實(shí)現(xiàn)。

        3 結(jié)語

        設(shè)計(jì)一款完善的判題機(jī)需要用到的技術(shù)除了整套的web技術(shù)棧外,還需要操作系統(tǒng)、沙箱等知識(shí),屬實(shí)不容易。該判題機(jī)的設(shè)計(jì)借助了網(wǎng)上多位大神的邏輯、經(jīng)驗(yàn)、代碼,目前已能夠正常使用,但還需進(jìn)行優(yōu)化改進(jìn)。

        猜你喜歡
        程序運(yùn)行標(biāo)準(zhǔn)答案評(píng)判
        吃飯喝水傷身體?吃飯喝湯養(yǎng)生?快看看協(xié)和醫(yī)院的標(biāo)準(zhǔn)答案
        祝您健康(2024年4期)2024-04-08 16:18:08
        交流與評(píng)判
        行政公益訴訟訴前程序運(yùn)行檢視
        法大研究生(2020年2期)2020-01-19 01:43:04
        李耀進(jìn):沒有標(biāo)準(zhǔn)答案,唯有用心用情
        中國民政(2019年12期)2020-01-02 09:12:04
        基于學(xué)習(xí)的魯棒自適應(yīng)評(píng)判控制研究進(jìn)展
        丟失了標(biāo)準(zhǔn)答案
        標(biāo)準(zhǔn)答案的反思
        詩歌評(píng)判與詩歌創(chuàng)作
        論刑事錯(cuò)案的成因
        《刑事訴訟法》修改背景下刑事和解制度淺析
        午夜亚洲精品视频网站| 精品国产v无码大片在线观看| 亚洲AV无码精品呻吟| 在线亚洲精品国产成人二区| 中文字幕亚洲精品在线免费| 性生交片免费无码看人| 亚洲av色先锋资源电影网站| 久久久久久久久久91精品日韩午夜福利| 白白色视频这里只有精品| 精品国偷自产在线视频九色| 伴郎粗大的内捧猛烈进出视频观看| av草草久久久久久久久久久| 亚洲24小时免费视频| 含紧一点h边做边走动免费视频 | 九九精品国产亚洲av日韩| 亚洲av网一区二区三区| 亚洲成在人线av| 91久久精品一二三区蜜桃| 久久丝袜熟女av一区二区| 国产99久久久国产精品免费看| 国内久久婷婷激情五月天| 国产精品污一区二区三区在线观看 | 人妻在线中文字幕视频| 天堂网av一区二区三区在线观看 | 亚洲熟妇无码久久精品| 久久精品国产亚洲一区二区| 日韩不卡av高清中文字幕| 男女上床免费视频网站| 中文天堂国产最新| 日本VA欧美VA精品发布| 亚洲在线一区二区三区| 真人做爰试看120秒| 中文字幕人妻丝袜乱一区三区| 日韩免费高清视频网站| 免费在线视频亚洲色图| 狠狠色婷婷久久综合频道日韩| 亚洲国产精品国自产电影| 色小姐在线视频中文字幕| 欧洲多毛裸体xxxxx| 国产成人无码aⅴ片在线观看| 视频福利一区二区三区|