【云原生】Docker基本原理及镜像管理
目录
一、Docker概述
1.1 IT架构的演进:
1.2 Docker初始
1.3 容器的特点
1.4 Docker容器与虚拟机的区别
1.5 容器在内核中支持2种重要技术
1.6 Docker核心概念
1)镜像
2)容器
3)仓库
二、安装Docker
2.1 Yum安装Docker
2.2 查看Docker信息
三、Docker的镜像管理命令
3.1 搜索镜像
3.2 获取镜像(下载镜像)
3.3 镜像加速下载
3.4 查看本地有哪些镜像
3.5 查看镜像的详细信息( 获取容器/镜像的元数据 )
3.6 为本地的镜像添加新的标签
3.7 删除镜像
3.8 批量删除镜像
3.9 存出镜像:将镜像保存成为本地文件
3.10 载入镜像:将镜像文件导入到镜像库中
3.11 上传镜像(将镜像上传到官方仓库)
总结
1、Docker是什么?能干什么?
2、Docker容器与虚拟机的区别:
3、 linux六大namespace(命名空间):
4、Docker的三大核心概念:
5、镜像管理命令:
一、Docker概述
1.1 IT架构的演进:
裸金属 → 虚拟机 → 容器→ 函数化、代码化

云计算涌现出很多改变传统IT架构和运维方式的新技术,比如虚拟机、容器、微服务、Serverless(无服务),无论这些技术应用在哪些场景,降低成本、提升效率是云服务永恒的主题。
1.运行物理机,也称为裸金属
2.虚拟机VM,可以在一台物理机上创建多个虚拟机,并把物理配置分发成多个虚拟配置
- 缺点:性能损耗大,大约损耗50%
虚拟机常用软件:
VMware workstation(windows)
vm Sphere+ESXI (Windows server)
KVM(linux内核)
3.容器 (常用软件:docker、podman、rocket、container)
- 容器内部自身有一个小型操作系统
4.函数(函数化,代码化)

1.2 Docker初始
-
Docker是一个开源的应用容器引擎,基于go语言开发并遵守了apache2.0协议开源。
-
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
-
Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
(Docker是创建容器的工具。应用运行在容器中,每个容器都有一致的运行环境,所以可以在任何主机中运行。即实现“一次封装,到处运行”的目的。)
Docker的Logo:
- Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。
- 鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。

Docker的设计宗旨:
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
- 即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
- docker是创建容器的工具。应用运行在容器中,每个容器都有一致的运行环境,所以可以在任何主机中运行。即实现“一次封装,到处运行”的目的。
1.3 容器的特点
容器化越来越受欢迎,因为容器是:
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并共享主机内核。
- 可互换:可以即时部署更新和升级。
- 便携式:可以在本地构建,部署到云,并在任何地方运行。
- 可扩展:可以增加并自动分发容器副本。
- 可堆叠:可以垂直和即时堆叠服务。
1.4 Docker容器与虚拟机的区别
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用共他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,每个虚拟机使用独立的内核,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
| 使用类型 | 功能 | KVM虚拟机 | Docker容器 | Docker容器的提升 |
|---|---|---|---|---|
| 日常运维 | CPU利用率 | 利用率低且不均 | 利用率高、均匀 | 提高了CPU的利用率 |
| 硬盘空间占用 | 20G ~ 200G | 150M ~ 300M | 极大降低了硬盘空间的占用,避免了空间浪费 | |
| 内存占用 | 共享2G ~ 32G内存 | 根据服务占用内存 | 避免了内存不足的问题 | |
| 服务器支持数量 | 20个左右 | 1000+ | 降低成本 | |
| 启动速度 | 以分钟计量,较慢,主要是操作系统启动较为耗时 | 以秒计量,其启动速度就是启动一个进程的时间 | 遇到问题可快速重启或者回滚 | |
| 项目延伸 | 拓展项目 | 需要重新部署虚拟机,过程复杂 | 通过云平台扩容,比较方便 | 扩容方便、快捷 |
| 新上线项目 | 开发、测试、生产环境很难实现同步,容易出现问题 | 能够实现所有环境统一标准,不再依赖操作系统和软件库 | 效率大幅度上升 |
| 特性 | Docker容器 | 虚拟机 |
|---|---|---|
| 内核的使用 | 共享内核 | 独立内核 |
| 启动速度 | 秒级(相当于启动一个进程) | 分钟级(启动操作系统) |
| 计算能力损耗 | 几乎无 | 损耗 50%左右 |
| 性能 | 接近原生 | 弱于 |
| 系统支持量(单机) | 上千个 | 几十个 |
| 隔离性 | 资源隔离/限制 | 完全隔离(因为是独立的操作系统) |
| 操作系统 | 主要支持Linux | 几乎所有(KVM) |
| 封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
- docker就相当于宿主机的一个进程,所以损耗微乎其微。
- 虚拟机和操作系统之间是hypervisor,虚拟化管理程序,虚拟化各种硬件资源,这中间就会有资源损耗。

