当前位置: 首页 > news >正文

黑马头条学习笔记

Day01-环境搭建

项目概述

课程大纲

业务说明 

技术栈 

  • Spring-Cloud-Gateway : 微服务之前架设的网关服务,实现服务注册中的API请求路由,以及控制流速控制和熔断处理都是常用的架构手段,而这些功能Gateway天然支持

  • 运用Spring Boot快速开发框架,构建项目工程;并结合Spring Cloud全家桶技术,实现后端个人中心、自媒体、管理中心等微服务。

  • 运用Spring Cloud Alibaba Nacos作为项目中的注册中心和配置中心

  • 运用mybatis-plus作为持久层提升开发效率

  • 运用Kafka完成内部系统消息通知;与客户端系统消息通知;以及实时数据计算

  • 运用Redis缓存技术,实现热数据的计算,提升系统性能指标

  • 使用Mysql存储用户数据,以保证上层数据查询的高性能

  • 使用Mongo存储用户热数据,以保证用户热数据高扩展和高性能指标

  • 使用FastDFS作为静态资源存储器,在其上实现热静态资源缓存、淘汰等功能

  • 运用Hbase技术,存储系统中的冷数据,保证系统数据的可靠性

  • 运用ES搜索技术,对冷数据、文章数据建立索引,以保证冷数据、文章查询性能

  • 运用AI技术,来完成系统自动化功能,以提升效率及节省成本。比如实名认证自动化

  • PMD&P3C : 静态代码扫描工具,在项目中扫描项目代码,检查异常点、优化点、代码规范等,为开发团队提供规范统一,提升项目代码质量

虚拟机环境搭建 

用户名:root

密码:itcast

静态ip地址:192.168.200.130

mysql查看端口

netstat -aon|findstr "3306"

工程主体结构

登录->使用盐来配合验证  

redis会报错先注释掉

 

接口工具 

postman、swagger、knife4j

我用的是Apifox

swagger常用注解:

@Api:修饰整个类,描述Controller的作用

@ApiOperation:描述一个类的一个方法,或者说一个接口

@ApiParam:单个参数的描述信息

@ApiModelProperty:用对象接收参数时,描述对象的一个字段

ApUserLoginController

@RestController
@RequestMapping("/api/v1/login")
@Api(value = "app端用户登录", tags = "ap_user", description = "app端用户登录API")
public class ApUserLoginController {@Autowiredprivate ApUserService apUserService;@PostMapping("/login_auth")@ApiOperation("用户登录")public ResponseResult login(@RequestBody LoginDto dto){return apUserService.login(dto);}
}

LoginDto 

@Data
public class LoginDto {/*** 手机号*/@ApiModelProperty(value="手机号",required = true)private String phone;/*** 密码*/@ApiModelProperty(value="密码",required = true)private String password;
}

网关

思路分析:

  1. 用户进入网关开始登陆,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录

  2. 用户登录成功,后台管理微服务签发JWT TOKEN信息返回给用户

  3. 用户再次进入网关开始访问,网关过滤器接收用户携带的TOKEN

  4. 网关过滤器解析TOKEN ,判断是否有权限,如果有,则放行,如果没有则返回未认证错误

 前端集成

作用: 

  • 通过nginx的反向代理功能访问后台的网关资源

  • 通过nginx的静态服务器功能访问前端静态页面

Day02

文章列表加载

三张表

 

app端文章列表

表的拆分-垂直拆分

垂直拆分:将一个表的字段分散到多个表中,每个表存储其中一部分字段。

优势

  1. 减少IO争抢,减少锁表的几率:查看文章概述与文章详情互不影响。
  2. 充分发挥高频数据的操作效率:对文章概述数据操作的高效率不会被操作文章详情数据的低效率所拖累。

拆分规则

  1. 把不常用的字段单独放在一张表
  2. 把text,blob等大字段拆分出来单独放在一张表
  3. 经常组合查询的字段单独放在一张表中

会遇到什么类路径找不到的  把target文件夹全部删掉,再次运行 

 ​​​

 freemarker

     FreeMarker 是一款 模板引擎

基础语法

1.注释<#--  -->

2.插值${..}

3.FTL指令<# >FTL指令</#> 

4.文本信息<#--freemarker中的普通文本-->

集合指令

<#list stus as stu><tr><td>${stu_index+1}</td><td>${stu.name}</td><td>${stu.age}</td><td>${stu.money}</td></tr>
</#list>

if指令

<#if ></if>

运算符

<b>算数运算符</b>
<br/><br/>100+5 运算:  ${100 + 5 }<br/>100 - 5 * 5运算:${100 - 5 * 5}<br/>5 / 2运算:${5 / 2}<br/>12 % 10运算:${12 % 10}<br/>
<hr>

比较运算符

  • =或者==:判断两个值是否相等.

  • !=:判断两个值是否不等.

  • >或者gt:判断左边值是否大于右边值

  • >=或者gte:判断左边值是否大于等于右边值

  • <或者lt:判断左边值是否小于右边值

  • <=或者lte:判断左边值是否小于等于右边值

空值处理 

1、判断某变量是否存在使用 “??”

2、缺失变量默认值使用 “!”

内建函数

语法:变量+?+函数名称

具体参考MD文档

对象存储服务MinIO

MinIO简介

对象存储的方式对比

存储方式优点缺点
服务器磁盘开发便捷,成本低扩展困难
分布式文件系统(MinIO)容易实现扩容复杂度高
第三方存储开发简单,功能强大,免维护收费

文章详情 

 

closing inbound before receiving peer‘s close_notify的解决办法-CSDN博客 

MP查询

Wrappers.<ApUser>lambdaQuery().eq(ApUser::getPhone, dto.getPhone())//1.获取文章内容
apArticleContentMapper.selectOne(Wrappers<ApArticleContent>lambdaQuery().eq(ApArticleContent::getArticleId, 1302862387124125698L));

 


http://www.mrgr.cn/news/79953.html

相关文章:

  • 【JVM】JVM基础教程(三)
  • 第 8 章 对象、类与面向对象编程
  • L0、L1与L2范数、核范数
  • Jenkins部署前后端项目
  • MySQL锁的类型有哪些
  • QT核心功能概览
  • 端点鉴别、安全电子邮件、TLS
  • paimon实战 -- 数据写入和更细底层数据流转过程解读
  • windows安装使用canal
  • TypeScript快速上手 (二)
  • Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用
  • 一文详解TCP协议 [图文并茂, 明了易懂]
  • linux/centOS7用户和权限管理笔记
  • 【在Linux世界中追寻伟大的One Piece】HTTP Session
  • Java-常用类
  • 【C++】string类
  • UE5基本数据类型
  • Luckysheet 实现 excel 多人在线协同编辑(全功能实现增强版)
  • 从根上理解 mysql -数据在表中是怎么存储的
  • location重定向和nginx代理