3
@ -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架构的程序,由两部分组成:
|
||||
|
||||
如图:
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
#### 镜像操作
|
||||
|
||||

|
||||

|
||||
|
||||
1. docker push,将本地镜像上传到远程仓库(例如 Docker Hub)
|
||||
|
||||
@ -102,7 +102,7 @@ docker build -t yourusername/myimage:latest .
|
||||
|
||||
#### 容器操作
|
||||
|
||||

|
||||

|
||||
|
||||
1. docker run 创建并运行一个新容器
|
||||
|
||||
@ -176,7 +176,7 @@ docker ps -a #查看所有容器,包括已经停止或启动失败的容器
|
||||
|
||||
**数据卷(volume)**是一个虚拟目录,指向宿主机文件系统中的某个目录。
|
||||
|
||||

|
||||

|
||||
|
||||
一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。
|
||||
|
||||
@ -507,7 +507,7 @@ docker info
|
||||
|
||||
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
|
||||
|
||||
而描述上述信息的文件就是Dockerfile文件 。
|
||||
而描述上述信息的文件就是Dockerfile文件 。
|
||||
|
||||
`EXPOSE 8090` 是一个声明性的指令,`EXPOSE` 本身不会进行端口映射
|
||||
|
||||
@ -672,7 +672,7 @@ docker push yourusername/zbparse #推送镜像到 Docker Hub
|
||||
|
||||
docker tag zbparse 646228430smile/zbparse:latest 这里的646228430smile是用户名,保持不变
|
||||
|
||||

|
||||

|
||||
|
||||
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文件,而且每个微服务都准备了一个独立的目录:
|
||||
|
||||

|
||||

|
||||
|
||||
内容如下:
|
||||
|
||||
@ -1172,11 +1194,11 @@ services:
|
||||
|
||||
查看mysql目录,可以看到其中已经准备好了cloud_order、cloud_user表:
|
||||
|
||||

|
||||

|
||||
|
||||
查看微服务目录,可以看到都包含Dockerfile文件:
|
||||
|
||||

|
||||

|
||||
|
||||
内容如下:
|
||||
|
||||
@ -1231,7 +1253,7 @@ spring:
|
||||
|
||||
打包后:
|
||||
|
||||

|
||||

|
||||
|
||||
#### 拷贝jar包到部署目录
|
||||
|
||||
@ -1239,15 +1261,15 @@ spring:
|
||||
|
||||
user-service:
|
||||
|
||||

|
||||

|
||||
|
||||
order-service:
|
||||
|
||||

|
||||

|
||||
|
||||
gateway:
|
||||
|
||||

|
||||

|
||||
|
||||
#### 部署
|
||||
|
||||
@ -1255,7 +1277,7 @@ gateway:
|
||||
|
||||
上传到任意目录:
|
||||
|
||||

|
||||

|
||||
|
||||
部署:
|
||||
|
||||
|
@ -2,15 +2,15 @@
|
||||
|
||||
## JavaWeb学习路线
|
||||
|
||||

|
||||

|
||||
|
||||
## 前后端分离开发
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
1. 需求分析:首先我们需要阅读需求文档,分析需求,理解需求。
|
||||
2. 接口定义:查询接口文档中关于需求的接口的定义,包括地址,参数,响应数据类型等等
|
||||
@ -146,9 +146,9 @@
|
||||
|
||||
盒子模型,盒子部分指的是border及以内的部分,不包括margin
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -365,7 +365,7 @@ const: const pi=3.14
|
||||
| 逻辑运算符 | && , \|\| , ! |
|
||||
| 三元运算符 | 条件表达式 ? true_value: false_value |
|
||||
|
||||

|
||||

|
||||
|
||||
parseint() ,将其他类型转化为数字
|
||||
|
||||
@ -701,7 +701,7 @@ DOM:Document Object Model 文档对象模型。也就是 JavaScript 将 HTML
|
||||
- Text:文本对象
|
||||
- Comment:注释对象
|
||||
|
||||

|
||||

