第六周个人周报-197241-彭明喜

197241-彭明喜 2026-05-05 16:47:36

一、本周计划任务及完成情况 

任务预计花费时间实际花费时间
新增分类功能2h1.5h
新增排行功能2h2.5h
新增个人删除功能1h1h

二、个人工作存在问题及应对措施

1.存在问题:

——1)实现分类功能时,点评与分类的关联关系设计不合理(直接将分类名称存入点评表),导致修改分类名称时需要同步更新大量点评记录。

——2)排行功能中,热度排序需要综合点赞数、评论数、浏览数,但不同指标的权重设定缺乏依据,且实时计算导致数据库压力大。

——3)个人删除功能未做级联操作,删除点评后关联的评论、图片等外键数据未处理,造成数据库脏数据。

2.应对措施:

——1)采用分类表与点评表外键关联(点评表存分类ID),修改分类名称只需改分类表;学习MyBatis-Plus的级联查询,避免N+1问题。

——2)定义热度分 = 点赞数×0.5 + 评论数×0.3 + 浏览数×0.2,并定期(每小时)计算缓存到Redis,排行榜直接从缓存读取;使用ORDER BY多字段排序(hot_score DESC, create_time DESC)。

——3)在删除业务中,先删除关联的评论和图片记录(或设置外键ON DELETE CASCADE),再删除点评本身;使用Spring事务@Transactional保证原子性。

三、本周学习内容

1.数据关联与级联操作:理解数据库外键约束(ON DELETE CASCADE / SET NULL);学习MyBatis-Plus中处理一对多关系的@TableField(exist=false)配合联表查询;掌握事务管理,确保删除、更新多表时数据一致性。

2.多策略排序算法:实现基于多字段的排序(热度、时间、评分);学习权重调优方法,并支持前端切换排序方式(如“最新”“最热”“最高分”);了解Redis Sorted Set存储排行榜。

3.权限控制与安全验证:在删除操作中验证当前登录用户与点评作者ID是否一致,防止越权删除;使用Shiro或Spring Security的权限注解(@PreAuthorize);补充JWT中用户身份解析

四、个人感悟

本周新增了分类、排行和删除功能,让我对数据关联有了更深的体会。一开始为了偷懒直接在点评表存分类名称,结果测试修改分类时傻眼了——几十条点评需要逐条更新。改为外键关联后,不仅修改方便,查询也能用分类ID快速筛选。排行功能的权重设定是个小挑战,我参考了常见社区的做法(点赞权重最高,评论次之,浏览最低),然后用一个定时任务每分钟计算一次热度,写入Redis,排行榜加载几乎瞬间完成。个人删除功能看起来简单,但涉及到评论、图片的级联清理,用了@Transactional后,要么全删要么全不删,避免残留数据。另外,权限控制不能只在前端隐藏按钮,后端必须再次校验用户身份——我写了一个注解@CheckOwnership,在AOP中检查当前用户是否有权操作。

...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

259

社区成员

发帖
与我相关
我的任务
社区描述
CUG软件工程基础学习社区
团队开发软件工程敏捷流程 高校 湖北省·武汉市
社区管理员
  • EasonBeckham
  • Lucky_Limp
  • h6ldZywoo
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