Docker数据管理,端口映射与容器互联
1.Docker 数据管理
在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。
容器中的管理数据主要有两种方式:
数据卷(Data Volumns):容器内数据直接映射到本地主机环境;
数据卷容器(Data Volume Containers):使用特定容器维护数据卷。
本章将首先介绍如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。接下来,介绍如何使用数据卷容器在容器和主机、、容器和容器之间共享数据,并实现数据的备份和恢复。
1.1 数据卷
数据卷(Data Volumes) 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于Linux 中的mount行为。
数据卷可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;
- 对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
- 对数据卷的更新不会影响镜像,解耦开应用和数据;
- 卷会一直存在,直到没有容器使用,可以安全地卸载它。
1. 创建数据卷
Docker提供了volume子命令来管理数据卷,如下命令可以快速在本地创建一个数据卷:
[root@open-Euler2 ~]# docker volume create -d local test
test
此时,查看/var/lib/docker/volumes 路径下,会发现所创建的数据卷位置:
[root@open-Euler2 ~]# ll /var/lib/docker/volumes/
drwx-----x 3 root root 4096 Mar 10 14:55 test
挂载数据卷到容器
当你启动一个容器时,可以使用 -v
或 --mount
标志将数据卷挂载到容器中。
使用 -v
或 --volume
标志:
docker run -d -P --name my-nginx -v test:/usr/share/nginx/html nginx
在这个例子中,test数据卷被挂载到容器 my-nginx
的 /usr/share/nginx/html
目录下。
使用 --mount
标志:
docker run -d -P --name my-nginx --mount source=test,target=/usr/share/nginx/html nginx
访问数据卷
一旦数据卷被挂载到容器中,你可以通过访问容器内的指定路径来读写数据卷中的数据。
例如,在上面的例子中,你可以通过访问容器内 /usr/share/nginx/html
目录来读写 test
数据卷。
除了 create 子命令外, docker volume 还支持 inspect (查看详细信息)、 ls (列出已有数据卷)、 prune (清理无用数据卷)、 rm (删除数据卷)等,大家可以自行实践。
2.绑定数据卷
除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意路径挂载到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
在用docker [container] run命令的时候,可以使用 -mount 选项来使用数据卷。
- mount 选项支持三种类型的数据卷,包括:
- volume :普通数据卷,映射到主机/var/lib/docker/volumes 路径下,指定卷名即可;
- bind:绑定数据卷,映射到主机指定路径下,需要指定绝对路径;
- tmpfs :临时数据卷,只存在于内存中。
不过建议使用-v选项来实现
下面使用 nginx:latest 镜像创建一个Web容器,并创建一个数据卷挂载到容器的/opt/webapp目录:
[root@open-Euler2 webapp]# docker run -itd -P --name web1 -v /webapp/:/opt/webapp nginx:latest
[root@open-Euler2 webapp]# docker exec -it web1 bash
root@dab5895f9464:/# ls /opt/webapp/
index.html
这个功能在进行应用测试的时候十分方便,比如用户可以放置一些程序或数据到本地目录中实时进行更新,然后在容器内运行和使用。
另外,本地目录的路径必须是绝对路径,容器内路径可以为相对路径。 如果容器内目录不存在, Docker会自动创建。
Docker 挂载数据卷的默认权限是读写(rw),用户也可以通过ro指定为只读:
docker run -d -P --name web2 -v /webapp:/opt/webapp:ro nginx:latest
加了 :ro 之后,容器内对所挂载数据卷内的数据就无法修改了。
1.2 数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。 数据卷容器也是一个容器,但是它的目的是 专门提供数据卷给其他容器挂载。
首先,创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到 /dbdata并查看/dbdata目录::
然后,可以在其他容器中使用--volumes-from来挂载 dbdata 容器中的数据卷,例如创建 db1 和 db2 两个容器,并从dbdata容器挂载数据卷:
[root@open-Euler2 webapp]# docker run -it --volumes-from dbdata --name db1 ubuntu
[root@open-Euler2 webapp]# docker run -it --volumes-from dbdata --name db2 ubuntu
此时,容器 db1 和db2 都挂载同一个数据卷到相同的/dbdata 目录,三个容器任何一方在该目录下的写入,其他容器都可以看到。
例如,在dbdata容器中创建一个test文件:
[root@open-Euler2 webapp]# docker start dbdata
dbdata
[root@open-Euler2 webapp]# docker exec -it dbdata bash
root@8f509839eca1:/# cd /dbdata
root@8f509839eca1:/dbdata# touch test
root@8f509839eca1:/dbdata# ls
test
在db1容器内查看它:
[root@open-Euler2 webapp]# docker start db1
db1
[root@open-Euler2 webapp]# docker exec -it db1 bash
root@b8443834a4a7:/# ls /dbdata
test
可以多次使用--volumes-from参数来从多个容器挂载多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷:
docker run -d --name db3 --volumes-from dbl ubuntu
注意:使用--volumns-from参数所挂载数据卷的容器自身并不需要保持在运行状态
如果删除了挂载的容器(包括dbdata、 db工和 db2 ),数据卷并不会被自动删除。 如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
1.3 利用数据卷容器来迁移数据
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
1. 备份
使用下面的命令来备份 dbdata 数据卷容器内的数据卷:
[root@open-Euler2 ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/test
[root@open-Euler2 ~]# ll
total 76784
-rw-------. 1 root root 884 Jan 10 11:11 anaconda-ks.cfg
-rw-r--r-- 1 root root 10240 Mar 10 16:58 backup.tar
drwxrwxr-x 2 1000 docker 4096 Feb 26 18:43 docker
-rw-r--r-- 1 root root 78603326 Feb 26 22:56 docker-28.0.1.tgz
这个命令稍微有点复杂,具体分析下。
首先利用ubuntu镜像创建了一个容器worker。使用--volumes-from dbdata参数来让worker容器挂载 dbdata容器的数据卷(即dbdata数据卷);使用-v $ (pwd) : /backup 参数来挂载本地的当前目录到worker容器的/backup 目录。
worker容器启动后,使用 tar cvf /backup/backup.tar /dbdata 命令将/dbdata 下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。
2. 恢复
如果要恢复数据到一个容器,可以按照下面的操作。
首先创建一个带有数据卷的容器dbdata2:
[root@open-Euler2 ~]# docker run -itd -v /dbdata --name dbdata2 ubuntu bash
b5c28bbf44911bed8f49e64c19037975b710b908c84b91479e8223ae56beee8e
然后创建另一个新的容器,挂载dbdata2 的容器,并使用untar解压备份文件到所挂载的容器卷中:
[root@open-Euler2 ~]# docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
dbdata/
dbdata/test
1.4 本章小结
数据是最宝贵的资源。 Docker 在设计上考虑到了这点,数据卷机制为数据管理提供了方便的操作支持。 本章介绍了通过数据卷和数据卷容器对容器内的数据进行共享、备份和恢复等操作,通过这些机制,即使容器在运行中出现故障,用户也不必担心数据发生丢失,只需 要快速地重新创建容器即可。
在生产环境中,推荐在使用数据卷或数据卷容器之外,定期将主机的本地数据进行备份,或者使用支持容错的存储系统,包括RAID 或分布式文件系统,如 Ceph、 GPFS、 HDFS 等。
另外,有些时候不希望将数据保存在宿主机或容器中,还可以使用tmpfs类型的数据卷,其中数据只存在于内存中,容器退出后自动删除。
2.端口映射与容器互联
在实践中,经常会碰到需要多个服务组件容器共同协作的情况,这往往需要多个容器之间能够互相访问到对方的服务。
Docker 除了通过网络访间外, 还提供了两个很方便的功能来满足服务访问的基本需求:一个是允许映射容器内应用的服务端口到本地宿主主机;另一个是互联机制实现多个容器间通过容器名来快速访问。 本章将分别讲解这两个很实用的功能。
2.1 端口映射实现容器访问
1.从外部访问容器应用
在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。 当使用-P(大写的)标记时,Docker随机映射一个的宿主机端口到容器内部正在监听的网络端口上。
[root@open-Euler2 ~]# docker run -d -P nginx
89a9b4b7827742a901d124bf7af09a4686fae1315a91e8fa05a0a911813b03a9
[root@open-Euler2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89a9b4b78277 nginx "/docker-entrypoint.…" 3 seconds ago Up 3 seconds 0.0.0.0:32769->80/tcp, :::32769->80/tcp crazy_northcutt
此时, 可以使用docker ps看到, 本地主机的32769被映射到了容器的80端口。
访间宿主主机的端口即可访问容器内web应用提供的界面。
同样, 可以通过docker logs命令来查看应用的信息:
-p (小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。
支持的格式有:
- HostPort:ContainerPort
- IP:HostPort:ContainerPort
- IP::ContainerPort
2.映射到所有接口地址
使用 HostPort:ContainerPort 格式本地的80端口映射到容器的80端口,可以执行如下命令:
[root@open-Euler2 ~]# docker run -d -p 80:80 nginx
此时默认会绑定本地所有接口上的所有地址。多次使用-p标记可以绑定多个端口。例如:
[root@open-Euler2 ~]# docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
3.映射到指定地址的指定端口
可以使用 IP:HostPort:ContainerPort 格式指定映射使用一个特定地址和特定端口。例如:
[root@open-Euler2 ~]# docker run -d -p 192.168.121.151:80:80 nginx
955050b980528f98312c296388d43cc2e2a30e3f84403f758157b06c81a47d25
4.映射到指定地址的任意端口
使用 IP::ContainerPort 绑定localhost的任意端口到容器的80端口,本地主机会自动分配一个端口:
[root@open-Euler2 ~]# docker run -d -p 127.0.0.1::80 nginx
478a6d0bf890ac189721a50617b1e0d6d6343127a405bda3f1898bb2b473c030
还可以使用udp标记来指定udp端口:
[root@open-Euler2 ~]# docker run -d -p 127.0.0.1:80:80/udp nginx
5572bc9e356da03a0992b01302d61c4c3ee94d9ec3596b34f305eb5e24795c1d
查看容器:
[root@open-Euler2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5572bc9e356d nginx "/docker-entrypoint.…" 15 seconds ago Up 14 seconds 80/tcp, 127.0.0.1:80->80/udp peaceful_maxwell
478a6d0bf890 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 127.0.0.1:32768->80/tcp cool_moore
955050b98052 nginx "/docker-entrypoint.…" 41 minutes ago Up 41 minutes 192.168.121.151:80->80/tcp inspiring_cori
5.查看映射端口配置
使用docker port来查看当前映射的端口配置,也可以查看到绑定的地址:
[root@open-Euler2 ~]# docker port 5572bc9e356d
80/udp -> 127.0.0.1:80
提示:容器有自己的内部网络和IP地址,使用docker [container] inspect+容器ID可以获取容器的具体信息。
2.2 互联机制实现便捷互访
容器的互联(linking)是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。
1.自定义容器命名
连接系统依据容器的名称来执行。因此,首先需要自定义一个好记的容器命名。虽然当创建容器的时候,系统默认会分配一个名字,但自定义命名容器有两个好处:
- 自定义的命名,比较好记,比如一个Web应用容器我们可以给它起名叫web, 一目了然;
- 当要连接其他容器时候(即便重启),也可以使用容器名而不用改变,比如连接web容器到db容器。
使用--name标记可以为容器自定义命名:
[root@open-Euler2 ~]# docker run -itd --name web nginx bash
使用docker ps来验证设定的命名:
[root@open-Euler2 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d8f7dc9ddfa nginx "/docker-entrypoint.…" 7 seconds ago Up 7 seconds 80/tcp web
也可以使用docker [container] inspect来查看容器的名字:
[root@open-Euler2 ~]# docker inspect -f "{{ .Name }}" web
/web
注意:容器的名称是唯一的。如果已经命名了一个叫web的容器,当你要再次使用web这个名称的时候,需要先用docker rm命令删除之前创建的同名容器。
在执行docker [container] run的时候如果添加--rm标记,则容器在终止后会立刻删除。注意,--rm 和-d参数不能同时使用。
2. 容器互联
使用--link参数可以让容器之间安全地进行交互。下面先创建一个新的数据库容器:
MYSQL_ROOT_PASSWORD=123456
设置了 MySQL 容器的 root 用户密码为 “123456”,而 --restart=always
确保了容器在 Docker 启动时始终自动重启。
创建数据库:
删除之前创建的web容器:
docker rm -f web
然后基于Wordpress镜像创建一个新的web容器,并将它连接到db容器:
docker run --name web -p 80:80 --link db:db -d --restart=always wordpress
此时,db容器和web容器建立互联关系。
--link参数的格式为--link name: alias, 其中name是要链接的容器的名称 ,alias是别名。
使用docker ps 来查看容器的连接:
Docker 相当于在两个互联的容器之间创建了一个虚机通道, 而且不用映射它们的端口到 宿主主机上。 在启动db容器的时候并没有使用-p和-P标记, 从而避免了暴露数据库服务端口到外部网络上。
Docker通过两种方式为容器公开连接信息:
更新/etc/hosts文件:
更新环境变量:
使用env命令来查看web容器的环境变量:
wordpress应用搭建:
这里要访问的是web容器的服务映射到宿主机的IP+端口
进入安装界面:
填写数据库信息:
填写站点信息
安装成功
进入wordpress主页
2.3 本章小结
毫无疑问,容器服务的访间是很关键的一个用途。本章通过具体案例讲解了 Docker容器服务访问的两大基本操作, 包括基础的容器端口映射机制和容器互联机制。 同时,Docker 目前可以成熟支持Linux系统自带的网络服务和功能,这既可以利用现有成熟的技术提供稳定支持,又可以实现快速的高性能转发。
相关文章:
Docker数据管理,端口映射与容器互联
1.Docker 数据管理 在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。 容器中的管理数据主要有两种方式: 数据卷(Data Volumns)&a…...
R语言使用scitable包交互效应深度挖掘一个陌生数据库
很多新手刚才是总是觉得自己没什么可以写的,自己不知道选什么题材进行分析,使用scitable包后这个完全不用担心,选题多到你只会担心你写不完,写得不够快。 今天演示一下使用scitable包深度挖掘一个陌生数据库 先导入R包和数据 li…...
复试难度,西电卓越工程师学院(杭研院)考研录取情况
01、卓越工程师学院各个方向 02、24卓越工程师学院(杭研院)近三年复试分数线对比 PS:卓越工程师学院分为广研院、杭研院 分别有新一代电子信息技术、通信工程、集成电路工程、计算机技术、光学信息工程、网络信息安全、机械,这些…...
STM32之I2C硬件外设
注意:硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数…...
linux docker相关指令
1、镜像操作 0)、搜索:docker search 镜像名称 1)、拉取:docker pull 2)、推送:docker push 3)、查看:docker images 4)、查看所有镜像ID:d…...
信息安全之构建FTP服务器证书
以下是完整的文章,包含所有步骤和最后一节的参考文章部分: 在 Ubuntu 中安装和配置 FTPS 服务器的详细指南 1. 安装 vsftpd 首先,确保你的系统是最新的,然后安装 vsftpd: sudo apt update sudo apt install vsftpd•…...
(更新完)LPZero: Language Model Zero-cost Proxy Search from Zero
LPZero代码 摘要 神经架构搜索 (NAS) 有助于自动执行有效的神经网络搜索,同时需要大量的计算资源,尤其是对于语言模型。零样本 NAS 利用零成本 (ZC) 代理来估计模型性能,从而显着降低计算需求。然而,现有的 ZC 代理严重依赖于深…...
第六次CCF-CSP认证(含C++源码)
第六次CCF-CSP认证 数位之和(easy)思路及AC代码遇到的问题 开心消消乐(easy)思路及AC代码 画图(mid)思路及AC代码 数位之和(easy) 题目链接 思路及AC代码 既然题目要求我们输出各位…...
Spring Boot框架总结(超级详细)
前言 本篇文章包含Springboot配置文件解释、热部署、自动装配原理源码级剖析、内嵌tomcat源码级剖析、缓存深入、多环境部署等等,如果能耐心看完,想必会有不少收获。 一、Spring Boot基础应用 Spring Boot特征 概念: 约定优于配置&#…...
Dify平台部署记录
安装dify项目 官网地址:http://difyai.com/ github地址:https://github.com/langgenius/dify 下载项目: git clone https://github.com/langgenius/dify.git下载过慢,直接访问网页下载zip压缩包: 解压,…...
c++ 调用 gurobi 库,cmake,mac
gurobi 一般使用 python 调用,官方的培训会议及资料大部分也都基于 python。 由于最近上手了 c,因此想试试 c 怎么调用 gurobi。但我发现,c 调用第三方库比 python 或 java 要复杂不少。python 中直接 import 第三方库,java 加载…...
Redis 发布订阅模式详解:实现高效的消息通信
目录 引言 1. 什么是 Redis 发布订阅模式? 1.1 定义 1.2 核心概念 2. Redis 发布订阅的工作原理 2.1 基本流程 2.2 示例 2.3 频道与模式订阅 3. Redis 发布订阅的使用场景 3.1 实时消息通知 3.2 事件驱动架构 3.3 日志收集与分发 3.4 分布式锁与协调 4…...
React Native 0.76 升级后 APK 体积增大的原因及优化方案
在将 React Native 从 0.71 升级到 0.76 后,打包体积从 40 多 MB 增加到了 80 MB。经过一系列排查和优化,最终找到了解决方案,并将优化过程整理如下。 1. React Native 0.76 体积增大的可能原因 (1) 新架构默认启用 React Native 0.76 默认…...
Java直通车系列14【Spring MVC】(深入学习 Controller 编写)
目录 基本概念 编写 Controller 的步骤和要点 1. 定义 Controller 类 2. 映射请求 3. 处理请求参数 4. 调用业务逻辑 5. 返回响应 场景示例 1. 简单的 Hello World 示例 2. 处理路径变量和请求参数 3. 处理表单提交 4. 处理 JSON 数据 5. 异常处理 基本概念 Cont…...
文章被检测出是AI写的怎么办?
随着人工智能技术的飞速发展,AI辅助写作工具逐渐普及,为学生、科研人员以及创作者带来了诸多便利。然而,随之而来的是对学术诚信和内容原创性的担忧。当文章被检测出是AI写作时,应该如何应对?本文将探讨这一问题&#…...
Linux教学总目录
Linux教学总目录: 1、Linux常见指令 2、Linux权限理解 3、Linux环境基础开发工具使用...
SpringBoot(1)——创建SpringBoot项目的方式
目录 1、idea直接从spring.io官网下载即可 编辑2、 自己从spring官网下载再用idea打开 3、Idea从阿里云的官网(https://start.aliyun.com)下载打开 4、Maven项目改造成springboot项目 我的平台是idea2021 Spring Boot 由 Pivotal 团队开发ÿ…...
Oracle数据恢复:闪回查询
Oracle数据恢复:闪回查询 SQL语法闪回查询:AS OF闪回版本查询:VERSIONS BETWEEN数据恢复示例闪回查询最佳实践应用场景使用限制注意事项最佳实践在误删除业务数据时,Oracle数据库通常支持以下几种数据恢复途径。 闪回查询(Flashback Query):闪回查询通过查询系统的UNDO数…...
LiveCommunicationKit OC 实现
一、实现效果: LiveCommunicationKit是苹果公司在iOS 17.4、watchOS 10.4和visionOS 1.1中引入的一个新框架,旨在优化VoIP通话的交互体验。该框架提供了与...
django中路由配置规则的详细说明
在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...
机器学习基础(4)
超越基于常识的基准 除了不同的评估方法,还应该利用基于常识的基准。训练深度学习模型就好比在平行世界里按下发射火箭的按钮,你听不到也看不到。你无法观察流形学习过程,它发生在数千维空间中,即使投影到三维空间中,…...
技术的魅力与价值
区块链技术正改变公益事业。它能极大提高公益透明度和公信力。通过区块链,每一笔捐款的流向都清晰可查,无法篡改,让捐赠者放心。比如某公益平台利用区块链记录捐赠信息,大家随时能看到善款使用情况。还有些项目用区块链追踪物资发…...
【报错】微信小程序预览报错”60001“
1.问题描述 我在微信开发者工具写小程序时,使用http://localhost:8080是可以请求成功的,数据全都可以无报错,但是点击【预览】,用手机扫描二维码浏览时,发现前端图片无返回且报错60001(打开开发者模式查看日…...
[数据结构]并查集--C++版本的实现代码
目录 并查集的基本框架 查找一个元素在哪一个集合 判断两个元素是否在同一个集合 将两个集合进行合并 查询有多少组 测试 大学班级的同学会来自于五湖四海,每个人的家乡可能都不相同,那么如何将相同省份的同学连接到一块,也就是按省份进…...
随机森林:强大的集成学习算法
引言 在机器学习领域,随机森林(Random Forest)是一种非常流行的集成学习算法。它通过构建多个决策树并将它们的结果进行集成,能够有效提高模型的准确性和鲁棒性。随机森林广泛应用于分类、回归、特征选择等任务,因其简…...
C# 实现 AI SSE (Server-Sent Events)接口方式输出(对接AI模型API)
以下是一个使用 C# 实现接收 SSE(Server-Sent Events)接口数据、进行数据修改解析,然后再以 SSE 方式输出给前端的示例代码。 using System; using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; using M…...
企业招聘能力提升之道:突破困境,精准纳才
企业招聘能力提升之道:突破困境,精准纳才 在企业运营的广袤版图中,招聘工作无疑是一块至关重要的拼图。然而,不少企业在这片领域中举步维艰,尽管投入了海量的时间与精力,收获的成果却不尽人意。面试环节仿…...
[数据结构]堆详解
目录 一、堆的概念及结构 二、堆的实现 1.堆的定义 2堆的初始化 3堆的插入 编辑 4.堆的删除 5堆的其他操作 6代码合集 三、堆的应用 (一)堆排序(重点) (二)TOP-K问题 一、堆的概念及结构 堆的…...
KafkaRocketMQ
Kafka 消息生产与消费流程 1. 消息生产 生产者创建消息: 指定目标 Topic、Key(可选)、Value。可附加 Header 信息(如时间戳、自定义元数据)。 选择分区(Partition): 若指定 Key&am…...
DeepSeek Kimi详细生成PPT的步骤
以下是使用 DeepSeek 和 Kimi 协作生成 PPT 的详细步骤,结合了两者的优势实现高效创作: 第一步:使用 DeepSeek 生成 PPT 大纲或内容 明确需求并输入提示词 在 DeepSeek 的对话界面中,输入具体指令,要求生成 PPT 大纲或…...
HTTP和HTTPS
一.介绍HTTP HTTP全称为超文本传输协议,是一种应用非常广泛的应用层协议。目前,主流使用的HTTP版本是HTTP1.1和HTTP2.0,在这边文章中,讨论的是HTTP1.1。 使用浏览器,打开手机上的APP或者是后端程序,都是分布…...
应急响应--流量分析
(一)Cobalt Strike流量特征分析 1.HTTP特征 源码特征: 在流量中,通过http协议的url路径,在checksum8解密算法计算后,32位的后门得到的结果是92,64位的后门得到的结果是93,该特征符…...
docker 学习
在docker中通常需要使用ADD等命令复制附件,同时也需要使用其他命令操作原始镜像中的内容,会导致原文文件被覆盖后缺少执行权限,比如: sqlmapapi: ERROR (file is not executable) 或者XXX: ERROR (file is not execu…...
C++时间复杂度详解
一、时间复杂度核心概念 1.1 为什么要研究时间复杂度 当处理大规模数据时(如计算斐波那契数列第57项),不同算法效率差异巨大: 递推解法:0.23秒完成 递归解法:需要2369秒(约40分钟)…...
【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
一、Slider基础用法 在 XAML 中添加一个 Slider 控件,并设置其基本属性: <Slider Minimum"0" <!-- 最小值 -->Maximum"100" <!-- 最大值 -->Value"50" <!-- 初始值 -->Width&quo…...
PgSql 操作技巧
1、查询数据导出csv数据 \COPY (SELECT w.* from t_sys_warn w ) TO /home/cuadmin/warn_output.csv WITH CSV HEADER;2、导出sql Insert语句 pg_dump -U 用户名 -h 主机名 -p 端口号 -d 数据库名 --inserts -t 表名 > 导出文件.sqlpg_dump -U username -d dbname -t tabl…...
高效自动化测试:打造Python+Requests+Pytest+Allure+YAML的接口测试框架
一、背景 在快节奏的开发周期中,如何确保接口质量?自动化测试是关键。通过构建标准化、可复用的测试框架,能显著提升测试效率与准确性,为项目质量保驾护航[1][7]。 二、目标 ✅ 核心目标: ● 实现快速、高效的接口测试…...
设计模式文章汇总-Golang语言实现
Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 Golang学习笔记_34——组合模式 Gola…...
深度学习PyTorch之13种模型精度评估公式及调用方法
深度学习pytorch之22种损失函数数学公式和代码定义 深度学习pytorch之19种优化算法(optimizer)解析 深度学习pytorch之4种归一化方法(Normalization)原理公式解析和参数使用 深度学习pytorch之简单方法自定义9类卷积即插即用 实时…...
c#面试题整理4
1.stirng str"",string strnull,俩者有何区别 空字符串占有存储控件,null不占用 2.class与struct的异同 异同class 可继承 引用类型 1.都可以定义方法字段 2.都可实例化,与类的使用几乎一样 struct 不可继承 值类型 只能声明带…...
游戏辅助技术培训班教程【A001-初级班】
课程概述: 本教程为游戏辅助技术培训班的初级班课程,本章为第二阶段,旨在帮助学员系统掌握游戏辅助技术的核心技能。课程内容从C/C编程基础到高级内存操作、代码注入、DLL注入及MFC编程,全面覆盖游戏辅助开发的关键知识点。 课程…...
[NewStarCTF 2023 公开赛道]ez_sql1 【sqlmap使用/大小写绕过】
题目: 发现id处可以sql注入: 虽然输入id1;show databases;#没什么回显,但是知道这里是字符型注入了 这次利用sqlmap注入 --dbs:列出所有数据库名字 python .\sqlmap.py -u http://a40b2f0a-823f-4c99-b43c-08b94ed0abb2.node5.…...
SSTI注入笔记
文章目录 基础知识SSTI利用条件验证SSTI是否存在验证console码SSTI类引用机制过滤的绕过.被过滤下划线被过滤中括号被过滤过滤了{{过滤了单引号或者双引号过滤了数字关键字被过滤 基础知识 python的模块引用,优先引用当前目录下的模块,比如from pwn imp…...
大模型中的剪枝、蒸馏是什么意思?
环境: 剪枝 蒸馏 问题描述: 大模型中的剪枝、蒸馏是什么意思? 解决方案: 大模型的剪枝(Pruning)和蒸馏(Distillation)是两种常见的模型优化技术,用于减少模型的大小…...
AI学习记录 - PPO算法草稿
returns 下面是两种方式生成returns的值,第一种好一点 delta计算方式不一样 通过一些计算方式,将未来的一些计算值,赋予到前面去,从而影响将前面的token和后面的token绑定到一起,从而实现每当生成一个tokend…...
蓝桥杯FPGA-ds1302驱动
1. 驱动的作用 调用SPI底层驱动,实现DS1302的驱动 2. 关键程序代码说明 1. 独热编码设置状态机的状态 使用独热编码会使系统更加高效稳定 localparam IDLE 8b0000_0001; localparam CE_HIGH 8b0000_0010; localparam CE_LOW 8b0000_0100; localparam…...
探索C/C++的奥秘之list
list和我们之前讲的东西都一样,list第二个参数是一个空间配置器,是一个内存池, 底层是一个带头双向循环列表。list可以重载[],但是效率太低了。 list的遍历不能使用下标[],因为它的空间不是连续的,可以使用…...
Linux第六讲:进程控制
Linux第六讲:进程控制 1.进程创建1.1回顾fork1.2写时拷贝 2.进程终止2.1exit与_exit 3.进程等待3.1进程等待的方法(wait和waitpid) 4.进程程序替换4.1自定义shell的编写4.1.1输出命令行提示符4.1.2获取用户输入的命令4.1.3命令行分析4.1.4指令…...
LabVIEW基于双通道FFT共轭相乘的噪声抑制
对于双通道采集的含噪信号,通过FFT获取复数频谱后,对第二通道频谱取共轭并与第一通道频谱相乘,理论上可增强相关信号成分并抑制非相关噪声。此方法适用于通道间信号高度相关、噪声独立的场景(如共模干扰抑制)。以下为L…...
疯狂安卓入门,crayandroid
系列文章目录 文章目录 系列文章目录第一组 ViewGroup 为基类帧布局约束布局 第二组 TextView 及其子类button时钟 AnalogClock 和 TextClock计时器 第三组 ImageView 及其子类第四组 AdapterView 及其子类AutoCompleteTextView 的功能和用法ExapndaleListViewAdapterViewFlipp…...