当前位置: 首页 > news >正文

docker-操作实战

前言

C++镜像制作

因为我平常不用,所以不书写了

SpringBoot 微服务镜像制作

mkdir java
ca java
cp /data/maxhou/myapp/xxx.jar .
vi Dockerfile

FROM openjdk:8
COPY ./xxx.jar /app.jar
CMD ["java","-jar","/app.jar"]

COPY ./xxx.jar /app.jar就是把宿主机当前目录下的jar包拷贝到镜像目录里面,并改名
CMD就是在创建镜像的时候启动容器的默认命令
docker build -t springboot:v0.1 .
在这里插入图片描述
dokcer run -d --name myspringboot1 -p 8888:8080 springboot:v0.1
docker ps
docker logs -f myspringboot1

看的出来这个springboot程序占用的是8080端口,为什么会打印出这个呢
因为CMD命令启动了jar包,CMD就是在创建容器的时候发动的
在这里插入图片描述

CMD与EntryPoint实战

基础知识

ENTRYPOINT和CMD都是在docker image里执行一条命令, 但是他们有一些微妙的
区别.一般来说两个大部分功能是相似的都能满足。
比如执行运行一个没有调用ENTRYPOINT或者CMD的docker镜像, 返回错误,一般
的镜像最后都提供了CMD或者EntryPoint作为入口。
覆盖
在写Dockerfile 时, ENTRYPOINT或者CMD命令会自动覆盖之前的ENTRYPOINT
或者CMD命令.
在docker镜像运行时, 用户也可以在命令指定具体命令, 覆盖在Dockerfile里的命令.
如果你希望你的docker镜像只执行一个具体程序, 不希望用户在执行docker run的时
候随意覆盖默认程序. 建议用ENTRYPOINT.
就是写了很多个CMD和EntryPoint,只会执行最后一个,后面的会把前面的覆盖掉
docker run的时候指定命令的话,会覆盖CMD,而EntryPoint不会被覆盖,docker run的时候指定–entrypoint,就可以覆盖EntryPoint了

Shell 和 Exec模式

ENTRYPOINT和CMD指令支持2种不同的写法: shell表示法和exec表示法.
CMD命令语法
shell模式就是直接把命令放在后面,exec模式就是把命令用双引号用json数组的形式放在里面

Shell 
#EXEC 语法 
CMD ["executable","param1","param2"] (exec form, this is the 
preferred form) 
#用于给ENTRYPOINT 传入参数,推荐使用 
CMD ["param1","param2"] (as default parameters to ENTRYPOINT) 
#shell 语法 
CMD command param1 param2 (shell form) 

ENTRYPOINT语法

Shell EXEC 语法 
ENTRYPOINT ["executable", "param1", "param2"] (exec form, 
preferred) Shell 语法 
ENTRYPOINT command param1 param2 (shell form) 

当使用shell表示法时, 命令行程序作为sh程序的子程序运行, docker用/bin/sh -c的语
法调用. 如果我们用docker ps命令查看运行的docker, 就可以看出实际运行的是
/bin/sh -c 命令。这样运行的结果就是我们启动的程序的PID不是1,如果从外部发送
任何POSIX信号到docker容器, 由于/bin/sh命令不会转发消息给实际运行的命令, 则
比特就业课
不能安全得关闭docker容器。
EXEC语法没有启动/bin/sh命令, 而是直接运行提供的命令, 命令的PID是1. 无论你用
的是ENTRYPOINT还是CMD命令, 都强烈建议采用exec表示法。

CMD nginx -g “daemon off;”shell模式
执行的是 /bin/sh -c “nginx -g “daemon off;””-------》nginx的pid不是1,sh的pid才是1
如果docker stop的时候,并不会把指令转发给nginx,nginx最后也是强制结束,不是正常结束
CMD [“nginx”,“-g”, “daemon off;”]exec模式
nginx -g "daemon off;"这个就是这样运行的----》nginx的pid是1,docker stop会把停止信号发给nginx 进程,nginx进程就会优雅的结束
所以我们推荐使用exec模式

组合模式
组合使用ENTRYPOINT和CMD, ENTRYPOINT指定默认的运行命令, CMD指定默认
的运行参数.ENTRYPOINT和CMD同时存在时, docker把CMD的命令拼接到
ENTRYPOINT命令之后, 拼接后的命令才是最终执行的命令.
组合使用ENTRYPOINT和CMD,CMD会作为参数传递给ENTRYPOINT所有ENTRYPOINT单独负责可执行程序,CMD单独负责参数,推荐这个

