知识点总结(一)

1. 谷粒商城–环境搭建–笔记一

1.1 修改CentOS默认yum源为国内yum镜像源

1.2 CentOS安装docker

1.3 docker常用命令

1.4 配置 docker 镜像加速

1.5 docker安装mysql5.7

1.6 docker安装redis

1.7 开发环境统一(maven,Idea&VsCode插件,git配置)

2. 谷粒商城–注册中心配置中心及网关–笔记二

2.1 nacos注意(启动单节点)

2.2 结合 SpringCloud Alibaba 我们最终的技术搭配方案

2.3 版本选择

2.4 项目中使用(服务注册中心)

2.5 open-feign使用

2.6 gateway网关

3. 谷粒商城–前端基础–es6–笔记三

3.1 let声明变量

3.2 const 声明常量(只读变量)

3.3 解构表达式

3.3.1 数组解构

3.3.2 对象解构

3.4 字符串扩展

3.4.1 几个新的api

3.4.2 字符串模板

3.5 函数优化

3.5.1 函数参数设置默认值

3.5.2 不定参数

3.5.3 箭头函数

3.6 对象优化

3.6.1 新增的 API

3.6.2 声明对象简写

3.6.3 对象函数属性简写

3.6.4 对象拓展运算符

3.6.4.1 拷贝对象(深拷贝)
3.6.4.2 合并对象

3.7 map 和 reduce

3.8 Promise

3.8.1 Promise 语法
3.8.2 处理异步结果
3.8.3 Promise 改造以前嵌套方式
3.8.4 优化处理

3.9 模块化

4. 谷粒商城-vue-笔记四

4.1 MVVM 思想

4.2 Vue.js是什么?

4.3 入门案例(HelloWorld)

4.4 指令

4.4.1 插值表达式

4.4.1.1Mustache 语法{{}}
4.4.1.2 插值闪烁
4.4.1.3 v-text 和 v-html
4.4.1.4 v-bind
4.4.1.5 v-modle
4.4.1.6 v-on
4.4.1.7 v-for
4.4.1.8 v-ifv-show
4.4.1.9 v-elsev-else-if

4.5 计算属性和侦听器

4.5.1 计算属性(computed)

4.5.2 过滤器(filters)

4.6 组件化

4.7 生命周期钩子函数

4.7.1 生命周期图示
4.7.2 钩子函数

4.8 vue模块化开发

5. 谷粒商城-树形目录开发-笔记五

5.1 listWithTree树形目录

5.2 使用npm install node-sass报错的问题

5.3 配置网关以及路径重写

5.4 网关统一配置跨域

5.5 拖动菜单时需要修改顺序和级别(前端)

6. 谷粒商城–品牌管理开发-笔记六

6.1 新增品牌管理菜单

6.2 前端页面

6.3 显示样式优化

6.4 云存储管理

6.4.1 为什么使用存储

6.4.2 登录注册阿里云

6.4.3 登录成功后

6.4.4 选择对象存储oss

6.4.5 开通对象存储服务 OSS

6.4.6 使用OSS

6.4.6.1 创建Bucket
6.4.6.2 后端集成上传测试
6.4.6.3 更为简单的使用方式,是使用SpringCloud Alibaba-OSS

6.5 阿里云对象存储上传方式

6.5.1 普通上传

6.5.2 服务器签名后前端直传

6.5.3 OSS跨域问题

6.6 品牌管理logo显示比例

6.7 关于新增按钮与批量按钮不显示问题

6.8 表单前端校验

6.9 JSR303校验

6.9.1 使用校验注解

6.9.2 使用校验注解@Valid,开启校验

6.9.3 测试

6.9.4 自定义的封装校验结果

6.9.5 统一异常处理

6.9.5.1 创建异常处理类
6.9.5.2 错误状态码
6.9.5.3 修改统一异常处理类

6.10 JSR303分组校验(完成多场景的复杂校验)

7. 谷粒商城–属性分组–笔记七

7.1 SPU与SKU

7.2 基本属性【 规格参数】 与销售属性

7.3 新增菜单

7.4 属性分组模块 attrgroup.vue

7.5 前端分类列表组件抽取 category.vue

7.5.1 完整示例

7.5.2 列表不显示问题

7.5.3 输入关键字进行过滤

7.5.4 子组件向父节点传值(利用事件)

7.5.4.1 子传值
7.5.4.2 父取值

7.6 将抽取的组件注册到attrgroup

7.6.1 导入

7.6.2 组件注册

7.6.3 使用

7.6.4 此部分代码

7.6.5 效果

7.7 新增表单

7.7.1 修改关联关系

7.7.2 新增/修改模态框

7.7.2.1 级联选择器 (父传子)
7.7.2.1.1 遇到的问题(三级子分类中没有子节点了导致数组为空)
7.7.2.2 级联回显

7.8 新增后端接口

8. 谷粒商城–平台属性模块–笔记八

8.1 品牌分类关联与级联更新

8.1.1 mybatis-plus分页组件未生效

8.1.2 模糊查询不生效问题

8.1.3 前端代码

8.1.4 品牌与分类关联

8.1.4.1 品牌分类关联列表查询接口
8.1.4.2 品牌分类关联新增接口
分库分表冗余数据出现的问题
8.1.4.2.1 品牌关联类目
1.品牌
2.类目

8.2 Object 划分

8.2.1 PO(persistant object) 持久对象

8.2.2 DO(Domain Object) 领域对象

8.2.3 TO(Transfer Object) , 数据传输对象

8.2.4 DTO(Data Transfer Object) 数据传输对象

8.2.5 VO(value object) 值对象

8.2.6 BO(business object) 业务对象

8.2.7 POJO(plain ordinary java object) 简单无规则 java 对象

8.2.8 DAO(data access object) 数据访问对象

8.3 属性分组模块

8.3.1 新建所需VO

8.3.1.1 原因
8.3.1.2 新建所需vo

8.3.2 属性分组相关功能接口

8.3.2.1 AttrService的功能接口
8.3.2.2 批量保存接口
8.3.2.3 批量删除关系接口

8.4 规格参数与销售属性模块

8.5 前端代码复制

