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

        ?

        基于Koa2的PDSUOJ系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2020-04-08 09:30:50王飛飛徐帥武
        電腦知識(shí)與技術(shù) 2020年3期

        王飛飛 徐帥武

        摘要:針對(duì)現(xiàn)有程序在線評(píng)測(cè)系統(tǒng)存在的運(yùn)行效率低、功能較為單一的問(wèn)題,該文設(shè)計(jì)實(shí)現(xiàn)了一基于Koa2的PDSUOJ系統(tǒng),該系統(tǒng)前端與服務(wù)端框架分別采用Rect與Midway,進(jìn)行數(shù)據(jù)存儲(chǔ)與緩存時(shí)使用PostgreSQL與Redis,同時(shí)為了滿(mǎn)足服務(wù)之間隔離與快速部署的需求采用Docker作為各個(gè)服務(wù)的運(yùn)行容器。該系統(tǒng)主要實(shí)現(xiàn)了用戶(hù)信息管理、用戶(hù)分組信息管理、題目信息管理、題目提交評(píng)測(cè)、提交數(shù)據(jù)管理等功能,系統(tǒng)界面簡(jiǎn)單友好,運(yùn)行效率高,可以滿(mǎn)足用戶(hù)在線評(píng)測(cè)程序的需求。

        關(guān)鍵詞:評(píng)測(cè)系統(tǒng);服務(wù)端;數(shù)據(jù)管理

        中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A

        文章編號(hào):1009-3044(2020)03-0094-02

        1 概述

        隨著計(jì)算機(jī)編程技術(shù)的發(fā)展,各類(lèi)程序在線評(píng)測(cè)系統(tǒng)開(kāi)始出現(xiàn)[1-3],但是現(xiàn)有的系統(tǒng)大多主要以學(xué)生競(jìng)賽訓(xùn)練為主,與教學(xué)工作相結(jié)合用于程序課程考核的較少,因此功能較為單一,在實(shí)現(xiàn)學(xué)生分組、課程分類(lèi)、評(píng)測(cè)結(jié)果數(shù)據(jù)分組匯總方面存在欠缺,且存在代碼耦合嚴(yán)重難以二次開(kāi)發(fā)、系統(tǒng)擴(kuò)展性與數(shù)據(jù)安全性較差等問(wèn)題。為了更好地滿(mǎn)足教學(xué)需要,本文在對(duì)現(xiàn)有系統(tǒng)進(jìn)行分析研究的基礎(chǔ)上,根據(jù)學(xué)生與教師在系統(tǒng)性能、功能和擴(kuò)展性的需求,確定系統(tǒng)功能與實(shí)現(xiàn)該系統(tǒng)所采用的技術(shù),設(shè)計(jì)實(shí)現(xiàn)了一在線評(píng)測(cè)系統(tǒng)。

        2 系統(tǒng)功能需求分析與相關(guān)技術(shù)

        2.1 系統(tǒng)功能需求分析

        通過(guò)對(duì)現(xiàn)有在線評(píng)測(cè)平臺(tái)的分析[4-6],在對(duì)教師與學(xué)生的需求進(jìn)行調(diào)研的基礎(chǔ)上,將系統(tǒng)用戶(hù)分為兩類(lèi):普通用戶(hù)與特權(quán)用戶(hù)。

        普通用戶(hù)功能包括個(gè)人信息管理、查看排行、題目查詢(xún)與瀏覽、題目提交與程序考核管理。其中個(gè)人信息管理包括用戶(hù)注冊(cè)登錄、信息查看與信息修改;查看排行可以分組查看,也可以查看他人的成績(jī)信息;題目查詢(xún)與瀏覽可以實(shí)現(xiàn)分類(lèi)查詢(xún)、模糊搜索、題目自定義排序與查看詳情;題目提交為答題完畢后提交題目。

        特權(quán)用戶(hù)功能包括用戶(hù)管理、題目管理、用戶(hù)組信息管理、考核管理。其中用戶(hù)管理包括對(duì)注冊(cè)用戶(hù)個(gè)人信息進(jìn)行查看、刪除、修改等,對(duì)用戶(hù)近期答題情況、錯(cuò)誤率、排名等情況進(jìn)行查看;題目管理包括對(duì)題目的添加、修改、刪除、隱藏、分類(lèi)等操作;用戶(hù)組信息管理包括新增用戶(hù)組,實(shí)現(xiàn)對(duì)用戶(hù)組信息的修改與刪除,對(duì)用戶(hù)組內(nèi)成員信息的管理;考核管理包括出題、選擇參加學(xué)生、對(duì)提交題目進(jìn)行評(píng)判等。

        2.2 相關(guān)技術(shù)分析

        本系統(tǒng)前端開(kāi)發(fā)采用Rect,它可以在數(shù)據(jù)發(fā)生變化時(shí)檢測(cè)到相應(yīng)信息以完成對(duì)視圖的自動(dòng)更新,從而實(shí)現(xiàn)數(shù)據(jù)到視圖的映射;可以通過(guò)Rect構(gòu)建組件實(shí)現(xiàn)代碼復(fù)用,也可以實(shí)現(xiàn)與其他框架的組合使用;Rect內(nèi)部實(shí)現(xiàn)了Virtual DOM系統(tǒng),當(dāng)數(shù)據(jù)量大且變化快時(shí)只更新變化的數(shù)據(jù),有效地改善了性能瓶頸問(wèn)題。

        Midway是基于Koa2的后端框架,與Koa2相比增加了許多便于開(kāi)發(fā)的中間件,其開(kāi)發(fā)語(yǔ)言采用TypeScript,有利于程序的后期擴(kuò)展,同時(shí)兼容Egg.js的寫(xiě)法,可以利用各種中間件加快開(kāi)發(fā)速度,同時(shí)內(nèi)置了單元測(cè)試。軟件開(kāi)發(fā)過(guò)程中,程序在不同機(jī)器上會(huì)出現(xiàn)不兼容的狀況,不同的技術(shù)也會(huì)存在不同的環(huán)境依賴(lài),此類(lèi)問(wèn)題一般采用虛擬機(jī)或者Docker技術(shù)解決,由于Docker在啟動(dòng)、硬盤(pán)使用、性能、系統(tǒng)支持量方面存在的優(yōu)勢(shì),本系統(tǒng)采用Docker技術(shù)來(lái)解決環(huán)境配置問(wèn)題。

        3 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

        3.1 系統(tǒng)設(shè)計(jì)

        本系統(tǒng)主體架構(gòu)包括前端顯示、后端邏輯層與判題服務(wù)三部分。其中Rect實(shí)現(xiàn)前端展示與操作邏輯,SPA模式的采用使頁(yè)面切換等由前端處理,服務(wù)端僅提供頁(yè)面數(shù)據(jù),從而減少了網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)量,頁(yè)面展示時(shí)為無(wú)刷新的切換方式,增加了呈現(xiàn)速度。Service層采用TypeScript作為開(kāi)發(fā)語(yǔ)言進(jìn)行程序編寫(xiě),以Node.js為程序運(yùn)行環(huán)境,如果后端服務(wù)壓力過(guò)大則可以開(kāi)啟多個(gè),與前端服務(wù)器一起實(shí)現(xiàn)負(fù)載均衡,減輕后端服務(wù)壓力,具體如圖l所示。

        用戶(hù)提交答案到服務(wù)端后,服務(wù)端先通過(guò)一次Hash對(duì)重復(fù)提交進(jìn)行過(guò)濾,然后將信息發(fā)送至Judge服務(wù)器,如果當(dāng)前判題服務(wù)空閑則直接進(jìn)行處理,否則將信息存入Redis緩存隊(duì)列,當(dāng)有判題核心處于空閑狀態(tài)時(shí)則從緩存中進(jìn)行讀取判題,處理后將結(jié)果返回至服務(wù)端。具體工作流程如下:

        1)評(píng)測(cè)服務(wù)接受評(píng)測(cè)請(qǐng)求;

        2)判斷是否空閑,如果空閑則執(zhí)行下一步,否則處于等待狀態(tài);

        3)對(duì)程序進(jìn)行編譯,如果編譯失敗則跳轉(zhuǎn)到Error,否則執(zhí)行下一步;

        (Error)響應(yīng)異常,跳轉(zhuǎn)到8);

        4)讀取評(píng)測(cè)數(shù)據(jù),運(yùn)行編譯后的程序?qū)Ξa(chǎn)生的結(jié)果進(jìn)行比較;

        5)如果結(jié)果正確則跳轉(zhuǎn)到下一步,否則跳轉(zhuǎn)到Error;

        6)判斷是否還有下一組數(shù)據(jù),如果有則跳轉(zhuǎn)到4),否則執(zhí)行下一步;

        7)響應(yīng)請(qǐng)求結(jié)果為成功,執(zhí)行下一步;

        8)判斷緩存隊(duì)列中是否存在等待中的請(qǐng)求,如果存在則跳轉(zhuǎn)到3),否則結(jié)束程序。

        3.2 系統(tǒng)實(shí)現(xiàn)

        本系統(tǒng)實(shí)現(xiàn)的功能有權(quán)限管理、用戶(hù)注冊(cè)登錄、題目提交、用戶(hù)管理、用戶(hù)組管理、題目管理、系統(tǒng)判題等,下面以題目提交與判題為例進(jìn)行描述。

        題目提交實(shí)現(xiàn)過(guò)程中,將前端頁(yè)面分為題目描述與彈窗兩部分,這樣可以實(shí)現(xiàn)無(wú)須將頁(yè)面下拉到底端即可實(shí)現(xiàn)提交功能。該模塊中,選擇提交代碼語(yǔ)言時(shí)使用Select選擇器,用戶(hù)可在基于CodeMirror的代碼輸入框中輸入程序源代碼,通過(guò)相應(yīng)配置實(shí)現(xiàn)代碼高亮等功能,CodeMirror通過(guò)注冊(cè)該組件上的on-Change事件獲取用戶(hù)輸入的源代碼,代碼提交時(shí)通過(guò)Base64進(jìn)行編碼,這樣可以減少在數(shù)據(jù)傳輸過(guò)程中可能出現(xiàn)的錯(cuò)誤;在服務(wù)端,獲取/upProblem路徑上的post提交時(shí)采用SubmitCon-troller類(lèi)中的方法,提交獲取后通過(guò)pid調(diào)用prisma.problem方法進(jìn)行詳細(xì)信息的查詢(xún),然后通過(guò)prisma. createSubmit創(chuàng)建一個(gè)用于提交的等待狀態(tài),并將信息發(fā)送給Judge服務(wù)器;Judge服務(wù)對(duì)接收到的信息進(jìn)行解碼與編譯,然后將運(yùn)行結(jié)果與正確答案進(jìn)行比較,并將結(jié)果發(fā)送至SubmitController的updateProb-lem方法,該方法將所有測(cè)試產(chǎn)生的運(yùn)行結(jié)果進(jìn)行遍歷,得出最終運(yùn)行結(jié)果,并將其寫(xiě)入數(shù)據(jù)庫(kù)。

        對(duì)題目進(jìn)行評(píng)測(cè)時(shí),源代碼編寫(xiě)采用C++語(yǔ)言實(shí)現(xiàn),具體如下:首先調(diào)用parse_arguments函數(shù)對(duì)傳人的實(shí)際參數(shù)進(jìn)行解析,然后在Compiler函數(shù)中創(chuàng)建子線程,從而實(shí)現(xiàn)對(duì)源代碼文件的編譯,最后執(zhí)行freopen0函數(shù),并重定向到stderr/stdout文件,將結(jié)果返回給Main函數(shù)。在Main函數(shù)中獲取Compiler函數(shù)的返回值,若該值為0則給出錯(cuò)誤信息。當(dāng)編譯過(guò)程結(jié)束后,對(duì)mate.Json中的文件列表進(jìn)行遍歷,進(jìn)行外部數(shù)據(jù)的讀取,在該過(guò)程中,輸入文件使用*.in,保存輸出結(jié)果使用temp/*.out文件,如果運(yùn)行超時(shí),則向相應(yīng)子進(jìn)程發(fā)出信號(hào),返回超時(shí)信息,如果運(yùn)行正常,則對(duì)文件進(jìn)行比較,判斷比較結(jié)果是否一致,一致則為通過(guò),如果不一致則返回錯(cuò)誤,然后將運(yùn)行時(shí)間和內(nèi)存寫(xiě)入result.j son文件,繼續(xù)執(zhí)行下一組數(shù)據(jù)。

        4 結(jié)束語(yǔ)

        本文在對(duì)現(xiàn)有系統(tǒng)與用戶(hù)需求進(jìn)行分析的基礎(chǔ)上,設(shè)計(jì)實(shí)現(xiàn)了以基于Koa2的在線評(píng)測(cè)系統(tǒng),系統(tǒng)采用三層架構(gòu)模式進(jìn)行開(kāi)發(fā),主要采用Rect、PostgreSQL等技術(shù),實(shí)現(xiàn)了用戶(hù)分組管理、分角色權(quán)限管理、前端服務(wù)端開(kāi)發(fā)分離、題目在線評(píng)測(cè)等功能,并在學(xué)生中進(jìn)行測(cè)試,測(cè)試過(guò)程與結(jié)果表明:該系統(tǒng)界面友好、擴(kuò)展性強(qiáng),可以較好地滿(mǎn)足用戶(hù)的需求。

        參考文獻(xiàn):

        [1]黃洪波.大規(guī)模編程題在線評(píng)判技術(shù)研究[D].廣州:華南農(nóng)業(yè)大學(xué),2016:18-20.

        [2]楊志偉,曾艷姍,基于Linux的ACM在線評(píng)測(cè)系統(tǒng)研究[J].計(jì)算機(jī)與現(xiàn)代化,2010(6):166-169.

        [3]李博,孟成博.對(duì)HUSTOJ在線評(píng)測(cè)系統(tǒng)的若干優(yōu)化與創(chuàng)新[J].現(xiàn)代計(jì)算機(jī):專(zhuān)業(yè)版,2013,(35):47-50,56.

        [4]杜艷美.基于web前端的性能優(yōu)化框架模型研究[D].綿陽(yáng):西南科技大學(xué),2018:9-11.

        [5]蔡崇超.基于Web的在線判題系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2016,15(3):107-109.

        [6]王致遠(yuǎn),周威,陳義明.基于SSM的ACM虛擬判題系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2018,14(9):95-97.

        av黄页网国产精品大全| 日本久久久久| 丝袜美腿一区二区在线观看| 中文字幕无码免费久久99| 国产精品黄页免费高清在线观看 | 麻豆AV无码久久精品蜜桃久久| 99熟妇人妻精品一区五一看片| 羞羞色院99精品全部免| 一本色道久久爱88av| 疯狂撞击丝袜人妻| 少妇邻居内射在线| 亚洲mv国产精品mv日本mv| 久久精品国产亚洲AV古装片| 日产国产亚洲精品系列| 成人欧美一区二区三区在线观看| 亚洲av日韩av无码污污网站| 国产日b视频| 日韩人妻无码精品二专区| 国产高清自产拍av在线| 在线国人免费视频播放| 亚洲国产成人久久三区| 老熟女毛茸茸浓毛| 国产一区二区三区亚洲精品| 黄射视频在线观看免费| 人人妻人人爽人人澡人人| 日韩秘 无码一区二区三区| 日本高清一区在线你懂得| 亚洲国产精品成人久久久 | 亚洲美女影院| 日本人妻系列一区二区| 顶级高清嫩模一区二区| 久久久久99人妻一区二区三区| 中文国产日韩欧美二视频| 中文乱码字幕高清在线观看| 精品国产麻豆一区二区三区| 精品人妖一区二区三区四区| 国模无码一区二区三区| 真实国产乱啪福利露脸| 视频二区 无码中出| 国产91色综合久久免费| 狠狠噜狠狠狠狠丁香五月|