軟件工程 | https://edu.cnblogs.com/campus/gdgy/informationsecurity1812 |
---|---|
作業要求 | https://edu.cnblogs.com/campus/gdgy/informationsecurity1812/homework/11155 |
作業目標 | 論文查重算法設計+單元測試+ JProfiler +PSP 表格+Git 管理 |
一、代碼文件
-
GitHub鏈接,如果能有幸幫助到你,希望能順手點個小星星

-
可運行的 Jar
包已發布至倉庫的release
包內

二、項目結構分析
2.1 整體流程展示

2.2 工程分包展示

2.3 類功能展示
-
bean:
AtomicFloat
:應對並發情況的原子操作的類WordGroup
: 詞組的實體類
-
main:
MainEntrance
:主函數的入口

2.4 運行展示

2.5 關鍵算法展示
使用的是余弦相似度的算法:

余弦相似性通過測量兩個向量的夾角的余弦值來度量它們之間的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大於1;並且其最小值是-1。從而兩個向量之間的角度的余弦值確定兩個向量是否大致指向相同的方向。兩個向量有相同的指向時,余弦相似度的值為1;兩個向量夾角為90°時,余弦相似度的值為0;兩個向量指向完全相反的方向時,余弦相似度的值為-1。這結果是與向量的長度無關的,僅僅與向量的指向方向相關。余弦相似度通常用於正空間,因此給出的值為0到1之間。
2.6 項目亮點展示
-
運行速度快:在簡單的文本下,速度可以達到100ms以內,而在復雜的情況下,也可以達到 2.5s 內 -
准確度高:能夠經過完整的測試,測試結果准確 -
魯棒性高:對各種異常情況(包括空數據和各種極端情況的處理)
三、單元測試
單元測試使用了多種樣例,力求全面


四、性能測試與優化
筆者使用
JProfiler
對性能進行監控操作,下面展示的是優化前的性能測試圖




由線程圖可以看出,筆者優化前的程序只是一個線程,因此,如果加入線程的話,想必會提升速度
但是線程在哪里加呢?該怎么加呢?筆者不能立刻給出答案
經過一段時間的思考,想到可以在遍歷之前調用 parallelStream
的方式, 起到多線程同時訪問數據流的作用
問題又來了,如何保證並發安全呢?
答案是,封裝一個原子類,執行 CAS
操作,從而保證線程安全
不了解
CAS
的話,可以看下『深入理解 JVM 虛擬機』,或者看下筆者之前寫的這篇文章:http://xcynice.xyz/2020/04/10/yi-ye-gao-dong-jvm-xian-cheng-an-quan-yu-suo-you-hua/
五、代碼質量檢查
Code 的質量檢查是非常重要的一部分工作,本項目借助
SonarLint
和git commit
之前的review
來進行代碼的重構與優化


六、PSP
表格
PSP 各個階段 | 自己預估的時間(分鍾) | 實際的記錄(分鍾) |
---|---|---|
計划: 明確需求和其他因素,估計以下的各個任務需要多少時間 | 30 | 45 |
開發 (包括下面 8 項子任務) | (以下都填預估值) | 218 |
· 需求分析 (包括學習新技術、新工具的時間) | 20 | 30 |
· 生成設計文檔 (整體框架的設計,各模塊的接口,用時序圖,快速原型等方法) | 13 | 5 |
· 設計復審 (和同事審核設計文檔,或者自己復審) | 12 | 20 |
· 代碼規范 (為目前的開發制定或選擇合適的規范) | 6 | 3 |
· 具體設計(用偽代碼,流程圖等方法來設計具體模塊) | 21 | 30 |
· 具體編碼 | 63 | 75 |
· 代碼復審 | 16 | 20 |
· 測試(自我測試,修改代碼,提交修改) | 32 | 35 |
報告 | 72 | 95 |
測試報告(發現了多少bug,修復了多少) | 14 | 201 |
計算工作量 (多少行代碼,多少次簽入,多少測試用例,其他工作量) | 12 | 15 |
事后總結, 並提出改進計划 (包括寫文檔、博客的時間) | 56 | 60 |
總共花費的時間 (分鍾) | 310 | 523 |
七、小結
因為筆者方向是 Android
開發,因此對於 Java
中的原生 IO
流的操作不太熟悉, 和對 IDEA
編譯器的各種操作(包括導包,生成UML,性能測試)不太熟悉,以至於在編碼之后花了比較多的時候去研究相關操作。
但是通過這次個人的編程作業,筆者對單元測試,性能優化,性能監測等操作有了進一步的認識,改日有空, 筆者再思考下Android
性能優化,單元測試。
如果文章對您有一點幫助的話,希望您能點一下贊,您的點贊,是我前進的動力
本文參考鏈接:
-
余弦相似度算法 -
Intellij Idea 將java項目打包成jar,cmd運行該jar -
詳述 IntelliJ IDEA 提交代碼前的 Code Analysis 機制 -
Java內存分析工具--IDEA的JProfiler和JMeter插件 -
解決JetBrains系列Git push失敗問題 -
【Java】關於Java8 parallelStream並發安全的思考 -
IDEA怎么生成UML類圖 -
idea中maven導入jar包
本文使用 mdnice 排版