改为公网url

This commit is contained in:
zhangsan 2025-03-19 18:31:37 +08:00
parent f815ac24ac
commit 9a29bcbbdb
21 changed files with 237 additions and 237 deletions

View File

@ -20,7 +20,7 @@ Docker为了解决依赖的兼容问题的采用了两个手段
- 将每个应用放到一个隔离**容器**去运行,避免互相干扰
<img src="D:/folder/study/md_files/output/bcd2517d-2b7e-48bb-85cd-6bc95a4a456a.png" alt="image-20210731142219735" style="zoom: 67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u64xsq-2.png" alt="image-20210731142219735" style="zoom: 67%;" />
这样打包好的应用包中既包含应用本身也保护应用所需要的Libs、Deps无需在操作系统上安装这些自然就不存在不同应用之间的兼容问题了。
@ -50,13 +50,13 @@ Docker是一个CS架构的程序由两部分组成
如图:
![image-20210731154257653](D:/folder/study/md_files/output/f47e4553-83a1-4a82-be3d-30400cf53010.png)
![image-20210731154257653](https://pic.bitday.top/i/2025/03/19/u66964-2.png)
#### 镜像操作
![image-20210731155649535](D:/folder/study/md_files/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png)
![image-20210731155649535](https://pic.bitday.top/i/2025/03/19/u65nlc-2.png)
1. docker push将本地镜像上传到远程仓库例如 Docker Hub
@ -102,7 +102,7 @@ docker build -t yourusername/myimage:latest .
#### 容器操作
![image-20210731161950495](D:/folder/study/md_files/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png)
![image-20210731161950495](https://pic.bitday.top/i/2025/03/19/u66wrs-2.png)
1. docker run 创建并运行一个新容器
@ -176,7 +176,7 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器
**数据卷volume**是一个虚拟目录,指向宿主机文件系统中的某个目录。
![image-20210731173541846](D:/folder/study/md_files/output/976d2d8d-9f66-4057-88eb-5db860be894f.png)
![image-20210731173541846](https://pic.bitday.top/i/2025/03/19/u68796-2.png)
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
@ -507,7 +507,7 @@ docker info
我们只需要告诉Docker我们的镜像的组成需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么将来Docker会帮助我们构建镜像。
而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](D:/folder/study/md_files/output/db1506b9-159f-4278-8d26-0f899314d1fe.png)
而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](https://pic.bitday.top/i/2025/03/19/u67pvv-2.png)
`EXPOSE 8090` 是一个声明性的指令,`EXPOSE` 本身不会进行端口映射
@ -672,7 +672,7 @@ docker push yourusername/zbparse #推送镜像到 Docker Hub
docker tag zbparse 646228430smile/zbparse:latest 这里的646228430smile是用户名保持不变
![微信截图_20250225163059](D:/folder/study/md_files/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png)
![微信截图_20250225163059](https://pic.bitday.top/i/2025/03/19/u661a8-2.png)
14. 查看镜像
@ -1145,7 +1145,7 @@ docker-compose -f docker-compose-app.yml up -d
查看课前资料提供的cloud-demo文件夹里面已经编写好了docker-compose文件而且每个微服务都准备了一个独立的目录
![image-20210731181341330](D:/folder/study/md_files/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png)
![image-20210731181341330](https://pic.bitday.top/i/2025/03/19/u659u8-2.png)
内容如下:
@ -1194,11 +1194,11 @@ services:
查看mysql目录可以看到其中已经准备好了cloud_order、cloud_user表
![image-20210801095205034](D:/folder/study/md_files/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png)
![image-20210801095205034](https://pic.bitday.top/i/2025/03/19/u65i0j-2.png)
查看微服务目录可以看到都包含Dockerfile文件
![image-20210801095320586](D:/folder/study/md_files/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png)
![image-20210801095320586](https://pic.bitday.top/i/2025/03/19/u65rdk-2.png)
内容如下:
@ -1253,7 +1253,7 @@ spring:
打包后:
![image-20210801095951030](D:/folder/study/md_files/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png)
![image-20210801095951030](https://pic.bitday.top/i/2025/03/19/u66mhd-2.png)
#### 拷贝jar包到部署目录
@ -1261,15 +1261,15 @@ spring:
user-service
![image-20210801100201253](D:/folder/study/md_files/output/0a48347c-8253-4502-8843-86aebcf496c9.png)
![image-20210801100201253](https://pic.bitday.top/i/2025/03/19/u66jrt-2.png)
order-service
![image-20210801100231495](D:/folder/study/md_files/output/63007064-a609-4230-ac70-2c5b5f39d366.png)
![image-20210801100231495](https://pic.bitday.top/i/2025/03/19/u675a6-2.png)
gateway
![image-20210801100308102](D:/folder/study/md_files/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png)
![image-20210801100308102](https://pic.bitday.top/i/2025/03/19/u67av0-2.png)
#### 部署
@ -1277,7 +1277,7 @@ gateway
上传到任意目录:
![image-20210801100955653](D:/folder/study/md_files/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png)
![image-20210801100955653](https://pic.bitday.top/i/2025/03/19/u67ku9-2.png)
部署:

View File

@ -2,15 +2,15 @@
## JavaWeb学习路线
![image-20240227162313041](D:/folder/study/md_files/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png)
![image-20240227162313041](https://pic.bitday.top/i/2025/03/19/u6kvx7-2.png)
## 前后端分离开发
![image-20240229125233265](D:/folder/study/md_files/output/06d92f94-982e-49b2-b999-be2dce45a748.png)
![image-20240229125233265](https://pic.bitday.top/i/2025/03/19/u6m408-2.png)
![image-20240229125254635](D:/folder/study/md_files/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png)
![image-20240229125254635](https://pic.bitday.top/i/2025/03/19/u6kpkw-2.png)
1. 需求分析:首先我们需要阅读需求文档,分析需求,理解需求。
2. 接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等
@ -146,9 +146,9 @@
盒子模型盒子部分指的是border及以内的部分不包括margin
![image-20240228095942357](D:/folder/study/md_files/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png)
![image-20240228095942357](https://pic.bitday.top/i/2025/03/19/u6lpxd-2.png)
![image-20240228100247314](D:/folder/study/md_files/output/9290d18b-9292-4bab-bd01-722d3ad14097.png)
![image-20240228100247314](https://pic.bitday.top/i/2025/03/19/u6lxdu-2.png)
@ -365,7 +365,7 @@ const: const pi=3.14
| 逻辑运算符 | && , \|\| , ! |
| 三元运算符 | 条件表达式 ? true_value: false_value |
![image-20240228122315690](D:/folder/study/md_files/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png)
![image-20240228122315690](https://pic.bitday.top/i/2025/03/19/u6lj59-2.png)
parseint() ,将其他类型转化为数字
@ -701,7 +701,7 @@ DOMDocument Object Model 文档对象模型。也就是 JavaScript 将 HTML
- Text文本对象
- Comment注释对象
![1668796698067](D:/folder/study/md_files/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png)
![1668796698067](https://pic.bitday.top/i/2025/03/19/u6l3cm-2.png)
那么我们学习DOM技术有什么用呢主要作用如下
@ -763,7 +763,7 @@ for (let i = 0; i < divs.length; i++) {
你想要如何操作获取到的DOM元素你需要查阅手册看它支持的属性
![image-20240228185708363](D:/folder/study/md_files/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.png)
![image-20240228185708363](https://pic.bitday.top/i/2025/03/19/u6k7vg-2.png)
```
var divs = document.getElementsByClassName('cls');
@ -821,7 +821,7 @@ MVVM:其实是Model-View-ViewModel的缩写有3个单词具体释义如下
- View: 视图用于展示数据的页面可以理解成我们的html+css搭建的页面但是没有数据
- ViewModel: 数据绑定到视图负责将数据Model通过JavaScript的DOM技术将数据展示到视图View
![image-20240228194959643](D:/folder/study/md_files/output/2a9bf144-bba9-42c0-aae6-089470ada845.png)
![image-20240228194959643](https://pic.bitday.top/i/2025/03/19/u6mbl5-2.png)
基于上述的MVVM思想其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;而今天我们要学习的就是侧重于ViewModel部分开发的vue前端框架用来替代JavaScript的DOM操作让数据展示到视图的代码开发变得更加的简单。

View File

@ -39,9 +39,9 @@
## Maven
![image-20240229132137502](D:/folder/study/md_files/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png)
![image-20240229132137502](https://pic.bitday.top/i/2025/03/19/u6rxj1-2.png)
![image-20240229133408054](D:/folder/study/md_files/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png)
![image-20240229133408054](https://pic.bitday.top/i/2025/03/19/u6tcqw-2.png)
Maven仓库分为
@ -57,7 +57,7 @@ POM文件导入依赖的时候先看本地仓库有没有没有就看私
**创建Maven项目**
![image-20250307174233390](D:/folder/study/md_files/output/69c68ed1-7432-482c-8269-9bb280d78669.png)
![image-20250307174233390](https://pic.bitday.top/i/2025/03/19/u6u4ni-2.png)
勾选 **Create from archetype**(可选),也可以选择 **maven-archetype-quickstart** 等模版。
@ -175,7 +175,7 @@ Maven 重建
* Maven中的坐标是==资源的唯一标识== , 通过该坐标可以唯一定位资源位置
* 使用坐标来定义项目或引入项目中需要的依赖
![image-20240302131843540](D:/folder/study/md_files/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png)
![image-20240302131843540](https://pic.bitday.top/i/2025/03/19/u6ps37-2.png)
### 依赖管理
@ -201,7 +201,7 @@ Maven 重建
更改之后可以在界面上看到一个maven刷新按钮点击一下就开始联网下载依赖了成功后可以看到
![image-20240302133241227](D:/folder/study/md_files/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png)
![image-20240302133241227](https://pic.bitday.top/i/2025/03/19/u6szry-2.png)
#### 排除依赖
@ -280,7 +280,7 @@ A依赖BB依赖C如果A不想将C依赖进来可以同时排除C
4. 双击test生命周期
![image-20240302140156166](D:/folder/study/md_files/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png)
![image-20240302140156166](https://pic.bitday.top/i/2025/03/19/u6rc3p-2.png)
## HTTP协议
@ -315,14 +315,14 @@ A依赖BB依赖C如果A不想将C依赖进来可以同时排除C
浏览器与 Tomcat 之间通过 HTTP 协议进行通信,而 Tomcat 则充当了中间的桥梁,将请求路由到你的 Java 代码,并最终将处理结果返回给浏览器。
![image-20240304101816184](D:/folder/study/md_files/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png)
![image-20240304101816184](https://pic.bitday.top/i/2025/03/19/u6pju8-2.png)
### 快速启动
1. 新建spring initializr module
2. 删除以下文件
![image-20240302142835694](D:/folder/study/md_files/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png)
![image-20240302142835694](https://pic.bitday.top/i/2025/03/19/u6qkax-2.png)
新建HelloController类
@ -416,7 +416,7 @@ public class RequestController {
- **请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。**
![image-20240303112109981](D:/folder/study/md_files/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png)
![image-20240303112109981](https://pic.bitday.top/i/2025/03/19/u6ndfm-2.png)
```
@RequestMapping("/complexpojo")
@ -464,7 +464,7 @@ public class RequestController {
}
```
![image-20240303120212254](D:/folder/study/md_files/output/c6281305-9574-4ef5-b681-aed1ea871a99.png)
![image-20240303120212254](https://pic.bitday.top/i/2025/03/19/u6oyev-2.png)
#### JSON格式参数
@ -506,7 +506,7 @@ json数组
Postman发送JSON格式数据
![image-20240303121028876](D:/folder/study/md_files/output/a45dc48a-0478-4791-903f-738cf27f8f28.png)
![image-20240303121028876](https://pic.bitday.top/i/2025/03/19/u6u85u-2.png)
服务端Controller方法接收JSON格式数据
@ -583,7 +583,7 @@ public class RequestController {
下图返回值分别是字符串、对象、集合。
![image-20221204174052622](D:/folder/study/md_files/output/515247f4-f38f-4cef-bf14-8dab45863923.png)
![image-20221204174052622](https://pic.bitday.top/i/2025/03/19/u6shpf-2.png)
统一的返回结果使用类来描述,在这个结果中包含:
@ -627,7 +627,7 @@ public class Result {
Controller层接收请求调用Service层Service层先调用Dao层获取数据然后实现自己的业务逻辑处理部分最后返回给Controller层Controller层再响应数据。可理解为递归的过程
![image-20221204201342490](D:/folder/study/md_files/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png)
![image-20221204201342490](https://pic.bitday.top/i/2025/03/19/u6nmne-2.png)
**但是**这样每次要更换ServiceA->ServiceB时需要修改Controller层的代码
@ -644,7 +644,7 @@ private EmpService empService=new EmpServiceB(); //现在
#### IOC&DI 分层解耦
![image-20240305104036244](D:/folder/study/md_files/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png)
![image-20240305104036244](https://pic.bitday.top/i/2025/03/19/u6n46r-2.png)
任务完成Controller层、Service层、Dao层的代码解耦
@ -659,19 +659,19 @@ private EmpService empService=new EmpServiceB(); //现在
第1步删除Controller层、Service层中new对象的代码
![image-20221204212807207](D:/folder/study/md_files/output/f008a154-be4b-4d83-a160-0090da54b786.png)
![image-20221204212807207](https://pic.bitday.top/i/2025/03/19/u6tjd9-2.png)
第2步Service层及Dao层的实现类交给IOC容器管理
- 使用Spring提供的注解@Component 就可以实现类交给IOC容器管理
![image-20221204213328034](D:/folder/study/md_files/output/312965c7-c112-4eb0-932c-4821c185833e.png)
![image-20221204213328034](https://pic.bitday.top/i/2025/03/19/u6pz2g-2.png)
第3步为Controller及Service注入运行时依赖的对象
- 使用Spring提供的注解@Autowired 就可以实现程序运行时IOC容器自动注入需要的依赖对象
![image-20221204213859112](D:/folder/study/md_files/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png)
![image-20221204213859112](https://pic.bitday.top/i/2025/03/19/u6ukxl-2.png)
@ -841,7 +841,7 @@ http://localhost:8080/users/1 DELETE删除id为1的用户
### 开发流程
![image-20220904125004138](D:/folder/study/md_files/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png)
![image-20220904125004138](https://pic.bitday.top/i/2025/03/19/u6qh4d-2.png)
1. 查看页面原型明确需求
- 根据页面原型和需求,进行表结构设计、编写接口文档(已提供)
@ -861,11 +861,11 @@ http://localhost:8080/users/1 DELETE删除id为1的用户
### 快速创建
![image-20240307125505211](D:/folder/study/md_files/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png)
![image-20240307125505211](https://pic.bitday.top/i/2025/03/19/u6pfoj-2.png)
1. 创建springboot工程并导入 mybatis的起步依赖、mysql的驱动包。创建用户表user并创建对应的实体类User
![image-20240307125820685](D:/folder/study/md_files/output/d1e1f304-bcc5-415c-923e-166616133c2e.png)
![image-20240307125820685](https://pic.bitday.top/i/2025/03/19/u6q96d-2.png)
2. 在springboot项目中可以编写main/resources/application.properties文件配置数据库连接信息。
@ -882,7 +882,7 @@ spring.datasource.password=1234
3. 在引导类所在包下,在创建一个包 mapper。在mapper包下创建一个接口 UserMapper
![image-20240307132356616](D:/folder/study/md_files/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png)
![image-20240307132356616](https://pic.bitday.top/i/2025/03/19/u6qtz4-2.png)
@Mapper注解表示是mybatis中的Mapper接口
@ -976,7 +976,7 @@ public interface EmpMapper {
}
```
![image-20240312122323753](D:/folder/study/md_files/output/683b9b42-d07c-4a31-a441-d31506d148f0.png)
![image-20240312122323753](https://pic.bitday.top/i/2025/03/19/u6mu7z-2.png)
上图参数值分离有效防止SQL注入
@ -1007,7 +1007,7 @@ useGeneratedKeys = true表示获取返回的主键值keyProperty = "id"表示
- 实体类属性名和数据库表查询返回的字段名一致mybatis会自动封装。
- 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。
![image-20221212103124490](D:/folder/study/md_files/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png)
![image-20221212103124490](https://pic.bitday.top/i/2025/03/19/u6o894-2.png)
解决方法:
@ -1073,7 +1073,7 @@ public interface EmpMapper {
3. XML映射文件中sql语句的**id**与Mapper接口中的**方法名**一致,并保持返回类型一致。
![image-20221212153529732](D:/folder/study/md_files/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png)
![image-20221212153529732](https://pic.bitday.top/i/2025/03/19/u6su5s-2.png)
\<select>标签就是用于编写select查询语句的。
@ -1193,11 +1193,11 @@ xml:
传统员工分页查询分析:
![image-20221215153413290](D:/folder/study/md_files/output/865e43e3-fc56-4af9-b5d1-a6541cd7e0ba.png)
![image-20221215153413290](https://pic.bitday.top/i/2025/03/19/u6p5ae-2.png)
**采用分页插件PageHelper**
![image-20221215170038833](D:/folder/study/md_files/output/6b0b7237-0318-4858-a126-c1c1e3536d23.png)
![image-20221215170038833](https://pic.bitday.top/i/2025/03/19/u6o1ho-2.png)
**在执行empMapper.list()方法时就是执行select * from emp 语句,怎么能够实现分页操作呢?**
@ -1282,7 +1282,7 @@ public class EmpController {
思路分析:
![image-20221215180528415](D:/folder/study/md_files/output/b773b722-17eb-4ab7-9144-4f75bdc17ecc.png)
![image-20221215180528415](https://pic.bitday.top/i/2025/03/19/u6mjck-2.png)
```
<select id="pageQuery" resultType="com.sky.entity.Employee">
@ -1453,7 +1453,7 @@ public class AliOSSUtils {
将配置信息写在application.properties用注解@Value获取配置文件中的数据
![image-20230102173905913](D:/folder/study/md_files/output/bbe35a2a-51e6-405b-a199-89a49474f452.png)
![image-20230102173905913](https://pic.bitday.top/i/2025/03/19/u6osck-2.png)
@Value("${aliyun.oss.endpoint}")
@ -1461,7 +1461,7 @@ public class AliOSSUtils {
**yml配置文件**
![image-20230102181215809](D:/folder/study/md_files/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png)
![image-20230102181215809](https://pic.bitday.top/i/2025/03/19/u6txwe-2.png)
了解下yml配置文件的基本语法
@ -1525,7 +1525,7 @@ Spring提供的简化方式套路
3. 在实体类上添加`@ConfigurationProperties`注解,并通过**perfix属性**来指定配置参数项的前缀
![image-20230103210827003](D:/folder/study/md_files/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png)
![image-20230103210827003](https://pic.bitday.top/i/2025/03/19/u6taji-2.png)
4. (可选)引入依赖pom.xml
@ -1538,7 +1538,7 @@ Spring提供的简化方式套路
**使用:**
![image-20240327124923629](D:/folder/study/md_files/output/5e673d58-0138-436c-9d68-992f5f530ceb.png)
![image-20240327124923629](https://pic.bitday.top/i/2025/03/19/u6s60c-2.png)
@ -1546,7 +1546,7 @@ Spring提供的简化方式套路
### 会话技术
![image-20230105203827355](D:/folder/study/md_files/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png)
![image-20230105203827355](https://pic.bitday.top/i/2025/03/19/u6sdx9-2.png)
会话是和浏览器关联的当有三个浏览器客户端和服务器建立了连接时就会有三个会话。同一个浏览器在未关闭之前请求了多次服务器这多次请求是属于同一个会话。比如1、2、3这三个请求都是属于同一个会话。当我们关闭浏览器之后这次会话就结束了。而如果我们是直接把web服务器关了那么所有的会话就都结束了。
@ -1587,7 +1587,7 @@ Spring提供的简化方式套路
### JWT令牌
![image-20240320191446966](D:/folder/study/md_files/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png)
![image-20240320191446966](https://pic.bitday.top/i/2025/03/19/u6rqof-2.png)
**生成和校验**
@ -1999,7 +1999,7 @@ eg:@Order(1)
先定义一个公共的pt(),然后可以直接引用。
![image-20240322105617334](D:/folder/study/md_files/output/afad9a15-8628-4382-8993-f46ee275a658.png)
![image-20240322105617334](https://pic.bitday.top/i/2025/03/19/u6r4y1-2.png)
切入点表达式:
@ -2097,7 +2097,7 @@ public @interface MyLog {
### 连接点
![image-20240322131745283](D:/folder/study/md_files/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png)
![image-20240322131745283](https://pic.bitday.top/i/2025/03/19/u6og3o-2.png)
**`getSignature()`**: 返回一个`Signature`类型的对象,这个对象包含了被拦截点的签名信息。在方法调用的上下文中,这包括了方法的名称、声明类型等信息。
@ -2364,4 +2364,4 @@ public class SpringbootWebConfig2Application {
## WEB开发总体图
![image-20240326111230747](D:/folder/study/md_files/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png)
![image-20240326111230747](https://pic.bitday.top/i/2025/03/19/u6mzqw-2.png)

View File

@ -1083,15 +1083,15 @@ public class Main {
`ArrayList` 是 List 接口的一种实现,而 List 接口又继承自 Collection 接口。包括 `add()``remove()``contains()` 等。
![image-20240227133714509](D:/folder/study/md_files/output/38b86390-3c63-4464-9243-389e8693c3d3.png)
![image-20240227133714509](https://pic.bitday.top/i/2025/03/19/u6vct4-2.png)
#### HashSet
![image-20240227150219184](D:/folder/study/md_files/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png)
![image-20240227150219184](https://pic.bitday.top/i/2025/03/19/u6wmxd-2.png)
#### HashMap
![image-20240227152019078](D:/folder/study/md_files/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png)
![image-20240227152019078](https://pic.bitday.top/i/2025/03/19/u6utmg-2.png)
```
// 使用 entrySet() 方法获取 Map 中所有键值对的集合,并使用增强型 for 循环遍历键值对
@ -1253,11 +1253,11 @@ String ttImgPath = resourceUrl != null ? resourceUrl.getFile() : null;
反射技术,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(**成员变量、方法、构造器**等)。
![1668575796295](D:/folder/study/md_files/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png)
![1668575796295](https://pic.bitday.top/i/2025/03/19/u75k9n-2.png)
**反射技术例子**IDEA通过反射技术就可以获取到类中有哪些方法并且把方法的名称以提示框的形式显示出来所以你能看到这些提示了。
![1668576426355](D:/folder/study/md_files/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png)
![1668576426355](https://pic.bitday.top/i/2025/03/19/u6vwpj-2.png)
**1.获取类的字节码Class对象**:有三种方法
@ -1358,9 +1358,9 @@ public class Test2Constructor(){
**3.获取类的成员变量**
![1668579517323](D:/folder/study/md_files/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png)
![1668579517323](https://pic.bitday.top/i/2025/03/19/u6v7a4-2.png)
![1668580075962](D:/folder/study/md_files/output/98938714-6ae2-4ea9-967b-283dd72026bb.png)
![1668580075962](https://pic.bitday.top/i/2025/03/19/u760yh-2.png)
不管是设置值还是获取值,都需要:
@ -1372,15 +1372,15 @@ public class Test2Constructor(){
**4.获取类的成员方法**
![1668580761089](D:/folder/study/md_files/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png)
![1668580761089](https://pic.bitday.top/i/2025/03/19/u6wt58-2.png)
获取**单个**指定的成员方法:第一个参数填**方法名**、第二个参数填方法中的**参数类型**
![1668581678388](D:/folder/study/md_files/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png)
![1668581678388](https://pic.bitday.top/i/2025/03/19/u6w6fd-2.png)
执行:第一个参数传入一个**对象**,然后是若干方法参数(无参可不写)...
![1668581800777](D:/folder/study/md_files/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png)
![1668581800777](https://pic.bitday.top/i/2025/03/19/u6weqw-2.png)
@ -1476,7 +1476,7 @@ public class FieldReflectionTest {
### Junit 单元测试
![image-20240307172717512](D:/folder/study/md_files/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png)
![image-20240307172717512](https://pic.bitday.top/i/2025/03/19/u75u7l-2.png)
```
@Test
@ -1490,7 +1490,7 @@ public class FieldReflectionTest {
写了@Test注解,那么该测试函数就可以直接运行!若一个测试类中写了多个测试方法,可以全部执行!
![image-20240307173454288](D:/folder/study/md_files/output/ec79fd42-7641-46a8-9507-0867f0759023.png)
![image-20240307173454288](https://pic.bitday.top/i/2025/03/19/u6um98-2.png)
原理可能是:
@ -1531,7 +1531,7 @@ public class AnnotationTest4 {
在Springboot中如何快速生成单元测试
选中类名,右键:
<img src="D:/folder/study/md_files/output/1a75be61-2a80-4389-bb41-177a84e301c8.png" alt="image-20240815093428359" style="zoom:80%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u6vlxn-2.png" alt="image-20240815093428359" style="zoom:80%;" />

View File

@ -14,7 +14,7 @@
# 为什么学Jupyter notebook
![jupyter notebook](D:/folder/study/md_files/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png)
![jupyter notebook](https://pic.bitday.top/i/2025/03/19/u78rry-2.png)
能够编写、运行python文件的程序很多比如python安装自带的IDLE、程序员喜爱的pycharm、数据科学全家桶Anaconda还有Spyder、Thonny等。
@ -34,7 +34,7 @@ Jupyter notebook是用python进行数据科学、机器学习的必备工具。
比如下图包含了Markdown说明文档、代码块、代码运行结果、图片嵌入等元素特别适合Python数据科学和机器学习撰写文档。
![jupyter notebook代码分块运行、嵌入Markdown文档和图片](D:/folder/study/md_files/output/22821bd8-1a25-434c-90e9-50206f09c89b.png)
![jupyter notebook代码分块运行、嵌入Markdown文档和图片](https://pic.bitday.top/i/2025/03/19/u7977l-2.png)
吴恩达的《深度学习》慕课的课后编程作业、大数据竞赛网站Kaggle上的代码文档、美国大学的数据科学课程的课后资料及编程作业都是以jupyter notebook文件的形式给出的也就是`.ipynb`文件。
@ -54,7 +54,7 @@ Jupyter notebook是基于Ipython内核的在浏览器中以网页形式运行
>
> Spyder和Jupyter notebook都是以Ipython为内核的。
![ipython](D:/folder/study/md_files/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png)
![ipython](https://pic.bitday.top/i/2025/03/19/u76zwi-2.png)
## 安装Jupyter notebook
@ -70,7 +70,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
打开命令行,输入`jupter notebook`,回车。稍等片刻即可跳出浏览器网页。
![jupyter notebook打开界面](D:/folder/study/md_files/output/615e3133-9e33-43bb-91ec-e150edd90925.png)
![jupyter notebook打开界面](https://pic.bitday.top/i/2025/03/19/u76q0r-2.png)
点击右边的New-Python3即可创建python文档。
@ -82,7 +82,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
勾选文件夹点击rename即可重命名
![勾选文件夹点击rename重命名](D:/folder/study/md_files/output/2d584571-9ead-4b78-a039-0903b70b82ac.png)
![勾选文件夹点击rename重命名](https://pic.bitday.top/i/2025/03/19/u78ido-2.png)
最常用的是点击右边的New-Python3创建python文档。
@ -92,13 +92,13 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
点击左上角`Untitled`给新建的python文档文件重新命名。
![重命名](D:/folder/study/md_files/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png)
![重命名](https://pic.bitday.top/i/2025/03/19/u78ok4-2.png)
在代码框中输入第一行python代码shift+回车运行
![输入第一行python代码](D:/folder/study/md_files/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png)
![输入第一行python代码](https://pic.bitday.top/i/2025/03/19/u77p8q-2.png)
![运行第一行python代码](D:/folder/study/md_files/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png)
![运行第一行python代码](https://pic.bitday.top/i/2025/03/19/u7887c-2.png)
@ -136,14 +136,14 @@ Jupyter notebook中有两种单元格代码单元格和Markdown单元格
>我是引用,我这行开头有一个灰色竖杠
[我是外部链接,点我上百度](www.baidu.com)
![我是图片](D:/folder/study/md_files/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp)
![我是图片](https://pic.bitday.top/i/2025/03/19/u78z3p-2.webp)
```
![编辑Markdown单元格](D:/folder/study/md_files/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png)
![编辑Markdown单元格](https://pic.bitday.top/i/2025/03/19/u776mh-2.png)
然后按`shift`+`Enter`运行该单元格。
![Markdown渲染效果](D:/folder/study/md_files/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png)
![Markdown渲染效果](https://pic.bitday.top/i/2025/03/19/u77xx9-2.png)
@ -191,9 +191,9 @@ l 显示代码行号
h 查看所有快捷键
![命令模式快捷键](D:/folder/study/md_files/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png)
![命令模式快捷键](https://pic.bitday.top/i/2025/03/19/u76kzy-2.png)
![编辑模式快捷键](D:/folder/study/md_files/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png)
![编辑模式快捷键](https://pic.bitday.top/i/2025/03/19/u76bin-2.png)
## 在Markdown单元格中输入数学公式
@ -209,17 +209,17 @@ $$x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$$
初中数学内容
```
![在Markdown单元格中输入Latex公式](D:/folder/study/md_files/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png)
![在Markdown单元格中输入Latex公式](https://pic.bitday.top/i/2025/03/19/u79kp5-2.png)
`shift`+`Enter`渲染运行:
![渲染之后的Latex数学公式](D:/folder/study/md_files/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png)
![渲染之后的Latex数学公式](https://pic.bitday.top/i/2025/03/19/u77e5c-2.png)
# 数据分析与可视化实战案例:学习时间与成绩的关系(线性回归)
先用excel把玩数据
![excel中的线性回归](D:/folder/study/md_files/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png)
![excel中的线性回归](https://pic.bitday.top/i/2025/03/19/u77ljl-2.png)
观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化

View File

@ -134,7 +134,7 @@ create table 表名(
eg
![image-20220829143005524](D:/folder/study/md_files/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png)
![image-20220829143005524](https://pic.bitday.top/i/2025/03/19/u7brwj-2.png)
```
create table tb_user (
@ -472,7 +472,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名)
### 一对多
![image-20221206230156403](D:/folder/study/md_files/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png)
![image-20221206230156403](https://pic.bitday.top/i/2025/03/19/u7bf4a-2.png)
**一对多关系实现:在数据库表中多的一方,添加外键字段,来关联'一'这方的主键。**
@ -511,7 +511,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名)
- 内连接相当于查询A、B交集部分数据
![image-20221207165446062](D:/folder/study/md_files/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.png)
![image-20221207165446062](https://pic.bitday.top/i/2025/03/19/u7b5ng-2.png)
2. 外连接
@ -582,7 +582,7 @@ from tb_emp AS emp right join tb_dept AS dept
on emp.dept_id = dept.id;
```
![image-20240306190305575](D:/folder/study/md_files/output/a3003189-9a5f-491f-8a62-9496d63befcd.png)
![image-20240306190305575](https://pic.bitday.top/i/2025/03/19/u7c5gf-2.png)
### 子查询
@ -807,7 +807,7 @@ musql默认采用B+树来作索引
下面我们来看看B+Tree(多路平衡搜索树)结构中如何避免这个问题:
![image-20221208181315728](D:/folder/study/md_files/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png)
![image-20221208181315728](https://pic.bitday.top/i/2025/03/19/u7bnxa-2.png)
B+Tree结构

View File

@ -26,7 +26,7 @@ exit
## Redis数据类型
<img src="D:/folder/study/md_files/output/ebc9fa82-1269-49dc-9510-7e3d713b6058.png" alt="image-20221130190150749" style="zoom:50%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7ckos-2.png" alt="image-20221130190150749" style="zoom:50%;" />
**解释说明:**
@ -59,7 +59,7 @@ Redis hash 是一个string类型的 field 和 value 的映射表hash特别适
- **HKEYS** key 获取哈希表中所有字段
- **HVALS** key 获取哈希表中所有值
<img src="D:/folder/study/md_files/output/d09f0172-aed7-4e68-9abd-f3ac9dd7a063.png" alt="image-20221130193121969" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7cyeg-2.png" alt="image-20221130193121969" style="zoom:67%;" />
### 列表操作
@ -71,7 +71,7 @@ Redis 列表是简单的字符串列表,按照插入顺序排序,常用命
- **LLEN** key 获取列表长度
- **BRPOP** key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止
<img src="D:/folder/study/md_files/output/95d66eec-0e52-4abc-8f38-42cd7160aa3e.png" alt="image-20221130193332666" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7cqgp-2.png" alt="image-20221130193332666" style="zoom:67%;" />
### 集合操作
@ -84,7 +84,7 @@ Redis set 是string类型的无序集合。集合成员是唯一的这就意
- **SUNION** key1 [key2] 返回所有给定集合的并集
- **SREM** key member1 [member2] 移除集合中一个或多个成员
<img src="D:/folder/study/md_files/output/948235d7-c37c-4dc2-ab0c-ef579fdfa911.png" alt="image-20221130193532735" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7d7ff-2.png" alt="image-20221130193532735" style="zoom:67%;" />
### 有序集合
@ -97,7 +97,7 @@ Redis有序集合是string类型元素的集合且不允许有重复成员。
- **ZINCRBY** key increment member 有序集合中对指定成员的分数加上**增量** increment
- **ZREM** key member [member ...] 移除有序集合中的一个或多个成员
<img src="D:/folder/study/md_files/output/72a176d7-a4c0-4642-a680-5b3cf7cb937a.png" alt="image-20221130193951036" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7c9il-2.png" alt="image-20221130193951036" style="zoom:67%;" />
### 通用命令

View File

@ -99,14 +99,14 @@ pip freeze > requirements.txt
如果你的pycharm中使用conda环境那么你在pycharm的终端中所用的可能不是conda环境
![image-20240729155102345](D:/folder/study/md_files/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png)
![image-20240729155102345](https://pic.bitday.top/i/2025/03/19/u64mge-2.png)
解决办法: shell path改为 cmd.exe
这样虚拟环境就默认设置为conda环境了
![image-20240729161200801](D:/folder/study/md_files/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png)
![image-20240729161200801](https://pic.bitday.top/i/2025/03/19/u63x6o-2.png)
![image-20240729161242191](D:/folder/study/md_files/output/0341f054-591e-42dd-b80a-17c188419e6e.png)
![image-20240729161242191](https://pic.bitday.top/i/2025/03/19/u643bi-2.png)
@ -114,7 +114,7 @@ pip freeze > requirements.txt
如果命令行cd到项目根目录所用的也并不是conda环境这里用的是conda的默认环境
![image-20240729155148576](D:/folder/study/md_files/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png)
![image-20240729155148576](https://pic.bitday.top/i/2025/03/19/u64ph0-2.png)
@ -128,7 +128,7 @@ pip freeze > requirements.txt
4.输入命令
![image-20240729155310049](D:/folder/study/md_files/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png)
![image-20240729155310049](https://pic.bitday.top/i/2025/03/19/u63pza-2.png)

View File

@ -29,7 +29,7 @@ git config --system --list :系统配置的
## 核心原理
![](D:/folder/study/md_files/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png)
![](https://pic.bitday.top/i/2025/03/19/u6ap8d-2.png)
index是暂存区
@ -57,7 +57,7 @@ remote是远程仓库通常是github/gitee码云
- git init 新建本地仓库,生成.git隐藏文件点进去有head文件。
- git remote add origin url可以绑定远程仓库
![](D:/folder/study/md_files/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png)
![](https://pic.bitday.top/i/2025/03/19/u6b609-2.png)
- 继续输入git pull origin master若你远程仓库为空不需要这一步
- git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区
@ -84,19 +84,19 @@ remote是远程仓库通常是github/gitee码云
1. **配置Git**
![image-20240425104918549](D:/folder/study/md_files/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png)
![image-20240425104918549](https://pic.bitday.top/i/2025/03/19/u6adqm-2.png)
2. **关联自己的github**
![image-20240425104950049](D:/folder/study/md_files/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png)
![image-20240425104950049](https://pic.bitday.top/i/2025/03/19/u69xzj-2.png)
**对于任何安卓项目,前两步都是通用的!!!**
3.
![image-20240425105318414](D:/folder/study/md_files/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png)
![image-20240425105318414](https://pic.bitday.top/i/2025/03/19/u69e7z-2.png)
![image-20240425105341246](D:/folder/study/md_files/output/3073bcd9-d022-483b-a082-e29e1291cc52.png)
![image-20240425105341246](https://pic.bitday.top/i/2025/03/19/u6a79u-2.png)
这里的Remote填远程仓库地址eg https://github.com/zhangww-web/JianShu.git
@ -106,7 +106,7 @@ remote是远程仓库通常是github/gitee码云
点击顶部菜单栏的 `Git -> Manage Remotes`
![image-20250308102802964](D:/folder/study/md_files/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png)
![image-20250308102802964](https://pic.bitday.top/i/2025/03/19/u69pse-2.png)
@ -171,7 +171,7 @@ git branch -d dev 删除dev分支
git branch -m dev cs :将dev分支修改名称为cs分支
![](D:/folder/study/md_files/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png)
![](https://pic.bitday.top/i/2025/03/19/u692lj-2.png)
@ -181,7 +181,7 @@ git branch -m dev cs :将dev分支修改名称为cs分支
此时查看你的代理服务器的端口发现是7890
<img src="D:/folder/study/md_files/output/dc0f5ec4-a20d-4f2b-be5f-301d6d18bc89.png" alt="image-20240802181935378" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u696eo-2.png" alt="image-20240802181935378" style="zoom:67%;" />
然后打开git bash,输入以下代码:
@ -359,7 +359,7 @@ git config --global credential.helper store //将凭据保存到磁盘上(明
git rm -r --cached 'dictory'/
```
![](D:/folder/study/md_files/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png)在.gitignore文件进行添加
![](https://pic.bitday.top/i/2025/03/19/u68fal-2.png)在.gitignore文件进行添加
**为什么`.gitignore`文件不放在`.git`文件夹中?**
@ -378,7 +378,7 @@ git rm -r --cached 'dictory'/
COVID-19-Detector is registered as a Git root, but no Git repositories were found there.
![image-20240729113527314](D:/folder/study/md_files/output/af77f789-280a-40ce-bc40-66db8ed53a39.png)
![image-20240729113527314](https://pic.bitday.top/i/2025/03/19/u68ka9-2.png)
@ -396,5 +396,5 @@ COVID-19-Detector is registered as a Git root, but no Git repositories were foun
- 导航到仓库设置中的“Manage access”管理访问或“Collaborators”协作者部分。
- 添加协作者的GitHub用户名并设置他们的访问级别。
![image-20240524100231379](D:/folder/study/md_files/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png)
![image-20240524100231379](https://pic.bitday.top/i/2025/03/19/u6ak14-2.png)

View File

@ -10,7 +10,7 @@
DNS解析可能需等待几分钟生效
![](D:/folder/study/md_files/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png)
![](https://pic.bitday.top/i/2025/03/19/u7b14x-2.png)
买的域名的r2studying.top 这里的HOSTNAME相当于二级域名如npm.r2studying.top
@ -253,7 +253,7 @@ DNS解析可能需等待几分钟生效
nano /etc/apt/sources.list #打开sources.list文件
```
![](D:/folder/study/md_files/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png)
![](https://pic.bitday.top/i/2025/03/19/u7ankb-2.png)
Ctrl+O:保存修改 ->弹出询问-> Y则保存N则不保存,ctrl+c 取消操作。
@ -631,7 +631,7 @@ proxies:
简便方法windows上将订阅链接导入自动解析成yaml配置文件然后直接把该文件传到服务器上
![image-20250309173756312](D:/folder/study/md_files/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png)
![image-20250309173756312](https://pic.bitday.top/i/2025/03/19/u79q0t-2.png)
@ -847,7 +847,7 @@ services:
cd /data/easyimage/config/config.php
```
![image-20250315101454031](D:/folder/study/md_files/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png)
![image-20250315101454031](https://pic.bitday.top/i/2025/03/19/u7apqr-2.png)
这里添加上https
@ -855,7 +855,7 @@ cd /data/easyimage/config/config.php
网站域名 图片域名设置可以改变图片的urlIP或域名
![image-20250306183642549](D:/folder/study/md_files/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png)
![image-20250306183642549](https://pic.bitday.top/i/2025/03/19/u7a1lv-2.png)
@ -868,7 +868,7 @@ cd /data/easyimage/config/config.php
2.插件设置搜索web-uploader 1.1.1 自定义web图床
旧版有搜索不出来的情况!建议直接安装最新版!
3.配置如下API地址从easyimage-设置-API设置中获取![image-20250306141151376](D:/folder/study/md_files/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png)
3.配置如下API地址从easyimage-设置-API设置中获取![image-20250306141151376](https://pic.bitday.top/i/2025/03/19/u79xiv-2.png)

View File

@ -4,7 +4,7 @@ int main(){
}
```
# ![测试](D:/folder/study/md_files/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png)
# ![测试](https://pic.bitday.top/i/2025/03/19/u7da13-2.png)
# 一级标题:# xx

View File

@ -5,23 +5,23 @@
最近想在我的书城中开发一下阅读器的功能难度颇高因此在github上找到了一个封装了阅读器功能的项目仅需获得文件本地存储地址调用其提供的函数即可进行阅读。
**但是**github介绍的使用方法并不总是有效比如我就经常无法正确添加依赖
![image-20240503200121198](D:/folder/study/md_files/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png)
![image-20240503200121198](https://pic.bitday.top/i/2025/03/19/u7dq7u-2.png)
因此,我将其项目代码拷贝到本地,手动集成。
![image-20240503200221147](D:/folder/study/md_files/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png)
![image-20240503200221147](https://pic.bitday.top/i/2025/03/19/u7djxz-2.png)
依据项目结构可以发现app是主项目hwtxtreaderlib是功能模块根据是这张图
![image-20240503200343665](D:/folder/study/md_files/output/4016b542-0162-4b87-b590-cb15e8377076.png)
![image-20240503200343665](https://pic.bitday.top/i/2025/03/19/u7dxvc-2.png)
build.gradle(:app)中引入了hwtxtreaderlib的依赖而app只是个demo测试模块相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此手动步骤如下
- 将hwtxtreaderlib复制到自己的项目文件夹中
![image-20240503200651488](D:/folder/study/md_files/output/cc409c48-a01a-480d-9c00-5692f0112184.png)
![image-20240503200651488](https://pic.bitday.top/i/2025/03/19/u7eub5-2.png)
- 在app的build.gradle中添加依赖
@ -37,11 +37,11 @@ implementation project(':hwtxtreaderlib')
- syn now 同步一下然后android studio中项目结构变成如下图
![image-20240503201012590](D:/folder/study/md_files/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png)
![image-20240503201012590](https://pic.bitday.top/i/2025/03/19/u7en9c-2.png)
- build没报错基本就稳了然后就运行试试
![image-20240503201211104](D:/folder/study/md_files/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png)
![image-20240503201211104](https://pic.bitday.top/i/2025/03/19/u7eesw-2.png)
这里可能AndroidManifest.xml报错需要查看原项目中app模块如何编写的做些适当的修改我这里卡了很久.
@ -49,4 +49,4 @@ implementation project(':hwtxtreaderlib')
**非常重要!!!**有时候github项目会将项目的详细信息写在wiki中
![image-20240503213919450](D:/folder/study/md_files/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png)
![image-20240503213919450](https://pic.bitday.top/i/2025/03/19/u7e586-2.png)

View File

@ -145,9 +145,9 @@ mybatis-plus:
`Wrapper`就是条件构造的抽象类,其下有很多默认实现,继承关系如图:
![image-20240813112049624](D:/folder/study/md_files/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png)
![image-20240813112049624](https://pic.bitday.top/i/2025/03/19/u7fwe0-2.png)
![image-20240813134824946](D:/folder/study/md_files/output/956ffdba-8095-4281-b541-8013f6ed8395.png)
![image-20240813134824946](https://pic.bitday.top/i/2025/03/19/u7f24w-2.png)
**QueryWrapper**
@ -360,17 +360,17 @@ int rows = userMapper.delete(queryWrapper);
#### IService
![image-20240815092311650](D:/folder/study/md_files/output/5691be63-1063-429f-98e1-e012d9e36190.png)
![image-20240815092311650](https://pic.bitday.top/i/2025/03/19/u7g3qb-2.png)
![image-20240815092324887](D:/folder/study/md_files/output/2b562250-35a6-4965-aadb-de00f9702c26.png)
![image-20240815092324887](https://pic.bitday.top/i/2025/03/19/u7gmfr-2.png)
![image-20240815092338012](D:/folder/study/md_files/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png)
![image-20240815092338012](https://pic.bitday.top/i/2025/03/19/u7frqa-2.png)
![image-20240815092352179](D:/folder/study/md_files/output/ad306344-6366-4bef-ba75-a01e995acb47.png)
![image-20240815092352179](https://pic.bitday.top/i/2025/03/19/u7gubw-2.png)
![image-20240815092420201](D:/folder/study/md_files/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png)
![image-20240815092420201](https://pic.bitday.top/i/2025/03/19/u7gbph-2.png)
![image-20240815092604848](D:/folder/study/md_files/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png)
![image-20240815092604848](https://pic.bitday.top/i/2025/03/19/u7f9pf-2.png)
由于`Service`中经常需要定义与业务有关的自定义方法,因此我们不能直接使用`IService`,而是自定义`Service`接口,然后继承`IService`以拓展方法。同时,让自定义的`Service实现类`继承`ServiceImpl`,这样就不用自己实现`IService`中的接口了。

View File

@ -18,7 +18,7 @@ git clone地址http://47.98.59.178:3000/zy123/zbparse.git
## 项目启动与维护:
![1](D:/folder/study/md_files/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.png)
![1](https://pic.bitday.top/i/2025/03/19/u7gwuk-2.png)
.env存放一些密钥大模型、textin等它是gitignore忽略了因此在服务器上git pull项目的时候这个文件不会更新因为密钥比较重要需要手动维护服务器相应位置的.env。
@ -28,7 +28,7 @@ git clone地址http://47.98.59.178:3000/zy123/zbparse.git
1. 进入项目文件夹
![1](D:/folder/study/md_files/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png)
![1](https://pic.bitday.top/i/2025/03/19/u7rz9c-2.png)
**注意:**需要确认.env是否存在在服务器默认是隐藏的
输入cat .env
@ -54,7 +54,7 @@ requirements.txt一般无需变动除非代码中使用了新的库也要
**docker-compose:**
![1](D:/folder/study/md_files/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png)
![1](https://pic.bitday.top/i/2025/03/19/u7r7e6-2.png)
本项目为**单服务项目**只有flask_app(服务名)
@ -67,7 +67,7 @@ build context`context: .`
**dockerfile:**
![1](D:/folder/study/md_files/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png)
![1](https://pic.bitday.top/i/2025/03/19/u7uvxt-2.png)
COPY . .(在 Dockerfile 中):
这条指令会将构建上下文中的所有内容复制到镜像中的当前工作目录(这里是 `/flask_project`)。
@ -138,9 +138,9 @@ docker image prune
2. .env环境配好 一般不需要在电脑环境变量中额外配置了但是要在Pycharm中**安装插件**,使得项目在**启动时**能将env中的环境变量**自动配置**到系统环境变量中!!!)
3. 点击下拉框Edit configurations
![1](D:/folder/study/md_files/output/e4fb54fb-9f59-4f68-8540-29105621b825.png)
![1](https://pic.bitday.top/i/2025/03/19/u7trp1-2.png)
设置run_serve.py为启动脚本![1](D:/folder/study/md_files/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png)
设置run_serve.py为启动脚本![1](https://pic.bitday.top/i/2025/03/19/u7viek-2.png)
注意这里的working directory要设置到最外层文件夹而不是flask_app
@ -408,7 +408,7 @@ mem_after = memory_usage()[0]
memory_usage()[0] 可以获取当前程序所占内存的**快照**
![1](D:/folder/study/md_files/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png)
![1](https://pic.bitday.top/i/2025/03/19/u7vqf9-2.png)
产生的数据都存到result变量-》内存中这是正常的因此my_function没有内存泄漏问题。
**但是**
@ -427,7 +427,7 @@ def extract_text_by_page(file_path):
return ""
```
![1](D:/folder/study/md_files/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png)
![1](https://pic.bitday.top/i/2025/03/19/u7ukfk-2.png)
可以发现尽管我返回""内存仍然没有释放因为就是读取pdf这块发生了内存泄漏
@ -465,7 +465,7 @@ for stat in stats[:10]:
tracemalloc.stop()
```
![1](D:/folder/study/md_files/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png)
![1](https://pic.bitday.top/i/2025/03/19/u7vdu0-2.png)
tracemalloc能更深入的分析不仅是自己写的代码**调用的库函数**产生的内存也能分析出来。在这个例子中就是PyPDF2中的各个函数占用了大部分内存。
@ -566,7 +566,7 @@ def judge_zbfile_exec_sub(file_path):
但是存在一个问题:**第一次发送请求执行时间较慢!**
![1](D:/folder/study/md_files/output/31f24d30-27be-474c-869f-f76ca3fc1288.png)
![1](https://pic.bitday.top/i/2025/03/19/u7us5y-2.png)
可以发现实际执行只需7.7s但是接口实际耗时10.23秒,主要是因**懒加载或按需初始化**:有些模块或资源在子进程启动时并不会马上加载,而是在子进程首次真正执行任务时才进行初始化。
@ -597,7 +597,7 @@ threading.Thread(target=warmup_request, daemon=True).start()
## flask_app结构介绍
<img src="D:/folder/study/md_files/output/c58b6629-3854-4fc4-b5ca-9cf1ab245cee.png" alt="1" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7i429-2.png" alt="1" style="zoom:67%;" />
@ -697,7 +697,7 @@ app.connection_limiters['upload'] = ConnectionLimiter(max_connections=100)
是公共函数存放的文件夹llm下是各类大模型读取文件下是docx pdf文件的读取以及文档清理clean_pdf去页眉页脚页码
![1](D:/folder/study/md_files/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png)
![1](https://pic.bitday.top/i/2025/03/19/u7sxx7-2.png)
general下的llm下的清除file_id.py 需要**每周运行至少一次**防止file_id数量超出我这边对每次请求结束都有file_id记录并清理向应该还没加
@ -725,7 +725,7 @@ post_processing中的**process_functions_in_parallel**提取
资格审查、技术偏离、 商务偏离、 所需提交的证明材料
![1](D:/folder/study/md_files/output/3fc27036-4e60-4daf-9599-4de21458b9de.png)
![1](https://pic.bitday.top/i/2025/03/19/u7sqz1-2.png)
大解析upload用了post_processing完整版
@ -755,9 +755,9 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
若开头没截准就改begin_pattern末尾没截准就改end_pattern
![1](D:/folder/study/md_files/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png)
![1](https://pic.bitday.top/i/2025/03/19/u7r56h-2.png)
![1](D:/folder/study/md_files/output/aebc0281-531f-4bc0-b048-22fe10c64015.png)
![1](https://pic.bitday.top/i/2025/03/19/u7hd6v-2.png)
另外:在*截取pdf货物标版*.py中还有extract_pages_twice函数即第一次没有切分到之后会运行该函数这边又有一套begin_pattern和end_pattern即二次提取
@ -765,7 +765,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
**如何测试?**
![1](D:/folder/study/md_files/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png)
![1](https://pic.bitday.top/i/2025/03/19/u7vy07-2.png)
输入pdf_path和你要切分的序号selection=1代表切公告依次类推可以看切出来的效果如何。
@ -778,7 +778,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
这里如果段落中既被正则匹配又被follow_up_keywords中的任意一个匹配那么不会添加到temp中即不会被大模型筛选它会**直接添加**到最后的返回中!
![1](D:/folder/study/md_files/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png)
![1](https://pic.bitday.top/i/2025/03/19/u7hwyg-2.png)
@ -796,7 +796,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
都是废弃文件代码,未在正式、测试环境中使用的,不用管
![1](D:/folder/study/md_files/output/afca2091-945f-4b3e-8199-c23308c66f76.png)
![1](https://pic.bitday.top/i/2025/03/19/u7rphb-2.png)
@ -804,7 +804,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
是接口以及主要实现部分,一一对应
![1](D:/folder/study/md_files/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png)
![1](https://pic.bitday.top/i/2025/03/19/u7v3r9-2.png)
get_deviation对应偏离表数据解析main获得偏离表数据
@ -824,7 +824,7 @@ upload对应工程标解析和货物标解析即大解析
utils是接口这块的公共功能函数。其中validate_and_setup_logger函数对不同的接口请求对应到不同的output文件夹如upload->output1。后续增加接口也可直接在这里写映射关系。
![1](D:/folder/study/md_files/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png)
![1](https://pic.bitday.top/i/2025/03/19/u7tjt1-2.png)
重点关注大解析:**upload.py**和**货物标解析main.py**
@ -838,7 +838,7 @@ utils是接口这块的公共功能函数。其中validate_and_setup_logger函
各个文件夹(output1 output2..)对应不同的接口请求
![1](D:/folder/study/md_files/output/70538b35-0008-4b05-8256-11ff67bcf803.png)
![1](https://pic.bitday.top/i/2025/03/19/u7h4vo-2.png)
@ -850,7 +850,7 @@ testdir是平时写代码的测试的地方
它们都不影响正式和测试环境的解析
![1](D:/folder/study/md_files/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png)
![1](https://pic.bitday.top/i/2025/03/19/u7hpp5-2.png)
@ -858,7 +858,7 @@ testdir是平时写代码的测试的地方
是两个解析流程中不一样的地方(一样的都写在**general**中了)
![1](D:/folder/study/md_files/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png)
![1](https://pic.bitday.top/i/2025/03/19/u7x9km-2.png)
主要是货物标额外解析了采购要求提取采购需求main+技术参数要求提取+商务服务其他要求提取)
@ -868,7 +868,7 @@ testdir是平时写代码的测试的地方
ConnectionLimiter.py定义了接口超时时间->超时后断开与后端的连接
![1](D:/folder/study/md_files/output/4400b6f4-474c-4441-840f-3084e870ac13.png)
![1](https://pic.bitday.top/i/2025/03/19/u7w6yz-2.png)
logger_setup.py 为每个请求创建单独的log每个log对应一个log.txt
@ -894,13 +894,13 @@ start_up.py是启动脚本run_serve也是启动脚本是对start_up.py的
2. 大解析中返回了技术评分,后端接收后不仅显示给前端,还会返给向,用于生成技术偏离表
3. 小解析时get_deviation.py其实也可以返回技术评分但是没有返回因为没人和我对接暂时注释了。
![1](D:/folder/study/md_files/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png)
![1](https://pic.bitday.top/i/2025/03/19/u7t9d7-2.png)
4.商务评议和技术评议偏离表,即评分细则的偏离表,暂时没做,但是**商务评分、技术评分**无论大解析还是小解析都解析了,稍微对该数据处理一下返回给后端就行。
![1](D:/folder/study/md_files/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png)
![1](https://pic.bitday.top/i/2025/03/19/u7rf1o-2.png)
这个是解析得来的结果,适合给前端展示,但是要生成商务技术评议偏离表的话,需要再调一次大模型,对该数据进行重新归纳,以字符串列表为佳。再传给后端。(未做)
@ -1212,22 +1212,22 @@ if __name__ == '__main__':
### 项目贡献
![1](D:/folder/study/md_files/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png)
![1](https://pic.bitday.top/i/2025/03/19/u7i84d-2.png)
![1](D:/folder/study/md_files/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png)
![1](https://pic.bitday.top/i/2025/03/19/u7s5x0-2.png)
![1](D:/folder/study/md_files/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png)
![1](https://pic.bitday.top/i/2025/03/19/u7wpu4-2.png)
![1](D:/folder/study/md_files/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png)
![1](https://pic.bitday.top/i/2025/03/19/u7tzvp-2.png)
### 效果图
![1](D:/folder/study/md_files/output/f37d901f-2715-4937-b68f-6e753f922323.png)
![1](https://pic.bitday.top/i/2025/03/19/u7wvd4-2.png)
![](D:/folder/study/md_files/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif)
![](https://pic.bitday.top/i/2025/03/19/u7u7qh-2.gif)
![1](D:/folder/study/md_files/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png)
![1](https://pic.bitday.top/i/2025/03/19/u7smek-2.png)
![1](D:/folder/study/md_files/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png)
![1](https://pic.bitday.top/i/2025/03/19/u7tfw3-2.png)
![1](D:/folder/study/md_files/output/b529e498-4374-4265-9242-d1fe773712dc.png)
![1](https://pic.bitday.top/i/2025/03/19/u7x3g6-2.png)

View File

@ -4,7 +4,7 @@
### 后端项目结构
![image-20240327104750952](D:/folder/study/md_files/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png)
![image-20240327104750952](https://pic.bitday.top/i/2025/03/19/u7xl9k-2.png)
分析sky-pojo模块的每个包的作用
@ -170,7 +170,7 @@ public class EmployeeLoginDTO implements Serializable {
}
```
![image-20240327170247852](D:/folder/study/md_files/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png)
![image-20240327170247852](https://pic.bitday.top/i/2025/03/19/u7ybj9-2.png)
## 开发
@ -288,7 +288,7 @@ public class BaseContext {
在属性上加上注解,对日期进行格式化
<img src="D:/folder/study/md_files/output/139ea234-029d-4e2e-894c-2b9e66781859.png" alt="image-20221112103501581" style="zoom:67%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u7y008-2.png" alt="image-20221112103501581" style="zoom:67%;" />
但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。
@ -771,7 +771,7 @@ public static String doGet(String url,Map<String,String> paramMap){
## 微信小程序
![image-20221204211800753](D:/folder/study/md_files/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png)
![image-20221204211800753](https://pic.bitday.top/i/2025/03/19/u7y804-2.png)
@ -779,7 +779,7 @@ public static String doGet(String url,Map<String,String> paramMap){
用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。
![image-20221208180228667](D:/folder/study/md_files/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png)
![image-20221208180228667](https://pic.bitday.top/i/2025/03/19/u80ct0-2.png)
@ -787,7 +787,7 @@ public static String doGet(String url,Map<String,String> paramMap){
通过Redis来缓存菜品数据减少数据库查询操作。
![image-20221208180818572](D:/folder/study/md_files/output/8b76c934-d652-46de-9230-45df704578f8.png)
![image-20221208180818572](https://pic.bitday.top/i/2025/03/19/u7yytn-2.png)
@ -952,19 +952,19 @@ Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要
https://pay.weixin.qq.com/static/product/product_index.shtml
![image-20221214223910840](D:/folder/study/md_files/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png)
![image-20221214223910840](https://pic.bitday.top/i/2025/03/19/u7z7u7-2.png)
**5.商户系统调用微信后台:**
![image-20221214224409174](D:/folder/study/md_files/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png)
![image-20221214224409174](https://pic.bitday.top/i/2025/03/19/u7zxts-2.png)
**10.用户调起微信支付**
![image-20221214224551220](D:/folder/study/md_files/output/5783f31c-9512-4e5b-9835-0347d288ced4.png)
![image-20221214224551220](https://pic.bitday.top/i/2025/03/19/u7zlem-2.png)
@ -984,7 +984,7 @@ https://pay.weixin.qq.com/static/product/product_index.shtml
复制authtoken
![image-20240806133753849](D:/folder/study/md_files/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png)
![image-20240806133753849](https://pic.bitday.top/i/2025/03/19/u7yuuq-2.png)
执行命令:
@ -1002,7 +1002,7 @@ cpolar.exe authtoken ZmIwMmQzZDYtZDE2ZS00ZGVjLWE2MTUtOGQ0YTdhOWI2M2Q1
cpolar.exe http 8080
```
![image-20240806135141280](D:/folder/study/md_files/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png)
![image-20240806135141280](https://pic.bitday.top/i/2025/03/19/u7xscv-2.png)
这里的 https://52ac2ecb.r18.cpolar.top 就是与http://localhost:8080对应的临时域名。
@ -1024,7 +1024,7 @@ cpolar.exe http 8080
每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
![image-20240807141614724](D:/folder/study/md_files/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png)
![image-20240807141614724](https://pic.bitday.top/i/2025/03/19/u7yh97-2.png)
cron表达式在线生成器https://cron.qqe2.com/
@ -1036,7 +1036,7 @@ cron表达式在线生成器https://cron.qqe2.com/
1). 导入maven坐标 spring-context已存在
<img src="D:/folder/study/md_files/output/f56c1c08-857e-4450-b1c2-4397398a1214.png" alt="image-20221218193251182" style="zoom:50%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u805dw-2.png" alt="image-20221218193251182" style="zoom:50%;" />
2). 启动类添加注解 @EnableScheduling 开启任务调度

View File

@ -6,7 +6,7 @@ PID控制器是一种常用的反馈控制系统广泛应用于工业控制
**开环控制系统**
![image-20240324175333458](D:/folder/study/md_files/output/42e0c8d0-a392-4302-9410-4d302661d9df.png)
![image-20240324175333458](https://pic.bitday.top/i/2025/03/19/u81bty-2.png)
前馈控制系统尝试预先计算扰动对系统的影响,并在扰动影响系统输出之前调整输入以抵消它。
@ -16,17 +16,17 @@ PID控制器是一种常用的反馈控制系统广泛应用于工业控制
控制器接收误差信号。该系统通过反馈回路来自动调节其输出
![image-20240324175424762](D:/folder/study/md_files/output/ec703e24-5fc9-4370-878d-a894da134165.png)
![image-20240324175424762](https://pic.bitday.top/i/2025/03/19/u80vqi-2.png)
![image-20240324175627295](D:/folder/study/md_files/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png)
![image-20240324175627295](https://pic.bitday.top/i/2025/03/19/u81xpc-2.png)
**复合控制系统**
![image-20240324175704820](D:/folder/study/md_files/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png)
![image-20240324175704820](https://pic.bitday.top/i/2025/03/19/u829qe-2.png)
## 连续与离散信号
![image-20240324180342885](D:/folder/study/md_files/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png)
![image-20240324180342885](https://pic.bitday.top/i/2025/03/19/u81rj3-2.png)
从连续信号到离散信号的转换过程涉及以下步骤:
@ -37,25 +37,25 @@ PID控制器是一种常用的反馈控制系统广泛应用于工业控制
## PID公式
![image-20240324181124423](D:/folder/study/md_files/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png)
![image-20240324181124423](https://pic.bitday.top/i/2025/03/19/u82vaz-2.png)
控制系统中的传感器会**连续**监测被控制对象的状态例如温度、压力、位置等而PID控制器通过在固定的**采样间隔**收集输入信号,将其转换为**离散信号**计算控制动作然后输出到控制对象。离散PID控制的优势在于其灵活性和适应性它可以轻松地与软件算法集成。
## 直观例子
![image-20240324182805939](D:/folder/study/md_files/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png)
![image-20240324182805939](https://pic.bitday.top/i/2025/03/19/u82f7p-2.png)
![image-20240324184041843](D:/folder/study/md_files/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png)
![image-20240324184041843](https://pic.bitday.top/i/2025/03/19/u80pbo-2.png)
**仅使用比例P控制无法消除稳态误差。**稳态误差是指当系统达到平衡状态时,控制系统的实际输出与期望输出之间的差异。
原因:当系统接近其期望点时,误差减小,进而控制器输出也减小。如果控制器输出减小到无法克服系统内部阻力(如摩擦力)或外部扰动的程度时,系统就无法进一步接近设定点,从而留下稳态误差。
![image-20240324184057164](D:/folder/study/md_files/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png)
![image-20240324184057164](https://pic.bitday.top/i/2025/03/19/u81lr6-2.png)
为了解决稳态误差问题通常会在P控制基础上加入积分I控制。积分控制能够累积误差即使是很小的误差也会随时间积累最终产生足够的控制作用以调整系统输出直到误差为零。
![image-20240324184110766](D:/folder/study/md_files/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png)
![image-20240324184110766](https://pic.bitday.top/i/2025/03/19/u814hg-2.png)
微分控制在PID控制器中的作用主要是提高系统的瞬态响应和稳定性。
$$
@ -67,7 +67,7 @@ $$
## 相关控制知识
![image-20240325101541488](D:/folder/study/md_files/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png)
![image-20240325101541488](https://pic.bitday.top/i/2025/03/19/u835sv-2.png)
当系统启动时或者遇到大的扰动,会产生大的初始误差。若系统调整缓慢,积分项会在达到目标状态之前累积很大的值。这可导致控制器输出超出了实际的执行器(比如电机、阀门等)可以处理的范围。当这种情况发生时,即使误差减少,由于积分项累积的值太大,控制器的输出可能仍然处于饱和状态。

View File

@ -38,7 +38,7 @@ D=inv(A) 求逆矩阵
E=zeros(10,5,3) 生成10行5列3维0矩阵
![](D:/folder/study/md_files/output/09747b1d-74f7-4c9d-818d-576680a30a96.png)
![](https://pic.bitday.top/i/2025/03/19/u80led-2.png)
#### 元胞数组

View File

@ -11,11 +11,11 @@
## 引入
![image-20240311130512387](D:/folder/study/md_files/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png)
![image-20240311130512387](https://pic.bitday.top/i/2025/03/19/u83obb-2.png)
![image-20240311130359589](D:/folder/study/md_files/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png)
![image-20240311130359589](https://pic.bitday.top/i/2025/03/19/u83gzm-2.png)
![image-20240311130828892](D:/folder/study/md_files/output/72d00f1b-9830-49db-8a81-855226f0978f.png)
![image-20240311130828892](https://pic.bitday.top/i/2025/03/19/u838h8-2.png)
## 公式

View File

@ -12,7 +12,7 @@
把图的邻接矩阵和节点特征“直接拼接”成固定维度的输入,然后将其送入一个深度神经网络(全连接层)进行学习。
![image-20250316142412685](D:/folder/study/md_files/output/554d273e-c4e3-4ac2-8573-01debad92434.png)
![image-20250316142412685](https://pic.bitday.top/i/2025/03/19/u8cfvq-2.png)
这种做法面临重大问题,导致其**并不可行**
@ -65,9 +65,9 @@
![image-20250316152729679](D:/folder/study/md_files/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png)
![image-20250316152729679](https://pic.bitday.top/i/2025/03/19/u8d0gg-2.png)
![image-20250316152836156](D:/folder/study/md_files/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png)
![image-20250316152836156](https://pic.bitday.top/i/2025/03/19/u8cr12-2.png)

View File

@ -415,7 +415,7 @@ $$
Var(X)=\mathrm{E}({X}^{2})-{[\mathrm{E}(X)]}^{2} \\
Var(kX)={k}^{2}Var(X)
$$
![image-20240506121834075](D:/folder/study/md_files/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png)
![image-20240506121834075](https://pic.bitday.top/i/2025/03/19/u8dlfd-2.png)
@ -426,7 +426,7 @@ $$
**协方差**
![image-20240310120438207](D:/folder/study/md_files/output/5c73b93f-e819-465b-bce5-0f029d556626.png)
![image-20240310120438207](https://pic.bitday.top/i/2025/03/19/u8f87w-2.png)
$$
\sum {p}_{i}({x}_{i}-{\mu }_{\mathrm{X}})({\mathcal{y}}_{i}-{\mu }_{Y})
\\ Cov\begin{pmatrix}X,Y
@ -445,13 +445,13 @@ $$
**X Y表示随机变量**
![image-20240315100802791](D:/folder/study/md_files/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png)
![image-20240315100802791](https://pic.bitday.top/i/2025/03/19/u8ff1k-2.png)
**协方差矩阵**
协方差矩阵计算了不同维度之间的协方差,它是一个对称矩阵
![image-20240310202835535](D:/folder/study/md_files/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png)
![image-20240310202835535](https://pic.bitday.top/i/2025/03/19/u8eawl-2.png)
**性质:**
@ -461,7 +461,7 @@ $$
$$
**推导:**
![400000](D:/folder/study/md_files/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png)
![400000](https://pic.bitday.top/i/2025/03/19/u8etaq-2.png)
## 高斯分布
@ -471,7 +471,7 @@ $$
\end{pmatrix}
$$
![image-20240310103741300](D:/folder/study/md_files/output/076407cc-070d-437d-93f9-5c50629ac058.png)
![image-20240310103741300](https://pic.bitday.top/i/2025/03/19/u8d6vh-2.png)
- x 在 μ-σ 和 μ+σ 之间的样本数量占到整个样本数量的 68.2%
- x 在 μ-2σ 和 μ+2σ 之间的样本数量占到整个样本数量的 95.4%
@ -483,11 +483,11 @@ $$
我们通常会尝试最小化方差,以尽可能减小状态估计的不确定性,从而获得更可靠和准确的估计结果
![image-20240311132453071](D:/folder/study/md_files/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png)
![image-20240311132453071](https://pic.bitday.top/i/2025/03/19/u8dbq1-2.png)
## 拉普拉斯变换
![image-20240413112801149](D:/folder/study/md_files/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png)
![image-20240413112801149](https://pic.bitday.top/i/2025/03/19/u8f2b5-2.png)
## 矩阵运算
@ -588,7 +588,7 @@ $$
**全连接神经网络**
![image-20250316145729703](D:/folder/study/md_files/output/00e2004b-8cd5-4658-9742-61475d13703b.png)
![image-20250316145729703](https://pic.bitday.top/i/2025/03/19/u8fmco-2.png)
其中:
@ -1007,9 +1007,9 @@ $$
## 幂迭代
![image-20240428174019083](D:/folder/study/md_files/output/33831492-711f-44d2-a637-332aae872fd8.png)
![image-20240428174019083](https://pic.bitday.top/i/2025/03/19/u8ecqs-2.png)
![image-20240428173732285](D:/folder/study/md_files/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png)
![image-20240428173732285](https://pic.bitday.top/i/2025/03/19/u8ekvp-2.png)
原理:每一次迭代都相当于将当前向量乘以 $A$ 后再归一化。由于矩阵 $A$ 作用下,初始向量中 $v_1$ 分量对应的系数**会按 $\lambda_1$ 的 $k$ 次幂**增长,而其他特征向量分量增长较慢(因为它们对应的特征值模较小),故随着迭代次数的增加,向量逐渐趋向于 $v_1$ 的方向。
@ -1160,7 +1160,7 @@ $$
### **平均拉普拉斯矩阵:**
![image-20240428173204296](D:/folder/study/md_files/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png)
![image-20240428173204296](https://pic.bitday.top/i/2025/03/19/u8dukj-2.png)
### **归一化拉普拉斯矩阵**

View File

@ -8,7 +8,7 @@
雅可比矩阵Jacobian matrix是一个重要的数学概念它在向量值函数的微分方面起着关键作用。雅可比矩阵描述了一个向量值函数的局部线性近似。
![image-20240413104858542](D:/folder/study/md_files/output/1b624652-9519-4637-988b-d6c84fd08923.png)
![image-20240413104858542](https://pic.bitday.top/i/2025/03/19/u8jm0n-2.png)
理解从n维实向量空间到m维实向量空间的函数f假设输入为2维用x,y表示即二维平面上的一个点输出为3维每个点的位置由坐标f1(x,y),f2(x,y),f3(x,y)表示。
@ -16,7 +16,7 @@
**求解雅各比矩阵:**
![image-20240413105515972](D:/folder/study/md_files/output/5c0b315f-f55e-446e-900f-0eba454115d7.png)
![image-20240413105515972](https://pic.bitday.top/i/2025/03/19/u8h7eb-2.png)
@ -24,23 +24,23 @@
**状态空间**
![image-20240413122729169](D:/folder/study/md_files/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png)
![image-20240413122729169](https://pic.bitday.top/i/2025/03/19/u8fycf-2.png)
**特征值、特征向量的几何意义**
![image-20240413162816588](D:/folder/study/md_files/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png)
![image-20240413162816588](https://pic.bitday.top/i/2025/03/19/u8hmgh-2.png)
矩阵A表示某线性变换
![image-20240413163625587](D:/folder/study/md_files/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png)
![image-20240413163625587](https://pic.bitday.top/i/2025/03/19/u8i8s1-2.png)
<img src="D:/folder/study/md_files/output/b34255cb-f8cc-4130-957e-dcf612a2ceaa.png" alt="image-20240413165536752" style="zoom:50%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u8matf-2.png" alt="image-20240413165536752" style="zoom:50%;" />
<img src="D:/folder/study/md_files/output/1c1cdb90-ece1-4866-98ca-6164002c5bd2.png" alt="image-20240413165512450" style="zoom:50%;" />
<img src="https://pic.bitday.top/i/2025/03/19/u8jxu7-2.png" alt="image-20240413165512450" style="zoom:50%;" />
为结论
@ -48,9 +48,9 @@
## 稳定性的定义
![微信图片_20240413101222](D:/folder/study/md_files/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png)
![微信图片_20240413101222](https://pic.bitday.top/i/2025/03/19/u8m4zk-2.png)
![微信图片_20240413101229](D:/folder/study/md_files/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png)
![微信图片_20240413101229](https://pic.bitday.top/i/2025/03/19/u8lkg7-2.png)
@ -58,9 +58,9 @@
通过分析线性系统的系数矩阵的特征值来判断系统的稳定性
![微信图片_20240413101333](D:/folder/study/md_files/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png)
![微信图片_20240413101333](https://pic.bitday.top/i/2025/03/19/u8gyz3-2.png)
![image-20240413110954014](D:/folder/study/md_files/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png)
![image-20240413110954014](https://pic.bitday.top/i/2025/03/19/u8gf0q-2.png)
**雅各比矩阵**使我们能够将非线性系统在平衡点附近的行为**近似为线性系统**。通过这种局部线性化,我们可以应用线性系统理论来研究非线性系统的稳定性。
@ -72,7 +72,7 @@
**why特征值**
![微信图片_20240413162152](D:/folder/study/md_files/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg)
![微信图片_20240413162152](https://pic.bitday.top/i/2025/03/19/u8g41q-2.jpg)
可以以对角矩阵为例特征值为对角线上元素设平衡点x1=0,x2=0;
@ -83,23 +83,23 @@
eg:
![微信图片_20240413102132](D:/folder/study/md_files/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png)
![微信图片_20240413102132](https://pic.bitday.top/i/2025/03/19/u8jpf2-2.png)
## 希尔维斯特判据
![微信图片_20240413101523](D:/folder/study/md_files/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png)
![微信图片_20240413101523](https://pic.bitday.top/i/2025/03/19/u8kfe8-2.png)
## 李雅普诺夫第二法(直接法)
关键是构造一个李雅普诺夫函数V(x)
![微信图片_20240413101545](D:/folder/study/md_files/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png)
![微信图片_20240413101545](https://pic.bitday.top/i/2025/03/19/u8iyew-2.png)
eg:![微信图片_20240413101643](D:/folder/study/md_files/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png)
eg:![微信图片_20240413101643](https://pic.bitday.top/i/2025/03/19/u8gv30-2.png)
@ -115,13 +115,13 @@ $$
A为系统的状态矩阵应用**李雅普诺夫方程**可构造李雅普诺夫函数。
![微信图片_20240413101732](D:/folder/study/md_files/output/cf44e196-ad1c-46df-b080-ef70b596131f.png)
![微信图片_20240413101732](https://pic.bitday.top/i/2025/03/19/u8hxva-2.png)
eg:
![微信图片_20240413101758](D:/folder/study/md_files/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png)
![微信图片_20240413101758](https://pic.bitday.top/i/2025/03/19/u8hii5-2.png)
@ -133,13 +133,13 @@ $$
**克拉索夫斯基算法**
![微信图片_20240413101854](D:/folder/study/md_files/output/45997e98-63aa-4816-b4d3-d0c778c75065.png)
![微信图片_20240413101854](https://pic.bitday.top/i/2025/03/19/u8l2ip-2.png)
eg:
![微信图片_20240413101950](D:/folder/study/md_files/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png)
![微信图片_20240413101950](https://pic.bitday.top/i/2025/03/19/u8ifh3-2.png)
![微信图片_20240413101959](D:/folder/study/md_files/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png)
![微信图片_20240413101959](https://pic.bitday.top/i/2025/03/19/u8ja27-2.png)