需求分析
- 添加标签,标签的分类(有哪些标签,如何分类标签),学习方向java/c++,工作/大学
- 主动搜索,允许用户根据标签去搜索其他用户
redis缓存 - 组队:
创建队伍 加入队伍 根据标签查询队伍 邀请其他人 - 允许用户修改标签
- 推荐功能
相似度计算算法+本地分布式计算
技术栈
前端
- Vue3开发框架(提高页面开发效率)
- VantUI(基于Vue 的移动端组件库)
react版本 Zent - Vite (打包工具)
- Nginx来单机部署
- 其他
后端
- java编程语言+springBoot 框架
- SpringMVC + MybatisPlus
- Mysql数据库
- Redis缓存
- Swagger + Knifee4j
- 其他
前端项目初始化
用脚手架初始化项目
- vue
- ts(在js的基础上增加了一些规范,例如继承)
“dev”:开发环境
“build”:“vue-tsc(将ts转换为js) && vite build(打包)”
“preview”: 模拟线上环境
“devDependencies”:只在开发阶段使用到
启动项目
命令行输入
安装依赖:npm install
出现 node Modules 和 package-lock-json文件
启动:npm run dev
整合组件库Vant
这里根据官网选择按需引入方式
快速上手 - Vant 3 (gitee.io)
安装 vant : npm i vant
根据文档做
- npm i unplugin-vue-components -D
2.修改vite.config.ts 文件
一个有意思的说法:
html 像一面墙 ,app.vue是挂在墙上的挂饰,#app说明了挂饰的位置
3.cv组件代码,测试一下是否成功
前端主页
开发页面经验
- 先参考其他网站
- 由整体到局部
- 想清楚页面要做成什么样子,再写代码
设计
导航条:展示当前页面名称
主页搜索框==>搜索页==>搜索结果页(标签筛选页)
内容:
tab栏:
- 主页(推荐页+广告)
搜索框,banner,推荐信息流 - 队伍页
- 用户页
消息暂时考虑发邮件
简单开发一下
- 新增layouts文件夹
很多页面都要复用组件样式,重复写很麻烦,不利于维护,于是抽象出一个通用的布局 - 新建BasicLayout.vue文件
setup语法糖:
不用return,就可以暴露给页面
- 不知道为什么按需引入没有样式
我去,原来是App.vue里面的.style样式没删造成的
插槽:
类似拼图,拼图中缺了某一块就插入,
或者覆盖原有东西
数据库表设计
标签的分类(有哪些标签,如何把标签进行分类)
标签表(分类表)
用标签,不用分类,更灵活
标签
性别:男、女
方向: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字段
存json字符串 [‘java’,‘男’]
优点: 查询方便,不用新建关联表(可能很多系统会使用,标签是用户的固有属性)
查询用户列表:查关系表拿到100个用户的标签id,再根据id去查询标签
缺点:用户表多一列,查询变慢?(性能低,可以用缓存)
alter table user add COLUMN tags varchar(1024) null comment ‘标签列表’;
- 加一个关联表,记录用户与标签的关系
关联表的应用场景:查询灵活,可以正查反查
缺点: 多建一个表,要多维护一个表
重点: 企业大项目开发中尽量减少关联查询,影响扩展性,会影响查询性能
后端 接口
cv出来记得把.idea文件删掉
搜索标签
两种查询:
- sql查询
- 内存查询
- 如果参数可以分析,根据用户的参数来选择查询方式,比如标签数
- 如果参数不可以分析,并且数据库连接足够,内存空间足够,可以并发查询,谁先返回用谁
- 可以sql查询与内存计算相结合,先用sql过滤掉tags
需求
- 允许用户传入多个标签,多个标签都存在的时候才搜索 and
like %张% and like %java% - 允许用户传入多个标签,任何一个标签存在就能搜索出来 or
like %张% or like %java%
1.sql 查询
-
测试类
-
记得user类添加字段 tags,然后相应的文件修改
2.内存查询
解析json字符串
序列化: 把java对象 转换为json
反序列化: 把json,转换为java对象
json 序列化库:
fastjson alibaba(ali出品)
gson
jackson
kyro
-
添加gson序列化依赖
-
先查询所有用户,再判断内存中是否包含要求的标签