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

简单的docker学习 第3章docker镜像

第3章 Docker 镜像

3.1镜像基础

3.1.1 镜像简介

​ 镜像是一种轻量级、可执行的独立软件包,也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境。具体来说镜像包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件等。几乎所有应用,直接打包为 Docker 镜像后就可以运行。

​ 由于镜像的运行时是容器,容器的设计初衷就是快速和小巧,所以镜像通常都比较小,镜像中不包含内核,其共享宿主机的内核;镜像中只包含简单的 Shell,或没有 Shell

3.1.2 镜像仓库分类

镜像中心中存储着大量的镜像仓库 Image Repository,每个镜像仓库中包含着大量相关镜像。根据这些镜像发布者的不同,形成了四类不同的镜像仓库。

  • Docker Official Image

    Docker 官方镜像仓库。该类仓库中的镜像由 Docker 官方构建发布,代码质量较高且安全,有较完善的文档。该类仓库中的镜像会及时更新。一般常用的系统、工具软件、中间件都有相应的官方镜像仓库。例如,Zookeeper、Redis、Nginx 等。官方镜像仓库的名称**<repository>一般直接为该类软件的名称<software-name>**。

  • Verified Publisher

    已验证发布者仓库。该类仓库中的镜像由非 Docker 官方的第三方发布。但该第三方是由 Docker 公司审核认证过的,一般为大型企业、团体或组织。审核通过后,Docker 公司会向其颁发“VERIFIED PUBLISHER”标识。这种仓库中镜像的质量还有有保证的。除了官方镜像仓库,其它都是非官方镜像仓库。非官方镜像仓库名称**<repository>一般由发布者用户名与软件名称两部分构成,形式为:<username>/<software-name>**。

  • Sponsored OSS

    由 Docker 公司赞助开发的镜像仓库。该类仓库中的镜像也由非 Docker 官方的第三方发布,但该镜像的开发是由 Docker 公司赞助的。该类型的第三方一般为个人、团队或组织。这种仓库中镜像的质量也是有保证的

  • 无认证仓库

    没有以上任何标识的仓库。这种仓库中镜像的质量良莠不齐,质量上无法保证,在使用时需谨慎。

3.1.3 第三方镜像中心

镜像中心默认使用的都是 Docker 官方的 Docker Hub。不过,镜像中心是可配置的,可以使用指定的第三方镜像中心。对于第三方镜像中心中的仓库名称**<repository>由三部分构成:<domain-name>/<username>/<software-name>。其中的< domain-name >**指的是第三方镜像中心的域名或 IP。

3.1.4 镜像定位

对于任何镜像,都可通过**<repository>:<tag>进行唯一定位。其中<tag>一般称为镜像的版本号。<tag>中有一个比较特殊的版本——latest。如果不指定,默认<tag>**即为 latest。不过,虽然其字面意思是最新版,一般其也的确存放的是最新版,但并不能保证其真的就是最新版。

3.2 镜像相关命令

如果不确定命令作用,可以使用help命令进行查看

docker --help
docker version --help

image-20240705141352653

image-20240705141433034

3.2.1 docker pull
  • 基本用法

    通过 docker pull 命令可以将指定的镜像从 docker hub 拉取到本地。如果没有指定镜像则会抛出一个 Error。例如,下面的命令是拉取 zookeeper 的 3.7 版

    docker pull zookeeper:3.7
    

    下载完成,通过images查看下载成功文件镜像,

    image-20240705142829471

    注意:如果不带版本号则默认下载lastest版本

  • DIGEST进行获取

    digest,是镜像内容的一个 Hash 值,即所谓的 Content Hash(内容散列)。只要镜像内容发生了变更,其内容散列值就一定会发生改变。注意,digest 是包含前面的 sha256 的,表示该 digest 的产生所采用的 Hash 算法是 SHA256。使用该拉取方式的具体场景或用途,后面会详解。

    docker pull zookeeper:@sha256:c7a6a6ea6a1413ca3c13e987a4f9a1d6d2ba62b1837c3b356875842c64458b73
    

    image-20240705142941168

    image-20240705143223873

    注意:使用DIGEST拉取镜像,他的TAG列不会有内容

  • 加上选项-q 后就可简化拉取过程中的日志输出。

    docker pull -q redis
    