9. 谷粒商城–商品发布–笔记九

9.1 基本信息页面

9.1.1 选择分类后品牌列表不显示问题

9.1.2 编写根据商品分类查询品牌列表接口

9.1.3 获取会员等级列表

9.1.3.1 网关配置
9.1.3.2 添加会员等级

9.2 规格参数页面

9.3 销售属性页面

9.3.1 根据分类id查出所有的分组以及这些组里面的属性

9.4 SKU信息页面

9.5 新增商品vo抽取

9.5.1 新增商品保存json

9.5.2 将json字符串格式化

9.5.3 生成JavaBean

9.5.4 使用lombok

9.5.5 完整示例

9.5.5.1 Attr
9.5.5.2 BaseAttrs
9.5.5.3 Bounds
9.5.5.4 BrandVo
9.5.5.5 Images
9.5.5.6 MemberPrice
9.5.5.7 Skus
9.5.5.8 SpuSaveVo

9.6 商品新增业务流程分析

9.6.1商品新增业务流程分析

9.7流程分析所需接口

9.7.1 保存spu基本信息

9.7.2 保存Spu的描述图片

9.7.3 保存spu的图片集

9.7.4 保存spu的规格参数

9.7.5 保存spu的积分信息(远程调用)

9.7.6 保存当前spu对应的所有sku信息

9.7.6.1 sku的基本信息
9.7.6.2 sku的图片信息
9.7.6.3 sku的销售属性信息
9.7.6.4 sku的优惠、满减等信息(远程调用)

9.8 分组批量启用模块,及设置模块最大内存

9.8.1 分组批量启用模块

9.8.2 设置模块最大使用内存

9.9 新增商品测试

9.9.1 mysql设置事务隔离级别(方便事务调试)

9.9.2 数据库自增,存入自己的数据

9.9.2.1 解决方案一
9.9.2.2 解决方法二
9.9.2.3 存入空图片地址问题

9.10 SPU检索

9.10.1 检索条件

9.10.2 后端增加接口

9.10.3 时间格式问题

9.10.4 重启并测试

9.11 SKU检索

9.11.1 检索条件

9.11.2 后端新增接口

9.11.3 重启并测试

10. 谷粒商城–仓库管理–笔记十

10.0 解决gulimall-ware模块分页插件未生效问题

10.1 启动gulimall-ware

10.1.1 配置主启动类

10.1.2 网关添加路由

10.1.3 启动成功

10.2 仓库维护模块查询

10.3 查询库存

10.4 采购需求

10.4.0 采购流程

10.4.1 采购需求查询

10.4.2 合并采购需求

10.4.2.1 未指定采购单查询
10.4.2.2 合并采购单
10.4.2.2.1 新增MergeVo对象
10.4.2.2.2 新增采购相关常量
10.4.2.2.3 新增合并接口

10.5 采购单

10.5.1 采购单查询(此部分视频没有)

10.5.2 采购单查询前端部分

10.5.3 领取采购单

10.5.3.1 新增PurchaseItemDoneVo对象
10.5.3.2 新增PurchaseDoneVo对象
10.5.3.3 领取采购单接口
10.5.3.4 测试

10.5.4 完成采购

10.5.4.1 远程调用商品服务增加商品库存
10.5.4.2 增加库存接口
10.5.4.3 完成采购接口
10.5.4.4 测试

10.6 SPU规格维护

10.6.1 点击规格404问题

10.6.2 根据spuid查询属性值查询接口

10.6.3 修改spuid对应的属性值接口

10.7.总结

10.8.至此基础篇已经完结,恭喜

11. 谷粒商城–elasticsearch–高级篇笔记一

11.1 elasticsearch是什么?

11.2 简介

11.3 基本概念

11.3.1 Index(索引)

11.3.2 Type (类型)

11.3.2.1 概念
11.3.2.2 ElasticSearch7-去掉type概念
11.3.2.3 Elasticsearch 版本升级问题(升级到8)

11.3.3 Document(文档)

11.3.4 倒排索引

11.4 Docker 安装ES 与 kibana

11.4.1下载镜像文件

11.4.2 创建实例

11.4.2.1创建ElasticSearch实例
11.4.2.2关于ElasticSearch的9200和9300端口区别
11.4.2.3创建Kibana实例

11.4.3设置es与Kibana在docker启动时启动

11.5 初步检索

11.5.1_cat

11.5.2索引(保存)一个文档

11.5.2.1 PUT方法(必须带id)
11.5.2.2POST方法(可以不带id)
11.5.2.3使用GET方法与使用PUT方法索引(保存)文档的区别

11.5.3查询指定id文档

11.5.4更新文档

11.5.4.1 POST更新方式一
11.5.4.2 POST更新方式二
11.5.4.3 PUT更新
11.5.4.3 更新同时增加属性
11.5.4.4 三种更新方式的特点

11.5.5删除指定id文档&索引

11.5.5.1删除指定id文档
11.5.5.2删除索引

11.5.6 bulk 批量 API

11.5.6.1 语法格式
11.5.6.2 复杂实例
11.5.6.3 样本测试数据

11.6 进阶检索

11.6.1 SearchAPI

11.6.1.1检索信息
11.6.1.1.1请求参数方式检索
11.6.1.1.2 uri+请求体进行检索

11.6.2 Query DSL

11.6.2.1 基本语法格式
11.6.2.1.1 查询结构
11.6.2.1.2查询示例
11.6.2.2 match匹配
11.6.2.3 match_phrase 短语匹配
11.6.2.4 multi_match 多字段匹配
11.6.2.5 bool 复合查询
11.6.2.5.1 must
11.6.2.5.2 should
11.6.2.5.3 must_not
11.6.2.5.4 filter 结果过滤
11.6.2.5.4 总结
11.6.2.6 term 非 text 字段检索
11.6.2.7 aggregations 聚合检索
11.6.2.7.1 年龄分布 并求出年龄的平均值
11.6.2.7.2 求出年龄分布,并在每个年龄求平均薪资
11.6.2.7.3 年龄分布,性别分布的基础上求平均值

11.6.3 Mapping

