戴家樹,徐 濤,楊星雨,林曉康
(安徽工程大學計算機與信息學院,安徽蕪湖 241000)
在編程和信息技術爆炸性發(fā)展的21世紀,以互聯(lián)網(wǎng)為核心的計算機技術已經(jīng)滲透到了各行各業(yè).閱讀源碼是提高從業(yè)人員技術水平的一條公認的必經(jīng)之路.一般的源碼資源托管平臺操作繁瑣,用戶體驗和發(fā)現(xiàn)優(yōu)質源碼的能力不足,與此同時越來越多的開發(fā)者開始重新關注基于云的開發(fā)者生態(tài)系統(tǒng),這與未來的源碼資源托管平臺的發(fā)展?jié)摿ν耆恢?
為了解決上述現(xiàn)況,在基于Spring Boot的源碼資源托管平臺[1]中,普通用戶具有前端查看、主頁、已下載代碼、用戶中心、發(fā)布代碼、失效代碼、資源管理等功能;管理員具有統(tǒng)計信息、資源管理、資源類型管理、用戶管理、評論管理、友情鏈接管理等功能,同時還外加了推薦系統(tǒng)以便幫助用戶發(fā)現(xiàn)優(yōu)質源碼.擁有這樣一個平臺,可以對提升自身能力、擴展眼界有巨大幫助.
想要了解一種技術,都存在一定的入門壁壘,這不利于技術的發(fā)展和革新,所以作為推廣源碼資源的平臺,其操作應該是無門檻、簡單的.它可以滿足無論從事何種開發(fā)的開發(fā)者,都可以從該網(wǎng)站上獲取相應的源碼以供閱讀學習[2],獲取經(jīng)驗教訓,找尋靈感,認識各個領域的大牛.其次,作為一種托管平臺,用戶不必實時帶著自己的筆記本來回奔波,只需要從平臺云端下載托管的代碼,就可以免除物理機器的限制和地域的隔離,使同行之間的交流變得十分方便,解放開發(fā)者的思緒.最后,該平臺還需要擁有發(fā)現(xiàn)優(yōu)質源碼的能力,給用戶減少時間成本并獲得良好的體驗.
該系統(tǒng)使用MySQL[3]數(shù)據(jù)庫,按照基本業(yè)務需求設計了7張表,分別是資源類型表、源碼資源表、評論表、消息表、用戶表、用戶下載和友情鏈接表.根據(jù)實際的需求,分別針對源碼資源表和用戶表、源碼資源表和資源類型表設置相應的外鍵,實現(xiàn)連表查詢等基本數(shù)據(jù)操作.同時為了保證系統(tǒng)數(shù)據(jù)的完整性要求,在用戶修改資源內容等方便設置事務,并使事務符合ACID要求,數(shù)據(jù)庫E-R圖1所示.
系統(tǒng)包括前端和后端兩個部分,前端的功能設計有:前端查看、我的主頁、已下載代碼、用戶中心、發(fā)布代碼、失效代碼、資源管理等基本功能;后端的功能設計包括:統(tǒng)計信息、資源管理、資源類型管理、用戶管理、評論管理、友情鏈接管理等基本功能,最后為了實現(xiàn)快速找尋優(yōu)質代碼的需求,增加的各類榜單前端展示功能;此外為了提高智能性,在系統(tǒng)中使用基于ALS算法的離線推薦功能,使系統(tǒng)智能化.其系統(tǒng)業(yè)務如圖2所示:
為保證源碼資源托管平臺可以穩(wěn)定、安全、高效的運行,結合企業(yè)實際情況,系統(tǒng)應當達到以下性能需求:系統(tǒng)由于通信的需求會存在一定的延遲,并且需要等待系統(tǒng)響應時間,因此為了能夠縮短這一部分代碼執(zhí)行時間,將其壓縮到系統(tǒng)能夠接受的限度、同時也應該兼顧多線程和高并發(fā)的需要.系統(tǒng)的安全性也是重中之重.系統(tǒng)須保證數(shù)據(jù)安全,防止數(shù)據(jù)異常和非法訪問數(shù)據(jù).為了讓用戶有更好的體驗,系統(tǒng)的操作應該是簡單和提示信息應該是一目了然的.
該系統(tǒng)的基礎框架是Spring Boot,基于其Maven插件,可以創(chuàng)建可執(zhí)行的JARs和WARs;內嵌Tomcat容器,可以提供自動配置的“starter”項目對象模型以簡化Maven配置;開發(fā)中自動配置Spring容器以提供準備好的特性,不需要XML配置.
在數(shù)據(jù)存取時,使用Redis數(shù)據(jù)庫完成[4].Redis是一個高性能的鍵值數(shù)據(jù)庫,在使用時,首先初始化Redis模板,返回值實例化存儲對象;之后判斷Redis是否有目標資源列表;若Redis里沒有資源列表,則去數(shù)據(jù)庫中查詢,將該資源推入相應的Redis資源類型列表;最后分頁資源列表并返回當前頁.
在安全方面采用Shiro框架[5].首先驗證身份信息,給予角色管理權限;在使用Shiro的配置類時:首先,一個URL可以配置多個Filter,使用逗號分割;其次,當設置多個過濾器時,全部驗證通過,才視為通過;最后,部分過濾器可以指定參數(shù)其中必須設立securityManager,如果不設置,默認會自動尋找工程根目錄下的login.jsp頁面.在過濾鏈的定義中,從上往下執(zhí)行,一般將/**放在最下面,authc 所有的url必須認證通過才能訪問,anon所有的url可以匿名訪問.
全文搜索引擎采用Lucene技術.在使用Lucene搜索引擎技術[6]時,首先創(chuàng)建一個索引目錄,然后創(chuàng)建一個分詞器實例對象,用來找配置文件;之后創(chuàng)建一個索引工具的配置對象;最后創(chuàng)建索引,寫出工具類.在使用時:為了防止臟數(shù)據(jù)的產(chǎn)生,設立一個互斥鎖;之后引用上面創(chuàng)建的索引工具;在代碼上傳時獲得上傳的對象信息;最后將對象信息交給索引工具.
在系統(tǒng)智能化設計中,鑒于ALS算法是非常成熟的推薦算法之一,它的實現(xiàn)代碼是面向大眾開源的且已經(jīng)有相當?shù)木薮髷?shù)據(jù)規(guī)模來訓練選擇更優(yōu)質的模型,提高推薦的準確度.利用該算法設定的離線統(tǒng)計算法和離線推薦算法周期性的進行結果統(tǒng)計與保存,計算的結果在一定時間周期內是固定不變的,變更的頻率取決于算法調度的頻率.
登錄模塊是系統(tǒng)的基礎模塊.在用戶的登錄與注冊模塊,為系統(tǒng)管理員和普通用戶的詳細的信息支持.該模塊為系統(tǒng)管理員與普通用戶之間建立起數(shù)據(jù)橋梁,通過用戶填寫個人信息完成用戶注冊,在登錄時通過用戶的注冊賬號和密碼匹配是否正確完成登錄.值得注意的是,在密碼中由于在安全方面的考慮,采用md5算法對密碼加密.這就在用戶完成注冊后,密碼被md5加密,在登錄時,用戶提交的密碼需要被md5算法加密后得到的字符串與數(shù)據(jù)庫中的密碼比較驗證.
該模塊是系統(tǒng)的核心模塊之一,在這個模塊主要是用戶來發(fā)布自己的代碼鏈接和代碼介紹.在這一過程中,用戶需要選擇自己代碼的類型、發(fā)布的代碼鏈接(連接需要經(jīng)過系統(tǒng)自動審核判斷它是否失效)、設置關鍵字和詳細信息,設置積分等.在用戶按了發(fā)布按鈕后,管理員就會審核代碼.若無敏感信息,即審核通過,在前端顯示,該模塊流程圖如圖3所示:
圖3 用戶發(fā)布資源模塊流程圖Fig.3 Flow Chart of User Publishing Resource Module
用戶可以通過博客中對代碼的描述選擇是否要下載代碼,若下載代碼只要不是免費的資源都需要扣除相應的積分.用戶評論模塊與管理員審核評論是一體的.該模塊是系統(tǒng)的后端模塊之一,在這個模塊主要管理員為了審核用戶發(fā)布的評論.用戶不能評論自己的代碼和資源.更有利于管理員對評論的綜合管理.當管理員通過審核后,評論可以在前端顯示.
該模塊是系統(tǒng)的后端模塊,在這個模塊主要用戶管理自己的代碼資源鏈接和代碼介紹是否需要修改和刪除,并在前端顯示自己所發(fā)布資源的各類信息和當前資源的狀態(tài)(是否通過審核在前端可見),用戶還有代碼文檔中細節(jié)修改的功能,并能快速提交,幫助用戶管理代碼資源.在資源修改部分,主要可以修改代碼或資源的下載鏈接、下載積分、所屬類型、是否刪除等基本功能.滿足用戶在第一次發(fā)布后的多次修改需求.該模塊頁面如圖4所示:
圖4 用戶資源管理前端頁面展示Fig.4 Front Page Display of User Resource Management
該模塊是系統(tǒng)的后端模塊,在這個模塊主要管理員為了審核用戶發(fā)布的代碼鏈接和代碼介紹是否存在敏感信息——審核通過,在前端顯示.除了審核以外,管理代碼也可以設置該資源是否免費、是否熱門、是否應該被刪除,同時還有查看等功能,幫助管理員管理代碼資源.與資源管理類似,在資源類型管理中主要添加、刪除或修改資源種類,也可以通過Lucene搜索引擎,模糊搜索資源種類.同時對已發(fā)布的資源可以進行查看、編輯和刪除等操作功能,完善了管理員的管理范圍.該模塊頁面如圖5所示:
圖5 管理員管理資源前端頁面展示Fig.5 Front Page Display of Administrator Management
離線推薦服務是綜合用戶所有的歷史數(shù)據(jù),利用設定的離線統(tǒng)計算法和離線推薦算法周期性的進行結果統(tǒng)計與保存,計算的結果在一定時間周期內是固定不變的,變更的頻率取決于算法調度的頻率[7].離線推薦服務主要計算一些可以預先進行統(tǒng)計和計算的指標,為實時計算和前端業(yè)務相應提供數(shù)據(jù)支撐.離線推薦服務主要分為統(tǒng)計推薦、基于隱語義模型的協(xié)同過濾推薦以及基于內容和基于Item-CF的相似推薦[8].對于模型,這并不一定是最優(yōu)的參數(shù)選取,所以我們需要對模型進行評估.通常的做法是計算均方根誤差(RMSE),考察預測評分與實際評分之間的誤差.
(1)
有了RMSE,我們可以就可以通過多次調整參數(shù)值,來選取RMSE最小的一組作為我們模型的優(yōu)化選擇.
基于 Spring Boot 的源碼資源托管平臺使用 IntelliJ IDEA 在 Windows10 操作系統(tǒng)上啟動運行,JDK為 jdk1.8,瀏覽器使用QQ瀏覽器開發(fā)版.
系統(tǒng)測試采用黑盒測試和白盒測試[9]相結合的方式,根據(jù)系統(tǒng)頁面上的功能菜單以及需求進行功能測試.針對本平臺,采用故障檢測機制[10]判斷其可靠性.
通過對源碼托管平臺的測試,基本上達到了預期生成代碼加快開發(fā)效率的目的,系統(tǒng)頁面管理性以及系統(tǒng)拓展性在測試過程中表現(xiàn)優(yōu)秀.
經(jīng)過詳細的設計、開發(fā)、測試,基于Spring Boot的源碼資源托管平臺已上線.通過深入考察并分析了源碼資源托管平臺的可發(fā)展空間,然后對該系統(tǒng)進行概要設計和詳細設計,最終實現(xiàn)了基于Spring Boot源碼資源托管平臺.經(jīng)過功能測試和負載測試,系統(tǒng)運行結果均良好.