3.2.2 docker images
  • 基础用法

    通过 docker images 命令可查看本地所有镜像资源信息。这些镜像会按照镜像被创建的时间由近及远排序。
    image-20240705145503328
    REPOSITORY:镜像仓库名称

    TAG:镜像版本号

    IMAGE ID:镜像的唯一标识

    CREATE:镜像的创建时间

    SIZE:镜像大小

  • 查看指定镜像

    docker images 可以查看指定镜像的信息

    docker images zookeeper
    

    image-20240705145623684

  • 查看完整镜像 ID

    默认的 docker images 显示的镜像 id 是经过截取后的显示结果,仅显示了前 12 位。使用 --no-trunc 参数后显示的是完成的镜像 id。

    docker images --no-trunc
    

    image-20240705145731274

  • 查看镜像 digest

    –digests选项可以查看所有镜像或指定镜像的digest信息。关于digest后面会详细学习。

    docker images --digests
    

    image-20240705145858784

  • 仅显示镜像 ID

    -q 选项可仅显示本地所有镜像的 ImageID。该主要是将来与其它命令联合使用。

    docker images -q
    

    image-20240705150018313

  • 过滤镜像

    -f 选项用于过滤指定条件的镜像。下面例举一些常用的过滤条件。例如

    docker images -f dangling=true
    

    dangling=true 用于过滤出悬虚镜像,即没有 Repository 与 Tag 的镜像。对于悬虚镜像的REPOSITORY 与 TAG,显示的是**<none>**。

    image-20240705150158604

    -f before 用于列举出本地镜像中指定镜像创建时间之前创建(CREATED)的所有镜像。

    -f since 用于列举出本地镜像中指定镜像创建时间之后的创建(CREATED)的所有镜像。

    -f reference 用于列举出<repository>:<tag>与指定表达式相匹配的所有镜像,只查询官方的镜像

    docker images -f before=hello-world
    docker images -f since=hello-world
    docker images -f reference=centos:*
    docker images -f reference=*:lastest
    
  • 格式化显示

    该选项用于格式化输出 docker images 的内容,格式需要使用 GO 模板指定。例如

    docker images --format {{.Repository}}:{{.Tag}}:{{.Size}}
    

    image-20240705150733705

3.2.3 docker search
  • 基础用法

    通过 docker search 命令可以从 docker hub 上查看指定名称的镜像。

    docker search tomcat
    

    image-20240705153858858

    之前版本还有另一个属性,AUTOMATED

    AUTOMATED 表示当前镜像是否是“自动化镜像”。什么是自动化镜像?就是使用 Docker Hub 连接一个包含 Dockerfile 文件(专门构建镜像用的文件)的 GitHub 仓库或 Bitbucket 仓库的源码托管平台,然后 Docker Hub 就会自动根据 Dockerfile 内容构建镜像。这种构建出的镜像会被标记为 AUTOMATED,这种构建镜像的方式称为 Trusted Build(受信构建)。只要 Dockerfile文件内容发生变化,那么 Docker Hub 就会构建出新的镜像。

    image-20240705161200779

  • 过滤检索结果

    用于过滤查询结果。例如,下面的是仅查询出官方提供的镜像。

    docker search tomcat --filter-official=true
    

    image-20240705154044804

  • 限制检索数量

    默认 docker search 显示 25 条检索结果,可通过–limit 选项来指定显示的结果数量。

    docker search tomcat --limit=5
    

    image-20240705154150984

  • hub 官网查看

    以上检索方式与从 docker hub 官网 https://hub.docker.com 查看是一样的,但没有官网查看的直观

