Docker容器基础篇

一.Docker容器简要介绍

Docker 是一个开源项目,旨在提供轻量级的应用容器化解决方案。它允许开发者打包应用及其所有依赖项到一个标准化的单元中,称为容器。这些容器可以在开发人员的工作环境中构建,然后轻松地在不同的计算机、服务器或云平台上运行,而无需担心环境差异或依赖问题。

1.操作系统的组成

Bootloader (引导加载程序)

引导加载程序是启动计算机时加载操作系统的程序。它位于计算机的固件或引导设备的特定分区中,并负责引导操作系统的加载过程。

Shell (命令行解释器)

Shell 是用户与操作系统交互的主要界面,它可以理解和执行用户输入的命令。Shell 提供了命令行界面(CLI),允许用户通过输入命令来操作文件、进程以及运行其他程序。

Kernel (内核)

内核是操作系统的核心部分,负责管理计算机的硬件资源和提供基本的服务给其他软件。它管理内存、处理器、设备驱动程序和系统调度,确保软件和硬件资源的有效利用和安全运行。

Desktop Environment (桌面环境)

桌面环境是操作系统中提供给用户的图形用户界面(GUI),它包括窗口管理器、面板、图标、工具栏等,使得用户可以通过鼠标点击和图形化方式来操作和管理计算机系统。

Graphical Server (图形服务器)

图形服务器是操作系统的一个子系统,负责管理和渲染图形输出到显示器上。它接收来自应用程序的图形指令,并将它们转换为适合显示器显示的像素信息。

Applications (应用程序)

应用程序是用户直接使用的软件,用于执行特定的任务和操作。这些可以是办公软件如 Word、Excel,也可以是浏览器、媒体播放器等等。

Daemons (守护进程)

守护进程是在后台运行的服务程序,通常在系统启动时启动,并持续运行以提供某种服务或支持功能。它们通常不与用户交互,而是在系统运行时处理特定的任务或服务,例如网络服务、打印服务等。

 2.什么是内核kernel

内核(Kernel)是操作系统的核心组件,它在计算机系统中扮演着至关重要的角色。下面是内核的主要任务和功能:

进程管理

内核负责管理系统中的进程(也称为任务或线程),包括进程的创建、调度、终止和进程间通信。

内存管理

内核管理系统的物理内存和虚拟内存,包括内存的分配、释放、虚拟内存到物理内存的映射等。

I/O管理

内核管理输入输出操作,包括对设备(如硬盘、网络接口、显示器等)的访问和控制。

系统调用

内核提供系统调用接口,允许用户程序请求操作系统提供的服务,如文件操作、网络通信等。

设备驱动程序

内核通过设备驱动程序与硬件设备交互,驱动程序允许内核控制和管理各种硬件设备的操作。

安全性和权限管理

内核确保系统的安全性,包括权限管理、用户身份验证、访问控制等。

系统调度

内核根据预定的调度策略和优先级,决定哪个进程在何时运行,以优化系统资源的利用。

错误处理和容错

内核负责处理系统的错误和异常情况,以保证系统的稳定性和可靠性。

3.什么是内核空间和用户空间

内核空间

内核处于提升的系统状态,其中包括受保护的内存空间以及对设备硬件的完全访问权限。 此系统状态和内存空间统称为内核空间。 在内核空间内,对硬件和系统服务的核心访问进行管理,并作为服务提供给系统的其余部分。

用户空间

用户空间或用户域是在操作系统内核环境之外运行的代码,用户空间定义为操作系统用来与内核连接的各种应用程序或程序或库。

用户的应用程序是在用户空间中执行的,它们可以通过内核系统调用访问计算机可用资源的一部分。 通过使用内核提供的核心服务,可以创建用户级别的应用程序,例如游戏或办公软件。

