孔欽 葉長青 吳淳陽 姚斯源 王家輝
摘 要:Online Judge在線評(píng)測(cè)系統(tǒng)作為提高學(xué)生基礎(chǔ)編程能力的重要途徑之一,在當(dāng)今十分強(qiáng)調(diào)編程能力的社會(huì)背景下顯得尤為重要。由于大一新生普遍存在編程能力不足的問題,在分析目前主流OJ平臺(tái)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了針對(duì)學(xué)校情況定制的OJ在線評(píng)測(cè)系統(tǒng),為程序設(shè)計(jì)賽事培訓(xùn)與課程實(shí)踐提供練習(xí)平臺(tái)。在詳細(xì)描述OJ平臺(tái)主要功能、技術(shù)架構(gòu)及具體實(shí)現(xiàn)方案的同時(shí),也重點(diǎn)強(qiáng)調(diào)了對(duì)于實(shí)現(xiàn)系統(tǒng)安全性和并發(fā)性方面的優(yōu)化與創(chuàng)新。
關(guān)鍵詞:在線測(cè)評(píng);程序設(shè)計(jì);教學(xué)跟蹤
DOI: 10. 11907/rjdk.192263
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1672-7800(2020)001-0172-04
0 引言
在線評(píng)測(cè)(Online Judge,簡稱OJ)平臺(tái)是一個(gè)基于WWW的服務(wù)器端軟件系統(tǒng),主要功能包括:用戶注冊(cè)與管理、題庫管理、在線提交與實(shí)時(shí)評(píng)測(cè)、網(wǎng)上考試、題目討論、郵件服務(wù)等[1]。早期的OJ平臺(tái)以競賽為目標(biāo),能夠?qū)τ脩籼峤坏某绦蜻M(jìn)行“黑盒判定”并自動(dòng)生成判題結(jié)果。傳統(tǒng)Online Judge系統(tǒng)主要針對(duì)解題訓(xùn)練,并不針對(duì)課程教學(xué)輔助場(chǎng)景[2]。C語言是大學(xué)一年級(jí)學(xué)生學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)時(shí)廣泛使用的一種語言,通過學(xué)習(xí)C語言課程,學(xué)生不僅可以掌握該高級(jí)程序設(shè)計(jì)語言的語法與語義,還可以掌握結(jié)構(gòu)化程序設(shè)計(jì)“自頂向下、逐步求精”的思想及方法、常用算法及實(shí)現(xiàn)技術(shù),以及分析與解決實(shí)際問題的語言應(yīng)用能力[3]。將Online Judge加入到日常教學(xué)中輔助教師授課,將會(huì)幫助學(xué)生更加容易地掌握C語言。因此,本校自主開發(fā)一個(gè)OJ平臺(tái),不僅用于程序設(shè)計(jì)賽事培訓(xùn),還可將其用于平時(shí)的實(shí)驗(yàn)教學(xué)中,通過精心設(shè)置的多組測(cè)試用例反映出程序問題所在,方便教師及時(shí)找出漏洞(BUG)并作出解答,也便于學(xué)生課后復(fù)習(xí)與鞏固。在教學(xué)領(lǐng)域,OnlineJudge可以彌補(bǔ)人工評(píng)判的缺點(diǎn),有效減輕教師負(fù)擔(dān),使評(píng)測(cè)更加公平、合理,學(xué)生在課內(nèi)未完成的實(shí)驗(yàn)還可以利用系統(tǒng)在課外時(shí)間完成,從而使整個(gè)實(shí)驗(yàn)過程得到延伸[4]。同時(shí)也能增強(qiáng)師生間的互動(dòng)交流,提高教學(xué)質(zhì)量,形成新的程序設(shè)計(jì)實(shí)驗(yàn)課教學(xué)模式。
Online Judge也為學(xué)生創(chuàng)造了一個(gè)模擬競賽環(huán)境的平臺(tái)。眾所周知,程序在線評(píng)測(cè)是ACM國際大學(xué)生程序設(shè)計(jì)競賽(ACM /ICPC)采用的訓(xùn)練與比賽評(píng)測(cè)方式[5],ACM在線評(píng)測(cè)系統(tǒng)是該項(xiàng)比賽的評(píng)判事務(wù)處理平臺(tái),也是一個(gè)基于B/S結(jié)構(gòu)的多用戶在線系統(tǒng),允許用戶在線提交自己的解題代碼,系統(tǒng)自動(dòng)編譯運(yùn)行給出裁判結(jié)果,并根據(jù)用戶解題數(shù)及用時(shí)進(jìn)行排名[6]。但剛接觸編程的學(xué)生能力不是很強(qiáng),如果一開始就讓他們到各大學(xué)公網(wǎng)上的在線裁判系統(tǒng)上進(jìn)行練習(xí),無疑會(huì)打擊其對(duì)編程的興趣及積極性,因此必須有一個(gè)循序漸進(jìn)、由淺入深的練習(xí)系統(tǒng)[7]。
1 研究背景
1.1 主流OJ介紹
國內(nèi)著名題庫有北京大學(xué)題庫、浙江大學(xué)題庫、電子科技大學(xué)題庫、杭州電子科技大學(xué)題庫等,國外題庫包括烏拉爾大學(xué)題庫、瓦拉杜利德大學(xué)題庫等[8],以下舉例分析一些現(xiàn)有的知名Online Judge。
(1)POJ。POJ是北京大學(xué)ACM/ICPC在線評(píng)測(cè)系統(tǒng)( Peking University Judge Online for AC M/ICPC)的簡稱,也是許多ACMer最開始使用的OJ平臺(tái)。POJ以題目優(yōu)質(zhì)著稱,幾乎涵蓋了編程學(xué)習(xí)的各類經(jīng)典算法。北大為該系統(tǒng)的正常運(yùn)行提供了硬件與網(wǎng)絡(luò)資源保障,所以其可以全天不間斷地為全球程序愛好者提供服務(wù)[9]。
(2)ZOJ。ZOJ是浙江大學(xué)在線評(píng)測(cè)系統(tǒng)(Zhejiang Uni-versity Online Judge)的簡稱,是國內(nèi)最早也是最知名的OJ,有很多高手在上面練習(xí)。特點(diǎn)是數(shù)據(jù)比較刁鉆,經(jīng)常會(huì)有意想不到的邊界數(shù)據(jù),十分考驗(yàn)答題人思維的全面性[10]。ZOJ相較于POJ,在首頁上有一個(gè)News項(xiàng)目,可以看到ZOJ的最新動(dòng)向。ZOJ非常簡潔、直觀,同時(shí)其前端界面也比POJ更加整齊、美觀。
(3)hihoCoder。相較于以上兩個(gè)OJ平臺(tái),hihoCoder能提供更好的用戶體驗(yàn)。其有著最佳界面,并支持多種登錄方式。其宣傳語是“通過高水平的程序設(shè)計(jì)比賽提升編程水平,得到名企Offer”,這句話體現(xiàn)了OJ平臺(tái)的核心思想。hihoCoder主頁正下方即展示了3個(gè)正在進(jìn)行或?qū)⒁M(jìn)行的程序設(shè)計(jì)比賽,這些比賽都是由名校或名企舉辦的。平臺(tái)所有題目都以中文形式呈現(xiàn),并且給出算法使用提示,還注明了難度,讓用戶能夠更加靈活地使用題庫。它還有欄目“hiho -下”,可推送“每日一題”,讓編程成為hihoCoder用戶的生活習(xí)慣。hihoCoder擁有自己的討論社區(qū),讓用戶能在社區(qū)里相互交流、探討。因此,該平臺(tái)功能十分強(qiáng)大,而且為用戶考慮得非常全面。
1.2 0J平臺(tái)功能分析
本校的Online Judge平臺(tái)設(shè)計(jì)目的主要有兩點(diǎn):一是為學(xué)校提供一個(gè)獨(dú)立的擁有龐大題庫的在線測(cè)試平臺(tái)以輔助教學(xué)實(shí)踐與賽事培訓(xùn),以學(xué)生為中心,幫助學(xué)生樹立“算法”思想[11]。用戶瀏覽網(wǎng)頁選擇題目,通過網(wǎng)頁提交代碼,由服務(wù)器端調(diào)用編譯程序?qū)τ脩籼峤坏某绦蜻M(jìn)行編譯,然后由評(píng)測(cè)程序進(jìn)行評(píng)判,并返回相應(yīng)結(jié)果到網(wǎng)頁上供用戶查看[12];二是因?yàn)閭鹘y(tǒng)采用實(shí)驗(yàn)室FTP客戶端提交作業(yè)的方式,效率十分低下,且不利于學(xué)生利用課外時(shí)間練習(xí),以及學(xué)生與教師之間的交流,影響了教學(xué)效果,因此通過搭建一個(gè)在線測(cè)試平臺(tái)以實(shí)現(xiàn)教師對(duì)學(xué)生練習(xí)情況的跟蹤監(jiān)督。
通過實(shí)現(xiàn)以上兩個(gè)核心功能可達(dá)到以下目的:①計(jì)算機(jī)類競賽訓(xùn)練。為藍(lán)橋杯、ACM等程序設(shè)計(jì)競賽提供一個(gè)訓(xùn)練平臺(tái),通過提供一個(gè)完善且龐大的題庫,讓學(xué)生可通過該平臺(tái)不斷鍛煉自己的答題水平,提升競賽能力,為將來在競賽中取得優(yōu)異成績打下良好基礎(chǔ);②教學(xué)實(shí)驗(yàn)測(cè)試。為教學(xué)實(shí)驗(yàn)課提供一個(gè)功能齊全的實(shí)踐平臺(tái),由教師提供課程需要的實(shí)驗(yàn)題目,系統(tǒng)即可快速制作一個(gè)實(shí)驗(yàn)題庫。教師能夠根據(jù)自己所教科目創(chuàng)建每次實(shí)驗(yàn)課內(nèi)容,并按照不同難度設(shè)置每章節(jié)題目。該方式解決了目前學(xué)生在實(shí)驗(yàn)課上只能通過FTP下載作業(yè)要求、上傳程序,教師也無法直接查看結(jié)果等諸多問題。
從程序設(shè)計(jì)跟蹤的角度,教師可通過系統(tǒng)查看最近幾日每日總體數(shù)據(jù),包括學(xué)生總共提交次數(shù)、競賽題庫完成度、整個(gè)班或年級(jí)實(shí)驗(yàn)完成情況等,避免了課程設(shè)計(jì)中代碼量較大,導(dǎo)致教師檢查代碼工作量大的問題[13]。學(xué)生用戶可通過個(gè)人中心查看自己答題信息與打卡進(jìn)展,包括每個(gè)實(shí)驗(yàn)、章節(jié)及每道題完成情況、通過數(shù)、正確率等重要指標(biāo)信息。
從教學(xué)管理的角度,本系統(tǒng)可便于教師布置作業(yè)、管理實(shí)驗(yàn)進(jìn)度、控制教學(xué)進(jìn)度、監(jiān)督學(xué)生完成情況等。教師布置作業(yè)時(shí)可以設(shè)置截止時(shí)間,學(xué)生需要在截止時(shí)間之前完成,即使提交了作業(yè),學(xué)生依然可以繼續(xù)復(fù)習(xí)作業(yè)中的題目并鞏固相關(guān)知識(shí)點(diǎn)。在講授課程時(shí)可以與本系統(tǒng)結(jié)合進(jìn)行授課,例如教授C、C++、JAVA和C#等課程的教師可利用系統(tǒng)進(jìn)行課堂在線程序的編寫,并利用系統(tǒng)的在線評(píng)分功能,及時(shí)展示出編程過程中可能存在的編譯錯(cuò)誤及程序運(yùn)行中的常見問題,為學(xué)生深入理解程序設(shè)計(jì)思想提供了一個(gè)更加直觀的平臺(tái)[14]。我校OJ平臺(tái)功能模塊如圖1所示。
2 0J平臺(tái)實(shí)現(xiàn)方案
2.1 網(wǎng)站設(shè)計(jì)
Online Judge是一種基于B/S結(jié)構(gòu)的多用戶在線評(píng)測(cè)系統(tǒng),允許用戶在線提交解題代碼,系統(tǒng)自動(dòng)編譯運(yùn)行并給出評(píng)測(cè)結(jié)果[15]。網(wǎng)站采用Vue+Spring Boot+MySQL框架進(jìn)行系統(tǒng)開發(fā)。Vue和Spring Boot是當(dāng)前主流的前后端框架,其中Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架,采用自底向上增量開發(fā)的設(shè)計(jì)方式,是一種更加靈活的解決方案,構(gòu)架更加簡單,適合開發(fā)人員快速掌握其全部特性并投入使用,還便于與第三方庫或既有項(xiàng)目整合[16],因此將其作為一個(gè)前端項(xiàng)目,與后臺(tái)邏輯分開部署,只需請(qǐng)求相應(yīng)接口即可實(shí)現(xiàn)對(duì)應(yīng)功能;使用undertow代替tomcat作為Web服務(wù)器,undertow與tomcat相比,并發(fā)狀態(tài)下差別不是很大,然而undertow負(fù)載能力明顯高于tomcat,擁有更高的吞吐量,同時(shí)結(jié)合ngmx技術(shù)實(shí)現(xiàn)反向代理與負(fù)載均衡;采用Linux作為服務(wù)器,提升系統(tǒng)的可操作性和可維護(hù)性。
2.2 判題核心
判題主程序是判題系統(tǒng)的核心子程序,其主要功能是負(fù)責(zé)接受與分派判題請(qǐng)求[17],實(shí)現(xiàn)機(jī)制是使用Linux系統(tǒng)自帶的gcc和g++進(jìn)行編譯運(yùn)行,通過C語言執(zhí)行g(shù)cc、g++編譯命令,并將輸入的可執(zhí)行文件放到指定目錄下。C語言的MySQL庫函數(shù)可以直接對(duì)數(shù)據(jù)庫進(jìn)行修改,實(shí)時(shí)改變數(shù)據(jù)庫狀態(tài)。
2.2.1 編譯部分
對(duì)于C程序,完整的調(diào)用類似system(”/usr/bin/geclOOO.e -0 1000 -ansi -Wall -Wextra Im 2>/tmp/oj_ gcc_err.txt”),使用的gcc選項(xiàng)如表1所示[18]。
2.2.2 執(zhí)行部分
為了解決學(xué)生在最初學(xué)習(xí)時(shí)會(huì)導(dǎo)致代碼進(jìn)入死循環(huán),以及有人惡意上傳危害服務(wù)器系統(tǒng)的代碼等問題,保證服務(wù)器的安全性,使判題系統(tǒng)能夠穩(wěn)定運(yùn)行,本文采用當(dāng)今比較流行的Docker技術(shù)。
Docker是一個(gè)開源的應(yīng)用容器引擎,讓開發(fā)者可以打包其應(yīng)用及依賴包到一個(gè)可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。
在環(huán)境搭建時(shí),通過Dockerfile創(chuàng)建出適用于判題的Docker鏡像,可以自由地在Dockerfile中寫入安裝命令,方便以后針對(duì)其它語言進(jìn)行判題。首先,在服務(wù)器上安裝gcc、g++、Java運(yùn)行環(huán)境,在程序運(yùn)行前先啟動(dòng)一個(gè)容器,并將實(shí)際文件路徑映射到docker容器的虛擬路徑中,運(yùn)行預(yù)先執(zhí)行的命令,緊接著在“沙箱”中執(zhí)行程序,最后將代碼輸出結(jié)果與測(cè)試結(jié)果相比較,即能獲得最后結(jié)果。
docker容器用完即銷毀,因而能完美地規(guī)避掉上面所提到的風(fēng)險(xiǎn)。倘若出現(xiàn)死循環(huán)的情況,則容器在運(yùn)行一定時(shí)間后會(huì)因檢測(cè)到異常而自動(dòng)關(guān)閉。對(duì)系統(tǒng)具有破壞性的代碼只會(huì)導(dǎo)致容器異常,而不會(huì)使服務(wù)器無法正常工作。
Docker命令:啟動(dòng)一個(gè)名為OJ的容器將本機(jī)/root/Test文件夾下的內(nèi)容映射到容器中的/Test下,執(zhí)行一c之后的命令:
docker
run --rm --cap-add=SYS_PTRACE -u
oj -v/root/Test: /Test oj /bin/sh -e“cd /Test./a.out$1$2 $3 $4 $5 $6”
在進(jìn)行判題時(shí),首先通過pid()創(chuàng)建一個(gè)子線程,判題前需要對(duì)線程進(jìn)行資源限制,以防止該線程出現(xiàn)。具體實(shí)現(xiàn)步驟如下:
1.while(1)的死循環(huán)
2.不停地malloc分配內(nèi)存,占用地址空間
3.不停地創(chuàng)建子線程
通過int setrlimit( int resource,const struct rlimit *rlim);函數(shù)限定時(shí)間和空間
struct rlimit{
rlim_t rlim—cur; /*軟限制,當(dāng)前限制*/
rlim_t rlim—max; /*硬限制,最大限制*/
};
通過判題,會(huì)根據(jù)判題結(jié)果返回不同信息,若通過則返回“通過”,若不通過,則會(huì)返回錯(cuò)誤信息如“答案錯(cuò)誤”、“編譯錯(cuò)誤”、“超時(shí)”等。其中若存在編譯錯(cuò)誤,返回信息中還會(huì)加入控制臺(tái)輸出的具體錯(cuò)誤信息。判題流程如圖2所示。
兩個(gè)函數(shù)的resource參數(shù)取下列值之一:
RLIMIT AS
進(jìn)程可用存儲(chǔ)區(qū)的最大總長度(字節(jié))
RLIMIT CORE
core文件最大字節(jié)數(shù)
RLIMIT CPU
CPU時(shí)間最大量值(s)
RLIMIT DATA
數(shù)據(jù)段最大字節(jié)長度
RLIMIT FSIZE
可以創(chuàng)建的文件最大字節(jié)長度
RLIMIT LOCKS
一個(gè)進(jìn)程可持有的文件鎖最大數(shù)
RLIMIT MEMLOCK -個(gè)進(jìn)程使用mlock(2)能夠鎖定在存
儲(chǔ)器中的最大字節(jié)長度
RLIMIT NOFILE 每個(gè)進(jìn)程能打開的最大文件數(shù)
RLIMIT NPROC
每個(gè)實(shí)際用戶ID可擁有的最大子進(jìn)
程數(shù)
RLIMIT RSS
最大駐內(nèi)存集的字節(jié)長度(resident set
size in bytes,RSS)
RLIMITSBSIZE
用戶在任一給定時(shí)刻可占用的套接字
緩沖區(qū)最大長度(字節(jié))
RLIMIT_STACK
棧的最大字節(jié)長度
RLIMIT_VMEM
RLIMIT—AS的同義詞(Linux 2.4.22不
支持)
3 主要模塊介紹
3.1 學(xué)生實(shí)驗(yàn)?zāi)K
學(xué)生在課堂練習(xí)模塊(見圖3)中選擇課程后,可看到課程每個(gè)實(shí)驗(yàn)完成情況和總體完成率。每個(gè)實(shí)驗(yàn)作為一組,展示每個(gè)實(shí)驗(yàn)截止日期以及該組中題目名稱,點(diǎn)擊題目即可進(jìn)入答題界面。如果一個(gè)實(shí)驗(yàn)所有題目都已完成,在頂部顯示完成標(biāo)志,沒有完成則顯示未完成。
3.2 答題模塊
點(diǎn)擊題目名稱進(jìn)入答題模塊,界面顯示題目難度及題目信息。提交答案之后,系統(tǒng)返回程序運(yùn)行需要的時(shí)間與內(nèi)存空間,以及程序編譯、運(yùn)行結(jié)果(見圖4),以便學(xué)生針對(duì)錯(cuò)誤進(jìn)行修改。
4 網(wǎng)站優(yōu)化
為了能夠在低成本條件下提供更加強(qiáng)大的性能,除之前提到的更換服務(wù)器外,還可以對(duì)Java啟動(dòng)參數(shù)進(jìn)行調(diào)整,更改JVM內(nèi)存空間與堆的大小,使程序能夠承受更大壓力。因?yàn)閐ocker內(nèi)存消耗略大,可以將主要判題業(yè)務(wù)從后臺(tái)項(xiàng)目中剝離出來,部署在另一臺(tái)服務(wù)器上,形成分布式架構(gòu)。
Spring Cloud是基于Spring Boot推出的一系列框架、組件的有序集合,簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施開發(fā)[19]。通過Eureka注冊(cè)中心,將主要業(yè)務(wù)與其它業(yè)務(wù)一起注冊(cè)。使用Spring Cloud可以直接調(diào)用另一臺(tái)服務(wù)器的服務(wù),相比之前都部署在一臺(tái)服務(wù)器上,可以大大減小服務(wù)器壓力。
5 結(jié)語
Online Judge系統(tǒng)作為計(jì)算機(jī)專業(yè)學(xué)生在程序設(shè)計(jì)初期的訓(xùn)練平臺(tái),有著十分重要的意義。本文在調(diào)研主流OJ平臺(tái)的基礎(chǔ)上,詳細(xì)描述了本校OJ平臺(tái)的功能模塊、技術(shù)架構(gòu)及實(shí)現(xiàn)方案。在具體實(shí)現(xiàn)上,采用Vue+Spring Boot+MySQL流行框架,并借助undertow Web服務(wù)器的優(yōu)越性與docker容器運(yùn)行的安全性,有效提升了系統(tǒng)性能。未來可在其基礎(chǔ)上進(jìn)一步添加競賽比拼、積分激勵(lì)等新功能,再與課程教學(xué)緊密結(jié)合,注重提升學(xué)生的實(shí)際動(dòng)手能力,激發(fā)學(xué)生學(xué)習(xí)的主動(dòng)性與創(chuàng)新性,鍛煉其編程能力,提高學(xué)生學(xué)習(xí)效率[20]。同時(shí)還可在賽事培訓(xùn)、課程跟蹤、教學(xué)反饋、教學(xué)分析等若干教學(xué)管理環(huán)節(jié)中發(fā)揮更大作用,提高教學(xué)質(zhì)量,形成程序設(shè)計(jì)學(xué)習(xí)閉環(huán),以期為社會(huì)培養(yǎng)更多高質(zhì)量的計(jì)算機(jī)專業(yè)應(yīng)用型人才。
參考文獻(xiàn):
[1]張麗萍,東升.程序設(shè)計(jì)類課程考核評(píng)價(jià)方法的改革與實(shí)踐[J].計(jì)算機(jī)教育,2010,110( 2):16-20.
[2] 羅英偉,汪小林,張正熠.編程網(wǎng)格:一個(gè)基于Online Judge的程序設(shè)計(jì)類課程教學(xué)輔助系統(tǒng)[J].教育與教學(xué)研究,2009(2):87-11.
[3]季曉慧,張玉清.C程序設(shè)計(jì)教學(xué)中的在線評(píng)測(cè)系統(tǒng)應(yīng)用[J].電腦知識(shí)與技術(shù),2014,10(7):1465-1466.
[4] 魯靜軒,孫晶,李元高.程序在線評(píng)側(cè)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].硅谷,2008( 24):38-38.
[5]尤楓,史晟輝,趙瑞蓮.編譯程序在線評(píng)測(cè)系統(tǒng)的實(shí)現(xiàn)[J].實(shí)驗(yàn)室研究與探索,2010,29( 12):69-77.
[6] 劉楠,孫國道,田賢忠.ACM在線評(píng)判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2010(2):34-38.
[7] 王騰,姚丹霖.Online Judge系統(tǒng)的設(shè)計(jì)開發(fā)[J].計(jì)算機(jī)應(yīng)用與軟件,2006, 23( 12): 129-137.
[8] 熊茜,雷亮,許莎,等.基于在線判題系統(tǒng)的C語言實(shí)驗(yàn)教學(xué)改革[J].重慶科技學(xué)院學(xué)報(bào)(社會(huì)科學(xué)版),2015( 10):67-69.
[9] 李文新,郭煒.北京大學(xué)程序在線評(píng)測(cè)系統(tǒng)及其應(yīng)用[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2005( 23):170-177.
[10] 蔡崇超.基于Web的在線判題系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2016.15(3):107-109.
[11] 肖瀟,賀細(xì)平.C語言程序設(shè)計(jì)教學(xué)探索[J].計(jì)算機(jī)教育,2011(5):65-68.
[12]莊奇東,王鍵聞,張楠,等.Online Judge系統(tǒng)的優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(8):115-121.
[13] 陳湘驥,徐東風(fēng),楊秋妹.在線評(píng)判在C語言課程設(shè)計(jì)教學(xué)中的應(yīng)用[J].計(jì)算機(jī)教育,2010(3):97-100.
[14] 喬少杰,楊燕,葛永明,等.基于B/S架構(gòu)的多用戶在線程序評(píng)判系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與科學(xué),2011,33(Al):58-61.
[15]何迎升,羅強(qiáng).Online Judge評(píng)判內(nèi)核的設(shè)計(jì)與實(shí)現(xiàn)[J].吉首大學(xué)學(xué)報(bào),2010,31(6):37-38.
[16] 朱二華.基于Vue.is的Web前端應(yīng)用研究[J].科技與創(chuàng)新,2017( 20):119-121.
[17]韓志科,王貴,韓俊杰.基于API自動(dòng)測(cè)試的程序設(shè)計(jì)在線判題系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008,17( 7):9-13.
[18] 楊志偉,曾艷姍.基于Linux的ACM在線評(píng)測(cè)系統(tǒng)研究[J].計(jì)算機(jī)與現(xiàn)代化,2010(6):166-169.
[19] 王方旭.基于Spring Cloud和Docker的微服務(wù)架構(gòu)設(shè)計(jì)[J].中國信息化,2018(3):53-55.
[20] 王娟.基于Online Judge的高級(jí)語言程序設(shè)計(jì)課程教學(xué)改革[J].吉林省教育學(xué)院學(xué)報(bào),2012,28(10):85-87.
(責(zé)任編輯:黃健)
基金項(xiàng)目:全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)計(jì)算機(jī)基礎(chǔ)教學(xué)研究與改革項(xiàng)目(AFCEC-2016-18);南京大學(xué)金陵學(xué)院校級(jí)教改項(xiàng)目( 0010521816)
作者簡介:孔欽(1983-),女,碩士,南京大學(xué)金陵學(xué)院信息科學(xué)與工程學(xué)院講師,研究方向?yàn)橛?jì)算機(jī)應(yīng)用、數(shù)據(jù)分析。