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

Docker生存手册:安装到服务一本通

文章目录

  • 一. Docker 容器介绍
    • 1.1 什么是Docker容器?
    • 1.2 为什么需要Docker容器?
    • 1.3 Docker架构
    • 1.4 Docker 相关概念
    • 1.5 Docker特点
  • 二. Docker 安装
    • 2.1 查看Linux内核版本
    • 2.2 卸载老版本docker,避免产生影响
    • 2.3 升级yum 和配置源
    • 2.4 安装Docker
    • 2.5 启动Docker
    • 2.6 验证Docker
    • 2.7 设置Docker开机自启
    • 2.8 配置镜像加速器
    • 2.9 验证镜像加速是否生效
    • 2.10 卸载Docker
  • 三. Docker 命令
    • 3.1 镜像命令
    • 3.2 容器命令
    • 3.3 数据卷命令
    • 3.4 其他命令
    • 3.5 参考
  • 四、Docker安装常用服务指南
    • 4.1 ◆ Docker安装Nginx
      • 4.1.1 普通安装方式
      • 4.1.2 挂载配置方案
        • 方案一:Volume数据卷挂载
        • 方案二:目录挂载(生产推荐)
    • 4.2 ◆ Docker安装MySQL
      • 4.2.1 基础安装步骤
      • 4.2.2 数据持久化方案
        • 数据卷挂载模式
        • 目录挂载模式(推荐)
    • 4.3 ◆ Docker安装Nacos集群
      • 4.3.1 单节点部署
      • 4.3.2 集群部署方案
    • 4.4 ◆ Docker安装Redis
      • 4.4.1 基础安装
      • 4.4.2 持久化配置
        • 配置文件挂载
    • 4.5 ◆ Docker安装ElasticSearch
      • 4.5.1 ElasticSearch部署
      • 4.5.2 Kibana可视化
    • 4.6 服务验证清单


一. Docker 容器介绍

1.1 什么是Docker容器?

Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。通过 Docker,应用程序可以在任何环境中快速部署和运行,确保开发、测试和生产环境的一致性。

1.2 为什么需要Docker容器?

项目部署的困扰:

  • 环境一致性:开发、测试、生产环境应当保持一致,但由于各种原因,往往会出现环境差异,导致部署出现问题。

  • 版本管理:不同开发人员在开发过程中,可能会使用不同的开发工具、编程语言、框架,导致版本管理混乱。

  • 依赖管理:不同项目依赖不同的库,如果没有统一的依赖管理,部署会出现问题。
    Docker如何解决这些问题?

  • Docker 容器化:Docker 容器化解决了环境一致性问题,将开发环境、测试环境、生产环境打包成一个容器,确保开发、测试、生产环境的一致性。

  • Docker 镜像:Docker 镜像解决了版本管理问题,将开发环境、测试环境、生产环境的依赖打包成镜像,确保开发人员使用统一的开发工具、编程语言、框架。

  • Docker 仓库:Docker 仓库解决了依赖管理问题,将镜像上传到仓库,其他开发人员可以下载使用。

1.3 Docker架构

  • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client): 通过命令或RestAP向Docker服务端发送指令。可以在本地或远程向服务端发送指令
  • 远程仓库(registry): 远程仓库是Docker用来保存镜像的地方,可以理解为代码仓库。
    在这里插入图片描述

1.4 Docker 相关概念

  • 镜像(Image): Docker镜像是一个只读的模板,包含了运行容器所需的一切。
  • 容器(Container): 容器是一个运行中的镜像实例,可以启动、停止、删除、暂停等。
  • 仓库(Repository): Docker仓库是一个集中存放镜像文件的地方,每个镜像都有唯一的ID,并可以被推送到多个仓库。
  • 标签(Tag): 标签是镜像的版本,可以用来区分同一个镜像的不同版本。
  • Dockerfile: Dockerfile是用来构建Docker镜像的文本文件,包含了一条条的指令来构建镜像。
  • 卷(Volume): 卷是一个可供一个或多个容器使用的目录,它可以绕过联合文件系统,直接存取底层文件系统。

1.5 Docker特点

  • 轻量级:Docker 容器的大小仅几十MB,相比虚拟机镜像大小只有几百MB。
  • 便携:Docker 可以在任何 Linux 机器上运行,并不需要安装Docker软件,只需要安装Docker引擎。
  • 隔离:Docker 使用容器技术,容器之间互相隔离,互不影响,更安全。文件隔离、系统隔离、资源隔离、网络隔离、日志隔离等。每个容器都完全独立运行在一个沙盒中,所有数据、资源都是隔离的,比如,CPU、内存等等,网络上会为每个容器虚拟一个ip地址,docker为每个容器都提供自己的日志,互不影响。