3.2.4 docker rmi
  • 基本用法

    rmi,remove images。该命令用于删除指定的本地镜像。镜像通过**<repository>:<tag>**指定。如果省略要删除镜像的 tag,默认删除的是 lastest 版本

    docker rmi hello-world	
    
  • 删除多个镜像

    docker rmi 命令可一次性删除多个镜像,多个要删除的镜像间使用空格分隔。

    docker rmi hello-world zookeeper:3.7 ......
    
  • 通过 ImageID 删除镜像

    docker rmi 也可通过 ImageID 指定要删除的镜像

    docker rmi feb5d9fea6a5
    

    image-20240705154555499

  • 强制删除镜像

    默认情况下,对于已经运行了容器的镜像是不能删除的,必须要先停止并删除了相关容器然后才能删除其对应的镜像。不过,也可以通过添加-f 选项进行强制删除。

    docker rmi -f hello-world
    

    image-20240705154707694

  • 删除所有镜像

    使用组合命令删除所有镜像。当然,如果不携带-f 选项,则不会删除已打开容器的镜像

    docker rmi -f $(docker images -q)
    
3.2.5 导出/导入镜像

我们在本地生成一个镜像,想将其导出后在另一电脑上使用,则可通过导出/导入镜像来完成。

  • 导出镜像 save

    docker save 命令用于将一个或多个镜像导出为 tar 文件。例如,下面的命令是将 busybox与 hello-world 镜像导出到当前/root 目录的 my.tar 文件中。

    # 使用root用户进入到根目录
    cd ~
    docker save -o export.tar busybox:latest hello-world:latest
    # 这种方式导出也可以
    docker save busybox:latest hello-world:latest > export.tar
    

    image-20240705155632122

  • 导入镜像 load

    docker load -i export.tar
    

    运行完毕后,可以看到 buxybox 与 hello-world 两个镜像都恢复了。

    image-20240705155728367

3.3 镜像分层

3.3.1 什么是分层

Docker 镜像由一些松耦合的只读镜像层组成,Docker Daemon 负责堆叠这些镜像层,并将它们关联为一个统一的整体,即对外表现出的是一个独立的对象。

通过 docker pull 命令拉取指定的镜像时,每个 Pull complete 结尾的行就代表下载完毕了一个镜像层。例如,下面的 redis:latest 镜像就包含 6个镜像层,其中第一个镜像层已经存在,其余5个正常下载。

image-20240708083407447

image-20240708083347163

3.3.2 为什么分层

​ 采用这种分层结构的优势很多,例如,每个分层都是只读的,所有对分层的修改都是以新分层的形式出现,并不会破坏原分层内容;再如,每个分层只记录变更内容,所以有利于节省存储空间等。

​ 不过,分层结构的最大的好处是,在不同镜像间实现资源共享,即不同镜像对相同下层镜像的复用。对于 docker pull 命令,其在拉取之前会先获取到其要拉取镜像的所有 ImageID,然后在本地查找是否存在这些分层。如果存在,则不再进行拉取,而是共享本地的该分层。大大节点的存储空间与网络带宽,提升了拉取效率。

3.3.3 镜像层构成

​ 每个镜像层由两部分构成:镜像文件系统与镜像 json 文件。这两部分具有相同的 ImageID。镜像文件系统就是对镜像占有的磁盘空间进行管理的文件系统,拥有该镜像所有镜像层的数据内容。而镜像 json 文件则是用于描述镜像的相关属性的集合,通过 docker inspect [镜像]就可以直观看到。

3.3.4 镜像 FS 构成

一个 docker 镜像的文件系统 FS 由多层只读的镜像层组成,每层都完成了特定的功能。而这些只读镜像层根据其位置与功能的不同可分为两类:基础镜像层与扩展镜像层。

image-20240708085658216

  • 基础镜像层

    所有镜像的最下层都具有一个可以看得到的基础镜像层 Base Image,基础镜像层的文件系统称为根文件系统 rootfs。

    而 rootfs 则是建立在 Linux 系统中看不到的引导文件系统bootfs 之上。

  • 扩展镜像层

    在基础镜像层之上的镜像层称为扩展镜像层。顾名思义,其是对基础镜像层功能的扩展。在 Dockerfile 中,每条指令都是用于完成某项特定功能的,而每条指令都会生成一个扩展镜像层。

  • 容器层

    一旦镜像运行了起来就形成了容器,而容器就是一个运行中的 Linux 系统,其也是具有文件系统的。容器的这个文件系统是在 docker 镜像最外层之上增加了一个可读写的容器层,对文件的任何更改都只存在于容器层。因此任何对容器的操作都不会影响到镜像本身。

    容器层如果需要修改某个文件,系统会从容器层开始向下一层层的查找该文件,直到找到为止。

    任何对于文件的操作都会记录在容器层。例如,要修改某文件,容器层会首先把在镜像层找到的文件 copy 到容器层,然后再进行修改。删除文件也只会将存在于容器层中的文件副本删除。

    可以看出,Docker 容器就是一个叠加后的文件系统,而这个容器层称为 Union File System,联合文件系统。

    image-20240708085842023

