这个作业属于哪个课程 | 2301-计算机学院-软件工程社区-CSDN社区云 |
---|---|
这个作业要求在哪里 | 团队作业—beta冲刺+事后诸葛亮-CSDN社区 |
这个作业的目标 | 记录beta冲刺Day2 |
团队名称 | 熬夜会秃头 |
团队置顶集合随笔链接 | 熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 |
目录
一、团队成员会议总结
1、成员工作进度
2、工作记录展示
3、SCRUM会议照片
二、PM报告
1. 工作进度估计
2、燃尽图
3. 工作总量变化
4. 项目最新进展
一、团队成员会议总结
1、成员工作进度
组员 | 今日进展: | 耗时(min) | 存在的问题/遇到的困难: | 明日计划: | 心得体会: |
陈少桐 | 引入axios,并且封装一个请求拦截器,以便用于请求的预处理,便于直接添加token,完成相册打开图片的处理,完成大文件的md5计算设置以及将文件数据转化为字符串。 | 240 | 无 | 完成剩余接口 | 放弃uni自带的请求果然是正确的,引入axios后请求直接嘎嘎通,并且偶然看到拦截器这一东西,发现可以简化代码量,就去尝试了一下。 |
梁菲汎 | 修改之前不符合代码规范的前端页面 | 100 | 无 | 将界面修改完,并且编写落下的接口 | 要加紧完成之前不遵守代码规范造成损失的代码,并且尽快与后端对接,以后一定要认真核对代码规范,多与组员交流 |
陈知菲 | 为项目的文件列表查看、文件的下载新增了缓存机制 | 260 | 无 | 完善后端功能 | 学习了spring-boot-starter-cache Spring缓存机制集成redis的使用,了解了@Cacheable,@CachePut,@CacheEvict注解的作用与区别 |
李恒欣 | 完善前后端接口交互 | 60 | 无 | 编写未完成部分和新增功能的接口 | 对json流有了更深刻的理解,今天的接口编写更加顺畅了,也对json传递图片信息的方式有了一定的理解和认识 |
邱思源 | 对后端代码进行单元测试 | 60 | 需要对处理时间进行较准确合理的预估 | 对新实现的后端代码进行单元测试 | 对大量图片进行处理测试时容易出现超时现象,需要对处理时间进行较准确合理的预估 |
宋芳鑫 | 完善web端功能 | 45 | 无 | 进一步完善前端功能 | 功能一点点地在完善,最近这两天开发得还算顺利,不知道明天开始开发的视频处理功能还会不会那么顺利 |
张一凡 | 进行前端代码单元测试 | 70 | 网络环境的变化模拟测试较难完成 | 对新实现的前端代码进行单元测试 | 图片处理功能可能依赖于网络环境,需要模拟不同的网络环境,测试功能在各种情况下的表现。网络环境的模拟测试较难完成 |
林承桢 | 对新完成的模块进行功能测试,将完成的测试结果写入测试文档 | 65 | 无 | 继续进行功能测试,完善测试文档 | 图片部分的测试需要考虑因素较多,需要多思多想才能面面俱到 |
黄才栋 | 辅助进行APP端开发 | 90 | 对uniapp使用不够熟练 | 完善APP端功能 | 经过对uniapp相关知识的学习和有经验的大佬的带动和指导,可以在APP端的开发上帮上一定的忙了 |
谢怀广 | 核对已完成代码规范并制作项目燃尽图、记录工作进度 | 30 | 无 | 核对新增代码规范、制作项目燃尽图、记录工作进度 | 有了清晰明确的工作进度对照后,绘制项目燃尽图更加准确快捷 |
2、工作记录展示
存储、删除文件时更新缓存,取文件时无需访问磁盘,直接从缓存中读取
@Caching(cacheable = {@Cacheable(cacheNames = "fileCache",key = "#bucketId+#fileName", condition = "#flag==1", unless = "#result==null")},put = {@CachePut(cacheNames = "fileCache",key = "#bucketId+#fileName", condition = "#flag==2", unless = "#result==null")},evict = {@CacheEvict(cacheNames = "fileCache",key = "#bucketId+#fileName", condition = "#flag==3")}
)
public String getFile(String bucketId, String fileName,HttpServletResponse response, int flag) {String path = FileProperty.realPath + bucketId + "/" + fileName;Map<String, Integer> nvMap = bucketCache.getFileSetByName(bucketId, flag);Integer version = nvMap.get(path);File file = new File(path + "/" + version);if (file.exists()) {MappedByteBuffer buffer = null;BufferedOutputStream bos = null;try {FileChannel channel = new FileInputStream(file).getChannel();if (file.length() < 1024 * 1024 * 2) {byte[] bytes = new byte[(int) file.length()];buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, file.length());buffer.get(bytes);Cleaner cleaner = ((sun.nio.ch.DirectBuffer) buffer).cleaner();cleaner.clean();return Base64.getEncoder().encodeToString(bytes);} else if (response != null) {byte[] bytes = new byte[1024 * 1024];bos = new BufferedOutputStream(response.getOutputStream());for (int i = 0; i < file.length(); i += 1024 * 1024) {int size = (file.length() - i) < 1024 * 1024 ?(int) (file.length() - i) : 1024 * 1024;buffer = channel.map(FileChannel.MapMode.READ_ONLY, i, size);buffer.get(bytes, 0, size);bos.write(bytes, 0, size);bos.close();Cleaner cleaner = ((sun.nio.ch.DirectBuffer) buffer).cleaner();cleaner.clean();}}} catch (IOException e) {e.printStackTrace();} finally {Cleaner cleaner = ((sun.nio.ch.DirectBuffer) buffer).cleaner();cleaner.clean();}}return null;
}
存储、删除文件时更新桶的文件列表缓存,取文件列表时无需访问磁盘,直接从缓存中读取
@Caching(cacheable = {@Cacheable(cacheNames = "bucketCache",key = "#bucketId", condition = "#flag==1")},put = {@CachePut(cacheNames = "bucketCache",key = "#bucketId", condition = "#flag==2")},evict = {@CacheEvict(cacheNames = "bucketCache",key = "#bucketId", condition = "#flag==3")}
)
public Map<String, Integer> getFileSetByName(String bucketId, int flag) {return fileVersionScan(bucketId);
}@Caching(cacheable = {@Cacheable(cacheNames = "bucketCache-cold",key = "#bucketId", condition = "#fresh==false")},put = {@CachePut(cacheNames = "bucketCache-cold",key = "#bucketId", condition = "#fresh==true")}
)
public Map<String, Integer> getColdFileSetByName(String bucketId, Boolean fresh) {return coldFileVersionScan(bucketId);
}
3、SCRUM会议照片
二、PM报告
1. 工作进度估计
任务总量 | 已完成工作量 | 剩余工作量 |
59 | 16 | 43 |