实战-多次覆盖

mkdir cmd
cd cmd
vi Dockerfile

FROM busybox
CMD echo "hello world!"
CMD echo "hello bit!"

docker build -t cmd:v0.1 .
在这里插入图片描述
docker run -it --rm cmd:v0.1
在这里插入图片描述
说明后面的覆盖前面的了
cp Dockerfile Dockerfile2

vi Dockerfile2

FROM busybox
ENTRYPOINT echo "hello world!"
ENTRYPOINT echo "hello bit!"

ENTRYPOINT 也是这样的
docker build -t cmd:v0.2 -f Dockerfile2 .
docker run -it --rm cmd:v0.2
在这里插入图片描述

参数覆盖

docker run -it --rm cmd:v0.1 echo hello bit2!
在这里插入图片描述
说明docker run的指令会把CMD覆盖
docker run -it --rm cmd:v0.2 echo hello bit2!
在这里插入图片描述
我们发现ENTRYPOINT是不会被docker run的指令覆盖的,还是会执行ENTRYPOINT的
我们要覆盖entrypoint的话,就要指定–entrypoint
docker run -it --entrypoint “/bin/sh” --rm cmd:v0.2 -c “echo hello bit2!”
在这里插入图片描述
这个就是把"/bin/sh" 覆盖为 “echo hello bit2!”,-c是指定覆盖的内容
因为是shell模式,所以只能去覆盖/bin/sh,ENTRYPOINT的内容都是/bin/sh的参数
这样我们就覆盖ENTRYPOINT了
如果是exec格式的话,
cp Dockerfile2 Dockerfile3

vi Dockerfile3

FROM busybox
ENTRYPOINT echo "hello world!"
ENTRYPOINT ["echo","hello bit!"] 

docker build -t cmd:v0.3 -f Dockerfile3 .
docker run -it --rm cmd:v0.3 echo hello bit2!
在这里插入图片描述
我们可以发现变成了这个样子
因为这个相当于把echo hello bit2!这个命令全部作为参数全部喂给了ENTRYPOINT 中的echo命令
因为在shell格式中,echo hello bit2!无法作为参数赋给/bin/sh,所以没有什么用,
所以cmd,ENTRYPOINT 可以正常运行
但是exec格式,会把docker run里面的内容作为参数喂给ENTRYPOINT 中的命令

Shell VS Exec

vi Dockerfile4

FROM ubuntu:22.04 
RUN apt-get update -y && apt install -y iputils-ping 
CMD ping localhost 

docker build -t cmd:v0.4 -f Dockerfile4 .
docker run -it --rm cmd:v0.4
在这里插入图片描述
我们发现一直在ping本机
其实命令不是ping xxxx
而是 /bin/sh -c "ping xxx "
另一个shell
docker exec -it 容器id bash
ps -ef
在这里插入图片描述
这里可以看到pid为1的 不是ping
这个就是shell格式

FROM ubuntu:22.04 
RUN apt-get update -y && apt install -y iputils-ping 
CMD ["ping", "localhost"] 

docker build -t cmd:v0.5 -f Dockerfile4 .
docker run -it --rm cmd:v0.5
另一个shell
docker ps
在这里插入图片描述
docker exec -it 容器id bash
ps -ef
在这里插入图片描述
强烈推荐使用exec格式

组合

就是ENTYRPOINT存命令
CMD存参数
vi Dockerfile6

FROM ubuntu:22.04 
RUN apt-get update -y && apt install -y iputils-ping 
ENTRYPOINT ["ping","-c","3"]
CMD ["localhost"] 

参数就是[“localhost”]

docker build -t cmd:v0.6 -f Dockerfile6 .
docker run -it --rm cmd:v0.6

在这里插入图片描述
ping了三次就自动停止了,如果没有指定,就会一直ping

docker run -it --rm cmd:v0.6 www.baidu.com
在这里插入图片描述
这样也可以
因为www.baidu.com会替换CMD,作为ENTEYPOINT的参数

合理使用dockerignore

基础知识