11.6.3.1 字段类型
11.6.3.2 映射
11.6.3.2.1 查看mapping信息
11.6.3.3 新版本改变
11.6.3.3.1 创建映射
11.6.3.3.2 添加新的字段映射
11.6.3.3.3 更新映射
11.6.3.3.4 数据迁移
11.6.3.3.4.1查询出想要修改的映射类型
11.6.3.3.4.2 新增一个新的索引
11.6.3.3.4.3 数据迁移

11.6.4 分词

11.6.4.1安装ik分词器
11.6.4.2 测试分词器
11.6.4.2.1使用默认分词器
11.6.4.2.2 使用ik_smart 分词器
11.6.4.2.3 使用ik_max_word 分词器
11.6.4.2.4总结
11.6.4.4.自定义词库
11.6.4.4.1 未自定义词库
11.6.4.4.2 自定义词库测试
11.6.4.4.2.1 创建词库
11.6.4.4.2.1 自定义词库

11.7 Elasticsearch-Rest-Client

11.7.1 为什么选择Elasticsearch-Rest-Client

11.7.2 SpringBoot整合

11.7.2.1 新增模块gulimall-search
11.7.2.2 新增配置类
11.7.2.3 测试

11.7.3 使用

11.7.3.0 新建商品索引映射
11.7.3.1 索引(新增) 数据
11.7.3.2 获取数据
11.7.3.3 聚合查询
11.7.3.3.1 年龄分布
11.7.3.4获取查询结果(转为对象)

注意:es数组的扁平化处理

11.8 安装nginx

11.8.1 随便启动一个 nginx 实例, 只是为了复制出配置

11.8.2 将容器内的配置文件拷贝到当前目录

11.8.3修改文件名称

11.8.4 删除原容器:

11.8.5 创建新的nginx

12. 谷粒商城–商品上架–高级篇笔记二

12.1 新增商品索引

12.2 上架接口

12.3 获取所有可检索的AttrId集合,包装成set

12.4 新增SkuEsModel.Attrs实体类

12.5 查出当前spuId对应的所有sku商品信息

12.6 发送远程调用查询库存是否有

12.6.1 封装SkuHasStockTo对象

12.6.1在gulimall-ware模块新增接口

12.6.2 新增远程调用接口

12.6.3 修改R

12.7 将数据发送给es进行保存

12.7.1 新增上架异常

12.7.2 新增es常量

12.7.3 在gulimall-search模块新增接口

12.7.4 新增远程调用接口

12.8 商品状态枚举

13. 谷粒商城–商城主页(类目)–高级篇笔记三

13.1. 首页代码

13.2. 导入thymeleaf依赖

13.3. 首页与静态资源复制

13.4. 重启gulimall-product服务

13.5. 编写查询一级目录列表接口

13.6. 修改首页

13.7. devtools

13.8. 商品二级分类三级分类 结构分析

13.9. 新增根据一级类目id查询二级三级分类

13.9.1 新增Catalog2Vo实体类

13.9.2 新增接口

13.9.3 新增查询出父ID为 parent_cid的List集合

13.9.4 修改请求

13.9.5 重启服务并测试

14. 谷粒商城–nginx–高级篇笔记四

14.1. nginx搭建域名访问 (反向代理)

14.1.1 动静分离

14.1.2 正向代理与反向代理

14.1.3 nginx与windows搭建域名访问环境

14.1.3.1 通过改host文件的方法就可以实现
14.1.3.2 配置host
14.1.3.3 域名测试
14.1.1.4 nginx搭建域名访问(nginx转发网关)
14.1.1.4.1 实现
14.1.1.4.1 nginx配置文件结构
14.1.1.4.2 http块配置上游服务器
14.1.1.4.3 server块配置域名监听并转发
14.1.1.4.4 网关服务配置
14.1.1.4.5 nginx反向代理hos

15. 谷粒商城–性能调优与压力测试–高级篇笔记五

15.1.压力测试

15.1.1 性能指标

15.1.2 JMeter 安装

15.1.3 JMeter 中文配置

15.1.4 JMeter 压测示例

15.1.4.1 添加线程组
15.1.4.2 添加 HTTP 请求
15.1.4.3 添加监听器
15.1.4.4 启动压测&查看分析结果

15.1.5 JMeter Address Already in use 错误解决

15.2. 性能监控

15.2.1 jvm内存模型

15.2.2 堆

15.2.2.1垃圾回收

15.2.3 jconsole 与 jvisualvm

15.2.3.1 jconsole
15.2.3.1.1直接cmd输入jconsole
15.2.3.3.2 首页情况
15.2.3.3.3 内存情况
15.2.3.2 jvisualvm
15.2.3.2.1 jvisualvm 能干什么
15.2.3.2.2 Visual GC插件安装
15.2.3.2.3 插件安装失败问题
15.2.3.2.4 重启jvisualvm效果如下

15.2.4 监控指标

15.2.4.1 中间件监控指标
15.2.4.2 数据库监控指标

15.3. 项目调优

15.3.1 优化中间件对性能的影响

15.3.1.1 对nginx进行压测
15.3.1.2 对网关进行压测
15.3.1.3 对简单服务进行压测
15.3.1.4 首页一级菜单渲染(thymeleaf 关闭缓存)
15.3.1.5 首页一级菜单渲染(thymeleaf 开启缓存)
15.3.1.6 首页一级菜单渲染(开缓存,加索引,关日志)
15.3.1.6 三级分类数据获取
15.3.1.7 三级分类数据获取(加索引)
15.3.1.8 三级分类数据获取(优化业务)
15.3.1.8.1 idea抽取方法
15.3.1.9 三级分类数据获取(使用redis作为缓存)
15.3.1.10 首页全量数据获取(包括静态资源)
15.3.1.11 Nginx+Gateway
15.3.1.12 Gateway+简单服务
15.3.1.12 全链路
15.3.1.13 动静分离
15.3.1.13.1 什么要动静分离
15.3.1.13.2 在nginx的html目录下新建一个static目录用来存放静态资源
15.3.1.13.3 修改之前的静态资源路径
15.3.1.13.4 在nginx配置静态资源的路径映射
15.3.1.13.5 测试
15.3.1.14 堆内存溢出问题