4.容器和虚拟机表现比较

  1. 资源利用率更高

    容器确实比传统的虚拟机利用资源更高效。这是因为容器直接运行在宿主操作系统的内核上,无需额外的操作系统层,减少了资源消耗。虚拟机则需要独立的操作系统镜像和虚拟化管理层,因此通常会有更大的资源开销。
  2. 启动速度更快

    容器启动速度通常比虚拟机快得多。容器之间可以共享宿主操作系统的内核,因此它们可以在几秒钟内启动,而虚拟机需要启动完整的操作系统,通常需要数十秒到数分钟的时间。
  3. 占用空间更小

    容器通常占用的磁盘空间比虚拟机小得多。容器镜像一般以MB为单位,因为它们共享宿主操作系统的文件系统和资源。虚拟机则需要完整的独立操作系统镜像,因此通常以GB为单位。
  4. 集成性更好

    容器由于其轻量级和快速启动的特性,更适合与持续集成和持续部署(CI/CD)工具集成。开发团队可以更容易地将应用程序打包为容器镜像,并在不同环境中快速部署和运行,实现自动化和高效的开发生命周期管理。

5.Docker的组成

docker 官网: http://www.docker.com

帮助文档链接: https://docs.docker.com/

docker 镜像: https://hub.docker.com/

docker 中文网站:http://www.docker.org.cn/

  • Docker 主机(Host): 一个物理机或虚拟机,用于运行Docker服务进程和容器,也称为宿主机,node节点

  • Docker 服务端(Server): Docker守护进程,运行docker容器

  • Docker 客户端(Client): 客户端使用 docker 命令或其他工具调用docker API

  • Docker 镜像(Images): 镜像可以理解为创建实例使用的模板,本质上就是一些程序文件的集合

  • Docker 仓库(Registry): 保存镜像的仓库,官方仓库: https://hub.docker.com/,可以搭建私有仓库harbor

  • Docker 容器(Container): 容器是从镜像生成对外提供服务的一个或一组服务,其本质就是将镜像中的程序启动后生成的进程

6.验证系统cgroups

Cgroups在内核层默认已经开启,从CentOS 和 Ubuntu 不同版本对比,显然内核较新的支持的功能更多。

grep CGROUP /boot/config-3.10.0-693.el7.x86_64

cgroups具体实现

  • blkio: 块设备IO限制

  • cpu: 使用调度程序为 cgroup 任务提供 cpu 的访问

  • cpuacct: 产生 cgroup 任务的 cpu 资源报告

  • cpuset: 如果是多核心的 cpu,这个子系统会为 cgroup 任务分配单独的 cpu 和内存

  • devices: 允许或拒绝 cgroup 任务对设备的访问

  • freezer: 暂停和恢复 cgroup 任务

  • memory: 设置每个 cgroup 的内存限制以及产生内存资源报告

  • net_cls: 标记每个网络包以供 cgroup 方便使用

  • ns: 命名空间子系统

  • perf_event: 增加了对每 group 的监测跟踪的能力,可以监测属于某个特定的 group 的所有线程以及运行在特定CPU上的线程

7.Docker的缺点

  • 多个容器共用宿主机的内核,各应用之间的隔离不如虚拟机彻底

  • 由于和宿主机之间的进程也是隔离的,需要进入容器查看和调试容器内进程等资源,变得比较困难和繁琐

  • 如果容器内进程需要查看和调试,需要在每个容器内都需要安装相应的工具,这也造成存储空间的重复浪费

二.安装Docker

官方网址: https://www.docker.com/

OS系统版本选择:

Docker 目前已经支持多种操作系统的安装运行,比如Ubuntu、CentOS、Redhat、Debian、Fedora,甚至是还支持了Mac和Windows,在linux系统上需要内核版本在3.10或以上

Docker版本选择:

docker版本号之前一直是0.X版本或1.X版本,但是从2017年3月1号开始改为每个季度发布一次稳定版,其版本号规则也统一变更为YY.MM,例如17.09表示是2017年9月份发布的Docker之前没有区分版本,但是2017年推出(将docker更名为)新的项目Moby,github地址: https://github.com/moby/moby,Moby项目属于Docker项目的全新上游,Docker将是一个隶属于的Moby的子产品,而且之后的版本之后开始区分为 CE(Docker Community Edition,社区版本)和EE(Docker Enterprise Edition,企业收费版),CE社区版本和EE企业版本都是每个季度发布一个新版本,但是EE版本提供后期安全维护1年,而CE版本是4个月,以下为官方原文:

https://blog.docker.com/2017/03/docker-enterprise-edition/

如果要布署到kubernets上,需要查看相关kubernets对docker版本要求的说明,比如:

https://github.com/kubernetes/kubernetes/blob/v1.17.2/CHANGELOG-1.17.md

安装可以参考以下文档

阿里云文档: https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b11guHCWE

官方文档 : https://docs.docker.com/engine/install/

1.yum安装

CentOS 6 因内核太旧,即使支持安装docker,但会有各种问题,不建议安装

CentOS 7 的 extras 源虽然可以安装docker,但包比较旧,建议从官方源或镜像源站点下载安装docker

CentOS 8 有新技术 podman 代替 docker

因此建议在CentOS 7 上安装 docker

#extras 源中包名为docker
yum list docker官方地址下载 rpm包
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
阿里云地址下载
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

cd /etc/yum.repos.d/
#CentOS 7 安装docker依赖三个yum源:Base,Extras,docker-ceyum install -y yum-utils device-mapper-persistent-data lvm2
#安装 依赖工具
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#添加源信息
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
#修改配置文件
yum makecache fast
yum list docker-ce
#查看最新版本
yum list --showduplicates docker-ce
#查看所有的可用版本
yum list --help
#可以使用帮助查看
yum list docker-ce.x86_64 --showduplicates
#显示可安装版本
yum -y install docker-ce-19.03.15-3.el7 docker-ce-cli-19.03.15-3.el7  containerd.io
# 安装指定版本的Docker-CE和客户端,注意客户端也要指定,否则或造成不一致
#yum -y install docker-ce-[VERSION]
#如不指定版本默认最新

[root@localhost yum.repos.d]# mkdir -p /etc/docker
[root@localhost yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://ifxbyp3x.mirror.aliyuncs.com"]
> }
> EOF
{"registry-mirrors": ["https://ifxbyp3x.mirror.aliyuncs.com"]
}
验证运行
[root@localhost yum.repos.d]# systemctl daemon-reload
[root@localhost yum.repos.d]# systemctl restart docker
[root@localhost yum.repos.d]# docker run hello-world

软件作用
docker-ce(Docker Community Edition)这是 Docker 的社区版。Docker 社区版是免费的, 面向开发者、小型团队和个人使用。它包含了 Docker Engine, 这是一个用于构建和运行容器的开源容器运行时。
docker-ce-cli(Docker Command Line Interface)这是 Docker 的命令行工具, 它允许用户与 Docker Engine 交互,执行容器相关的操作。 通过 Docker CLI,用户可以构建、运行、管理和发布容器。
containerd.io它负责管理容器的生命周期,包括容器的创建、运行、暂停、继续和销毁等

三.基础操作

1.docker程序环境

1.1 环境配置文件

/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage
/etc/sysconfig/docker

1.2  Unit File

/usr/lib/systemd/system/docker.service

1.3  docker-ce 配置文件

/etc/docker/daemon.json

1.4  Docker Registry 配置文件

/etc/containers/registries.conf

2. 基础操作

2.1  查看docker 版本

docker version

2.2 docker 信息查看