3.3.5 LinuxOS 启动过程(扩展)

现代操作系统都是 C/S 模式的微内核架构的,由两大部分构成:内核(Server)与服务模块(Client)。

image-20240708093850695

Linux 的 bootfs 文件系统由两部分构成:bootloader 与 kernel。各个容器中的 rootft 就是由宿主机的 kernel 驱动的

image-20240708093902195

3.4 镜像摘要 digest

每个镜像都有一个长度为 64 位的 16 进制字符串作为其摘要 digest

3.4.1 查看摘要

在 docker pull 镜像结束后会给出该拉取的镜像的摘要 digest。

image-20240708095110399

通过 docker inspect 命令可以查看指定镜像的详细信息。其中就包含该镜像的摘要信息。

image-20240708095159145

通过 docker images --digests 命令也可以查看到镜像的摘要信息。

image-20240708095255186

3.4.2 摘要是什么

摘要,即 digest,是镜像内容的一个 Hash 值,即所谓的 Content Hash(内容散列)。只要镜像内容发生了变更,其内容散列值就一定会发生改变。也就是说,一个镜像一旦创建完毕,其 digest 就不会发生改变了,因为镜像是只读的。

Docker 默认采用的 Hash 算法是 SHA256,即 Hah 值是一个长度为 256 位的二进制值。Docker 使用 16 进制表示,即变为了长度为 64 位的字符串。

3.4.3 摘要有何用

摘要的主要作用是区分相同:的不同镜像。

例如镜像 xxx:2.8 在生产运行过程中发现存在一个 BUG。现对其进行了修复,并使用原标签将其 push 回了仓库,那么原镜像被覆盖。但生产环境中遗留了大量运行中的修复前镜像的容器。此时,通过镜像标签已经无法区分镜像是修复前的还是修复后的了,因为它们的标签是相同的。此时通过查看镜像的 digest 就可以区分出修改前后版本,因为内容发生了变化,digest 一定会变。

为了确保再次拉取到的是修复后的镜像,可通过 digest 进行镜像拉取。其用法是:docker pull <repository>@<digest>

下面的例子是,先查出 hello-world 镜像的 digest,然后将该镜像删除,然后再通过digest 对其进行拉取。

image-20240708102746888

不过,不方便的是,镜像的摘要需要由运维人员在本地进行手工维护。

3.4.4 分发散列值

在 push 或 pull 镜像时,都会对镜像进行压缩以减少网络带宽和传输时长。但压缩会改变镜像内容,会导致经过网络传输后,镜像内容与其 digest 不相符。出现问题。为了避免该问题,Docker 又为镜像配置了 Distribution Hash(分发散列值)。在镜像被压缩后立即计算分发散列值,然后使该值随压缩过的镜像一同进行发送。在接收方接收后,立即计算压缩镜像的分发散列值,再与携带的分发散列值对比。如果相同,则说明传输没有问题

3.5 多架构镜像

3.5.1 什么是多架构镜像

Multi-architecture Image,即多架构镜像,是某<repository>中的某<tag>镜像针对不同操作系统/系统架构的不同镜像实现。即多架构镜像中包含的镜像的<repository>:<tag>都是相同的,但它们针对的操作系统/系统架构是不同的

3.5.2 多架构镜像原理

无论用户使用的是什么操作系统/系统架构,其通过 docker pull 命令拉取到的一定是针对该操作系统/系统架构的镜像,无需用户自己考虑操作系统/系统架构问题。Docker Hub 能够根据提交 pull 请求的 Docker 系统的架构自动选择其对应的镜像。

