柚见-----伙伴匹配系统(第一期)

需求分析

  1. 添加标签,标签的分类(有哪些标签,如何分类标签),学习方向java/c++,工作/大学
  2. 主动搜索,允许用户根据标签去搜索其他用户
    redis缓存
  3. 组队:
    创建队伍 加入队伍 根据标签查询队伍 邀请其他人
  4. 允许用户修改标签
  5. 推荐功能
    相似度计算算法+本地分布式计算

技术栈

前端

  1. Vue3开发框架(提高页面开发效率)
  2. VantUI(基于Vue 的移动端组件库)
    react版本 Zent
  3. Vite (打包工具)
  4. Nginx来单机部署
  5. 其他

后端

  1. java编程语言+springBoot 框架
  2. SpringMVC + MybatisPlus
  3. Mysql数据库
  4. Redis缓存
  5. Swagger + Knifee4j
  6. 其他

前端项目初始化

用脚手架初始化项目

  1. Vue-CLI介绍 | Vue CLI (vuejs.org)
  2. Vite 开始 | Vite 官方中文文档 (vitejs.dev)

开始 | Vite 官方中文文档 (vitejs.dev)

在这里插入图片描述

  1. vue
  2. 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

根据文档做

  1. npm i unplugin-vue-components -D

2.修改vite.config.ts 文件

在这里插入图片描述

一个有意思的说法:
html 像一面墙 ,app.vue是挂在墙上的挂饰,#app说明了挂饰的位置

3.cv组件代码,测试一下是否成功
在这里插入图片描述

前端主页

开发页面经验

  1. 先参考其他网站
  2. 由整体到局部
  3. 想清楚页面要做成什么样子,再写代码

设计

导航条:展示当前页面名称
主页搜索框==>搜索页==>搜索结果页(标签筛选页)
内容:
tab栏:

  • 主页(推荐页+广告)
    搜索框,banner,推荐信息流
  • 队伍页
  • 用户页
    消息暂时考虑发邮件

简单开发一下

  1. 新增layouts文件夹
    很多页面都要复用组件样式,重复写很麻烦,不利于维护,于是抽象出一个通用的布局
  2. 新建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

在这里插入图片描述

  • 添加索引
    在这里插入图片描述
    在这里插入图片描述

用户表(借用之前的表)

用户标签如何记录?

  1. 直接在用户表增加tags字段
    存json字符串 [‘java’,‘男’]
    优点: 查询方便,不用新建关联表(可能很多系统会使用,标签是用户的固有属性)
    查询用户列表:查关系表拿到100个用户的标签id,再根据id去查询标签
    缺点:用户表多一列,查询变慢?(性能低,可以用缓存)

alter table user add COLUMN tags varchar(1024) null comment ‘标签列表’;

  1. 加一个关联表,记录用户与标签的关系
    关联表的应用场景:查询灵活,可以正查反查
    缺点: 多建一个表,要多维护一个表
    重点: 企业大项目开发中尽量减少关联查询,影响扩展性,会影响查询性能

后端 接口

cv出来记得把.idea文件删掉
在这里插入图片描述

搜索标签

两种查询:

  1. sql查询
  2. 内存查询
  1. 如果参数可以分析,根据用户的参数来选择查询方式,比如标签数
  2. 如果参数不可以分析,并且数据库连接足够,内存空间足够,可以并发查询,谁先返回用谁
  3. 可以sql查询与内存计算相结合,先用sql过滤掉tags

需求

  1. 允许用户传入多个标签,多个标签都存在的时候才搜索 and
    like %张% and like %java%
  2. 允许用户传入多个标签,任何一个标签存在就能搜索出来 or
    like %张% or like %java%

1.sql 查询

  • 测试类
    在这里插入图片描述

  • 记得user类添加字段 tags,然后相应的文件修改

    2.内存查询

解析json字符串
序列化: 把java对象 转换为json
反序列化: 把json,转换为java对象
json 序列化库:
fastjson alibaba(ali出品)
gson
jackson
kyro

  • 添加gson序列化依赖
    在这里插入图片描述

  • 先查询所有用户,再判断内存中是否包含要求的标签
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值