[root@localhost data]#docker info 
Client: Docker Engine - CommunityVersion:    26.1.4Context:    defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version:  v0.14.1Path:     /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version:  v2.27.1Path:     /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 2                     # 容器数量           Running: 0Paused: 0Stopped: 2Images: 4                       # 镜像数量          Server Version: 26.1.4          # server 版本Storage Driver: overlay2        #docker 使用的是 overlay2 文件驱动  Backing Filesystem: xfs        ## 宿主机上的底层文件系统Supports d_type: trueUsing metacopy: falseNative Overlay Diff: trueuserxattr: falseLogging Driver: json-fileCgroup Driver: cgroupfs          # Cgroups 驱动Cgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 runcDefault Runtime: runcInit Binary: docker-initcontainerd version: d2d58213f83a351ca8f528a95fbd145f5654e957runc version: v1.1.12-0-g51d5e94init version: de40ad0Security Options:seccompProfile: builtinKernel Version: 3.10.0-693.el7.x86_64             # 宿主机的相关信息Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 1.781GiBName: localhost.localdomainID: 39eee203-7863-4c80-a955-9aef575138c1Docker Root Dir: /var/lib/docker                    # docker 数据存储目录Debug Mode: falseExperimental: falseInsecure Registries:127.0.0.0/8Registry Mirrors:https://6ijb8ubo.mirror.aliyuncs.com/                   # registry 地址Live Restore Enabled: false

2.3 镜像仓库加速

#镜像加速下载
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://ifxbyp3x.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

四.镜像管理

制作镜像  上传镜像  下载镜像  查找镜像  导出镜像  导入镜像  删除镜像  查询镜像

命令含义例子
docker --help查看帮助
docker image --help查看镜像帮助docker image --help
docker search 镜像名称搜索相关镜像docker search nginx
docker pull 镜像名称:标签下载镜像(不加标签默认使用latest)docker pull nginx
docker images查看所有已有镜像docker images
docker images 镜像名称查看单个镜像docker images nginx
docker inspect 镜像ID查看镜像的详细信息docker inspect 56b21e040954
docker tag 旧名称 新名称修改镜像的 标签docker tag nginx:latest lucky/nginx:1.25

1.搜索镜像

官方网站进行镜像的搜索

官网: http://www.docker.org.cn/

#格式
docker search 关键字
#NAME: 列出了搜索结果中各个镜像的名称。
#DESCRIPTION: 描述了每个镜像的简要说明或介绍。
#STARS: 显示了每个镜像的星级评分或受欢迎程度。星级数量越高表示该镜像的受欢迎程度越高。
#OFFICIAL: 表示是否是官方构建的镜像,OK表示是官方构建的。
#AUTOMATED: 表示是否是自动构建的镜像,这个字段没有值表示不是自动构建的。

2.下载镜像

从 docker 仓库将镜像下载到本地,命令格式如下

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Options:-a, --all-tags               Download all tagged images in the repository--disable-content-trust   Skip image verification (default true)--platform string         Set platform if server is multi-platform capable-q, --quiet                   Suppress verbose output#NAME: 是镜像名,一般的形式 仓库服务器:端口/项目名称/镜像名称
#:TAG: 即版本号,如果不指定:TAG,则下载最新版镜像  工作中指定版本号
docker  pull nginx

3.查看镜像的信息

docker images
docker image inspect nginx   #可以指定名字
docker image inspect 605c77e624dd   #指定id
du /var/lib/docker/overlay2/
#此目录下有镜像文件了

4.镜像导出

利用docker save命令可以将从本地镜像导出为一个打包 tar文件,然后复制到其他服务器进行导入使用

格式:

docker save [OPTIONS] IMAGE [IMAGE...]
选项:  
-o, --output string   Write to a file, instead of STDOUT

常见用法:

docker save -o /path/file.tar IMAGE1 IMAGE2 ...
docker save IMAGE1 IMAGE2 ... > /path/file.tar

示例:

docker save alpine >/data/alpine.tardocker save  -o /data/alpine.tar  #-o指定导出目录

5.删除镜像

格式:

docker rmi 镜像名称
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker image rm [OPTIONS] IMAGE [IMAGE...]
#选项:
-f, --force     Force removal of the image--no-prune   Do not delete untagged pdocker images -q
列出系统中所有 Docker 镜像的 ID
docker rmi -f `docker images -q`
#删除所有镜像

