Knife4j 快速入门
概述Knife4j 是一个用于生成和展示 API 文档的工具,同时它还提供了在线调试的功能,下图是其工作界面。
了解:
Knife4j 有多个版本,最新版的 Knife4j 基于开源项目 springdoc-openapi,这个开源项目的核心功能就是根据 SpringBoot 项目中的代码自动生成符合 OpenAPI 规范的接口信息。
OpenAPI 规范定义接口文档的内容和格式,其前身是 Swagger 规范。
knife4j 与 SpringBoot 集成与 SpringBoot 的集成相对简单,具体操作如下
创建 SpringBoot 项目
引入 Maven 依赖
Knife4j 的依赖如下
12345<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> <version>4.3. ...
项目开发流程
前后端分离项目的完整开发流程如下
第一步由产品经理负责分析市场、用户需求,并将其转化为详细的产品需求。然后创建初步的产品原型,以便更好地理解和传达产品的设计和功能。
原型通常指的是产品、系统或概念的初步版本或样品,旨在展示设计概念、功能、外观或其他关键特征。
第二步由UI设计师基于产品需求和初步原型,设计用户界面的外观和交互,得到高保真的原型。高保真原型可能包含更具体的设计元素,如颜色、字体、布局等。
第三步由架构师根据高保真原型,规划软件系统的整体结构和组件。他们会设计数据库架构和定义接口,输出API文档,以便开发团队进行后续工作。
API文档是关于接口的详细说明文档,其会包含接口所提供的功能,所需参数、返回值、错误处理等细节。接口文档的目的是为开发人员、集成人员以及其他利益相关者提供清晰的指导,以便他们能够正确地使用和集成接口。
第四步前后端开发工程师根据API文档,分别开发前端和后端的业务逻辑和功能。前端工程师负责构建用户交互界面,而后端工程师负责数据处理逻辑和数据存储。
第五步测试工程师进行各种测试,以确保软件的质量和稳定性。
第六步运维工程师负责配置、部署和 ...
3. 服务保护和分布式事务
某些人和事,哪怕是路边的风景,可是只要看一眼,依然会让人觉得很美好
在微服务远程调用的过程中,还存在几个问题需要解决。
首先是业务健壮性问题:
例如在之前的查询购物车列表业务中,购物车服务需要查询最新的商品信息,与购物车数据做对比,提醒用户。大家设想一下,如果商品服务查询时发生故障,查询购物车列表在调用商品服 务时,是不是也会异常?从而导致购物车查询失败。但从业务角度来说,为了提升用户体验,即便是商品查询失败,购物车列表也应该正确展示出来,哪怕是不包含最新的商品信息。
还有级联失败问题:
还是查询购物车的业务,假如商品服务业务并发较高,占用过多Tomcat连接。可能会导致商品服务的所有接口响应时间增加,延迟变高,甚至是长时间阻塞直至查询失败。
此时查询购物车业务需要查询并等待商品查询结果,从而导致查询购物车列表业务的响应时间也变长,甚至也阻塞直至无法访问。而此时如果查询购物车的请求较多,可能导致购物车服务的Tomcat连接占用较多,所有接口的响应时间都会增加,整个服务性能很差, 甚至不可用。
依次类推,整个微服务群中与购物车服务、商品服务等有调用关系的 ...
使用Obsidian管理Hexo
以后不管遇到什么,你都不要对这个世界失去希望
软件安装去官网下载Obsidian , 然后再进行安装
软件设置编辑器相关设置
文件与连接设置
这里使用Obsidian打卡Blog这个文件夹 ,然后将其不重要的给忽略掉
外观设置这个根据自己的喜好进行设置
模板设置找到scaffolds这个文件夹 ,打开page这个文件夹 ,填写以下内容
12345678---title: {{title}}date: {{date}} {{time}}author: 捞月亮の小北tags: categories: cover: ---
发布方案在blog文件夹下新建deploy.bat文件并填写以下内容
1hexo clean && hexo g && hexo d
以后每次发布文章的时候 ,只需点击deploy.bat进行发布即可
百天打卡
圣人以心束行 ,君子以行束心
九月份打卡记录
第1天打卡 : 2024-09-22
第2天打卡 : 2024-09-23
第3天打卡 : 2024-09-24
第4天打卡 : 2024-09-25
第5天打卡 : 2024-09-26
第6天打卡 : 2024-09-27
第7天打卡 : 2024-09-28
第8天打卡 : 2024-09-29
第9天打卡 : 2024-09-30
Jmeter快速入门
Jmeter快速入门1.安装JmeterJmeter依赖于JDK,所以必须确保当前计算机上已经安装了JDK,并且配置了环境变量。
1.1.下载可以Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi
当然,我们课前资料也提供了下载好的安装包:
1.2.解压因为下载的是zip包,解压缩即可使用,目录结构如下:
其中的bin目录就是执行的脚本,其中包含启动脚本:
1.3.运行双击即可运行,但是有两点注意:
启动速度比较慢,要耐心等待
启动后黑窗口不能关闭,否则Jmeter也跟着关闭了
2.快速入门2.1.设置中文语言默认Jmeter的语言是英文,需要设置:
效果:
注意:上面的配置只能保证本次运行是中文,如果要永久中文,需要修改Jmeter的配置文件
打开jmeter文件夹,在bin目录中找到 jmeter.properties,添加下面配置:
1language=zh_CN
注意:前面不要出现#,#代表注释,另外这里是下划线,不是中划线
2.2.基本用法在测试计划上点鼠标 ...
2. 微服务再探
某些人和事,哪怕是路边的风景,可是只要看一眼,依然会让人觉得很美好
在昨天的作业中,我们将黑马商城拆分为5个微服务:
用户服务
商品服务
购物车服务
交易服务
支付服务
由于每个微服务都有不同的地址或端口,入口不同,相信大家在与前端联调的时候发现了一些问题:
请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦
前端无法调用nacos,无法实时更新服务列表
单体架构时我们只需要完成一次用户登录、身份校验,就可以在所有业务中获取到用户信息。而微服务拆分后,每个微服务都独立部署,这就存在一些问题:
每个微服务都需要编写登录校验、用户信息获取的功能吗?
当微服务之间调用时,该如何传递用户信息?
不要着急,这些问题都可以在今天的学习中找到答案,我们会通过网关技术解决上述问题。今天的内容会分为3章:
第一章:网关路由,解决前端请求入口的问题。
第二章:网关鉴权,解决统一登录校验和用户信息获取的问题。
第三章:统一配置管理,解决微服务的配置文件重复和配置热更新问题。
通过今天的学习你将掌握下列能力:
会利用微服务网关做请求路由
会利用微服务网关做登录身 ...
Gitee图床搭建
Gitee 设置相关
注册Gitee账号
创建仓库 ,名字任意 , 设为公开
进入账号设置 ,创建私人令牌 ,记得将生成的Token复制下来
PicGo 设置相关
安装插件 picgo-plugin-gitee-uploader
配置图床 ,仓库名选择你的Gitee名称/仓库名称
分支默认 :master
token选择从Gitee上复制下来的Token
path : 文件夹名称 ,名字任意
customPath : 这里我选择的年月
没有说到的就是不填
防盗链解决上述设置好之后 ,图片可以上传也可以访问 ,但是却不能在博客中展示 ,图片解决方案
在文章第一行添加代码:
1<meta name="referrer" content="no-referrer">
图片测试:
微服务拆分作业
人生不如意之事七八九,能与人言一二三都无,才算坎坷
1.用户服务1.1.创建项目在hmall下新建一个module,命名为user-service:
1.2.依赖user-service的pom.xml文件内容如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4. ...
1. 初始微服务
自由看似条条框框但是总有一笔出头,牢笼看着透风却被罩住了头
0.导入黑马商城项目在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备:
Centos7的环境及一个好用的SSH客户端
安装好Docker
会使用Docker
0.1.安装MySQL在课前资料提供好了MySQL的一个目录:
其中有MySQL的配置文件和初始化脚本:
我们将其复制到虚拟机的/root目录。如果/root下已经存在mysql目录则删除旧的,如果不存在则直接复制本地的:
然后创建一个通用网络:
1docker network create hm-net
使用下面的命令来安装MySQL:
12345678910docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ -v /root/mysql/da ...
3. 基础算法
3.1 查找概述查找算法是一种在数据集中寻找特定数据项的方法。通常,数据集是在计算机程序中存储的,例如数组、链表或散列表。在编写程序时,查找算法是非常重要的,它有助于快速找到所需的数据。在本文中,我们将介绍一些基本的查找算法及其特点。
线性查找线性查找也称为顺序查找,是一种最简单的查找算法。在这种算法中,我们从数据集的开头开始,逐个比较每个数据项,以寻找要查找的数据。如果我们找到了目标数据,查找过程就结束了。如果我们到达数据集的末尾,仍然找不到目标数据,则可以认为它不存在于数据集中。
线性查找的时间复杂度是O(n),其中n是数据集的大小。因此,它在大型数据集中可能会很慢。然而,在小型数据集中,它仍然是一种非常有用的算法。
二分查找二分查找也称为折半查找,是一种更快速的查找算法。但前提是,数据集必须已经排序。在二分查找中,我们取数据集的中间值,然后将目标与中间值进行比较。如果目标小于中间值,则在左侧子集中继续查找;如果目标大于中间值,则在右侧子集中继续查找。每次比较都会缩小要搜索的数据集的大小。
二分查找的时间复杂度是O(log n),其中n是数据集的大小。这种算法在大型数据集中非常有效 ...
2. 基础数据结构
2.1 数组1) 概述定义
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识
In computer science, an array is a data structure consisting of a collection of elements (values or variables), each identified by at least one array index or key
因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:
1int[] array = {1,2,3,4,5}
知道了数组的数据起始地址 $BaseAddress$,就可以由公式 $BaseAddress + i * size$ 计算出索引 $i$ 元素的地址
$i$ 即索引,在 Java、C 等语言都是从 0 开始
$size$ 是每个元素占用字节,例如 $int$ 占 $4$,$double$ 占 $8$
小测试
1byte[] array = {1,2,3,4,5 ...