1.5 容器在内核中支持2种重要技术
docker本质就是宿主机的一个进程,docker是通过 namespace 实现资源隔离,通过 cgroup 实现资源限制(限制硬件资源,限制2个容器相互之间抢资源),通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
linux六大namespace(命名空间):
| namespace | 系统调用参数 | 隔离内容 |
|---|---|---|
| UTS | CLONE_NEWUTS | 主机名和域名 |
| IPC | CLONE_NEWWIPS | 信号量,消息队列和共享内存 |
| PID | CLONE_NEWPID | 进程编号 |
| NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
| MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
| USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |

1.6 Docker核心概念
1)镜像
- Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
- 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
2)容器
- Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
- 可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
3)仓库
- Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
- Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。

二、安装Docker
2.1 Yum安装Docker
目前 Docker 只能支持 64 位系统。
Yum安装默认安装最新版本,目前最新版本是2020版本。但工作中不会用这么新的版本,前一个版本是2019版本。
#关闭防火墙和selinuxsystemctl stop firewalld.servicesetenforce 0#安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------------------------------------------------#yum-utils:提供了 yum-config-manager 工具。#device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。#device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。--------------------------------------------------------------------------------------------#设置阿里云镜像源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装 Docker-CE并设置为开机自动启动yum install -y docker-ce #docker-ce-cli、containerd.io 会作为依赖包被安装systemctl start docker.servicesystemctl enable docker.service





2.2 查看Docker信息
#查看 docker 版本信息
docker version
#注意:Yum安装默认安装最新版本,目前最新版本是2020版本。但工作中不会用这么新的版本,前一个版本是2019版本。
#docker信息查看
docker info
//查看的部分信息如下:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 0 #容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 0 #镜像数量
Server Version: 20.10.17 #server版本
Storage Driver: overlay2 #docker使用的是overlay2 文件驱动
Backing Filesystem: xfs #宿主机上的底层文件系统
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs #cgroups 驱动,默认为cgroupfs,也可以修改为systemd
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
查看 docker 版本信息:

docker信息查看:

三、Docker的镜像管理命令
3.1 搜索镜像


3.2 获取镜像(下载镜像)

3.3 镜像加速下载
登录阿里云平台,获取加速器地址:

配置镜像加速:



3.4 查看本地有哪些镜像
镜像下载后存放在 /var/lib/docker
#查看下载的镜像文件信息 cat /var/lib/docker/image/overlay2/repositories.json


3.5 查看镜像的详细信息( 获取容器/镜像的元数据 )

3.6 为本地的镜像添加新的标签
添加标签后,镜像的ID号并不会改变。

3.7 删除镜像
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。


3.8 批量删除镜像

3.9 存出镜像:将镜像保存成为本地文件
将镜像保存成为本地文件,实际是将镜像打包成一个tar包。

3.10 载入镜像:将镜像文件导入到镜像库中
主机A通过scp命令将打包好镜像文件传给主机B:

主机B将镜像文件导入到镜像库中:

3.11 上传镜像(将镜像上传到官方仓库)
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号,hub.docker.com 。默认上传到公有仓库,其他人可以下载仓库中的镜像。如果想设置成私有仓库(仅自己可见),不允许其他人下载,需要付费。
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。docker logout 命令进行登出。
在上传镜像之前,还需要先对本地镜像添加新的标签,在镜像名称前加上仓库名,然后再使用 docker push 命令进行上传。