示例: 

docker rmi apline

6.恢复镜像

格式:

docker load -i 镜像源路径

示例: 

docker load -i /data/alpine.tar

查看运行中的容器

docker ps -a
#查看运行中的容器

docker run -d httpd
#运行容器 如果没有会去官网下载后运行
#镜像相当于模板   容器相对于虚拟机

7.镜像打标签

docker tag
docker tag busybox 192.168.240.11/data/buysbox:v1.0
docker images
docker rmi 192.168.240.11/data/buysbox:v1.0

8.上传镜像

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号,注册地址https://hub.docker.com。
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传

docker tag nginx:latest  zxy/nginx:latest
docker images

docker login								
#登录公共仓库

docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zxyjing/zxy:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/zxyjing/zxy:[镜像版本号]
#上传镜像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux更换pip下载镜像源

Windows中修改pip下载源-CSDN博客 本机Linux发行版本: Rocky_linux9.4 方法一&#xff1a; [rootlocalhost ~]# mkdir /root/.pip [rootlocalhost ~]# vim /root/./.pip/pip.conf [global] index-url http://mirrors.aliyun.com/pypi/simple/[install] trusted-hostmirror…

Laravel Mix与Webpack集成:打造现代化前端开发流程

Laravel Mix与Webpack集成&#xff1a;打造现代化前端开发流程 Laravel不仅仅是一个后端框架&#xff0c;它还为前端开发提供了强大的工具。Laravel Mix是一个强大的前端集成工具&#xff0c;它使用Webpack作为底层&#xff0c;为Laravel项目提供了一系列编译和热重载功能。本…

Redis的分布式锁

目录 一、定义与原理 基于Redis的分布式锁 获取锁 释放锁 锁误删问题&#xff1a;因为key值一样,将别人的锁删掉了 锁误判问题二&#xff1a;判断锁和释放锁不是原子性的 Lua脚本 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁 分布式锁的优点…

Spring Cache常用注解

依赖代码如下&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency> 常用注解详解 1. Cacheable 作用&#xff1a;主要用于配置方法&#xff0c;使其…

Java编写SIP协议