15.3.2 缓存与分布式锁

15.3.2.1 缓存
15.3.2.1.1 哪些数据适合放入缓存
15.3.2.1.2 本地缓存
15.3.2.1.3 分布式缓存(redis)
15.3.2.1.4 整合redis缓存测试
15.3.2.1.5 改造三级分类业务(redis缓存使用)
15.3.2.1.5.1 压测出内存泄露及解决
15.3.2.1.6 RedisTemplate底层原理
15.3.2.2 高并发下缓存失效问题
15.3.2.2.1 缓存穿透
15.3.2.2.2 缓存雪崩
15.3.2.2.3 缓存击穿 【分布式锁】
15.3.2.3 分布式锁
15.3.2.3.1 本地锁 synchronized
15.3.2.3.2 本地锁时序问题
15.3.2.3.3 本地锁在分布式场景的缺陷
15.3.2.3.4 分布式锁原理
redis set nx测试
分布式锁演进-阶段一
分布式锁演进-阶段二
分布式锁演进-阶段三
分布式锁演进-阶段四
分布式锁演进-阶段五
15.3.2.4 Redission 分布式锁
15.3.2.4.1 springboot整合Redission
15.3.2.4.2 可重入锁(Reentrant Lock)
15.3.2.4.3 lock看门狗原理 --redision如何解决死锁
15.3.2.4.4 读写锁(ReadWriteLock)可重入读写锁
15.3.2.4.5 信号量(Semaphore)
15.3.2.4.6 闭锁(CountDownLatch)
15.3.2.4.7 信号量与闭锁的区别
15.3.2.5 写操作—缓存数据一致性【必须满足最终一致性】
15.3.2.5.1 双写模式
15.3.2.5.2 失效模式
15.3.2.5.3 解决方案
15.3.2.6 SpringCache
15.3.2.6.1 基础概念
15.3.2.6.2 注解
15.3.2.6.3 SpEL表达式语法
15.3.2.6.4 整合SpringCache简化缓存开发
15.3.2.6.4.1 原理:
15.3.2.6.4.2 基础整合
15.3.2.6.4.3 @Cacheable细节设置
15.3.2.6.4.4 自定义缓存设置
15.3.2.6.4.5 自定义序列化原理
15.3.2.6.4.6 @CacheEvict使用
15.3.2.6.4.7 失效模式or双写模式
15.3.2.6.4.8 SpringCach

16. 谷粒商城–搜索服务–高级篇笔记六

16.1 搜索页面搭建

16.1.1 添加依赖

16.1.1 上传静态文件至/mydata/nginx/html/static/search目录下

16.1.2 将搜索页主页放在gulimall-search的templates目录下

16.1.3 修改index.html中的文件引入路径

16.1.4 SwitchHosts配置

16.1.5 测试一

16.1.6 nginx配置

16.1.7 配置网关

16.1.8 重启服务并测试

16.1.9 修改index.html文件名

16.2 检索

16.2.1 检索条件分析

16.2.2 查询参数封装

16.2.3 相应结果封装

16.2.4 检索DSL

16.2.4.1 聚合时出现的问题 Use doc values instead
16.2.4.1.1 问题原因
16.2.4.1.2 解决办法
16.2.4.1.2.1 新建索引 gulimall_product
16.2.4.1.2.2 将product索引的数据迁移到gulimall_product
16.2.4.1.2.3 修改索引常量名
16.2.4.2 DSL查询部分
16.2.4.2.1 注:嵌入式属性type=nested,查询、过滤的时候也要使用嵌入式
16.2.4.2.2 查询部分DSL
16.2.4.2.3 查询部分+排序+分页+高亮DSL
16.2.4.2.4 聚合部分DSL
16.2.4.2.5 查询部分+排序+分页+高亮+聚合DSL
16.2.4.3 使用java构建检索语句(将2.4.2检索语句翻译为java)
16.2.4.4 面包屑导航
16.2.4.4.1 构建面包屑导航功能
16.2.4.4.2 解决浏览器对空格的编码和Java不一样,差异化处理
16.2.4.4.3 编写需要远程调用的接口
16.2.4.4.3.1 导入依赖
16.2.4.4.3.2 开启feign@EnableFeignClients
16.2.4.4.3.3 编写远程调用接口
16.3.4.4.3.4 新增实体类
16.3.4.4.3.5 远程新增接口

16.2.4.5 前端代码

17. 谷粒商城–异步&线程池 --高级篇笔记七

17.0 测试代码地址

17.1 初始化线程的4种方式

17.1.1 继承 Thread

17.1.2 实现 Runnable 接口

17.1.3 实现 Callable 接口 + FutureTask (可以拿到返回结果, 可以处理异常)

17.1.3.1 注意

17.1.4 线程池

17.1.4.1 初始化线程池(方式一)
17.1.4.2 初始化线程池(方式二)
17.1.4.2.1 线程池七大参数
17.1.4.2.2 参数之间的关系
17.1.4.3 常见的4种线程池
17.1.4.4 使用线程池的好处
17.1.4.5 线程池execute和submit区别(向线程池提交任务)
注意:声明的线程池必须是全局的不然起不到效果
17.1.4.6 线程池面试题

17.1.5 以上四种方式的区别

17.2 异步编排 CompletableFuture

17.2.1 创建异步对象 runAsy

18. 谷粒商城–认证中心–高级篇笔记八

18.1 环境搭建

18.1.1 新建模块gulimall-auth-server

18.1.2 pom文件

18.1.3 修改主类

18.1.4 配置服务名,端口及注册中心地址

18.1.5 host新增域名映射

18.1.6 静态资源上传

18.1.7 修改reg.html login.html的 地址

18.1.8 配置网关

18.1.9 新增视图映射

18.1.10 测试

18.1.11 此部分前端代码

18.2 整合短信验证码

18.2.1 购买阿里云短信服务

18.2.2 postMan测试

18.2.3 整合短信服务

18.2.3.1 导入HttpUtils需要的所有依赖
18.2.3.2 新增HttpUtils
18.2.3.3 整合测试
18.3.3.4 三方服务整合短信服务
18.3.3.4.1 新增短信服务组件
18.3.3.4.2 抽取组件相关配置到配置文件
18.3.3.4.3 新增SmsSendController 提供给别的服务进行调用
18.3.3.4.4 测试