总结
1、Docker是什么?能干什么?
Docker是基于go语言开发的开源容器引擎,可以在任何主机上运行容器应用,并且每个容器都是一个轻量级的虚拟机。实现“一次封装,到处运行”的目的。
2、Docker容器与虚拟机的区别:
| 特性 | Docker容器 | 虚拟机 |
|---|---|---|
| 内核的使用 | 共享内核 | 独立内核 |
| 启动速度 | 秒级(相当于启动一个进程) | 分钟级(启动操作系统) |
| 计算能力损耗 | 几乎无 | 损耗 50%左右 |
| 性能 | 接近原生 | 弱于 |
| 系统支持量(单机) | 上千个 | 几十个 |
| 隔离性 | 资源隔离/限制 | 完全隔离(因为是独立的操作系统) |
| 操作系统 | 主要支持Linux | 几乎所有(KVM) |
| 封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
-
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用共他任何可执行文件的内存,非常轻量。
-
虚拟机运行的是一个完整的操作系统,每个虚拟机使用独立的内核,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多,会产生资源损耗。
3、 linux六大namespace(命名空间):
| namespace | 系统调用参数 | 隔离内容 |
|---|---|---|
| UTS | CLONE_NEWUTS | 主机名和域名 |
| IPC | CLONE_NEWWIPS | 信号量,消息队列和共享内存 |
| PID | CLONE_NEWPID | 进程编号 |
| NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
| MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
| USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |
4、Docker的三大核心概念:
镜像、容器、仓库
5、镜像管理命令:
| 命令 | 作用 |
|---|---|
| docker search <仓库/镜像名> | 搜索镜像 |
| docker pull <仓库/镜像名> | 下载镜像 |
| docker images | 查看本地的所有镜像 |
| docker images -q | 只显示本地所有镜像的ID号 |
| docker inspect <镜像ID/容器ID> | 查看镜像的详细信息( 获取镜像/容器的元数据 ) |
| docker tag 名称:[标签] [仓库名/]名称:[新标签] | 为本地的镜像添加新的标签 |
| docker rmi < 镜像名称:标签> | 删除镜像的某个标签 |
| docker rmi <镜像ID> -f | 删除指定镜像 |
| docker rmi $(docker images -q) | 删除本地所有镜像 |
| docker save -o 镜像文件.tar 镜像名称:标签 | 存出镜像:将镜像保存为本地文件 |
| docker load -i[或<] 镜像文件 | 载入镜像:将镜像文件导入到镜像库中 |
| docker login | 登录公共仓库docker hub |
| docker push 仓库名/镜像名:标签 | 上传镜像(将镜像上传到官方仓库) |
| docker logout | 登出docker hub |
相关文章:
【云原生】Docker基本原理及镜像管理
目录 一、Docker概述 1.1 IT架构的演进: 1.2 Docker初始 1.3 容器的特点 1.4 Docker容器与虚拟机的区别 1.5 容器在内核中支持2种重要技术 1.6 Docker核心概念 1)镜像 2)容器 3)仓库 二、安装Docker 2.1 Yum安装Docker…...
Apache Doris大规模数据使用指南
目录 发展历史 架构介绍 弹性MPP架构-极简架构 逻辑架构 基本访问架构 分区 创建单分区表...
RabbitMQ 持久化
通过持久化可以尽量防止在RabbitMQ异常情况下(重启、关闭、宕机)的数据丢失。持久化技术是解决消息存储到队列后的丢失问题,但是通过持久化并不能完全保证消息不丢失。 持久化 交换机持久化队列持久化消息持久化总结 持久化技术可以分为交换机…...
STM32 定时器复习
12MHz晶振的机器周期是1us,因为单片机的一个机器周期由6个状态周期组成,1个机器周期6个状态周期12个时钟周期,因此机器周期为1us。 51单片机常用 for(){__nop(); //执行一个机器周期,若想循环n us,则循环n次。 }软件…...
17-工程化开发 脚手架 Vue CLI
开发Vue的两种方式: 1.核心包传统开发模式: 基于 html/css /js 文件,直接引入核心包,开发 Vue。 2.工程化开发模式: 基于构建工具 (例如: webpack)的环境中开发 Vue。 问题: 1. webpack 配置不简单 2. 雷同的基础配置 3. 缺乏统…...
golang 分布式微服务DAO层构建
构建云原生项目的dao层 配置读写分离的mysql集群 1. 编写yml配置文件 搭建一主二从的mysql集群、单机redis db.yml mysql:source: # 主数据库driverName: mysqlhost: 127.0.0.1port: 3309database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4replica1…...
Java 项目日志实例:LogBack
点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ LogBack 和 Log4j 都是开源日记工具库,LogBack 是 Log4j 的改良版本,比 Log4j 拥有更多的特性,同时也带来很大性能提升。LogBack 官方建…...
什么是条件get方法?
条件GET方法通常指的是HTTP协议中的"GET"请求,但它带有一些条件,这些条件用于控制服务器是否应该返回请求的资源。这些条件通常使用HTTP标头字段来指定,以便客户端可以告诉服务器在某些条件下是否需要新的或更新的资源。 条件GET方…...
Python爬虫——scrapy_crawlspider读书网
创建crawlspider爬虫文件: scrapy genspider -t crawl 爬虫文件名 爬取的域名scrapy genspider -t crawl read https://www.dushu.com/book/1206.htmlLinkExtractor 链接提取器通过它,Spider可以知道从爬取的页面中提取出哪些链接,提取出的链…...
Spring源码编译-for mac
超详细的spring源码编译 记:编译成功时间:2023.08.19 环境准备: 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本:spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…...
视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案
众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控…...
中间件:RocketMQ安装部署
单机部署 下载 cd /opt/soft/archive wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip unzip -d ../ rocketmq-all-4.9.4-bin-release.zip配置 broker.conf 的brokerIP1 为公网ip 启动命令: nohup sh bin/mqnamesrv &a…...
leetcode-动态规划-42-接雨水
题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1…...
[静态时序分析简明教程(十一)]浅议tcl语言
静态时序分析简明教程-浅议tcl语言 一、写在前面1.1 快速导航链接 二、Tcl基础知识三、Tcl的语言结构3.1 Tcl变量3.2 Tcl表达式与运算符3.3 Tcl的控制流语句3.3.1 列表遍历3.3.2 决策3.3.3 Tcl循环3.3.4 Tcl过程 3.4 其他Tcl命令3.4.1 open/close3.4.2 gets/puts3.4.3 catch3.4…...
大数据-玩转数据-Flink 网站UV统计
一、说明 在实际应用中,我们往往会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV)。 二、数据准备 package com.lyh.flink06;import lombo…...
3分钟了解下cwnd和TCP拥塞控制算法
文章首发地址 cwnd是什么? cwnd是TCP拥塞控制中的一个重要概念,全称为“congestion window”,也被称为拥塞窗口。它用于限制发送方向网络发送数据的速度,以避免网络拥塞。cwnd是一个动态的值,可以根据网络状况动态调…...
设计模式之状态模式(State)的C++实现
1、状态模式的提出 在组件功能开发过程中,某些对象的状态经常面临变化,不同的状态,其对象的操作行为不同。比如根据状态写的if else条件情况,且这种条件变化是经常变化的,这样的代码不易维护。可以使用状态模式解决这…...
无涯教程-TensorFlow - Keras
Keras易于学习的高级Python库,可在TensorFlow框架上运行,它的重点是理解深度学习技术,如为神经网络创建层,以维护形状和数学细节的概念。框架的创建可以分为以下两种类型- 顺序API功能API 无涯教程将使用Jupyter Notebook执行和…...
使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地
本文主要实现了在Ubuntu云服务器后台运行Jupyter Notebook,并使用SSH隧道将服务器端口映射到本地 1. 生成配置文件 运行以下命令生成Jupyter Notebook的配置文件: jupyter notebook --generate-config这将在用户主目录下生成一个名为.jupyter的文件夹&…...
Keepalived+LVS部署高可用集群
文章目录 KeepalivedLVS(DR)部署高可用Web集群集群环境MASTER配置BACKUP配置检查Virtual IP是否漂移IPVS检查MASTERBACKUP Real Server配置附上个人写的小脚本 测试停用Real Server某一台的Apache服务停用Master上的keepalived检测Backup是否接管资源 KeepalivedLVS(DR)部署高可…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
