# codeFriend_XCW_backend02 **Repository Path**: keepxcw/codeFriend_xcw_backend02 ## Basic Information - **Project Name**: codeFriend_XCW_backend02 - **Description**: 续写yupao_XCW_backend - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-07-07 - **Last Updated**: 2025-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
codeFriend匹配系统
### 介绍 codeFriend匹配,一个前后端分离的用户匹配系统,前端使用**Vite + Vue3 + Vant4**,后端使用**SpringBoot** + **Mybatis-plus**,使用**WebSocket**实现实时通信,并结合**腾讯云COS对象存储**完成短信发送和图片上传。 #### 前端地址 https://gitee.com/keepxcw/codefriend-frontend #### 后端地址: https://gitee.com/keepxcw/codeFriend_xcw_backend02 账号可以自行注册,一切聊天、评论需遵守中华人民共和国有关法律规定。 体验账号: 账号:AAAAA 密码:12345678 ### 项目背景 随着编程学习和开发实践的普及,越来越多的开发者希望寻找志同道合的代码伙伴进行协作学习与项目开发。然而,线下渠道受限,线上社区匹配效率低,难以实现高效对接。本项目旨在构建一个便捷、高效的代码伙伴匹配平台,帮助用户根据兴趣标签、技能水平等维度精准匹配伙伴,促进技术交流与团队协作。 ### 核心功能 1. 信息管理: 账号被用户注册通过之后可以登录系统来使用。 用户可以自行修改和管理自己的个人信息。 2. 标签匹配:用户可自主设置技能与需求标签,系统据此进行筛选,为他们匹配合适的团队伙伴。 3. 队伍管理:队伍可以被用户创建,队伍信息可被修改,也可删除队伍等操作;管理员可以查看所有队伍并管理所有队伍。 4. 用户关注与取关: 用户能够选择关注其他用户,同时也能选择取消关注。 此外,他们还可以浏览自己的粉丝列表以及关注列表。 5. 实时聊天:用户可以进行私聊、队伍群聊、大厅公聊。 6. 搜索功能:按标签精准搜索用户,模糊搜索用户和队伍。 7. 用户管理:管理员可以对用户进行管理,进行封号等操作。 8. 用户反馈:反馈可以被用户提交,管理员可以查看用户反馈。 ### 技术选型 **前端** \- Vue 3 \- Vite 脚手架 \- Vant UI 移动端组件库 \- Axios 请求库 **后端** \- JAVA SpringBoot 框架 \- MySQL 数据库 \- Mybatis-Plus \- Mybatis X \- Redis缓存 \- Redisson 分布式锁 \- Spring Scheduler定时任务 \- Swagger + Knife4j 接口文档 \- Gson JSON序列化库 \- 最短编辑距离算法、Jaccard相似度算法、余弦相似度算法 \- COS \- WebSocket ### 项目架构 项目架构图如下  系统功能图  ### 项目亮点 1. 用户登录:使用 Redis 实现分布式 Session,解决集群间登录态同步问题; 2. 对于项目中复杂的集合处理(比如为队伍列表关联已加入队伍的用户),使用 Java 8 Stream API 和 Lambda 表达式来简化编码。 3. 使用 Redis 缓存首页高频访问的用户信息列表,将接口响应时长从 12520ms缩短至400ms。且通过自定义 Redis 序列化器来解决数据乱码、空间浪费的问题。 4. 为解决首次访问系统的用户主页加载过慢的问题,使用 Spring Scheduler 定时任务来实现缓存预热,并通过分布式锁保证多机部署时定时任务不会重复执行。 5. 为解决同一用户重复加入队伍、入队人数超限的问题,使用 Redisson 分布式锁来实现操作互斥,保证了接口幂等性。 6. 通过融合编辑距离算法、Jaccard相似度算法与余弦相似度算法,系统能够从字符相似性、集合相似性及语义相似性三个维度综合计算用户标签匹配度,使得匹配效率和精确度都显著提升。 7. 使用 Knife4j + Swagger 自动生成后端接口文档,并通过编写 ApiOperation 等注解补充接口注释,避免了人工编写维护文档的麻烦。 8. 使用本地+云服务储存用户头像,并自定义cdn加速域名指向项目专用储存空间。 9. 使用WebSocket在单个TCP连接上进行全双工通信,创建持久性的连接,实现队伍聊天室中的实时聊天。 10. 前端使用 Vant UI 组件库,并封装了全局通用的 Layout 组件,使主页、搜索页、组队页布局一致、并减少重复代码。 11. 封装前端卡片组件,对数据做统一处理,减少重复代码。 #### 匹配算法简介 在 `AlgorithmUtils` 类中,我们结合了多种字符串相似度算法来计算两个字符串列表之间的相似度。这些算法分别是: 1.**编辑距离(Edit Distance)**: - **原理**: 编辑距离指的是将一个字符串转换成另一个字符串所需的最小操作次数。允许的操作包括插入、删除和替换字符。 - **实现**: 使用动态规划方法计算两个字符串列表之间的编辑距离,最后通过标准化使得编辑距离相似度值在 [0, 1] 之间。 2.**Jaccard 相似度(Jaccard Similarity)**: - **原理**: Jaccard 相似度是用于衡量两个集合之间的相似度的统计量。其值为两个集合的交集大小与并集大小的比值。 - **实现**: 在 `AllUtils` 类中,首先将两个列表转换为集合,然后计算它们的交集和并集,并通过它们的大小比值计算出 Jaccard 相似度。 3.**余弦相似度(Cosine Similarity)**: - **原理**: 余弦相似度是通过计算两个向量之间的余弦值来衡量它们之间的相似度。值越接近1,表示两个向量越相似。 - **实现**: 将两个字符串列表转换为词频向量,然后计算两个向量的点积和范数,最后通过它们的比值计算余弦相似度。 4.**IK 分词后的 Jaccard 相似度**: - **原理**: 针对含有中文的字符串列表,使用 Elasticsearch 的 IK 分词器进行分词后再计算 Jaccard 相似度。此过程通过将字符串进行更细粒度的词汇分割,增强中文语境下的匹配精度。 - **实现**: 首先提取字符串中的中文字符,然后使用 IK 分词器对其进行分词,最后计算分词后的 Jaccard 相似度。 综合匹配得分 `AlgorithmUtils` 中的 `sorce` 方法综合使用了上述几种相似度算法,通过加权平均的方式来计算最终的相似度得分: - 编辑距离占比50%,因为它能够准确衡量两个字符串列表的整体差异。 - Jaccard 相似度占比30%,用于衡量两个列表的共同特征。 - 余弦相似度占比20%,用于反映词频分布的相似性。 - 对于含中文的列表,还会额外计算 IK 分词后的 Jaccard 相似度,进一步提高中文场景下的匹配精度。 ### 数据库设计 #### 逻辑结构设计 数据库的逻辑结构设计主要在于提取自需求分析阶段的用户角色与信息实体,深入探究其间关联并将其转化为实体模型。在此平台中,定义了如下6个实体: 1.这里是列表文本用户信息表:(id、用户昵称、账号、个人介绍、用户头像、性别 、密码、标签、电话、邮箱、用户状态、创建时间、更新时间、是否删除、用户类型)。 2.队伍信息表:(id、队伍名称、描述、最大人数、过期时间、队伍创建者、队伍状态、密码、创建时间、更新时间、是否删除、队伍头像、队伍已加入用户数)。 3.用户队伍关系表:(id、用户id、队伍创建人、队伍id、加入时间、创建时间、更新时间、是否删除)。 4.关注关系表:(id、用户id、队伍创建人、队伍id、加入时间、创建时间、更新时间、是否删除)。 5.反馈表:(id、用户id、账号、账号、评分、建议、创建时间、是否删除)。 6.聊天表:(聊天记录id、发送者id、接收者id、消息、聊天类型、是否已读、创建时间、更新时间、队伍id、是否删除)。 #### ER图  关系说明: (1)用户和用户队伍关系之间是一对多的关系,表示一个用户可以加入多个队伍。 (2)队伍和用户队伍关系之间是一对多的关系,表示一个队伍可以包含多个用户。 (3)用户和关注关系信息之间是一对多的关系,表示一个用户可以关注多个其他用户。 (4)用户和反馈之间是一对多的关系,表示一个用户可以提交多个反馈。 (5)用户和聊天之间是一对多的关系,表示一个用户可以发送和接收多条消息。 (6)队伍和聊天之间是一对多的关系,表示一个队伍可以有多个聊天记录。 ### 项目主要功能演示 #### 1. 登录功能   #### 2. 修改个人信息功能    #### 3. 关键词搜索功能  #### 4. 标签搜索功能   #### 5. 推荐用户功能  #### 6. 查看粉丝功能   #### 7. 查看我的关注功能  #### 8. 查看队伍功能  #### 9. 创建队伍功能   #### 10. 聊天功能功能    #### 11. 匹配用户功能  #### 12.关注、取关、查看粉丝/关注者功能  #### 13. 管理功能 