二. Docker 安装

2.1 查看Linux内核版本

uname -r

要求3.0版本以上

2.2 卸载老版本docker,避免产生影响

如果服务器安装过docker,没有卸载再次安装会导致安装失败,首先要卸载老版本(咱们没安装过docker,可以不需要这个操作,不过可以试一下。)

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine \docker-ce

2.3 升级yum 和配置源

yum工具可以安装软件,安装docker时需要更多工具,操作系统自带不够,所以要升级。

yum install -y yum-utils

配置本地镜像源

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/g' /etc/yum.repos.d/docker-ce.repo

更新镜像源

yum makecache fast

2.4 安装Docker

yum install -y docker-ce

docker-ce是社区版,docker-ee是企业版,这里安装的是社区版。社区版是免费的,企业版收费。

2.5 启动Docker

systemctl start docker

2.6 验证Docker

docker version

2.7 设置Docker开机自启

systemctl enable docker

2.8 配置镜像加速器

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
EOF
systemctl restart docker

或者阿里云加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://wm7fopru.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

或者修改/etc/docker/daemon.json文件

{"registry-mirrors": ["https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc"]
}

然后重启Docker

systemctl daemon-reload
systemctl restart docker

2.9 验证镜像加速是否生效

docker info

其中Registry Mirrors就是镜像加速器的地址。

2.10 卸载Docker

yum remove docker-ce

三. Docker 命令

