论文查重

论文查重算法

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136
这个作业的目标 开发个人项目

githubhttps://github.com/0turnsole0/0turnsole0/tree/main/3122004702-task1

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 15
Estimate 估计这个任务需要多少时间 20 15
Development 开发 80 60
Analysis 需求分析 (包括学习新技术) 120 100
Design Spec 生成设计文档 40 20
Design Review 设计复审 5 5
Coding Standard 代码规范 (为目前的开发制定合适的规范) 5 5
Design 具体设计 30 20
Coding 具体编码 15 15
Code Review 代码复审 5 5
Test 测试(自我测试,修改代码,提交修改) 30 30
Reporting 报告 50 40
Test Repor 测试报告 10 10
Size Measurement 计算工作量 10 10
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 10 10
合计 450 360

设计与实现
Check完成论文查重功能

  • mian函数为主要的执行函数
  • generateWordsFrequency用来生成单词频率映射
  • calculateSimilarity用来计算相似度
  • writeToFile用来将结果写入文件

CheckTest用于单元测试

性能改进
这个进行优化或可能存在性能不足的地方有以下几点:

  1. 读取文件操作:程序中使用的文件读取操作是同步的,也就是阻塞的。如果读取大文件,这可能会导致程序在等待操作完成时无法进行其他任务。为此,可以将文件读取操作改为异步的,例如使用Java NIO(非阻塞I/O)库。
  2. 计算相似度:在计算文件的单词频率向量大小时,程序对每个文件都进行了完全独立的计算。这在文件数量增加、复杂性增加时可能会成为性能瓶颈。可以考虑使用并行处理方法,如Java流(Java 8 及以后)中并行流的使用,让计算任务在多核心的机器上并行执行,从而提高性能。
  3. 错误处理:当前的错误处理方式只是简单的输出堆栈信息。这并不是一个很好的做法,可能需要更复杂的错误处理和恢复策略。对于文件操作,应当处理各种可能的异常,例如文件未找到、无法读取、无法写入等等。对于其他可能的异常(如算法异常、类型转换异常、资源耗尽等),也应当有相应的处理方式。
  4. 代码重用和模块化:代码中有几个重复的代码块,例如读取文件和处理IO异常的部分。这些部分可以被重构为单独的方法,以增强代码的重用性和可读性。
  5. 对于HashMap,在并发环境下可能会存在线程安全的问题。如果需要提供线程安全性,可以考虑使用并发集合类,比如ConcurrentHashMap。

单元测试
测试函数,主要针对论文查重的三个方法进行测试



单元测试使用的工具是Junit,需要导入相关的依赖

覆盖率

异常处理
检查输入的文件数量是否正常

posted on 2024-03-14 13:59  0turnsole0  阅读(13)  评论(0编辑  收藏  举报

导航