diff --git a/Java/Docker指南.md b/Java/Docker指南.md index a361787..3054845 100644 --- a/Java/Docker指南.md +++ b/Java/Docker指南.md @@ -20,7 +20,7 @@ Docker为了解决依赖的兼容问题的,采用了两个手段: - 将每个应用放到一个隔离**容器**去运行,避免互相干扰 -image-20210731142219735 +image-20210731142219735 这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需在操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。 @@ -50,13 +50,13 @@ Docker是一个CS架构的程序,由两部分组成: 如图: -![image-20210731154257653](D:/folder/test/output/5d572263-851b-41b2-be45-ee94c76afe48.png) +![image-20210731154257653](D:/folder/study/md_files/output/f47e4553-83a1-4a82-be3d-30400cf53010.png) #### 镜像操作 -![image-20210731155649535](D:/folder/test/output/4771e3c2-fc4c-474a-91f1-c605599aa377.png) +![image-20210731155649535](D:/folder/study/md_files/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png) 1. docker push,将本地镜像上传到远程仓库(例如 Docker Hub) @@ -102,7 +102,7 @@ docker build -t yourusername/myimage:latest . #### 容器操作 -![image-20210731161950495](D:/folder/test/output/ba96cf38-81f0-4705-8395-21f47c73ae40.png) +![image-20210731161950495](D:/folder/study/md_files/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png) 1. docker run 创建并运行一个新容器 @@ -176,7 +176,7 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器 **数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。 -![image-20210731173541846](D:/folder/test/output/b6234372-df07-42e6-9fb0-fab8cc190c11.png) +![image-20210731173541846](D:/folder/study/md_files/output/976d2d8d-9f66-4057-88eb-5db860be894f.png) 一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。 @@ -507,7 +507,7 @@ docker info 我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。 -而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](D:/folder/test/output/b8a1a956-cbd1-480d-8a16-bb726af62b6a.png) +而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](D:/folder/study/md_files/output/db1506b9-159f-4278-8d26-0f899314d1fe.png) `EXPOSE 8090` 是一个声明性的指令,`EXPOSE` 本身不会进行端口映射 @@ -672,7 +672,7 @@ docker push yourusername/zbparse #推送镜像到 Docker Hub docker tag zbparse 646228430smile/zbparse:latest 这里的646228430smile是用户名,保持不变 -![微信截图_20250225163059](D:/folder/test/output/1d57397b-fa97-4aa0-8316-11b6eb1ffd32.png) +![微信截图_20250225163059](D:/folder/study/md_files/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png) 14. 查看镜像 @@ -865,6 +865,28 @@ docker-compose build docker-compose up -d ``` + + +**只针对 pyapp 服务进行重构和启动,不影响其他服务运行** + +``` +docker-compose build pyapp +``` + +启动容器并进入bash + +``` +docker compose run --rm -it pyapp /bin/bash +``` + +运行脚本 + +``` +python typecho_markdown_upload/main.py +``` + + + **更新并重启容器** ``` @@ -1123,7 +1145,7 @@ docker-compose -f docker-compose-app.yml up -d 查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件,而且每个微服务都准备了一个独立的目录: -![image-20210731181341330](D:/folder/test/output/6ab58e62-3f4a-4639-beda-2da6816feaad.png) +![image-20210731181341330](D:/folder/study/md_files/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png) 内容如下: @@ -1172,11 +1194,11 @@ services: 查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表: -![image-20210801095205034](D:/folder/test/output/7441e84f-ee75-4073-894c-b3e299d8cd23.png) +![image-20210801095205034](D:/folder/study/md_files/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png) 查看微服务目录,可以看到都包含Dockerfile文件: -![image-20210801095320586](D:/folder/test/output/21b40ad4-f2b0-40f4-b78b-c4ce2e474a9a.png) +![image-20210801095320586](D:/folder/study/md_files/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png) 内容如下: @@ -1231,7 +1253,7 @@ spring: 打包后: -![image-20210801095951030](D:/folder/test/output/83693759-d10d-4d08-b551-e10186a0433e.png) +![image-20210801095951030](D:/folder/study/md_files/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png) #### 拷贝jar包到部署目录 @@ -1239,15 +1261,15 @@ spring: user-service: -![image-20210801100201253](D:/folder/test/output/c527513d-3381-41de-be43-0447393c3b17.png) +![image-20210801100201253](D:/folder/study/md_files/output/0a48347c-8253-4502-8843-86aebcf496c9.png) order-service: -![image-20210801100231495](D:/folder/test/output/1cbfc1b5-6519-433c-83c4-8aa1efb9d63a.png) +![image-20210801100231495](D:/folder/study/md_files/output/63007064-a609-4230-ac70-2c5b5f39d366.png) gateway: -![image-20210801100308102](D:/folder/test/output/204b20e7-a843-42e1-93f3-47d3a1fd0fb7.png) +![image-20210801100308102](D:/folder/study/md_files/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png) #### 部署 @@ -1255,7 +1277,7 @@ gateway: 上传到任意目录: -![image-20210801100955653](D:/folder/test/output/8c29ca6b-6f59-4f8c-b124-a60e63b4eb9b.png) +![image-20210801100955653](D:/folder/study/md_files/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png) 部署: diff --git a/Java/JavaWeb——前端.md b/Java/JavaWeb——前端.md index 3f3aeb9..b0c5206 100644 --- a/Java/JavaWeb——前端.md +++ b/Java/JavaWeb——前端.md @@ -2,15 +2,15 @@ ## JavaWeb学习路线 -![image-20240227162313041](D:/folder/test/output/56ee13bd-1250-40b6-82c5-58589fb664ee.png) +![image-20240227162313041](D:/folder/study/md_files/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png) ## 前后端分离开发 -![image-20240229125233265](D:/folder/test/output/3a2f79fd-6c6d-4338-96a6-a83e251b92a9.png) +![image-20240229125233265](D:/folder/study/md_files/output/06d92f94-982e-49b2-b999-be2dce45a748.png) -![image-20240229125254635](D:/folder/test/output/98ddfeb8-a696-4eab-a11e-f44f5b812d65.png) +![image-20240229125254635](D:/folder/study/md_files/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png) 1. 需求分析:首先我们需要阅读需求文档,分析需求,理解需求。 2. 接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等 @@ -146,9 +146,9 @@ 盒子模型,盒子部分指的是border及以内的部分,不包括margin -![image-20240228095942357](D:/folder/test/output/9e99deff-c0ab-4331-bf8c-46fc96374722.png) +![image-20240228095942357](D:/folder/study/md_files/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png) -![image-20240228100247314](D:/folder/test/output/b7ea4176-c3a6-4fce-886c-bb6bff1bdcfa.png) +![image-20240228100247314](D:/folder/study/md_files/output/9290d18b-9292-4bab-bd01-722d3ad14097.png) @@ -365,7 +365,7 @@ const: const pi=3.14 | 逻辑运算符 | && , \|\| , ! | | 三元运算符 | 条件表达式 ? true_value: false_value | -![image-20240228122315690](D:/folder/test/output/8f3e1687-e901-4036-b757-07aca6c47df3.png) +![image-20240228122315690](D:/folder/study/md_files/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png) parseint() ,将其他类型转化为数字 @@ -701,7 +701,7 @@ DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML - Text:文本对象 - Comment:注释对象 -![1668796698067](D:/folder/test/output/7b27733d-5754-465f-a262-804e26e0b9f1.png) +![1668796698067](D:/folder/study/md_files/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png) 那么我们学习DOM技术有什么用呢?主要作用如下: @@ -763,7 +763,7 @@ for (let i = 0; i < divs.length; i++) { 你想要如何操作获取到的DOM元素,你需要查阅手册,看它支持的属性 -![image-20240228185708363](D:/folder/test/output/9f45477c-ede5-4b1a-b687-16ad77bdb6cc.png) +![image-20240228185708363](D:/folder/study/md_files/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.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/test/output/1687ae31-9972-4b16-98d2-fda4ce2db1aa.png) +![image-20240228194959643](D:/folder/study/md_files/output/2a9bf144-bba9-42c0-aae6-089470ada845.png) 基于上述的MVVM思想,其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分,我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;而今天我们要学习的就是侧重于ViewModel部分开发的vue前端框架,用来替代JavaScript的DOM操作,让数据展示到视图的代码开发变得更加的简单。 diff --git a/Java/JavaWeb——后端.md b/Java/JavaWeb——后端.md index 49e2ba2..dcf2328 100644 --- a/Java/JavaWeb——后端.md +++ b/Java/JavaWeb——后端.md @@ -39,9 +39,9 @@ ## Maven -![image-20240229132137502](D:/folder/test/output/7ca37eb8-04fd-4b32-a3f1-f50a6eac7306.png) +![image-20240229132137502](D:/folder/study/md_files/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png) -![image-20240229133408054](D:/folder/test/output/7654879e-7829-4440-82b4-75293b7369fc.png) +![image-20240229133408054](D:/folder/study/md_files/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png) Maven仓库分为: @@ -57,7 +57,7 @@ POM文件导入依赖的时候,先看本地仓库有没有,没有就看私 **创建Maven项目** -![image-20250307174233390](D:\folder\test\output\image-20250307174233390.png) +![image-20250307174233390](D:/folder/study/md_files/output/69c68ed1-7432-482c-8269-9bb280d78669.png) 勾选 **Create from archetype**(可选),也可以选择 **maven-archetype-quickstart** 等模版。 @@ -175,7 +175,7 @@ Maven 重建 * Maven中的坐标是==资源的唯一标识== , 通过该坐标可以唯一定位资源位置 * 使用坐标来定义项目或引入项目中需要的依赖 -![image-20240302131843540](D:/folder/test/output/b927f172-038e-460f-9f9a-7ae3f67c0bcb.png) +![image-20240302131843540](D:/folder/study/md_files/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png) ### 依赖管理 @@ -201,7 +201,7 @@ Maven 重建 更改之后可以在界面上看到一个maven刷新按钮,点击一下就开始联网下载依赖了,成功后可以看到 -![image-20240302133241227](D:/folder/test/output/b0f72966-3d88-4e3e-a5ce-2eb4d1f3980c.png) +![image-20240302133241227](D:/folder/study/md_files/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png) #### 排除依赖 @@ -280,7 +280,7 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被 4. 双击test生命周期 -![image-20240302140156166](D:/folder/test/output/f78e5d80-3123-4354-b4ba-74831895fa05.png) +![image-20240302140156166](D:/folder/study/md_files/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png) ## HTTP协议 @@ -315,14 +315,14 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被 浏览器与 Tomcat 之间通过 HTTP 协议进行通信,而 Tomcat 则充当了中间的桥梁,将请求路由到你的 Java 代码,并最终将处理结果返回给浏览器。 -![image-20240304101816184](D:/folder/test/output/09141a0c-1482-4200-b808-6dd22abe75d2.png) +![image-20240304101816184](D:/folder/study/md_files/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png) ### 快速启动 1. 新建spring initializr module 2. 删除以下文件 -![image-20240302142835694](D:/folder/test/output/718cea88-d197-4dbe-a7c6-1e7b1aaf91c0.png) +![image-20240302142835694](D:/folder/study/md_files/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png) 新建HelloController类 @@ -416,7 +416,7 @@ public class RequestController { - **请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。** -![image-20240303112109981](D:/folder/test/output/f7c54b67-c2f4-4071-87b0-6e3564b70c21.png) +![image-20240303112109981](D:/folder/study/md_files/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png) ``` @RequestMapping("/complexpojo") @@ -464,7 +464,7 @@ public class RequestController { } ``` -![image-20240303120212254](D:/folder/test/output/6d196007-ad6c-4875-a086-797d67855782.png) +![image-20240303120212254](D:/folder/study/md_files/output/c6281305-9574-4ef5-b681-aed1ea871a99.png) #### JSON格式参数 @@ -506,7 +506,7 @@ json数组: Postman发送JSON格式数据: -![image-20240303121028876](D:/folder/test/output/d36fa889-49ec-4f50-86ec-a92c0bf981eb.png) +![image-20240303121028876](D:/folder/study/md_files/output/a45dc48a-0478-4791-903f-738cf27f8f28.png) 服务端Controller方法接收JSON格式数据: @@ -583,7 +583,7 @@ public class RequestController { 下图返回值分别是字符串、对象、集合。 -![image-20221204174052622](D:/folder/test/output/9b8bd336-19d0-421f-954f-17e9e5809e95.png) +![image-20221204174052622](D:/folder/study/md_files/output/515247f4-f38f-4cef-bf14-8dab45863923.png) 统一的返回结果使用类来描述,在这个结果中包含: @@ -627,7 +627,7 @@ public class Result { Controller层接收请求,调用Service层;Service层先调用Dao层获取数据,然后实现自己的业务逻辑处理部分,最后返回给Controller层;Controller层再响应数据。可理解为递归的过程 -![image-20221204201342490](D:/folder/test/output/caad9462-2a08-41c4-8734-82db7d296a4b.png) +![image-20221204201342490](D:/folder/study/md_files/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png) **但是**,这样每次要更换ServiceA->ServiceB时,需要修改Controller层的代码! @@ -644,7 +644,7 @@ private EmpService empService=new EmpServiceB(); //现在 #### IOC&DI 分层解耦 -![image-20240305104036244](D:/folder/test/output/72a36aa0-d0c5-4426-9b25-0e626c328e2a.png) +![image-20240305104036244](D:/folder/study/md_files/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png) 任务:完成Controller层、Service层、Dao层的代码解耦 @@ -659,19 +659,19 @@ private EmpService empService=new EmpServiceB(); //现在 第1步:删除Controller层、Service层中new对象的代码 -![image-20221204212807207](D:/folder/test/output/75b3f9f2-1be2-4aa7-8248-3d54deb70ac1.png) +![image-20221204212807207](D:/folder/study/md_files/output/f008a154-be4b-4d83-a160-0090da54b786.png) 第2步:Service层及Dao层的实现类,交给IOC容器管理 - 使用Spring提供的注解:@Component ,就可以实现类交给IOC容器管理 -![image-20221204213328034](D:/folder/test/output/078c34f1-14b7-4733-ad63-d59e4aef9564.png) +![image-20221204213328034](D:/folder/study/md_files/output/312965c7-c112-4eb0-932c-4821c185833e.png) 第3步:为Controller及Service注入运行时依赖的对象 - 使用Spring提供的注解:@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象 -![image-20221204213859112](D:/folder/test/output/89ff754d-c5fc-4a3a-af00-6becb5ae589b.png) +![image-20221204213859112](D:/folder/study/md_files/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png) @@ -841,7 +841,7 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户 ### 开发流程 -![image-20220904125004138](D:/folder/test/output/fd727184-27a7-475f-b1f3-2de432222bad.png) +![image-20220904125004138](D:/folder/study/md_files/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png) 1. 查看页面原型明确需求 - 根据页面原型和需求,进行表结构设计、编写接口文档(已提供) @@ -861,11 +861,11 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户 ### 快速创建 -![image-20240307125505211](D:/folder/test/output/19903ba7-af53-4af3-b647-eccbc3a7215b.png) +![image-20240307125505211](D:/folder/study/md_files/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png) 1. 创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。创建用户表user,并创建对应的实体类User -![image-20240307125820685](D:/folder/test/output/da6af3ca-1b16-443b-85da-71a0bb434342.png) +![image-20240307125820685](D:/folder/study/md_files/output/d1e1f304-bcc5-415c-923e-166616133c2e.png) 2. 在springboot项目中,可以编写main/resources/application.properties文件,配置数据库连接信息。 @@ -882,7 +882,7 @@ spring.datasource.password=1234 3. 在引导类所在包下,在创建一个包 mapper。在mapper包下创建一个接口 UserMapper -![image-20240307132356616](D:/folder/test/output/aea5135b-9c76-418a-8cf8-680f78a6f9cc.png) +![image-20240307132356616](D:/folder/study/md_files/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png) @Mapper注解:表示是mybatis中的Mapper接口 @@ -976,7 +976,7 @@ public interface EmpMapper { } ``` -![image-20240312122323753](D:/folder/test/output/a1980a1c-adca-447e-82e9-853f019dd722.png) +![image-20240312122323753](D:/folder/study/md_files/output/683b9b42-d07c-4a31-a441-d31506d148f0.png) 上图参数值分离,有效防止SQL注入 @@ -1007,7 +1007,7 @@ useGeneratedKeys = true表示获取返回的主键值,keyProperty = "id"表示 - 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。 - 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。 -![image-20221212103124490](D:/folder/test/output/90b9ad4d-c115-4038-a956-9c08448fe5ed.png) +![image-20221212103124490](D:/folder/study/md_files/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png) 解决方法: @@ -1073,7 +1073,7 @@ public interface EmpMapper { 3. XML映射文件中sql语句的**id**与Mapper接口中的**方法名**一致,并保持返回类型一致。 -![image-20221212153529732](D:/folder/test/output/4c5d2450-105a-4fc4-93fc-92bd16ab06dd.png) +![image-20221212153529732](D:/folder/study/md_files/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png) \ @@ -1453,7 +1453,7 @@ public class AliOSSUtils { 将配置信息写在application.properties,用注解@Value获取配置文件中的数据 -![image-20230102173905913](D:/folder/test/output/bd30346f-bb4b-4296-b870-b281e9bfad85.png) +![image-20230102173905913](D:/folder/study/md_files/output/bbe35a2a-51e6-405b-a199-89a49474f452.png) @Value("${aliyun.oss.endpoint}") @@ -1461,7 +1461,7 @@ public class AliOSSUtils { **yml配置文件** -![image-20230102181215809](D:/folder/test/output/4b624d01-7099-4d2a-90a6-7becabec47a0.png) +![image-20230102181215809](D:/folder/study/md_files/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png) 了解下yml配置文件的基本语法: @@ -1525,7 +1525,7 @@ Spring提供的简化方式套路: 3. 在实体类上添加`@ConfigurationProperties`注解,并通过**perfix属性**来指定配置参数项的前缀 -![image-20230103210827003](D:/folder/test/output/bcfee8e8-44cf-4fde-8a31-e0d45e64914f.png) +![image-20230103210827003](D:/folder/study/md_files/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png) 4. (可选)引入依赖pom.xml @@ -1538,7 +1538,7 @@ Spring提供的简化方式套路: **使用:** -![image-20240327124923629](D:/folder/test/output/2129321a-7793-4982-9b26-1c0b73da4666.png) +![image-20240327124923629](D:/folder/study/md_files/output/5e673d58-0138-436c-9d68-992f5f530ceb.png) @@ -1546,7 +1546,7 @@ Spring提供的简化方式套路: ### 会话技术 -![image-20230105203827355](D:/folder/test/output/47e3a07f-cc82-44de-84c2-ba76e004ced7.png) +![image-20230105203827355](D:/folder/study/md_files/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png) 会话是和浏览器关联的,当有三个浏览器客户端和服务器建立了连接时,就会有三个会话。同一个浏览器在未关闭之前请求了多次服务器,这多次请求是属于同一个会话。比如:1、2、3这三个请求都是属于同一个会话。当我们关闭浏览器之后,这次会话就结束了。而如果我们是直接把web服务器关了,那么所有的会话就都结束了。 @@ -1587,7 +1587,7 @@ Spring提供的简化方式套路: ### JWT令牌 -![image-20240320191446966](D:/folder/test/output/6fde07d1-4168-42b2-a8f0-c69d1bc6c28b.png) +![image-20240320191446966](D:/folder/study/md_files/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png) **生成和校验** @@ -1999,7 +1999,7 @@ eg:@Order(1) 先定义一个公共的pt(),然后可以直接引用。 -![image-20240322105617334](D:/folder/test/output/62ff534c-bbb8-466e-832b-c55acb3b9bdf.png) +![image-20240322105617334](D:/folder/study/md_files/output/afad9a15-8628-4382-8993-f46ee275a658.png) 切入点表达式: @@ -2097,7 +2097,7 @@ public @interface MyLog { ### 连接点 -![image-20240322131745283](D:/folder/test/output/430dd5be-28c9-4e6c-ab30-fe34f13324fd.png) +![image-20240322131745283](D:/folder/study/md_files/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png) **`getSignature()`**: 返回一个`Signature`类型的对象,这个对象包含了被拦截点的签名信息。在方法调用的上下文中,这包括了方法的名称、声明类型等信息。 @@ -2364,4 +2364,4 @@ public class SpringbootWebConfig2Application { ## WEB开发总体图 -![image-20240326111230747](D:/folder/test/output/20b69417-9b5c-401d-bf1b-e077789a921b.png) +![image-20240326111230747](D:/folder/study/md_files/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png) diff --git a/Java/Java笔记本.md b/Java/Java笔记本.md index 42681ae..7dc1024 100644 --- a/Java/Java笔记本.md +++ b/Java/Java笔记本.md @@ -1083,15 +1083,15 @@ public class Main { `ArrayList` 是 List 接口的一种实现,而 List 接口又继承自 Collection 接口。包括 `add()`、`remove()`、`contains()` 等。 -![image-20240227133714509](D:/folder/test/output/2e517d04-cc78-4b53-874b-ad66ce023237.png) +![image-20240227133714509](D:/folder/study/md_files/output/38b86390-3c63-4464-9243-389e8693c3d3.png) #### HashSet -![image-20240227150219184](D:/folder/test/output/c8b543e5-8807-4892-8c2c-f4527d8788bd.png) +![image-20240227150219184](D:/folder/study/md_files/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png) #### HashMap -![image-20240227152019078](D:/folder/test/output/7a225569-a6d5-47e2-b8e9-c737188b4020.png) +![image-20240227152019078](D:/folder/study/md_files/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png) ``` // 使用 entrySet() 方法获取 Map 中所有键值对的集合,并使用增强型 for 循环遍历键值对 @@ -1253,11 +1253,11 @@ String ttImgPath = resourceUrl != null ? resourceUrl.getFile() : null; 反射技术,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(**成员变量、方法、构造器**等)。 -![1668575796295](D:/folder/test/output/2e1ccb45-af4e-4b31-8341-2c79145b0012.png) +![1668575796295](D:/folder/study/md_files/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png) **反射技术例子**:IDEA通过反射技术就可以获取到类中有哪些方法,并且把方法的名称以提示框的形式显示出来,所以你能看到这些提示了。 -![1668576426355](D:/folder/test/output/c7f42472-eebf-4d17-8c29-55acebc98ed3.png) +![1668576426355](D:/folder/study/md_files/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png) **1.获取类的字节码(Class对象)**:有三种方法 @@ -1358,9 +1358,9 @@ public class Test2Constructor(){ **3.获取类的成员变量** -![1668579517323](D:/folder/test/output/1d017d0b-986d-4fd7-b963-5d225100a5d2.png) +![1668579517323](D:/folder/study/md_files/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png) -![1668580075962](D:/folder/test/output/bb6ed24c-148d-4024-8b84-ebab8c914b94.png) +![1668580075962](D:/folder/study/md_files/output/98938714-6ae2-4ea9-967b-283dd72026bb.png) 不管是设置值还是获取值,都需要: @@ -1372,15 +1372,15 @@ public class Test2Constructor(){ **4.获取类的成员方法** -![1668580761089](D:/folder/test/output/9a80d395-6ae1-43bb-83b5-86c2bc1d09db.png) +![1668580761089](D:/folder/study/md_files/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png) 获取**单个**指定的成员方法:第一个参数填**方法名**、第二个参数填方法中的**参数类型** -![1668581678388](D:/folder/test/output/09bebd8f-0d24-452f-8c01-8253f4b49568.png) +![1668581678388](D:/folder/study/md_files/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png) 执行:第一个参数传入一个**对象**,然后是若干方法参数(无参可不写)... -![1668581800777](D:/folder/test/output/153f2ab3-f562-4c2d-913f-5a791e157bb0.png) +![1668581800777](D:/folder/study/md_files/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png) @@ -1476,7 +1476,7 @@ public class FieldReflectionTest { ### Junit 单元测试 -![image-20240307172717512](D:/folder/test/output/0dee7d7b-471a-46af-91ee-273a73454a79.png) +![image-20240307172717512](D:/folder/study/md_files/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png) ``` @Test @@ -1490,7 +1490,7 @@ public class FieldReflectionTest { 写了@Test注解,那么该测试函数就可以直接运行!若一个测试类中写了多个测试方法,可以全部执行! -![image-20240307173454288](D:/folder/test/output/25badfe2-74f4-4e85-a427-2504b3639ee5.png) +![image-20240307173454288](D:/folder/study/md_files/output/ec79fd42-7641-46a8-9507-0867f0759023.png) 原理可能是: @@ -1531,7 +1531,7 @@ public class AnnotationTest4 { 在Springboot中,如何快速生成单元测试? 选中类名,右键: -image-20240815093428359 +image-20240815093428359 diff --git a/Java/Jupyter notebook快速上手.md b/Java/Jupyter notebook快速上手.md index 071681b..0b81809 100644 --- a/Java/Jupyter notebook快速上手.md +++ b/Java/Jupyter notebook快速上手.md @@ -14,7 +14,7 @@ # 为什么学Jupyter notebook? -![jupyter notebook](D:/folder/test/output/2d843df3-ff59-4766-9b85-798f58bd9859.png) +![jupyter notebook](D:/folder/study/md_files/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png) 能够编写、运行python文件的程序很多,比如python安装自带的IDLE、程序员喜爱的pycharm、数据科学全家桶Anaconda,还有Spyder、Thonny等。 @@ -34,7 +34,7 @@ Jupyter notebook是用python进行数据科学、机器学习的必备工具。 比如下图,包含了Markdown说明文档、代码块、代码运行结果、图片嵌入等元素,特别适合Python数据科学和机器学习撰写文档。 -![jupyter notebook代码分块运行、嵌入Markdown文档和图片](D:/folder/test/output/0cefdcea-2b6e-4d3a-9232-0e1f3c637cb7.png) +![jupyter notebook代码分块运行、嵌入Markdown文档和图片](D:/folder/study/md_files/output/22821bd8-1a25-434c-90e9-50206f09c89b.png) 吴恩达的《深度学习》慕课的课后编程作业、大数据竞赛网站Kaggle上的代码文档、美国大学的数据科学课程的课后资料及编程作业,都是以jupyter notebook文件的形式给出的,也就是`.ipynb`文件。 @@ -54,7 +54,7 @@ Jupyter notebook是基于Ipython内核的,在浏览器中以网页形式运行 > > Spyder和Jupyter notebook都是以Ipython为内核的。 -![ipython](D:/folder/test/output/156887fb-fbf6-45f7-983e-955f68a39b5d.png) +![ipython](D:/folder/study/md_files/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png) ## 安装Jupyter notebook @@ -70,7 +70,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 打开命令行,输入`jupter notebook`,回车。稍等片刻即可跳出浏览器网页。 -![jupyter notebook打开界面](D:/folder/test/output/f44ab651-248c-41a3-847c-05c499a0d479.png) +![jupyter notebook打开界面](D:/folder/study/md_files/output/615e3133-9e33-43bb-91ec-e150edd90925.png) 点击右边的New-Python3即可创建python文档。 @@ -82,7 +82,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 勾选文件夹,点击rename即可重命名 -![勾选文件夹,点击rename重命名](D:/folder/test/output/20a9b5fc-69c2-4067-9a79-ee66f374a38a.png) +![勾选文件夹,点击rename重命名](D:/folder/study/md_files/output/2d584571-9ead-4b78-a039-0903b70b82ac.png) 最常用的是点击右边的New-Python3,创建python文档。 @@ -92,13 +92,13 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 点击左上角`Untitled`给新建的python文档文件重新命名。 -![重命名](D:/folder/test/output/e0acc191-e3d5-4dfb-8de2-a08ce82990ca.png) +![重命名](D:/folder/study/md_files/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png) 在代码框中输入第一行python代码,shift+回车运行 -![输入第一行python代码](D:/folder/test/output/404bfeeb-88d2-4bf7-b1d5-37367d11e301.png) +![输入第一行python代码](D:/folder/study/md_files/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png) -![运行第一行python代码](D:/folder/test/output/59f5a60d-74e4-4167-9198-260821273989.png) +![运行第一行python代码](D:/folder/study/md_files/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png) @@ -136,14 +136,14 @@ Jupyter notebook中,有两种单元格:代码单元格和Markdown单元格 >我是引用,我这行开头有一个灰色竖杠 [我是外部链接,点我上百度](www.baidu.com) -![我是图片](D:/folder/test/output/dea28a7f-ecf7-4e6f-b9ac-6a86db641f26.webp) +![我是图片](D:/folder/study/md_files/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp) ``` -![编辑Markdown单元格](D:/folder/test/output/817d3d27-0383-4d08-be35-0bf59f20847f.png) +![编辑Markdown单元格](D:/folder/study/md_files/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png) 然后按`shift`+`Enter`运行该单元格。 -![Markdown渲染效果](D:/folder/test/output/40503d86-d643-4568-bf43-97ef206e7cbe.png) +![Markdown渲染效果](D:/folder/study/md_files/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png) @@ -191,9 +191,9 @@ l 显示代码行号 h 查看所有快捷键 -![命令模式快捷键](D:/folder/test/output/de233993-56fb-4eb0-9bae-49a90e08e822.png) +![命令模式快捷键](D:/folder/study/md_files/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png) -![编辑模式快捷键](D:/folder/test/output/1745af46-3cf9-41b7-b092-889bf97965e2.png) +![编辑模式快捷键](D:/folder/study/md_files/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png) ## 在Markdown单元格中输入数学公式 @@ -209,17 +209,17 @@ $$x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$$ 初中数学内容 ``` -![在Markdown单元格中输入Latex公式](D:/folder/test/output/1830a73c-3974-4290-b04d-1863b14ae967.png) +![在Markdown单元格中输入Latex公式](D:/folder/study/md_files/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png) 按`shift`+`Enter`渲染运行: -![渲染之后的Latex数学公式](D:/folder/test/output/12d7f799-0937-4811-8914-1ac822a39e0f.png) +![渲染之后的Latex数学公式](D:/folder/study/md_files/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png) # 数据分析与可视化实战案例:学习时间与成绩的关系(线性回归) 先用excel把玩数据 -![excel中的线性回归](D:/folder/test/output/750531ac-b3b6-440f-8fab-1863ca83ebd3.png) +![excel中的线性回归](D:/folder/study/md_files/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png) 观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化 diff --git a/Java/Mysql数据库.md b/Java/Mysql数据库.md index 0a78227..402132e 100644 --- a/Java/Mysql数据库.md +++ b/Java/Mysql数据库.md @@ -134,7 +134,7 @@ create table 表名( eg: -![image-20220829143005524](D:/folder/test/output/11ea44e4-304a-45ab-bb7b-4dcd6edeefa5.png) +![image-20220829143005524](D:/folder/study/md_files/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png) ``` create table tb_user ( @@ -472,7 +472,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名) ### 一对多 -![image-20221206230156403](D:/folder/test/output/cd36d561-606c-408f-9d2a-d975941a3e1d.png) +![image-20221206230156403](D:/folder/study/md_files/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png) **一对多关系实现:在数据库表中多的一方,添加外键字段,来关联'一'这方的主键。** @@ -511,7 +511,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名) - 内连接:相当于查询A、B交集部分数据 - ![image-20221207165446062](D:/folder/test/output/6dad0071-1bec-406c-8f3a-9c20cc3843a7.png) + ![image-20221207165446062](D:/folder/study/md_files/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.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/test/output/c78ba59b-309e-4a13-819d-0f37e72c6f0c.png) +![image-20240306190305575](D:/folder/study/md_files/output/a3003189-9a5f-491f-8a62-9496d63befcd.png) ### 子查询 @@ -807,7 +807,7 @@ musql默认采用B+树来作索引 下面我们来看看B+Tree(多路平衡搜索树)结构中如何避免这个问题: -![image-20221208181315728](D:/folder/test/output/6b80d339-af26-4000-879d-91ef6460b60e.png) +![image-20221208181315728](D:/folder/study/md_files/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png) B+Tree结构: diff --git a/Java/Redis.md b/Java/Redis.md index dad8cc7..d4cc9e6 100644 --- a/Java/Redis.md +++ b/Java/Redis.md @@ -26,7 +26,7 @@ exit ## Redis数据类型 -image-20221130190150749 +image-20221130190150749 **解释说明:** @@ -59,7 +59,7 @@ Redis hash 是一个string类型的 field 和 value 的映射表,hash特别适 - **HKEYS** key 获取哈希表中所有字段 - **HVALS** key 获取哈希表中所有值 -image-20221130193121969 +image-20221130193121969 ### 列表操作 @@ -71,7 +71,7 @@ Redis 列表是简单的字符串列表,按照插入顺序排序,常用命 - **LLEN** key 获取列表长度 - **BRPOP** key1 [key2 ] timeout 移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超 时或发现可弹出元素为止 -image-20221130193332666 +image-20221130193332666 ### 集合操作 @@ -84,7 +84,7 @@ Redis set 是string类型的无序集合。集合成员是唯一的,这就意 - **SUNION** key1 [key2] 返回所有给定集合的并集 - **SREM** key member1 [member2] 移除集合中一个或多个成员 -image-20221130193532735 +image-20221130193532735 ### 有序集合 @@ -97,7 +97,7 @@ Redis有序集合是string类型元素的集合,且不允许有重复成员。 - **ZINCRBY** key increment member 有序集合中对指定成员的分数加上**增量** increment - **ZREM** key member [member ...] 移除有序集合中的一个或多个成员 -image-20221130193951036 +image-20221130193951036 ### 通用命令 diff --git a/Java/anaconda基础命令.md b/Java/anaconda基础命令.md index f27f3f9..59d12ad 100644 --- a/Java/anaconda基础命令.md +++ b/Java/anaconda基础命令.md @@ -99,14 +99,14 @@ pip freeze > requirements.txt 如果你的pycharm中使用conda环境,那么你在pycharm的终端中所用的可能不是conda环境! -![image-20240729155102345](D:/folder/test/output/dd0e8c0c-08f2-4202-b137-5031b62ecb3c.png) +![image-20240729155102345](D:/folder/study/md_files/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png) 解决办法: shell path改为 cmd.exe 这样虚拟环境就默认设置为conda环境了 -![image-20240729161200801](D:/folder/test/output/2949e4bf-056c-483b-a74e-79c95a894a77.png) +![image-20240729161200801](D:/folder/study/md_files/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png) -![image-20240729161242191](D:/folder/test/output/51ab0afc-4c62-418f-b90f-58816bb0aa6a.png) +![image-20240729161242191](D:/folder/study/md_files/output/0341f054-591e-42dd-b80a-17c188419e6e.png) @@ -114,7 +114,7 @@ pip freeze > requirements.txt 如果命令行cd到项目根目录,所用的也并不是conda环境!这里用的是conda的默认环境? -![image-20240729155148576](D:/folder/test/output/e9508c58-d415-4af5-a8e4-c6dc343d01ed.png) +![image-20240729155148576](D:/folder/study/md_files/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png) @@ -128,7 +128,7 @@ pip freeze > requirements.txt 4.输入命令 -![image-20240729155310049](D:/folder/test/output/3245d28c-a993-4896-b419-feb7ed443f88.png) +![image-20240729155310049](D:/folder/study/md_files/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png) diff --git a/Java/git基本操作.md b/Java/git基本操作.md index 7902422..85ee70e 100644 --- a/Java/git基本操作.md +++ b/Java/git基本操作.md @@ -29,7 +29,7 @@ git config --system --list :系统配置的 ## 核心原理 -![](D:/folder/test/output/72874011-821a-4da8-92d0-6ad9322ca40c.png) +![](D:/folder/study/md_files/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png) index是暂存区 @@ -57,7 +57,7 @@ remote是远程仓库,通常是github/gitee码云 - git init 新建本地仓库,生成.git隐藏文件,点进去有head文件。 - git remote add origin url,可以绑定远程仓库 -![](D:/folder/test/output/cbe51a46-0337-46eb-a5e3-6314ed0031ce.png) +![](D:/folder/study/md_files/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png) - 继续输入git pull origin master(若你远程仓库为空,不需要这一步) - git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区 @@ -84,19 +84,19 @@ remote是远程仓库,通常是github/gitee码云 1. **配置Git** -![image-20240425104918549](D:/folder/test/output/4a40efd9-1864-46ae-b7ce-39f8645380ff.png) +![image-20240425104918549](D:/folder/study/md_files/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png) 2. **关联自己的github** -![image-20240425104950049](D:/folder/test/output/587fb99d-078c-49b0-8047-7979566d3d03.png) +![image-20240425104950049](D:/folder/study/md_files/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png) **对于任何安卓项目,前两步都是通用的!!!** 3. -![image-20240425105318414](D:/folder/test/output/44425f1e-39c6-4189-b9cb-f7e907263004.png) +![image-20240425105318414](D:/folder/study/md_files/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png) -![image-20240425105341246](D:/folder/test/output/d77962b8-3dd8-4c5f-88e4-71728181a528.png) +![image-20240425105341246](D:/folder/study/md_files/output/3073bcd9-d022-483b-a082-e29e1291cc52.png) 这里的Remote填远程仓库地址,eg: https://github.com/zhangww-web/JianShu.git @@ -106,7 +106,7 @@ remote是远程仓库,通常是github/gitee码云 点击顶部菜单栏的 `Git -> Manage Remotes`。 -![image-20250308102802964](D:\folder\test\output\image-20250308102802964.png) +![image-20250308102802964](D:/folder/study/md_files/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png) @@ -171,7 +171,7 @@ git branch -d dev 删除dev分支 git branch -m dev cs :将dev分支修改名称为cs分支 -![](D:/folder/test/output/c6e7b13c-e1ac-4dbc-b976-f4ca8c8b0572.png) +![](D:/folder/study/md_files/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png) @@ -181,7 +181,7 @@ git branch -m dev cs :将dev分支修改名称为cs分支 此时查看你的代理服务器的端口,发现是7890 -image-20240802181935378 +image-20240802181935378 然后打开git bash,输入以下代码: @@ -287,6 +287,8 @@ git pull ## 其他Git相关 +### SSH公私钥 + 公私钥生成 在linux中,使用账号密码链接github报错如下: @@ -339,6 +341,14 @@ SSH 连接 GitHub 并触发身份验证,流程如下: +**如果避免每次git pull都要验证身份?** + +``` +git config --global credential.helper store //将凭据保存到磁盘上(明文存储): +``` + + + ### .gitignore(忽略某些文件) **如果不小心commit了如何撤销?** @@ -349,7 +359,7 @@ SSH 连接 GitHub 并触发身份验证,流程如下: git rm -r --cached 'dictory'/ ``` -![](D:/folder/test/output/52b3bb61-86aa-48c3-bb77-c241170fd570.png)在.gitignore文件进行添加 +![](D:/folder/study/md_files/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png)在.gitignore文件进行添加 **为什么`.gitignore`文件不放在`.git`文件夹中?** @@ -368,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/test/output/2da238ef-d379-483d-b92f-0747e9c1cf7f.png) +![image-20240729113527314](D:/folder/study/md_files/output/af77f789-280a-40ce-bc40-66db8ed53a39.png) @@ -386,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/test/output/57e3e2b0-18db-4f5b-8f8c-121794124771.png) +![image-20240524100231379](D:/folder/study/md_files/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png) diff --git a/Java/linux服务器.md b/Java/linux服务器.md index 191c3d5..aa3d036 100644 --- a/Java/linux服务器.md +++ b/Java/linux服务器.md @@ -10,7 +10,7 @@ DNS解析:可能需等待几分钟生效 -![](D:/folder/test/output/4da01fd4-bfe9-47bd-89fa-8bc19ffeadf7.png) +![](D:/folder/study/md_files/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png) 买的域名的r2studying.top 这里的HOSTNAME相当于二级域名,如npm.r2studying.top @@ -253,7 +253,7 @@ DNS解析:可能需等待几分钟生效 nano /etc/apt/sources.list #打开sources.list文件 ``` -![](D:/folder/test/output/d0de0e49-ecef-4776-9a98-e000c3576326.png) +![](D:/folder/study/md_files/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png) Ctrl+O:保存修改 ->弹出询问-> Y则保存,N则不保存,ctrl+c 取消操作。 @@ -582,7 +582,7 @@ socks-port: 7891 allow-lan: false mode: Rule //Global log-level: info -external-controller: 127.0.0.1:9090 +external-controller: 0.0.0.0:9090 unified-delay: true hosts: time.facebook.com: 17.253.84.125 @@ -631,7 +631,7 @@ proxies: 简便方法:windows上将订阅链接导入,自动解析成yaml配置文件,然后直接把该文件传到服务器上! -![image-20250309173756312](D:\folder\test\output\image-20250309173756312.png) +![image-20250309173756312](D:/folder/study/md_files/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png) @@ -702,33 +702,43 @@ YACD 是一个基于 **Clash** 的 Web 管理面板,用于管理您的 Clash **服务器上部署**:目前是npm手动构建安装启动的。 -0. 下载yacd +下载yacd - ``` - git clone https://github.com/haishanh/yacd.git - ``` +``` +git clone https://github.com/haishanh/yacd.git +``` -1. 安装npm +安装npm -2. 安装pnpm +构建yacd -3. 构建yacd +``` +cd ~/VPN/yacd +pnpm install +pnpm build +``` - ``` - cd ~/VPN/yacd - pnpm install - pnpm build - ``` +启动yacd -4. 启动yacd - - ``` - nohup pnpm serve --host 0.0.0.0 & //如果不是0.0.0.0 不能在windows上打开 - ``` +``` +nohup pnpm serve --host 0.0.0.0 & //如果不是0.0.0.0 不能在windows上打开 +``` -通过http://124.71.159.195:4173/,手动添加crash服务所在的ip:端口 +**停止进程** + +``` +ps aux | grep pnpm + +kill xxx +``` + + + +通过http://124.71.159.195:4173/ 访问yacd控制面板。手动添加crash服务所在的ip:端口。 + +如果连不上:yacd和crash都是http协议就行了。 @@ -837,7 +847,7 @@ services: cd /data/easyimage/config/config.php ``` -![image-20250315101454031](D:\folder\test\output\image-20250315101454031.png) +![image-20250315101454031](D:/folder/study/md_files/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png) 这里添加上https @@ -845,7 +855,7 @@ cd /data/easyimage/config/config.php 网站域名 图片域名设置可以改变图片的url:IP或域名 -![image-20250306183642549](D:\folder\test\output\image-20250306183642549.png) +![image-20250306183642549](D:/folder/study/md_files/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png) @@ -858,7 +868,7 @@ cd /data/easyimage/config/config.php 2.插件设置,搜索web-uploader 1.1.1 (自定义web图床) 旧版有搜索不出来的情况!建议直接安装最新版! -3.配置如下,API地址从easyimage-设置-API设置中获取![image-20250306141151376](D:\folder\test\output\image-20250306141151376.png) +3.配置如下,API地址从easyimage-设置-API设置中获取![image-20250306141151376](D:/folder/study/md_files/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png) @@ -891,6 +901,7 @@ py脚本3:将本地图片上传到easyimage图床并将链接返回替换md文 [【好玩儿的Docker项目】10分钟搭建一个Typecho博客|太破口!念念不忘,必有回响!-我不是咕咕鸽](https://blog.laoda.de/archives/docker-compose-install-typecho) ``` +zy123@hcss-ecs-588d:~/typecho$ cat docker-compose.yml version: "3" services: @@ -923,7 +934,15 @@ services: - mysql networks: - web - + pyapp: + build: ./markdown_operation # Dockerfile所在的目录 + restart: "no" + networks: + - web + env_file: + - .env + depends_on: + - mysql mysql: image: mysql:5.7 restart: always @@ -965,7 +984,15 @@ rm -rf /root/data/docker_data/typecho # 完全删除映射到本地的数据 主题:https://github.com/HaoOuBa/Joe -markdown编辑器:https://xiamp.net/archives/aaeditor-is-another-typecho-editor-plugin.html +markdown编辑器插件:https://xiamp.net/archives/aaeditor-is-another-typecho-editor-plugin.html + + + +### **Markdown文件自动发布** + + + + diff --git a/Java/test.md b/Java/test.md index a988038..692668d 100644 --- a/Java/test.md +++ b/Java/test.md @@ -4,7 +4,7 @@ int main(){ } ``` -# ![测试](D:/folder/test/output/96115587-d917-43bf-b965-886379af8fda.png) +# ![测试](D:/folder/study/md_files/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png) # 一级标题:# xx diff --git a/Java/安卓开发.md b/Java/安卓开发.md index 88ce9aa..0a22523 100644 --- a/Java/安卓开发.md +++ b/Java/安卓开发.md @@ -5,23 +5,23 @@ 最近想在我的书城中开发一下阅读器的功能,难度颇高,因此在github上找到了一个封装了阅读器功能的项目,仅需获得文件本地存储地址,调用其提供的函数即可进行阅读。 **但是**,github介绍的使用方法并不总是有效,比如我就经常无法正确添加依赖 -![image-20240503200121198](D:/folder/test/output/9a28a61a-bb35-4a7a-9f09-db4c300212f1.png) +![image-20240503200121198](D:/folder/study/md_files/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png) 因此,我将其项目代码拷贝到本地,手动集成。 -![image-20240503200221147](D:/folder/test/output/3a17e26d-cc39-4823-802b-92f7d5f6e3ba.png) +![image-20240503200221147](D:/folder/study/md_files/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png) 依据项目结构,可以发现app是主项目,hwtxtreaderlib是功能模块,根据是这张图: -![image-20240503200343665](D:/folder/test/output/70cd971c-21ec-4914-9fe7-1f5aac7b85b2.png) +![image-20240503200343665](D:/folder/study/md_files/output/4016b542-0162-4b87-b590-cb15e8377076.png) build.gradle(:app)中引入了hwtxtreaderlib的依赖,而app只是个demo测试模块,相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此,手动步骤如下: - 将hwtxtreaderlib复制到自己的项目文件夹中 - ![image-20240503200651488](D:/folder/test/output/e05bc95d-b8e4-466f-8d1f-ddf21c9afe10.png) + ![image-20240503200651488](D:/folder/study/md_files/output/cc409c48-a01a-480d-9c00-5692f0112184.png) - 在app的build.gradle中,添加依赖 @@ -37,11 +37,11 @@ implementation project(':hwtxtreaderlib') - syn now! 同步一下,然后android studio中项目结构变成如下图 -![image-20240503201012590](D:/folder/test/output/3efab097-d5fd-411c-8641-2ef0977eded6.png) +![image-20240503201012590](D:/folder/study/md_files/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png) - build没报错基本就稳了,然后就运行试试 -![image-20240503201211104](D:/folder/test/output/98ab47e6-d406-4c5c-84c1-4470bd803ef2.png) +![image-20240503201211104](D:/folder/study/md_files/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png) 这里可能AndroidManifest.xml报错,需要查看原项目中app模块如何编写的,做些适当的修改!我这里卡了很久. @@ -49,4 +49,4 @@ implementation project(':hwtxtreaderlib') **非常重要!!!**有时候github项目会将项目的详细信息写在wiki中!!! -![image-20240503213919450](D:/folder/test/output/bbcc458c-16c2-455f-8853-441379e5807f.png) \ No newline at end of file +![image-20240503213919450](D:/folder/study/md_files/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png) \ No newline at end of file diff --git a/Java/微服务.md b/Java/微服务.md index dc0d012..a87dc98 100644 --- a/Java/微服务.md +++ b/Java/微服务.md @@ -145,9 +145,9 @@ mybatis-plus: `Wrapper`就是条件构造的抽象类,其下有很多默认实现,继承关系如图: -![image-20240813112049624](D:/folder/test/output/a235a515-c19a-4d52-93f0-99f7bfe7b01a.png) +![image-20240813112049624](D:/folder/study/md_files/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png) -![image-20240813134824946](D:/folder/test/output/f1fba482-f473-4d29-9cc2-2a2f3f492f25.png) +![image-20240813134824946](D:/folder/study/md_files/output/956ffdba-8095-4281-b541-8013f6ed8395.png) **QueryWrapper** @@ -360,17 +360,17 @@ int rows = userMapper.delete(queryWrapper); #### IService -![image-20240815092311650](D:/folder/test/output/8332f7ce-cdc8-4085-bd18-f479ef4ca2c2.png) +![image-20240815092311650](D:/folder/study/md_files/output/5691be63-1063-429f-98e1-e012d9e36190.png) -![image-20240815092324887](D:/folder/test/output/f3fe1679-bc67-4ee5-9956-df3134e6a009.png) +![image-20240815092324887](D:/folder/study/md_files/output/2b562250-35a6-4965-aadb-de00f9702c26.png) -![image-20240815092338012](D:/folder/test/output/1da75d45-f5d6-4131-ad64-4bc70664c92d.png) +![image-20240815092338012](D:/folder/study/md_files/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png) -![image-20240815092352179](D:/folder/test/output/ea9464f6-4df5-492b-941c-cb3fc42bbddc.png) +![image-20240815092352179](D:/folder/study/md_files/output/ad306344-6366-4bef-ba75-a01e995acb47.png) -![image-20240815092420201](D:/folder/test/output/6c18537e-381a-43ec-99b2-a6b78e4bcdc2.png) +![image-20240815092420201](D:/folder/study/md_files/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png) -![image-20240815092604848](D:/folder/test/output/5fdfd44c-a756-4453-92f5-20f8d5bd868a.png) +![image-20240815092604848](D:/folder/study/md_files/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png) 由于`Service`中经常需要定义与业务有关的自定义方法,因此我们不能直接使用`IService`,而是自定义`Service`接口,然后继承`IService`以拓展方法。同时,让自定义的`Service实现类`继承`ServiceImpl`,这样就不用自己实现`IService`中的接口了。 diff --git a/Java/招标文件解析.md b/Java/招标文件解析.md index 05b4f14..9d60010 100644 --- a/Java/招标文件解析.md +++ b/Java/招标文件解析.md @@ -18,7 +18,7 @@ git clone地址:http://47.98.59.178:3000/zy123/zbparse.git ## 项目启动与维护: -![1](D:/folder/test/output/b2f11094-8ca3-4eb4-a4a0-dcaf813a5eaa.png) +![1](D:/folder/study/md_files/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.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/test/output/b769a6c3-a59b-433a-8abf-af5662448b2f.png) +![1](D:/folder/study/md_files/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png) **注意:**需要确认.env是否存在在服务器,默认是隐藏的 输入cat .env @@ -54,7 +54,7 @@ requirements.txt一般无需变动,除非代码中使用了新的库,也要 **docker-compose:** -![1](D:/folder/test/output/4d9b7458-698b-4a28-a246-c533ccaea1b9.png) +![1](D:/folder/study/md_files/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png) 本项目为**单服务项目**,只有flask_app(服务名) @@ -67,7 +67,7 @@ build context(`context: .`): **dockerfile:** -![1](D:/folder/test/output/98b18a05-96d7-46df-915a-544b3200aa31.png) +![1](D:/folder/study/md_files/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png) COPY . .(在 Dockerfile 中): 这条指令会将构建上下文中的所有内容复制到镜像中的当前工作目录(这里是 `/flask_project`)。 @@ -138,9 +138,9 @@ docker image prune 2. .env环境配好 (一般不需要在电脑环境变量中额外配置了,但是要在Pycharm中**安装插件**,使得项目在**启动时**能将env中的环境变量**自动配置**到系统环境变量中!!!) 3. 点击下拉框,Edit configurations - ![1](D:/folder/test/output/5477fdc6-d0fc-4931-bb54-0d62e3585b53.png) + ![1](D:/folder/study/md_files/output/e4fb54fb-9f59-4f68-8540-29105621b825.png) -​ 设置run_serve.py为启动脚本![1](D:/folder/test/output/0acc9c9c-8a6e-45db-8acc-a7da5d9b0294.png) +​ 设置run_serve.py为启动脚本![1](D:/folder/study/md_files/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png) ​ 注意这里的working directory要设置到最外层文件夹,而不是flask_app!!! @@ -408,7 +408,7 @@ mem_after = memory_usage()[0] memory_usage()[0] 可以获取当前程序所占内存的**快照** -![1](D:/folder/test/output/13c5773e-ff71-4126-9e75-8f73697ad835.png) +![1](D:/folder/study/md_files/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png) 产生的数据都存到result变量-》内存中,这是正常的,因此my_function没有内存泄漏问题。 **但是** @@ -427,7 +427,7 @@ def extract_text_by_page(file_path): return "" ``` -![1](D:/folder/test/output/4b038601-04da-4364-b64e-d6d7df3b8b36.png) +![1](D:/folder/study/md_files/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png) 可以发现尽管我返回"",内存仍然没有释放!因为就是读取pdf这块发生了内存泄漏! @@ -465,7 +465,7 @@ for stat in stats[:10]: tracemalloc.stop() ``` -![1](D:/folder/test/output/c85c3bb4-0182-4b44-b5e9-5a6ceabc04ee.png) +![1](D:/folder/study/md_files/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png) tracemalloc能更深入的分析,不仅是自己写的代码,**调用的库函数**产生的内存也能分析出来。在这个例子中就是PyPDF2中的各个函数占用了大部分内存。 @@ -566,7 +566,7 @@ def judge_zbfile_exec_sub(file_path): 但是存在一个问题:**第一次发送请求执行时间较慢!** -![1](D:/folder/test/output/9ba10499-2706-4a4b-8ba2-be22239c6645.png) +![1](D:/folder/study/md_files/output/31f24d30-27be-474c-869f-f76ca3fc1288.png) 可以发现实际执行只需7.7s,但是接口实际耗时10.23秒,主要是因**懒加载或按需初始化**:有些模块或资源在子进程启动时并不会马上加载,而是在子进程首次真正执行任务时才进行初始化。 @@ -597,7 +597,7 @@ threading.Thread(target=warmup_request, daemon=True).start() ## flask_app结构介绍 -1 +1 @@ -697,7 +697,7 @@ app.connection_limiters['upload'] = ConnectionLimiter(max_connections=100) 是公共函数存放的文件夹,llm下是各类大模型,读取文件下是docx pdf文件的读取以及文档清理clean_pdf,去页眉页脚页码 -![1](D:/folder/test/output/5a633993-ccde-4d22-8831-bcf0cd124bf7.png) +![1](D:/folder/study/md_files/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png) general下的llm下的清除file_id.py 需要**每周运行至少一次**,防止file_id数量超出(我这边对每次请求结束都有file_id记录并清理,向应该还没加) @@ -725,7 +725,7 @@ post_processing中的**process_functions_in_parallel**提取 资格审查、技术偏离、 商务偏离、 所需提交的证明材料 -![1](D:/folder/test/output/1c93e6fd-196f-467c-9b77-066fde2d483f.png) +![1](D:/folder/study/md_files/output/3fc27036-4e60-4daf-9599-4de21458b9de.png) 大解析upload用了post_processing完整版, @@ -755,9 +755,9 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 若开头没截准,就改begin_pattern,末尾没截准,就改end_pattern -![1](D:/folder/test/output/c005a7ac-90fa-4636-8a3b-42d02d73e61c.png) +![1](D:/folder/study/md_files/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png) -![1](D:/folder/test/output/b1873dcc-1718-4b3a-bae9-9da3d17ee4e4.png) +![1](D:/folder/study/md_files/output/aebc0281-531f-4bc0-b048-22fe10c64015.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/test/output/63fc0d3c-7656-4686-b37e-2af83e6a62eb.png) +![1](D:/folder/study/md_files/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.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/test/output/de90c69a-2f9d-4586-8b8a-062c6441ed45.png) +![1](D:/folder/study/md_files/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png) @@ -796,7 +796,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 都是废弃文件代码,未在正式、测试环境中使用的,不用管 -![1](D:/folder/test/output/24273e6d-ed92-4b11-b56a-4f83ec3470a3.png) +![1](D:/folder/study/md_files/output/afca2091-945f-4b3e-8199-c23308c66f76.png) @@ -804,7 +804,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 是接口以及主要实现部分,一一对应 -![1](D:/folder/test/output/00332c01-e1d1-4ed1-8493-e831382eb77c.png) +![1](D:/folder/study/md_files/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png) get_deviation对应偏离表数据解析main,获得偏离表数据 @@ -824,7 +824,7 @@ upload对应工程标解析和货物标解析,即大解析 utils是接口这块的公共功能函数。其中validate_and_setup_logger函数对不同的接口请求对应到不同的output文件夹,如upload->output1。后续增加接口也可直接在这里写映射关系。 -![1](D:/folder/test/output/a4e62d90-d754-44ff-9262-2fa65f650edf.png) +![1](D:/folder/study/md_files/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png) 重点关注大解析:**upload.py**和**货物标解析main.py** @@ -838,7 +838,7 @@ utils是接口这块的公共功能函数。其中validate_and_setup_logger函 各个文件夹(output1 output2..)对应不同的接口请求 -![1](D:/folder/test/output/021342c3-8801-4017-b220-89a7142802e3.png) +![1](D:/folder/study/md_files/output/70538b35-0008-4b05-8256-11ff67bcf803.png) @@ -850,7 +850,7 @@ testdir是平时写代码的测试的地方 它们都不影响正式和测试环境的解析 -![1](D:/folder/test/output/58065802-845f-4f52-b4b6-fc87cb873d3a.png) +![1](D:/folder/study/md_files/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png) @@ -858,7 +858,7 @@ testdir是平时写代码的测试的地方 是两个解析流程中不一样的地方(一样的都写在**general**中了) -![1](D:/folder/test/output/6f5017cc-f053-41f5-922c-1846d15f1d4d.png) +![1](D:/folder/study/md_files/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png) 主要是货物标额外解析了采购要求(提取采购需求main+技术参数要求提取+商务服务其他要求提取) @@ -868,7 +868,7 @@ testdir是平时写代码的测试的地方 ConnectionLimiter.py定义了接口超时时间->超时后断开与后端的连接 -![1](D:/folder/test/output/387b0950-fb02-49da-81e6-fc7d4a7c542e.png) +![1](D:/folder/study/md_files/output/4400b6f4-474c-4441-840f-3084e870ac13.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/test/output/2a05112b-6496-46ca-8145-e603d06fa950.png) +![1](D:/folder/study/md_files/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png) 4.商务评议和技术评议偏离表,即评分细则的偏离表,暂时没做,但是**商务评分、技术评分**无论大解析还是小解析都解析了,稍微对该数据处理一下返回给后端就行。 -![1](D:/folder/test/output/49c6b5e3-9f25-42ca-be31-6d132d75fa30.png) +![1](D:/folder/study/md_files/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png) 这个是解析得来的结果,适合给前端展示,但是要生成商务技术评议偏离表的话,需要再调一次大模型,对该数据进行重新归纳,以字符串列表为佳。再传给后端。(未做) @@ -1212,22 +1212,22 @@ if __name__ == '__main__': ### 项目贡献 -![1](D:/folder/test/output/176301b3-b473-4a85-9a4e-a1d71710c655.png) +![1](D:/folder/study/md_files/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png) -![1](D:/folder/test/output/cf28a67b-5572-489e-aa50-4d822898f582.png) +![1](D:/folder/study/md_files/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png) -![1](D:/folder/test/output/2c1dbe1f-4893-423c-9cfd-8f06967de7d4.png) +![1](D:/folder/study/md_files/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png) -![1](D:/folder/test/output/e6138a99-eae9-4aff-8402-bc09d183f45f.png) +![1](D:/folder/study/md_files/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png) ### 效果图 -![1](D:/folder/test/output/d66814f9-5858-4075-9439-b3b7768b3f9a.png) +![1](D:/folder/study/md_files/output/f37d901f-2715-4937-b68f-6e753f922323.png) -![](D:/folder/test/output/8177b69c-1686-42ad-a15b-24a04c41ab55.gif) +![](D:/folder/study/md_files/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif) -![1](D:/folder/test/output/7f80dae7-3145-4732-a9d3-ca1e9502777b.png) +![1](D:/folder/study/md_files/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png) -![1](D:/folder/test/output/1b1b4658-90aa-42de-9842-b2974b108810.png) +![1](D:/folder/study/md_files/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png) -![1](D:/folder/test/output/f358f6e4-8f0e-49e7-8587-661c04f87da9.png) +![1](D:/folder/study/md_files/output/b529e498-4374-4265-9242-d1fe773712dc.png) diff --git a/Java/苍穹外卖.md b/Java/苍穹外卖.md index 979eba2..bc4ea10 100644 --- a/Java/苍穹外卖.md +++ b/Java/苍穹外卖.md @@ -4,7 +4,7 @@ ### 后端项目结构 -![image-20240327104750952](D:/folder/test/output/ab5d4e98-dd5c-48a6-999f-4c2897268111.png) +![image-20240327104750952](D:/folder/study/md_files/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png) 分析sky-pojo模块的每个包的作用: @@ -170,7 +170,7 @@ public class EmployeeLoginDTO implements Serializable { } ``` -![image-20240327170247852](D:/folder/test/output/8ffded91-cd61-4373-a904-1279353cd3ef.png) +![image-20240327170247852](D:/folder/study/md_files/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png) ## 开发 @@ -288,7 +288,7 @@ public class BaseContext { 在属性上加上注解,对日期进行格式化 -image-20221112103501581 +image-20221112103501581 但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。 @@ -771,7 +771,7 @@ public static String doGet(String url,Map paramMap){ ## 微信小程序 -![image-20221204211800753](D:/folder/test/output/aec52692-0d27-46b2-b972-bfe3f6a70210.png) +![image-20221204211800753](D:/folder/study/md_files/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png) @@ -779,7 +779,7 @@ public static String doGet(String url,Map paramMap){ 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 -![image-20221208180228667](D:/folder/test/output/a13f6659-4d2c-45a8-8222-0c5bd8f5a487.png) +![image-20221208180228667](D:/folder/study/md_files/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png) @@ -787,7 +787,7 @@ public static String doGet(String url,Map paramMap){ 通过Redis来缓存菜品数据,减少数据库查询操作。 -![image-20221208180818572](D:/folder/test/output/40b791dc-fbfe-4aa5-831b-2872c02a5090.png) +![image-20221208180818572](D:/folder/study/md_files/output/8b76c934-d652-46de-9230-45df704578f8.png) @@ -952,19 +952,19 @@ Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要 https://pay.weixin.qq.com/static/product/product_index.shtml -![image-20221214223910840](D:/folder/test/output/30722ce7-3c6f-41a7-85b9-487d64ca7e47.png) +![image-20221214223910840](D:/folder/study/md_files/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png) **5.商户系统调用微信后台:** -![image-20221214224409174](D:/folder/test/output/087fc1ca-67ab-4c9d-9730-91c30f1da899.png) +![image-20221214224409174](D:/folder/study/md_files/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png) **10.用户调起微信支付** -![image-20221214224551220](D:/folder/test/output/523f0103-f8cd-40a0-ab7a-7658ddc1002d.png) +![image-20221214224551220](D:/folder/study/md_files/output/5783f31c-9512-4e5b-9835-0347d288ced4.png) @@ -984,7 +984,7 @@ https://pay.weixin.qq.com/static/product/product_index.shtml 复制authtoken: -![image-20240806133753849](D:/folder/test/output/bfa6cb35-3f24-4e8d-8399-d2f59cfd9f72.png) +![image-20240806133753849](D:/folder/study/md_files/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png) 执行命令: @@ -1002,7 +1002,7 @@ cpolar.exe authtoken ZmIwMmQzZDYtZDE2ZS00ZGVjLWE2MTUtOGQ0YTdhOWI2M2Q1 cpolar.exe http 8080 ``` -![image-20240806135141280](D:/folder/test/output/34b71597-dc25-4c1f-9c23-24c47348c748.png) +![image-20240806135141280](D:/folder/study/md_files/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png) 这里的 https://52ac2ecb.r18.cpolar.top 就是与http://localhost:8080对应的临时域名。 @@ -1024,7 +1024,7 @@ cpolar.exe http 8080 每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选) -![image-20240807141614724](D:/folder/test/output/a975f870-f542-4eda-ad44-f2a66ecb6c21.png) +![image-20240807141614724](D:/folder/study/md_files/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png) cron表达式在线生成器:https://cron.qqe2.com/ @@ -1036,7 +1036,7 @@ cron表达式在线生成器:https://cron.qqe2.com/ 1). 导入maven坐标 spring-context(已存在) -image-20221218193251182 +image-20221218193251182 2). 启动类添加注解 @EnableScheduling 开启任务调度 diff --git a/output/00e2004b-8cd5-4658-9742-61475d13703b.png b/output/00e2004b-8cd5-4658-9742-61475d13703b.png new file mode 100644 index 0000000..11b9a70 Binary files /dev/null and b/output/00e2004b-8cd5-4658-9742-61475d13703b.png differ diff --git a/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png b/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png new file mode 100644 index 0000000..10f5fdf Binary files /dev/null and b/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png differ diff --git a/output/0341f054-591e-42dd-b80a-17c188419e6e.png b/output/0341f054-591e-42dd-b80a-17c188419e6e.png new file mode 100644 index 0000000..adda725 Binary files /dev/null and b/output/0341f054-591e-42dd-b80a-17c188419e6e.png differ diff --git a/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png b/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png new file mode 100644 index 0000000..f4cfcaf Binary files /dev/null and b/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png differ diff --git a/output/06d92f94-982e-49b2-b999-be2dce45a748.png b/output/06d92f94-982e-49b2-b999-be2dce45a748.png new file mode 100644 index 0000000..2fa5456 Binary files /dev/null and b/output/06d92f94-982e-49b2-b999-be2dce45a748.png differ diff --git a/output/076407cc-070d-437d-93f9-5c50629ac058.png b/output/076407cc-070d-437d-93f9-5c50629ac058.png new file mode 100644 index 0000000..56265d2 Binary files /dev/null and b/output/076407cc-070d-437d-93f9-5c50629ac058.png differ diff --git a/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png b/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png new file mode 100644 index 0000000..bd8d0fe Binary files /dev/null and b/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png differ diff --git a/output/09747b1d-74f7-4c9d-818d-576680a30a96.png b/output/09747b1d-74f7-4c9d-818d-576680a30a96.png new file mode 100644 index 0000000..cf63466 Binary files /dev/null and b/output/09747b1d-74f7-4c9d-818d-576680a30a96.png differ diff --git a/output/0a48347c-8253-4502-8843-86aebcf496c9.png b/output/0a48347c-8253-4502-8843-86aebcf496c9.png new file mode 100644 index 0000000..5e31877 Binary files /dev/null and b/output/0a48347c-8253-4502-8843-86aebcf496c9.png differ diff --git a/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png b/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png new file mode 100644 index 0000000..f441feb Binary files /dev/null and b/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png differ diff --git a/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png b/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png new file mode 100644 index 0000000..22ad0b5 Binary files /dev/null and b/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png differ diff --git a/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png b/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png new file mode 100644 index 0000000..c45c1d6 Binary files /dev/null and b/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png differ diff --git a/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png b/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png new file mode 100644 index 0000000..8053713 Binary files /dev/null and b/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png differ diff --git a/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png b/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png new file mode 100644 index 0000000..c5d4be7 Binary files /dev/null and b/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png differ diff --git a/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png b/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png new file mode 100644 index 0000000..9bdc898 Binary files /dev/null and b/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png differ diff --git a/output/139ea234-029d-4e2e-894c-2b9e66781859.png b/output/139ea234-029d-4e2e-894c-2b9e66781859.png new file mode 100644 index 0000000..5acf93d Binary files /dev/null and b/output/139ea234-029d-4e2e-894c-2b9e66781859.png differ diff --git a/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png b/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png new file mode 100644 index 0000000..659f374 Binary files /dev/null and b/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png differ diff --git a/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png b/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png new file mode 100644 index 0000000..6abada4 Binary files /dev/null and b/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png differ diff --git a/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png b/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png new file mode 100644 index 0000000..4f0221f Binary files /dev/null and b/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png differ diff --git a/output/1a75be61-2a80-4389-bb41-177a84e301c8.png b/output/1a75be61-2a80-4389-bb41-177a84e301c8.png new file mode 100644 index 0000000..99514af Binary files /dev/null and b/output/1a75be61-2a80-4389-bb41-177a84e301c8.png differ diff --git a/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png b/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png new file mode 100644 index 0000000..6fd4694 Binary files /dev/null and b/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png differ diff --git a/output/1b624652-9519-4637-988b-d6c84fd08923.png b/output/1b624652-9519-4637-988b-d6c84fd08923.png new file mode 100644 index 0000000..96da453 Binary files /dev/null and b/output/1b624652-9519-4637-988b-d6c84fd08923.png differ diff --git a/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png b/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png new file mode 100644 index 0000000..0c08079 Binary files /dev/null and b/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png differ diff --git a/output/1c1cdb90-ece1-4866-98ca-6164002c5bd2.png b/output/1c1cdb90-ece1-4866-98ca-6164002c5bd2.png new file mode 100644 index 0000000..088adca Binary files /dev/null and b/output/1c1cdb90-ece1-4866-98ca-6164002c5bd2.png differ diff --git a/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png b/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png new file mode 100644 index 0000000..3e906f2 Binary files /dev/null and b/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png differ diff --git a/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png b/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png new file mode 100644 index 0000000..f45a8c0 Binary files /dev/null and b/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png differ diff --git a/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp b/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp new file mode 100644 index 0000000..e53a7ac Binary files /dev/null and b/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp differ diff --git a/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png b/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png new file mode 100644 index 0000000..b86c196 Binary files /dev/null and b/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png differ diff --git a/output/22821bd8-1a25-434c-90e9-50206f09c89b.png b/output/22821bd8-1a25-434c-90e9-50206f09c89b.png new file mode 100644 index 0000000..c4e61d6 Binary files /dev/null and b/output/22821bd8-1a25-434c-90e9-50206f09c89b.png differ diff --git a/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png b/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png new file mode 100644 index 0000000..f566738 Binary files /dev/null and b/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png differ diff --git a/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png b/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png new file mode 100644 index 0000000..b309666 Binary files /dev/null and b/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png differ diff --git a/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png b/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png new file mode 100644 index 0000000..a74e946 Binary files /dev/null and b/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png differ diff --git a/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png b/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png new file mode 100644 index 0000000..8f51bdc Binary files /dev/null and b/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png differ diff --git a/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png b/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png new file mode 100644 index 0000000..31c41df Binary files /dev/null and b/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png differ diff --git a/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png b/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png new file mode 100644 index 0000000..93ce521 Binary files /dev/null and b/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png differ diff --git a/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png b/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png new file mode 100644 index 0000000..a7c59a4 Binary files /dev/null and b/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png differ diff --git a/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png b/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png new file mode 100644 index 0000000..93846ad Binary files /dev/null and b/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png differ diff --git a/output/2a9bf144-bba9-42c0-aae6-089470ada845.png b/output/2a9bf144-bba9-42c0-aae6-089470ada845.png new file mode 100644 index 0000000..68233c8 Binary files /dev/null and b/output/2a9bf144-bba9-42c0-aae6-089470ada845.png differ diff --git a/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png b/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png new file mode 100644 index 0000000..e25a07a Binary files /dev/null and b/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png differ diff --git a/output/2b562250-35a6-4965-aadb-de00f9702c26.png b/output/2b562250-35a6-4965-aadb-de00f9702c26.png new file mode 100644 index 0000000..b27c427 Binary files /dev/null and b/output/2b562250-35a6-4965-aadb-de00f9702c26.png differ diff --git a/output/2d584571-9ead-4b78-a039-0903b70b82ac.png b/output/2d584571-9ead-4b78-a039-0903b70b82ac.png new file mode 100644 index 0000000..bcde01d Binary files /dev/null and b/output/2d584571-9ead-4b78-a039-0903b70b82ac.png differ diff --git a/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png b/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png new file mode 100644 index 0000000..6c25a0d Binary files /dev/null and b/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png differ diff --git a/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png b/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png new file mode 100644 index 0000000..da52b78 Binary files /dev/null and b/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png differ diff --git a/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png b/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png new file mode 100644 index 0000000..9908d1c Binary files /dev/null and b/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png differ diff --git a/output/3073bcd9-d022-483b-a082-e29e1291cc52.png b/output/3073bcd9-d022-483b-a082-e29e1291cc52.png new file mode 100644 index 0000000..d1f2159 Binary files /dev/null and b/output/3073bcd9-d022-483b-a082-e29e1291cc52.png differ diff --git a/output/312965c7-c112-4eb0-932c-4821c185833e.png b/output/312965c7-c112-4eb0-932c-4821c185833e.png new file mode 100644 index 0000000..d599c24 Binary files /dev/null and b/output/312965c7-c112-4eb0-932c-4821c185833e.png differ diff --git a/output/31f24d30-27be-474c-869f-f76ca3fc1288.png b/output/31f24d30-27be-474c-869f-f76ca3fc1288.png new file mode 100644 index 0000000..0245e76 Binary files /dev/null and b/output/31f24d30-27be-474c-869f-f76ca3fc1288.png differ diff --git a/output/33831492-711f-44d2-a637-332aae872fd8.png b/output/33831492-711f-44d2-a637-332aae872fd8.png new file mode 100644 index 0000000..3781790 Binary files /dev/null and b/output/33831492-711f-44d2-a637-332aae872fd8.png differ diff --git a/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png b/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png new file mode 100644 index 0000000..fff6000 Binary files /dev/null and b/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png differ diff --git a/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png b/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png new file mode 100644 index 0000000..78051b8 Binary files /dev/null and b/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png differ diff --git a/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png b/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png new file mode 100644 index 0000000..50dee95 Binary files /dev/null and b/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png differ diff --git a/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png b/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png new file mode 100644 index 0000000..9f1858b Binary files /dev/null and b/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png differ diff --git a/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png b/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png new file mode 100644 index 0000000..cc98ae9 Binary files /dev/null and b/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png differ diff --git a/output/38b86390-3c63-4464-9243-389e8693c3d3.png b/output/38b86390-3c63-4464-9243-389e8693c3d3.png new file mode 100644 index 0000000..2454421 Binary files /dev/null and b/output/38b86390-3c63-4464-9243-389e8693c3d3.png differ diff --git a/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png b/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png new file mode 100644 index 0000000..a179f55 Binary files /dev/null and b/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png differ diff --git a/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png b/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png new file mode 100644 index 0000000..248546f Binary files /dev/null and b/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png differ diff --git a/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png b/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png new file mode 100644 index 0000000..7626f21 Binary files /dev/null and b/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png differ diff --git a/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png b/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png new file mode 100644 index 0000000..1b27c13 Binary files /dev/null and b/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png differ diff --git a/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png b/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png new file mode 100644 index 0000000..dd442f3 Binary files /dev/null and b/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png differ diff --git a/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png b/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png new file mode 100644 index 0000000..b3c1db5 Binary files /dev/null and b/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png differ diff --git a/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png b/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png new file mode 100644 index 0000000..f8d287c Binary files /dev/null and b/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png differ diff --git a/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png b/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png new file mode 100644 index 0000000..18bbbfb Binary files /dev/null and b/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png differ diff --git a/output/3fc27036-4e60-4daf-9599-4de21458b9de.png b/output/3fc27036-4e60-4daf-9599-4de21458b9de.png new file mode 100644 index 0000000..eea2ca3 Binary files /dev/null and b/output/3fc27036-4e60-4daf-9599-4de21458b9de.png differ diff --git a/output/4016b542-0162-4b87-b590-cb15e8377076.png b/output/4016b542-0162-4b87-b590-cb15e8377076.png new file mode 100644 index 0000000..82f5f33 Binary files /dev/null and b/output/4016b542-0162-4b87-b590-cb15e8377076.png differ diff --git a/output/42e0c8d0-a392-4302-9410-4d302661d9df.png b/output/42e0c8d0-a392-4302-9410-4d302661d9df.png new file mode 100644 index 0000000..d8d4840 Binary files /dev/null and b/output/42e0c8d0-a392-4302-9410-4d302661d9df.png differ diff --git a/output/4400b6f4-474c-4441-840f-3084e870ac13.png b/output/4400b6f4-474c-4441-840f-3084e870ac13.png new file mode 100644 index 0000000..039a875 Binary files /dev/null and b/output/4400b6f4-474c-4441-840f-3084e870ac13.png differ diff --git a/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png b/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png new file mode 100644 index 0000000..bc01ea3 Binary files /dev/null and b/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png differ diff --git a/output/45997e98-63aa-4816-b4d3-d0c778c75065.png b/output/45997e98-63aa-4816-b4d3-d0c778c75065.png new file mode 100644 index 0000000..4246f51 Binary files /dev/null and b/output/45997e98-63aa-4816-b4d3-d0c778c75065.png differ diff --git a/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png b/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png new file mode 100644 index 0000000..af7a32f Binary files /dev/null and b/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png differ diff --git a/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png b/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png new file mode 100644 index 0000000..ec8cc62 Binary files /dev/null and b/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png differ diff --git a/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png b/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png new file mode 100644 index 0000000..70fd6f6 Binary files /dev/null and b/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png differ diff --git a/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg b/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg new file mode 100644 index 0000000..e22666c Binary files /dev/null and b/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg differ diff --git a/output/515247f4-f38f-4cef-bf14-8dab45863923.png b/output/515247f4-f38f-4cef-bf14-8dab45863923.png new file mode 100644 index 0000000..e9a2148 Binary files /dev/null and b/output/515247f4-f38f-4cef-bf14-8dab45863923.png differ diff --git a/output/554d273e-c4e3-4ac2-8573-01debad92434.png b/output/554d273e-c4e3-4ac2-8573-01debad92434.png new file mode 100644 index 0000000..d75d904 Binary files /dev/null and b/output/554d273e-c4e3-4ac2-8573-01debad92434.png differ diff --git a/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png b/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png new file mode 100644 index 0000000..4626928 Binary files /dev/null and b/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png differ diff --git a/output/5691be63-1063-429f-98e1-e012d9e36190.png b/output/5691be63-1063-429f-98e1-e012d9e36190.png new file mode 100644 index 0000000..d8ab3ab Binary files /dev/null and b/output/5691be63-1063-429f-98e1-e012d9e36190.png differ diff --git a/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png b/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png new file mode 100644 index 0000000..2e019f5 Binary files /dev/null and b/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png differ diff --git a/output/5783f31c-9512-4e5b-9835-0347d288ced4.png b/output/5783f31c-9512-4e5b-9835-0347d288ced4.png new file mode 100644 index 0000000..a864801 Binary files /dev/null and b/output/5783f31c-9512-4e5b-9835-0347d288ced4.png differ diff --git a/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png b/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png new file mode 100644 index 0000000..7549bb6 Binary files /dev/null and b/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png differ diff --git a/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png b/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png new file mode 100644 index 0000000..6866452 Binary files /dev/null and b/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png differ diff --git a/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png b/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png new file mode 100644 index 0000000..6dd6cf4 Binary files /dev/null and b/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png differ diff --git a/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png b/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png new file mode 100644 index 0000000..95f3759 Binary files /dev/null and b/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png differ diff --git a/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png b/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png new file mode 100644 index 0000000..8f33a6e Binary files /dev/null and b/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png differ diff --git a/output/5c0b315f-f55e-446e-900f-0eba454115d7.png b/output/5c0b315f-f55e-446e-900f-0eba454115d7.png new file mode 100644 index 0000000..4b1a755 Binary files /dev/null and b/output/5c0b315f-f55e-446e-900f-0eba454115d7.png differ diff --git a/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png b/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png new file mode 100644 index 0000000..72360ef Binary files /dev/null and b/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png differ diff --git a/output/5c73b93f-e819-465b-bce5-0f029d556626.png b/output/5c73b93f-e819-465b-bce5-0f029d556626.png new file mode 100644 index 0000000..1751ecc Binary files /dev/null and b/output/5c73b93f-e819-465b-bce5-0f029d556626.png differ diff --git a/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png b/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png new file mode 100644 index 0000000..3991d9c Binary files /dev/null and b/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png differ diff --git a/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png b/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png new file mode 100644 index 0000000..a4e53bc Binary files /dev/null and b/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png differ diff --git a/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png b/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png new file mode 100644 index 0000000..3fc9013 Binary files /dev/null and b/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png differ diff --git a/output/5e673d58-0138-436c-9d68-992f5f530ceb.png b/output/5e673d58-0138-436c-9d68-992f5f530ceb.png new file mode 100644 index 0000000..615edd5 Binary files /dev/null and b/output/5e673d58-0138-436c-9d68-992f5f530ceb.png differ diff --git a/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png b/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png new file mode 100644 index 0000000..b4994f0 Binary files /dev/null and b/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png differ diff --git a/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png b/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png new file mode 100644 index 0000000..e4302f3 Binary files /dev/null and b/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png differ diff --git a/output/615e3133-9e33-43bb-91ec-e150edd90925.png b/output/615e3133-9e33-43bb-91ec-e150edd90925.png new file mode 100644 index 0000000..fd0dfce Binary files /dev/null and b/output/615e3133-9e33-43bb-91ec-e150edd90925.png differ diff --git a/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png b/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png new file mode 100644 index 0000000..345646e Binary files /dev/null and b/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png differ diff --git a/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png b/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png new file mode 100644 index 0000000..8aa1526 Binary files /dev/null and b/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png differ diff --git a/output/63007064-a609-4230-ac70-2c5b5f39d366.png b/output/63007064-a609-4230-ac70-2c5b5f39d366.png new file mode 100644 index 0000000..199fc7c Binary files /dev/null and b/output/63007064-a609-4230-ac70-2c5b5f39d366.png differ diff --git a/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png b/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png new file mode 100644 index 0000000..c021896 Binary files /dev/null and b/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png differ diff --git a/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png b/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png new file mode 100644 index 0000000..7ade0b5 Binary files /dev/null and b/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png differ diff --git a/output/683b9b42-d07c-4a31-a441-d31506d148f0.png b/output/683b9b42-d07c-4a31-a441-d31506d148f0.png new file mode 100644 index 0000000..19578a7 Binary files /dev/null and b/output/683b9b42-d07c-4a31-a441-d31506d148f0.png differ diff --git a/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png b/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png new file mode 100644 index 0000000..4721b55 Binary files /dev/null and b/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png differ diff --git a/output/69c68ed1-7432-482c-8269-9bb280d78669.png b/output/69c68ed1-7432-482c-8269-9bb280d78669.png new file mode 100644 index 0000000..8a225e6 Binary files /dev/null and b/output/69c68ed1-7432-482c-8269-9bb280d78669.png differ diff --git a/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png b/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png new file mode 100644 index 0000000..44bbff7 Binary files /dev/null and b/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png differ diff --git a/output/6b0b7237-0318-4858-a126-c1c1e3536d23.png b/output/6b0b7237-0318-4858-a126-c1c1e3536d23.png new file mode 100644 index 0000000..cdf4913 Binary files /dev/null and b/output/6b0b7237-0318-4858-a126-c1c1e3536d23.png differ diff --git a/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png b/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png new file mode 100644 index 0000000..3135978 Binary files /dev/null and b/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png differ diff --git a/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png b/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png new file mode 100644 index 0000000..2f9674c Binary files /dev/null and b/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png differ diff --git a/output/70538b35-0008-4b05-8256-11ff67bcf803.png b/output/70538b35-0008-4b05-8256-11ff67bcf803.png new file mode 100644 index 0000000..1fe34a5 Binary files /dev/null and b/output/70538b35-0008-4b05-8256-11ff67bcf803.png differ diff --git a/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png b/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png new file mode 100644 index 0000000..e551d62 Binary files /dev/null and b/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png differ diff --git a/output/72a176d7-a4c0-4642-a680-5b3cf7cb937a.png b/output/72a176d7-a4c0-4642-a680-5b3cf7cb937a.png new file mode 100644 index 0000000..84bec40 Binary files /dev/null and b/output/72a176d7-a4c0-4642-a680-5b3cf7cb937a.png differ diff --git a/output/72d00f1b-9830-49db-8a81-855226f0978f.png b/output/72d00f1b-9830-49db-8a81-855226f0978f.png new file mode 100644 index 0000000..a472fd2 Binary files /dev/null and b/output/72d00f1b-9830-49db-8a81-855226f0978f.png differ diff --git a/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png b/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png new file mode 100644 index 0000000..5909682 Binary files /dev/null and b/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png differ diff --git a/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png b/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png new file mode 100644 index 0000000..a5289cf Binary files /dev/null and b/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png differ diff --git a/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png b/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png new file mode 100644 index 0000000..340b586 Binary files /dev/null and b/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png differ diff --git a/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png b/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png new file mode 100644 index 0000000..85a018f Binary files /dev/null and b/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png differ diff --git a/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png b/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png new file mode 100644 index 0000000..91a1072 Binary files /dev/null and b/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png differ diff --git a/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png b/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png new file mode 100644 index 0000000..20e4745 Binary files /dev/null and b/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png differ diff --git a/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png b/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png new file mode 100644 index 0000000..41e4f0a Binary files /dev/null and b/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png differ diff --git a/output/865e43e3-fc56-4af9-b5d1-a6541cd7e0ba.png b/output/865e43e3-fc56-4af9-b5d1-a6541cd7e0ba.png new file mode 100644 index 0000000..e90f341 Binary files /dev/null and b/output/865e43e3-fc56-4af9-b5d1-a6541cd7e0ba.png differ diff --git a/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png b/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png new file mode 100644 index 0000000..00c7977 Binary files /dev/null and b/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png differ diff --git a/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png b/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png new file mode 100644 index 0000000..7d9a135 Binary files /dev/null and b/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png differ diff --git a/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png b/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png new file mode 100644 index 0000000..8f3eaab Binary files /dev/null and b/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png differ diff --git a/output/8b76c934-d652-46de-9230-45df704578f8.png b/output/8b76c934-d652-46de-9230-45df704578f8.png new file mode 100644 index 0000000..850a34a Binary files /dev/null and b/output/8b76c934-d652-46de-9230-45df704578f8.png differ diff --git a/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png b/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png new file mode 100644 index 0000000..ef6b4c4 Binary files /dev/null and b/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png differ diff --git a/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png b/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png new file mode 100644 index 0000000..aa467e3 Binary files /dev/null and b/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png differ diff --git a/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png b/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png new file mode 100644 index 0000000..a215a0a Binary files /dev/null and b/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png differ diff --git a/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png b/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png new file mode 100644 index 0000000..5c85771 Binary files /dev/null and b/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png differ diff --git a/output/9290d18b-9292-4bab-bd01-722d3ad14097.png b/output/9290d18b-9292-4bab-bd01-722d3ad14097.png new file mode 100644 index 0000000..c113c19 Binary files /dev/null and b/output/9290d18b-9292-4bab-bd01-722d3ad14097.png differ diff --git a/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png b/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png new file mode 100644 index 0000000..07822df Binary files /dev/null and b/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png differ diff --git a/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png b/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png new file mode 100644 index 0000000..1b7bd37 Binary files /dev/null and b/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png differ diff --git a/output/948235d7-c37c-4dc2-ab0c-ef579fdfa911.png b/output/948235d7-c37c-4dc2-ab0c-ef579fdfa911.png new file mode 100644 index 0000000..e496894 Binary files /dev/null and b/output/948235d7-c37c-4dc2-ab0c-ef579fdfa911.png differ diff --git a/output/956ffdba-8095-4281-b541-8013f6ed8395.png b/output/956ffdba-8095-4281-b541-8013f6ed8395.png new file mode 100644 index 0000000..5d686af Binary files /dev/null and b/output/956ffdba-8095-4281-b541-8013f6ed8395.png differ diff --git a/output/95d66eec-0e52-4abc-8f38-42cd7160aa3e.png b/output/95d66eec-0e52-4abc-8f38-42cd7160aa3e.png new file mode 100644 index 0000000..037369f Binary files /dev/null and b/output/95d66eec-0e52-4abc-8f38-42cd7160aa3e.png differ diff --git a/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png b/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png new file mode 100644 index 0000000..0b27fd7 Binary files /dev/null and b/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png differ diff --git a/output/976d2d8d-9f66-4057-88eb-5db860be894f.png b/output/976d2d8d-9f66-4057-88eb-5db860be894f.png new file mode 100644 index 0000000..89ec8e6 Binary files /dev/null and b/output/976d2d8d-9f66-4057-88eb-5db860be894f.png differ diff --git a/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png b/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png new file mode 100644 index 0000000..ae55e29 Binary files /dev/null and b/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png differ diff --git a/output/98938714-6ae2-4ea9-967b-283dd72026bb.png b/output/98938714-6ae2-4ea9-967b-283dd72026bb.png new file mode 100644 index 0000000..d355859 Binary files /dev/null and b/output/98938714-6ae2-4ea9-967b-283dd72026bb.png differ diff --git a/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png b/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png new file mode 100644 index 0000000..a3b3c77 Binary files /dev/null and b/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png differ diff --git a/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png b/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png new file mode 100644 index 0000000..01a807d Binary files /dev/null and b/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png differ diff --git a/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png b/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png new file mode 100644 index 0000000..f574e0b Binary files /dev/null and b/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png differ diff --git a/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif b/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif new file mode 100644 index 0000000..79cce4c Binary files /dev/null and b/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif differ diff --git a/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png b/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png new file mode 100644 index 0000000..2534e4c Binary files /dev/null and b/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png differ diff --git a/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png b/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png new file mode 100644 index 0000000..de2ff43 Binary files /dev/null and b/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png differ diff --git a/output/a3003189-9a5f-491f-8a62-9496d63befcd.png b/output/a3003189-9a5f-491f-8a62-9496d63befcd.png new file mode 100644 index 0000000..a0abbe4 Binary files /dev/null and b/output/a3003189-9a5f-491f-8a62-9496d63befcd.png differ diff --git a/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png b/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png new file mode 100644 index 0000000..5a02a71 Binary files /dev/null and b/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png differ diff --git a/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png b/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png new file mode 100644 index 0000000..4475667 Binary files /dev/null and b/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png differ diff --git a/output/a45dc48a-0478-4791-903f-738cf27f8f28.png b/output/a45dc48a-0478-4791-903f-738cf27f8f28.png new file mode 100644 index 0000000..5328c8e Binary files /dev/null and b/output/a45dc48a-0478-4791-903f-738cf27f8f28.png differ diff --git a/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png b/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png new file mode 100644 index 0000000..e40221a Binary files /dev/null and b/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png differ diff --git a/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png b/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png new file mode 100644 index 0000000..2046a65 Binary files /dev/null and b/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png differ diff --git a/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png b/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png new file mode 100644 index 0000000..30d9582 Binary files /dev/null and b/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png differ diff --git a/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png b/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png new file mode 100644 index 0000000..594b506 Binary files /dev/null and b/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png differ diff --git a/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png b/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png new file mode 100644 index 0000000..76842b0 Binary files /dev/null and b/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png differ diff --git a/output/ad306344-6366-4bef-ba75-a01e995acb47.png b/output/ad306344-6366-4bef-ba75-a01e995acb47.png new file mode 100644 index 0000000..d9c7a96 Binary files /dev/null and b/output/ad306344-6366-4bef-ba75-a01e995acb47.png differ diff --git a/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png b/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png new file mode 100644 index 0000000..fc3d0e4 Binary files /dev/null and b/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png differ diff --git a/output/aebc0281-531f-4bc0-b048-22fe10c64015.png b/output/aebc0281-531f-4bc0-b048-22fe10c64015.png new file mode 100644 index 0000000..2c1f426 Binary files /dev/null and b/output/aebc0281-531f-4bc0-b048-22fe10c64015.png differ diff --git a/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.png b/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.png new file mode 100644 index 0000000..c6af8bf Binary files /dev/null and b/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.png differ diff --git a/output/af77f789-280a-40ce-bc40-66db8ed53a39.png b/output/af77f789-280a-40ce-bc40-66db8ed53a39.png new file mode 100644 index 0000000..6d48eda Binary files /dev/null and b/output/af77f789-280a-40ce-bc40-66db8ed53a39.png differ diff --git a/output/afad9a15-8628-4382-8993-f46ee275a658.png b/output/afad9a15-8628-4382-8993-f46ee275a658.png new file mode 100644 index 0000000..5f143cc Binary files /dev/null and b/output/afad9a15-8628-4382-8993-f46ee275a658.png differ diff --git a/output/afca2091-945f-4b3e-8199-c23308c66f76.png b/output/afca2091-945f-4b3e-8199-c23308c66f76.png new file mode 100644 index 0000000..23a6c6c Binary files /dev/null and b/output/afca2091-945f-4b3e-8199-c23308c66f76.png differ diff --git a/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png b/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png new file mode 100644 index 0000000..b38c907 Binary files /dev/null and b/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png differ diff --git a/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png b/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png new file mode 100644 index 0000000..9eb17f6 Binary files /dev/null and b/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png differ diff --git a/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png b/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png new file mode 100644 index 0000000..67a276b Binary files /dev/null and b/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png differ diff --git a/output/b34255cb-f8cc-4130-957e-dcf612a2ceaa.png b/output/b34255cb-f8cc-4130-957e-dcf612a2ceaa.png new file mode 100644 index 0000000..9f2ce3e Binary files /dev/null and b/output/b34255cb-f8cc-4130-957e-dcf612a2ceaa.png differ diff --git a/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png b/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png new file mode 100644 index 0000000..0f36a9d Binary files /dev/null and b/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png differ diff --git a/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png b/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png new file mode 100644 index 0000000..64b55af Binary files /dev/null and b/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png differ diff --git a/output/b529e498-4374-4265-9242-d1fe773712dc.png b/output/b529e498-4374-4265-9242-d1fe773712dc.png new file mode 100644 index 0000000..c88aa62 Binary files /dev/null and b/output/b529e498-4374-4265-9242-d1fe773712dc.png differ diff --git a/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png b/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png new file mode 100644 index 0000000..e6498b5 Binary files /dev/null and b/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png differ diff --git a/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png b/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png new file mode 100644 index 0000000..a2593f6 Binary files /dev/null and b/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png differ diff --git a/output/b773b722-17eb-4ab7-9144-4f75bdc17ecc.png b/output/b773b722-17eb-4ab7-9144-4f75bdc17ecc.png new file mode 100644 index 0000000..157b43c Binary files /dev/null and b/output/b773b722-17eb-4ab7-9144-4f75bdc17ecc.png differ diff --git a/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png b/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png new file mode 100644 index 0000000..41adf33 Binary files /dev/null and b/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png differ diff --git a/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png b/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png new file mode 100644 index 0000000..2cff9c2 Binary files /dev/null and b/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png differ diff --git a/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png b/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png new file mode 100644 index 0000000..ff65b42 Binary files /dev/null and b/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png differ diff --git a/output/bbe35a2a-51e6-405b-a199-89a49474f452.png b/output/bbe35a2a-51e6-405b-a199-89a49474f452.png new file mode 100644 index 0000000..d647096 Binary files /dev/null and b/output/bbe35a2a-51e6-405b-a199-89a49474f452.png differ diff --git a/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png b/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png new file mode 100644 index 0000000..9c4034d Binary files /dev/null and b/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png differ diff --git a/output/bcd2517d-2b7e-48bb-85cd-6bc95a4a456a.png b/output/bcd2517d-2b7e-48bb-85cd-6bc95a4a456a.png new file mode 100644 index 0000000..c8e523c Binary files /dev/null and b/output/bcd2517d-2b7e-48bb-85cd-6bc95a4a456a.png differ diff --git a/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png b/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png new file mode 100644 index 0000000..01a7499 Binary files /dev/null and b/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png differ diff --git a/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png b/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png new file mode 100644 index 0000000..356b220 Binary files /dev/null and b/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png differ diff --git a/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png b/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png new file mode 100644 index 0000000..cc2e892 Binary files /dev/null and b/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png differ diff --git a/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png b/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png new file mode 100644 index 0000000..6f00d8a Binary files /dev/null and b/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png differ diff --git a/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png b/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png new file mode 100644 index 0000000..4bc6f65 Binary files /dev/null and b/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png differ diff --git a/output/c58b6629-3854-4fc4-b5ca-9cf1ab245cee.png b/output/c58b6629-3854-4fc4-b5ca-9cf1ab245cee.png new file mode 100644 index 0000000..9d40b53 Binary files /dev/null and b/output/c58b6629-3854-4fc4-b5ca-9cf1ab245cee.png differ diff --git a/output/c6281305-9574-4ef5-b681-aed1ea871a99.png b/output/c6281305-9574-4ef5-b681-aed1ea871a99.png new file mode 100644 index 0000000..bff049c Binary files /dev/null and b/output/c6281305-9574-4ef5-b681-aed1ea871a99.png differ diff --git a/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png b/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png new file mode 100644 index 0000000..9ba1d7d Binary files /dev/null and b/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png differ diff --git a/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png b/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png new file mode 100644 index 0000000..42a2265 Binary files /dev/null and b/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png differ diff --git a/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png b/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png new file mode 100644 index 0000000..3a04601 Binary files /dev/null and b/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png differ diff --git a/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png b/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png new file mode 100644 index 0000000..dfe3cc4 Binary files /dev/null and b/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png differ diff --git a/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png b/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png new file mode 100644 index 0000000..3c642fd Binary files /dev/null and b/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png differ diff --git a/output/cc409c48-a01a-480d-9c00-5692f0112184.png b/output/cc409c48-a01a-480d-9c00-5692f0112184.png new file mode 100644 index 0000000..358cabc Binary files /dev/null and b/output/cc409c48-a01a-480d-9c00-5692f0112184.png differ diff --git a/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png b/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png new file mode 100644 index 0000000..e6986a9 Binary files /dev/null and b/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png differ diff --git a/output/cf44e196-ad1c-46df-b080-ef70b596131f.png b/output/cf44e196-ad1c-46df-b080-ef70b596131f.png new file mode 100644 index 0000000..cabb51f Binary files /dev/null and b/output/cf44e196-ad1c-46df-b080-ef70b596131f.png differ diff --git a/output/d09f0172-aed7-4e68-9abd-f3ac9dd7a063.png b/output/d09f0172-aed7-4e68-9abd-f3ac9dd7a063.png new file mode 100644 index 0000000..dee081a Binary files /dev/null and b/output/d09f0172-aed7-4e68-9abd-f3ac9dd7a063.png differ diff --git a/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png b/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png new file mode 100644 index 0000000..c22bc80 Binary files /dev/null and b/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png differ diff --git a/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png b/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png new file mode 100644 index 0000000..3037150 Binary files /dev/null and b/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png differ diff --git a/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png b/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png new file mode 100644 index 0000000..a519db6 Binary files /dev/null and b/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png differ diff --git a/output/d1e1f304-bcc5-415c-923e-166616133c2e.png b/output/d1e1f304-bcc5-415c-923e-166616133c2e.png new file mode 100644 index 0000000..abf1cb8 Binary files /dev/null and b/output/d1e1f304-bcc5-415c-923e-166616133c2e.png differ diff --git a/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png b/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png new file mode 100644 index 0000000..7922ac7 Binary files /dev/null and b/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png differ diff --git a/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png b/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png new file mode 100644 index 0000000..b40add6 Binary files /dev/null and b/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png differ diff --git a/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png b/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png new file mode 100644 index 0000000..e7960ec Binary files /dev/null and b/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png differ diff --git a/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png b/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png new file mode 100644 index 0000000..23e3fb4 Binary files /dev/null and b/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png differ diff --git a/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png b/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png new file mode 100644 index 0000000..021d93e Binary files /dev/null and b/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png differ diff --git a/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.png b/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.png new file mode 100644 index 0000000..b919152 Binary files /dev/null and b/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.png differ diff --git a/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png b/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png new file mode 100644 index 0000000..383733a Binary files /dev/null and b/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png differ diff --git a/output/db1506b9-159f-4278-8d26-0f899314d1fe.png b/output/db1506b9-159f-4278-8d26-0f899314d1fe.png new file mode 100644 index 0000000..73cc210 Binary files /dev/null and b/output/db1506b9-159f-4278-8d26-0f899314d1fe.png differ diff --git a/output/dc0f5ec4-a20d-4f2b-be5f-301d6d18bc89.png b/output/dc0f5ec4-a20d-4f2b-be5f-301d6d18bc89.png new file mode 100644 index 0000000..3386d68 Binary files /dev/null and b/output/dc0f5ec4-a20d-4f2b-be5f-301d6d18bc89.png differ diff --git a/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png b/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png new file mode 100644 index 0000000..043ae81 Binary files /dev/null and b/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png differ diff --git a/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png b/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png new file mode 100644 index 0000000..6e43fbb Binary files /dev/null and b/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png differ diff --git a/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png b/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png new file mode 100644 index 0000000..76436d8 Binary files /dev/null and b/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png differ diff --git a/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png b/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png new file mode 100644 index 0000000..b8c2dc3 Binary files /dev/null and b/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png differ diff --git a/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png b/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png new file mode 100644 index 0000000..11f60fd Binary files /dev/null and b/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png differ diff --git a/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png b/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png new file mode 100644 index 0000000..36f14eb Binary files /dev/null and b/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png differ diff --git a/output/e4fb54fb-9f59-4f68-8540-29105621b825.png b/output/e4fb54fb-9f59-4f68-8540-29105621b825.png new file mode 100644 index 0000000..5814aa4 Binary files /dev/null and b/output/e4fb54fb-9f59-4f68-8540-29105621b825.png differ diff --git a/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.png b/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.png new file mode 100644 index 0000000..d1520dc Binary files /dev/null and b/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.png differ diff --git a/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png b/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png new file mode 100644 index 0000000..7cb3957 Binary files /dev/null and b/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png differ diff --git a/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png b/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png new file mode 100644 index 0000000..3c31546 Binary files /dev/null and b/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png differ diff --git a/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png b/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png new file mode 100644 index 0000000..b1c2c5c Binary files /dev/null and b/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png differ diff --git a/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png b/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png new file mode 100644 index 0000000..37179ca Binary files /dev/null and b/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png differ diff --git a/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png b/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png new file mode 100644 index 0000000..47d7174 Binary files /dev/null and b/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png differ diff --git a/output/ebc9fa82-1269-49dc-9510-7e3d713b6058.png b/output/ebc9fa82-1269-49dc-9510-7e3d713b6058.png new file mode 100644 index 0000000..66108ca Binary files /dev/null and b/output/ebc9fa82-1269-49dc-9510-7e3d713b6058.png differ diff --git a/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png b/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png new file mode 100644 index 0000000..3ce3769 Binary files /dev/null and b/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png differ diff --git a/output/ec703e24-5fc9-4370-878d-a894da134165.png b/output/ec703e24-5fc9-4370-878d-a894da134165.png new file mode 100644 index 0000000..bea8047 Binary files /dev/null and b/output/ec703e24-5fc9-4370-878d-a894da134165.png differ diff --git a/output/ec79fd42-7641-46a8-9507-0867f0759023.png b/output/ec79fd42-7641-46a8-9507-0867f0759023.png new file mode 100644 index 0000000..0e9daa4 Binary files /dev/null and b/output/ec79fd42-7641-46a8-9507-0867f0759023.png differ diff --git a/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png b/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png new file mode 100644 index 0000000..dcddadd Binary files /dev/null and b/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png differ diff --git a/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png b/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png new file mode 100644 index 0000000..9bd26ef Binary files /dev/null and b/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png differ diff --git a/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png b/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png new file mode 100644 index 0000000..e986217 Binary files /dev/null and b/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png differ diff --git a/output/f008a154-be4b-4d83-a160-0090da54b786.png b/output/f008a154-be4b-4d83-a160-0090da54b786.png new file mode 100644 index 0000000..649ad1e Binary files /dev/null and b/output/f008a154-be4b-4d83-a160-0090da54b786.png differ diff --git a/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png b/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png new file mode 100644 index 0000000..ee19244 Binary files /dev/null and b/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png differ diff --git a/output/f37d901f-2715-4937-b68f-6e753f922323.png b/output/f37d901f-2715-4937-b68f-6e753f922323.png new file mode 100644 index 0000000..4a97aa7 Binary files /dev/null and b/output/f37d901f-2715-4937-b68f-6e753f922323.png differ diff --git a/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918-1742378323668-1.png b/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918-1742378323668-1.png new file mode 100644 index 0000000..344c720 Binary files /dev/null and b/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918-1742378323668-1.png differ diff --git a/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png b/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png new file mode 100644 index 0000000..344c720 Binary files /dev/null and b/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png differ diff --git a/output/f47e4553-83a1-4a82-be3d-30400cf53010.png b/output/f47e4553-83a1-4a82-be3d-30400cf53010.png new file mode 100644 index 0000000..254344b Binary files /dev/null and b/output/f47e4553-83a1-4a82-be3d-30400cf53010.png differ diff --git a/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png b/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png new file mode 100644 index 0000000..fc59a14 Binary files /dev/null and b/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png differ diff --git a/output/f56c1c08-857e-4450-b1c2-4397398a1214.png b/output/f56c1c08-857e-4450-b1c2-4397398a1214.png new file mode 100644 index 0000000..61267c5 Binary files /dev/null and b/output/f56c1c08-857e-4450-b1c2-4397398a1214.png differ diff --git a/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png b/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png new file mode 100644 index 0000000..1f3bd4e Binary files /dev/null and b/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png differ diff --git a/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png b/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png new file mode 100644 index 0000000..308f8ee Binary files /dev/null and b/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png differ diff --git a/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png b/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png new file mode 100644 index 0000000..2cfd811 Binary files /dev/null and b/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png differ diff --git a/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png b/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png new file mode 100644 index 0000000..84a71a6 Binary files /dev/null and b/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png differ diff --git a/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png b/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png new file mode 100644 index 0000000..534b730 Binary files /dev/null and b/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png differ diff --git a/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png b/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png new file mode 100644 index 0000000..7280645 Binary files /dev/null and b/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png differ diff --git a/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png b/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png new file mode 100644 index 0000000..d1dccfc Binary files /dev/null and b/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png differ diff --git a/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png b/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png new file mode 100644 index 0000000..f1c0746 Binary files /dev/null and b/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png differ diff --git a/output/image-20250319173057792.png b/output/image-20250319173057792.png new file mode 100644 index 0000000..0c93e87 Binary files /dev/null and b/output/image-20250319173057792.png differ diff --git a/output/image-20250319175707761.png b/output/image-20250319175707761.png new file mode 100644 index 0000000..5861e8f Binary files /dev/null and b/output/image-20250319175707761.png differ diff --git a/output/image-20250319180022461.png b/output/image-20250319180022461.png new file mode 100644 index 0000000..e2bcc62 Binary files /dev/null and b/output/image-20250319180022461.png differ diff --git a/科研/PID控制器.md b/科研/PID控制器.md index eab3cbf..51a9eda 100644 --- a/科研/PID控制器.md +++ b/科研/PID控制器.md @@ -6,7 +6,7 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 **开环控制系统** -![image-20240324175333458](D:/folder/test/output/01450f0f-aa2c-4eef-8a9c-c5e607f13554.png) +![image-20240324175333458](D:/folder/study/md_files/output/42e0c8d0-a392-4302-9410-4d302661d9df.png) 前馈控制系统尝试预先计算扰动对系统的影响,并在扰动影响系统输出之前调整输入以抵消它。 @@ -16,17 +16,17 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 控制器接收误差信号。该系统通过反馈回路来自动调节其输出 -![image-20240324175424762](D:/folder/test/output/443925cc-f8c9-4ad0-8a22-75f1b4649a98.png) +![image-20240324175424762](D:/folder/study/md_files/output/ec703e24-5fc9-4370-878d-a894da134165.png) -![image-20240324175627295](D:/folder/test/output/c6ade3a3-b97b-4fdb-b0b5-d092bc60079e.png) +![image-20240324175627295](D:/folder/study/md_files/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png) **复合控制系统** -![image-20240324175704820](D:/folder/test/output/11202030-e7ac-4313-ab80-04768cc0be1c.png) +![image-20240324175704820](D:/folder/study/md_files/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png) ## 连续与离散信号 -![image-20240324180342885](D:/folder/test/output/5ee8ad6a-a04c-43d3-aea3-39c6eb75bb81.png) +![image-20240324180342885](D:/folder/study/md_files/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png) 从连续信号到离散信号的转换过程涉及以下步骤: @@ -37,25 +37,25 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 ## PID公式 -![image-20240324181124423](D:/folder/test/output/08e86f7a-1690-44c3-a505-705847be3d8a.png) +![image-20240324181124423](D:/folder/study/md_files/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png) 控制系统中的传感器会**连续**监测被控制对象的状态(例如,温度、压力、位置等),而PID控制器通过在固定的**采样间隔**收集输入信号,将其转换为**离散信号**,计算控制动作,然后输出到控制对象。离散PID控制的优势在于其灵活性和适应性,它可以轻松地与软件算法集成。 ## 直观例子 -![image-20240324182805939](D:/folder/test/output/0d4aaa48-bd9a-4c61-a96a-38f4bf00f2d0.png) +![image-20240324182805939](D:/folder/study/md_files/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png) -![image-20240324184041843](D:/folder/test/output/90c2c452-4094-4a5a-b87a-432ecbc71935.png) +![image-20240324184041843](D:/folder/study/md_files/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png) **仅使用比例(P)控制无法消除稳态误差。**稳态误差是指当系统达到平衡状态时,控制系统的实际输出与期望输出之间的差异。 原因:当系统接近其期望点时,误差减小,进而控制器输出也减小。如果控制器输出减小到无法克服系统内部阻力(如摩擦力)或外部扰动的程度时,系统就无法进一步接近设定点,从而留下稳态误差。 -![image-20240324184057164](D:/folder/test/output/fb14b105-9c1b-49c6-9112-115bd5dc6a9b.png) +![image-20240324184057164](D:/folder/study/md_files/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png) 为了解决稳态误差问题,通常会在P控制基础上加入积分(I)控制。积分控制能够累积误差,即使是很小的误差,也会随时间积累,最终产生足够的控制作用以调整系统输出,直到误差为零。 -![image-20240324184110766](D:/folder/test/output/941c8bde-fdbe-4c5a-966a-cc4c98625c58.png) +![image-20240324184110766](D:/folder/study/md_files/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png) 微分控制在PID控制器中的作用主要是提高系统的瞬态响应和稳定性。 $$ @@ -67,7 +67,7 @@ $$ ## 相关控制知识 -![image-20240325101541488](D:/folder/test/output/aa1c5e5d-ab7c-4f1c-9ec3-e33e5084b461.png) +![image-20240325101541488](D:/folder/study/md_files/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png) 当系统启动时或者遇到大的扰动,会产生大的初始误差。若系统调整缓慢,积分项会在达到目标状态之前累积很大的值。这可导致控制器输出超出了实际的执行器(比如电机、阀门等)可以处理的范围。当这种情况发生时,即使误差减少,由于积分项累积的值太大,控制器的输出可能仍然处于饱和状态。 diff --git a/科研/matlab.md b/科研/matlab.md index 718aaa7..749fe1d 100644 --- a/科研/matlab.md +++ b/科研/matlab.md @@ -38,7 +38,7 @@ D=inv(A) 求逆矩阵 E=zeros(10,5,3) 生成10行5列3维0矩阵 -![](D:/folder/test/output/b1c033f0-18b8-4daf-abc3-92d225719492.png) +![](D:/folder/study/md_files/output/09747b1d-74f7-4c9d-818d-576680a30a96.png) #### 元胞数组 diff --git a/科研/卡尔曼滤波.md b/科研/卡尔曼滤波.md index c0ea840..4fea487 100644 --- a/科研/卡尔曼滤波.md +++ b/科研/卡尔曼滤波.md @@ -11,11 +11,11 @@ ## 引入 -![image-20240311130512387](D:/folder/test/output/75078ebe-6c65-409b-b8d9-f4163a37fbaf.png) +![image-20240311130512387](D:/folder/study/md_files/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png) -![image-20240311130359589](D:/folder/test/output/13a65daf-5f59-4ee2-aac1-8feaa68dc6a5.png) +![image-20240311130359589](D:/folder/study/md_files/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png) -![image-20240311130828892](D:/folder/test/output/62b05638-f749-4200-91d8-83ed332e9f28.png) +![image-20240311130828892](D:/folder/study/md_files/output/72d00f1b-9830-49db-8a81-855226f0978f.png) ## 公式 diff --git a/科研/图神经网络.md b/科研/图神经网络.md index a97941d..c1389eb 100644 --- a/科研/图神经网络.md +++ b/科研/图神经网络.md @@ -1,4 +1,4 @@ -## 图神经网络 +# 图神经网络 图表示学习的本质是把节点映射成低维连续稠密的向量。这些向量通常被称为 **嵌入(Embedding)**,它们能够捕捉节点在图中的结构信息和属性信息,从而用于下游任务(如节点分类、链接预测、图分类等)。 @@ -8,11 +8,11 @@ -### 对图数据进行深度学习的“朴素做法” +## 对图数据进行深度学习的“朴素做法” 把图的邻接矩阵和节点特征“直接拼接”成固定维度的输入,然后将其送入一个深度神经网络(全连接层)进行学习。 -![image-20250316142412685](D:\folder\test\output\image-20250316142412685.png) +![image-20250316142412685](D:/folder/study/md_files/output/554d273e-c4e3-4ac2-8573-01debad92434.png) 这种做法面临重大问题,导致其**并不可行**: @@ -53,9 +53,7 @@ -### **邻居聚合** - -#### **计算图** +## 计算图 在**图神经网络**里,通常每个节点$v$ 都有一个**局部计算图**,用来表示该节点在聚合信息时所需的所有邻居(及邻居的邻居……)的依赖关系。 @@ -67,20 +65,19 @@ -![image-20250316152729679](D:\folder\test\output\image-20250316152729679.png) +![image-20250316152729679](D:/folder/study/md_files/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png) -![image-20250316152836156](D:\folder\test\output\image-20250316152836156.png) +![image-20250316152836156](D:/folder/study/md_files/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png) -**例子** + + +### 例子 在图神经网络中,每一层的计算通常包括以下步骤: 1. **聚合(Aggregation)**:将邻居节点的特征聚合起来(如求和、均值、最大值等)。 - 2. **变换(Transformation)**:将聚合后的特征通过一个神经网络(如 MLP)进行非线性变换。 - - ``` A | @@ -98,21 +95,19 @@ **第 1 层更新:$A^{(0)} \to A^{(1)}$** -1. **节点 $A$ 的 1-hop 邻居**:只有 $B$。 +1. 节点 $A$ 的 1-hop 邻居:只有 $B$。 -2. **聚合**(示例:自 + sum 邻居): +2. 聚合(示例:自+邻居取平均): $$ - z_A^{(1)} \;=\; A^{(0)} + B^{(0)} - \;=\; [1.0,\,0.5] + [0.8,\,1.2] - \;=\; [1.8,\,1.7]. + z_A^{(1)} = \frac{A^{(0)} + B^{(0)}}{2} = \frac{[1.0,\,0.5] + [0.8,\,1.2]}{2} = \frac{[1.8,\,1.7]}{2} = [0.9,\,0.85]. $$ - -3. **MLP 变换**:用一个MLP映射 $z_A^{(1)}$ 到 2 维输出: + +3. MLP 变换:用一个MLP映射 $z_A^{(1)}$ 到 2 维输出: $$ A^{(1)} \;=\; \mathrm{MLP_1}\bigl(z_A^{(1)}\bigr). $$ - - (数值略,可想象 $\mathrm{MLP}([1.8,1.7]) \approx [1.9,1.1]$ 之类。) + - (数值略,可想象 $\mathrm{MLP}([0.9,0.85]) \approx [1.0,0.6]$ 之类。) **结果**:$A^{(1)}$ 包含了 **A** 的初始特征 + **B** 的初始特征信息。 @@ -120,69 +115,194 @@ **第 2 层更新:$A^{(1)} \to A^{(2)}$** -为了让 **A** 获得 **2-hop** 范围($C, D$)的信息,需要**先**让 **B** 在第 1 层就吸收了 $C, D$ 的特征,从而 **B^{(1)}** 蕴含 $C, D$ 信息。然后 **A** 在第 2 层再从 **B^{(1)}** 聚合。 +为了让 **A** 获得 **2-hop** 范围($C, D$)的信息,需要先让 $B$ 在第 1 层就吸收了 $C, D$ 的特征,从而 **$B^{(1)}$** 蕴含 $C, D$ 信息。然后 **A** 在第 2 层再从 **$B^{(1)}$** 聚合。 1. **节点 B 在第 1 层**(简要说明) - 邻居:$\{A,C,D\}$ - - 聚合:$z_B^{(1)} = B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}$ + - 聚合:$z_B^{(1)} = \frac{B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}}{4} = \frac{[0.8,\,1.2] + [1.0,\,0.5] + [0.3,\,0.7] + [1.5,\,0.9]}{4} = \frac{[3.6,\,3.3]}{4} = [0.9,\,0.825].$ - MLP 变换:$B^{(1)} = \mathrm{MLP}\bigl(z_B^{(1)}\bigr)$。 - - 此时 **B^{(1)}** 已经包含了 $C, D$ 的信息。 + - 此时 **$B^{(1)}$** 已经包含了 $C, D$ 的信息。 2. **节点 $A$ 的第 2 层聚合** - - 邻居:$B$,但此时要用 **B^{(1)}**(它已吸收 C、D) + - 邻居:$B$,但此时要用 **$B^{(1)}$**(它已吸收 C、D) - - **聚合**: + - 聚合: $$ z_A^{(2)} = A^{(1)} + B^{(1)}. $$ - - **MLP 变换**: + - MLP 变换: $$ A^{(2)} = \mathrm{MLP_2}\bigl(z_A^{(2)}\bigr). $$ -**结果**:$A^{(2)}$ 就包含了 **2-hop** 范围的信息,因为 **B^{(1)}** 中有 $C, D$ 的贡献。 +**结果**:$A^{(2)}$ 就包含了 **2-hop** 范围的信息,因为 **$B^{(1)}$** 中有 $C, D$ 的贡献。 -**GNN 的层数**就是**节点聚合邻居信息的迭代次数**,对应了“节点感受 k-hop 邻域”的深度。每层中,节点会用上一层的邻居表示进行聚合并经过可学习的变换,最终得到本层新的节点表示。 +**GNN 的层数**就是**节点聚合邻居信息的迭代次数**(也是计算图的层数)。 -同一层里,**所有节点共享一组参数**(同一个 MLP 或线性变换) +同一层里,**所有节点共享一组参数**(同一个 MLP 或全连接神经网络) -``` -public boolean hasCycle(ListNode head) { - // 如果链表为空或者只有一个节点,直接返回无环 - if (head == null || head.next == null) { - return false; - } +### **矩阵运算** - // 用 originalHead 保存最初的头节点 - ListNode originalHead = head; - // 从 head.next 开始遍历,先把 head 与链表分离 - ListNode cur = head.next; - ListNode pre = head; - // 断开 head 和后面的连接 - head.next = null; +$\tilde D^{-1}\,\tilde A\,\tilde D^{-1}H$ - while (cur != null) { - // 如果当前节点又指回了 originalHead,则说明出现环 - if (cur == originalHead) { - return true; - } - // 反转指针 - ListNode temp = cur.next; - cur.next = pre; - // 移动 pre 和 cur - pre = cur; - cur = temp; - } +$H'=\tilde D^{-1}\,\tilde A\,H$ - // 走到空指针,说明无环 - return false; - } -``` + A + | + B + / \ + C D +**1.构造矩阵** + +含自环邻接矩阵 $\tilde A=A+I$ +$$ +\tilde A = +\begin{bmatrix} +1 & 1 & 0 & 0\\ +1 & 1 & 1 & 1\\ +0 & 1 & 1 & 0\\ +0 & 1 & 0 & 1 +\end{bmatrix} +$$ +度矩阵 $\tilde D$(对角=自身+邻居数量) +$$ +\tilde D = \mathrm{diag}(2,\,4,\,2,\,2) +$$ +特征矩阵 $H$(每行为一个节点的特征向量) +$$ +H = +\begin{bmatrix} +1.0 & 0.5\\ +0.8 & 1.2\\ +0.3 & 0.7\\ +1.5 & 0.9 +\end{bmatrix} +$$ +**2.计算** + +求和: $\tilde A\,H$ +$$ +\tilde A H = +\begin{bmatrix} +1.8 & 1.7\\ +3.6 & 3.3\\ +1.1 & 1.9\\ +2.3 & 2.1 +\end{bmatrix} +$$ +平均: $\tilde D^{-1}(\tilde A H)$ +$$ +\tilde D^{-1}\tilde A H = +\begin{bmatrix} +0.90 & 0.85\\ +0.90 & 0.825\\ +0.55 & 0.95\\ +1.15 & 1.05 +\end{bmatrix} +$$ + + +## GCN + +在 GNN 里,归一化(normalization)的核心目的就是 **平衡不同节点在信息传播(message‑passing)中的影响力**,避免「高连通度节点(high‑degree nodes)」主导了所有邻居的特征聚合。 + +$H' = \tilde D^{-1}\,\tilde A\,\tilde D^{-1}H$ + +- 对节点 $i$ 来说: + +$$ +H'_i = \frac1{d_i}\sum_{j\in \mathcal N(i)}\frac1{d_j}\,H_j +$$ + +- **先用源节点 $j$ 的度 $d_j$ 缩小它的特征贡献**,再用目标节点 $i$ 的度 $d_i$ 归一化总和。 + + + +### **GCN中实际的公式:** + +$$ +H^{(l+1)} = \sigma\Big(\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}H^{(l)}W^{(l)}\Big) +$$ + +其中: + +- $H^{(l)}$ 是第 $l$ 层的输入特征(对第 $0$ 层来说就是节点的初始特征), +- $W^{(l)}$ 是第 $l$ 层的可训练权重矩阵,相当于一个简单的线性变换(类似于 MLP 中的全连接层), +- $\sigma(\cdot)$ 是非线性激活函数(例如 ReLU), +- $\tilde{A}$ 是包含自连接的邻接矩阵, +- $\tilde{D}$ 是 $\tilde{A}$ 的度矩阵。 + + + +**$\tilde{D}^{-1/2}\tilde{A}\tilde{D}^{-1/2}$的优势** + +**1.对称归一化**:$\tilde D^{-\frac{1}{2}}\,\tilde A\,\tilde D^{-\frac{1}{2}}$ 是一个对称矩阵,这意味着信息在节点之间的传播是双向一致的。这种对称性特别适合无向图,因为无向图的邻接矩阵 $\tilde A$ 本身就是对称的。 + +**2.适度抑制高连通度节点**:对称平方根归一化通过 $\tilde D^{-\frac{1}{2}}$ 对源节点和目标节点同时进行归一化,能够适度抑制高连通度节点的特征贡献,而不会过度削弱其影响力。 + +**3.谱半径控制**:对称平方根归一化后的传播矩阵 $\tilde D^{-\frac{1}{2}}\,\tilde A\,\tilde D^{-\frac{1}{2}}$ 的谱半径(最大特征值)被控制在 $[0, 1]$ 范围内,这有助于保证模型的数值稳定性。 + +**4.归一化拉普拉斯矩阵**:对称平方根归一化的传播矩阵 $\tilde D^{-\frac{1}{2}}\,\tilde A\,\tilde D^{-\frac{1}{2}}$ 与归一化拉普拉斯矩阵 $L = I - \tilde D^{-\frac{1}{2}}\,\tilde A\,\tilde D^{-\frac{1}{2}}$ 有直接联系。归一化拉普拉斯矩阵在图信号处理中具有重要的理论意义,能够更好地描述图的频谱特性。 + + + +**优化** +$$ +h_v^{(k+1)} = \sigma \Big( + \mathbf{W}_{\text{self}}^{(k)} \cdot h_v^{(k)} + \;+\; + \mathbf{W}_{\text{neigh}}^{(k)} \cdot \mathrm{MEAN}_{u\in N(v)}\bigl(h_u^{(k)}\bigr) +\Big), +$$ + + +### 直推式学习与归纳式学习 + +**直推式学习(Transductive Learning)** +模型直接在固定的训练图上学习节点的表示或标签,结果只能应用于这张图中的节点,无法直接推广到新的、未见过的节点或图。 + +例如:DeepWalk ,它通过对固定图的随机游走生成节点序列来学习节点嵌入,因此只能得到训练图中已有节点的表示,一旦遇到新节点,需要重新训练或进行特殊处理。 + +**注意**:GCN是直推式的,因为它依赖于整个图的归一化邻接矩阵进行卷积操作,需要在固定图上训练。GraphSAGE 是归纳式学习方法。它通过在每一层随机采样固定数量的邻居,当有新节点加入时,你可以构造一个包含新节点及其局部邻居的子图,然后重新计算该局部子图的 $\tilde{A}$ 和 $\tilde{D}$ 矩阵。这样就不需要对整个图做全局归一化 + + + +**归纳式学习(Inductive Learning)** +模型学习的是一个映射函数或规则,可以将这种规则推广到未见过的**新节点**或**新图**上。这种方法能够处理动态变化的图结构或新的数据。 + +例如:图神经网络的变体都是归纳式的,因为它们在聚合邻居信息时学习一个共享的函数,该函数能够应用于任意新节点。 + +**泛化到新节点**:在许多推荐系统中,如果有新用户加入(新节点),我们需要给他们做个性化推荐,这就要求系统能够在不重新训练整个模型的情况下,为新用户生成表示(Embedding),并且完成推荐预测。 + +**泛化到新图:** 分子图预测。我们会用一批训练分子(每个分子是一张图)来训练一个 GNN 模型,让它学会如何根据图结构与原子特征来预测分子的某些性质(如毒性、溶解度、活性等)。训练完成后,让它在新的分子上做预测。 + + + +### GNN的优点: + +**参数共享** + +- 浅层嵌入(如Deepwalk)为每个节点单独学习一个向量,参数量随节点数线性增长。 +- GNN 使用统一的消息传递/聚合函数,所有节点共享同一套模型参数,大幅减少参数量。 + +**归纳式学习** + +- 浅层方法通常无法直接处理训练时未见过的新节点。 +- GNN 能通过邻居特征和结构来生成新节点的表示,实现对新节点/新图的泛化。 + +**利用节点特征** + +- 浅层方法多半只基于连接关系(图结构)。 +- GNN 可以直接整合节点的属性(文本、图像特征等),生成更具语义信息的嵌入。 + +**更强的表达能力** + +- GNN 通过多层聚合邻居信息,可学习到更丰富的高阶结构和特征交互,往往在多种任务上表现更优。 diff --git a/科研/数学基础.md b/科研/数学基础.md index dfddc62..794d306 100644 --- a/科研/数学基础.md +++ b/科研/数学基础.md @@ -415,7 +415,7 @@ $$ Var(X)=\mathrm{E}({X}^{2})-{[\mathrm{E}(X)]}^{2} \\ Var(kX)={k}^{2}Var(X) $$ -![image-20240506121834075](D:\folder\test\output\57ac2ea3-9c03-4046-bb21-5385c54cc116-1741685912867-1.png) +![image-20240506121834075](D:/folder/study/md_files/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png) @@ -426,7 +426,7 @@ $$ **协方差** -![image-20240310120438207](D:\folder\test\output\f3557880-a768-40bf-b962-37cc4c466bbe-1741685912867-2.png) +![image-20240310120438207](D:/folder/study/md_files/output/5c73b93f-e819-465b-bce5-0f029d556626.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\test\output\e61d28e3-8e04-4cd2-9255-337b03ac4cb9-1741685912867-3.png) +![image-20240315100802791](D:/folder/study/md_files/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png) **协方差矩阵** 协方差矩阵计算了不同维度之间的协方差,它是一个对称矩阵 -![image-20240310202835535](D:\folder\test\output\3bab5556-5ce3-4a63-8e55-24eb88e9aa55-1741685912867-5.png) +![image-20240310202835535](D:/folder/study/md_files/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png) **性质:** @@ -461,7 +461,7 @@ $$ $$ **推导:** -![400000](D:\folder\test\output\71af28cc-5f04-484f-937c-235904e98e26-1741685912867-4.png) +![400000](D:/folder/study/md_files/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png) ## 高斯分布 @@ -471,7 +471,7 @@ $$ \end{pmatrix} $$ -![image-20240310103741300](D:\folder\test\output\971de6cf-0e45-4abf-92dc-0a3e6731322e-1741685912867-6.png) +![image-20240310103741300](D:/folder/study/md_files/output/076407cc-070d-437d-93f9-5c50629ac058.png) - x 在 μ-σ 和 μ+σ 之间的样本数量占到整个样本数量的 68.2%; - x 在 μ-2σ 和 μ+2σ 之间的样本数量占到整个样本数量的 95.4%; @@ -483,11 +483,11 @@ $$ 我们通常会尝试最小化方差,以尽可能减小状态估计的不确定性,从而获得更可靠和准确的估计结果 -![image-20240311132453071](D:\folder\test\output\c0786ed2-41b0-4e5d-b0b6-ad011689a2d4-1741685912867-7.png) +![image-20240311132453071](D:/folder/study/md_files/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png) ## 拉普拉斯变换 -![image-20240413112801149](D:\folder\test\output\19eeb887-807b-4f3f-9af8-dc102413eb3c-1741685912867-8.png) +![image-20240413112801149](D:/folder/study/md_files/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png) ## 矩阵运算 @@ -588,7 +588,7 @@ $$ **全连接神经网络** -![image-20250316145729703](D:\folder\test\output\image-20250316145729703.png) +![image-20250316145729703](D:/folder/study/md_files/output/00e2004b-8cd5-4658-9742-61475d13703b.png) 其中: @@ -1007,9 +1007,9 @@ $$ ## 幂迭代 -![image-20240428174019083](D:\folder\test\output\573a8976-b974-472c-942b-adb6ef434a60-1741845609725-1.png) +![image-20240428174019083](D:/folder/study/md_files/output/33831492-711f-44d2-a637-332aae872fd8.png) -![image-20240428173732285](D:\folder\test\output\76d0ae41-a948-45b1-931d-c10d7367941a-1741845609725-2.png) +![image-20240428173732285](D:/folder/study/md_files/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png) 原理:每一次迭代都相当于将当前向量乘以 $A$ 后再归一化。由于矩阵 $A$ 作用下,初始向量中 $v_1$ 分量对应的系数**会按 $\lambda_1$ 的 $k$ 次幂**增长,而其他特征向量分量增长较慢(因为它们对应的特征值模较小),故随着迭代次数的增加,向量逐渐趋向于 $v_1$ 的方向。 @@ -1160,7 +1160,7 @@ $$ ### **平均拉普拉斯矩阵:** -![image-20240428173204296](D:\folder\test\output\715f6bd7-2d6f-416c-b16c-e255100d56f3-1741845609725-3.png) +![image-20240428173204296](D:/folder/study/md_files/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png) ### **归一化拉普拉斯矩阵** diff --git a/科研/机器学习.md b/科研/机器学习.md new file mode 100644 index 0000000..b796ba4 --- /dev/null +++ b/科研/机器学习.md @@ -0,0 +1,143 @@ +# 机器学习与深度学习 + +## 机器学习 + +### 监督学习 + +**监督学习(Supervised Learning)** + +- 定义:所有训练数据都具有明确的标签,模型通过这些标签进行学习。 +- 特点:模型训练相对直接,性能受限于标注数据的质量和数量。 +- 示例:传统的分类问题,如手写数字识别、垃圾邮件检测等。 + +**无监督学习(Unsupervised Learning)** + +- 定义:训练数据完全没有标签,模型需要自己去发现数据中的模式或结构。 +- 特点:常用于聚类、降维、关联规则挖掘等任务,难以直接用于分类任务。 +- 示例:聚类算法(如K-means)和主成分分析(PCA)。 + +**半监督学习(Semi‑supervised Learning)** + +- **定义**:介于监督学习和无监督学习之间,使用少量带标签的数据和大量未标签的数据共同训练模型,以在标注数据稀缺时提升分类性能。 +- **特点**:结合标签信息与数据分布结构,通过利用未标签数据的内在聚类或流形结构降低对标注数据的依赖,从而提高模型泛化能力并降低标注成本;通常依赖平滑假设和聚类假设等前提。 +- **示例**:在猫狗图像分类任务中,先使用少量已标记的猫狗图片训练初始模型,再用该模型为大量未标记图片生成“伪标签”,将这些伪标签数据与原有标记数据合并重新训练,从而获得比仅使用有标签数据更高的分类准确率。 +- 在半监督学习中,为了避免将错误的模型预测“伪标签”纳入训练,必须对每个未标注样本的预测结果进行可信度评估,**只保留高置信度、准确率更高的伪标签**作为新增训练数据。 + +## 深度学习 + +### 前向传播 + +#### **Mini Batch梯度下降** + +**Batch Size(批大小)** + +- 定义 + + Batch Size 指在深度学习模型训练过程中,每次迭代送入网络进行前向传播和反向传播的样本数量。 + +- 特点 + + Batch Size 决定了梯度更新的频率和稳定性;较大的 Batch Size 能更好地利用 GPU 并行计算、减少迭代次数、加快训练速度,但会显著增加显存占用且可能降低模型泛化能力;较小的 Batch Size 则带来更大的梯度噪声,有助于跳出局部最优、提高泛化性能,但训练过程更不稳定且耗时更长。 + +- 示例:在 PyTorch 中,使用 `DataLoader(dataset, batch_size=32, shuffle=True)` 表示每次迭代从数据集中抽取 32 个样本进行训练。一个batch的所有样本会被**打包成一个张量**,一次性并行送入网络进行计算 + +将完整训练集分割成若干大小相同的小批量(mini‑batch),每次迭代仅使用一个 mini‑batch 来计算梯度并更新模型参数,结合了批量梯度下降(Batch GD)和随机梯度下降(SGD)的优势。 + +- 当 `batch_size=1` 时退化为随机梯度下降;当 `batch_size=m`(训练集总样本数)时退化为批量梯度下降。 +- 通常选择 2 的幂(如32、64、128、256)以匹配 GPU/CPU 内存布局并提升运算效率。 + +**算法流程** + +1. 将训练数据随机打乱并按 `batch_size` 划分成多个 mini‑batch。 + +2. 对每个 mini‑batch 执行: + + - 前向传播计算输出。 + + - 计算 mini‑batch 上的平均损失。 + + - 反向传播计算梯度。 + + - 按公式更新参数: + $$ + \theta \leftarrow \theta - \eta \frac{1}{|\text{batch}|}\sum_{i\in \text{batch}} \nabla_\theta \mathcal{L}(x_i,y_i) + $$ + +3. 遍历所有 mini‑batch 即完成一个 epoch,可重复多轮直到收敛。 + + + +#### Softmax 公式 + +假设有一个输入向量 +$$ +z = [z_1, z_2, \dots, z_K], +$$ +则 softmax 函数的输出为: +$$ +\sigma(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}, +$$ +其中 $i = 1, 2, \dots, K$。 + +- **分子**:对每个 $z_i$ 取自然指数 $e^{z_i}$,目的是将原始的实数扩展到正数范围。 +- **分母**:对所有 $e^{z_j}$ 求和,从而实现归一化,使得所有输出概率和为 1。 + + + +#### 交叉熵损失 + +假设有三个类别,真实标签为第二类,因此用 one-hot 编码表示为: +$$ +y = [0,\; 1,\; 0]. +$$ + +假设模型经过 softmax 后输出的预测概率为: +$$ +\hat{y} = [0.2,\; 0.7,\; 0.1]. +$$ + +交叉熵损失函数的定义为: +$$ +L = -\sum_{i=1}^{3} y_i \log \hat{y}_i. +$$ + +将 $y$ 和 $\hat{y}$ 的对应元素代入公式中: +$$ +L = -(0 \cdot \log 0.2 + 1 \cdot \log 0.7 + 0 \cdot \log 0.1) = -\log 0.7. +$$ + +计算 $-\log 0.7$(以自然对数为例): +$$ +-\log 0.7 \approx -(-0.3567) \approx 0.3567. +$$ + +因此,这个样本的交叉熵损失大约为 **0.3567**。 + + + +### **残差连接** + +假设一个神经网络层(或一组层)的输入为 $x$,传统的设计会期望该层直接学习一个映射 $F(x)$。而采用残差连接的设计,则将输出定义为: +$$ +\text{Output} = F(x) + x. +$$ +这里: + +- $F(x)$ 表示经过几层变换(比如卷积、激活等)后所学到的“残差”部分, +- $x$ 则是直接通过捷径传递过来的输入。 + +**为什么使用残差连接** + +1. **缓解梯度消失问题** + 在深层网络中,梯度往往会在反向传播过程中逐层衰减,而残差连接为梯度提供了一条捷径,使得梯度可以直接从后面的层传递到前面的层,从而使得网络更容易训练。 + +2. **简化学习任务** + 网络不必学习从零开始构造一个完整的映射,而只需要学习输入与目标之间的残差。这样可以使得学习任务变得更简单,更易收敛。 + +3. **提高网络性能** + 在很多实际应用中(例如图像识别中的 ResNet),引入残差连接的网络能训练得更深,并在多个任务上取得更好的效果。 + + + + + diff --git a/科研/李雅普诺夫稳定性.md b/科研/李雅普诺夫稳定性.md index 1143751..d5ad85d 100644 --- a/科研/李雅普诺夫稳定性.md +++ b/科研/李雅普诺夫稳定性.md @@ -8,7 +8,7 @@ 雅可比矩阵(Jacobian matrix)是一个重要的数学概念,它在向量值函数的微分方面起着关键作用。雅可比矩阵描述了一个向量值函数的局部线性近似。 -![image-20240413104858542](D:/folder/test/output/900d0a43-e441-4379-bbd3-9721d3c07871.png) +![image-20240413104858542](D:/folder/study/md_files/output/1b624652-9519-4637-988b-d6c84fd08923.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/test/output/3c3b1590-1333-419c-a6a1-154428aef5ee.png) +![image-20240413105515972](D:/folder/study/md_files/output/5c0b315f-f55e-446e-900f-0eba454115d7.png) @@ -24,23 +24,23 @@ **状态空间** -![image-20240413122729169](D:/folder/test/output/862bdb0d-e02f-4dff-b388-0b889aace213.png) +![image-20240413122729169](D:/folder/study/md_files/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png) **特征值、特征向量的几何意义** -![image-20240413162816588](D:/folder/test/output/99fca3f1-f84f-459f-897f-707cb2d5f906.png) +![image-20240413162816588](D:/folder/study/md_files/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png) 矩阵A表示某线性变换 -![image-20240413163625587](D:/folder/test/output/5f08a566-f942-4737-8b37-82934aabae85.png) +![image-20240413163625587](D:/folder/study/md_files/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png) -image-20240413165536752 +image-20240413165536752 -image-20240413165512450 +image-20240413165512450 为结论 @@ -48,9 +48,9 @@ ## 稳定性的定义 -![微信图片_20240413101222](D:/folder/test/output/6048c17b-a9b1-4750-87b0-a5b20f796d8f.png) +![微信图片_20240413101222](D:/folder/study/md_files/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png) -![微信图片_20240413101229](D:/folder/test/output/9537b4ef-e38f-4f13-8de9-434ed71d5371.png) +![微信图片_20240413101229](D:/folder/study/md_files/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png) @@ -58,9 +58,9 @@ 通过分析线性系统的系数矩阵的特征值来判断系统的稳定性 -![微信图片_20240413101333](D:/folder/test/output/81166264-ffad-4f9f-96bb-c667afe7b27d.png) +![微信图片_20240413101333](D:/folder/study/md_files/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png) -![image-20240413110954014](D:/folder/test/output/6f93f4de-5e41-477e-b6d7-3a9c2ceee26e.png) +![image-20240413110954014](D:/folder/study/md_files/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png) **雅各比矩阵**使我们能够将非线性系统在平衡点附近的行为**近似为线性系统**。通过这种局部线性化,我们可以应用线性系统理论来研究非线性系统的稳定性。 @@ -72,7 +72,7 @@ **why特征值???** -![微信图片_20240413162152](D:/folder/test/output/fd868772-de9b-45e8-93bb-181713c7523e.jpg) +![微信图片_20240413162152](D:/folder/study/md_files/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg) 可以以对角矩阵为例,特征值为对角线上元素,设平衡点x1=0,x2=0; @@ -83,23 +83,23 @@ eg: -![微信图片_20240413102132](D:/folder/test/output/4d375e46-b596-4574-8c19-66949655bc59.png) +![微信图片_20240413102132](D:/folder/study/md_files/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png) ## 希尔维斯特判据 -![微信图片_20240413101523](D:/folder/test/output/8c8eed88-7fc6-4c53-9646-9b585a5ec96f.png) +![微信图片_20240413101523](D:/folder/study/md_files/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png) ## 李雅普诺夫第二法(直接法) 关键是构造一个李雅普诺夫函数V(x) -![微信图片_20240413101545](D:/folder/test/output/1196db6a-4255-4730-9c64-b11e7acc5b49.png) +![微信图片_20240413101545](D:/folder/study/md_files/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png) -eg:![微信图片_20240413101643](D:/folder/test/output/9bcf942f-89ec-4b40-9bbb-8cbbcc4ce422.png) +eg:![微信图片_20240413101643](D:/folder/study/md_files/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png) @@ -115,13 +115,13 @@ $$ A为系统的状态矩阵,应用**李雅普诺夫方程**可构造李雅普诺夫函数。 -![微信图片_20240413101732](D:/folder/test/output/fd7cb571-b715-4f37-8fb2-d7cf05bb09f3.png) +![微信图片_20240413101732](D:/folder/study/md_files/output/cf44e196-ad1c-46df-b080-ef70b596131f.png) eg: -![微信图片_20240413101758](D:/folder/test/output/d423cf16-39b7-470f-b11e-3aa0526b43f0.png) +![微信图片_20240413101758](D:/folder/study/md_files/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png) @@ -133,13 +133,13 @@ $$ **克拉索夫斯基算法** -![微信图片_20240413101854](D:/folder/test/output/b45a2b0b-803b-48d0-81ff-8a7e247da517.png) +![微信图片_20240413101854](D:/folder/study/md_files/output/45997e98-63aa-4816-b4d3-d0c778c75065.png) eg: -![微信图片_20240413101950](D:/folder/test/output/89cbf829-8ff9-48b0-8840-282780b2ec41.png) +![微信图片_20240413101950](D:/folder/study/md_files/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png) -![微信图片_20240413101959](D:/folder/test/output/9ff05b23-3f6e-4071-a85e-8566d0a66c8a.png) +![微信图片_20240413101959](D:/folder/study/md_files/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png) diff --git a/科研/草稿.md b/科研/草稿.md index ceb1e0f..87439b1 100644 --- a/科研/草稿.md +++ b/科研/草稿.md @@ -1,81 +1,7 @@ -以下是转换为 Markdown 格式的内容,公式已用 `$` 或 `$$` 包裹: +对于传统的 transductive GCN 模型来说,公式中的 $\tilde{A}$(包含自环的邻接矩阵)和 $\tilde{D}$(其对应的度矩阵)的大小通常是基于训练时整个图的结构,是固定的。 ---- +然而,在归纳式设置下(例如在 GraphSAGE 或一些扩展的 GCN 模型中),当有新节点加入时,你可以构造一个包含新节点及其局部邻居的子图,然后重新计算该局部子图的 $\tilde{A}$ 和 $\tilde{D}$ 矩阵。这样就不需要对整个图做全局归一化,而是只关注新节点及其相关邻居的局部结构,从而生成新节点的表示。 -下面给出一个**最简示例**,只展示 **节点 $A$** 在两层 GNN 里的更新计算过程,并说明它是如何从 2-hop 范围(即节点 $C, D$)间接获得信息。 - ---- - -## 图结构与初始特征 - -``` - A - | - B - / \ - C D -``` - -- **边**:$A$–$B$,$B$–$C$,$B$–$D$ -- **初始特征 (Layer-0)**: - - $A^{(0)} = [1.0,\ 0.5]$ - - $B^{(0)} = [0.8,\ 1.2]$ - - $C^{(0)} = [0.3,\ 0.7]$ - - $D^{(0)} = [1.5,\ 0.9]$ - ---- - -**第 1 层更新:$A^{(0)} \to A^{(1)}$** - -1. **节点 $A$ 的 1-hop 邻居**:只有 $B$。 -2. **聚合**(示例:自 + sum 邻居): - $$ - z_A^{(1)} \;=\; A^{(0)} + B^{(0)} - \;=\; [1.0,\,0.5] + [0.8,\,1.2] - \;=\; [1.8,\,1.7]. - $$ -3. **MLP 变换**:用一个两层感知器或线性+激活函数映射 $z_A^{(1)}$ 到 2 维输出: - $$ - A^{(1)} \;=\; \mathrm{MLP}\bigl(z_A^{(1)}\bigr). - $$ - - (数值略,可想象 $\mathrm{MLP}([1.8,1.7]) \approx [1.9,1.1]$ 之类。) - -**结果**:$A^{(1)}$ 包含了 **A** 的初始特征 + **B** 的初始特征信息。 - ---- - -**第 2 层更新:$A^{(1)} \to A^{(2)}$** - -为了让 **A** 获得 **2-hop** 范围($C, D$)的信息,需要**先**让 **B** 在第 1 层就吸收了 $C, D$ 的特征,从而 **B^{(1)}** 蕴含 $C, D$ 信息。然后 **A** 在第 2 层再从 **B^{(1)}** 聚合。 - -1. **节点 B 在第 1 层**(简要说明) - - - 邻居:$\{A,C,D\}$ - - 聚合:$z_B^{(1)} = B^{(0)} + A^{(0)} + C^{(0)} + D^{(0)}$ - - MLP 变换:$B^{(1)} = \mathrm{MLP}\bigl(z_B^{(1)}\bigr)$。 - - 此时 **B^{(1)}** 已经包含了 $C, D$ 的信息。 - -2. **节点 $A$ 的第 2 层聚合** - - 邻居:$B$,但此时要用 **B^{(1)}**(它已吸收 C、D) - - **聚合**: - $$ - z_A^{(2)} = A^{(1)} + B^{(1)}. - $$ - - **MLP 变换**: - $$ - A^{(2)} = \mathrm{MLP}\bigl(z_A^{(2)}\bigr). - $$ - -**结果**:$A^{(2)}$ 就包含了 **2-hop** 范围的信息,因为 **B^{(1)}** 中有 $C, D$ 的贡献。 - ---- - -## 小结 - -- **第 1 层**:A 直接获取 B 的初始特征;B 同时获取 A、C、D 的初始特征。 -- **第 2 层**:A 获取 B 的**新表示**(B^{(1)}),该表示已带有 C、D 信息 → A 间接获得 2-hop 信息。 -- **每层**都进行“聚合 + MLP”**同步更新**,最终 $A^{(2)}$ 就是节点 A 的 2 层 GNN 输出。 - ---- - -如果需要进一步调整或补充,请告诉我! +**简洁总结:** +- **固定图(Transductive)**:$\tilde{A}$ 和 $\tilde{D}$ 大小固定,因为它们对应整个图。 +- **归纳式方法**:对于新节点,可以基于新节点和其选定的邻居构造局部子图,重新计算局部的 $\tilde{A}$ 和 $\tilde{D}$,从而实现在线生成表示。