18.3 认证服务调用短信服务

18.3.1 认证服务远程调用三方服务发送短信

18.3.2 认证服务发送短信接口

18.3.3 前端调用接口

18.3.4 此时的缺陷

18.3.5 接口防刷功能

18.3.5.1 引入redis相关依赖
18.3.5.2 配置redis相关信息
18.3.5.3 认证服务发送短信验证码功能实现

18.4 注册页面相关功能实现

18.4.1 后台JSR 303校验

18.4.2 member服务,存储会员信息

18.4.2.1 接收前端传的注册对象
18.4.2.2 用户名与手机号重复异常
18.4.2.3 MD5&盐值&BCrypt
18.4.2.3.1 MD5
18.4.2.3.2 加盐
18.4.2.3.3 BCryptPasswordEncoder
18.4.2.3.4 BCryptPasswordEncoder加密(encode)解密(matches)
18.4.2.3.4.1 加密encode
18.4.2.4 用户服务注册接口

18.4.3 认证服务注册接口

18.5. 用户名密码登录

18.5.1 接收前端传的登录对象

18.5.2 认证服务的登录接口,供前端调用

18.5.3 用户服务的登录接口,供其他服务远程调用

18.5.4 feign接口新增

18.6. 社交登录 (OAuth2.0)

18.6.1 OAuth2.0

18.6.1.1 官方流程
18.6.1.2 流程

18.6.2 微博社交登录

18.6.2.1 进入微博开放平台 (审批时间过长放弃)

18.6.3 gitee社交登录(不需要实名认证)

18.6.3.1 在gitee开通三方api权限
18.6.3.2 创建应用
18.6.3.3 发起认证请求
18.6.3.4 新增回调接口
18.6.3.5 新增远程调用接口oauthLogin
18.6.3.6 新增远程feign接口
18.6.3.7 测试
18.6.3.8 现在的问题

18.7.Session共享问题

18.7.1 session原理

18.7.2 分布式下session共享问题

18.7.2.1 分布式场景下相同服务
18.7.2.2 不同服务

18.7.3 Session共享问题解决–Session复制

18.7.4 Session共享问题解决–客户端存储

18.7.5 Session共享问题解决–hash一致性

18.7.6 Session共享问题解决–统一存储

18.7.7 Session共享问题解决–不同服务,子域session共享

18.7.8 SpringSession整合redis

18.7.8.1 导入所需依赖
18.7.8.2 配置session存储方式
18.7.8.3 开启springsession
18.7.8.4 修改为json序列化,并放大作用域(自定义)
18.7.8.5 其他模块需要获取session也需要整合(整合步骤与上面一致)

18.8. 单点登录 SSO

18.8.1 许雪里 开源项目

18.8.2 单点登录实现

18.8.2.0 流程图
18.8.2.1 单点登录服务端gulimall-test-sso-server
18.8.2.1.1 创建步骤
18.8.2.1.2 pom文件(包含thymeleaf,redis)
18.8.2.1.3 配置application
18.8.2.1.4 新增LoginController
18.8.2.1.5 新增模板login.html
18.8.2.2 单点登录客户端(clien1)
18.8.2.2.1 创建步骤
18.8.2.2.2 pom文件
18.8.2.2.3 新增application配置
18.8.2.2.4 新增HelloController
18.8.2.2.5 新增模板employees.html
18.8.2.3 单点登录客户端(clien1)
18.8.2.3.1 创建步骤
18.8.2.3.2 pom文件
18.8.2.3.3 新增application配置
18.8.2.3.4 新增HelloController
18.8.2.3.5 新增模板employees.html
18.8.2.4 配置host
18.8.2.5 测试
18.8.2.6 总结
18.8.2.6.1实现一:在中央服务器登录并返回token机制
18.8.2.6.2 实现二:只要一个客户端在中央服务器登录,其他服务器也是登录状态
18.8.2.6.3 实现三:该接口

19. 谷粒商城–购物车–高级篇笔记九

19.0 购物车需求

19.1 数据模型分析

19.1.1 数据存储方式

19.1.2 数据存储结构

19.1.3 流程

19.2 环境搭建

19.2.1 新建模块

19.2.1.1 pom

19.2.2 新增host

19.2.3 静态资源分离

19.2.4 配置网关

19.2.5 ThreadLocal用户身份鉴别

19.2.5.1 ThreadLocal 同一个线程共享数据
19.2.5.2 整合spring session
19.2.5.2.1 导入依赖
19.2.5.2.2 自定义springsession
19.2.5.2.3 配置redis作为session
19.2.5.2.4 开启redis-spring session
19.2.5.3 新增用户鉴别拦截器

19.2.6 封装所需vo/to

19.2.6.1 购物项CartItemVo
19.2.6.2 购物车CartVo
19.2.6.3 商品信息SkuInfoVo
19.2.6.4 用户信息UserInfoTo

19.2.7 线程池相关配置

19.2.8 购物车相关常量

19.2.9 封装商品模块相关接口(用于远程调用)

19.2.10 远程调用接口

19.2.11 封装购物车CRUD接口

19.2.12 cartList.html

19.2.13 success.html

20. 谷粒商城–消息队列–高级篇笔记十

20.1 消息队列message queue

20.1.1.0 概述

20.1.1.1 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力

20.1.1.2 消息服务中两个重要概念:

20.1.1.3 消息队列主要有两种形式的目的地

20.1.1.4 点对点式:

20.1.1.5 发布订阅式:

20.1.1.6 JMS(Java Message Service)JAVA消息服务:

20.1.1.7 AMQP(Advanced Message Queuing Protocol)

20.1.1.8 Spring支持

20.1.1.9 Spring Boot自动配置

20.1.1.10 市面的MQ产品

20.1.1.11 JMS对比AMQP 两大规范

20.2 RabbitMQ

20.2.1 RabbitMQ概念

