【docker】容器卷综合讲解,以及go实现的企业案例
容器卷(Volumes)基础讲解:
-
容器概念
容器卷(Volumes)是 Docker 提供的一种持久化存储机制,允许容器持久化数据,即使容器被删除或重新创建,数据仍然可以保留。
卷是独立于容器的,跨容器可以共享。 -
容器卷的特点
- 数据持久化:卷可以将数据存储在指定的目录中,避免容器重启或删除后数据丢失。
- 跨容器共享:多个容器可以共享同一个卷,以实现容器间的数据共享。
- 高效存储:卷存储在宿主机的文件系统中,性能较高。
- 备份和恢复:卷可以方便地备份和恢复数据。
- 创建和使用卷
创建卷:
使用docker volume create
命令来创建一个卷:
docker volume create my_volume
使用卷:
使用 -v
或 --mount
标志将卷挂载到容器内。挂载时,格式如下:
docker run -d -v my_volume:/path/in/container my_image
解释:
my_volume
:容器卷的名称。
/path/in/container
:容器内的挂载路径。
- 容器卷的生命周期
- 容器创建时创建卷:如果容器使用的卷不存在,Docker 会自动创建一个卷。
- 容器删除时,卷不被删除:容器删除后,卷仍然会存在。如果不再需要卷,可以手动删除。
查看所有卷:
docker volume ls
查看特定卷的详细信息:
docker volume inspect my_volume
- 共享卷
不同的容器可以共享同一个卷。假设我们有两个容器,它们都需要访问同一个数据:
docker run -d -v shared_volume:/path/in/container1 my_image
docker run -d -v shared_volume:/path/in/container2 my_image
这两个容器都会共享名为 shared_volume
的卷中的数据。
- 读写规则
在 Docker 中,可以控制卷的读写权限。
只读卷:
如果我们只希望容器能够读取卷中的数据,而不能修改它,可以将卷挂载为只读模式:
docker run -d -v my_volume:/path/in/container:ro my_image
:ro
表示卷是只读的。
默认读写模式:
默认情况下,卷是可读写的。如果没有指定 ro
或 rw
,则卷的挂载是读写模式:
docker run -d -v my_volume:/path/in/container my_image
- 卷的继承与共享
Docker 允许多个容器共享同一个卷。为了支持这个功能,容器需要使用相同的卷名称或挂载相同的宿主机目录路径。这样,容器之间就能够共享数据。
继承和共享的案例:
假设我们有三个容器,分别是 Web 容器、数据库容器和缓存容器,它们之间需要共享卷:
启动数据库容器并挂载卷:
docker run -d --name db-container -v db-volume:/var/lib/mysql mysql
启动 Web 容器并挂载同一个卷:
docker run -d --name web-container -v db-volume:/data/web-data my_web_image
启动缓存容器并挂载同一个卷:
docker run -d --name cache-container -v db-volume:/data/cache-data my_cache_image
在这个例子中,三个容器都挂载了同一个卷 db-volume
,从而共享数据。
- 使用宿主机目录共享数据
除了使用 Docker 卷,我们还可以直接挂载宿主机上的目录来进行数据共享。比如:
docker run -d -v /myhostdir:/path/in/container my_image
此时,容器将挂载宿主机的 /myhostdir
目录,而不是 Docker 卷。
- 卷与宿主机文件系统的不同
- 卷是由 Docker 管理的,并且具有更好的性能、可靠性和迁移性。
- 一个宿主机目录只是宿主机上的普通文件夹,没有 Docker 的管理和优化,性能上可能不如卷。
- 数据备份与恢复
Docker 卷提供了非常可靠的备份和恢复功能,尤其是对于数据库类应用,卷非常重要。
备份卷数据:
可以将卷的数据拷贝到宿主机目录或其他位置进行备份:
docker run --rm -v my_volume:/volume -v /myhost/backup:/backup ubuntu tar cvf /backup/backup.tar /volume
该命令将 my_volume
卷中的数据传输到宿主机的 /myhost/backup
目录下。
恢复卷数据:
将备份文件恢复到卷中:
docker run --rm -v my_volume:/volume -v /myhost/backup:/backup ubuntu tar xvf /backup/backup.tar -C /volume
- 卷与容器网络
尽管 Docker 卷与容器网络不直接相关,但在多容器应用中,卷通常是跨网络共享的。不同的容器可以通过 Docker 网络互联,并共享相同卷的数据。比如:
docker network create my_network
docker run -d --name container1 --network my_network -v shared_volume:/data my_image
docker run -d --name container2 --network my_network -v shared_volume:/data my_image
总结
容器卷是 Docker 中非常重要的功能,它不仅实现了容器数据的持久化、跨容器共享,
还支持数据备份和恢复。在企业级应用中,合理使用卷可以提升数据管理的效率,
并确保容器化应用的数据不会因容器重启或删除而丢失。
企业级案例:Go Web 应用与数据库服务
假设我们正在开发一个企业级 Web 应用,该应用使用 Go 语言编写,并且依赖 MySQL 数据库。
我们希望将这个 Go 应用和 MySQL 数据库容器化,同时利用 Docker 卷来持久化数据库数据,
并利用 Docker 网络实现容器间的通信。
案例需求
- Go Web 应用:负责提供 Web 服务,接收用户请求,处理数据,并与 MySQL 数据库进行交互。
- MySQL 数据库:存储 Web 应用所需的用户数据。
- 容器卷(Volumes):MySQL 数据库的持久化存储,确保数据库数据在容器重启或删除后仍然存在。
- Docker 网络:用于不同容器间的通信,确保 Web 应用和 MySQL 数据库可以正常通信。
步骤 1:编写 Go Web 应用
首先,我们编写一个简单的 Go Web 应用,这个应用将连接到 MySQL 数据库并提供基本的用户数据处理功能。
main.go
:
package mainimport ("database/sql""fmt""log""net/http""github.com/go-sql-driver/mysql"
)var db *sql.DB// 初始化数据库连接
func initDB() {var err errordsn := "root:root@tcp(db:3306)/mydb"db, err = sql.Open("mysql", dsn)if err != nil {log.Fatal("Error opening database: ", err)}
}// 处理首页请求
func handler(w http.ResponseWriter, r *http.Request) {rows, err := db.Query("SELECT name FROM users")if err != nil {fmt.Fprintf(w, "Error querying database: %v", err)return}defer rows.Close()fmt.Fprintf(w, "Users List:\n")for rows.Next() {var name stringif err := rows.Scan(&name); err != nil {fmt.Fprintf(w, "Error scanning row: %v", err)return}fmt.Fprintf(w, "%s\n", name)}
}// 启动 Web 服务
func main() {initDB()defer db.Close()http.HandleFunc("/", handler)log.Fatal(http.ListenAndServe(":8080", nil))
}
步骤 2:编写 Dockerfile
接下来,我们为 Go 应用编写 Dockerfile,将其容器化。
Dockerfile
:
# 使用官方 Go 镜像作为基础镜像
FROM golang:1.20 AS builder# 设置工作目录
WORKDIR /app# 将 Go 代码复制到容器内
COPY . .# 编译 Go 应用
RUN go mod tidy && go build -o myapp .# 使用轻量级的 Alpine 镜像作为运行时环境
FROM alpine:3.17# 安装 MySQL 客户端(用于与 MySQL 数据库通信)
RUN apk --no-cache add mysql-client# 将编译好的 Go 应用从 builder 镜像中复制过来
COPY --from=builder /app/myapp /usr/local/bin/myapp# 容器启动时执行 Go 应用
CMD ["/usr/local/bin/myapp"]
步骤 3:编写 Docker Compose 文件
为了方便管理多个容器,我们使用 Docker Compose 来编排 Go 应用和 MySQL 数据库容器。
docker-compose.yml
:
version: "3.8"services:# MySQL 容器db:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: mydbvolumes:- db_data:/var/lib/mysqlnetworks:- mynetwork# Go Web 应用容器web:build: .ports:- "8080:8080"depends_on:- dbnetworks:- mynetworkvolumes:db_data: # 用于存储 MySQL 数据的持久化卷networks:mynetwork: # 定义自定义网络,使容器能够互相通信
解释:
- MySQL 服务:使用官方
mysql:8.0
镜像,并设置环境变量来配置数据库用户、密码和数据库名。
使用 Docker 卷db_data
来持久化数据库数据。 - Go Web 应用服务:通过
build
指令从当前目录构建 Go 应用的镜像。
容器将映射到宿主机的 8080 端口,依赖于 MySQL 容器。 - 自定义网络:
mynetwork
网络确保 Go Web 应用容器能够与 MySQL 容器通信。
步骤 4:构建和启动容器
现在,我们可以使用 Docker Compose 来构建和启动所有容器。
docker-compose up --build
该命令将构建 Docker 镜像并启动 Go Web 应用容器和 MySQL 容器。构建完成后,
你的 Go Web 应用将在 localhost:8080
上提供服务。
步骤 5:测试 Web 应用
打开浏览器,访问 http://localhost:8080
,如果一切配置正确,
你将看到数据库中所有用户的列表。
步骤 6:管理数据持久化
当你使用 docker-compose
启动容器时,MySQL 容器的数据库数据会被存储在宿主机的卷中,
即 db_data
卷。即使容器被删除,数据仍然会被保留。当你重新启动容器时,数据将自动恢复。
步骤 7:备份和恢复 MySQL 数据
备份 MySQL 数据:
docker run --rm -v db_data:/db -v /path/to/backup:/backup alpine \tar czf /backup/db_backup.tar.gz /db
这条命令会将 MySQL 数据备份到宿主机的 /path/to/backup/db_backup.tar.gz
文件。
恢复 MySQL 数据:
docker run --rm -v db_data:/db -v /path/to/backup:/backup alpine \tar xzf /backup/db_backup.tar.gz -C /db
此命令将备份的数据库数据恢复到 db_data
卷中。
步骤 8:容器网络和容器间通信
容器间的网络通信是通过 Docker 网络实现的。上面创建的 mynetwork
网络允许 Go Web 应用容器和 MySQL 容器在同一个网络中相互通信。
- Go 应用通过
db
主机名来连接 MySQL 数据库(在docker-compose.yml
中定义)。这是因为 Docker 会自动为每个服务分配一个主机名,并在网络内解析服务名。
总结
通过上述步骤,我们成功地容器化了一个 Go Web 应用,并使用 Docker Compose 将其与 MySQL 数据库容器集成。
同时,通过 Docker 卷,我们确保了数据库的数据持久化。这样,我们不仅提高了应用的可移植性,
还确保了数据在容器重启或删除后的持久性。
这个企业级案例展示了如何使用 Docker 来部署 Go 应用和数据库服务,并结合容器卷和网络进行数据持久化和容器间的通信。
这种架构非常适用于需要高可用性和数据一致性的企业应用。
相关文章:
【docker】容器卷综合讲解,以及go实现的企业案例
容器卷(Volumes)基础讲解: 容器概念 容器卷(Volumes)是 Docker 提供的一种持久化存储机制,允许容器持久化数据,即使容器被删除或重新创建,数据仍然可以保留。 卷是独立于容器的&…...
八、利用CSS制作导航栏菜单
8.1 水平顶部导航栏 水平菜单导航栏是网站设计中应用范围最广的导航设计,一般放置在页面的顶部。水平导航适用性强,几乎所有类型的网站都可以使用。 如果导航过于普通,无法容纳复杂的信息结构,就需要在内容模块较多的情况…...
windows下安装node.js和pnpm
首先,一定要powershell右键选择管理员身份运行,否则第三个命令报错。 # 安装 fnm (快速 Node 管理器) winget install Schniz.fnm# 配置 fnm 环境 fnm env --use-on-cd | Out-String | Invoke-Expression# 下载并安装 Node.js fnm use --install-if-mis…...
MyBlog(五) -- 用户注册页面完善
文章目录 前言一、用户数据提交1. 表单2. 校验数据3. 模版文件1. wait_start2. user_register 二、验证1. 发送邮件1. 注册163邮箱后登录并设置2. 开启IMAP/SMTP服务, IMAP/SMTP服务3. 新增授权密码 2.邮箱内容3.点击注册4.发送邮件5. 激活账号1. 完善激活功能 -- user_active2…...
NLP任务四大范式的进阶历程:从传统TF-IDF到Prompt-Tuning(提示词微调)
引言:从TF-IDF到Prompt-Tuning(提示词微调),NLP的四次变革 自然语言处理(NLP)技术从最早的手工特征设计到如今的Prompt-Tuning,经历了四个重要阶段。随着技术的不断发展,我们的目标…...
量化交易系统开发-实时行情自动化交易-8.3.开拓者TBQuant平台
19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。 接下来会对于开拓者TBQuant平台介绍。 …...
第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效(Particle System) 游戏效…...
redis常见数据类型
Redis是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息代理,支持多种数据类型。 一、数据类型介绍 String(字符串) Redis中最基本的数据类型。可以存储任何类型的数据,包括字符串、数字和二进制…...
【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞
1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…...
深入解析 Kubernetes 节点操作:Cordon、Uncordon 和 Drain 的使用与最佳实践
摘要 Kubernetes 是一个用于自动化容器部署、扩展和管理的开源系统,而节点管理是其核心功能之一。cordon、uncordon 和 drain 是 Kubernetes 提供的与节点操作相关的三个重要命令,用于节点的调度控制和维护管理。本文将从概念、命令解析、内部机制和最佳…...
python array矩阵相关操作
目录: 一、判断某个值是否在array二维数组的某列中 二、根据某列中的特定值筛选array数组 三、查找一个元素在二维 array 矩阵中的位置 四、判断array数组中的每个元素是否包含特定的子字符串 一、判断某个值是否在array二维数组的某列中 在 Python 中…...
网络安全——浅谈HTTP协议
HTTP请求 HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。 HTTP请求由状态行、请求头、请求正文三部分组成: 状态行:包括请求方式Method、资源路径URL、协议版本Version;请求头:包括一些访问的域名、…...
BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比
BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比 目录 BWO-CNN-BiGRU-Attention白鲸优化算法优化卷积神经网络结合双向门控循环单元时间序列预测,含优化前后对比预测效果基本介绍模型描述程序设计…...
55 基于单片机的方波频率可调
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 采用STC89C52单片机最小系统,设计DAC0832、放大器、与示波器显示方波,四位数码管显示频率,两个按键可调。 二、硬件资源 基于KEIL5编写C代码,PROT…...
SAP SD学习笔记15 - 投诉处理2 - 返品处理流程之 参照请求传票(发票)来生成返品传票
上一章讲了返品处理(退货处理)的流程。 SAP SD学习笔记14 - 投诉处理1 - 返品处理(退货处理)的流程以及系统实操,比如 返品传票;请求Block标记;收到退货之后的处理,请求传票的登录_…...
LWIP和FATFS 实现 FTP 服务端
目录 一、前言 二、LWIP 和 FTP 简介 1.LWIP 2.FTP 三、实现 FTP 服务端的主要步骤 1.初始化 LWIP 2.创建 FTP 服务器任务 3.处理客户端连接 4.实现 FTP 命令处理 5.文件系统操作 6.错误处理和日志记录 四、示例代码 1.创建FTP任务 2. FTP任务代码 3.处理交互数据…...
缓冲区的奥秘:解析数据交错的魔法
目录 一、理解缓存区的好处 (一)直观性的理解 (二)缓存区的好处 二、经典案例分析体会 (一)文件读写流(File I/O Buffering) BufferedOutputStream 和 BufferedWriter 可以加快…...
【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍
数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…...
如何使用Python解析从淘宝API接口获取到的JSON数据?
基本的 JSON 解析 当从淘宝 API 接口获取到数据后(假设数据存储在变量response_data中),首先要判断数据类型是否为 JSON。如果是,就可以使用 Python 内置的json模块进行解析。示例代码如下: import json # 假设respon…...
Day1 生信新手笔记
生信新手笔记 生信学习第一天笔记打卡。 转录组学中: 上游分析-基于linux,包括质控、过滤、比对、定量; 下游分析-基于R语言,包括差异分析、富集分析、可视化。 1. 级别标题 一个井号加空格 就是一级标题,两个井号加…...
内网穿透步骤
步骤 第一次需要验证token window和linux的方法不同。 然后 启动 cpolar 服务: 在命令窗口中输入 cpolar.exe htttp 8080,启动内网穿透服务。确保命令窗口保持开启状态,以维持穿透效果。 cpolar.exe hhttp 8080 成功后 注意事项 命令窗口…...
docker启动容器,语句名词解释
#启动容器代码docker run -it -d --name dev_aios -v D:\project\aialign:/www/ -v D:\project\data\dev\aios:/myfile/data/dev/aios -w /www/stand-alone-aios/aios -p 9002:9000 --ulimit core0 aialign/python-base:1.0 bash名词解释 docker run: 这是 Docker 的命令&#…...
微服务之短信验证服务配置完后junit单元测试短信发送失败
总之岁月漫长,然而值得等待。 主要是版本冲突问题,具体报错与解决方法如下: 报错前: 启动失败 短信服务测试报错: 解决后: 启动成功 短信服务测试发送成功: 在使用 SpringBoot 开发时&am…...
QSqlTableModel的使用
实例功能 这边使用一个实例显示数据库 demodb 中 employee 数据表的内容,实现编辑、插入、删除的操作,实现数据的排序和记录过滤,还实现 BLOB 类型字段 Photo 中存储照片的显示、导入等操作,运行界面如下图: 在上图中…...
构建高可用系统设计OpenStack、Docker、Mesos和Kubernetes(简称K8s)
如果构建高可用、高并发、高效运维的大型系统 大型系统架构设计包括业务层设计、服务层设计、基础架层设计、存储层设计、网络层协同设计来完成。 一、业务层 根据主要业务范畴的分类和特征提取,抽象出独立的业务系统,分别统计系统的用户角色群体、访…...
CondaValueError: Malformed version string ‘~‘: invalid character(s).
问题描述:在window下使用conda安装任何包都会报错。报错信息是CondaValueError: Malformed version string ~: invalid character(s). 解决办法:把.condarc文件的源地址删除(八成是源地址访问不了了),只保存默认的&am…...
uniapp图片上传预览uni.chooseImage、uni.previewImage
文章目录 1.上传图片2.预览图片 1.上传图片 uni.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照。 App端如需要更丰富的相机拍照API(如直接调用前置摄像头),参考plus.camera 微信小程序从基础库 2.21.0 开始, wx.choos…...
代码随想录算法训练营第三十二天 | 509. 斐波那契数 | 70. 爬楼梯 | 746. 使用最小花费爬楼梯
Day 32 总结 自己实现中遇到哪些困难今日收获,记录一下自己的学习时间 12:30 - 21:30 理论基础 代码随想录 动态规划 问题有很多的重叠子问题需要解决,状态涉及推导 DP 5部曲 DP数组含义 状态转移公式 dp数组初始化 数组遍历顺序 举例推导 视频&a…...
Flink常见面试题
1、Flink 的四大特征(基石) 2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法) 预定义Source 基于本地集合的source(Collection-based-source) 基于文件的source(…...
SpringCloud之Config:从基础到高级应用
目录 一、SpringCloud Config 简介1、SpringCloud Config 概述(1)核心概念(2)SpringCloud Config 的特点(3)应用场景(4)工作原理(5)优势(6&#x…...
redis 底层数据结构
概述 Redis 6 和 Redis 7 之间对比: Redis6 和 Redis7 最大的区别就在于 Redis7 已经用 listpack 替代了 ziplist. 以下是基于 Redis 7基础分析。 RedisObject Redis是⼀个<k,v>型的数据库,其中key通常都是string类型的字符串对象,⽽…...
机器学习之RLHF(人类反馈强化学习)
RLHF(Reinforcement Learning with Human Feedback,基于人类反馈的强化学习) 是一种结合人类反馈和强化学习(RL)技术的算法,旨在通过人类的评价和偏好优化智能体的行为,使其更符合人类期望。这种方法近年来在大规模语言模型(如 OpenAI 的 GPT 系列)训练中取得了显著成…...
openwrt利用nftables在校园网环境下开启nat6 (ipv6 nat)
年初写过一篇openwrt在校园网环境下开启ipv6 nat的文章,利用ip6tables控制ipv6的流量。然而从OpenWrt22版本开始,系统内置的防火墙变为nftables,因此配置方法有所改变。本文主要参考了OpenWRT使用nftables实现IPv6 NAT 这篇文章。 友情提示 …...
Vue3+node.js实现注册
文章目录 前端代码实现后端代码实现 效果图 前端代码实现 <template><div class"register-container"><el-card class"register-card"><template #header><div class"card-header"><span>注册</span&…...
LabVIEW将TXT文本转换为CSV格式(多行多列)
在LabVIEW中,将TXT格式的文本文件内容转换为Excel格式(即CSV文件)是一项常见的数据处理任务,适用于将以制表符、空格或其他分隔符分隔的数据格式化为可用于电子表格分析的形式。以下是将TXT文件转换为Excel(CSV&#x…...
SpringBoot源码-Spring Boot启动时控制台为何会打印logo以及自定义banner.txt文件控制台打印
1.当我们启动一个SpringBoot项目的时候,入口程序就是main方法,而在main方法中就执行了一个run方法。 SpringBootApplication public class StartApp {public static void main(String[] args) {// testSpringApplication.run(StartApp.class);} }publi…...
【笔记】软技能
硬技能:操控世界的能力,处理对象为【物】。软技能:影响他人的能力,处理对象为【人】。软技能包括一个人的情商、个性、社交礼仪、沟通、语言、个人习惯,还有解决问题的能力、领导能力、时间管理能力等一切非技术能力。…...
试题转excel;试题整理工具;试卷转excel;word转excel
一、问题描述 我父亲是一名教师,偶尔会需要将试卷转excel,方便管理处理一些特别重要的题目 于是,就抽空写一个专门将试题转excel的工具,便于各位教师从业者和教育行业的朋友更好的整理试题,减少一点重复枯燥的工作 …...
【热门主题】000072 分布式数据库:开启数据管理新纪元
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
常见靶场的搭建
漏洞靶场 渗透测试(漏洞挖掘)切忌纸上谈兵,学习渗透测试(漏洞挖掘)知识的过程中,我们通常需要一个包含漏洞的测试环境来进行训练。而在非授权情况下,对于网站进行渗透测试攻击,是触及…...
C语言——链表
1 链表基础 1 什么是链表 !!!链表相当于多个结构体变量链接在一起!!! //链表节点结构 struct Node //数据域和指针域 {int data; //数据域//struct Student data;数据尽量不写在链表结构体里面…...
【经典】星空主题的注册界面HTML,CSS,JS
目录 界面展示 完整代码 说明: 这是一个简单的星空主题的注册界面,使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…...
94.【C语言】解析预处理(2)
目录 1.带有副作用的宏参数 代码 一个判断最大值的宏代码 运行结果 分析 "副作用"的解释 2.宏替换规则 解释 3.宏和函数的对比 附一张对比表 承接93.【C语言】解析预处理(1)文章 1.带有副作用的宏参数 代码 一个判断最大值的宏代码 #define MAX(a, b) (…...
(数据结构与算法)如何提高学习算法的效率?面试算法重点有哪些?面试需要哪些能力?
面试官眼中的求职者 通过对你算法的考察!!!! 缩进太多!!一般不要超过三层!!!缩进越少,bug越少;逻辑比较复杂,把这些包装成为函数&…...
STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58
STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58 STM32F407芯片的OPTION Byte全面解析 STM32F407芯片是STMicroelectronics推出的一款功能强大的微控制器,广泛应用于工业控制、通信和消费电子等领域。其中,OPTION Byte࿰…...
MySQL主从复制
华子目录 实验环境准备修改配置文件 实验主开启bin-log日志创建用于主从复制的用户master配置salve配置 测试 添加一台新的slave,如何实现数据的全部同步呢什么环境下主比较多,什么环境下从比较多?延迟复制测试 并行复制gtid模式未启用gtid时…...
贝叶斯统计:高斯分布均值μ的后验分布推导
使用贝叶斯统计方法 均值 ( μ \mu μ ) 的后验分布解析 在贝叶斯统计中,后验分布表示在观察到数据后,对参数的更新后的信念。本篇文章将结合高斯分布的假设,详细解析均值 ( μ \mu μ ) 的后验分布推导过程,并对 ( μ \mu μ…...
linux常用指令都是工作中遇到的
前端打war包 jar -cvf dist.war *创建 WAR 文件的命令 jar -cvf dist.war * 用于将当前目录下的所有文件和文件夹打包成一个名为 dist.war 的 WAR 文件。以下是该命令的详细解释: jar: Java Archive 工具,用于创建 JAR、WAR 或 EAR 文件。 -c: 创建新的…...
亚马逊自研大语言模型 Olympus 即将亮相,或将在 LLM 竞赛中掀起新波澜
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
droppath
DropPath 是一种用于正则化深度学习模型的技术,它在训练过程中随机丢弃路径(或者说随机让某些部分的输出变为零),从而增强模型的鲁棒性和泛化能力。 代码解释: import torch import torch.nn as nn # 定义 DropPath…...