摘要:編程技能是計算機類專業(yè)學生的核心能力,在線評測系統(tǒng)是該能力培養(yǎng)的一個重要載體。鑒于目前的大部分在線評測系統(tǒng)主要面向競賽或崗位招聘,文章設計了一款面向應用型本科的在線編程訓練系統(tǒng),該系統(tǒng)集在線評測、趣味練習、智能推薦、數(shù)據(jù)分析等功能于一體,旨在逐步引導、激發(fā)學生的編程興趣,提高編程參與度與練習效果。系統(tǒng)采用微服務架構,具備高并發(fā)處理能力和直觀的數(shù)據(jù)可視化支持。
關鍵詞:在線評測;在線編程;挑戰(zhàn)模式;趣味闖關
中圖分類號:R197.323.1 文獻標識碼:A
文章編號:1009-3044(2024)19-0057-03
編程技能是計算機類專業(yè)學生的核心能力,直接體現(xiàn)其實踐能力和專業(yè)掌握程度。在線評測(OnlineJudge, OJ) 系統(tǒng)作為評判用戶代碼正確性的重要工具,廣泛應用于教學實驗、程序設計競賽、企業(yè)軟件類崗位招聘、培訓、計算機等級認證等場景中[1]。當前,知名的OJ系統(tǒng)包括北京大學的POJ、杭州電子科技大學的HDUOJ、牛客、頭歌、洛谷、AcWing等國內(nèi)平臺,以及Codeforces、Topcoder、Leetcode 等國際平臺[2-4]。然而,這些平臺在提供服務時也存在局限性。部分商業(yè)系統(tǒng)功能繁多,對于聚焦編程教學的用戶并不友好,而其費用也阻礙在學校課堂的普及。另一部分主要面向程序設計競賽選手,功能以刷題訓練和在線競賽為主,缺乏對基礎薄弱學生的引導與支持,讓人望而卻步。同時,使用第三方平臺,數(shù)據(jù)管理權歸運營方所有,對于希望擴大學生訓練規(guī)模,進行精細化、個性化、多元化[5-6]教學引導的應用型本科院校而言,難以獲取特定反饋數(shù)據(jù)以優(yōu)化教學。
因此作為應用型本科院校,有必要自主開發(fā)、部署一個更為靈活、開放、免費、面向不同層次的學生需求的在線編程訓練系統(tǒng)(為了區(qū)別傳統(tǒng)OJ,本系統(tǒng)稱為“在線編程訓練系統(tǒng)”) ,通過逐步引導,增加趣味性和挑戰(zhàn)性,激發(fā)學生的編程興趣,提高編程活動參與度與練習效果。
1 系統(tǒng)功能
本系統(tǒng)以C、C++、Python和Java代碼的在線評測為核心功能,并針對應用本科型院校的教學和學生自主編程練習需求進行了功能擴展。該系統(tǒng)整合了五項主要功能,功能結構如圖1所示。
1.1 綜合題庫
本系統(tǒng)支持編程題目由自建題庫和爬蟲題庫兩部分組成。自建題庫,該部分題目由專業(yè)教練出題,涵蓋題干、評測方式、評測樣例、評測數(shù)據(jù)等完整信息,系統(tǒng)根據(jù)出題者的要求設定評測機制;爬蟲題庫,通過爬蟲技術從第三方題庫網(wǎng)站收集公開題目,對于無法直接爬取的測XyhQw3TG9Wrc5A/fKg2uNQ==試樣例,系統(tǒng)將采用逆推輸入輸出樣例或人工補全的方式加以完善。此外,該模塊還包含題目知識點圖譜、題目解析以及題目推薦等功能。
1.2 在線練習
用戶可自由挑選練習模式和題目進行在線學習。提交解答后,系統(tǒng)將迅速反饋評測結果。完成題目后,系統(tǒng)將更新統(tǒng)計數(shù)據(jù),包括難度系數(shù)和答題評價,以提供個性化學習參考。
在線練習模式包含專題模式、編程闖關模式與挑戰(zhàn)模式。其中,編程闖關模式仿照游戲關卡設計,由教師依據(jù)學生能力定制個性化解題路徑,旨在營造具有目標性、競技性和趣味性的學習環(huán)境。挑戰(zhàn)模式則基于多個知識點模塊及其內(nèi)在關聯(lián),允許用戶自主選擇學習路徑,通過逐步解鎖并達成條件以訪問后續(xù)模塊,該模式不僅增加了學習的探索性,還促進了分層學習的遞進實施。此外,系統(tǒng)可根據(jù)用戶畫像推薦優(yōu)秀學長同期的學習路徑和學習成效比較,路徑指刷題順序、闖關主題等。
1.3 在線比賽
在線比賽系統(tǒng)涵蓋多人競賽、在線考試、雙人對抗及實時競賽榜單等功能。多人競賽支持練習、積分、趣味、自定義等多種模式,每種模式均設有獨特的計分與獎勵機制。其中,練習模式適用于課程實驗與日常訓練;積分模式作為高級別競賽隊伍選拔依據(jù),促進學生競爭;趣味模式則提供特色獎品以增加吸引力。同時,該系統(tǒng)支持在線考試模式,允許教師設定用戶權限、答題時限及頁面切換限制,便于組織編程類考試等。雙人對抗功能則鼓勵學生間隨時進行在線對決,提升學習互動性與樂趣。
1.4 用戶互動
該社區(qū)集論壇討論、實時聊天室以及積分、達人、答題等多重榜單于一體,為用戶提供了全方位、多層次的交流與學習平臺。用戶可以在論壇中深入探討編程話題,借助實時聊天室即時分享心得,通過積分榜等展示個人成就。此外,本系統(tǒng)還引入了基于編程知識庫的智能問答機器人,用戶只需輕點圖標,即可獲得個性化的題目推薦、解析及概念講解,極大提升了學習體驗與效率。
1.5 達人養(yǎng)成
達人養(yǎng)成功能指系統(tǒng)通過活動與激勵提升用戶編程技能和知識水平,增強參與度與忠誠度。包括:等級與徽章制度,依據(jù)刷題表現(xiàn)晉升等級,達到特定等級后,將獲得相應的徽章并在社區(qū)中展示;積分商城,用戶通過參與活動、比賽和知識分享獲取積分,積分可在商城中兌換學習資料、徽章等獎勵;學習和成長記錄,指學習時長、成績等數(shù)據(jù)和技能雷達圖、刷題日歷圖、成長曲線等可視化圖表;用戶對比功能,支持用戶與達人進行可視化圖表疊加對比。
1.6 其他功能
系統(tǒng)全面記錄用戶答題數(shù)據(jù),便于教師深入分析學生學習狀況,如系統(tǒng)能夠計算用戶群體或特定題目的AC率(即成功解答數(shù)與總提交數(shù)的比率),從而直觀揭示學生在答題及學習過程中所遭遇的問題和挑戰(zhàn)。
2 系統(tǒng)架構與技術路線
系統(tǒng)采用B/S(瀏覽器/服務器)架構,系統(tǒng)主要由前端層、代理層、服務層和數(shù)據(jù)存儲層4個主要部分組成,系統(tǒng)架構圖如圖3所示。
2.1 前端層
前端層即用戶接入層,由微信小程序端、學生Web端門戶和后臺管理Web端組成。微信小程序端面向?qū)W生,依托Uni-app框架,支持學習任務查看和技術討論。學生Web端門戶基于Vue.js構建,提供任務查看、代碼提交和成績查看功能。后臺管理Web端同樣基于Vue.js,專注于教學管理,涵蓋任務發(fā)布、題目管理、用戶管理以及數(shù)據(jù)統(tǒng)計。此外,闖關式任務和知識圖譜的編輯與展示,分別借助jsPlumb和D3.js庫進行研發(fā),提供直觀且富有交互性的可視化支持,助力用戶更清晰地洞察數(shù)據(jù)間的關聯(lián)與脈絡。
2.2 代理層
代理層即前端代理服務器,它負責處理進出系統(tǒng)的網(wǎng)絡請求和響應。使用Nginx實現(xiàn)了負載均衡、數(shù)據(jù)攔截、反向代理等功能。
2.3 服務層
服務層構建于微服務架構之上,實現(xiàn)了面向業(yè)務和基礎支撐微服務單元的劃分。這些服務單元擁有獨立部署與監(jiān)控的能力,支持故障平穩(wěn)退化容錯、橫向擴展,且技術棧靈活多變。業(yè)務微服務包括在線評測、題目管理、題目爬取、在線練習、在線比賽、積分商城、用戶管理以及論壇管理等。其中基礎微服務主要包括:
網(wǎng)絡爬蟲服務:基于Scrapy框架開發(fā),針對每個第三方評測平臺開發(fā)特定的爬蟲機器人。支持業(yè)務層配置多個并發(fā)執(zhí)行的爬蟲實例,實現(xiàn)高效執(zhí)行題目爬取、提交第三方評測(即遠程評測服務,指將代碼提交到對應題目源網(wǎng)站的評測系統(tǒng),由其進行黑盒評測,本端則不關心評測過程,只需要獲取到評測結果,最后更新數(shù)據(jù)庫中的相關評測記錄的方式)等任務。
本地評測服務:為了應對傳統(tǒng)評測機在并發(fā)處理與任務穩(wěn)定性方面的不足,引入一種基于沙箱技術的分布式評測方案。首先,每個評測機作為獨立的Linux進程,全權處理用戶代碼文件的輸入、編譯、運行、時空越界判定、答案比較及評測結果輸出。其次,評測機通過Docker容器化部署在服務器上并利用ku?bernetes的CoreDN算法協(xié)調(diào)用戶任務以實現(xiàn)負載均衡和增強容錯性。第三,采用RabbitMQ中間件,在評測業(yè)務層服務與評測機之間構建了二層任務隊列,有效實現(xiàn)任務的削峰填谷。這一方案顯著提升了在線評測并發(fā)量,為業(yè)務提供穩(wěn)定支持。此外,此評測機實現(xiàn)了3種結果判定方式,即基于結果的完全匹配方法、基于不確定性結果的特判方法以及基于得分點的判定方法,支持對完整編程題型、函數(shù)式編程題型、交互式編程題型的評測。
全文檢索服務:依托Elasticsearch開源搜索引擎,構建了涵蓋編程題目、論壇消息等內(nèi)容的倒排索引。該服務支持模糊查詢、范圍查詢,并配備豐富的搜索結果展示功能,為用戶提供便捷的搜索體驗。同時,通過其內(nèi)容標識生成和文本相似度計算技術,為題目爬取服務提供了高效的題目查重能力,提升了題庫的質(zhì)量和準確性。
內(nèi)容推薦服務:通過分析用戶的學習歷史、題目完成情況、搜索記錄及評論數(shù)據(jù),精準捕捉用戶的學習偏好與能力水平。為每個用戶量身打造詳盡的用戶畫像,涵蓋興趣點、學習風格及技能雷達(即知識點掌握情況)。利用協(xié)同過濾算法,結合用戶畫像與題目特征(難度、知識點、歷史點擊率等),可智能推薦與用戶高度匹配的題目、話題和訓練任務。
此外,還集成了第三方在線評測平臺和短信平臺等第三方服務。
2.4 微服務框架層
微服務框架層即微服務架構工具層,基于SpringCloud系列工具包構建,為服務層微服務架構提供管理和協(xié)調(diào)支撐。其中,Zuul是開源網(wǎng)關服務器,Kafka 是消息總線,Eureka是服務注冊與發(fā)現(xiàn)組件,Ribbon 客戶端負載均衡器,Hystrix 是延遲和容錯庫,Pro?metheus和Micrometer用于收集和分析性能指標數(shù)據(jù),Zipkin用于跟蹤微服務之間的調(diào)用關系。容器編排工具使用Kubernetes(即k8s)。
2.5 存儲層
存儲層包括內(nèi)存數(shù)據(jù)庫、關系數(shù)據(jù)庫、文檔數(shù)據(jù)庫、索引數(shù)據(jù)庫、日志數(shù)據(jù)庫等。本系統(tǒng)架構支持不同業(yè)務采用異構數(shù)據(jù)庫。其中主要業(yè)務數(shù)據(jù)存儲于關系型數(shù)據(jù)庫MySql,共52個表、7個視圖。數(shù)據(jù)緩存采用了Redis內(nèi)存數(shù)據(jù)庫,主要保存用戶登錄狀態(tài)to?ken以及計算耗時較長的每日排行榜數(shù)據(jù)等。題目索引數(shù)據(jù)、系統(tǒng)日志數(shù)據(jù)等存儲在Elasticsearch中。
3 總結
本文介紹了面向應用型本科生的在線編程訓練系統(tǒng),該系統(tǒng)集成了多源題庫、趣味練習、在線競賽、用戶互動及達人養(yǎng)成等功能,設計了富有趣味性和競技性的訓練模式,有效提升了學生的編程參與度和練習效果。系統(tǒng)基于微服務架構,采用協(xié)同過濾推薦、可伸縮評測機及數(shù)據(jù)可視化等技術,提供了一個靈活、開放、免費的編程學習和教學環(huán)境。
參考文獻:
[1] 李菊,傅向華,馬軍超.基于代碼編程規(guī)范的在線評測系統(tǒng)研究與實現(xiàn)[J].計算機時代,2023(1):62-65.
[2] 徐燕萍.基于OJ的程序設計類課程實驗混合教學模式研究[J].軟件導刊,2022,21(2):231-234.
[3] 金天成,竇亮,肖春蕓,等.記憶與認知融合的個性化OJ習題推薦方法[J].計算機學報,2023,46(1):103-124.
[4] 嚴小雨,王明軍,卓堯,等.基于開源技術的高校OJ系統(tǒng)部署運維與應用[J].現(xiàn)代信息科技,2024,8(3):89-93,98.
[5] 賈曉強,劉軍.地方高校面向新工科的計算機系統(tǒng)能力培養(yǎng)實踐與思考[J].微型電腦應用,2021,37(4):7-10.
[6] 馮偉,劉亞雙,田樹華.地方應用型本科院校計算機類一流本科專業(yè)實踐教學模式研究[J].山西青年,2023(23):97-99.
[7] 鐘明輝,李志軍.應用型本科計算機類專業(yè)“一核兩翼三融合” 人才培養(yǎng)模式的實踐探索[J].大學教育,2024,13(3):115-118.
[8] 金天成,竇亮,張偉,等.基于深度強化學習與程序分析的OJ習題推薦模型[J].計算機科學,2023,50(8):58-67.
[9] 林世明,宋長軍,李芳,等.賽教融合背景下基于OJ平臺的高級程序設計課程教學改革:以昌吉學院信息工程學院為例[J].創(chuàng)新創(chuàng)業(yè)理論研究與實踐,2024,7(10):42-46.
[10] 王金水,薛醒思,翁偉.基于句法分析的代碼摘要技術[J].計算機應用,2015,35(7):1999-2003.
【通聯(lián)編輯:李雅琪】