Docker的数据持久化;Docker网络;Dockerfile编写
Docker的数据持久化;Docker网络;Dockerfile编写;
文章目录
- Docker的数据持久化;Docker网络;Dockerfile编写;
- **Docker的数据持久化**
- 1)将本地目录映射到容器里
- 2)数据卷
- 3)将宿主机上的文件快速传输进容器里
- **Docker网络**
- 1)host模式
- 2)container模式(使用指定容器网络)
- 3)none模式
- 4)bridge模式(nat模式)
- 5)端口映射
- **Dockerfile编写**
- Dockerfile 格式
- CDM示例:
- EXPOSE示例:
- Dockerfile示例:
- 核心知识点/面试考点:
- ● 容器与主机之间的数据如何传输?
- ● Docker有哪几种网络模型?
- ● Dockerfile相关:
- **○ ADD和COPY的区别是什么?**
- **○ CMD和ENTRYPOINT的区别是什么?**
- 扩展知识点:
- ● 同样的业务逻辑如何优化Dockerfile
- 优化一:把不需要的命令丢入/dev/null
- 优化二:减少RUN构建
- 优化三:多阶段构建
- 优化方法四:使用更为轻量级的linux 发行版本
Docker的数据持久化
在 Docker 中,数据持久化是指将容器中的数据保存到宿主机或其他外部存储介质,以确保数据在容器重新创建、更新或删除时不会丢失。以下是一些常见的 Docker 数据持久化方法
1)将本地目录映射到容器里
mkdir -p /data/ #-p就可以创建多层目录
docker run -tid -v /data/:/data ubuntu bash ## -v 用来指定挂载目录 :前面的/data/为宿主机本地目录 :后面的/data/为容器里的目录,会在容器中自动创建
可以在/data/里创建一个文件
echo '123456' > /data/1.txt
然后到容器里查看
docker exec -it 4152046a bash -c "cat /data/1.txt"
2)数据卷
创建数据卷
docker volume create testvol ##testvol为数据卷名字
列出数据卷
docker volume ls
查看数据卷信息
docker volume inspect testvol
使用数据卷
docker run -itd --name tang01 -v testvol:/data/ ubuntu ##和前面直接映射本地目录不同,冒号左边为数据卷名字
多个容器共享一个数据卷
docker run -itd --name tang1 -v testvol:/data/ ubuntu
3)将宿主机上的文件快速传输进容器里
docker cp test111.txt tang1:/data/12345.txt
docker exec -it tang1 ls /data/docker cp tang1:/data/12345.txt /tmp/ #可以反过来拷贝
Docker网络
Docker服务启动时会生成一个docker0的网卡,这个网卡是实现容器网络通信的根本。 默认容器使用的网络类型为桥接(bridge)模式,这个桥接和我们的vmware里的桥接可不是一回事。它更像是vmware的NAT模式。
每启动一个容器,都会产生一个虚拟网卡 vethxxx
iptables -nvL -t nat ##可以看到DOCKER相关规则,容器之所以可以联网,是靠这些规则实现的
-nvL 是三个选项的组合:
-n:禁用 IP 地址和端口的解析,以显示原始的数字格式。
-v:显示详细的信息,包括数据包和字节计数。
-L:列出规则,即显示防火墙的规则列表。
-t nat 指定查看的表为 NAT 表。NAT 表是 iptables 的一个表,用于处理网络地址转换 (Network Address Translation) 规则。
1)host模式
docker run -itd --net=host --name tang2 ubuntu bash #共享宿主机,新生成的后面要加bash
可以进入容器内,查看hostname,查看ip地址。 这种模式,容器和宿主机共享主机名、IP。
docker rm -f tang3 #强制删除容器,就算已经开启的也能删除
修改主机名
hostnamectl set-hostname tang3
2)container模式(使用指定容器网络)
该模式下,在启动容器时,需要指定目标容器ID或者name,意思是将要启动的容器使用和目标容器一样的网络,即它们的IP一样
docker run -itd --net=container:/tang01 --name tang03 ubuntu #使用tang01的网络新建tang03
可以进入容器查看tang01和tnag03的网络情况
3)none模式
apt undate
apt install -y net-tools #这样才能使用ifconfig命令
即不需要配置网络
docker run -itd --net=none --name=tang01 naginx_ubuntu bash
查看:
docker exec -it tang01 bash -c "ip add"
4)bridge模式(nat模式)
也就是默认模式,可以–net=bridge 也可以不指定–net,默认就是bridge
5)端口映射
docker run -itd -v /data/:/var/www/html/ -p 8080:80 --name tang05 nginx_ubuntu:1.0 bash
说明: -p后面跟 宿主机监听端口:容器监听端口
docker exec -it tang05 bash
开启nginx
/etc/init.d/nginx start
测试是否开启nginx,/var/www/html目录下有一个text1.txt
apt install curl
curl localhost/text1.txt #成功获取里面内容
回到宿主机,安装网络工具
yum install net-tools
发现8080端口已经打开
netstat -ltnp|grep 8080
访问网站内容成功
curl localhost:8080/text1.txt
Dockerfile编写
什么是Dockerfile?是实现自定镜像的一种手段,通过编写Dockerfile,来编译成自己想要的镜像。
Dockerfile 格式
1)FROM 指定基于哪个基础镜像,例如:
FROM ubuntu:latest
2)MAINTAINER 指定作者信息,例如:
MAINTAINER tang [tang@tanglinux.com](mailto:tang@tanglinux.com)
3)RUN 后面跟具体的命令,例如:
RUN apt update
RUN apt install -y curl
RUN ["apt","install","-y","curl" ] ##这种写法偏复杂
4)CMD 用来指定容器启动时用到的命令,只能有一条,格式如下:
CMD ["executable", "param1", "param2"]
CMD command param1 param2
CMD ["param1", "param2"]
CDM示例:
CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"]
5)EXPOSE 指定要映射的端口,格式:
EXPOSE <port> [<port>...]
EXPOSE示例:
EXPOSE 22 80 8443 ##要暴露22,80,8443三个端口
说明:这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。
6)ENV 为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量,例如
ENV MYSQL_version 5.7
7)ADD 将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。例如:
ADD conf/vhosts /usr/local/nginx/conf
8)COPY 类似于ADD,将本地文件拷贝到容器里,不过它不支持URL,例如:
COPY 123.txt /data/456.txt
9)ENTRYPOINT 格式类似CMD
容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。
和CMD不同是: CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。
比如,容器名字为tang 我们在Dockerfile中指定如下CMD:
CMD ["/bin/echo", "test"]
假如启动容器的命令是
docker run tang
则会输出 test
假如启动容器的命令是
docker run -it tang /bin/bash
则什么都不会输出
ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行
ENTRYPOINT ["echo", "test"]
假如启动容器的命令是
docker run -it tang 123
则会输出 test 123 ,这相当于要执行命令 echo test 123
10)VOLUME 创建一个可以从本地主机或其他容器挂载的挂载点。
VOLUME ["/data"]
11)USER指定RUN、CMD或者ENTRYPOINT运行时使用的用户
USER tang
12)WORKDIR 为后续的RUN、CMD或者ENTRYPOINT指定工作目录
WORKDIR /tmp/
Dockerfile示例:
mkdir docker_test #创建一个目录
vi Dockerfile
FROM ubuntu
MAINTAINER tang peng yuan
RUN apt update
RUN apt install -y libpcre2-dev net-tools gcc zlib1g-dev make
ADD http://nginx.org/download/nginx-1.23.2.tar.gz .
RUN tar zxvf nginx-1.23.2.tar.gz
RUN mkdir -p /usr/local/nginx
RUN cd nginx-1.23.2 && ./configure --prefix=/usr/local/nginx && make && make install
COPY index.html /usr/local/nginx/html/index.html
# COPY index2.html /usr/local/nginx/html/2.html
EXPOSE 80
ENTRYPOINT /usr/local/nginx/sbin/nginx -g "daemon off;" #-g这个的意思是让程序在前台启动,不到后台,如果程序到后台运行了,容器也就自己关闭了
创建好后再创建一个index.html文件
echo "This is file" > index.html
编译成镜像
docker build -t tang_nginx:1.1 . #后面的点是到什么目录下找,这是当前目录下
说明: -t 后面跟镜像名字:tag, 这里的. 表示使用当前目录下的Dockerfile,并且工作目录也为当前目录,如果想使用其它目录下的Dockerfile,还可以使用-f选项来指定,例如
mkdir /data/docker
cp Dockerfile /data/docker/nginx.dkf
cd /data/docker/ # vi编辑一下,让第二个copy取消注释
docker build -t tang2_nginx:1.2 -f /data/docker/nginx.dkf /tmp/ ##这里/tmp/目录为工作目录,比如COPY文件的时候,到/tmp/下面去找
使用镜像
docker run -itd --name nginx -P tang_nginx:1.1 ##使用-P(大写P)可以随机映射一个端口到宿主机,也可以使用-p(小p)指定具体端口
docker ps #可以看到随机生成的端口号了
核心知识点/面试考点:
● 容器与主机之间的数据如何传输?
docker cp test111.txt tang1:/data/12345.txt #主机向容器docker cp tang1:/data/12345.txt /tmp/ #容器向主机传输
● Docker有哪几种网络模型?
host模式:共享主机名,ip,网络等一系列信息
container模式:使用指定容器网络
none模式:没有网络
bridge模式:类似vm虚拟机的nat模式
● Dockerfile相关:
○ ADD和COPY的区别是什么?
ADD 和 COPY 是用于将文件从主机复制到容器内部的指令。它们之间的区别如下:
- 语法:
ADD指令的语法为ADD <source> <destination>,而COPY指令的语法为COPY <source> <destination>。可以看到,两者的语法非常相似,只是指令名称不同。 - 自动解压缩:
ADD指令具有一个特殊的功能,即它可以自动解压缩被复制的文件。如果<source>参数指向一个压缩文件(例如.tar,.tar.gz,.tar.bz2,.tar.xz,.zip),则在复制过程中,Docker 会自动解压缩该文件并将其内容复制到容器内部的<destination>。而COPY指令则不具备自动解压缩的功能,它仅仅是将文件或目录从主机复制到容器内部。 - URL 支持:
ADD指令还支持从指定的 URL 下载文件并复制到容器内部。当<source>参数是一个 URL 时,Docker 会自动下载该文件并将其复制到容器内部的<destination>。而COPY指令不支持直接从 URL 下载文件。 - 构建缓存: 在构建镜像的过程中,如果使用
COPY指令复制文件,且源文件没有发生变化,Docker 会使用构建缓存,从而加快构建速度。但是,如果使用ADD指令复制文件,即使源文件没有发生变化,Docker 也会无条件地重新执行该指令,因为它具有解压缩和下载功能,可能会导致构建结果不同。
○ CMD和ENTRYPOINT的区别是什么?
CMD 和 ENTRYPOINT 是用于指定容器启动时要执行的命令或程序的指令。它们之间的区别如下:
- 命令执行方式:
CMD指令用于指定容器默认的执行命令,可以被 Dockerfile 中的其他指令覆盖。而ENTRYPOINT指令也用于指定容器启动时要执行的命令,但它更为固定,不容易被其他指令覆盖,通常用于定义容器的主要执行命令或程序。 - 参数传递:
CMD指令可以包含多个参数,其中每个参数都会被解释为命令的一部分。这意味着可以在运行容器时覆盖CMD指令中的某些参数。而ENTRYPOINT指令一般会被视为不可变的一部分,容器在运行时提供的参数会被附加到ENTRYPOINT指令的末尾,而不是覆盖它。 - Shell 执行:
CMD指令可以使用 shell 执行命令,将命令作为字符串传递给 shell 进行解释和执行。这意味着可以使用诸如变量替换、重定向和管道等 shell 特性。而ENTRYPOINT指令默认情况下是不通过 shell 执行的,它以原样接收参数并直接执行命令,不经过 shell 解释。 - 扩展性和覆盖:
CMD指令的内容可以被 Dockerfile 中的其他指令(如RUN)覆盖,因此可以更容易地更改容器的默认命令。而ENTRYPOINT指令的内容通常是不易被覆盖的,因为它被视为容器的主要执行命令或程序。
扩展知识点:
● 同样的业务逻辑如何优化Dockerfile
原文:https://blog.csdn.net/WuDan_1112/article/details/125857676
以构建nginx为例
FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make
ADD nginx-1.12.2.tar.gz /mnt
WORKDIR /mnt/nginx-1.12.2
#关闭debug日志
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
[root@docker nginx]# docker build -f Dockerfile -t centos:v1 .