image-20240708103054102

在 Docker Hub 中,镜像的多架构信息保存在 Manifest 文件中。在拉取镜像时,Docker会随着 pull 命令将当前 Docker 系统的 OS 与架构信息一并提交给 Docker Hub。Docker Hub 首先会根据镜像的<repository>:<tag>查找是否存在 Manifest。
如果不存在,则直接查找并返回<repository>:<tag>镜像即可;如果存在,则会在 Manifest 中查找是否存在指定系统/架构的镜像。如果存在该系统/架构,则根据 Manifest 中记录的地址找到该镜像的位置。

3.5.3 镜像历史信息查看 history
docker history centos:02

image-20240709162357976

相关文章:

简单的docker学习 第3章docker镜像

第3章 Docker 镜像 3.1镜像基础 3.1.1 镜像简介 ​ 镜像是一种轻量级、可执行的独立软件包&#xff0c;也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境。具体来说镜像包含运行某个软件所需的所有内容&#xff0c;包括代码、库、环境变量和配置文件等…...

jquery.ajax + antd.Upload.customRequest文件上传进度

前情提要&#xff1a;大文件分片上传&#xff0c;需要利用Upload的customRequest属性自定义上传方法。也就是无法通过给Upload的action属性赋值上传地址进行上传&#xff0c;所以Upload组件自带的上传进度条&#xff0c;也没法直接用了&#xff0c;需要在customRequest中加工一…...

一层5x1神经网络绘制训练100轮后权重变化的图像

要完成这个任务&#xff0c;我们可以使用Python中的PyTorch库来建立一个简单的神经网络&#xff0c;网络结构只有一个输入层和一个输出层&#xff0c;输入层有5个节点&#xff0c;输出层有1个节点。训练过程中&#xff0c;我们将记录权重的变化&#xff0c;并在训练100轮后绘制…...

Project #0 - C++ Primer

知识点 1.pragma once C和C中的一个非标准但广泛支持的预处理指令&#xff0c;用于使当前源文件在单次编译中只被包含一次。 #pragma once class F {}; // 不管被导入多少次&#xff0c;只处理他一次2.explicit C中的一个关键字&#xff0c;它用来修饰只有一个参数的类构造函…...

git提交commit信息规范,fix,feat

可以确保团体合作中&#xff0c;从你的提交记录可以识别出你的动作 feat&#xff1a;新功能&#xff08;featuer&#xff09;fix: 修补bugdocs&#xff1a; 文档&#xff08;documentation&#xff09;style&#xff1a;格式&#xff08;修改样式&#xff0c;不影响代码运行的…...

服务器 Linux 的文件系统初探

好久没更新文章了&#xff0c;最近心血来潮&#xff0c;重新开始知识的累计&#xff0c;做出知识的沉淀~ 万事万物皆文件 文件系统&#xff1a;操作系统如何管理文件&#xff0c;内部定义了一些规则或者定义所以在 Linux 中所有的东西都是以文件的方式进行操作在 Linux 中&am…...

关于Unity转微信小程序的流程记录

1.准备工作 1.unity微信小程序转换工具&#xff0c;minigame插件&#xff0c;导入后工具栏出现“微信小游戏" 2.微信开发者工具稳定版 3.MP微信公众平台申请微信小游戏&#xff0c;获得游戏appid 4.unity转webgl开发平台&#xff0c;Player Setting->Other Setting…...

AI入门指南:什么是人工智能、机器学习、神经网络、深度学习?

文章目录 一、前言二、人工智能(AI)是什么&#xff1f;起源概念人工智能分类人工智能应用 三、机器学习是什么&#xff1f;概念机器学习常见算法机器学习分类机器学习与人工智能的关系 四、神经网络是什么&#xff1f;概念神经网络组成部分神经网络模型神经网络和机器学习的关系…...

网络安全中的IOC是指的什么?

网络安全中的IOC&#xff08;Indicators of Compromise&#xff09;指的是威胁指标&#xff0c;是网络安全领域中的一个重要概念。它指的是可以用来识别计算机系统、网络或应用程序中已经受到攻击或遭受威胁的特定特征。这些特征可以是恶意文件、恶意域名、已知攻击工具等&…...

