心链 — 伙伴匹配系统
介绍:帮助大家找到志同道合的伙伴,移动端 H5 网页(尽量兼容 PC 端)
需求分析
- 用户去添加标签,标签的分类(要有哪些标签、怎么把标签进行分类)学习方向 java / c++,工作 / 大学
- 主动搜索:允许用户根据标签去搜索其他用户
- Redis 缓存
- 组队
- 创建队伍
- 加入队伍
- 根据标签查询队伍
- 邀请其他人
- 允许用户去修改标签
- 推荐
- 相似度计算算法 + 本地分布式计算
技术栈
前端
- Vue 3 开发框架(提高页面开发的效率)
- Vant UI(基于 Vue 的移动端组件库)(React 版 Zent)
- Vite 2(打包工具,快!)
- Nginx 来单机部署
后端
- Java 编程语言 + SpringBoot 框架
- SpringMVC + MyBatis + MyBatis Plus(提高开发效率)
- MySQL 数据库
- Redis 缓存
- Swagger + Knife4j 接口文档
开发页面经验
- 多参考
- 从整体到局部
- 先想清楚页面要做成什么样子,再写代码
前端项目初始化
用脚手架初始化项目
# 使用yarn
yarn create vite
# 使用NPM
npm init vite@latest
整合组件库
Vant : Vant
前端主页 + 组件概览
设计
导航条:展示当前页面名称
主页搜索框 => 搜索页 => 搜索结果页(标签筛选页)
内容
tab 栏:
- 主页(推荐页 + 广告 )
- 搜索框
- banner
- 推荐信息流
- 队伍页
- 用户页(消息 - 暂时考虑发邮件)
开发
很多页面要复用组件 / 样式,重复写很麻烦、不利于维护,所以抽象一个通用的布局(Layout)
组件化
添加导航组件
底部Tabbar 标签栏
主页内容添加
数据库表设计
标签的分类(要有哪些标签、怎么把标签进行分类)
新增标签表(分类表)
建议用标签,不要用分类,更灵活。
性别:男、女
方向:Java、C++、Go、前端
正在学:Spring
目标:考研、春招、秋招、社招、考公、竞赛(蓝桥杯)、转行、跳槽
段位:初级、中级、高级、王者
身份:小学、初中、高中、大一、大二、大三、大四、学生、待业、已就业、研一、
研二、研三
状态:乐观、有点丧、一般、单身、已婚、有对象
字段:
id int 主键
标签名 varchar 非空(必须唯一,唯一索引)
上传标签的用户 userId int(如果要根据 userId 查已上传标签的话,最好加上,普
通索引)
父标签 id ,parentId,int(分类)
是否为父标签 isParent, tinyint(0 不是父标签、1 - 父标签)
创建时间 createTime,datetime
更新时间 updateTime,datetime
是否删除 isDelete, tinyint(0、1)
怎么查询所有标签,并且把标签分好组?按父标签 id 分组,能实现 √
根据父标签查询子标签?根据 id 查询,能实现 √
SQL 语言分类:
DDL define 建表、操作表
DML manage 更新删除数据,影响实际表里的内容
DCL control 控制,权限
DQL query 查询,select
https://www.cnblogs.com/fan-yuan/p/7879353.html
修改用户表
用户有哪些标签?
根据自己的实际需求来!!! 此处选择第一种
-
直接在用户表补充 tags 字段,[‘Java’, ‘男’] 存 json 字符串 优点:查询方便、不
用新建关联表,标签是用户的固有属性(除了该系统、其他系统可能要用到,标
签是用户的固有属性)节省开发成本查询用户列表,查关系表拿到这 100 个用
户有的所有标签 id,再根据标签 id 去查标签表。哪怕性能低,可以用缓存。缺
点:用户表多一列,会有点
-
加一个关联表,记录用户和标签的关系关联表的应用场景:查询灵活,可以正查
反查缺点:要多建一个表、多维护一个表重点:企业大项目开发中尽量减少关联
查询,很影响扩展性,而且会影响查询性能
开发后端接口
搜索标签
- 允许用户传入多个标签,多个标签都存在才搜索出来 and。like ‘%Java%’ and like ‘%C++%’。
- 允许用户传入多个标签,有任何一个标签存在就能搜索出来 or。like ‘%Java%’ or like ‘%C++%’
两种方式:
- SQL 查询(实现简单,可以通过拆分查询进一步优化)
- 内存查询(灵活,可以通过并发进一步优化)
- 如果参数可以分析,根据用户的参数去选择查询方式,比如标签数
- 如果参数不可分析,并且数据库连接足够、内存空间足够,可以并发同时查询,谁先返回用谁。
- 还可以 SQL 查询与内存计算相结合,比如先用 SQL 过滤掉部分 tag
建议通过实际测试来分析哪种查询比较快,数据量大的时候验证效果更明显!
解析 JSON 字符串:
序列化:java对象转成 json
反序列化:把 json 转为 java 对象
java json 序列化库有很多:
- gson(google 的)
- fastjson alibaba(ali 出品,快,但是漏洞太多)
- jackson
- kryo