优化一:把不需要的命令丢入/dev/null
[root@docker nginx]# mkdir -p nginx/nginx_v1 nginx/nginx_v2 nginx/nginx_v3
[root@docker nginx]# cp nginx-1.21.6.tar.gz nginx/nginx_v1
[root@docker nginx]# cd nginx_v1/
[root@docker nginx_v1]# ls
Dockerfile nginx-1.21.6.tar.gz
[root@docker nginx_v1]# docker build -f Dockerfile -t nginx:v2 .

FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/null
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

优化二:减少RUN构建
RUM命令比较多得时候
FROM centos:7
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null &&\
rm -rf /mnt/nginx-1.21.6
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

优化三:多阶段构建
使用FRON命令生成多个镜像,将指定的镜像做为其他镜像的基础镜像环境来构建
FROM centos:7 as build
ADD nginx-1.21.6.tar.gz /mnt
WORKDIR /mnt/nginx-1.21.6
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all && \
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &> /dev/null && make install &> /dev/null &&\
rm -rf /mnt/nginx-1.21.6
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

优化方法四:使用更为轻量级的linux 发行版本
- debian
- alpine
- apt add
相关文章:
Docker的数据持久化;Docker网络;Dockerfile编写
Docker的数据持久化;Docker网络;Dockerfile编写; 文章目录 Docker的数据持久化;Docker网络;Dockerfile编写;**Docker的数据持久化**1)将本地目录映射到容器里2)数据卷3)将…...
OpenHarmony亮相MTSC 2023 | 质量效率共进,赋能应用生态发展
11月25日,MTSC 2023第十二届中国互联网测试开发大会在深圳登喜路国际大酒店圆满举行。大会以“软件质量保障体系和测试研发技术交流”为主要目的,旨在为行业搭建一个深入探讨和交流的桥梁和平台。OpenAtom OpenHarmony(简称“OpenHarmony”&a…...
windows11 调整鼠标灵敏度方法
首先 我们打开电脑设置 或者在 此电脑/此计算机/我的电脑 右击选择属性 然后 有的电脑 左侧菜单中 直接就有 设备 然后在设备中直接就可以找到 鼠标 选项 调整光标速度即可 如果操作系统和我的一样 可以直接搜索鼠标 然后 选择 鼠标设置 然后 调整上面的鼠标指针速度即可...
贪心算法个人见解
目录 基本思想: 贪心算法的步骤: 示例: 贪心算法(Greedy Algorithm)是一种基于贪心策略的算法范式,它在每一步选择中都采取当前状态下的最优选择,而不考虑全局最优解。贪心算法通常适用于那些…...
Win中Redis部署与配置
1.下载msi版本 下载传送门 2.双击next-->next安装安装 3.密码配置以及开机自启 在配置文件中配置相应配置进行配置密码以及端口和ip port 6379指定 Redis 监听端口,默认端口为 6379,作者在自己的一篇博文中解释了为什么选用 6379 作为默认端口&…...
vue el-button 封装及使用
使用了 Element UI 中的 el-button 组件,并对其进行了封装和定制。 创建组件index.vue (src/common-ui/button/index.vue) <template><el-buttonclass"h-button":type"type":icon"hIcon":disabled"disabled"clic…...
QT之QMediaPlayer的用法
QT之QMediaPlayer的用法 成员函数例程 成员函数 1)setMedia(const QMediaContent &media, QIODevice *stream nullptr) 设置要播放的媒体内容,其中参数media指定了媒体内容,stream参数指定了用于读取媒体的输入设备(如文件流࿰…...
TCP_报文格式解读
报文格式 header部分字段含义解析 固定字段 对于header中固定部分字段含义,见之前的blog《TCP报文分析》; 对部分字段含义补充说明 Data Offset:4bit,tcp header的长度,单位:32bit(4字节&…...
C语言面试之旅:掌握基础,探索深度(面试实战之c语言关键词下篇)
一.枚举( enum) 枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。定义一个枚…...
Java学习第十三天
Java多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作 多态性是对象多种表现形式的体现。 多态的优点 1. 消除类型之间的耦合关系2. 可替换性3. 可扩充性4. 接口性5. 灵活性6. 简化性 多态存在的三个…...
【Delphi】实现彩色日志显示框(TRichEdit Helper)
目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候,经常需要显示程序运行的日志,一般我们会使用TMemo,使用起来简单,…...
Elasticsearch 优化查询中获取字段内容的方式,性能提升5倍!
1、背景 集群配置为:8 个 node 节点,16 核 32G,索引 4 分片 1 副本。应用程序的查询逻辑是按经纬度排序后找前 200 条文档。 1、应用对查询要求比较高,search 没有慢查询的状态。 2、集群压测性能不能上去,cpu 使用未打…...
图像批量设计软件Retrobatch Pro mac中文版功能特色
Retrobatch Mac是一款灵活的批量图像处理工具。用户可以自由创建Workflow来实现相应的功能,这些Workflow能取代大量的重复劳动,提高生产力。Retrobatch Mac的一般操作是从左边栏拖动相应动作到工作区形成节点(Nodes),节…...
python第3天之函数
深入理解 Python 中的函数 简介 在编程中,函数是组织和复用代码的基本单元。Python 作为一门高级编程语言,提供了丰富的函数特性来帮助开发者编写清晰、模块化和高效的代码。在本文中,我们将深入探讨 Python 函数的定义、调用、参数、返回值…...
SQL Server 数据库,为products表添加数据
在插入数据的时候,需要注意以下事项。 > 每次插入一整行数据,不可能只插入半行或几列数据。 > 数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的 列匹配。 > INSERT语句不能为标识列指定值&#…...
C语言结构体详解(二)(能看懂文字就能明白系列)文章很长,慢慢品尝
系列文章目录 第一章 结构体的介绍和基本使用 🌟 个人主页:古德猫宁- 🌈 信念如阳光,照亮前行的每一步 文章目录 系列文章目录🌈 *信念如阳光,照亮前行的每一步* 前言前面一篇文章主要介绍了结构体的基础…...
WPF不使用AllowsTransparency实现高性能透明背景异形窗体
前言 最近在WPF项目中使用到异形窗体结合Webbroswer组件做web界面的公告展示,当时不想太麻烦引入Cef组件,就想用自带的Webbroswer来做展示,为了美观还做了异形窗体,结果测试就杯具了,自带的Webbroswer在AllowsTransparency=“True” 模式下根本就无法显示,界面一片空白,…...
唯创知音WT2605C语音芯片MP3音频IC:轻松实现指令随机播放与无缝循环播放等功能
在现代化的电子产品中,音频功能的重要性日益凸显。无论是智能家居、玩具、医疗设备还是仪器仪表,富有吸引力的音效与语音提示都能显著提升用户体验。唯创知音WT2605C语音芯片MP3音频IC便是为了满足这一需求而诞生的,它具备指令随机播放、无缝…...
uniapp+微信小程序监听返回事件
代码附在最后 适用场景:uniapp开发微信小程序 需求是我点击列表进入数据信息的详情界面,点击详情界面的收藏,返回上一界面后,更新列表中的收藏情况。 目录 一、使用onUnload监听页面卸载 二、使用getCurrentPages()获取当前页…...
Python函数的高级用法
Python 的函数是“一等公民”,因此函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可作为其他函数的返回值。 使用函数变量 Python 的函数也是一种值:所有函数都是 function 对象,这意…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