掌握AJAX技术:从基础到实战

文章目录 **引言****1. 什么是AJAX&#xff1f;****2. AJAX的工作原理**AJAX 示例使用 Fetch API 实现 AJAX **3. 如何在项目中使用AJAX****4. 处理AJAX请求的常见问题****5. AJAX与JSON的结合****6. 使用AJAX框架和库****7. 实战&#xff1a;创建一个动态表单****8. AJAX中的事…...

Unity UGUI 实战学习笔记(6)

仅作学习&#xff0c;不做任何商业用途 不是源码&#xff0c;不是源码! 是我通过"照虎画猫"写的&#xff0c;可能有些小修改 不提供素材&#xff0c;所以应该不算是盗版资源&#xff0c;侵权删 因为注册和登录面板的逻辑与数据存储方面已经相对完善 服务器面板逻辑…...

iOS面试之属性关键字(二):常见面试题

Q:ARC下&#xff0c;不显式指定任何属性关键字时&#xff0c;默认的关键字都有哪些&#xff1f; 对应基本数据类型默认关键字是:atomic,readwrite,assign 对于普通的 Objective-C 对象:atomic,readwrite,strong Q&#xff1a;atomic 修饰的属性是怎么样保存线程安全的&#x…...

java开发设计模式详解

目录 一、概述 1. 创建型模式(5种) 2. 结构型模式(7种) 3. 行为型模式(11种) 二、代码示例说明 1.单例模式&#xff08;Singleton&#xff09; 2.工厂方法模式(Factory Method) 3.抽象工厂模式(Abstract Factory) 4.建造者模式(Builder) 5.原型模式 (Prototype) 6.适…...

windows中node版本的切换(nvm管理工具),解决项目兼容问题 node版本管理、国内npm源镜像切换(保姆级教程,值得收藏)

前言 在工作中&#xff0c;我们可能同时在进行2个或者多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;进而不同项目必须依赖不同版本的NodeJS运行环境&#xff0c;这种情况下&#xff0c;对于维护多个版本的node将会是一件非常麻烦的事情&#xff0c;nvm就是为…...

测试面试宝典(四十四)—— APP测试和web测试有什么区别?

一、系统架构和运行环境 APP 测试需要考虑不同的操作系统&#xff08;如 iOS、Android 等&#xff09;、设备型号和屏幕尺寸&#xff0c;以及各种网络连接状态&#xff08;如 2G、3G、4G、WiFi 等&#xff09;。而 Web 测试主要针对不同的浏览器&#xff08;如 Chrome、Firefo…...

力扣高频SQL 50题(基础版)第三十七题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十七题176.第二高的薪水题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题&#xff08;基础版&#xff09;第三十七题 176.第二高的薪水 题目说明 Employee 表&#xff1a; ----------------- …...

web基础之CSS

web基础之CSS 文章目录 web基础之CSS一、CSS简介二、基本用法2、CSS应用方式2.1 行内样式2.2内部样式2.3外部样式 三、选择器1、标签选择器2、类选择器3、ID选择器4、选择器的优先级 四、常见的CSS属性1、字体属性2、文本属性3、背景属性4、表格属性5、盒子模型的属性6、定位 总…...

全球轻型卡车胎市场规划预测:2030年市场规模将接近1153亿元,未来六年CAGR为2.0%

一、引言 随着全球物流行业的持续发展&#xff0c;轻型卡车胎作为物流运输的关键消耗品&#xff0c;其市场重要性日益凸显。本文旨在探索轻型卡车胎行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球轻型卡车胎市场的增长主要受全球物流行业增加、消费者对轮胎性能要…...

8.2 数据结构王道复习 2.3.3 2.3.7选择题错题review

王道中这章主讲了线性表的定义、基本操作、顺序表示、链式表示。下方内容主分了文字部分和代码部分&#xff0c;便于记忆和整理。 在901中这章的要求集中在链表的基础操作中&#xff0c;应用题大概会出问答题。 【当前每一小节的应用题待做&#xff0c;先把选择题过完&#xff…...