|
||||
|
||||
那么我们学习DOM技术有什么用呢?主要作用如下:
|
||||
|
||||
@ -763,7 +763,7 @@ for (let i = 0; i < divs.length; i++) {
|
||||
|
||||
你想要如何操作获取到的DOM元素,你需要查阅手册,看它支持的属性
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
var divs = document.getElementsByClassName('cls');
|
||||
@ -821,7 +821,7 @@ MVVM:其实是Model-View-ViewModel的缩写,有3个单词,具体释义如下
|
||||
- View: 视图,用于展示数据的页面,可以理解成我们的html+css搭建的页面,但是没有数据
|
||||
- ViewModel: 数据绑定到视图,负责将数据(Model)通过JavaScript的DOM技术,将数据展示到视图(View)上
|
||||
|
||||

|
||||

|
||||
|
||||
基于上述的MVVM思想,其中的Model我们可以通过Ajax来发起请求从后台获取;对于View部分,我们将来会学习一款ElementUI框架来替代HTML+CSS来更加方便的搭建View;而今天我们要学习的就是侧重于ViewModel部分开发的vue前端框架,用来替代JavaScript的DOM操作,让数据展示到视图的代码开发变得更加的简单。
|
||||
|
||||
|
@ -39,9 +39,9 @@
|
||||
|
||||
## Maven
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
Maven仓库分为:
|
||||
|
||||
@ -57,7 +57,7 @@ POM文件导入依赖的时候,先看本地仓库有没有,没有就看私
|
||||
|
||||
**创建Maven项目**
|
||||
|
||||

|
||||

|
||||
|
||||
勾选 **Create from archetype**(可选),也可以选择 **maven-archetype-quickstart** 等模版。
|
||||
|
||||
@ -175,7 +175,7 @@ Maven 重建
|
||||
* Maven中的坐标是==资源的唯一标识== , 通过该坐标可以唯一定位资源位置
|
||||
* 使用坐标来定义项目或引入项目中需要的依赖
|
||||
|
||||

|
||||

|
||||
|
||||
### 依赖管理
|
||||
|
||||
@ -201,7 +201,7 @@ Maven 重建
|
||||
|
||||
更改之后可以在界面上看到一个maven刷新按钮,点击一下就开始联网下载依赖了,成功后可以看到
|
||||
|
||||

|
||||

|
||||
|
||||
#### 排除依赖
|
||||
|
||||
@ -280,7 +280,7 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被
|
||||
|
||||
4. 双击test生命周期
|
||||
|
||||

|
||||

|
||||
|
||||
## HTTP协议
|
||||
|
||||
@ -315,14 +315,14 @@ A依赖B,B依赖C,如果A不想将C依赖进来,可以同时排除C,被
|
||||
|
||||
浏览器与 Tomcat 之间通过 HTTP 协议进行通信,而 Tomcat 则充当了中间的桥梁,将请求路由到你的 Java 代码,并最终将处理结果返回给浏览器。
|
||||
|
||||

|
||||

|
||||
|
||||
### 快速启动
|
||||
|
||||
1. 新建spring initializr module
|
||||
2. 删除以下文件
|
||||
|
||||

|
||||

|
||||
|
||||
新建HelloController类
|
||||
|
||||
@ -416,7 +416,7 @@ public class RequestController {
|
||||
|
||||
- **请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套实体类属性参数。**
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
@RequestMapping("/complexpojo")
|
||||
@ -464,7 +464,7 @@ public class RequestController {
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
#### JSON格式参数
|
||||
|
||||
@ -506,7 +506,7 @@ json数组:
|
||||
|
||||
Postman发送JSON格式数据:
|
||||
|
||||

|
||||

|
||||
|
||||
服务端Controller方法接收JSON格式数据:
|
||||
|
||||
@ -583,7 +583,7 @@ public class RequestController {
|
||||
|
||||
下图返回值分别是字符串、对象、集合。
|
||||
|
||||

|
||||

|
||||
|
||||
统一的返回结果使用类来描述,在这个结果中包含:
|
||||
|
||||
@ -627,7 +627,7 @@ public class Result {
|
||||
|
||||
Controller层接收请求,调用Service层;Service层先调用Dao层获取数据,然后实现自己的业务逻辑处理部分,最后返回给Controller层;Controller层再响应数据。可理解为递归的过程
|
||||
|
||||

|
||||

|
||||
|
||||
**但是**,这样每次要更换ServiceA->ServiceB时,需要修改Controller层的代码!
|
||||
|
||||
@ -644,7 +644,7 @@ private EmpService empService=new EmpServiceB(); //现在
|
||||
|
||||
#### IOC&DI 分层解耦
|
||||
|
||||

|
||||

|
||||
|
||||
任务:完成Controller层、Service层、Dao层的代码解耦
|
||||
|
||||
@ -659,19 +659,19 @@ private EmpService empService=new EmpServiceB(); //现在
|
||||
|
||||
第1步:删除Controller层、Service层中new对象的代码
|
||||
|
||||

|
||||

|
||||
|
||||
第2步:Service层及Dao层的实现类,交给IOC容器管理
|
||||
|
||||
- 使用Spring提供的注解:@Component ,就可以实现类交给IOC容器管理
|
||||
|
||||

|
||||

|
||||
|
||||
第3步:为Controller及Service注入运行时依赖的对象
|
||||
|
||||
- 使用Spring提供的注解:@Autowired ,就可以实现程序运行时IOC容器自动注入需要的依赖对象
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -841,7 +841,7 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户
|
||||
|
||||
### 开发流程
|
||||
|
||||

|
||||

|
||||
|
||||
1. 查看页面原型明确需求
|
||||
- 根据页面原型和需求,进行表结构设计、编写接口文档(已提供)
|
||||
@ -861,11 +861,11 @@ http://localhost:8080/users/1 DELETE:删除id为1的用户
|
||||
|
||||
### 快速创建
|
||||
|
||||

|
||||

|
||||
|
||||
1. 创建springboot工程,并导入 mybatis的起步依赖、mysql的驱动包。创建用户表user,并创建对应的实体类User
|
||||
|
||||

|
||||

|
||||
|
||||
2. 在springboot项目中,可以编写main/resources/application.properties文件,配置数据库连接信息。
|
||||
|
||||
@ -882,7 +882,7 @@ spring.datasource.password=1234
|
||||
|
||||
3. 在引导类所在包下,在创建一个包 mapper。在mapper包下创建一个接口 UserMapper
|
||||
|
||||

|
||||

|
||||
|
||||
@Mapper注解:表示是mybatis中的Mapper接口
|
||||
|
||||
@ -976,7 +976,7 @@ public interface EmpMapper {
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
上图参数值分离,有效防止SQL注入
|
||||
|
||||
@ -1007,7 +1007,7 @@ useGeneratedKeys = true表示获取返回的主键值,keyProperty = "id"表示
|
||||
- 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。
|
||||
- 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。
|
||||
|
||||

|
||||

|
||||
|
||||
解决方法:
|
||||
|
||||
@ -1073,7 +1073,7 @@ public interface EmpMapper {
|
||||
|
||||
3. XML映射文件中sql语句的**id**与Mapper接口中的**方法名**一致,并保持返回类型一致。
|
||||
|
||||

|
||||

|
||||
|
||||
\<select>标签:就是用于编写select查询语句的。
|
||||
|
||||
@ -1193,11 +1193,11 @@ xml:
|
||||
|
||||
传统员工分页查询分析:
|
||||
|
||||

|
||||

|
||||
|
||||
**采用分页插件PageHelper:**
|
||||
|
||||

|
||||

|
||||
|
||||
**在执行empMapper.list()方法时,就是执行:select * from emp 语句,怎么能够实现分页操作呢?**
|
||||
|
||||
@ -1282,7 +1282,7 @@ public class EmpController {
|
||||
|
||||
思路分析:
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
<select id="pageQuery" resultType="com.sky.entity.Employee">
|
||||
@ -1453,7 +1453,7 @@ public class AliOSSUtils {
|
||||
|
||||
将配置信息写在application.properties,用注解@Value获取配置文件中的数据
|
||||
|
||||

|
||||

|
||||
|
||||
@Value("${aliyun.oss.endpoint}")
|
||||
|
||||
@ -1461,7 +1461,7 @@ public class AliOSSUtils {
|
||||
|
||||
**yml配置文件**
|
||||
|
||||

|
||||

|
||||
|
||||
了解下yml配置文件的基本语法:
|
||||
|
||||
@ -1525,7 +1525,7 @@ Spring提供的简化方式套路:
|
||||
|
||||
3. 在实体类上添加`@ConfigurationProperties`注解,并通过**perfix属性**来指定配置参数项的前缀
|
||||
|
||||

|
||||

|
||||
|
||||
4. (可选)引入依赖pom.xml
|
||||
|
||||
@ -1538,7 +1538,7 @@ Spring提供的简化方式套路:
|
||||
|
||||
**使用:**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -1546,7 +1546,7 @@ Spring提供的简化方式套路:
|
||||
|
||||
### 会话技术
|
||||
|
||||

|
||||

|
||||
|
||||
会话是和浏览器关联的,当有三个浏览器客户端和服务器建立了连接时,就会有三个会话。同一个浏览器在未关闭之前请求了多次服务器,这多次请求是属于同一个会话。比如:1、2、3这三个请求都是属于同一个会话。当我们关闭浏览器之后,这次会话就结束了。而如果我们是直接把web服务器关了,那么所有的会话就都结束了。
|
||||
|
||||
@ -1587,7 +1587,7 @@ Spring提供的简化方式套路:
|
||||
|
||||
### JWT令牌
|
||||
|
||||

|
||||

|
||||
|
||||
**生成和校验**
|
||||
|
||||
@ -1999,7 +1999,7 @@ eg:@Order(1)
|
||||
|
||||
先定义一个公共的pt(),然后可以直接引用。
|
||||
|
||||

|
||||

|
||||
|
||||
切入点表达式:
|
||||
|
||||
@ -2097,7 +2097,7 @@ public @interface MyLog {
|
||||
|
||||
### 连接点
|
||||
|
||||

|
||||

|
||||
|
||||
**`getSignature()`**: 返回一个`Signature`类型的对象,这个对象包含了被拦截点的签名信息。在方法调用的上下文中,这包括了方法的名称、声明类型等信息。
|
||||
|
||||
@ -2364,4 +2364,4 @@ public class SpringbootWebConfig2Application {
|
||||
|
||||
## WEB开发总体图
|
||||
|
||||

|
||||

|
||||
|
@ -1083,15 +1083,15 @@ public class Main {
|
||||
|
||||
`ArrayList` 是 List 接口的一种实现,而 List 接口又继承自 Collection 接口。包括 `add()`、`remove()`、`contains()` 等。
|
||||
|
||||

|
||||

|
||||
|
||||
#### HashSet
|
||||
|
||||

|
||||

|
||||
|
||||
#### HashMap
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
// 使用 entrySet() 方法获取 Map 中所有键值对的集合,并使用增强型 for 循环遍历键值对
|
||||
@ -1253,11 +1253,11 @@ String ttImgPath = resourceUrl != null ? resourceUrl.getFile() : null;
|
||||
|
||||
反射技术,指的是加载类的字节码到内存,并以编程的方法解刨出类中的各个成分(**成员变量、方法、构造器**等)。
|
||||
|
||||

|
||||

|
||||
|
||||
**反射技术例子**:IDEA通过反射技术就可以获取到类中有哪些方法,并且把方法的名称以提示框的形式显示出来,所以你能看到这些提示了。
|
||||
|
||||

|
||||

|
||||
|
||||
**1.获取类的字节码(Class对象)**:有三种方法
|
||||
|
||||
@ -1358,9 +1358,9 @@ public class Test2Constructor(){
|
||||
|
||||
**3.获取类的成员变量**
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
不管是设置值还是获取值,都需要:
|
||||
|
||||
@ -1372,15 +1372,15 @@ public class Test2Constructor(){
|
||||
|
||||
**4.获取类的成员方法**
|
||||
|
||||

|
||||

|
||||
|
||||
获取**单个**指定的成员方法:第一个参数填**方法名**、第二个参数填方法中的**参数类型**
|
||||
|
||||

|
||||

|
||||
|
||||
执行:第一个参数传入一个**对象**,然后是若干方法参数(无参可不写)...
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -1476,7 +1476,7 @@ public class FieldReflectionTest {
|
||||
|
||||
### Junit 单元测试
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
@Test
|
||||
@ -1490,7 +1490,7 @@ public class FieldReflectionTest {
|
||||
|
||||
写了@Test注解,那么该测试函数就可以直接运行!若一个测试类中写了多个测试方法,可以全部执行!
|
||||
|
||||

|
||||

|
||||
|
||||
原理可能是:
|
||||
|
||||
@ -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%;" />
|
||||
|
||||
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
# 为什么学Jupyter notebook?
|
||||
|
||||

|
||||

|
||||
|
||||
能够编写、运行python文件的程序很多,比如python安装自带的IDLE、程序员喜爱的pycharm、数据科学全家桶Anaconda,还有Spyder、Thonny等。
|
||||
|
||||
@ -34,7 +34,7 @@ Jupyter notebook是用python进行数据科学、机器学习的必备工具。
|
||||
|
||||
比如下图,包含了Markdown说明文档、代码块、代码运行结果、图片嵌入等元素,特别适合Python数据科学和机器学习撰写文档。
|
||||
|
||||

|
||||

|
||||
|
||||
吴恩达的《深度学习》慕课的课后编程作业、大数据竞赛网站Kaggle上的代码文档、美国大学的数据科学课程的课后资料及编程作业,都是以jupyter notebook文件的形式给出的,也就是`.ipynb`文件。
|
||||
|
||||
@ -54,7 +54,7 @@ Jupyter notebook是基于Ipython内核的,在浏览器中以网页形式运行
|
||||
>
|
||||
> Spyder和Jupyter notebook都是以Ipython为内核的。
|
||||
|
||||

|
||||

|
||||
|
||||
## 安装Jupyter notebook
|
||||
|
||||
@ -70,7 +70,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
打开命令行,输入`jupter notebook`,回车。稍等片刻即可跳出浏览器网页。
|
||||
|
||||

|
||||

|
||||
|
||||
点击右边的New-Python3即可创建python文档。
|
||||
|
||||
@ -82,7 +82,7 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
勾选文件夹,点击rename即可重命名
|
||||
|
||||

|
||||

|
||||
|
||||
最常用的是点击右边的New-Python3,创建python文档。
|
||||
|
||||
@ -92,13 +92,13 @@ pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
点击左上角`Untitled`给新建的python文档文件重新命名。
|
||||
|
||||

|
||||

|
||||
|
||||
在代码框中输入第一行python代码,shift+回车运行
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -136,14 +136,14 @@ Jupyter notebook中,有两种单元格:代码单元格和Markdown单元格
|
||||
>我是引用,我这行开头有一个灰色竖杠
|
||||
|
||||
[我是外部链接,点我上百度](www.baidu.com)
|
||||

|
||||

|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
然后按`shift`+`Enter`运行该单元格。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -191,9 +191,9 @@ l 显示代码行号
|
||||
|
||||
h 查看所有快捷键
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
## 在Markdown单元格中输入数学公式
|
||||
|
||||
@ -209,17 +209,17 @@ $$x = \frac{-b\pm \sqrt{b^2-4ac}}{2a}$$
|
||||
初中数学内容
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
按`shift`+`Enter`渲染运行:
|
||||
|
||||

|
||||

|
||||
|
||||
# 数据分析与可视化实战案例:学习时间与成绩的关系(线性回归)
|
||||
|
||||
先用excel把玩数据
|
||||
|
||||

|
||||

|
||||
|
||||
观察数据、导入数据、划分特征和标签、划分训练集和测试集、构建模型,模型可视化
|
||||
|
||||
|
@ -134,7 +134,7 @@ create table 表名(
|
||||
|
||||
eg:
|
||||
|
||||

|
||||

|
||||
|
||||
```
|
||||
create table tb_user (
|
||||
@ -472,7 +472,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名)
|
||||
|
||||
### 一对多
|
||||
|
||||

|
||||

|
||||
|
||||
**一对多关系实现:在数据库表中多的一方,添加外键字段,来关联'一'这方的主键。**
|
||||
|
||||
@ -511,7 +511,7 @@ alter table 表名 add constraint 外键名称 foreign key(外键字段名)
|
||||
|
||||
- 内连接:相当于查询A、B交集部分数据
|
||||
|
||||

|
||||

|
||||
|
||||
2. 外连接
|
||||
|
||||
@ -582,7 +582,7 @@ from tb_emp AS emp right join tb_dept AS dept
|
||||
on emp.dept_id = dept.id;
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
### 子查询
|
||||
|
||||
@ -807,7 +807,7 @@ musql默认采用B+树来作索引
|
||||
|
||||
下面我们来看看B+Tree(多路平衡搜索树)结构中如何避免这个问题:
|
||||
|
||||

|
||||

|
||||
|
||||
B+Tree结构:
|
||||
|
||||
|
@ -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%;" />
|
||||
|
||||
### 通用命令
|
||||
|
||||
|
@ -99,14 +99,14 @@ pip freeze > requirements.txt
|
||||
|
||||
如果你的pycharm中使用conda环境,那么你在pycharm的终端中所用的可能不是conda环境!
|
||||
|
||||

|
||||

|
||||
|
||||
解决办法: shell path改为 cmd.exe
|
||||
这样虚拟环境就默认设置为conda环境了
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -114,7 +114,7 @@ pip freeze > requirements.txt
|
||||
|
||||
如果命令行cd到项目根目录,所用的也并不是conda环境!这里用的是conda的默认环境?
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -128,7 +128,7 @@ pip freeze > requirements.txt
|
||||
|
||||
4.输入命令
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
@ -29,7 +29,7 @@ git config --system --list :系统配置的
|
||||
|
||||
## 核心原理
|
||||
|
||||

|
||||

|
||||
|
||||
index是暂存区
|
||||
|
||||
@ -57,7 +57,7 @@ remote是远程仓库,通常是github/gitee码云
|
||||
- git init 新建本地仓库,生成.git隐藏文件,点进去有head文件。
|
||||
- git remote add origin url,可以绑定远程仓库
|
||||
|
||||

|
||||

|
||||
|
||||
- 继续输入git pull origin master(若你远程仓库为空,不需要这一步)
|
||||
- git add .(.表示所有的,注意这个‘点’)—将本地文件提交至暂存区
|
||||
@ -84,19 +84,19 @@ remote是远程仓库,通常是github/gitee码云
|
||||
|
||||
1. **配置Git**
|
||||
|
||||

|
||||

|
||||
|
||||
2. **关联自己的github**
|
||||
|
||||

|
||||

|
||||
|
||||
**对于任何安卓项目,前两步都是通用的!!!**
|
||||
|
||||
3.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
这里的Remote填远程仓库地址,eg: https://github.com/zhangww-web/JianShu.git
|
||||
|
||||
@ -106,7 +106,7 @@ remote是远程仓库,通常是github/gitee码云
|
||||
|
||||
点击顶部菜单栏的 `Git -> Manage Remotes`。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -171,7 +171,7 @@ git branch -d dev 删除dev分支
|
||||
|
||||
git branch -m dev cs :将dev分支修改名称为cs分支
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -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'/
|
||||
```
|
||||
|
||||
在.gitignore文件进行添加
|
||||
在.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.
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -386,5 +396,5 @@ COVID-19-Detector is registered as a Git root, but no Git repositories were foun
|
||||
- 导航到仓库设置中的“Manage access”(管理访问)或“Collaborators”(协作者)部分。
|
||||
- 添加协作者的GitHub用户名,并设置他们的访问级别。
|
||||
|
||||

|
||||

|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
DNS解析:可能需等待几分钟生效
|
||||
|
||||

|
||||

|
||||
|
||||
买的域名的r2studying.top 这里的HOSTNAME相当于二级域名,如npm.r2studying.top
|
||||
|
||||
@ -253,7 +253,7 @@ DNS解析:可能需等待几分钟生效
|
||||
nano /etc/apt/sources.list #打开sources.list文件
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
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配置文件,然后直接把该文件传到服务器上!
|
||||
|
||||

|
||||

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

|
||||

|
||||
|
||||
这里添加上https
|
||||
|
||||
@ -845,7 +855,7 @@ cd /data/easyimage/config/config.php
|
||||
|
||||
网站域名 图片域名设置可以改变图片的url:IP或域名
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -858,7 +868,7 @@ cd /data/easyimage/config/config.php
|
||||
2.插件设置,搜索web-uploader 1.1.1 (自定义web图床)
|
||||
旧版有搜索不出来的情况!建议直接安装最新版!
|
||||
|
||||
3.配置如下,API地址从easyimage-设置-API设置中获取
|
||||
3.配置如下,API地址从easyimage-设置-API设置中获取
|
||||
|
||||
|
||||
|
||||
@ -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文件自动发布**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@ int main(){
|
||||
}
|
||||
```
|
||||
|
||||
# 
|
||||
# 
|
||||
|
||||
# 一级标题:# xx
|
||||
|
||||
|
14
Java/安卓开发.md
@ -5,23 +5,23 @@
|
||||
最近想在我的书城中开发一下阅读器的功能,难度颇高,因此在github上找到了一个封装了阅读器功能的项目,仅需获得文件本地存储地址,调用其提供的函数即可进行阅读。
|
||||
|
||||
**但是**,github介绍的使用方法并不总是有效,比如我就经常无法正确添加依赖
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
因此,我将其项目代码拷贝到本地,手动集成。
|
||||
|
||||

|
||||

|
||||
|
||||
依据项目结构,可以发现app是主项目,hwtxtreaderlib是功能模块,根据是这张图:
|
||||
|
||||

|
||||

|
||||
|
||||
build.gradle(:app)中引入了hwtxtreaderlib的依赖,而app只是个demo测试模块,相当于演示了如果在自己的项目中引用hwtxtreaderlib。因此,手动步骤如下:
|
||||
|
||||
- 将hwtxtreaderlib复制到自己的项目文件夹中
|
||||
|
||||

|
||||

|
||||
|
||||
- 在app的build.gradle中,添加依赖
|
||||
|
||||
@ -37,11 +37,11 @@ implementation project(':hwtxtreaderlib')
|
||||
|
||||
- syn now! 同步一下,然后android studio中项目结构变成如下图
|
||||
|
||||

|
||||

|
||||
|
||||
- build没报错基本就稳了,然后就运行试试
|
||||
|
||||

|
||||

|
||||
|
||||
这里可能AndroidManifest.xml报错,需要查看原项目中app模块如何编写的,做些适当的修改!我这里卡了很久.
|
||||
|
||||
@ -49,4 +49,4 @@ implementation project(':hwtxtreaderlib')
|
||||
|
||||
**非常重要!!!**有时候github项目会将项目的详细信息写在wiki中!!!
|
||||
|
||||

|
||||

|
16
Java/微服务.md
@ -145,9 +145,9 @@ mybatis-plus:
|
||||
|
||||
`Wrapper`就是条件构造的抽象类,其下有很多默认实现,继承关系如图:
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
**QueryWrapper**
|
||||
|
||||
@ -360,17 +360,17 @@ int rows = userMapper.delete(queryWrapper);
|
||||
|
||||
#### IService
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
由于`Service`中经常需要定义与业务有关的自定义方法,因此我们不能直接使用`IService`,而是自定义`Service`接口,然后继承`IService`以拓展方法。同时,让自定义的`Service实现类`继承`ServiceImpl`,这样就不用自己实现`IService`中的接口了。
|
||||
|
||||
|
@ -18,7 +18,7 @@ git clone地址:http://47.98.59.178:3000/zy123/zbparse.git
|
||||
|
||||
## 项目启动与维护:
|
||||
|
||||

|
||||

|
||||
|
||||
.env存放一些密钥(大模型、textin等),它是gitignore忽略了,因此在服务器上git pull项目的时候,这个文件不会更新(因为密钥比较重要),需要手动维护服务器相应位置的.env。
|
||||
|
||||
@ -28,7 +28,7 @@ git clone地址:http://47.98.59.178:3000/zy123/zbparse.git
|
||||
|
||||
1. 进入项目文件夹
|
||||
|
||||

|
||||

|
||||
|
||||
**注意:**需要确认.env是否存在在服务器,默认是隐藏的
|
||||
输入cat .env
|
||||
@ -54,7 +54,7 @@ requirements.txt一般无需变动,除非代码中使用了新的库,也要
|
||||
|
||||
**docker-compose:**
|
||||
|
||||

|
||||

|
||||
|
||||
本项目为**单服务项目**,只有flask_app(服务名)
|
||||
|
||||
@ -67,7 +67,7 @@ build context(`context: .`):
|
||||
|
||||
**dockerfile:**
|
||||
|
||||

|
||||

|
||||
|
||||
COPY . .(在 Dockerfile 中):
|
||||
这条指令会将构建上下文中的所有内容复制到镜像中的当前工作目录(这里是 `/flask_project`)。
|
||||
@ -138,9 +138,9 @@ docker image prune
|
||||
2. .env环境配好 (一般不需要在电脑环境变量中额外配置了,但是要在Pycharm中**安装插件**,使得项目在**启动时**能将env中的环境变量**自动配置**到系统环境变量中!!!)
|
||||
3. 点击下拉框,Edit configurations
|
||||
|
||||

|
||||

|
||||
|
||||
设置run_serve.py为启动脚本
|
||||
设置run_serve.py为启动脚本
|
||||
注意这里的working directory要设置到最外层文件夹,而不是flask_app!!!
|
||||
|
||||
|
||||
@ -408,7 +408,7 @@ mem_after = memory_usage()[0]
|
||||
|
||||
memory_usage()[0] 可以获取当前程序所占内存的**快照**
|
||||
|
||||

|
||||

|
||||
|
||||
产生的数据都存到result变量-》内存中,这是正常的,因此my_function没有内存泄漏问题。
|
||||
**但是**
|
||||
@ -427,7 +427,7 @@ def extract_text_by_page(file_path):
|
||||
return ""
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
可以发现尽管我返回"",内存仍然没有释放!因为就是读取pdf这块发生了内存泄漏!
|
||||
|
||||
@ -465,7 +465,7 @@ for stat in stats[:10]:
|
||||
tracemalloc.stop()
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
tracemalloc能更深入的分析,不仅是自己写的代码,**调用的库函数**产生的内存也能分析出来。在这个例子中就是PyPDF2中的各个函数占用了大部分内存。
|
||||
|
||||
@ -566,7 +566,7 @@ def judge_zbfile_exec_sub(file_path):
|
||||
|
||||
但是存在一个问题:**第一次发送请求执行时间较慢!**
|
||||
|
||||

|
||||

|
||||
|
||||
可以发现实际执行只需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,去页眉页脚页码
|
||||
|
||||

|
||||

|
||||
|
||||
general下的llm下的清除file_id.py 需要**每周运行至少一次**,防止file_id数量超出(我这边对每次请求结束都有file_id记录并清理,向应该还没加)
|
||||
|
||||
@ -725,7 +725,7 @@ post_processing中的**process_functions_in_parallel**提取
|
||||
|
||||
资格审查、技术偏离、 商务偏离、 所需提交的证明材料
|
||||
|
||||

|
||||

|
||||
|
||||
大解析upload用了post_processing完整版,
|
||||
|
||||
@ -755,9 +755,9 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
|
||||
|
||||
若开头没截准,就改begin_pattern,末尾没截准,就改end_pattern
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
另外:在*截取pdf货物标版*.py中,还有extract_pages_twice函数,即第一次没有切分到之后,会运行该函数,这边又有一套begin_pattern和end_pattern,即二次提取
|
||||
|
||||
@ -765,7 +765,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
|
||||
|
||||
**如何测试?**
|
||||
|
||||

|
||||

|
||||
|
||||
输入pdf_path,和你要切分的序号,selection=1代表切公告,依次类推,可以看切出来的效果如何。
|
||||
|
||||
@ -778,7 +778,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
|
||||
|
||||
这里:如果段落中既被正则匹配,又被follow_up_keywords中的任意一个匹配,那么不会添加到temp中(即不会被大模型筛选),它会**直接添加**到最后的返回中!
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -796,7 +796,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
|
||||
|
||||
都是废弃文件代码,未在正式、测试环境中使用的,不用管
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -804,7 +804,7 @@ get_deviation.py、偏离表数据解析main.py用了process_functions_in_parall
|
||||
|
||||
是接口以及主要实现部分,一一对应
|
||||
|
||||

|
||||

|
||||
|
||||
get_deviation对应偏离表数据解析main,获得偏离表数据
|
||||
|
||||
@ -824,7 +824,7 @@ upload对应工程标解析和货物标解析,即大解析
|
||||
|
||||
utils是接口这块的公共功能函数。其中validate_and_setup_logger函数对不同的接口请求对应到不同的output文件夹,如upload->output1。后续增加接口也可直接在这里写映射关系。
|
||||
|
||||

|
||||

|
||||
|
||||
重点关注大解析:**upload.py**和**货物标解析main.py**
|
||||
|
||||
@ -838,7 +838,7 @@ utils是接口这块的公共功能函数。其中validate_and_setup_logger函
|
||||
|
||||
各个文件夹(output1 output2..)对应不同的接口请求
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -850,7 +850,7 @@ testdir是平时写代码的测试的地方
|
||||
|
||||
它们都不影响正式和测试环境的解析
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -858,7 +858,7 @@ testdir是平时写代码的测试的地方
|
||||
|
||||
是两个解析流程中不一样的地方(一样的都写在**general**中了)
|
||||
|
||||

|
||||

|
||||
|
||||
主要是货物标额外解析了采购要求(提取采购需求main+技术参数要求提取+商务服务其他要求提取)
|
||||
|
||||
@ -868,7 +868,7 @@ testdir是平时写代码的测试的地方
|
||||
|
||||
ConnectionLimiter.py定义了接口超时时间->超时后断开与后端的连接
|
||||
|
||||

|
||||

|
||||
|
||||
logger_setup.py 为每个请求创建单独的log,每个log对应一个log.txt
|
||||
|
||||
@ -894,13 +894,13 @@ start_up.py是启动脚本,run_serve也是启动脚本,是对start_up.py的
|
||||
2. 大解析中返回了技术评分,后端接收后不仅显示给前端,还会返给向,用于生成技术偏离表
|
||||
3. 小解析时,get_deviation.py其实也可以返回技术评分,但是没有返回,因为没人和我对接,暂时注释了。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
4.商务评议和技术评议偏离表,即评分细则的偏离表,暂时没做,但是**商务评分、技术评分**无论大解析还是小解析都解析了,稍微对该数据处理一下返回给后端就行。
|
||||
|
||||

|
||||

|
||||
|
||||
这个是解析得来的结果,适合给前端展示,但是要生成商务技术评议偏离表的话,需要再调一次大模型,对该数据进行重新归纳,以字符串列表为佳。再传给后端。(未做)
|
||||
|
||||
@ -1212,22 +1212,22 @@ if __name__ == '__main__':
|
||||
|
||||
### 项目贡献
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
### 效果图
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
26
Java/苍穹外卖.md
@ -4,7 +4,7 @@
|
||||
|
||||
### 后端项目结构
|
||||
|
||||

|
||||

|
||||
|
||||
分析sky-pojo模块的每个包的作用:
|
||||
|
||||
@ -170,7 +170,7 @@ public class EmployeeLoginDTO implements Serializable {
|
||||
}
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
## 开发
|
||||
|
||||
@ -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){
|
||||
|
||||
## 微信小程序
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -779,7 +779,7 @@ public static String doGet(String url,Map<String,String> paramMap){
|
||||
|
||||
用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -787,7 +787,7 @@ public static String doGet(String url,Map<String,String> paramMap){
|
||||
|
||||
通过Redis来缓存菜品数据,减少数据库查询操作。
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -952,19 +952,19 @@ Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要
|
||||
|
||||
https://pay.weixin.qq.com/static/product/product_index.shtml
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
**5.商户系统调用微信后台:**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
**10.用户调起微信支付**
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
@ -984,7 +984,7 @@ https://pay.weixin.qq.com/static/product/product_index.shtml
|
||||
|
||||
复制authtoken:
|
||||
|
||||

|
||||

|
||||
|
||||
执行命令:
|
||||
|
||||
@ -1002,7 +1002,7 @@ cpolar.exe authtoken ZmIwMmQzZDYtZDE2ZS00ZGVjLWE2MTUtOGQ0YTdhOWI2M2Q1
|
||||
cpolar.exe http 8080
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
这里的 https://52ac2ecb.r18.cpolar.top 就是与http://localhost:8080对应的临时域名。
|
||||
|
||||
@ -1024,7 +1024,7 @@ cpolar.exe http 8080
|
||||
|
||||
每个域的含义分别为:秒、分钟、小时、日、月、周、年(可选)
|
||||
|
||||

|
||||

|
||||
|
||||
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 开启任务调度
|
||||
|
||||
|
BIN
output/00e2004b-8cd5-4658-9742-61475d13703b.png
Normal file
After Width: | Height: | Size: 275 KiB |
BIN
output/0211a5d5-67eb-46b5-aae5-bd6995570df1.png
Normal file
After Width: | Height: | Size: 444 KiB |
BIN
output/0341f054-591e-42dd-b80a-17c188419e6e.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
output/04af63bc-07bb-4590-9a02-34e6ef94e5e6.png
Normal file
After Width: | Height: | Size: 373 KiB |
BIN
output/06d92f94-982e-49b2-b999-be2dce45a748.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
output/076407cc-070d-437d-93f9-5c50629ac058.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
output/097427a1-a52e-40fe-ac37-b49f50fcd354.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
output/09747b1d-74f7-4c9d-818d-576680a30a96.png
Normal file
After Width: | Height: | Size: 704 KiB |
BIN
output/0a48347c-8253-4502-8843-86aebcf496c9.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
output/0a7f2195-5206-41f4-a1b9-919899b247fa.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
output/0e47f95d-708c-4d83-8725-5a3b9ade8bba.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
output/0e5f781e-9cf7-4207-afb0-ae29058f40d1.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
output/0f9404b7-0769-4687-bfc8-b9470e485c83.png
Normal file
After Width: | Height: | Size: 615 KiB |
BIN
output/106fb21f-d59e-46b3-af86-b2a98131ca8c.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
output/12a6770d-da36-43ad-a335-c3e65460c2e1.png
Normal file
After Width: | Height: | Size: 74 KiB |
BIN
output/139ea234-029d-4e2e-894c-2b9e66781859.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
output/13bff780-7bd1-4def-ac78-fd150ec435bc.png
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
output/14a1ba2b-2236-4c40-9b6c-c712b679daf9.png
Normal file
After Width: | Height: | Size: 1.9 MiB |
BIN
output/19318b2b-4199-48ed-915d-8b39b3ec844f.png
Normal file
After Width: | Height: | Size: 440 KiB |
BIN
output/1a75be61-2a80-4389-bb41-177a84e301c8.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
output/1b24d77b-b8af-4a30-b31d-6f45fa9e1335.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
output/1b624652-9519-4637-988b-d6c84fd08923.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
output/1b8fe24c-cb54-4fdd-b606-eb856e6efc1e.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
output/1c1cdb90-ece1-4866-98ca-6164002c5bd2.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
output/1ff9867b-1263-47f1-9a86-a8feb17cc13b.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
output/200953d2-dc16-42ee-b829-02e02ce95c5c.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
output/208a2fd0-86bc-4928-8c55-6e7a11f713bd.webp
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
output/2258bb0d-2f7d-4e7e-ab53-0187aabec737.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
output/22821bd8-1a25-434c-90e9-50206f09c89b.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
output/2425c3f7-5dea-4144-a6db-ce9096e13e6b.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
output/2477d571-5774-441a-90a4-5dd18a99ec5c.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
output/25a07bde-c831-40a8-8993-d4e2d8fa2382.png
Normal file
After Width: | Height: | Size: 314 KiB |
BIN
output/25ff7498-052b-4be9-bc51-67fe06c4c3a7.png
Normal file
After Width: | Height: | Size: 126 KiB |
BIN
output/2649e2fe-0ebc-4ff1-8d77-836b88dad4c2.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
output/2721cbc7-18df-48b2-ab82-ad5c2d0aa72e.png
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
output/2848574b-2f74-49f9-ba82-c8b38eadeef6.png
Normal file
After Width: | Height: | Size: 253 KiB |
BIN
output/29950d42-4642-4db3-ba36-6c3fe307f69f.png
Normal file
After Width: | Height: | Size: 478 KiB |
BIN
output/2a9bf144-bba9-42c0-aae6-089470ada845.png
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
output/2b3c9bfd-f546-4352-9b3d-08e6d3c23252.png
Normal file
After Width: | Height: | Size: 140 KiB |
BIN
output/2b562250-35a6-4965-aadb-de00f9702c26.png
Normal file
After Width: | Height: | Size: 190 KiB |
BIN
output/2d584571-9ead-4b78-a039-0903b70b82ac.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
output/2dfd7f24-b06a-474d-b9b0-302388582be3.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
output/2ee26009-7a9c-488f-9308-a2479d3fa162.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
output/2ef21955-235c-4ba9-a1f3-4d302b239204.png
Normal file
After Width: | Height: | Size: 597 KiB |
BIN
output/3073bcd9-d022-483b-a082-e29e1291cc52.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
output/312965c7-c112-4eb0-932c-4821c185833e.png
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
output/31f24d30-27be-474c-869f-f76ca3fc1288.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
output/33831492-711f-44d2-a637-332aae872fd8.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
output/34742cf6-d307-4a6a-91d3-a9b67fc0a8f5.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
output/34b71bbe-67a3-441f-a6a7-88f8a43c4c08.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
output/3607d643-0c2f-4479-ba03-8bef35f92c1d.png
Normal file
After Width: | Height: | Size: 151 KiB |
BIN
output/384861c4-9ee9-44b6-ac7e-7185dfa4709b.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
output/386a6f5f-8307-4a42-b5e8-7cf3ec931057.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
output/38b86390-3c63-4464-9243-389e8693c3d3.png
Normal file
After Width: | Height: | Size: 313 KiB |
BIN
output/3a232892-e74f-4224-b2e8-e46b0f690bfe.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
output/3a24c0e6-58d7-4680-8c3d-9407ac9610e8.png
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
output/3ae193a6-c741-4dff-b98b-d1232a1f5cae.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
output/3c991eb2-28fa-4e5f-8b0d-37ea955e8e6d.png
Normal file
After Width: | Height: | Size: 407 KiB |
BIN
output/3cc07cfd-1c57-4fd1-8aa0-8281118c2ce4.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
output/3d76cef3-dfb8-43d5-b4ef-434345823a46.png
Normal file
After Width: | Height: | Size: 364 KiB |
BIN
output/3e52c263-b859-4f8f-97e1-27abe24325d0.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
output/3f10a2ef-894b-4b87-b8e7-292c06bac21d.png
Normal file
After Width: | Height: | Size: 34 KiB |
BIN
output/3fc27036-4e60-4daf-9599-4de21458b9de.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
output/4016b542-0162-4b87-b590-cb15e8377076.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
output/42e0c8d0-a392-4302-9410-4d302661d9df.png
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
output/4400b6f4-474c-4441-840f-3084e870ac13.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
output/445c6b0d-846e-404b-8e65-1d026260f0fa.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
output/45997e98-63aa-4816-b4d3-d0c778c75065.png
Normal file
After Width: | Height: | Size: 2.0 MiB |
BIN
output/4859b9eb-5707-45d0-b1fc-4265717cf491.png
Normal file
After Width: | Height: | Size: 695 KiB |
BIN
output/4b7f89e5-b3e5-4be6-9737-26b6ef9ce61d.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
output/4cdce12f-f85a-4384-beb1-6ff560370a8a.png
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
output/4f1f93f0-73fd-4059-8d94-1f6f1d976d2f.jpg
Normal file
After Width: | Height: | Size: 155 KiB |
BIN
output/515247f4-f38f-4cef-bf14-8dab45863923.png
Normal file
After Width: | Height: | Size: 110 KiB |
BIN
output/554d273e-c4e3-4ac2-8573-01debad92434.png
Normal file
After Width: | Height: | Size: 235 KiB |
BIN
output/5586d2db-19dc-43f4-8a80-31ccf233981c.png
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
output/5691be63-1063-429f-98e1-e012d9e36190.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
output/56f2e4fd-d912-43bc-93c2-b3359e43cf36.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
output/5783f31c-9512-4e5b-9835-0347d288ced4.png
Normal file
After Width: | Height: | Size: 206 KiB |
BIN
output/585e785d-27b3-4ab8-93be-7db04f8c99b3.png
Normal file
After Width: | Height: | Size: 91 KiB |
BIN
output/587be2e5-2825-4fe5-b50c-8b2f920a73d3.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
output/5914b92c-5af1-4845-a84f-0abbd379c9f0.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
output/5ad64185-2f1b-4910-8c8a-03f88012c064.png
Normal file
After Width: | Height: | Size: 363 KiB |
BIN
output/5afdb58a-808b-469f-afbc-bd68f46b859a.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
output/5c0b315f-f55e-446e-900f-0eba454115d7.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
output/5c4ede03-3166-45ab-ae21-16e9aa022780.png
Normal file
After Width: | Height: | Size: 98 KiB |