20.2.1.1 Message
20.2.1.2 Publisher
20.2.1.3 Exchange
20.2.1.4 Queue
20.2.1.5 Binding
20.2.1.6 Connection
20.2.1.7 Channel
20.2.1.8 Consumer
20.2.1.9 VirtualHost
20.2.1.10 Broker
20.2.1.11 关系图

20.2.2 应用场景

20.2.2.1 异步处理
20.2.2.2 应用解耦
20.2.2.3 流量控制【削峰】

20.2.3 RabbitMQ运行机制

20.2.4 交换机(Exchange)类型

20.2.4.1 Direct Exchange (直连)
20.2.4.2 Fanout Exchange (扇出(广播))
20.2.4.3 Topic Exchange (主题/订阅)

20.3 Docker安装RabbitMQ

20.4 RabbitMQ管理界面操作介绍

20.4.1 OverView概述

20.4.2 Connection连接信息

20.4.3 Admin用户信息

20.4.4 Queues队列信息

20.4.4.1 队列绑定交换机/发送消息
20.4.4.2 队列获取消息/删除队列/清空队列消息

20.4.5 Exchanges交换机信息

20.4.5.1 交换机绑定路由/删除交换机/发送消息

20.4.6 测试

20.4.6.1 exchange.direct
20.4.6.2 exchange.fanout
20.4.6.3 exchange.topic
20.4.6.4 新建queues
20.4.6.5 在exchange.direct中发送消息
20.4.6.6 在exchange.fanout中发送消息
20.4.6.7 在exchange.topic中发送消息

20.5 SpringBoot整合RabbitMQ

20.5.1 导入依赖

20.5.2 RabbitMQ相关配置

20.5.3 开启RabbitMQ相关功能

20.5.4 整合测试(AmqpAdmin)

20.5.4.1 创建交换机
20.5.4.2 创建队列
20.5.4.3 创建绑定
20.5.4.4 测试以上步骤是否有问题
20.5.4.5 发送消息
20.5.4.5.1 使用json序列化对象
20.5.4.6 监听接收消息(@RabbitListener标在方法上)
20.5.4.6.1 简单接收消息
20.5.4.6.2 接收消息内容并反序列化对象
20.5.4.6.3 完整写法
20.5.4.6.4 验证多个消费者监听场景
20.5.4.7 监听接收消息(@RabbitListener标在类上,@RabbitHandler标在方法上)
20.5.4.7.1 @RabbitListener与@RabbitHandler区别
20.5.4.7.2 重载处理不同类型的数据演示

20.5.5 消息可靠抵达

20.5.5.1 消息确认机制
20.5.5.2 ConfirmCallback (确认模式:发送端确认)
20.5.5.3 returnCallback(回退模式:发送端确认)
20.5.5.4 消息唯一id
20.5.5.4 ack机制(消费端确认)
20.5.5.4.1 消息收货
20.5.5.4.2 deliveryTag
20.5.5.4.3 退货

20.6 RabbitMQ延时队列(实现定时任务)

20.6.1 为什么不使用定时任务

20.6.2 消息的存活时间(TTL)

20.6.3 死信路由

20.6.4 延时队列实现-1(设置队列过期时间)

20.6.5 延时队列实现-2(设置消息过期时间)

20.6.6 延时队列定时关单模拟(设置队列过期时间)

20.6.6.1 实现方式
20.6.6.2 实现
20.6.6.2.1 创建队列,交换机,绑定技巧
20.6.6.2.2 实现
20.6.6.2.3 测试

21. 谷粒商城–订单服务–高级篇笔记十一

21.1 页面环境搭建

21.1.1 静态资源导入nginx

21.1.2 配置host

21.1.3 配置网关

21.1.4 开启注册发现

21.1.5 新增依赖

21.1.6 修改各个页面的静态资源路径

21.1.7 测试

21.1.7.1 订单确认页
21.1.7.2 订单列表页
21.1.7.3 订单详情页
21.1.7.4 订单支付页

21.2 整合Spring Session

21.2.1 导入依赖

21.2.2 开启Spring Session

21.2.3 配置Spring Session存储方式

21.2.4 SpringSession 自定义

21.2.5 整合后效果

21.3 整合线程池

21.3.1 自定义线程池配置

21.3.2 配置

21.4 订单中心(理论)

21.4.1 订单的构成

21.4.1.1 用户信息
21.4.1.2 订单基础信息
21.4.1.3 商品信息
21.4.1.4 优惠信息
21.4.1.4.1为什么把优惠信息单独拿出来而不放在支付信息里面呢?
21.4.1.5 支付信息
21.4.1.6 物流信息

21.4.2 订单状态

21.4.3 订单流程

21.4.3.1 订单创建与支付 (重点)
21.4.3.2 逆向流程

21.5 订单中心(代码)

21.5.1 订单登录拦截

21.5.2 订单确认页

21.5.2.1 模型抽取
21.5.2.2 提交确认订单
21.5.2.2.1 订单确认页流程
21.5.2.2.2 去到订单确认页面
21.5.2.2.2.1 远程查询所有的收获地址列表
21.5.2.2.2.2 远程查询购物车所有选中的购物项
21.5.2.2.2.3 远程查询商品库存信息
21.5.2.2.2.4 多线程异步编排
21.5.2.2.3 feign远程调用丢失请求头
21.5.2.2.4 Feign异步情况丢失上下文问题
21.5.2.2.5 模拟运费效果
21.5.2.2.6 创建防重令牌
21.5.2.2.7 提交订单
21.5.2.2.7.1 验证防重令牌
21.5.2.2.7.2 创建订单、订单项等信息
21.5.2.2.7.3 验价
21.5.2.2.7.4 保存订单
21.5.2.2.7.5 库存锁定
21.5.2.2.8 订单提交的问题 (本地事务在分布式情况下出现的问题)
21.5.2.2.9 使用seata解决分布式事务
21.5.2.2.9.1 AT模式实现步骤【创建订单+锁定库存】【不推荐使用】
21.5.2.2.10 最终一致性库存解锁逻辑:基于消息队列的分布式事务+分布式表【库存自动解锁】
21.5.2.2.10.1 为库存模块创建业务交换机,队列,绑定(整合Rabbitmq)
21.5.2.2.10.2 库存解锁
21.5.2.2.10.3 监听库存解锁
21.5.2.2.10.4 远程服务order订单服务登录拦截跳转login.html
21.5.2.2.11 最终一致性库存解锁逻辑:基于消息队列的分布式事务+分布式表【订单自动关单】
21.5.2.2.11.1 为订单模块创建业务交换机,队列绑定
21.5.2.2.11.2 订单关闭
21.5.2.2.11.3 监听订单自动关单
21.5.2.2.12 测试自动关单,自动解锁库存
21.5.2.2.13 订单卡顿导致的库存无法解锁
21.5.2.2.14 如何保证消息可靠性
21.5.2.2.14.1 消息丢失
21.5.2.2.14.2 消息重复
21.5.2.2.14.3 消息积压

