Skip to content

项目

更新: 2/8/2025 字数: 0 字 时长: 0 分钟

速配

项目地址

前端 https://github.com/lihuibear/friend-frontend

后端 https://github.com/lihuibear/friend-backed

项目介绍

本项目是一个基于 Vue 3Spring Boot 2 的移动端网站,旨在为用户提供高效、便捷的社交和组队功能。项目核心功能包括用户管理、按标签检索用户、推荐相似用户、组队等。通过合理的技术选型和优化,系统在性能、可维护性和用户体验方面都得到了显著提升。

技术栈

  • 前端: Vue 3
  • 后端: Spring Boot 2
  • 数据库: MySQL
  • 缓存: Redis
  • 分布式锁: Redisson
  • 接口文档: Knife4j + Swagger

核心功能

  1. 用户管理:

    • 实现了用户的注册、登录、信息修改等基础功能。
    • 支持用户标签的添加和修改,便于后续的检索和推荐。
  2. 按标签检索用户:

    • 用户可以通过标签筛选其他用户,系统会根据标签匹配度进行排序。
    • 使用编辑距离算法计算用户标签的相似度,确保推荐结果的准确性。
  3. 推荐相似用户:

    • 基于用户的标签信息,系统会推荐与其兴趣相似的其他用户。
    • 通过优先队列优化了 TOP N 相似用户的筛选过程,减少了内存占用。
  4. 组队功能:

    • 用户可以创建队伍,并邀请其他用户加入。
    • 使用 Redisson 分布式锁 解决了同一用户重复加入队伍、队伍人数超限等问题,保证了接口的幂等性。

性能优化

  1. 缓存预热:

    • 针对首次访问系统的用户主页加载过慢的问题,引入了 Spring Scheduler 定时任务 进行缓存预热。
    • 通过 分布式锁 确保在多机部署环境下,定时任务不会重复执行,避免了缓存数据的重复加载。
  2. 集合处理优化:

    • 在处理复杂的集合操作时(如为队伍列表关联已加入队伍的用户),使用了 Java 8 Stream APILambda 表达式 ,简化了代码逻辑,提升了代码的可读性和可维护性。
  3. 分布式锁:

    • 在组队功能中,使用 Redisson 分布式锁 保证了高并发场景下的数据一致性,避免了同一用户重复加入队伍或队伍人数超限的问题。

接口文档与维护

  • 使用 Knife4j + Swagger 自动生成后端接口文档,减少了手动编写文档的工作量。

Released under the MIT License.