【DL】神经网络与机器学习基础知识介绍(二)【附程序】

原文&#xff1a;https://mengwoods.github.io/post/dl/009-dl-fundamental-2/ 文章目录 激活函数卷积神经网络超参数其他程序 激活函数 激活函数的目的是在模型中引入非线性&#xff0c;使网络能够学习和表示数据中的复杂模式。列出常见的激活函数。 线性函数&#xff1a; y…...

6万字嵌入式最全八股文面试题大全及参考答案(持续更新)

目录 冒泡排序算法的平均时间复杂度和最坏时间复杂度分别是多少?在什么情况下使用冒泡排序较为合适? 选择排序算法是稳定的排序算法吗?为什么? 插入排序在近乎有序的数组中表现如何?为什么? 快速排序的基本思想是什么?它在最坏情况下的时间复杂度是多少? 归并排序…...

iceberg 用户文档(持续更新)

iceberg 用户文档 表 Schema 变更查看表的元数据信息表参数变更 表 Schema 变更 Iceberg 支持使用 Alter table … alter column 语法对 Schema 进行变更&#xff0c;示例如下 -- spark sql -- 更改字段类型 ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE doubl…...

基于YOLOv8的船舶检测系统

基于YOLOv8的船舶检测系统 (价格85) 包含 【散货船&#xff0c;集装箱船&#xff0c;渔船&#xff0c;杂货船&#xff0c;矿砂船&#xff0c;客船】 6个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该…...

使用腾讯云域名解析实现网站重定向

前言 最近&#xff0c;在CSDN平台上我写了一系列博客&#xff0c;希望能与同学分享一些技术心得。然而&#xff0c;每当需要向他人推荐我的博客时&#xff0c;那串复杂且缺乏规律的CSDN博客首页域名总让我感到不便。这让我开始思考&#xff0c;如果能将这一域名替换为一个既个…...

为什么相比直接使用new和std::shared_ptr构造函数,make_shared在内存分配和管理方面更为高效。

使用std::make_shared相比于直接使用new和std::shared_ptr构造函数在内存分配和管理方面更为高效&#xff0c;主要原因如下&#xff1a; 内存分配效率 std::make_shared通过一次内存分配来同时分配控制块&#xff08;用于引用计数等&#xff09;和对象的内存。这种方式减少了…...

7-Python数据类型——列表和元组的详解(增删改查、索引、切片、步长、循环)

一、列表 1.1 列表 list 有序且可变的容器&#xff0c;可以存放多个不同类型的元素 列表就是专门用来记录多个同种属性的值 列表&#xff1a;存储同一个类别的数据&#xff0c;方便操作 字符串&#xff0c;不可变&#xff1a;即&#xff1a;创建好之后内部就无法修改【内置…...

大数据-61 Kafka 高级特性 消息消费02-主题与分区 自定义反序列化 拦截器 位移提交 位移管理 重平衡

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…...

Google Gemma2 2B:语言模型的“小时代”到来?

北京时间8月1日凌晨&#xff08;当地时间7月31日下午&#xff09;&#xff0c;Google发布了其Gemma系列开源语言模型的更新&#xff0c;在AI领域引发了巨大的震动。Google Developer的官方博客宣布&#xff0c;与6月发布的27B和9B参数版本相比&#xff0c;新的2B参数模型在保持…...

三线程顺序打印1-100

三线程顺序打印1-100 题目 三个线程顺序打印1-100; 解题 基本思路 首先需要创建三个线程, 确定使用线程1打印 num % 3 1 的数, 线程2打印 num % 3 2 的数, 线程3打印 num % 3 0 的数;使用 synchronized 同步锁让每次只有一个线程进行打印, 每个线程打印前先判断当前数是…...

中央处理器CPU

中央处理器CPU cpu的组成&#xff08;从功能方面来看&#xff09;cpu的执行过程★.取指令阶段★.解码阶段★.执行阶段 重点&#xff1a; 1.cpu的组成 2.cpu怎么执行程序&#xff08;命令&#xff09; cpu的组成&#xff08;从功能方面来看&#xff09; 寄存器&#xff1a;用来临…...