21.5.3 订单支付页

21.5.3.1 加密
21.5.3.1.1 对称加密
21.5.3.1.2 非对称加密
21.5.3.2 支付宝加密原理
21.5.3.2.1 什么是公钥、 私钥、 加密、 签名和验签?
21.5.3.2.1.1 公钥私钥
21.5.3.2.1.2 加密和数字签名
21.5.3.3 支付宝官方demo测试
21.5.3.3.1 使用支付宝沙箱环境进行测试:https://open.alipay.com/platform/appDaily.htm?tab=account
21.5.3.3.2 自定义秘钥,点击rsa2秘钥后面的设置并启用
21.5.3.3.3 利用秘钥工具生成自己的公钥,私钥,拿到支付宝公钥
21.5.3.3.4 配置demo中的AlipayConfig
21.5.3.3.5 启动demo
21.5.3.4 支付宝支付流程
21.5.3.5 内网穿透
21.5.3.5.0 为什么使用内网穿透?
21.5.3.5.1 简介
21.5.3.5.2 使用场景
21.5.3.5.3 内网穿透的几个常用软件
21.5.3.5.4 natapp内网穿透
21.5.3.6 整合支付
21.5.3.6.1 导入依赖
21.5.3.6.2 抽取阿里云支付模板
21.5.3.6.3 配置模板所需相关配置
21.5.3.6.4 支付宝支付接口
21.5.3.6.5 前端支付页面
21.5.3.6.6 支付测试
21.5.3.6.7 订单列表页渲染
21.5.3.6.7.1 静态资源上传
21.5.3.6.7.2 配置host
21.5.3.6.7.3 配置网关
21.5.3.6.7.3 前端页面
21.5.3.6.7.4 回调页面接口
21.5.3.6.8 会员服务整合spring session(需要登录后查看订单信息)
21.5.3.6.8.1 配置拦截器
21.5.3.6.8.2 整合springsession
21.5.3.6.9 设置支付成功回调接口
21.5.3.6.10 获取支付宝异步通知
21.5.3.6.10.1 接收支付宝异步通知接口
21.5.3.6.11 设置支付宝异步通知接口地址
21.5.3.6.12 是异步通知接口不被拦截
21.5.3.6.13 内网穿透设置异步通知地址
21.5.3.6.13.1 日期格式问题
21.5.3.6.9 支付测试
21.5.3.6.10 收单

21.6 接口幂等性

21.6.1 什么是幂等性

21.6.2 哪些情况需要防止

21.6.3 什么情况下需要幂等

21.6.4 幂等解决方案

21.6.4.1 token 机制 (本次使用)
21.6.4.2 各种锁机制
21.6.4.2.1 数据库悲观锁
21.6.4.2.2 数据库乐观锁
21.6.4.2.3 业务层分布式锁
21.6.4.3 各种唯一约束
21.6.4.3.1 数据库唯一约束
21.6.4.3.2 redis set 防重
21.6.4.4 防重表
21.6.4.5 全局请求唯一 id

21.7 本地事务与分布式事务

21.7.1 本地事务

21.7.1.1 事务的基本性质
21.7.1.2 事务的隔离级别
21.7.1.3 事务的传播行为
21.7.1.4 SpringBoot 事务关键点
21.7.1.4.1 事务的自动配置
21.7.1.4.2 本地事务的坑

21.7.2 分布式事务

21.7.2.1 为什么会有分布式事务?
21.7.2.2 CAP定理与base理论
21.7.2.2.1 CAP定理
21.7.2.2.2 raft算法
21.7.2.2.2.1 领导选举机制
21.7.2.2.2.2 领导日志复制(可保证数据一致性)
21.7.2.2.3 CP的缺点
21.7.2.2.4 BASE 理论
21.7.2.2.5 强一致性、 弱一致性、 最终一致性
21.7.2.3 分布式事务几种方案
21.7.2.3.1 2PC 模式
21.7.2.3.2 柔性事务-TCC 事务补偿型方案 (seata)
21.7.2.3.3 柔性事务-最大

22. 谷粒商城–秒杀服务–高级篇笔记十二

22.1.后台添加秒杀商品

22.1.1 配置网关

22.1.2 配置网关完成,添加场次

22.1.3 上架秒杀商品

22.1.4 上架商品小bug,在任意一个场次可以查询的所有场次的上架商品

22.2. 定时任务

22.2.1 cron 表达式

22.2.1.1 cron表达式语法
22.2.1.2 cron表达式特殊字符
22.2.1.3 示例

22.3. 秒杀模块

22.3.1 创建模块

22.3.2 springboot整合定时任务异步任务(使用异步任务 + 定时任务来完成定时任务不阻塞的功能)

22.3.2.1 整合定时任务
22.3.2.1.1 自动配置类TaskSchedulingAutoConfiguration
注意事项
22.3.2.2 整合异步任务
22.3.2.2.0 自动配置类TaskExecutionProperties
22.3.2.2.1 整合异步任务原因
22.3.2.2.2 步骤
22.3.2.2.3 设置线程池大小
22.3.2.3 开启异步任务的方式
22.3.2.3.1 自己异步执行CompletableFuture.runAsync
22.3.2.3.2 设置定时任务的线程池线程数量(默认为1)
22.3.2.3.3 异步开启任务3.2章节

22.3.3 秒杀商品定时上架

