diff --git a/Java/Docker指南.md b/Java/Docker指南.md index 3054845..92192fb 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/study/md_files/output/f47e4553-83a1-4a82-be3d-30400cf53010.png) +![image-20210731154257653](https://pic.bitday.top/i/2025/03/19/u66964-2.png) #### 镜像操作 -![image-20210731155649535](D:/folder/study/md_files/output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png) +![image-20210731155649535](https://pic.bitday.top/i/2025/03/19/u65nlc-2.png) 1. docker push,将本地镜像上传到远程仓库(例如 Docker Hub) @@ -102,7 +102,7 @@ docker build -t yourusername/myimage:latest . #### 容器操作 -![image-20210731161950495](D:/folder/study/md_files/output/b1585660-a4c2-4478-bcbc-54e827efaea7.png) +![image-20210731161950495](https://pic.bitday.top/i/2025/03/19/u66wrs-2.png) 1. docker run 创建并运行一个新容器 @@ -176,7 +176,7 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器 **数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。 -![image-20210731173541846](D:/folder/study/md_files/output/976d2d8d-9f66-4057-88eb-5db860be894f.png) +![image-20210731173541846](https://pic.bitday.top/i/2025/03/19/u68796-2.png) 一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。 @@ -507,7 +507,7 @@ docker info 我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。 -而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](D:/folder/study/md_files/output/db1506b9-159f-4278-8d26-0f899314d1fe.png) +而描述上述信息的文件就是Dockerfile文件 。![image-20210731180321133](https://pic.bitday.top/i/2025/03/19/u67pvv-2.png) `EXPOSE 8090` 是一个声明性的指令,`EXPOSE` 本身不会进行端口映射 @@ -672,7 +672,7 @@ docker push yourusername/zbparse #推送镜像到 Docker Hub docker tag zbparse 646228430smile/zbparse:latest 这里的646228430smile是用户名,保持不变 -![微信截图_20250225163059](D:/folder/study/md_files/output/f6a0e305-d0ee-4f02-94ae-8b5c6325b424.png) +![微信截图_20250225163059](https://pic.bitday.top/i/2025/03/19/u661a8-2.png) 14. 查看镜像 @@ -1145,7 +1145,7 @@ docker-compose -f docker-compose-app.yml up -d 查看课前资料提供的cloud-demo文件夹,里面已经编写好了docker-compose文件,而且每个微服务都准备了一个独立的目录: -![image-20210731181341330](D:/folder/study/md_files/output/a4da9135-b7b8-4e1e-8397-d9d3431800be.png) +![image-20210731181341330](https://pic.bitday.top/i/2025/03/19/u659u8-2.png) 内容如下: @@ -1194,11 +1194,11 @@ services: 查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表: -![image-20210801095205034](D:/folder/study/md_files/output/7ff36c71-df30-424f-b3a7-b93b5a9115bc.png) +![image-20210801095205034](https://pic.bitday.top/i/2025/03/19/u65i0j-2.png) 查看微服务目录,可以看到都包含Dockerfile文件: -![image-20210801095320586](D:/folder/study/md_files/output/5eccc4e2-c58b-4c2f-877a-bce81e3949c6.png) +![image-20210801095320586](https://pic.bitday.top/i/2025/03/19/u65rdk-2.png) 内容如下: @@ -1253,7 +1253,7 @@ spring: 打包后: -![image-20210801095951030](D:/folder/study/md_files/output/d1551cda-8a23-4a3c-8548-5a9b4240452d.png) +![image-20210801095951030](https://pic.bitday.top/i/2025/03/19/u66mhd-2.png) #### 拷贝jar包到部署目录 @@ -1261,15 +1261,15 @@ spring: user-service: -![image-20210801100201253](D:/folder/study/md_files/output/0a48347c-8253-4502-8843-86aebcf496c9.png) +![image-20210801100201253](https://pic.bitday.top/i/2025/03/19/u66jrt-2.png) order-service: -![image-20210801100231495](D:/folder/study/md_files/output/63007064-a609-4230-ac70-2c5b5f39d366.png) +![image-20210801100231495](https://pic.bitday.top/i/2025/03/19/u675a6-2.png) gateway: -![image-20210801100308102](D:/folder/study/md_files/output/a3d62e70-cef4-4254-9ad9-9c68681417c8.png) +![image-20210801100308102](https://pic.bitday.top/i/2025/03/19/u67av0-2.png) #### 部署 @@ -1277,7 +1277,7 @@ gateway: 上传到任意目录: -![image-20210801100955653](D:/folder/study/md_files/output/c3e70628-c55f-4bd0-a1a4-0ae62f179d1f.png) +![image-20210801100955653](https://pic.bitday.top/i/2025/03/19/u67ku9-2.png) 部署: diff --git a/Java/JavaWeb——前端.md b/Java/JavaWeb——前端.md index b0c5206..1849b91 100644 --- a/Java/JavaWeb——前端.md +++ b/Java/JavaWeb——前端.md @@ -2,15 +2,15 @@ ## JavaWeb学习路线 -![image-20240227162313041](D:/folder/study/md_files/output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png) +![image-20240227162313041](https://pic.bitday.top/i/2025/03/19/u6kvx7-2.png) ## 前后端分离开发 -![image-20240229125233265](D:/folder/study/md_files/output/06d92f94-982e-49b2-b999-be2dce45a748.png) +![image-20240229125233265](https://pic.bitday.top/i/2025/03/19/u6m408-2.png) -![image-20240229125254635](D:/folder/study/md_files/output/9c907a05-23c5-467b-bf13-b8b2d6ad781f.png) +![image-20240229125254635](https://pic.bitday.top/i/2025/03/19/u6kpkw-2.png) 1. 需求分析:首先我们需要阅读需求文档,分析需求,理解需求。 2. 接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等 @@ -146,9 +146,9 @@ 盒子模型,盒子部分指的是border及以内的部分,不包括margin -![image-20240228095942357](D:/folder/study/md_files/output/a1c4b44f-fa23-4254-a7aa-a8f801fd3e88.png) +![image-20240228095942357](https://pic.bitday.top/i/2025/03/19/u6lpxd-2.png) -![image-20240228100247314](D:/folder/study/md_files/output/9290d18b-9292-4bab-bd01-722d3ad14097.png) +![image-20240228100247314](https://pic.bitday.top/i/2025/03/19/u6lxdu-2.png) @@ -365,7 +365,7 @@ const: const pi=3.14 | 逻辑运算符 | && , \|\| , ! | | 三元运算符 | 条件表达式 ? true_value: false_value | -![image-20240228122315690](D:/folder/study/md_files/output/12a6770d-da36-43ad-a335-c3e65460c2e1.png) +![image-20240228122315690](https://pic.bitday.top/i/2025/03/19/u6lj59-2.png) parseint() ,将其他类型转化为数字 @@ -701,7 +701,7 @@ DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML - Text:文本对象 - Comment:注释对象 -![1668796698067](D:/folder/study/md_files/output/5cf21ff8-65ca-4e1a-9bee-1829949aafc4.png) +![1668796698067](https://pic.bitday.top/i/2025/03/19/u6l3cm-2.png) 那么我们学习DOM技术有什么用呢?主要作用如下: @@ -763,7 +763,7 @@ for (let i = 0; i < divs.length; i++) { 你想要如何操作获取到的DOM元素,你需要查阅手册,看它支持的属性 -![image-20240228185708363](D:/folder/study/md_files/output/e5a08825-08c9-4c38-8b20-e411b6bf7072.png) +![image-20240228185708363](https://pic.bitday.top/i/2025/03/19/u6k7vg-2.png) ``` var divs = document.getElementsByClassName('cls'); @@ -821,7 +821,7 @@ MVVM:其实是Model-View-ViewModel的缩写,有3个单词,具体释义如下 - View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据 - ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上 -![image-20240228194959643](D:/folder/study/md_files/output/2a9bf144-bba9-42c0-aae6-089470ada845.png) +![image-20240228194959643](https://pic.bitday.top/i/2025/03/19/u6mbl5-2.png) 基于上述的MVVM思想,其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分,我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;而今天我们要学习的就是侧重于ViewModel部分开发的vue前端框架,用来替代JavaScript的DOM操作,让数据展示到视图的代码开发变得更加的简单。 diff --git a/Java/JavaWeb——后端.md b/Java/JavaWeb——后端.md index dcf2328..f9ffceb 100644 --- a/Java/JavaWeb——后端.md +++ b/Java/JavaWeb——后端.md @@ -39,9 +39,9 @@ ## Maven -![image-20240229132137502](D:/folder/study/md_files/output/9fdab213-1ec6-45ff-8e3c-3075db1fba37.png) +![image-20240229132137502](https://pic.bitday.top/i/2025/03/19/u6rxj1-2.png) -![image-20240229133408054](D:/folder/study/md_files/output/b4f1d47d-baa1-4332-9201-b46409a3a0e8.png) +![image-20240229133408054](https://pic.bitday.top/i/2025/03/19/u6tcqw-2.png) Maven仓库分为: @@ -57,7 +57,7 @@ POM文件导入依赖的时候,先看本地仓库有没有,没有就看私 **创建Maven项目** -![image-20250307174233390](D:/folder/study/md_files/output/69c68ed1-7432-482c-8269-9bb280d78669.png) +![image-20250307174233390](https://pic.bitday.top/i/2025/03/19/u6u4ni-2.png) 勾选 **Create from archetype**(可选),也可以选择 **maven-archetype-quickstart** 等模版。 @@ -175,7 +175,7 @@ Maven 重建 * Maven中的坐标是==资源的唯一标识== , 通过该坐标可以唯一定位资源位置 * 使用坐标来定义项目或引入项目中需要的依赖 -![image-20240302131843540](D:/folder/study/md_files/output/fe43a0b5-1e69-4085-b919-f6617412e6a3.png) +![image-20240302131843540](https://pic.bitday.top/i/2025/03/19/u6ps37-2.png) ### 依赖管理 @@ -201,7 +201,7 @@ Maven 重建 更改之后可以在界面上看到一个maven刷新按钮,点击一下就开始联网下载依赖了,成功后可以看到 -![image-20240302133241227](D:/folder/study/md_files/output/de81576f-8253-4ca7-8f9b-27bfafe87fe2.png) +![image-20240302133241227](https://pic.bitday.top/i/2025/03/19/u6szry-2.png) #### 排除依赖 @@ -280,7 +280,7 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被 4. 双击test生命周期 -![image-20240302140156166](D:/folder/study/md_files/output/8edf9dcf-f52b-4bd9-a62d-5a653fe90bc9.png) +![image-20240302140156166](https://pic.bitday.top/i/2025/03/19/u6rc3p-2.png) ## HTTP协议 @@ -315,14 +315,14 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被 浏览器与 Tomcat 之间通过 HTTP 协议进行通信,而 Tomcat 则充当了中间的桥梁,将请求路由到你的 Java 代码,并最终将处理结果返回给浏览器。 -![image-20240304101816184](D:/folder/study/md_files/output/e15d0959-358d-48c5-a34c-79f0f42c9aa9.png) +![image-20240304101816184](https://pic.bitday.top/i/2025/03/19/u6pju8-2.png) ### 快速启动 1. 新建spring initializr module 2. 删除以下文件 -![image-20240302142835694](D:/folder/study/md_files/output/ede04c8d-bc70-42d2-affe-7b3ba04e61ab.png) +![image-20240302142835694](https://pic.bitday.top/i/2025/03/19/u6qkax-2.png) 新建HelloController类 @@ -416,7 +416,7 @@ public class RequestController { - **请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。** -![image-20240303112109981](D:/folder/study/md_files/output/8794f322-2f39-4d69-8d91-c5e9a7ea7577.png) +![image-20240303112109981](https://pic.bitday.top/i/2025/03/19/u6ndfm-2.png) ``` @RequestMapping("/complexpojo") @@ -464,7 +464,7 @@ public class RequestController { } ``` -![image-20240303120212254](D:/folder/study/md_files/output/c6281305-9574-4ef5-b681-aed1ea871a99.png) +![image-20240303120212254](https://pic.bitday.top/i/2025/03/19/u6oyev-2.png) #### JSON格式参数 @@ -506,7 +506,7 @@ json数组: Postman发送JSON格式数据: -![image-20240303121028876](D:/folder/study/md_files/output/a45dc48a-0478-4791-903f-738cf27f8f28.png) +![image-20240303121028876](https://pic.bitday.top/i/2025/03/19/u6u85u-2.png) 服务端Controller方法接收JSON格式数据: @@ -583,7 +583,7 @@ public class RequestController { 下图返回值分别是字符串、对象、集合。 -![image-20221204174052622](D:/folder/study/md_files/output/515247f4-f38f-4cef-bf14-8dab45863923.png) +![image-20221204174052622](https://pic.bitday.top/i/2025/03/19/u6shpf-2.png) 统一的返回结果使用类来描述,在这个结果中包含: @@ -627,7 +627,7 @@ public class Result { Controller层接收请求,调用Service层;Service层先调用Dao层获取数据,然后实现自己的业务逻辑处理部分,最后返回给Controller层;Controller层再响应数据。可理解为递归的过程 -![image-20221204201342490](D:/folder/study/md_files/output/ce064d1c-0b8c-4f64-b7fb-574d5ef204a4.png) +![image-20221204201342490](https://pic.bitday.top/i/2025/03/19/u6nmne-2.png) **但是**,这样每次要更换ServiceA->ServiceB时,需要修改Controller层的代码! @@ -644,7 +644,7 @@ private EmpService empService=new EmpServiceB(); //现在 #### IOC&DI 分层解耦 -![image-20240305104036244](D:/folder/study/md_files/output/0f9404b7-0769-4687-bfc8-b9470e485c83.png) +![image-20240305104036244](https://pic.bitday.top/i/2025/03/19/u6n46r-2.png) 任务:完成Controller层、Service层、Dao层的代码解耦 @@ -659,19 +659,19 @@ private EmpService empService=new EmpServiceB(); //现在 第1步:删除Controller层、Service层中new对象的代码 -![image-20221204212807207](D:/folder/study/md_files/output/f008a154-be4b-4d83-a160-0090da54b786.png) +![image-20221204212807207](https://pic.bitday.top/i/2025/03/19/u6tjd9-2.png) 第2步:Service层及Dao层的实现类,交给IOC容器管理 - 使用Spring提供的注解:@Component ,就可以实现类交给IOC容器管理 -![image-20221204213328034](D:/folder/study/md_files/output/312965c7-c112-4eb0-932c-4821c185833e.png) +![image-20221204213328034](https://pic.bitday.top/i/2025/03/19/u6pz2g-2.png) 第3步:为Controller及Service注入运行时依赖的对象 - 使用Spring提供的注解:@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象 -![image-20221204213859112](D:/folder/study/md_files/output/aac22eb5-a40e-4637-8e44-88980ac8920a.png) +![image-20221204213859112](https://pic.bitday.top/i/2025/03/19/u6ukxl-2.png) @@ -841,7 +841,7 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户 ### 开发流程 -![image-20220904125004138](D:/folder/study/md_files/output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png) +![image-20220904125004138](https://pic.bitday.top/i/2025/03/19/u6qh4d-2.png) 1. 查看页面原型明确需求 - 根据页面原型和需求,进行表结构设计、编写接口文档(已提供) @@ -861,11 +861,11 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户 ### 快速创建 -![image-20240307125505211](D:/folder/study/md_files/output/b21ff991-cbe2-445c-998e-7e3cd3d1eb57.png) +![image-20240307125505211](https://pic.bitday.top/i/2025/03/19/u6pfoj-2.png) 1. 创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。创建用户表user,并创建对应的实体类User -![image-20240307125820685](D:/folder/study/md_files/output/d1e1f304-bcc5-415c-923e-166616133c2e.png) +![image-20240307125820685](https://pic.bitday.top/i/2025/03/19/u6q96d-2.png) 2. 在springboot项目中,可以编写main/resources/application.properties文件,配置数据库连接信息。 @@ -882,7 +882,7 @@ spring.datasource.password=1234 3. 在引导类所在包下,在创建一个包 mapper。在mapper包下创建一个接口 UserMapper -![image-20240307132356616](D:/folder/study/md_files/output/7a1767cb-8f74-49dd-9265-6301accc6e07.png) +![image-20240307132356616](https://pic.bitday.top/i/2025/03/19/u6qtz4-2.png) @Mapper注解:表示是mybatis中的Mapper接口 @@ -976,7 +976,7 @@ public interface EmpMapper { } ``` -![image-20240312122323753](D:/folder/study/md_files/output/683b9b42-d07c-4a31-a441-d31506d148f0.png) +![image-20240312122323753](https://pic.bitday.top/i/2025/03/19/u6mu7z-2.png) 上图参数值分离,有效防止SQL注入 @@ -1007,7 +1007,7 @@ useGeneratedKeys = true表示获取返回的主键值,keyProperty = "id"表示 - 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。 - 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。 -![image-20221212103124490](D:/folder/study/md_files/output/d5e7eaeb-8f66-4e86-840c-68b62f1576ac.png) +![image-20221212103124490](https://pic.bitday.top/i/2025/03/19/u6o894-2.png) 解决方法: @@ -1073,7 +1073,7 @@ public interface EmpMapper { 3. XML映射文件中sql语句的**id**与Mapper接口中的**方法名**一致,并保持返回类型一致。 -![image-20221212153529732](D:/folder/study/md_files/output/943d1f46-ffca-4a0c-b97d-d33fc5b47a81.png) +![image-20221212153529732](https://pic.bitday.top/i/2025/03/19/u6su5s-2.png) \ @@ -1453,7 +1453,7 @@ public class AliOSSUtils { 将配置信息写在application.properties,用注解@Value获取配置文件中的数据 -![image-20230102173905913](D:/folder/study/md_files/output/bbe35a2a-51e6-405b-a199-89a49474f452.png) +![image-20230102173905913](https://pic.bitday.top/i/2025/03/19/u6osck-2.png) @Value("${aliyun.oss.endpoint}") @@ -1461,7 +1461,7 @@ public class AliOSSUtils { **yml配置文件** -![image-20230102181215809](D:/folder/study/md_files/output/b3e28d06-fa51-45e9-ba3a-55092a0d7009.png) +![image-20230102181215809](https://pic.bitday.top/i/2025/03/19/u6txwe-2.png) 了解下yml配置文件的基本语法: @@ -1525,7 +1525,7 @@ Spring提供的简化方式套路: 3. 在实体类上添加`@ConfigurationProperties`注解,并通过**perfix属性**来指定配置参数项的前缀 -![image-20230103210827003](D:/folder/study/md_files/output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png) +![image-20230103210827003](https://pic.bitday.top/i/2025/03/19/u6taji-2.png) 4. (可选)引入依赖pom.xml @@ -1538,7 +1538,7 @@ Spring提供的简化方式套路: **使用:** -![image-20240327124923629](D:/folder/study/md_files/output/5e673d58-0138-436c-9d68-992f5f530ceb.png) +![image-20240327124923629](https://pic.bitday.top/i/2025/03/19/u6s60c-2.png) @@ -1546,7 +1546,7 @@ Spring提供的简化方式套路: ### 会话技术 -![image-20230105203827355](D:/folder/study/md_files/output/13bff780-7bd1-4def-ac78-fd150ec435bc.png) +![image-20230105203827355](https://pic.bitday.top/i/2025/03/19/u6sdx9-2.png) 会话是和浏览器关联的,当有三个浏览器客户端和服务器建立了连接时,就会有三个会话。同一个浏览器在未关闭之前请求了多次服务器,这多次请求是属于同一个会话。比如:1、2、3这三个请求都是属于同一个会话。当我们关闭浏览器之后,这次会话就结束了。而如果我们是直接把web服务器关了,那么所有的会话就都结束了。 @@ -1587,7 +1587,7 @@ Spring提供的简化方式套路: ### JWT令牌 -![image-20240320191446966](D:/folder/study/md_files/output/19318b2b-4199-48ed-915d-8b39b3ec844f.png) +![image-20240320191446966](https://pic.bitday.top/i/2025/03/19/u6rqof-2.png) **生成和校验** @@ -1999,7 +1999,7 @@ eg:@Order(1) 先定义一个公共的pt(),然后可以直接引用。 -![image-20240322105617334](D:/folder/study/md_files/output/afad9a15-8628-4382-8993-f46ee275a658.png) +![image-20240322105617334](https://pic.bitday.top/i/2025/03/19/u6r4y1-2.png) 切入点表达式: @@ -2097,7 +2097,7 @@ public @interface MyLog { ### 连接点 -![image-20240322131745283](D:/folder/study/md_files/output/5ad64185-2f1b-4910-8c8a-03f88012c064.png) +![image-20240322131745283](https://pic.bitday.top/i/2025/03/19/u6og3o-2.png) **`getSignature()`**: 返回一个`Signature`类型的对象,这个对象包含了被拦截点的签名信息。在方法调用的上下文中,这包括了方法的名称、声明类型等信息。 @@ -2364,4 +2364,4 @@ public class SpringbootWebConfig2Application { ## WEB开发总体图 -![image-20240326111230747](D:/folder/study/md_files/output/62bc3f00-d0b6-4e4e-80db-3a9eb0908d33.png) +![image-20240326111230747](https://pic.bitday.top/i/2025/03/19/u6mzqw-2.png) diff --git a/Java/Java笔记本.md b/Java/Java笔记本.md index 7dc1024..cca18fd 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/study/md_files/output/38b86390-3c63-4464-9243-389e8693c3d3.png) +![image-20240227133714509](https://pic.bitday.top/i/2025/03/19/u6vct4-2.png) #### HashSet -![image-20240227150219184](D:/folder/study/md_files/output/bcd0cb57-a0c3-46d3-94ec-d4e5b47694b1.png) +![image-20240227150219184](https://pic.bitday.top/i/2025/03/19/u6wmxd-2.png) #### HashMap -![image-20240227152019078](D:/folder/study/md_files/output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png) +![image-20240227152019078](https://pic.bitday.top/i/2025/03/19/u6utmg-2.png) ``` // 使用 entrySet() 方法获取 Map 中所有键值对的集合,并使用增强型 for 循环遍历键值对 @@ -1253,11 +1253,11 @@ String ttImgPath = resourceUrl != null ? resourceUrl.getFile() : null; 反射技术,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(**成员变量、方法、构造器**等)。 -![1668575796295](D:/folder/study/md_files/output/e0b416c0-d69f-4a06-8b0e-71a87522ca92.png) +![1668575796295](https://pic.bitday.top/i/2025/03/19/u75k9n-2.png) **反射技术例子**:IDEA通过反射技术就可以获取到类中有哪些方法,并且把方法的名称以提示框的形式显示出来,所以你能看到这些提示了。 -![1668576426355](D:/folder/study/md_files/output/c275d79e-04fd-4d98-8dd3-4e00495b51c6.png) +![1668576426355](https://pic.bitday.top/i/2025/03/19/u6vwpj-2.png) **1.获取类的字节码(Class对象)**:有三种方法 @@ -1358,9 +1358,9 @@ public class Test2Constructor(){ **3.获取类的成员变量** -![1668579517323](D:/folder/study/md_files/output/e906d3fe-354f-4bbf-9f5f-e63d00ce95d3.png) +![1668579517323](https://pic.bitday.top/i/2025/03/19/u6v7a4-2.png) -![1668580075962](D:/folder/study/md_files/output/98938714-6ae2-4ea9-967b-283dd72026bb.png) +![1668580075962](https://pic.bitday.top/i/2025/03/19/u760yh-2.png) 不管是设置值还是获取值,都需要: @@ -1372,15 +1372,15 @@ public class Test2Constructor(){ **4.获取类的成员方法** -![1668580761089](D:/folder/study/md_files/output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png) +![1668580761089](https://pic.bitday.top/i/2025/03/19/u6wt58-2.png) 获取**单个**指定的成员方法:第一个参数填**方法名**、第二个参数填方法中的**参数类型** -![1668581678388](D:/folder/study/md_files/output/29950d42-4642-4db3-ba36-6c3fe307f69f.png) +![1668581678388](https://pic.bitday.top/i/2025/03/19/u6w6fd-2.png) 执行:第一个参数传入一个**对象**,然后是若干方法参数(无参可不写)... -![1668581800777](D:/folder/study/md_files/output/89b287fe-e8f0-4c36-8e31-23d9d0bb7571.png) +![1668581800777](https://pic.bitday.top/i/2025/03/19/u6weqw-2.png) @@ -1476,7 +1476,7 @@ public class FieldReflectionTest { ### Junit 单元测试 -![image-20240307172717512](D:/folder/study/md_files/output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png) +![image-20240307172717512](https://pic.bitday.top/i/2025/03/19/u75u7l-2.png) ``` @Test @@ -1490,7 +1490,7 @@ public class FieldReflectionTest { 写了@Test注解,那么该测试函数就可以直接运行!若一个测试类中写了多个测试方法,可以全部执行! -![image-20240307173454288](D:/folder/study/md_files/output/ec79fd42-7641-46a8-9507-0867f0759023.png) +![image-20240307173454288](https://pic.bitday.top/i/2025/03/19/u6um98-2.png) 原理可能是: @@ -1531,7 +1531,7 @@ public class AnnotationTest4 { 在Springboot中,如何快速生成单元测试? 选中类名,右键: -image-20240815093428359 +image-20240815093428359 diff --git a/Java/Jupyter notebook快速上手.md b/Java/Jupyter notebook快速上手.md index 0b81809..133a7fa 100644 --- a/Java/Jupyter notebook快速上手.md +++ b/Java/Jupyter notebook快速上手.md @@ -14,7 +14,7 @@ # 为什么学Jupyter notebook? -![jupyter notebook](D:/folder/study/md_files/output/e049777e-8c35-4449-a78c-e353a8d75bd8.png) +![jupyter notebook](https://pic.bitday.top/i/2025/03/19/u78rry-2.png) 能够编写、运行python文件的程序很多,比如python安装自带的IDLE、程序员喜爱的pycharm、数据科学全家桶Anaconda,还有Spyder、Thonny等。 @@ -34,7 +34,7 @@ Jupyter notebook是用python进行数据科学、机器学习的必备工具。 比如下图,包含了Markdown说明文档、代码块、代码运行结果、图片嵌入等元素,特别适合Python数据科学和机器学习撰写文档。 -![jupyter notebook代码分块运行、嵌入Markdown文档和图片](D:/folder/study/md_files/output/22821bd8-1a25-434c-90e9-50206f09c89b.png) +![jupyter notebook代码分块运行、嵌入Markdown文档和图片](https://pic.bitday.top/i/2025/03/19/u7977l-2.png) 吴恩达的《深度学习》慕课的课后编程作业、大数据竞赛网站Kaggle上的代码文档、美国大学的数据科学课程的课后资料及编程作业,都是以jupyter notebook文件的形式给出的,也就是`.ipynb`文件。 @@ -54,7 +54,7 @@ Jupyter notebook是基于Ipython内核的,在浏览器中以网页形式运行 > > Spyder和Jupyter notebook都是以Ipython为内核的。 -![ipython](D:/folder/study/md_files/output/e8e5056f-03d1-442b-bf02-2eee4cb64456.png) +![ipython](https://pic.bitday.top/i/2025/03/19/u76zwi-2.png) ## 安装Jupyter notebook @@ -70,7 +70,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 打开命令行,输入`jupter notebook`,回车。稍等片刻即可跳出浏览器网页。 -![jupyter notebook打开界面](D:/folder/study/md_files/output/615e3133-9e33-43bb-91ec-e150edd90925.png) +![jupyter notebook打开界面](https://pic.bitday.top/i/2025/03/19/u76q0r-2.png) 点击右边的New-Python3即可创建python文档。 @@ -82,7 +82,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 勾选文件夹,点击rename即可重命名 -![勾选文件夹,点击rename重命名](D:/folder/study/md_files/output/2d584571-9ead-4b78-a039-0903b70b82ac.png) +![勾选文件夹,点击rename重命名](https://pic.bitday.top/i/2025/03/19/u78ido-2.png) 最常用的是点击右边的New-Python3,创建python文档。 @@ -92,13 +92,13 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple 点击左上角`Untitled`给新建的python文档文件重新命名。 -![重命名](D:/folder/study/md_files/output/5d4a6f08-21b7-485c-90a5-eb6bf5299331.png) +![重命名](https://pic.bitday.top/i/2025/03/19/u78ok4-2.png) 在代码框中输入第一行python代码,shift+回车运行 -![输入第一行python代码](D:/folder/study/md_files/output/cae6d7b7-9ee7-4077-a311-76da2fd8db9c.png) +![输入第一行python代码](https://pic.bitday.top/i/2025/03/19/u77p8q-2.png) -![运行第一行python代码](D:/folder/study/md_files/output/f8284ed4-0087-411b-a9d8-9d9bb0eed6e5.png) +![运行第一行python代码](https://pic.bitday.top/i/2025/03/19/u7887c-2.png) @@ -136,14 +136,14 @@ Jupyter notebook中,有两种单元格:代码单元格和Markdown单元格 >我是引用,我这行开头有一个灰色竖杠 [我是外部链接,点我上百度](www.baidu.com) -![我是图片](D:/folder/study/md_files/output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp) +![我是图片](https://pic.bitday.top/i/2025/03/19/u78z3p-2.webp) ``` -![编辑Markdown单元格](D:/folder/study/md_files/output/e62f773f-85fc-4c4c-977f-9f994c67f737.png) +![编辑Markdown单元格](https://pic.bitday.top/i/2025/03/19/u776mh-2.png) 然后按`shift`+`Enter`运行该单元格。 -![Markdown渲染效果](D:/folder/study/md_files/output/a39adc22-8e84-49ae-bbd5-b806108ffc7f.png) +![Markdown渲染效果](https://pic.bitday.top/i/2025/03/19/u77xx9-2.png) @@ -191,9 +191,9 @@ l 显示代码行号 h 查看所有快捷键 -![命令模式快捷键](D:/folder/study/md_files/output/ab02f501-fb10-4932-b03f-b2cdf320bea4.png) +![命令模式快捷键](https://pic.bitday.top/i/2025/03/19/u76kzy-2.png) -![编辑模式快捷键](D:/folder/study/md_files/output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png) +![编辑模式快捷键](https://pic.bitday.top/i/2025/03/19/u76bin-2.png) ## 在Markdown单元格中输入数学公式 @@ -209,17 +209,17 @@ $$x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$$ 初中数学内容 ``` -![在Markdown单元格中输入Latex公式](D:/folder/study/md_files/output/efd13588-53d8-4527-83d8-9f75e27bafd7.png) +![在Markdown单元格中输入Latex公式](https://pic.bitday.top/i/2025/03/19/u79kp5-2.png) 按`shift`+`Enter`渲染运行: -![渲染之后的Latex数学公式](D:/folder/study/md_files/output/5f05366c-cc10-463d-a97f-eb01a77bfffd.png) +![渲染之后的Latex数学公式](https://pic.bitday.top/i/2025/03/19/u77e5c-2.png) # 数据分析与可视化实战案例:学习时间与成绩的关系(线性回归) 先用excel把玩数据 -![excel中的线性回归](D:/folder/study/md_files/output/d1d7f851-33b5-4c61-9590-a617f45613a5.png) +![excel中的线性回归](https://pic.bitday.top/i/2025/03/19/u77ljl-2.png) 观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化 diff --git a/Java/Mysql数据库.md b/Java/Mysql数据库.md index 402132e..bd39831 100644 --- a/Java/Mysql数据库.md +++ b/Java/Mysql数据库.md @@ -134,7 +134,7 @@ create table 表名( eg: -![image-20220829143005524](D:/folder/study/md_files/output/3e52c263-b859-4f8f-97e1-27abe24325d0.png) +![image-20220829143005524](https://pic.bitday.top/i/2025/03/19/u7brwj-2.png) ``` create table tb_user ( @@ -472,7 +472,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名) ### 一对多 -![image-20221206230156403](D:/folder/study/md_files/output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png) +![image-20221206230156403](https://pic.bitday.top/i/2025/03/19/u7bf4a-2.png) **一对多关系实现:在数据库表中多的一方,添加外键字段,来关联'一'这方的主键。** @@ -511,7 +511,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名) - 内连接:相当于查询A、B交集部分数据 - ![image-20221207165446062](D:/folder/study/md_files/output/af615c13-2c7c-4b1c-b775-7ad0d2e141de.png) + ![image-20221207165446062](https://pic.bitday.top/i/2025/03/19/u7b5ng-2.png) 2. 外连接 @@ -582,7 +582,7 @@ from tb_emp AS emp right join tb_dept AS dept on emp.dept_id = dept.id; ``` -![image-20240306190305575](D:/folder/study/md_files/output/a3003189-9a5f-491f-8a62-9496d63befcd.png) +![image-20240306190305575](https://pic.bitday.top/i/2025/03/19/u7c5gf-2.png) ### 子查询 @@ -807,7 +807,7 @@ musql默认采用B+树来作索引 下面我们来看看B+Tree(多路平衡搜索树)结构中如何避免这个问题: -![image-20221208181315728](D:/folder/study/md_files/output/72f4a00e-1b0c-46e6-ba3c-3072ee3f8612.png) +![image-20221208181315728](https://pic.bitday.top/i/2025/03/19/u7bnxa-2.png) B+Tree结构: diff --git a/Java/Redis.md b/Java/Redis.md index d4cc9e6..04a5009 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 59d12ad..be6f051 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/study/md_files/output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png) +![image-20240729155102345](https://pic.bitday.top/i/2025/03/19/u64mge-2.png) 解决办法: shell path改为 cmd.exe 这样虚拟环境就默认设置为conda环境了 -![image-20240729161200801](D:/folder/study/md_files/output/2ee26009-7a9c-488f-9308-a2479d3fa162.png) +![image-20240729161200801](https://pic.bitday.top/i/2025/03/19/u63x6o-2.png) -![image-20240729161242191](D:/folder/study/md_files/output/0341f054-591e-42dd-b80a-17c188419e6e.png) +![image-20240729161242191](https://pic.bitday.top/i/2025/03/19/u643bi-2.png) @@ -114,7 +114,7 @@ pip freeze > requirements.txt 如果命令行cd到项目根目录,所用的也并不是conda环境!这里用的是conda的默认环境? -![image-20240729155148576](D:/folder/study/md_files/output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png) +![image-20240729155148576](https://pic.bitday.top/i/2025/03/19/u64ph0-2.png) @@ -128,7 +128,7 @@ pip freeze > requirements.txt 4.输入命令 -![image-20240729155310049](D:/folder/study/md_files/output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png) +![image-20240729155310049](https://pic.bitday.top/i/2025/03/19/u63pza-2.png) diff --git a/Java/git基本操作.md b/Java/git基本操作.md index 85ee70e..fbad1ba 100644 --- a/Java/git基本操作.md +++ b/Java/git基本操作.md @@ -29,7 +29,7 @@ git config --system --list :系统配置的 ## 核心原理 -![](D:/folder/study/md_files/output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png) +![](https://pic.bitday.top/i/2025/03/19/u6ap8d-2.png) index是暂存区 @@ -57,7 +57,7 @@ remote是远程仓库,通常是github/gitee码云 - git init 新建本地仓库,生成.git隐藏文件,点进去有head文件。 - git remote add origin url,可以绑定远程仓库 -![](D:/folder/study/md_files/output/5586d2db-19dc-43f4-8a80-31ccf233981c.png) +![](https://pic.bitday.top/i/2025/03/19/u6b609-2.png) - 继续输入git pull origin master(若你远程仓库为空,不需要这一步) - git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区 @@ -84,19 +84,19 @@ remote是远程仓库,通常是github/gitee码云 1. **配置Git** -![image-20240425104918549](D:/folder/study/md_files/output/fe302d2a-51ec-4823-bf8f-66de9ba46fe5.png) +![image-20240425104918549](https://pic.bitday.top/i/2025/03/19/u6adqm-2.png) 2. **关联自己的github** -![image-20240425104950049](D:/folder/study/md_files/output/c2a58de3-2f66-4db6-a6fb-82b47b16172e.png) +![image-20240425104950049](https://pic.bitday.top/i/2025/03/19/u69xzj-2.png) **对于任何安卓项目,前两步都是通用的!!!** 3. -![image-20240425105318414](D:/folder/study/md_files/output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png) +![image-20240425105318414](https://pic.bitday.top/i/2025/03/19/u69e7z-2.png) -![image-20240425105341246](D:/folder/study/md_files/output/3073bcd9-d022-483b-a082-e29e1291cc52.png) +![image-20240425105341246](https://pic.bitday.top/i/2025/03/19/u6a79u-2.png) 这里的Remote填远程仓库地址,eg: https://github.com/zhangww-web/JianShu.git @@ -106,7 +106,7 @@ remote是远程仓库,通常是github/gitee码云 点击顶部菜单栏的 `Git -> Manage Remotes`。 -![image-20250308102802964](D:/folder/study/md_files/output/d1a02a79-a801-4351-afa9-a9202cce82ff.png) +![image-20250308102802964](https://pic.bitday.top/i/2025/03/19/u69pse-2.png) @@ -171,7 +171,7 @@ git branch -d dev 删除dev分支 git branch -m dev cs :将dev分支修改名称为cs分支 -![](D:/folder/study/md_files/output/6d50acba-97d3-4ef1-87a2-da56c45b06ab.png) +![](https://pic.bitday.top/i/2025/03/19/u692lj-2.png) @@ -181,7 +181,7 @@ git branch -m dev cs :将dev分支修改名称为cs分支 此时查看你的代理服务器的端口,发现是7890 -image-20240802181935378 +image-20240802181935378 然后打开git bash,输入以下代码: @@ -359,7 +359,7 @@ git config --global credential.helper store //将凭据保存到磁盘上(明 git rm -r --cached 'dictory'/ ``` -![](D:/folder/study/md_files/output/8041f27f-a2a3-4a55-ad9b-2048b5ed8db6.png)在.gitignore文件进行添加 +![](https://pic.bitday.top/i/2025/03/19/u68fal-2.png)在.gitignore文件进行添加 **为什么`.gitignore`文件不放在`.git`文件夹中?** @@ -378,7 +378,7 @@ git rm -r --cached 'dictory'/ COVID-19-Detector is registered as a Git root, but no Git repositories were found there. -![image-20240729113527314](D:/folder/study/md_files/output/af77f789-280a-40ce-bc40-66db8ed53a39.png) +![image-20240729113527314](https://pic.bitday.top/i/2025/03/19/u68ka9-2.png) @@ -396,5 +396,5 @@ COVID-19-Detector is registered as a Git root, but no Git repositories were foun - 导航到仓库设置中的“Manage access”(管理访问)或“Collaborators”(协作者)部分。 - 添加协作者的GitHub用户名,并设置他们的访问级别。 -![image-20240524100231379](D:/folder/study/md_files/output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png) +![image-20240524100231379](https://pic.bitday.top/i/2025/03/19/u6ak14-2.png) diff --git a/Java/linux服务器.md b/Java/linux服务器.md index aa3d036..0c27d6e 100644 --- a/Java/linux服务器.md +++ b/Java/linux服务器.md @@ -10,7 +10,7 @@ DNS解析:可能需等待几分钟生效 -![](D:/folder/study/md_files/output/a9afa114-f04e-4fe5-ba22-be3eb6db869e.png) +![](https://pic.bitday.top/i/2025/03/19/u7b14x-2.png) 买的域名的r2studying.top 这里的HOSTNAME相当于二级域名,如npm.r2studying.top @@ -253,7 +253,7 @@ DNS解析:可能需等待几分钟生效 nano /etc/apt/sources.list #打开sources.list文件 ``` -![](D:/folder/study/md_files/output/4859b9eb-5707-45d0-b1fc-4265717cf491.png) +![](https://pic.bitday.top/i/2025/03/19/u7ankb-2.png) Ctrl+O:保存修改 ->弹出询问-> Y则保存,N则不保存,ctrl+c 取消操作。 @@ -631,7 +631,7 @@ proxies: 简便方法:windows上将订阅链接导入,自动解析成yaml配置文件,然后直接把该文件传到服务器上! -![image-20250309173756312](D:/folder/study/md_files/output/6a2bb9b5-ecb1-4aa0-80f0-3432bb07e243.png) +![image-20250309173756312](https://pic.bitday.top/i/2025/03/19/u79q0t-2.png) @@ -847,7 +847,7 @@ services: cd /data/easyimage/config/config.php ``` -![image-20250315101454031](D:/folder/study/md_files/output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png) +![image-20250315101454031](https://pic.bitday.top/i/2025/03/19/u7apqr-2.png) 这里添加上https @@ -855,7 +855,7 @@ cd /data/easyimage/config/config.php 网站域名 图片域名设置可以改变图片的url:IP或域名 -![image-20250306183642549](D:/folder/study/md_files/output/5e4c75cb-702c-424b-81cf-f1756812a5aa.png) +![image-20250306183642549](https://pic.bitday.top/i/2025/03/19/u7a1lv-2.png) @@ -868,7 +868,7 @@ cd /data/easyimage/config/config.php 2.插件设置,搜索web-uploader 1.1.1 (自定义web图床) 旧版有搜索不出来的情况!建议直接安装最新版! -3.配置如下,API地址从easyimage-设置-API设置中获取![image-20250306141151376](D:/folder/study/md_files/output/f3d20eb7-8021-4c71-b327-beeb7e3d5918.png) +3.配置如下,API地址从easyimage-设置-API设置中获取![image-20250306141151376](https://pic.bitday.top/i/2025/03/19/u79xiv-2.png) diff --git a/Java/test.md b/Java/test.md index 692668d..2d91fc3 100644 --- a/Java/test.md +++ b/Java/test.md @@ -4,7 +4,7 @@ int main(){ } ``` -# ![测试](D:/folder/study/md_files/output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png) +# ![测试](https://pic.bitday.top/i/2025/03/19/u7da13-2.png) # 一级标题:# xx diff --git a/Java/安卓开发.md b/Java/安卓开发.md index 0a22523..8daadeb 100644 --- a/Java/安卓开发.md +++ b/Java/安卓开发.md @@ -5,23 +5,23 @@ 最近想在我的书城中开发一下阅读器的功能,难度颇高,因此在github上找到了一个封装了阅读器功能的项目,仅需获得文件本地存储地址,调用其提供的函数即可进行阅读。 **但是**,github介绍的使用方法并不总是有效,比如我就经常无法正确添加依赖 -![image-20240503200121198](D:/folder/study/md_files/output/f0883425-2c4e-4bcc-a6c0-25bd072cc388.png) +![image-20240503200121198](https://pic.bitday.top/i/2025/03/19/u7dq7u-2.png) 因此,我将其项目代码拷贝到本地,手动集成。 -![image-20240503200221147](D:/folder/study/md_files/output/77642b2e-2901-4c5c-a5b8-2864fcc3ab4c.png) +![image-20240503200221147](https://pic.bitday.top/i/2025/03/19/u7djxz-2.png) 依据项目结构,可以发现app是主项目,hwtxtreaderlib是功能模块,根据是这张图: -![image-20240503200343665](D:/folder/study/md_files/output/4016b542-0162-4b87-b590-cb15e8377076.png) +![image-20240503200343665](https://pic.bitday.top/i/2025/03/19/u7dxvc-2.png) build.gradle(:app)中引入了hwtxtreaderlib的依赖,而app只是个demo测试模块,相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此,手动步骤如下: - 将hwtxtreaderlib复制到自己的项目文件夹中 - ![image-20240503200651488](D:/folder/study/md_files/output/cc409c48-a01a-480d-9c00-5692f0112184.png) + ![image-20240503200651488](https://pic.bitday.top/i/2025/03/19/u7eub5-2.png) - 在app的build.gradle中,添加依赖 @@ -37,11 +37,11 @@ implementation project(':hwtxtreaderlib') - syn now! 同步一下,然后android studio中项目结构变成如下图 -![image-20240503201012590](D:/folder/study/md_files/output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png) +![image-20240503201012590](https://pic.bitday.top/i/2025/03/19/u7en9c-2.png) - build没报错基本就稳了,然后就运行试试 -![image-20240503201211104](D:/folder/study/md_files/output/b03f7aaa-4fc9-47ca-8c9b-a2319e506f73.png) +![image-20240503201211104](https://pic.bitday.top/i/2025/03/19/u7eesw-2.png) 这里可能AndroidManifest.xml报错,需要查看原项目中app模块如何编写的,做些适当的修改!我这里卡了很久. @@ -49,4 +49,4 @@ implementation project(':hwtxtreaderlib') **非常重要!!!**有时候github项目会将项目的详细信息写在wiki中!!! -![image-20240503213919450](D:/folder/study/md_files/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png) \ No newline at end of file +![image-20240503213919450](https://pic.bitday.top/i/2025/03/19/u7e586-2.png) \ No newline at end of file diff --git a/Java/微服务.md b/Java/微服务.md index a87dc98..77e8686 100644 --- a/Java/微服务.md +++ b/Java/微服务.md @@ -145,9 +145,9 @@ mybatis-plus: `Wrapper`就是条件构造的抽象类,其下有很多默认实现,继承关系如图: -![image-20240813112049624](D:/folder/study/md_files/output/8a3fdc5e-e7ba-4c8f-897a-5ad5c33859e4.png) +![image-20240813112049624](https://pic.bitday.top/i/2025/03/19/u7fwe0-2.png) -![image-20240813134824946](D:/folder/study/md_files/output/956ffdba-8095-4281-b541-8013f6ed8395.png) +![image-20240813134824946](https://pic.bitday.top/i/2025/03/19/u7f24w-2.png) **QueryWrapper** @@ -360,17 +360,17 @@ int rows = userMapper.delete(queryWrapper); #### IService -![image-20240815092311650](D:/folder/study/md_files/output/5691be63-1063-429f-98e1-e012d9e36190.png) +![image-20240815092311650](https://pic.bitday.top/i/2025/03/19/u7g3qb-2.png) -![image-20240815092324887](D:/folder/study/md_files/output/2b562250-35a6-4965-aadb-de00f9702c26.png) +![image-20240815092324887](https://pic.bitday.top/i/2025/03/19/u7gmfr-2.png) -![image-20240815092338012](D:/folder/study/md_files/output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png) +![image-20240815092338012](https://pic.bitday.top/i/2025/03/19/u7frqa-2.png) -![image-20240815092352179](D:/folder/study/md_files/output/ad306344-6366-4bef-ba75-a01e995acb47.png) +![image-20240815092352179](https://pic.bitday.top/i/2025/03/19/u7gubw-2.png) -![image-20240815092420201](D:/folder/study/md_files/output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png) +![image-20240815092420201](https://pic.bitday.top/i/2025/03/19/u7gbph-2.png) -![image-20240815092604848](D:/folder/study/md_files/output/61e7f157-d9e3-488c-afdb-9ad7e7c4ac95.png) +![image-20240815092604848](https://pic.bitday.top/i/2025/03/19/u7f9pf-2.png) 由于`Service`中经常需要定义与业务有关的自定义方法,因此我们不能直接使用`IService`,而是自定义`Service`接口,然后继承`IService`以拓展方法。同时,让自定义的`Service实现类`继承`ServiceImpl`,这样就不用自己实现`IService`中的接口了。 diff --git a/Java/招标文件解析.md b/Java/招标文件解析.md index 9d60010..805fb54 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/study/md_files/output/d83e0c2d-16b7-426f-af5e-acc6fae72bd0.png) +![1](https://pic.bitday.top/i/2025/03/19/u7gwuk-2.png) .env存放一些密钥(大模型、textin等),它是gitignore忽略了,因此在服务器上git pull项目的时候,这个文件不会更新(因为密钥比较重要),需要手动维护服务器相应位置的.env。 @@ -28,7 +28,7 @@ git clone地址:http://47.98.59.178:3000/zy123/zbparse.git 1. 进入项目文件夹 -![1](D:/folder/study/md_files/output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png) +![1](https://pic.bitday.top/i/2025/03/19/u7rz9c-2.png) **注意:**需要确认.env是否存在在服务器,默认是隐藏的 输入cat .env @@ -54,7 +54,7 @@ requirements.txt一般无需变动,除非代码中使用了新的库,也要 **docker-compose:** -![1](D:/folder/study/md_files/output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png) +![1](https://pic.bitday.top/i/2025/03/19/u7r7e6-2.png) 本项目为**单服务项目**,只有flask_app(服务名) @@ -67,7 +67,7 @@ build context(`context: .`): **dockerfile:** -![1](D:/folder/study/md_files/output/f7ac1419-13a5-4120-b192-7bf635cbc09f.png) +![1](https://pic.bitday.top/i/2025/03/19/u7uvxt-2.png) COPY . .(在 Dockerfile 中): 这条指令会将构建上下文中的所有内容复制到镜像中的当前工作目录(这里是 `/flask_project`)。 @@ -138,9 +138,9 @@ docker image prune 2. .env环境配好 (一般不需要在电脑环境变量中额外配置了,但是要在Pycharm中**安装插件**,使得项目在**启动时**能将env中的环境变量**自动配置**到系统环境变量中!!!) 3. 点击下拉框,Edit configurations - ![1](D:/folder/study/md_files/output/e4fb54fb-9f59-4f68-8540-29105621b825.png) + ![1](https://pic.bitday.top/i/2025/03/19/u7trp1-2.png) -​ 设置run_serve.py为启动脚本![1](D:/folder/study/md_files/output/babb8e7e-bcca-48e1-894b-d77ba79c8aff.png) +​ 设置run_serve.py为启动脚本![1](https://pic.bitday.top/i/2025/03/19/u7viek-2.png) ​ 注意这里的working directory要设置到最外层文件夹,而不是flask_app!!! @@ -408,7 +408,7 @@ mem_after = memory_usage()[0] memory_usage()[0] 可以获取当前程序所占内存的**快照** -![1](D:/folder/study/md_files/output/e8db9532-1b1a-4fc9-86ea-3361ca161375.png) +![1](https://pic.bitday.top/i/2025/03/19/u7vqf9-2.png) 产生的数据都存到result变量-》内存中,这是正常的,因此my_function没有内存泄漏问题。 **但是** @@ -427,7 +427,7 @@ def extract_text_by_page(file_path): return "" ``` -![1](D:/folder/study/md_files/output/8c5b504e-2609-490e-b86a-465bc1fdf463.png) +![1](https://pic.bitday.top/i/2025/03/19/u7ukfk-2.png) 可以发现尽管我返回"",内存仍然没有释放!因为就是读取pdf这块发生了内存泄漏! @@ -465,7 +465,7 @@ for stat in stats[:10]: tracemalloc.stop() ``` -![1](D:/folder/study/md_files/output/200953d2-dc16-42ee-b829-02e02ce95c5c.png) +![1](https://pic.bitday.top/i/2025/03/19/u7vdu0-2.png) tracemalloc能更深入的分析,不仅是自己写的代码,**调用的库函数**产生的内存也能分析出来。在这个例子中就是PyPDF2中的各个函数占用了大部分内存。 @@ -566,7 +566,7 @@ def judge_zbfile_exec_sub(file_path): 但是存在一个问题:**第一次发送请求执行时间较慢!** -![1](D:/folder/study/md_files/output/31f24d30-27be-474c-869f-f76ca3fc1288.png) +![1](https://pic.bitday.top/i/2025/03/19/u7us5y-2.png) 可以发现实际执行只需7.7s,但是接口实际耗时10.23秒,主要是因**懒加载或按需初始化**:有些模块或资源在子进程启动时并不会马上加载,而是在子进程首次真正执行任务时才进行初始化。 @@ -597,7 +597,7 @@ threading.Thread(target=warmup_request, daemon=True).start() ## flask_app结构介绍 -1 +1 @@ -697,7 +697,7 @@ app.connection_limiters['upload'] = ConnectionLimiter(max_connections=100) 是公共函数存放的文件夹,llm下是各类大模型,读取文件下是docx pdf文件的读取以及文档清理clean_pdf,去页眉页脚页码 -![1](D:/folder/study/md_files/output/9982ad34-b736-4100-9ecb-8c5e19a1d43f.png) +![1](https://pic.bitday.top/i/2025/03/19/u7sxx7-2.png) general下的llm下的清除file_id.py 需要**每周运行至少一次**,防止file_id数量超出(我这边对每次请求结束都有file_id记录并清理,向应该还没加) @@ -725,7 +725,7 @@ post_processing中的**process_functions_in_parallel**提取 资格审查、技术偏离、 商务偏离、 所需提交的证明材料 -![1](D:/folder/study/md_files/output/3fc27036-4e60-4daf-9599-4de21458b9de.png) +![1](https://pic.bitday.top/i/2025/03/19/u7sqz1-2.png) 大解析upload用了post_processing完整版, @@ -755,9 +755,9 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 若开头没截准,就改begin_pattern,末尾没截准,就改end_pattern -![1](D:/folder/study/md_files/output/b7ba280f-014e-4337-924f-58b3cf4c2377.png) +![1](https://pic.bitday.top/i/2025/03/19/u7r56h-2.png) -![1](D:/folder/study/md_files/output/aebc0281-531f-4bc0-b048-22fe10c64015.png) +![1](https://pic.bitday.top/i/2025/03/19/u7hd6v-2.png) 另外:在*截取pdf货物标版*.py中,还有extract_pages_twice函数,即第一次没有切分到之后,会运行该函数,这边又有一套begin_pattern和end_pattern,即二次提取 @@ -765,7 +765,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall **如何测试?** -![1](D:/folder/study/md_files/output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png) +![1](https://pic.bitday.top/i/2025/03/19/u7vy07-2.png) 输入pdf_path,和你要切分的序号,selection=1代表切公告,依次类推,可以看切出来的效果如何。 @@ -778,7 +778,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 这里:如果段落中既被正则匹配,又被follow_up_keywords中的任意一个匹配,那么不会添加到temp中(即不会被大模型筛选),它会**直接添加**到最后的返回中! -![1](D:/folder/study/md_files/output/2dfd7f24-b06a-474d-b9b0-302388582be3.png) +![1](https://pic.bitday.top/i/2025/03/19/u7hwyg-2.png) @@ -796,7 +796,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 都是废弃文件代码,未在正式、测试环境中使用的,不用管 -![1](D:/folder/study/md_files/output/afca2091-945f-4b3e-8199-c23308c66f76.png) +![1](https://pic.bitday.top/i/2025/03/19/u7rphb-2.png) @@ -804,7 +804,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall 是接口以及主要实现部分,一一对应 -![1](D:/folder/study/md_files/output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png) +![1](https://pic.bitday.top/i/2025/03/19/u7v3r9-2.png) get_deviation对应偏离表数据解析main,获得偏离表数据 @@ -824,7 +824,7 @@ upload对应工程标解析和货物标解析,即大解析 utils是接口这块的公共功能函数。其中validate_and_setup_logger函数对不同的接口请求对应到不同的output文件夹,如upload->output1。后续增加接口也可直接在这里写映射关系。 -![1](D:/folder/study/md_files/output/f758c610-a7ad-4e92-8c65-fde5eebe8ae0.png) +![1](https://pic.bitday.top/i/2025/03/19/u7tjt1-2.png) 重点关注大解析:**upload.py**和**货物标解析main.py** @@ -838,7 +838,7 @@ utils是接口这块的公共功能函数。其中validate_and_setup_logger函 各个文件夹(output1 output2..)对应不同的接口请求 -![1](D:/folder/study/md_files/output/70538b35-0008-4b05-8256-11ff67bcf803.png) +![1](https://pic.bitday.top/i/2025/03/19/u7h4vo-2.png) @@ -850,7 +850,7 @@ testdir是平时写代码的测试的地方 它们都不影响正式和测试环境的解析 -![1](D:/folder/study/md_files/output/2477d571-5774-441a-90a4-5dd18a99ec5c.png) +![1](https://pic.bitday.top/i/2025/03/19/u7hpp5-2.png) @@ -858,7 +858,7 @@ testdir是平时写代码的测试的地方 是两个解析流程中不一样的地方(一样的都写在**general**中了) -![1](D:/folder/study/md_files/output/768eac5d-2e42-4ca9-ac99-0aef20507f7d.png) +![1](https://pic.bitday.top/i/2025/03/19/u7x9km-2.png) 主要是货物标额外解析了采购要求(提取采购需求main+技术参数要求提取+商务服务其他要求提取) @@ -868,7 +868,7 @@ testdir是平时写代码的测试的地方 ConnectionLimiter.py定义了接口超时时间->超时后断开与后端的连接 -![1](D:/folder/study/md_files/output/4400b6f4-474c-4441-840f-3084e870ac13.png) +![1](https://pic.bitday.top/i/2025/03/19/u7w6yz-2.png) logger_setup.py 为每个请求创建单独的log,每个log对应一个log.txt @@ -894,13 +894,13 @@ start_up.py是启动脚本,run_serve也是启动脚本,是对start_up.py的 2. 大解析中返回了技术评分,后端接收后不仅显示给前端,还会返给向,用于生成技术偏离表 3. 小解析时,get_deviation.py其实也可以返回技术评分,但是没有返回,因为没人和我对接,暂时注释了。 -![1](D:/folder/study/md_files/output/c8fa8277-68e9-48fa-aca4-6213b552ae4a.png) +![1](https://pic.bitday.top/i/2025/03/19/u7t9d7-2.png) 4.商务评议和技术评议偏离表,即评分细则的偏离表,暂时没做,但是**商务评分、技术评分**无论大解析还是小解析都解析了,稍微对该数据处理一下返回给后端就行。 -![1](D:/folder/study/md_files/output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png) +![1](https://pic.bitday.top/i/2025/03/19/u7rf1o-2.png) 这个是解析得来的结果,适合给前端展示,但是要生成商务技术评议偏离表的话,需要再调一次大模型,对该数据进行重新归纳,以字符串列表为佳。再传给后端。(未做) @@ -1212,22 +1212,22 @@ if __name__ == '__main__': ### 项目贡献 -![1](D:/folder/study/md_files/output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png) +![1](https://pic.bitday.top/i/2025/03/19/u7i84d-2.png) -![1](D:/folder/study/md_files/output/d42424cf-7291-40ac-9eb3-ff12e5a740ed.png) +![1](https://pic.bitday.top/i/2025/03/19/u7s5x0-2.png) -![1](D:/folder/study/md_files/output/c713aacc-88b4-4f72-a45b-ede8854acb2b.png) +![1](https://pic.bitday.top/i/2025/03/19/u7wpu4-2.png) -![1](D:/folder/study/md_files/output/d7013a0e-31d6-4ee7-9fad-2a73298967e7.png) +![1](https://pic.bitday.top/i/2025/03/19/u7tzvp-2.png) ### 效果图 -![1](D:/folder/study/md_files/output/f37d901f-2715-4937-b68f-6e753f922323.png) +![1](https://pic.bitday.top/i/2025/03/19/u7wvd4-2.png) -![](D:/folder/study/md_files/output/a0cc86e9-e851-444a-8e6b-c533f3584590.gif) +![](https://pic.bitday.top/i/2025/03/19/u7u7qh-2.gif) -![1](D:/folder/study/md_files/output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png) +![1](https://pic.bitday.top/i/2025/03/19/u7smek-2.png) -![1](D:/folder/study/md_files/output/aa17e754-63e0-4d98-b1d0-6db511b28f5a.png) +![1](https://pic.bitday.top/i/2025/03/19/u7tfw3-2.png) -![1](D:/folder/study/md_files/output/b529e498-4374-4265-9242-d1fe773712dc.png) +![1](https://pic.bitday.top/i/2025/03/19/u7x3g6-2.png) diff --git a/Java/苍穹外卖.md b/Java/苍穹外卖.md index bc4ea10..587f388 100644 --- a/Java/苍穹外卖.md +++ b/Java/苍穹外卖.md @@ -4,7 +4,7 @@ ### 后端项目结构 -![image-20240327104750952](D:/folder/study/md_files/output/64a333f0-50a5-435c-98b4-bf8d77ed8e56.png) +![image-20240327104750952](https://pic.bitday.top/i/2025/03/19/u7xl9k-2.png) 分析sky-pojo模块的每个包的作用: @@ -170,7 +170,7 @@ public class EmployeeLoginDTO implements Serializable { } ``` -![image-20240327170247852](D:/folder/study/md_files/output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png) +![image-20240327170247852](https://pic.bitday.top/i/2025/03/19/u7ybj9-2.png) ## 开发 @@ -288,7 +288,7 @@ public class BaseContext { 在属性上加上注解,对日期进行格式化 -image-20221112103501581 +image-20221112103501581 但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。 @@ -771,7 +771,7 @@ public static String doGet(String url,Map paramMap){ ## 微信小程序 -![image-20221204211800753](D:/folder/study/md_files/output/daf8d140-8ee9-4cad-80e7-b9026e9d5309.png) +![image-20221204211800753](https://pic.bitday.top/i/2025/03/19/u7y804-2.png) @@ -779,7 +779,7 @@ public static String doGet(String url,Map paramMap){ 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 -![image-20221208180228667](D:/folder/study/md_files/output/79c61f5e-b745-40f6-b24b-c18fe9244aa8.png) +![image-20221208180228667](https://pic.bitday.top/i/2025/03/19/u80ct0-2.png) @@ -787,7 +787,7 @@ public static String doGet(String url,Map paramMap){ 通过Redis来缓存菜品数据,减少数据库查询操作。 -![image-20221208180818572](D:/folder/study/md_files/output/8b76c934-d652-46de-9230-45df704578f8.png) +![image-20221208180818572](https://pic.bitday.top/i/2025/03/19/u7yytn-2.png) @@ -952,19 +952,19 @@ Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要 https://pay.weixin.qq.com/static/product/product_index.shtml -![image-20221214223910840](D:/folder/study/md_files/output/c30d3b6c-c2c3-45ef-b016-5c9a9160973d.png) +![image-20221214223910840](https://pic.bitday.top/i/2025/03/19/u7z7u7-2.png) **5.商户系统调用微信后台:** -![image-20221214224409174](D:/folder/study/md_files/output/f50cc1f5-795c-4c58-b09a-b494ef2c0d50.png) +![image-20221214224409174](https://pic.bitday.top/i/2025/03/19/u7zxts-2.png) **10.用户调起微信支付** -![image-20221214224551220](D:/folder/study/md_files/output/5783f31c-9512-4e5b-9835-0347d288ced4.png) +![image-20221214224551220](https://pic.bitday.top/i/2025/03/19/u7zlem-2.png) @@ -984,7 +984,7 @@ https://pay.weixin.qq.com/static/product/product_index.shtml 复制authtoken: -![image-20240806133753849](D:/folder/study/md_files/output/68cf01a4-35ef-4e02-b15f-5df15bf01c71.png) +![image-20240806133753849](https://pic.bitday.top/i/2025/03/19/u7yuuq-2.png) 执行命令: @@ -1002,7 +1002,7 @@ cpolar.exe authtoken ZmIwMmQzZDYtZDE2ZS00ZGVjLWE2MTUtOGQ0YTdhOWI2M2Q1 cpolar.exe http 8080 ``` -![image-20240806135141280](D:/folder/study/md_files/output/ae31e5bc-ab30-433f-aca9-439ab9df853b.png) +![image-20240806135141280](https://pic.bitday.top/i/2025/03/19/u7xscv-2.png) 这里的 https://52ac2ecb.r18.cpolar.top 就是与http://localhost:8080对应的临时域名。 @@ -1024,7 +1024,7 @@ cpolar.exe http 8080 每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选) -![image-20240807141614724](D:/folder/study/md_files/output/5afdb58a-808b-469f-afbc-bd68f46b859a.png) +![image-20240807141614724](https://pic.bitday.top/i/2025/03/19/u7yh97-2.png) cron表达式在线生成器:https://cron.qqe2.com/ @@ -1036,7 +1036,7 @@ cron表达式在线生成器:https://cron.qqe2.com/ 1). 导入maven坐标 spring-context(已存在) -image-20221218193251182 +image-20221218193251182 2). 启动类添加注解 @EnableScheduling 开启任务调度 diff --git a/科研/PID控制器.md b/科研/PID控制器.md index 51a9eda..829448e 100644 --- a/科研/PID控制器.md +++ b/科研/PID控制器.md @@ -6,7 +6,7 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 **开环控制系统** -![image-20240324175333458](D:/folder/study/md_files/output/42e0c8d0-a392-4302-9410-4d302661d9df.png) +![image-20240324175333458](https://pic.bitday.top/i/2025/03/19/u81bty-2.png) 前馈控制系统尝试预先计算扰动对系统的影响,并在扰动影响系统输出之前调整输入以抵消它。 @@ -16,17 +16,17 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 控制器接收误差信号。该系统通过反馈回路来自动调节其输出 -![image-20240324175424762](D:/folder/study/md_files/output/ec703e24-5fc9-4370-878d-a894da134165.png) +![image-20240324175424762](https://pic.bitday.top/i/2025/03/19/u80vqi-2.png) -![image-20240324175627295](D:/folder/study/md_files/output/445c6b0d-846e-404b-8e65-1d026260f0fa.png) +![image-20240324175627295](https://pic.bitday.top/i/2025/03/19/u81xpc-2.png) **复合控制系统** -![image-20240324175704820](D:/folder/study/md_files/output/e48f470e-c4d0-4c87-aa9b-04c120b6e9ef.png) +![image-20240324175704820](https://pic.bitday.top/i/2025/03/19/u829qe-2.png) ## 连续与离散信号 -![image-20240324180342885](D:/folder/study/md_files/output/b758ad19-633a-4bbf-b6a8-8b1d79f5bf39.png) +![image-20240324180342885](https://pic.bitday.top/i/2025/03/19/u81rj3-2.png) 从连续信号到离散信号的转换过程涉及以下步骤: @@ -37,25 +37,25 @@ PID控制器是一种常用的反馈控制系统,广泛应用于工业控制 ## PID公式 -![image-20240324181124423](D:/folder/study/md_files/output/b5922a23-f401-43fb-9bbd-57d900af53b9.png) +![image-20240324181124423](https://pic.bitday.top/i/2025/03/19/u82vaz-2.png) 控制系统中的传感器会**连续**监测被控制对象的状态(例如,温度、压力、位置等),而PID控制器通过在固定的**采样间隔**收集输入信号,将其转换为**离散信号**,计算控制动作,然后输出到控制对象。离散PID控制的优势在于其灵活性和适应性,它可以轻松地与软件算法集成。 ## 直观例子 -![image-20240324182805939](D:/folder/study/md_files/output/5c4ede03-3166-45ab-ae21-16e9aa022780.png) +![image-20240324182805939](https://pic.bitday.top/i/2025/03/19/u82f7p-2.png) -![image-20240324184041843](D:/folder/study/md_files/output/96d3e467-5896-4248-85bb-e768dcb9c90a.png) +![image-20240324184041843](https://pic.bitday.top/i/2025/03/19/u80pbo-2.png) **仅使用比例(P)控制无法消除稳态误差。**稳态误差是指当系统达到平衡状态时,控制系统的实际输出与期望输出之间的差异。 原因:当系统接近其期望点时,误差减小,进而控制器输出也减小。如果控制器输出减小到无法克服系统内部阻力(如摩擦力)或外部扰动的程度时,系统就无法进一步接近设定点,从而留下稳态误差。 -![image-20240324184057164](D:/folder/study/md_files/output/e73b6ee4-de4e-4679-a704-530f57c47a4b.png) +![image-20240324184057164](https://pic.bitday.top/i/2025/03/19/u81lr6-2.png) 为了解决稳态误差问题,通常会在P控制基础上加入积分(I)控制。积分控制能够累积误差,即使是很小的误差,也会随时间积累,最终产生足够的控制作用以调整系统输出,直到误差为零。 -![image-20240324184110766](D:/folder/study/md_files/output/0a7f2195-5206-41f4-a1b9-919899b247fa.png) +![image-20240324184110766](https://pic.bitday.top/i/2025/03/19/u814hg-2.png) 微分控制在PID控制器中的作用主要是提高系统的瞬态响应和稳定性。 $$ @@ -67,7 +67,7 @@ $$ ## 相关控制知识 -![image-20240325101541488](D:/folder/study/md_files/output/6fad3462-9834-4045-b7f9-c3f10be58ef5.png) +![image-20240325101541488](https://pic.bitday.top/i/2025/03/19/u835sv-2.png) 当系统启动时或者遇到大的扰动,会产生大的初始误差。若系统调整缓慢,积分项会在达到目标状态之前累积很大的值。这可导致控制器输出超出了实际的执行器(比如电机、阀门等)可以处理的范围。当这种情况发生时,即使误差减少,由于积分项累积的值太大,控制器的输出可能仍然处于饱和状态。 diff --git a/科研/matlab.md b/科研/matlab.md index 749fe1d..4a8077b 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/study/md_files/output/09747b1d-74f7-4c9d-818d-576680a30a96.png) +![](https://pic.bitday.top/i/2025/03/19/u80led-2.png) #### 元胞数组 diff --git a/科研/卡尔曼滤波.md b/科研/卡尔曼滤波.md index 4fea487..4db5c95 100644 --- a/科研/卡尔曼滤波.md +++ b/科研/卡尔曼滤波.md @@ -11,11 +11,11 @@ ## 引入 -![image-20240311130512387](D:/folder/study/md_files/output/a1d84a07-c824-4bc2-848e-29a7e3bc38bf.png) +![image-20240311130512387](https://pic.bitday.top/i/2025/03/19/u83obb-2.png) -![image-20240311130359589](D:/folder/study/md_files/output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png) +![image-20240311130359589](https://pic.bitday.top/i/2025/03/19/u83gzm-2.png) -![image-20240311130828892](D:/folder/study/md_files/output/72d00f1b-9830-49db-8a81-855226f0978f.png) +![image-20240311130828892](https://pic.bitday.top/i/2025/03/19/u838h8-2.png) ## 公式 diff --git a/科研/图神经网络.md b/科研/图神经网络.md index c1389eb..6df6c33 100644 --- a/科研/图神经网络.md +++ b/科研/图神经网络.md @@ -12,7 +12,7 @@ 把图的邻接矩阵和节点特征“直接拼接”成固定维度的输入,然后将其送入一个深度神经网络(全连接层)进行学习。 -![image-20250316142412685](D:/folder/study/md_files/output/554d273e-c4e3-4ac2-8573-01debad92434.png) +![image-20250316142412685](https://pic.bitday.top/i/2025/03/19/u8cfvq-2.png) 这种做法面临重大问题,导致其**并不可行**: @@ -65,9 +65,9 @@ -![image-20250316152729679](D:/folder/study/md_files/output/ec45b68d-2da4-4ea3-b0d4-8b7bad443935.png) +![image-20250316152729679](https://pic.bitday.top/i/2025/03/19/u8d0gg-2.png) -![image-20250316152836156](D:/folder/study/md_files/output/f6e59abc-2373-47d4-8691-36c2e0b0f3ef.png) +![image-20250316152836156](https://pic.bitday.top/i/2025/03/19/u8cr12-2.png) diff --git a/科研/数学基础.md b/科研/数学基础.md index 794d306..79b9dc0 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/study/md_files/output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png) +![image-20240506121834075](https://pic.bitday.top/i/2025/03/19/u8dlfd-2.png) @@ -426,7 +426,7 @@ $$ **协方差** -![image-20240310120438207](D:/folder/study/md_files/output/5c73b93f-e819-465b-bce5-0f029d556626.png) +![image-20240310120438207](https://pic.bitday.top/i/2025/03/19/u8f87w-2.png) $$ \sum {p}_{i}({x}_{i}-{\mu }_{\mathrm{X}})({\mathcal{y}}_{i}-{\mu }_{Y}) \\ Cov\begin{pmatrix}X,Y @@ -445,13 +445,13 @@ $$ **X Y表示随机变量** -![image-20240315100802791](D:/folder/study/md_files/output/d6c79cc8-2dc0-48a0-92bb-9035f83c1005.png) +![image-20240315100802791](https://pic.bitday.top/i/2025/03/19/u8ff1k-2.png) **协方差矩阵** 协方差矩阵计算了不同维度之间的协方差,它是一个对称矩阵 -![image-20240310202835535](D:/folder/study/md_files/output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png) +![image-20240310202835535](https://pic.bitday.top/i/2025/03/19/u8eawl-2.png) **性质:** @@ -461,7 +461,7 @@ $$ $$ **推导:** -![400000](D:/folder/study/md_files/output/6428ebe0-cf2a-4cdb-9405-a1476954210d.png) +![400000](https://pic.bitday.top/i/2025/03/19/u8etaq-2.png) ## 高斯分布 @@ -471,7 +471,7 @@ $$ \end{pmatrix} $$ -![image-20240310103741300](D:/folder/study/md_files/output/076407cc-070d-437d-93f9-5c50629ac058.png) +![image-20240310103741300](https://pic.bitday.top/i/2025/03/19/u8d6vh-2.png) - x 在 μ-σ 和 μ+σ 之间的样本数量占到整个样本数量的 68.2%; - x 在 μ-2σ 和 μ+2σ 之间的样本数量占到整个样本数量的 95.4%; @@ -483,11 +483,11 @@ $$ 我们通常会尝试最小化方差,以尽可能减小状态估计的不确定性,从而获得更可靠和准确的估计结果 -![image-20240311132453071](D:/folder/study/md_files/output/97fdb850-6a72-4ca3-98ab-fa1d1d978ea5.png) +![image-20240311132453071](https://pic.bitday.top/i/2025/03/19/u8dbq1-2.png) ## 拉普拉斯变换 -![image-20240413112801149](D:/folder/study/md_files/output/b7c47c5c-cf5b-4c16-a6cf-2c0ec7842f1f.png) +![image-20240413112801149](https://pic.bitday.top/i/2025/03/19/u8f2b5-2.png) ## 矩阵运算 @@ -588,7 +588,7 @@ $$ **全连接神经网络** -![image-20250316145729703](D:/folder/study/md_files/output/00e2004b-8cd5-4658-9742-61475d13703b.png) +![image-20250316145729703](https://pic.bitday.top/i/2025/03/19/u8fmco-2.png) 其中: @@ -1007,9 +1007,9 @@ $$ ## 幂迭代 -![image-20240428174019083](D:/folder/study/md_files/output/33831492-711f-44d2-a637-332aae872fd8.png) +![image-20240428174019083](https://pic.bitday.top/i/2025/03/19/u8ecqs-2.png) -![image-20240428173732285](D:/folder/study/md_files/output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png) +![image-20240428173732285](https://pic.bitday.top/i/2025/03/19/u8ekvp-2.png) 原理:每一次迭代都相当于将当前向量乘以 $A$ 后再归一化。由于矩阵 $A$ 作用下,初始向量中 $v_1$ 分量对应的系数**会按 $\lambda_1$ 的 $k$ 次幂**增长,而其他特征向量分量增长较慢(因为它们对应的特征值模较小),故随着迭代次数的增加,向量逐渐趋向于 $v_1$ 的方向。 @@ -1160,7 +1160,7 @@ $$ ### **平均拉普拉斯矩阵:** -![image-20240428173204296](D:/folder/study/md_files/output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png) +![image-20240428173204296](https://pic.bitday.top/i/2025/03/19/u8dukj-2.png) ### **归一化拉普拉斯矩阵** diff --git a/科研/李雅普诺夫稳定性.md b/科研/李雅普诺夫稳定性.md index d5ad85d..26386a0 100644 --- a/科研/李雅普诺夫稳定性.md +++ b/科研/李雅普诺夫稳定性.md @@ -8,7 +8,7 @@ 雅可比矩阵(Jacobian matrix)是一个重要的数学概念,它在向量值函数的微分方面起着关键作用。雅可比矩阵描述了一个向量值函数的局部线性近似。 -![image-20240413104858542](D:/folder/study/md_files/output/1b624652-9519-4637-988b-d6c84fd08923.png) +![image-20240413104858542](https://pic.bitday.top/i/2025/03/19/u8jm0n-2.png) 理解:从n维实向量空间到m维实向量空间的函数f,假设输入为2维,用x,y表示,即二维平面上的一个点;输出为3维,每个点的位置由坐标f1(x,y),f2(x,y),f3(x,y)表示。 @@ -16,7 +16,7 @@ **求解雅各比矩阵:** -![image-20240413105515972](D:/folder/study/md_files/output/5c0b315f-f55e-446e-900f-0eba454115d7.png) +![image-20240413105515972](https://pic.bitday.top/i/2025/03/19/u8h7eb-2.png) @@ -24,23 +24,23 @@ **状态空间** -![image-20240413122729169](D:/folder/study/md_files/output/9124a2d4-d97c-4548-8019-d3cb6533b052.png) +![image-20240413122729169](https://pic.bitday.top/i/2025/03/19/u8fycf-2.png) **特征值、特征向量的几何意义** -![image-20240413162816588](D:/folder/study/md_files/output/c9fa2bbf-c3f4-48ef-9f9b-0bcea42c76ef.png) +![image-20240413162816588](https://pic.bitday.top/i/2025/03/19/u8hmgh-2.png) 矩阵A表示某线性变换 -![image-20240413163625587](D:/folder/study/md_files/output/fa4cacdc-5908-42dc-a1c2-a1126d32caac.png) +![image-20240413163625587](https://pic.bitday.top/i/2025/03/19/u8i8s1-2.png) -image-20240413165536752 +image-20240413165536752 -image-20240413165512450 +image-20240413165512450 为结论 @@ -48,9 +48,9 @@ ## 稳定性的定义 -![微信图片_20240413101222](D:/folder/study/md_files/output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png) +![微信图片_20240413101222](https://pic.bitday.top/i/2025/03/19/u8m4zk-2.png) -![微信图片_20240413101229](D:/folder/study/md_files/output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png) +![微信图片_20240413101229](https://pic.bitday.top/i/2025/03/19/u8lkg7-2.png) @@ -58,9 +58,9 @@ 通过分析线性系统的系数矩阵的特征值来判断系统的稳定性 -![微信图片_20240413101333](D:/folder/study/md_files/output/929d5dc9-9696-4fa9-8b19-e07d3c1e6a75.png) +![微信图片_20240413101333](https://pic.bitday.top/i/2025/03/19/u8gyz3-2.png) -![image-20240413110954014](D:/folder/study/md_files/output/c0bbc430-1b2d-4551-9c73-54c1c9c1e04c.png) +![image-20240413110954014](https://pic.bitday.top/i/2025/03/19/u8gf0q-2.png) **雅各比矩阵**使我们能够将非线性系统在平衡点附近的行为**近似为线性系统**。通过这种局部线性化,我们可以应用线性系统理论来研究非线性系统的稳定性。 @@ -72,7 +72,7 @@ **why特征值???** -![微信图片_20240413162152](D:/folder/study/md_files/output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg) +![微信图片_20240413162152](https://pic.bitday.top/i/2025/03/19/u8g41q-2.jpg) 可以以对角矩阵为例,特征值为对角线上元素,设平衡点x1=0,x2=0; @@ -83,23 +83,23 @@ eg: -![微信图片_20240413102132](D:/folder/study/md_files/output/097427a1-a52e-40fe-ac37-b49f50fcd354.png) +![微信图片_20240413102132](https://pic.bitday.top/i/2025/03/19/u8jpf2-2.png) ## 希尔维斯特判据 -![微信图片_20240413101523](D:/folder/study/md_files/output/70d1d9a8-c511-4270-9980-5fb36221bd62.png) +![微信图片_20240413101523](https://pic.bitday.top/i/2025/03/19/u8kfe8-2.png) ## 李雅普诺夫第二法(直接法) 关键是构造一个李雅普诺夫函数V(x) -![微信图片_20240413101545](D:/folder/study/md_files/output/ecf5728c-a362-4ee8-a271-ece4b380824d.png) +![微信图片_20240413101545](https://pic.bitday.top/i/2025/03/19/u8iyew-2.png) -eg:![微信图片_20240413101643](D:/folder/study/md_files/output/e3f45255-9c0a-4578-9319-d51f899b62d0.png) +eg:![微信图片_20240413101643](https://pic.bitday.top/i/2025/03/19/u8gv30-2.png) @@ -115,13 +115,13 @@ $$ A为系统的状态矩阵,应用**李雅普诺夫方程**可构造李雅普诺夫函数。 -![微信图片_20240413101732](D:/folder/study/md_files/output/cf44e196-ad1c-46df-b080-ef70b596131f.png) +![微信图片_20240413101732](https://pic.bitday.top/i/2025/03/19/u8hxva-2.png) eg: -![微信图片_20240413101758](D:/folder/study/md_files/output/d377c1ab-bb8b-4b17-80f4-d2b1f8f618ca.png) +![微信图片_20240413101758](https://pic.bitday.top/i/2025/03/19/u8hii5-2.png) @@ -133,13 +133,13 @@ $$ **克拉索夫斯基算法** -![微信图片_20240413101854](D:/folder/study/md_files/output/45997e98-63aa-4816-b4d3-d0c778c75065.png) +![微信图片_20240413101854](https://pic.bitday.top/i/2025/03/19/u8l2ip-2.png) eg: -![微信图片_20240413101950](D:/folder/study/md_files/output/2ef21955-235c-4ba9-a1f3-4d302b239204.png) +![微信图片_20240413101950](https://pic.bitday.top/i/2025/03/19/u8ifh3-2.png) -![微信图片_20240413101959](D:/folder/study/md_files/output/904e1104-ee26-4d4f-92d8-65da5edbc3a1.png) +![微信图片_20240413101959](https://pic.bitday.top/i/2025/03/19/u8ja27-2.png)