# dawn-back-end **Repository Path**: hq-li/dawn-back-end ## Basic Information - **Project Name**: dawn-back-end - **Description**: dawn论坛项目的后端部分 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-11 - **Last Updated**: 2024-04-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 知识社区 ## 介绍 “知识社区”是一款由个人独立编写的单体架构的论坛项目,分为 Web 前台和后台管理两部分,主要功能有个性化文章推荐、文章多级评论、站内私聊等。 注意:这里仅有项目后端代码,前端代码:[https://gitee.com/hq-li/dawn-front-end](https://gitee.com/hq-li/dawn-front-end) ## 项目截图 ![输入图片说明](image/img1.png) ![输入图片说明](image/img2.png) ![输入图片说明](image/img3.png) ![输入图片说明](image/img4.png) ![输入图片说明](image/img5.png) ![输入图片说明](image/img6.png) ![输入图片说明](image/img7.png) ![输入图片说明](image/img8.png) ![输入图片说明](image/img9.png) ![输入图片说明](image/img10.png) ![输入图片说明](image/img11.png) ## 架构设计 ![输入图片说明](https://foruda.gitee.com/images/1711950046223006900/c23545c0_13745148.png "屏幕截图") ## 技术选型 前端:Vite + Vue3 + Axios + Pinia + Vue Router + wangEditor + Element Plus 后端:JDK1.8 + Spring + SpringMVC + MyBatis + SpringBoot + MySql + Redis + WebSocket + 阿里云对象存储OSS ## 角色权限管理 角色权限管理采用 RBAC 继承模型 暂时仅分为4个角色: 1.管理员(拥有但不限于审核员的所有权限) 2.审核员(拥有但不限于用户的所有权限) 3.用户(拥有但不限于游客的所有权限) 4.游客 ![输入图片说明](https://foruda.gitee.com/images/1711950494328000155/3676afb7_13745148.png "屏幕截图") ## 功能模块 ### 后台 #### 分类管理 对文章分类进行新增、编辑和删除操作,此外还可选择是否将分类进行折叠 #### 文章管理 对文章进行条件分页查询、删除、详情预览、下架操作,此外还可选择是否将文章封面图片置于轮播图展示 #### 用户管理 对用户进行条件分页查询、删除、修改用户角色(改变权限)、启用或禁用用户账户 #### 评论管理 对评论进行条件分页查询、删除、详情预览 #### 文章审核 对用户发布的文章进行审核,若拒绝通过,需要说明拒绝理由 ##### 审核流程介绍 ![输入图片说明](https://foruda.gitee.com/images/1711950979261766915/d4401022_13745148.png "屏幕截图") #### 审核历史 对已审核的文章进行条件分页查询、历史详情预览 ### 前台 #### 登录注册 注册登录之后会解锁用户的相关权限,此外,通过 JWT + Redis 实现限制同一账户登录自定义人数功能 登录流程如下: ![输入图片说明](image/image12.png) #### 文章模块 用户可发布文章,并对个人文章进行修改、重新发布、删除操作 ##### 文章排序 采用了 基于热度的排序算法 + 内容过滤算法 进行排序; 注意:用户刚注册时,由于没有历史交互数据,使用的是基于热度的排序算法,随着历史交互数据的增加,将结合内容过滤算法,进行个性化推荐 ###### 排序算法 对于游客:采用基于热度的排序算法 对于用户:采用基于热度的排序算法 + 内容过滤算法(实现个性化推荐) **基于热度的排序算法** 热度算法:Score = ( S0(Type) + S(Users) ) / T(Time); 1. 初始热度S0: 按照类别给予不同的初始热度,让用户关注度高的类别获得更高的初始热度分,从而获得更多的曝光 分类表增加初始热度系数cloutFactor, 用于每个分类的初始热度计算: S0(Type) = S0 * cloutFactor 2. 用户行为分S(Users): S(Users) = (1*Browse + 5*like + 5*collection + 10*comment)/DAU * N(固定数) DAU(日活跃用户数): 每天阅读的用户数 N(固定数):用户行为系数(该系数越大,用户行为对热度的影响越大,一般估计一下用户规模即可确定该值) 3. 热度随时间的衰减 T(Time) = e ^ (k*(T1 - T0)) 其中T0是发布时间,T1是当前时间; k:时间衰减指数系数 参考文章:https://zhuanlan.zhihu.com/p/27905091 **内容过滤算法** 对用户的历史交互行为(浏览、点赞和收藏等)进行分析,计算出用户对不同分类的偏好程度,从而按比例增加偏好分类下文章的初始分,实现个性化推荐 #### 点赞模块 可对文章或评论进行点赞或取消点赞操作; #### 收藏模块 可对文章进行收藏或取消收藏操作; #### 评论模块 用户可对文章、评论进行评论 ##### 评论排序 评论暂时仅考虑基于热度的排序算法; #### 站内私聊 用户可在文章下方评论区与其他用户进行私聊,聊天记录将被保存 #### 个人空间 可以查询个人已发布、待审核、草稿状态的文章,以及点赞、收藏的文章 #### 个人设置 可对个人信息进行设置,包括基本信息、头像设置、密码重置 #### 文件上传 通用功能,用于将图片文件上传到 阿里云OSS 进行远程存储 ### 待优化功能 #### 文章浏览 **基于热度的推荐算法** :初始热度S0还可以考虑,对于重大事件的报道,如何让它入库时就有更高的热度,可以采用热词匹配的方式 即对大型新闻站点的头条,Twitter热点,竞品的头条做监控和扒取,并将这批新闻的关键词维护到热词库并保持更新;每条新闻入库的时候,让新闻的关键词去匹配热词库,匹配度越高,就有越高的初始热度分。 这样处理后,重大事件发生时,Twitter和门户网站的争相报道会导致热词集中化,所有匹配到这些热词的新闻,即报道同样事件的新闻,会获得很高的初始热度分。 **内容过滤算法** :可以通过提取文章关键字,作为文章的标签,从而对用户进行更加精准的推荐 #### 评论浏览 可以增加考虑对不同角色的评论赋予不同的用于排序的分值,比如有重大影响力的公众人物或作者等应该极大增加分值,因为用户更希望能看到这些人的评论