新年快乐!(残篇)
果然对于我来说,文字还是在放松状态下才能够写的出来。
这几日就是在家摆烂,顺便一点一点的还以前的旧债。
果然对于我来说,文字还是在放松状态下才能够写的出来。
这几日就是在家摆烂,顺便一点一点的还以前的旧债。
在 VScode 中配置前端代码格式化,可以通过以下几个步骤进行:
Prettier 是一个流行的代码格式化工具,支持很多编程语言,包括 JavaScript、TypeScript、HTML 和 CSS。
通过修改 .vscode/settings.json 文件来配置 Prettier 格式化选项:
在 React 项目的根目录下创建(如果没有的话)一个 .vscode/settings.json 文件,添加以下内容:
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true, // 保存时自动格式化
"prettier.singleQuote": true, // 使用单引号
"prettier.trailingComma": "es5", // 在可能的情况下,添加尾随逗号
"prettier.semi": true, // 结尾加分号
"prettier.tabWidth": 2 // 缩进宽度
}.prettierrc 文件(可选)为了让团队中的每个人都使用相同的代码格式,可以在项目根目录下添加一个 .prettierrc 配置文件,内容如下:
{
"singleQuote": true,
"trailingComma": "es5",
"semi": true,
"tabWidth": 2
}这样,无论是使用 Prettier 插件,还是通过命令行运行 prettier,都会遵循这些配置。
单调队列
单调队列相比于一般的队列来说,多了一个队尾出队。
一般的队列是秉持先进先出的原则,所以是队尾入队,对头出队。
单调队列中的元素相比于一般队列来说,多了单调性。队列内的元素始终保持单调,即单调递减或者单调递增。
队尾出对的条件:队列不空(应对第一个加入的元素)且有新元素加入时,新元素更优。
这个新元素更优分两种情况。如果是单调递增的一组元素来说。队尾进入的元素是越小越优,也就是越小越可以排到前面。所以当元素入队之后可以使用while循环对从队尾开始的每一个元素进行判断,如果比它大就踢出队列,直到队列为空或者遇到第一个比新元素小于或者等于的元素。然后将新元素加入队列。对于单调递减的一组元素来说,这个更优的情况就是元素越大越优,越可以排到前面。
队头出队的条件是队头元素滑出窗口
例程:
#include <bits/stdc++.h>
using namespace std;
int q[1000];
int a[1000];
int k, n;
int main()
{
int h = 1, t = 0;
cin >> n >> k;
for (int i = 1; i <= n; i ++)
cin >> a[i];
for (int i = 1; i <= n; i ++)
{
while (t >= h && a[q[t]] >= a[i]) t --;
q[++t] = i;
if (q[h] < i - k + 1) h ++;
if (i >= k) printf("%d ", a[q[h]]);
}
return 0;
} 单调队列是用来维护一个滑动的定长窗口内的单调序列,从队头取最值,进行计算或者转移。
单调栈是维护一个固定的变长窗口[1, i]内的单调序列,从栈顶取最值,进行计算或转移。
每个元素从栈顶入栈,淘汰元素从栈顶出栈。
淘汰的机制是和单调队列相似的,也是如果要维护一个单调递减的序列,从栈顶取的是最大值,则越大越优,维护一个单调递增的序列,从栈顶取最小值,越小越优
例程:
#include <bits/stdc++.h>
using namespace std;
const int N = 3e6 + 10;
int a[N];
int q[N];
int ans[N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i ++)
cin >> a[i];
int top = 0;
for (int i = 1; i <= n; i ++)
{
while (top > 0 && a[q[top]] < a[i])
{
ans[q[top]] = i;
top --;
}
q[++top] = i;
}
for (int i = 1; i <= n; i ++)
cout << ans[i] << ' ' ;
return 0;
} 最近因为我的游戏本放在宿舍,在实验室只留了一个轻薄本用来远程。所以推视觉小说比较多。
有的时候在想现在的经历,觉得如果有回档就好了。我想要回到之前的某一个时间节点去做另外一个选择。
但是又转念一想,或许不同的线,命运都给我书写好了,现在做的无非就是最后到达某一个结局而已。除了有非常明确的目标,不然最后打出的都是”无好感线“,对应到现实可能就是什么都想做,却没有个明确的主线去串联起我的行为,最后就是平平庸庸泯然众人。
但是平庸也没什么不好,我现在这样并不是上天不公,或者社会不公平,可能仅仅是某一个晚上,我选择打伞去逛操场。但是在另外一条线或者另外的很多线里面,很多事情都是发生的。对于目前来说,专注于现在就好了。结局有很多,对于我个人在哲学意义上来说,单纯的为了拥有某个结局而去努力是没有意义的,因为最后的最后结局都有的。所以,不管是有明确的目标也好,还是没有,都是没关系的。
在去往某条线上的经历,那些体验过的美好,看过的风景才是重要的。
先是指定版本
version: '3'现在已被废除,不需要写了
然后指定 service
每个service 都指定build字段或者image字段看是从dockerfile上构建镜像还是从拉取镜像
服务的名称直接缩进一格就好
container_name指定容器名称
ports指定开放的端口
depends_on指定该服务需要在哪些服务启动之后启动
environment指定环境变量
volumes指定数据卷
就是数据和容器内数据的映射
比如将容器内的某个文件夹保存在宿主机内的某个地方
也可以用docker的数据卷做持久化,在最外层需要多一个volumes字段,缩进一格放数据卷名称
在配置mysql的时候可以将sql文件映射到容器内/docker-entrypoint-initdb.d目录
映射好之后,容器启动会自动运行目录里面的sql文件。需要注意的是只有在首次创建数据库的时候会执行。所有如果对mysql做了持久化,就是将容器内/var/lib/mysql的东西映射到了本地或者数据卷,后面再次启动就不会执行,除非将持久化的内容删了,然后重新创建
mysql环境变量
environment:
MYSQL_ROOT_PASSWORD: root123 # root密码(必需)
MYSQL_DATABASE: # 创建的数据库名
MYSQL_USER: # 创建的用户名
MYSQL_PASSWORD: # 用户密码
容器间通信需要使用networks来指定一个网络,和volume一样最后在配置url的时候将localhost或者127.0.0.1变成对应的服务名。
但是好像不用network指定网络也行。不过就是确实需要对应为服务名就是了。
更正:
可能是windows上的docker比较新,可以不指定network就默认为一个network,但是我部署到linux上的时候,ubuntu上装的一个docker compose就不支持,加上networks字段之后才正常工作
如果就是容器内自己用的话像是mysql,redis这种的端口应该就不用暴露出去,因为暴露出去是给宿主机用的。如果只是容器之间用的话就不暴露也行。
可以使用环境变量的方式配置application.propertiess里面的配置。将字段改为全大写,点变为短下划线即可。
最后使用
docker compose up -d来后台启动
如果想要重新构建镜像可以使用
docker compose build后面可以跟上对应的服务名表示单独构建某一个镜像
使用
docker compose down来停止和删除容器
等于 stop + rm
示例:
services:
qiannian:
build: ./qiannian
ports:
- "8080:8080"
depends_on:
- mysql
- redisL
networks:
- qiannian_network
ocr:
build: ./ocr
networks:
- qiannian_network
aiservice:
build: ./ai_service
networks:
- qiannian_network
mysql:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: qiannian
networks:
- qiannian_network
volumes:
- qiannian_mysql:/var/lib/mysql
- ./qiannian/script.sql:/docker-entrypoint-initdb.d/script.sql
redisL:
image: redis:6.2-alpine
container_name: redis
networks:
- qiannian_network
volumes:
qiannian_mysql:
networks:
qiannian_network:
driver: bridge