22.3.3.1 秒杀上架流程图
22.3.3.2 秒杀(高并发)系统关注的问题
22.3.3.3 查询从今天开始三天之内的秒杀场次信息
22.3.3.3.1 时间如期处理
22.3.3.3.1.1获取当天0点的时间
22.3.3.3.1.2 获取加今天三天后的最后时间
22.3.3.4 获取三天之内的秒杀商品信息
22.3.3.5 秒杀商品定时上架
22.3.3.5.1 定时任务的方法查询最近三天场次的商品上架
22.3.3.2.2 定时任务分布式场景下的问题
22.3.3.2.3 同一场次的同一商品重复上架(幂等性问题)
22.3.3.6 首页展示上架商品
22.3.3.6.1 前端代码
22.3.3.6.2 新增当天场次秒杀商品查询接口
22.3.3.7 秒杀页面渲染
22.3.3.7.1 前端页面
22.3.3.7.2 根据skuId查询商品是否参加秒杀活动
22.3.3.7.3 在查询商品详情信息时带上秒杀验证该商品此时是否处于秒杀

22.3.4 秒杀

22.3.4.1 秒杀架构
22.3.4.2 秒杀(高并发)系统关注的问题
22.3.4.3 秒杀流程一(加入购物车秒杀-弃用)
22.3.4.4 秒杀流程二(独立秒杀业务来处理)
22.3.4.5 创建秒杀队列
22.3.4.6 整合rabbitmq,thymeleaf
22.3.4.7 秒杀成功页面
22.3.4.8 配置拦截器(未登录请求拦截)
22.3.4.9 秒杀接口
22.3.4.9.1 限制同一用户重复秒杀
22.3.4.10 秒杀消息消费
22.3.4.11 秒杀总结
22.3.4.11.1 服务单一职责+独立部署
22.3.4.11.2 秒杀链接加密
22.3.4.11.3 库存预热+快速扣减【限流,并发信号量】
22.3.4.11.4 动静分离
22.3.4.11.5 恶意请求拦截
22.3.4.11.6 流量错峰
22.3.4.11.7 限流&熔断&降级
22.3.4.11.8 队列削峰

23. 谷粒商城–Sentinel–高级篇笔记十三

23.1. 熔断降级限流

23.1.1 什么是熔断

23.1.2 什么是降级

23.1.3 什么是限流

23.2. Sentinel简介

23.2.1 特征

23.2.2 基本概念

23.2.2.1 资源
23.2.2.2 规则

23.2.3 Sentinel与Hystrix比较

23.3. 基本使用 - 资源与规则

23.3.1 资源定义【多用方式1、2、4】

方式一:主流框架的默认适配
方式二:抛出异常的方式定义资源
方式三:返回布尔值方式定义资源
方式四:注解方式定义资源
方式五:异步调用支持

23.3.2 定义规则

23.3.2.1 规则的种类
23.3.2.1.1 流量控制规则 (FlowRule)
流量规则的定义
通过代码定义流量控制规则
23.3.2.1.2 熔断降级规则 (DegradeRule)
23.3.2.1.3 系统保护规则 (SystemRule)
23.3.2.1.4 访问控制规则 (AuthorityRule)
23.3.2.1.5 热点规则 (ParamFlowRule)
23.3.2.2 查询更改规则
23.3.2.3 定制自己的持久化规则
23.3.2.4 规则生效的效果
23.3.2.4.1 判断限流降级异常
23.3.2.4.2 block 事件

23.4. 其它 API

23.4.1 业务异常统计 Tracer

23.4.2 上下文工具类 ContextUtil

23.4.3 指标统计配置

23.5. Dashboard

23.6. Sentinel整合SpringBoot

23.6.1 开源框架适配

23.6.2 官方示例Sentinel整合SpringBoot

23.6.3 导入依赖

23.6.4 启动sentinel

23.6.5 相关配置

23.6.6 懒加载,访问的时候才会加载

23.6.7 实时监控图标显示

23.6.7.1 为需要监控的服务导入依赖
23.6.7.2 配置事实监控
23.6.7.3 配置相关流控规则

23.6.8 流控规则与效果

23.6.8.1 流控模式
23.6.8.2 流控效果
23.6.8.3 自定义流控响应

23.7. 熔断降级

23.7.1 使用sentinel来保护feign远程调用(熔断)

23.7.1.1 在服务的调用方指定降级策略
23.7.1.1.1 开启调用方的熔断保护
23.7.1.1.2 编写熔断方法的具体实现
23.7.1.1.3 远程接口指定熔断后的本地默认实现
23.7.1.1.4 调用方手动指定远程服务的降级策略
23.7.1.1.4.1 RT
23.7.1.1.5 测试熔断
23.7.1.2 在服务的提供方(远程服务)指定降级策略
降级一般是主动【调用自定义返回数据】
23.7.1.2.1 对服务提供方进行降级
23.7.1.2.2 自定义配置降级策略
23.7.1.2.3 测试

23.8. 自定义受保护资源

23.8.1 主流框架的默认适配

23.8.2 抛出异常的方式定义资源

23.8.2.1 测试

23.8.3 注解方式定义资源

@SentinelResource 注解
23.3.3.1 测试
23.3.3.2 自定义保护资源限流后报错问题
23.3.3.2.1 解决方案(设置blockHandler)

23.8.4 注意(以上三种方式一定要配置被限流后的默认返回) SentinelConfig

23.9. 网关控流

23.9.1 为什么要网关控流?

23.9.2 为网关服务整合网关流控

23.9.2.1 导入依赖
23.9.2.2 配置网关限流
23.9.2.3 针对请求属性限流
23.9.2.4 定制网关流控返回

23.10. Sleuth+Zipkin 服务链路追踪

23.10.1 什么使用

23.10.2 基本术语

23.10.3 整合 Zipkin 链路追踪+可视化

23.10.3.1 安装zipkin服务器
23.10.3.2 导入依赖
23.10.3.3 配置Sleuth与Zipkin
23.10.3.4 访问http://192.168.157.128:9411/zipkin/
23.10.3.5 懒加载跑一遍流程

23.11.高级篇完结,撒花!!!

你可能感兴趣的:(java,javaee,springboot,spring,cloud,docker)