Docker 是 C-S 架构,理论上Client和Server可以不在一台机器上。在构建docker镜
像的时候,需要把所需要的文件由Client发送给Server,这些要发送的文件叫做
build context。
回忆一下我们之前讲到的构建镜像的命令, 在命令的最后我们加了一个.表示当前目
录, 这个目录其实就代表了build context所指向的目录。
Shell
docker build -f -t <dockerfile_name> .
如果想忽略掉一些传送给Sever端的文件, 这就会用到.dockerignore文件。它会将记
录的所有文件都忽略掉, 不会传送给Server端, 有效的避免一些和容器内应用运行
无关的文件不会被复制到Server端, 即不会将无关的文件打入生成的镜像中

实战

mkdir ignore
cd ignore
vi Dockerfile

FROM centos:7
COPY ./* /

vi .dockerignore

*.txt

这个就是会忽略txt文件
echo "hello bit data " > ./test.data
echo “hello bit txt” > ./test.txt
docker build -t ignore:v0.1 .
docker run -it --rm ignore:v0.1 bash
ll
在这里插入图片描述
我们看到并没有test.txt

多阶段构建

基础知识

构建docker镜像可以有下面两种方式
• 将全部组件及其依赖库的编译、测试、打包等流程封装进一个docker镜像中。但
是这种方式存在一些问题, 比如 Dockefile 特别长,可维护性降低;镜像的层次多,
体积大,部署时间长等问题
• 将每个阶段分散到多个 Dockerfile。一个 Dockerfile 负责将项目及其依赖库
编译测试打包好后,然后将运行文件拷贝到运行环境中,这种方式需要我们编写多个
Dockerfile 以及一些自动化脚本才能将其两个阶段自动整合起来
• 为了解决以上的两个问题,Docker 17.05版本开始支持多镜像阶段构建。只需
要编写一个 Dockerfile即可解决上述问题。
在这里插入图片描述

实战

我们先拷贝之前c++写的Dockerfile
cp -r …/cpp/* .
在这里插入图片描述
docker build -t multi:v1.0 .
docker images multi
在这里插入图片描述
docker run --rm -it multi:v1.0
在这里插入图片描述
但是镜像很大
我们来修改Dockerfile

FROM centos:7 
# 设置版本 
ENV VERSION 1.0 
#设置国内源 
RUN  sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 
's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo 
RUN yum makecache 
# 设置工作目录 
WORKDIR /src 
# 拷贝源文件 
COPY demo.c . 
# 安装gcc  
RUN yum install -y gcc && \ gcc -v 
# 编译源文件 
RUN gcc demo.c -o demo && \ rm -f demo.c && \ yum erase -y gcc 
# 运行可执行文件 
CMD ["/src/demo"] 

修改后

FROM centos:7 as buildstage
# 设置版本 
ENV VERSION 1.0 
#设置国内源 
RUN  sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 
's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo 
RUN yum makecache 
# 设置工作目录 
WORKDIR /src 
# 拷贝源文件 
COPY demo.c . 
# 安装gcc  
RUN yum install -y gcc && \ gcc -v 
# 编译源文件 
RUN gcc demo.c -o demo && \ rm -f demo.c && \ yum erase -y gcc 
# 运行可执行文件 
CMD ["/src/demo"] FROM centos:7 
COPY --from=buildstage /src/demo /src/
CMD ["/src/demo"] 

docker build -t multi:v2.0 .
docker images multi
在这里插入图片描述

docker run --rm -it multi:v2.0
在这里插入图片描述
多级构建之后大小大大的减小了

FROM centos:7 as buildstage
# 设置版本 
ENV VERSION 1.0 
#设置国内源 
RUN  sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 
's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo 
RUN yum makecache 
# 设置工作目录 
WORKDIR /src 
# 拷贝源文件 
COPY demo.c . 
# 安装gcc  
RUN yum install -y gcc && \ gcc -v 
# 编译源文件 
RUN gcc demo.c -o demo && \ rm -f demo.c && \ yum erase -y gcc 
# 运行可执行文件 
CMD ["/src/demo"] FROM busybox 
COPY --from=buildstage /src/demo /src/
CMD ["/src/demo"] 

docker build -t multi:v3.0 .
docker images multi
docker run --rm -it multi:v2.0
在这里插入图片描述
构建docker镜像可以有下面两种方式
• 将全部组件及其依赖库的编译、测试、打包等流程封装进一个docker镜像中。但
是这种方式存在一些问题, 比如 Dockefile 特别长,可维护性降低;镜像的层次多,
体积大,部署时间长等问题
• 将每个阶段分散到多个 Dockerfile。一个 Dockerfile 负责将项目及其依赖库
编译测试打包好后,然后将运行文件拷贝到运行环境中,这种方式需要我们编写多个
Dockerfile 以及一些自动化脚本才能将其两个阶段自动整合起来
• 为了解决以上的两个问题,Docker 17.05版本开始支持多镜像阶段构建。只需
要编写一个 Dockerfile即可解决上述问题。

合理使用缓存

基础知识

• 在镜像的构建过程中,Docker 会根据 Dockerfile 指定的顺序执行每个指令。在执
行每条指令之前,Docker 都会在缓存中查找是否已经存在可重用的镜像,如果有就使
用现存的镜像,不会再重复创建。
• 在上边提到 Dockerfile中的每一条指令都会产生一层image layer。当某一个
layer 修改后,后面的所有layer我们都不能使用缓存, 这一点一定要注意。
• 如果不想在构建过程中使用缓存,你可以在 docker build 命令中使用 --no
cache=true 选项。但是我们建议最好合理使用缓存, 这样可以加快构建镜像的效率。

在这里插入图片描述
在这里插入图片描述
编译软件放在上面,那么每次修改代码都能使用安装编译软件的缓存了,不然使用不到它的缓存

实战

FROM centos:7 
# 设置版本 
ENV VERSION 1.0 
#设置国内源 
RUN  sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 
's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo 
RUN yum makecache 
# 设置工作目录 
WORKDIR /src 
# 拷贝源文件 
COPY demo.c . 
# 安装gcc  
RUN yum install -y gcc && \ gcc -v 
# 编译源文件 
RUN gcc demo.c -o demo && \ rm -f demo.c && \ yum erase -y gcc 
# 运行可执行文件 
CMD ["/src/demo"] 

docker build -t mucache:v1.0 .
因为有缓存,所以构建很快

vi demo.c
在这里插入图片描述
docker build -t mucache:v2.0 .
这次就很慢了

在这里插入图片描述
看的出来第一次构建用了0.1s
第二次用了20多s

FROM centos:7 
# 设置版本 
ENV VERSION 1.0 
#设置国内源 
RUN  sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 
's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo 
RUN yum makecache 
# 设置工作目录 
WORKDIR /src 
# 安装gcc  
RUN yum install -y gcc && \ gcc -v 
# 拷贝源文件 
COPY demo.c . 
# 编译源文件 
RUN gcc demo.c -o demo && \ rm -f demo.c && \ yum erase -y gcc 
# 运行可执行文件 
CMD ["/src/demo"] 

现在优化一下顺序

docker build -t mucache:v3.0 .

在这里插入图片描述
vi demo.c

docker build -t mucache:v4.0 .
在这里插入图片描述
这样就变快了

总结

相关文章:

docker-操作实战

前言 C镜像制作 因为我平常不用&#xff0c;所以不书写了 SpringBoot 微服务镜像制作 mkdir java ca java cp /data/maxhou/myapp/xxx.jar . vi Dockerfile FROM openjdk:8 COPY ./xxx.jar /app.jar CMD ["java","-jar","/app.jar"]COPY ./…...

后大模型时代智能体将成为“新宠”

智能体 |未来已来 智能体 |市场井喷 智能体 |定义 智能体 |与大模型的区别 智能体 |与Copilot的区别 智能体 |企业价值 智能体 |个体价值 智能体 |开发流程 智能体 |提示词解读 智能体 |应用场景 智能体 |重难点问题...

【MySQL】监控MySQL

目录 使用状态变量监控MySQL 使用性能模式&#xff08;Performance Schema&#xff09;监控MySQL 1.性能模式 2.性能模式设置表 3.sys模式 使用状态变量监控MySQL 使用 show status 语句评估系统运行状况。 可以添加范围修饰符global或session来显示全局或本地状态信息。…...

CTF类题目复现总结-[BSidesSF2020]toast-clicker 1

一、靶场地址 https://buuoj.cn/challenges#[BSidesSF2020]toast-clicker1二、复现步骤 1、下载压缩包&#xff0c;解压是apk文件&#xff1b; 2、利用 jadx apk反编译工具&#xff1b; jadx下载地址&#xff1a;https://github.com/skylot/jadx67, 83, 68, 120, 62, 109, …...

(更新完)Supplementary Material——AZ-NAS

6. Supplementary Material 在本补充材料中&#xff0c;我们提供了 AZ-NAS 在 NDS [18]、NAS-Bench-201 [7] 和 MobileNetV2 [14, 19] 搜索空间上的额外结果和深入分析。 Additional results on the NDS benchmark. 神经设计空间&#xff08;NDS&#xff09; [18] 基准提供了…...

基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此网上销售信息的…...

TCP | 序列号和确认号 [逐包分析] | seq / ack 详解

注 &#xff1a; 本文为 “TCP 序号&#xff08;seq&#xff09;与确认序号&#xff08;ack&#xff09;” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 如有内容异常&#xff0c;请看原文。 Understanding TCP Seq & Ack Numbers […...

Citus源码(1)分布式表行为测试

最近对citus的实现非常好奇&#xff0c;本篇对citus的行为做一些测试。本篇只测行为&#xff0c;不分析源码。后面会继续写一系列文章分析citus源码。 环境&#xff1a;3节点 PG17 with citus。 SELECT citus_set_coordinator_host(127.0.0.1, 3001); SELECT citus_add_node(1…...

【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解

DeepSeek API 快速入门&#xff1a;获取 API Key 与调用 API 步骤详解 一、获取 API Key二、调用 DeepSeek API方法 1&#xff1a;使用 OpenAI Python SDK 调用 DeepSeek API方法 2&#xff1a;使用 requests 库直接发送 HTTP 请求方法 3&#xff1a;使用 curl 命令 相关链接 一…...

Web前端之UniApp、Taro、ReactNative和Flutter的区别

MENU 前言介绍及公司技术差异使用方法使用场景差异注意事项打包与部署差异框架应用实例结语 前言 在移动应用开发领域&#xff0c;跨平台框架已成为开发者的得力工具。UniApp、Taro、ReactNative和Flutter它们在Android&#xff08;安卓&#xff09;或iOS&#xff08;苹果&…...

[leetcode]map的用法

1. 定义和初始化 定义&#xff1a;std::map是一个关联容器&#xff0c;键值对会自动根据键的值进行排序&#xff08;默认是升序&#xff09;。 cpp复制 map<char, int> mp; 插入元素&#xff1a;可以通过operator[]或insert方法插入键值对。 cpp复制 mp[a] 1; mp[b] 3…...

PHP大马的使用

BestShell/best_php_shell.php at master Kevil-hui/BestShell 这里用到的是这位师傅的大马&#xff08;主要是从头开始写一个大马实在太麻烦了&#xff09; 用pikachu靶场进行上传的测试 在这里传马&#xff0c;这个是简单的前端校验&#xff0c;bp抓包改后缀就好了 上传成…...

【CC2530 教程 十】CC2530 Z-Stack 协议栈

一、Z-Stack 协议栈目录结构&#xff1a; Z-Stack 协议栈可以从 TI 官网免费下载&#xff0c;下载安装完成以后&#xff0c;会默认在 C 盘的根目录下创建 Texas Instruments 目录&#xff0c;该目录下的子目录就是安装的 Z-Stack 文件&#xff0c;并且在该子目录下创建Accessor…...

区间端点(java)(贪心问题————区间问题)

deepseek给了一种超级简单的做法 我是真的想不到 贪心的思路是 局部最优——>全局最优 这种我是真的没有想到&#xff0c;这样的好处就是后面便利的时候可以通过foreach循环直接便利qu的子元素也就是对应的某一个区间, 将一个二维数组变成一维数组&#xff0c;每一个一维…...

定长内存池原理及实现

目录 一、池化技术 二、内存池 三、内存池主要解决的问题 四、定长内存池的实现 1.定长内存池的原理 2.框架 3.Delete实现 4.New实现 5.性能测试 五、源码 FixedMemoryPool.h test.cc 一、池化技术 所谓“池化技术”&#xff0c;就是程序先向系统申请过量的资源&…...

通过php连接redis数据库

如上图所示&#xff0c;这是去搭建一个lamp平台&#xff0c; 阿帕奇和php安装好之后&#xff0c;php直接就被安装成阿帕奇的一个功能模块。 如上图所示&#xff0c;这就是php作为阿帕奇的功能模块。 如上图所示&#xff0c;我们去正常启动redis数据库。 如上图所示&#xff0c…...

3D点云的深度学习网络分类(按照作用分类)

1. 3D目标检测&#xff08;Object Detection&#xff09; 用于在点云中识别和定位目标&#xff0c;输出3D边界框&#xff08;Bounding Box&#xff09;。 &#x1f539; 方法类别&#xff1a; 单阶段&#xff08;Single-stage&#xff09;&#xff1a;直接预测3D目标位置&am…...

论文解读:《Word embedding factor based multi-head attention》——基于词嵌入因子的多头注意力

原文链接&#xff1a;Word embedding factor based multi-head attention | Artificial Intelligence Review 多头注意力机制线性地将查询、键和值投影到不同的子空间中&#xff0c;允许模型从不同的角度理解输入序列&#xff0c;并利用输入句子序列中有关令牌之间关系的信息。…...

单片机和微控制器知识汇总——《器件手册--单片机、数字信号处理器和可编程逻辑器件》

目录 四、单片机和微控制器 4.1 单片机(MCU/MPU/SOC) 一、定义 二、主要特点 三、工作原理 四、主要类型 五、应用领域 六、选型与设计注意事项 七、发展趋势 4.2 数字信号处理器(DSP/DSC) ​编辑​编辑 一、定义 二、工作原理 三、结构特点 四、应用领域 五、选型与设计注…...

LeetCode hot 100 每日一题(15)——48.旋转图像

这是一道难度为中等的题目&#xff0c;让我们来看看题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 提示…...

Java多线程精讲:线程操作与状态转换全解析

前言 本章内容为作者结合学习与实践的总结整理&#xff0c;虽力求准确&#xff0c;但疏漏之处在所难免。若有任何疑问或建议&#xff0c;恳请读者朋友们不吝指正&#xff0c;共同完善知识体系&#xff0c;感激不尽&#xff01; 一、认识多线程&#xff08;Thread&#…...

HashMap的位操作是什么?HashSet 的 contains 方法复杂度是多少?红黑树简单讲一下?

一、HashMap 的位操作设计 HashMap 使用位运算优化哈希计算与索引定位&#xff0c;核心场景如下&#xff1a; 哈希扰动函数 计算键的哈希值时&#xff0c;将高16位与低16位异或&#xff1a; static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hash…...

GitHub开源的容器管理面板-Dpanel

dpanel Docker安装部署二进制部署 GitHub官网 一块轻量化docker可视化管理面板&#xff0c;由国人开发&#xff0c;个人觉得是比较好用的&#xff0c;功能都很齐全&#xff0c;并且可以通过修改源码&#xff0c;自定义前端样式等。 Docker安装部署 官网 部署环境&#xff1…...

vue-将组件内容导出为Word文档-docx

1. 安装依赖 首先&#xff0c;我们需要安装docx库&#xff0c;以便在前端生成Word文档。可以通过以下命令进行安装&#xff1a; npm install docx 2. 实现导出功能 2.1 初始化文档 使用docx库创建一个新的文档实例&#xff0c;并定义文档的结构和内容。我们使用Document、…...

IMX6ULL学习篇——系统学习设备树

IMX6ULL学习篇——系统学习设备树 ​ 这篇博客的目的是系统的整理一下设备树当中的一些非常基本的概念。基于之前的学习&#xff0c;我们已经至少掌握了字符设备的基本的框架&#xff0c;编写一个最简单的字符设备简单的流程。 ​ 但是我们知道&#xff0c;一个外设很有可能是…...

使用vector构造杨辉三角形

力扣118题&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1…...

亮数据爬取API爬取亚马逊电商平台实战教程

前言 在当今数据驱动的商业环境中&#xff0c;企业需要快速、精准地获取互联网上的公开数据以支持市场分析、竞品调研和用户行为研究。然而&#xff0c;传统的手动网页爬取方式面临着诸多挑战&#xff1a;IP封锁、验证码干扰、网站结构频繁变更&#xff0c;以及高昂的运维成本…...

AI+金融 应用 使用DeepSeek、Qwen等大模型输入自然语言,得到通达信等行情软件公式代码,导入后使用

AI金融 应用 使用DeepSeek、Qwen等大模型输入自然语言&#xff0c;得到通达信等行情软件公式代码&#xff0c;导入后使用。不会编程&#xff0c;也能行情软件中实现个性化条件选股&#xff0c;个性化技术指标。 AIbxm低估值趋势选股策略&#xff0c;参考提示词&#xff1a; 编…...

SmolVLM2: 让视频理解能力触手可及

一句话总结: SmolVLM 现已具备更强的视觉理解能力&#x1f4fa; SmolVLM2 标志着视频理解技术的根本性转变——从依赖海量计算资源的巨型模型&#xff0c;转向可在任何设备运行的轻量级模型。我们的目标很简单: 让视频理解技术从手机到服务器都能轻松部署。 我们同步发布三种规…...

去中心化金融

什么是去中心化金融 去中心化金融&#xff08;Decentralized Finance&#xff0c;简称 DeFi&#xff09;是一种基于区块链技术构建的金融系统&#xff0c;旨在通过去除传统金融机构&#xff08;如银行、证券公司等&#xff09;作为中介&#xff0c;提供各种金融服务。这些服务…...

Mysql并发事务带来哪些问题?

大家好&#xff0c;我是锋哥。今天分享关于【Mysql并发事务带来哪些问题?】面试题。希望对大家有帮助&#xff1b; Mysql并发事务带来哪些问题? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 MySQL 中&#xff0c;事务并发执行时会引发一系列问题&#xff0c…...

PCL 点云多平面探测

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 Open3D为我们提供了一种点云多平面探测的算法,该算法使用基于鲁棒统计的方法进行平面补丁检测。该算法具体过程:首先将点云细分为更小的块(使用二分法),然后尝试为每个点云块匹配一个平面。如果平面通过了鲁棒平…...

OpenBMC:BmcWeb添加路由5 设置handler函数

对路由对象完成了权限和method的设置后,最重要的就是设置路由的处理函数: //http\routing\taggedrule.hpptemplate <typename... Args> class TaggedRule :public BaseRule,public RuleParameterTraits<TaggedRule<Args...>> {...template <typename F…...

攻破tensorflow,勇创最佳agent(2)---损失(loss) 准确率(accuracy)问题

实战播: 怎么判定一个模型好不好,你设置的值对不对? 需要再看几个值: 例如: model Sequential()for units in model_structure:model.add(Dense(units, activationrelu))model.add(Dropout(train_config.get(dropout_rate, 0.3)))model.add(Dense(1, activationsigmoid)) 他…...

括号合法题

一、括号合法题 2116. 判断一个括号字符串是否有效 //采用从左往右和从右往左遍历的贪心算法&#xff0c;分别保证前缀合法&#xff0c;后缀合法。public boolean canBeValid(String s, String locked) {int ns.length();if (n%21) return false;int num0;// 从左到右扫描&…...

C++11之深度理解lambda表达式

前言 在现代C中&#xff0c;Lambda表达式提供了一种简洁而强大的方式来定义匿名函数&#xff0c;使代码更具可读性和灵活性。自C11引入Lambda以来&#xff0c;它已经成为STL算法、并发编程和回调机制中的重要工具。随着C14、C17和C20的不断演进&#xff0c;Lambda的功能也在不断…...

字符串常量,数组和指针的不同形式

在 C 语言中&#xff0c;字符串 "hello" 存储在内存中是一个字符数组&#xff0c;它的内存布局通常如下&#xff1a; 1. 字符串常量区&#xff1a; 字符串常量&#xff08;如 "hello"&#xff09;是存储在程序的数据段&#xff08;通常称为 .data 或 .ro…...

全面讲解python的uiautomation包

在常规的模拟鼠标和键盘操作&#xff0c;我们一般使用pyautogui&#xff0c;uiautomation模块不仅能直接支持这些操作&#xff0c;还能通过控件定位方式直接定位到目标控件的位置&#xff0c;而不需要自己去获取对应坐标位置。uiautomation模块不仅支持任意坐标位置截图&#x…...

性能测试笔记

8、JMeter扩展开发 扩展组件开发的意义 输入参数协议复杂调用逻辑功能等等 开发前的工具准备 下载jdk并安装&#xff0c;配置环境变量下载maven&#xff0c;配置环境变量修改settings.xml本地仓库&#xff0c;远程仓库的地址Eclipse新建Maven项目编辑 pom.xml Maven常用命令…...

相对位置2d矩阵和kron运算的思考

文章目录 1. 相对位置矩阵2d2. kron运算 1. 相对位置矩阵2d 在swin-transformer中&#xff0c;我们会计算每个patch之间的相对位置&#xff0c;那么我们看到有一连串的拉伸和相减&#xff0c;直接贴代码&#xff1a; import torch import torch.nn as nntorch.set_printoptio…...

从C语言开始的C++编程生活(2)

前言 本系列文章承接C语言的学习&#xff0c;需要有C语言的基础才能学会哦~ 第2篇主要讲的是有关于C的缺省参数和函数重载。 C才起步&#xff0c;都很简单呢&#xff01; 目录 前言 缺省参数 基本语法 缺省参数的作用 函数重载 基本语法 重载的作用 缺省参数 缺省参数…...

【设计模式】深入解析装饰器模式(Decorator Pattern)

深入解析装饰器模式&#xff08;Decorator Pattern&#xff09; 一、装饰器模式的核心概念 装饰器模式是一种结构型设计模式&#xff0c;用于动态地给对象添加新功能&#xff0c;而不改变其原始代码。 1. 为什么需要装饰器&#xff1f; 避免继承带来的类爆炸问题&#xff1…...

K8S集群新增和删除Node节点(K8s Cluster Adds and Removes Node Nodes)

实战&#xff1a;在已有K8S集群如何新增和删除Node节点 在Kubernetes (K8S) 集群中&#xff0c;Node节点是集群中的工作节点&#xff0c;它们运行着容器的实际实例。管理K8S集群中的Node节点&#xff0c;包括新增和删除节点&#xff0c;是一个常见且重要的操作&#xff0c;可以…...

2503C++,C++标准的执行

最优雅的应该是c26刚刚引入的std::execution,通过sender/receiver模型和常用的异步算法来简化调用异步逻辑,还可随时改成协程. #include <stdexec/execution.hpp> #include <exec/static_thread_pool.hpp> int main() {exec::static_thread_pool pool(3);auto sch…...

nodejs中实现一个自定义的require方法

1.前言 大家对nodejs中的require方法应该不会陌生,这个方法可以用来导入nodejs的内置模块,自定义模块,第三方模块等,使用频率非常高,那么这个方法内部是如何实现的呢?本篇文章就是从头到尾拆分实现流程,最终实现一个自定义的require方法的 2.前置操作 导入所需的nodejs内置…...

vscode/cursor中python运行路径设置 模块导入问题

vscode/cursor中python运行路径设置 ## 文件路径设置 问题描述 pycharm的项目用cursor运行&#xff0c;出现目录找不到 后来利用 os.getcwd()&#xff0c;经过打印调试发现是IDE的本身配置问题 pycharm中&#xff0c;os.getcwd()默认打开当前脚本所在目录 vscode/cursor中…...

Spring学习笔记05——Spring Boot的文件结构2(POJO类)

在Spring Boot项目中&#xff0c;将Entity、DTO、VO放在POJO子模块中是一种常见的分层设计&#xff0c;它们各自承担不同的职责&#xff0c;通过一个通俗的例子来解释它们的作用&#xff1a; POJO&#xff08;Plain Old Java Object&#xff09;是指普通的、简单的Java对象&am…...

html和css 实现元素顺时针旋转效果(椭圆形旋转轨迹)

一 实现效果 二 实现代码 我自己是用react写的。 1. react 代码如下&#xff1a; import React from "react"; import styles from "./index.less";export default () > {return <div className{styles.containers}><div className{styles.c…...

C# 的Lambda表达式‌常见用法和示例

C# 的 ‌Lambda 表达式‌是一种强大的语法糖&#xff0c;能够极大简化代码并增强灵活性。以下是它的主要功能和应用场景&#xff0c;结合具体示例说明&#xff1a; 1. ‌简化委托实例化‌ Lambda 可以快速定义委托&#xff08;如 Func、Action&#xff09;&#xff0c;无需显式…...

2024年数维杯数学建模C题天然气水合物资源量评价解题全过程论文及程序

2024年数维杯数学建模 C题 天然气水合物资源量评价 原题再现&#xff1a; 天然气水合物&#xff08;Natural Gas Hydrate/Gas Hydrate&#xff09;即可燃冰&#xff0c;是天然气与水在高压低温条件下形成的类冰状结晶物质&#xff0c;因其外观像冰&#xff0c;遇火即燃&#…...