3.1 镜像命令

  • 镜像名称一般分两部分组成[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像
docker images:查看本地镜像列表
docker pull:拉取镜像
docker rmi:删除镜像
docker tag:给镜像打标签
docker save:保存镜像
docker load:加载镜像
docker build:构建镜像

在这里插入图片描述
案例:拉取nginx镜像

docker pull nginx

如果不指定镜像名称,则默认拉取latest版本的镜像(最新版本)。

案例:删除镜像

docker rmi nginx

如果有版本号,则删除指定版本的镜像。 如果镜像正在运行,则无法删除。

案例:给镜像打标签

docker tag nginx:latest my-nginx:v1.0

案例:保存镜像

docker save -o nginx.tar nginx:latest

案例:加载镜像

docker load -i nginx.tar

案例:构建镜像

docker build -t my-nginx:v1.0 .
  • docker build命令的-t参数指定镜像的名称和标签,.表示当前目录。
  • docker build命令的.表示Dockerfile文件所在目录。
  • docker build命令的-t参数可以指定多个镜像名称和标签,多个镜像之间用空格隔开。

3.2 容器命令

  • 容器名称一般分两部分组成[id]。
  • 在没有指定name时,默认是随机生成的。
docker run:运行容器
docker ps:查看容器列表
docker start:启动容器
docker stop:停止容器
docker restart:重启容器
docker rm:删除容器
docker logs:查看容器日志
docker exec:进入容器

在这里插入图片描述
案例:运行nginx容器

docker run -d -p 80:80 --name my-nginx nginx

docker run 命令参数说明:

  • docker run命令的-d参数表示后台运行容器。
  • docker run命令的-p参数表示将容器的80端口映射到主机的80端口。如:如:-p 81:80表示将容器的80端口映射到主机的81端口。
  • docker run命令的--name参数表示给容器指定名称。如果不指定名称,则默认随机生成名称。
  • docker run命令的nginx参数表示启动的镜像名称。必须指定镜像名称,否则会报错。
  • docker run命令的-v参数表示将主机的目录挂载到容器的目录。如:-v /data/my-data:/usr/share/nginx/html表示将主机的/data/my-data目录挂载到容器的/usr/share/nginx/html目录。
  • docker run命令的-e参数表示设置环境变量。
  • docker run命令的-it参数表示进入交互模式。
  • docker run命令的--network参数表示指定容器的网络模式。如--network=host表示容器使用宿主机的网络。
  • docker run命令的--restart参数表示设置容器的重启策略。如--restart=always表示容器总是重启。

案例:查看容器列表

docker ps

docker ps 命令参数说明

  • docker ps命令 默认只显示运行中的容器。
  • docker ps命令的-a参数表示显示所有容器,包括停止的容器。
  • docker ps命令的-q参数表示只显示容器的ID。
  • docker ps命令的-f参数表示根据条件过滤容器。

案例:启动容器

docker start my-nginx

案例:停止容器

docker stop my-nginx

案例:重启容器

docker restart my-nginx

案例:删除容器

docker rm my-nginx

docker rm命令的参数说明:

  • docker rm命令的-f参数表示强制删除容器。

案例:查看容器日志

docker logs my-nginx

案例:进入容器

docker exec -it my-nginx /bin/bash
  • docker exec命令的-it参数表示进入交互模式。
  • docker exec命令的my-nginx参数表示容器名称。
  • docker exec命令的/bin/bash参数表示进入容器的bash命令行。

3.3 数据卷命令

数据卷可以让容器之间共享数据,容器之间的数据修改会立即同步到所有容器。

  • docker volume create:创建数据卷
  • docker volume ls:查看数据卷列表
  • docker volume inspect:查看数据卷详情
  • docker volume rm:删除数据卷
  • docker run:使用数据卷

案例:创建数据卷

docker volume create my-data

案例:查看数据卷列表

docker volume ls

案例:查看数据卷详情

docker volume inspect my-data

案例:删除数据卷

docker volume rm my-data

案例:使用数据卷

docker run -d -p 80:80 --name my-nginx -v my-data:/usr/share/nginx/html nginx
  • docker run命令的-v参数表示将主机的my-data目录挂载到容器的/usr/share/nginx/html目录。
  • 这样,主机的my-data目录中的内容会同步到容器的/usr/share/nginx/html目录,容器的/usr/share/nginx/html目录中的内容会同步到主机的my-data目录。

3.4 其他命令

  • 复制内容到主机
docker cp my-nginx:/usr/share/nginx/html/ /data/my-data/
  • 导入/导出镜像
docker save -o my-nginx.tar my-nginx:v1.0
docker load -i my-nginx.tar
  • 导入/导出容器
docker export -o my-nginx.tar my-nginx
docker import my-nginx.tar my-nginx:v1.0

3.5 参考

Docker命令大全
Docker官方文档
Docker中文文档
Docker入门教程
Docker从入门到实践

四、Docker安装常用服务指南

4.1 ◆ Docker安装Nginx

4.1.1 普通安装方式

操作流程:

  1. 拉取镜像
docker pull nginx
# 或加载本地镜像
docker load -i nginx.tar
  1. 运行容器
docker run -d -p 80:80 --name nginx-test nginx

参数说明:

  • -d:后台运行
  • -p 80:80:端口映射(主机:容器)
  • --name:容器命名

4.1.2 挂载配置方案

方案一:Volume数据卷挂载
# 创建数据卷
docker volume create nginx-{html,conf}-volume# 启动容器
docker run -d -p 80:80 --name nginx-test \-v nginx-html-volume:/usr/share/nginx/html \-v nginx-conf-volume:/etc/nginx \nginx
方案二:目录挂载(生产推荐)
# 创建本地目录
mkdir -p /opt/mount/nginx/{html,conf.d}# 复制默认配置
docker cp nginx-test:/usr/share/nginx/html /opt/mount/nginx/
docker cp nginx-test:/etc/nginx/conf.d /opt/mount/nginx/# 重新挂载启动
docker run -d -p 80:80 --name nginx-prod \-v /opt/mount/nginx/html:/usr/share/nginx/html \-v /opt/mount/nginx/conf.d:/etc/nginx/conf.d \nginx

注意事项:

  • 访问验证:curl http://localhost
  • 配置文件修改后需重启容器生效
  • 生产环境建议绑定80+443端口

4.2 ◆ Docker安装MySQL

4.2.1 基础安装步骤

  1. 拉取镜像
docker pull mysql:8.0
  1. 启动容器
docker run -d -p 3306:3306 --name mysql-test \-e MYSQL_ROOT_PASSWORD=123456 \mysql:8.0

4.2.2 数据持久化方案

数据卷挂载模式
docker volume create mysql-{data,conf}-volumedocker run -d -p 3306:3306 --name mysql-prod \-v mysql-data-volume:/var/lib/mysql \-v mysql-conf-volume:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=123456 \mysql:8.0
目录挂载模式(推荐)
mkdir -p /opt/mount/mysql/{data,conf.d}docker run -d -p 3306:3306 --name mysql-prod \-v /opt/mount/mysql/data:/var/lib/mysql \-v /opt/mount/mysql/conf.d:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD=123456 \mysql:8.0

关键配置说明:

# my.cnf 配置文件示例
[mysqld]
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password

4.3 ◆ Docker安装Nacos集群

4.3.1 单节点部署

docker run -d \--name nacos-standalone \-p 8848:8848 -p 9848:9848 -p 9849:9849 \-e MODE=standalone \-e JVM_XMS=512m -e JVM_XMX=512m \nacos/nacos-server:v2.3.0

4.3.2 集群部署方案

  1. 准备3台服务器(node1/node2/node3)
  2. 每台执行:
mkdir -p /opt/nacos/{logs,conf,data}docker run -d \--name nacos-cluster \--network=host \-v /opt/nacos/logs:/home/nacos/logs \-v /opt/nacos/conf:/home/nacos/conf \-v /opt/nacos/data:/home/nacos/data \-e MODE=cluster \-e NACOS_SERVERS="node1:8848,node2:8848,node3:8848" \-e JVM_XMS=2g -e JVM_XMX=2g \nacos/nacos-server:v2.3.0

MySQL集成配置:

-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=192.168.1.100 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=Nacos@1234

4.4 ◆ Docker安装Redis

4.4.1 基础安装

docker run -d \--name redis-test \-p 6379:6379 \redis:7.0

4.4.2 持久化配置

配置文件挂载
mkdir -p /opt/mount/redis/{conf,data}# redis.conf 核心配置
echo '
bind 0.0.0.0
protected-mode no
requirepass 123456
appendonly yes
' > /opt/mount/redis/conf/redis.confdocker run -d \--name redis-prod \-p 6379:6379 \-v /opt/mount/redis/conf:/usr/local/etc/redis \-v /opt/mount/redis/data:/data \redis:7.0 redis-server /usr/local/etc/redis/redis.conf

性能调优参数:

maxmemory 2gb
maxmemory-policy allkeys-lru

4.5 ◆ Docker安装ElasticSearch

4.5.1 ElasticSearch部署

# 创建专用网络
docker network create es-net# 单节点运行
docker run -d \--name es-node \--network es-net \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "ES_JAVA_OPTS=-Xms4g -Xmx4g" \-v es-data:/usr/share/elasticsearch/data \elasticsearch:8.6.0

4.5.2 Kibana可视化

docker run -d \--name kibana \--network es-net \-p 5601:5601 \-e ELASTICSEARCH_HOSTS=http://es-node:9200 \kibana:8.6.0

安全配置建议:

# elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

4.6 服务验证清单

服务验证方式预期结果
Nginxcurl -I http://localhostHTTP/1.1 200 OK
MySQLmysql -h 127.0.0.1 -P 3306 -u root -p成功登录
Redisredis-cli -h 127.0.0.1 -a 123456 pingPONG
ElasticSearchcurl http://localhost:9200JSON格式节点信息
Kibana浏览器访问 http://IP:5601Kibana欢迎界面

相关文章:

Docker生存手册:安装到服务一本通

文章目录 一. Docker 容器介绍1.1 什么是Docker容器&#xff1f;1.2 为什么需要Docker容器&#xff1f;1.3 Docker架构1.4 Docker 相关概念1.5 Docker特点 二. Docker 安装2.1 查看Linux内核版本2.2 卸载老版本docker&#xff0c;避免产生影响2.3 升级yum 和配置源2.4 安装Dock…...

Linux内核传输层UDP源码分析

一、用户数据包协议&#xff08;UDP&#xff09; 1.UDP数据报头 UDP 提供面向消息的不可靠传输&#xff0c;但没有拥塞控制功能。很多协议都使用 UDP&#xff0c;如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol&#xff0c;RTP)&#xff0c;此类型…...

FPGA学习(二)——实现LED流水灯

FPGA学习(二)——实现LED流水灯 目录 FPGA学习(二)——实现LED流水灯一、DE2-115时钟源二、控制6个LED灯实现流水灯1、核心逻辑2、代码实现3、引脚配置4、实现效果 三、模块化代码1、分频模块2、复位暂停模块3、顶层模块 四、总结 一、DE2-115时钟源 DE2-115板子包含一个50MHz…...

E1-最远距离(stl使用)

题目描述 给定一个数组&#xff0c;请你找出数组中相同元素之间的最远距离。若数组中不存在相同元素&#xff0c;则输出 null。 输入描述 输入一个数组&#xff0c;数组长度不超过 10000。格式请见用例。 输出描述 输出数组中相同元素的最远距离。 用例 输入 [3, 2, 3,…...

Linux如何在设备树中表示和引用设备信息

DTS基本知识 dts 硬件的相应信息都会写在.dts为后缀的文件中&#xff0c;每一款硬件可以单独写一份xxxx.dts&#xff0c;一般在Linux源码中存在大量的dts文件&#xff0c;对于arm架构可以在arch/arm/boot/dts找到相应的dts&#xff0c;一个dts文件对应一个ARM的machie。 dtsi 值…...

Matlab 汽车振动多自由度非线性悬挂系统和参数研究

1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学&#xff0c;一般都是研究其悬…...

Maven核心包:maven-resolver-api

在阅读 nexus-pubic 开源项目过程中&#xff0c;使用了大量的核心组件进行轻量化集成。它的这种构建方式&#xff0c;在阅读过程中不得不感概&#xff0c;节省成本从构建项目的方式上就遥遥领先了。但是 maven核心包&#xff0c;依然使用前几年的aether-spi&#xff0c;却没有更…...

生活中的可靠性小案例11:窗户把手断裂

窗户把手又断了&#xff0c;之前也断过一次&#xff0c;使用次数并没有特别多。上方的图是正常的把手状态&#xff0c;断的形状如下方图所示。 这种悬臂梁结构&#xff0c;没有一个良好的圆角过渡&#xff0c;导致应力集中。窗户的开关&#xff0c;对应的是把手的推拉&#xff…...

[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅

074_ai辅助编程_水果程序_fruits_加法 回忆上次内容 上次直接从模块中导入变量、函数 from my_file import pi 导入my_file.pi 并作为 pi 使用 from my_file import pi as my_pi 导入变量 并 重命名 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; …...

【图论】并查集的学习和使用

目录 并查集是什么&#xff1f; 举个例子 组成 父亲数组&#xff1a; find函数&#xff1a; union函数&#xff1a; 代码实现&#xff1a; fa[] 初始化code: find code&#xff1a; 递归实现: 非递归实现: union code : 画图模拟&#xff1a; 路径压缩&#xff1a…...

欢乐力扣:反转链表

文章目录 1、题目描述2、思路 1、题目描述 反转链表。  给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2、思路 借助cur指针和pre双指针来调整链表的前后指向。 # Definition for singly-linked list. # class ListNode: # def __i…...

1.8PageTable

页表的作用 虚拟地址空间映射&#xff1a;页表记录了进程的虚拟页号到物理页号的映射关系。每个进程都有自己的页表&#xff0c;操作系统为每个进程维护一个独立的页表。内存管理&#xff1a;页表用于实现虚拟内存管理&#xff0c;支持进程的虚拟地址空间和物理地址空间之间的…...

什么是大带宽服务器

什么是大带宽服务器&#xff1f; 在深入探讨大带宽之前&#xff0c;让我们先明确带宽的概念。带宽与我们日常所说的宽带有所不同&#xff0c;宽带是运营商为满足家庭或商业上网需求所提供的服务&#xff0c;而带宽则特指数据的传输速度&#xff0c;尤其是上行速度。大带宽服务…...

【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…...

Compose 实践与探索十二 —— 附带效应

1、SideEffect Google 官方文档对 side effect 有两种翻译&#xff0c;简体中文翻译为附带效应&#xff0c;繁体中文翻译为副作用。这两个翻译我们用哪个都行&#xff0c;关键是如何理解它的含义。 1.1 什么是副作用 我们在日常生活中听到的副作用大多是医学领域中的&#x…...

Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd

文章目录 Kubernetes 控制平面详解 —— 探秘 API Server、Controller Manager、Scheduler 与 etcd控制平面概述API Server角色与职责工作原理 etcd角色与职责工作原理 Scheduler角色与职责工作原理 Controller Manager角色与职责工作原理 总结 Kubernetes 控制平面详解 —— 探…...

SSM基础专项复习4——Maven项目管理工具(1)

系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架&#xff08;1&#xff09;-CSDN博客 3、SSM基础专项复习3——Spring框架&#xff08;2&#xff09;-CSDN博客 文章目录 系列文章 1. Maven 的概念 1.1. 什么是 Maven 1.2. 什…...

使用c#进行串口通信

一、串口通信协议 1.串口通信协议简介 串口通信&#xff08;serial communication&#xff09;是一种设备间非常常用的串行通信方式&#xff0c;大部分电子设备都支持&#xff0c;电子工程师再调试设备时也经常使用该通信方式输出调试信息。讲到某一种通信协议&#xff0c;离…...

Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数

知识点&#xff1a; 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、演示案例-WEB开发-修复方案-PHP.INI配置 文章参考&#xff1a; https://www.yisu.com/ask/28100386.html https://blog.csdn.net/…...

蓝桥模拟+真题讲解

今天谁一篇文章哈 &#xff01; 由于本篇文章有些的题目只有图片&#xff0c;因此还望各位见谅。 目录 第一题 题目解析 代码原理 代码编写 填空技巧---巧用python 第二题 题目解析 ​编辑 填空技巧---巧用python 第三题 题目链接 题目解析 必备知识 解题技巧 …...

C语言【数据结构】:时间复杂度和空间复杂度.详解

引言 详细介绍什么是时间复杂度和空间复杂度。 前言&#xff1a;为什么要学习时间复杂度和空间复杂度 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏&#xff0c;一般是从时间和空间两个维度来衡量的&#xff0c;即时…...

大模型的参数数量与学习的知识数量之间

大模型的参数数量与学习的知识数量之间 大模型的参数数量与学习的知识数量之间呈现非线性、条件依赖的复杂关系,其本质是**「表达能力」与「知识编码效率」的动态博弈**。以下从五个维度拆解核心逻辑: 一、参数是知识的「载体容量」,但非唯一决定因素 理论上限:参数数量决…...

基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 基于Python的selenium入门超详细教程(第1章)--WebDriver API篇-CSDN博客 目录 前言&#xff1a; 一、单元测试 1. 单元测试的定义 2. 单元测…...

日志、类加载器、XML(配置文件)

目录 一、日志1.日志技术的概述2.日志技术的体系a. Logback 3.日志的级别 二、类加载器1.概述2.类加载时机3.类加载过程3.类加载器的分类4.常用方法 三、XML&#xff08;配置文件&#xff09;1.概述2.XML的基本语法3.XML的文档约束a.DTD约束b.schema约束 4.XML文档解析a.Dom4jb…...

Flutter中的const和final的区别

目录 一、核心区别对比表 二、初始化机制深度解析 1. const 的编译期特性 2. final 的运行时特性 三、内存管理差异 1. const 的内存优化 2. final 的独立内存 四、集合类型的本质区别 1. const 集合的完全不可变性 2. final 集合的引用不可变性 五、在 Flutter 中的…...

DAY34 贪心算法Ⅲ

134. 加油站 - 力扣&#xff08;LeetCode&#xff09; 这种环路问题要记一下。 class Solution { public:int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {int curSum0;int totalSum0;int start0;for(int i0;i<gas.size();i){curSumga…...

AI大白话(一):5分钟了解AI到底是什么?

&#x1f31f;引言&#xff1a; 在这个信息爆炸的时代&#xff0c;“人工智能”、“AI”、“机器学习”、"深度学习"等词汇频繁出现在我们的生活中。 从手机里的语音助手&#xff0c;到网购平台的个性化推荐&#xff0c;再到最近大火的AI绘画和ChatGPT&#xff0c;人…...

(七)Spring Boot学习——Redis使用

有部分内容是常用的&#xff0c;为了避免每次都查询数据库&#xff0c;将部分数据存入Redis。 一、 下载并安装 Redis Windows 版的 Redis 官方已不再维护&#xff0c;你可以使用 微软提供的 Redis for Windows 版本 或者 使用 WSL&#xff08;Windows Subsystem for Linux&a…...

蓝桥与力扣刷题(蓝桥 字符统计)

题目&#xff1a;给定一个只包含大写字母的字符出 S, 请你输出其中出现次数最多的字符。如果有多个字母均出现了最多次, 按字母表顺序依次输出所有这些字母。 输入格式 一个只包含大写字母的字等串 S. 输出格式 若干个大写字母&#xff0c;代表答案。 样例输入 BABBACAC样…...

AtCoder Beginner Contest 397(ABCDE)

目录 A - Thermometer 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; B - Ticket Gate Log 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; C - Variety Split Easy 翻译&#xff1a; 思路&#xff1a; 实现&#xff1a; D - Cubes 翻译&#xff1a…...