1、编写Server代码 package com.genersoft.iot.vmp.sip; import javax.sip.*; import javax.sip.message.*; import javax.sip.header.*; import java.util.*;public class SimpleSipServer implements SipListener {private SipFactory sipFactory;private SipStack sipStack…

【前端】一文带你了解 CSS

文章目录 1. CSS 是什么2. CSS 引入方式2.1 内部样式2.2 外部样式2.3 内联样式 3. CSS 常见选择器3.1 基础选择器3.1.1 标签选择器3.1.2 类选择器3.1.3 id 选择器3.1.4 通配符选择器 3.2 复合选择器3.2.1 后代选择器 4. CSS 常用属性4.1 字体相关4.2 文本相关4.3 背景相关4.4 设…

前端必备基础【网络通信】(2024最新版)

Ajax Asynchronous Javascript and XML 的缩写&#xff0c;是使用 JS 发起网络通信的技术统称&#xff0c;具体步骤为&#xff1a; 创建 XMLHttpRequest 实例发出 HTTP 请求接收服务器传回的数据更新网页数据&#xff08;通常是部分内容&#xff0c;而不是整个网页&#xff09…

LLM - 理解 大模型 Batch 推理的 Padding Side (左填充或右填充)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140697827 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 使用 Left Padding (左填充) 或者 Right Padding (右填充),HuggingFac…

DBeaver安装与使用教程 免费的连接mysql数据库软件

一、DBeaver安装 &#xff08;一&#xff09;Dbeaver下载 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;免费&#xff0c;跨平台&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数据库。 官网…

通常指的是将数据存储在远程服务器上

云存储:通常指的是将数据存储在远程服务器上,而不是本地计算机上。对于AWS(Amazon Web Services),云存储服务主要由S3(Simple Storage Service)提供。boto3:这是AWS的官方Python SDK,它允许Python开发者与AWS服务进行交互。S3():在boto3中,S3()是一个客户端对象,用…

C语言经典习题24

文件操作习题 一 编程删除从C盘home文件夹下data.txt文本文件中所读取字符串中指定的字符&#xff0c;该指定字符由键盘输入&#xff0c;并将修改后的字符串以追加方式写入到文本文件C:\home\data.txt中。 #include<stdio.h> main() { char s[100],ch; int i;…

带你学会Git必会操作

文章目录 带你学会Git必会操作1Git的安装2.Git基本操作2.1本地仓库的创建2.2配置本地仓库 3.认识一些Git的基本概念3.1操作流程&#xff1a; 4.一些使用场景4.1添加文件场景一4.2查看git文件4.3修改文件4.4Git版本回退4.5git撤销修改 5.分支管理5.1查看分支5.2创建本地分支5.3切…

使用Docker Compose管理Java微服务

使用Docker Compose管理Java微服务 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨如何使用Docker Compose来管理Java微服务。Docker Compose是一个用于定义和运行多容器Docker应用程序…

【C++进阶】AVL树详解

文章目录 1. AVL树的概念2. AVL树结点的定义3. AVL 树的插入3.1 关于平衡因子3.2 插入代码 4. AVL 树的旋转逻辑4.1 不需要旋转4.2 左旋4.3 右旋4.4 双旋4.4.1 先右后左单旋&#xff08;RL 旋转&#xff09;4.4.2 先左后右单旋&#xff08;LR 旋转&#xff09; 4.5 完整插入代码…

web UI自动化测试 浏览器模式设置

自动化之浏览器模式设置 做selenium UI自动化测试时&#xff0c;每次都需要启动浏览器、用例运行结束后再关闭浏览器&#xff0c;浏览器启动相当地耗费时间&#xff0c;在本机运行用例的话还得放开双手&#xff0c;可以使用chrome的headless模式&#xff0c;让浏览器在后台运行…

C语言pow函数

cmath库里有pow函数&#xff0c;这个函数在图形处理方面上经常用到&#xff0c;但是如果让你自己写这个函数&#xff0c;就不一定能写出来了&#xff0c;本期文章我就带大家写pow函数 源码&#xff1a; double factorial(int n) {if (n 0) return 1;double result 1;for (i…

C语言 | Leetcode C语言题解之第301题删除无效的括号

题目&#xff1a; 题解&#xff1a; struct Next { int l, r, cl, cr; };void vec_push(char*** v, int* n, char* s) {if (!(*n & *n1)) {*v realloc(*v, sizeof(char*) * ((*n << 1) | 1));}(*v)[(*n)] s; }void dfs(const char* s, int i, struct Next next[],…

图片格式怎么转换?这几种图片格式转换方法简单又高效

图片已成为我们日常生活与工作中不可或缺的一部分。然而&#xff0c;不同平台和应用往往对图片格式有着特定的要求&#xff0c;这就使得图片格式的转换成为了一项必备技能。下面给大家分享5种能够简单高效的转换图片格式方法&#xff0c;快来一起学习下吧。 方法一&#xff1a;…

模拟算法概览

前言 LeetCode上的模拟算法题目主要考察通过直接模拟问题的实际操作和过程来解决问题。这类题目通常不需要高级的数据结构或复杂的算法&#xff0c;而是通过仔细的逻辑和清晰的步骤逐步解决。 适合解决的问题 模拟算法适合用来解决那些逻辑明确、步骤清晰且可以逐步执行的问…

JavaFX布局-TitledPane

JavaFX布局-TitledPane 常用属性textcontentgraphicexpandedcollapsibleanimated 实现方式Javafxml 提供了一个可折叠的标题栏和一个内容区域内容区域可以嵌套其他布局 常用属性 text 设置标题 titledPane.setText("测试标题");content 内容区域&#xff0c;可以单…