This commit is contained in:
zhangsan 2025-03-19 18:16:24 +08:00
parent 64cdd008d1
commit f815ac24ac
264 changed files with 640 additions and 392 deletions

View File

@ -20,7 +20,7 @@ Docker为了解决依赖的兼容问题的采用了两个手段
- 将每个应用放到一个隔离**容器**去运行,避免互相干扰
<img src="D:/folder/test/output/af6583c2-265f-46e1-908d-b1b01dd25f97.png" alt="image-20210731142219735" style="zoom: 67%;" />
<img src="D:/folder/study/md_files/output/bcd2517d-2b7e-48bb-85cd-6bc95a4a456a.png" alt="image-20210731142219735" style="zoom: 67%;" />
这样打包好的应用包中既包含应用本身也保护应用所需要的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)
部署:

View File

@ -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 @@ DOMDocument 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操作让数据展示到视图的代码开发变得更加的简单。

View File

@ -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依赖BB依赖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依赖BB依赖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)
\<select>标签就是用于编写select查询语句的。
@ -1193,11 +1193,11 @@ xml:
传统员工分页查询分析:
![image-20221215153413290](D:/folder/test/output/676d3cca-2740-4246-95ca-f221bd7052d8.png)
![image-20221215153413290](D:/folder/study/md_files/output/865e43e3-fc56-4af9-b5d1-a6541cd7e0ba.png)
**采用分页插件PageHelper**
![image-20221215170038833](D:/folder/test/output/10c5184c-b74c-45b3-89c8-fa7aa6a25e4a.png)
![image-20221215170038833](D:/folder/study/md_files/output/6b0b7237-0318-4858-a126-c1c1e3536d23.png)
**在执行empMapper.list()方法时就是执行select * from emp 语句,怎么能够实现分页操作呢?**
@ -1282,7 +1282,7 @@ public class EmpController {
思路分析:
![image-20221215180528415](D:/folder/test/output/c4504af4-0542-45d8-a7bb-a278e770fb36.png)
![image-20221215180528415](D:/folder/study/md_files/output/b773b722-17eb-4ab7-9144-4f75bdc17ecc.png)
```
<select id="pageQuery" resultType="com.sky.entity.Employee">
@ -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)

View File

@ -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中如何快速生成单元测试
选中类名,右键:
<img src="D:/folder/test/output/381566f2-a318-4e55-b848-fe8f5d4a25b5.png" alt="image-20240815093428359" style="zoom:80%;" />
<img src="D:/folder/study/md_files/output/1a75be61-2a80-4389-bb41-177a84e301c8.png" alt="image-20240815093428359" style="zoom:80%;" />

View File

@ -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)
观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化

View File

@ -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结构

View File

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

View File

@ -99,14 +99,14 @@ pip freeze > requirements.txt
如果你的pycharm中使用conda环境那么你在pycharm的终端中所用的可能不是conda环境
![image-20240729155102345](D:/folder/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)

View File

@ -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
<img src="D:/folder/test/output/ccc6ae38-8a95-4d01-93f1-ddd6330ad68c.png" alt="image-20240802181935378" style="zoom:67%;" />
<img src="D:/folder/study/md_files/output/dc0f5ec4-a20d-4f2b-be5f-301d6d18bc89.png" alt="image-20240802181935378" style="zoom:67%;" />
然后打开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)

View File

@ -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
网站域名 图片域名设置可以改变图片的urlIP或域名
![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文件自动发布**

View File

@ -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

View File

@ -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)
![image-20240503213919450](D:/folder/study/md_files/output/c8fe3375-7e62-4798-b335-1011b84c4fc8.png)

View File

@ -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`中的接口了。

View File

@ -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结构介绍
<img src="D:/folder/test/output/0ea4dbb3-3b0d-41e0-8f69-630112cbb439.png" alt="1" style="zoom:67%;" />
<img src="D:/folder/study/md_files/output/c58b6629-3854-4fc4-b5ca-9cf1ab245cee.png" alt="1" style="zoom:67%;" />
@ -697,7 +697,7 @@ app.connection_limiters['upload'] = ConnectionLimiter(max_connections=100)
是公共函数存放的文件夹llm下是各类大模型读取文件下是docx pdf文件的读取以及文档清理clean_pdf去页眉页脚页码
![1](D:/folder/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)

View File

@ -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 {
在属性上加上注解,对日期进行格式化
<img src="D:/folder/test/output/bdb8d324-fd1f-42b3-9ebd-b55e0c7ac2ef.png" alt="image-20221112103501581" style="zoom:67%;" />
<img src="D:/folder/study/md_files/output/139ea234-029d-4e2e-894c-2b9e66781859.png" alt="image-20221112103501581" style="zoom:67%;" />
但这种方式,需要在每个时间属性上都要加上该注解,使用较麻烦,不能全局处理。
@ -771,7 +771,7 @@ public static String doGet(String url,Map<String,String> paramMap){
## 微信小程序
![image-20221204211800753](D:/folder/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<String,String> 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<String,String> 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已存在
<img src="D:/folder/test/output/affb94c9-f980-4518-b08d-4bd02a2f209d.png" alt="image-20221218193251182" style="zoom:50%;" />
<img src="D:/folder/study/md_files/output/f56c1c08-857e-4450-b1c2-4397398a1214.png" alt="image-20221218193251182" style="zoom:50%;" />
2). 启动类添加注解 @EnableScheduling 开启任务调度

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 597 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Some files were not shown because too many files have changed in this diff Show More