cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。
本项目将基于谷粒商城项目,并且对谷粒商城项目进行二次重构,使其满足最新的主流技术栈要求。
上篇文章介绍了vagrant技术快速构建虚拟机。这篇文章我们开始介绍docker容器化技术,使用docker部署我们项目需要的环境。这篇文章真正的面向0基础的读者。但是,我们并不会花大的时间代价,而是快速带你掌握工作中,真正可以用到的技术。
docker官方教程:https://docs.docker.com/
1、为什么需要docker
docker会将我们软件相关的配置文件、启动命令等全部打包。这样,我们可以在任何环境中,加载这个打包箱子,无需重新配置,直接运行。完全还原我们的软件环境。
举个栗子。这是我们之前运行一个软件的传统方式。
有了docker以后,正确打开方式是这样的。
又快又好不出错。
2、docker与虚拟机的区别
虚拟机,相当于计算机的分身术。
它有啥缺点呢?虚拟机会启动一个完整的操作系统,占用计算机资源多,启动速度慢。
但其实我们并不需要它启动完整的操作系统,比如之前的例子,我们只需要一个web服务器。
docker解决了这一问题。更快,更好,一个服务器,可以启动更多的docker容器。这是因为它更加轻量级。
3、docker的基本概念
下面这个图可以大概看看,看不懂也没关系。
镜像(images)是一个只读的模板,包含了应用程序及其依赖的环境(如操作系统、库、工具等)。镜像是容器的基础,它定义了容器应该如何启动。可以把镜像看作是应用程序的“蓝图”,它描述了容器的运行环境和程序的配置。镜像可以通过 Dockerfile 构建,也可以从 Docker Hub(官方的镜像仓库)拉取。
容器(containers)是镜像的一个实例,是镜像在执行时的“运行时环境”。容器是一个隔离的环境,在其中应用可以独立运行。容器会启动镜像并允许应用程序在其中执行。容器是轻量级的,它比传统虚拟机启动速度更快,并且资源开销更小。
总结:镜像是模板,容器是示例,对应java,可以类比类和对象。
仓库:存储docker镜像的地方。最常见的是dockerhub(https://www.docker.com/products/docker-hub/)。类似拉取代码的github。
4、docker安装
4.1 linux下docker安装(该项目使用)
进入我们的虚拟机
vagrant up
vagrant ssh
由于某些网络原因,需要对虚拟机中centos换源。
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下面镜像源如果不可用,自行网上找一个
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache
sudo yum update
安装docker
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
启动docker
sudo systemctl start docker
#开机自启动
#sudo systemctl enable docker
验证 Docker 安装
sudo docker --version
参考官方文档:https://docs.docker.com/engine/install/centos/
4.2 windows/mac操作系统下docker安装(补充)
对于windows或者mac
官网下载,傻瓜式安装。https://www.docker.com/。注意Windows家庭版不支持docker!!!
因为我的计算机是windows,我就下载windows。
这里补充一个小知识。amd64和arm64的区别。
这里amd64,就是我们常说的x86_64。ARM64 和 AMD64(或 x86_64)是两种不同的处理器架构,它们在设计、性能、应用场景等方面有显著区别。ARM64 架构强调低功耗和高集成度,适合于移动设备和嵌入式系统。AMD64 架构则侧重于高性能计算,广泛用于台式机、笔记本和服务器中。
你可以控制台查看你到底是啥架构。一般笔记本都是x86(AMD64)
C:\Users\半旧>echo %PROCESSOR_ARCHITECTURE%
AMD64
下载后,启动下docker。如果是windows的电脑,需要提前启动Hyper-V服务。(注意:windows家庭版不支持Hyper-V,所以也不支持docker服务
)
4.3 docker换源
由于网络原因,需要对docker换源,下面源25年1 月 21 日确认可用:https://docker.xuanyuan.me。如失效,自己找一个。
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo vi /etc/docker/daemon.json
修改文件内容:
{"registry-mirrors": ["https://docker.xuanyuan.me"]
}
重启docker服务
sudo systemctl restart docker
验证是否生效。
sudo docker info
5、容器化和Dockerfile
前面我们提到,容器的作用就是打包项目及其需要的环境、配置等。具体怎么做?
所谓Dockerfile,其实就是一个配置文件,包括一些打包需要的内容。
下面我们演示个实际的demo。看看这一个过程。
创建一个hellodocker文件夹。编写index.js一个简单的代码。
console.log("hello,docker")
我们电脑已经安装过node了(参考下面博客第三节:https://blog.csdn.net/qq_41708993/article/details/145163210?spm=1001.2014.3001.5501)。
可以执行node index.js看到输出结果。
现在我们如果需要在另一个地方(比如生产中,需要把程序员电脑的代码在服务器上执行)运行我们的代码,需要:
现在,我们把这些步骤写到Dockerfile中。
在项目的根目录下创建Dockerfile
FROM node:18-alpine
COPY index.js /index.js
CMD ["node", "index.js"]
打包。
查看是否生成成功。
运行。
可以把镜像上传到dockerhub。这里我们就不展开了。
docker push your-username/your-image-name:tag
6、在线docker实验学习平台
我们可以在线运行我们的docker镜像。https://labs.play-with-docker.com/
Play with Docker(PWD)是一个由 Docker 社区成员开发的在线平台,旨在为用户提供一个无需安装即可体验和学习 Docker 的环境。
主要特点:
在线实验环境:用户可以在浏览器中直接运行 Docker 命令,体验容器的构建、运行和管理。
支持 Docker Swarm 模式:PWD 允许用户创建和管理 Docker Swarm 集群,体验容器编排和集群管理功能。
交互式教程:平台提供了丰富的自学教程,涵盖从基础到高级的 Docker 使用场景,帮助用户深入了解 Docker 的各项功能。
操作下从dockerhub拉取镜像,点击start登录后,按下图操作。
7、镜像拉取、容器运行
测试下拉取镜像。
运行容器。
8、DockerCompose简介
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。 通过 Compose,您可以使用 YAML 文件来配置应用程序所需的所有服务,然后使用一个命令从该配置文件中创建并启动所有服务。 这使得管理复杂的多容器应用变得更加简单和高效。
下面实际操作下,你就理解它有啥用了。
编写compose.yaml
version: '3'
services:web:image: nginx:latestports:- "8080:80"db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: example
启动docker项目。
docker-compose up
上面的nginx,mysql都启动了。
如果没有这个文件,你每次启动,都需要
docker run -d \--name mydb \-e MYSQL_ROOT_PASSWORD=example \mysql:5.7docker run -d \--name mynginx \-p 8080:80 \--link mydb:db \nginx:latest
而且你第一次运行,还需要docker pull拉取镜像。就问你烦不烦。
到现在为止,你就已经会用docker了。其它的内容,我们只需要在实际实战中,用一用,你就都会了,不会也没关系,查一查。下面,回到我们的主线任务吧。
9、docker安装mysql、redis(谷粒商城环境搭建)
编写compose.yaml
version: '3'
services:mysql:image: mysql:5.7container_name: mysqlports:- "3306:3306"volumes:- /volume1/docker/gulimall/mysql/log:/var/log/mysql- /volume1/docker/gulimall/mysql/data:/var/lib/mysql- /volume1/docker/gulimall/mysql/conf:/etc/mysql/conf.denvironment:MYSQL_ROOT_PASSWORD: rootnetworks:- backendrestart: alwaysredis:image: redis:latestcontainer_name: redisports:- "6379:6379"volumes:- /volume1/docker/gulimall/redis/data:/data- /volume1/docker/gulimall/redis/conf/redis.conf:/etc/redis/redis.confcommand: ["redis-server","/etc/redis/redis.conf","--appendonly", "yes"] # 开启 Redis 持久化networks:- backendrestart: alwaysnetworks:backend:driver: bridge
稍微解释下这个文件。
MySQL 配置:
使用 mysql:5.7 镜像。 将 MySQL 的端口映射到宿主机的 3306。 配置了三个卷: log:用于持久化 MySQL
日志文件。 data:用于持久化 MySQL 数据文件。 conf:用于持久化 MySQL 配置文件。 设置环境变量
MYSQL_ROOT_PASSWORD 来初始化数据库的 root 密码。 设置 restart: always,确保容器在失败时自动重启。
Redis 配置:使用 redis:latest 镜像。 将 Redis 的端口映射到宿主机的 6379。 配置了持久化,指定 --appendonly
yes 参数开启 AOF 持久化。 持久化的 Redis 数据存储在 /volume1/docker/gulimall/redis/data
目录下。 网络配置:使用了 backend 网络(桥接模式)来确保 MySQL 和 Redis 服务可以相互访问。
由于使用了挂载命令,需要保证宿主机上,下面的目录或者文件存在,请自行创建。
mkdir -p /volume1/docker/gulimall/mysql/log
mkdir -p /volume1/docker/gulimall/mysql/data
mkdir -p /volume1/docker/gulimall/mysql/conf
mkdir -p volume1/docker/gulimall/redis/data
touch /volume1/docker/gulimall/conf/conf/redis.conf
启动。
测试下吧。首先,确保容器是正常的。
root@ubuntu-Inspiron-16-5630:/volume1/docker/gulimall# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2d00947dcb7 mysql:5.7 "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
7d4f79fddf23 redis:latest "docker-entrypoint.s…" 6 seconds ago Up 5 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
分别进入容器内部,测试下功能。
一切正常。
到此位置,商城环境已经搭建好咯。
相关文章:
cursor重构谷粒商城05——docker容器化技术快速入门【番外篇】
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...
Django项目的创建及运行——Django学习日志(一)
1.命令行创建 (1)创建项目 django-admin startproject HelloWorld(这里的名称任意) (2)创建应用(app) 首先要进入到项目目录,比如我这里的项目目录为HelloWorld cd …...
gesp(C++六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯
gesp(C六级)(1)洛谷:P10250:[GESP样题 六级] 下楼梯 题目描述 顽皮的小明发现,下楼梯时每步可以走 1 1 1 个台阶、 2 2 2 个台阶或 3 3 3 个台阶。现在一共有 N N N 个台阶,你能帮小明算算有多少种方案…...
1.23学习
misc buuctf-小明的保险箱 打开附件是一个在线图片首先将其另存为,然后仅仅只是一个图片,而无其他信息,那么我们再进行binwalk或者foremost文件分离,得到了一个文件夹,其中含有一个压缩包但是是一个加密的࿰…...
atheris从安装到fuzz输入输出解读
1. 引入 模糊测试是一种自动化的软件测试技术,它通过自动生成大量随机数据作为输入来测试程序,以发现潜在的错误、漏洞或崩溃。atheris是一个专门用于CPython(Python的C语言实现)的模糊测试框架。 2. 安装atheris 参考1&#x…...
基于自然语言处理的垃圾短信识别系统
基于自然语言处理的垃圾短信识别系统 🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 目录 设计题目设计目的设计任务描述设计要求输入和输出…...
PAT甲级-1022 Digital Libiary
题目 题目大意 一个图书有图书id,书名,作者,关键字,出版商,出版时间6个信息。现要查询图书的ID,1对应通过书名查询,2对应作者,3对应关键字(不需要完全一致,包…...
GD32F470 USB虚拟串口
1. 硬件连接 确保GD32F470开发板的USB接口连接到PC的USB端口。开发板通常提供USB FS(全速)接口,可以直接使用。 2. 配置USB功能 需要配置USB时钟、GPIO和中断,以支持全速USB设备模式。 2.1 配置USB时钟 c复制 void usb_rcu_…...
25美赛ABCDEF题详细建模过程+可视化图表+参考论文+写作模版+数据预处理
详情见该链接!!!!!! 25美国大学生数学建模如何准备!!!!!-CSDN博客文章浏览阅读791次,点赞13次,收藏7次。通过了解比赛基本…...
【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能
【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…...
Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解
上一讲,我们讲解了 Loadgen 的极简部署方式、配置文件、快速使用从 0 到 1 方式。 本讲,我们主要解读一下 Loadgen 的丰富的命令行及参数含义。 有同学可能会说,上面不是介绍很清楚了吗?但,咱们还是有必要详细中文解读…...
DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)
五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...
【设计模式-行为型】状态模式
一、什么是状态模式 什么是状态模式呢,这里我举一个例子来说明,在自动挡汽车中,挡位的切换是根据驾驶条件(如车速、油门踏板位置、刹车状态等)自动完成的。这种自动切换挡位的过程可以很好地用状态模式来描述。状态模式…...
想品客老师的第六天:函数
函数基础的部分写在这里 函数声明 在js里万物皆对象,函数也可以用对象的方式定义 let func new Function("title", "console.log(title)");func(我是参数title); 也可以对函数赋值: let cms function (title) {console.log(tit…...
hedfs和hive数据迁移后校验脚本
先谈论校验方法,本人腾讯云大数据工程师。 1、hdfs的校验 这个通常就是distcp校验,hdfs通过distcp迁移到另一个集群,怎么校验你的对不对。 有人会说,默认会有校验CRC校验。我们关闭了,为什么关闭?全量迁…...
面向通感一体化的非均匀感知信号设计
文章目录 1 非均匀信号设计的背景分析1.1 基于OFDM波形的感知信号1.2 非均匀信号设计的必要性和可行性1.2 非均匀信号设计的必要性和可行性 3 通感一体化系统中的非均匀信号设计方法3.1 非均匀信号的设计流程(1)均匀感知信号设计(2࿰…...
React将props传递给一个组件
React 组件通讯:从单向数据流到跨层级交互的深度实践 ——基于 Props 的通讯机制解析与高阶模式探索 一、Props 的本质:不可变数据管道 React 的 props(properties)机制构建了单向数据流的核心范式。每个父组件通过 props 向子…...
头歌实训作业 算法设计与分析-贪心算法(第2关:最优装载问题)
任务描述 有一批集装箱要装上一艘载重量为C的轮船,共有n个集装箱,其中集装箱i的重量为Wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 测试说明 输入和输出说明: 第1行为集装箱数目n和载重限…...
HarmonyOS基于ArkTS卡片服务
卡片服务 前言 Form Kit(卡片开发框架)提供了一种在桌面、锁屏等系统入口嵌入显示应用信息的开发框架和API,可以将应用内用户关注的重要信息或常用操作抽取到服务卡片(以下简称“卡片”)上,通过将卡片添加…...
Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解
在现代软件开发中,性能测试是确保应用程序稳定性和响应速度的关键环节。 今天,我们就来深入了解一款国产化功能强大的 Elasticsearch 负载测试工具——INFINI Loadgen。 一、INFINI Loadgen 简介 Github地址:https://github.com/infinilabs/l…...
Python算法详解:动态规划
动态规划(Dynamic Programming,简称 DP)是计算机科学中一种高效解决问题的算法思想。它通过将复杂问题分解为更小的子问题,记录中间结果,避免重复计算,从而提升效率。本文将从动态规划的基础思想出发&#…...
python3+TensorFlow 2.x(二) 回归模型
目录 回归算法 1、线性回归 (Linear Regression) 一元线性回归举例 2、非线性回归 3、回归分类 回归算法 回归算法用于预测连续的数值输出。回归分析的目标是建立一个模型,以便根据输入特征预测目标变量,在使用 TensorFlow 2.x 实现线性回归模型时&…...
lombok 没生效 java: 找不到符号 符号: 方法 setName(java.lang.String)
今天使用lombok 添加了 Data注解 set方法却没起效 解决方法 1 给lombok 添加版本号 再maven刷新下 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version><optional>…...
uiautomator2教程
一、简介 uiautomator2 是一个 Python 库,用于 Android 的 UI 自动化测试,底层基于 Google uiautomator。 二、安装 1、安装adb 2、pip install uiautomator2 3、设备安装 atx - agent,python -m uiautomator2 init 4、安装weditor&…...
旅游风景的代码项目
敦煌莫高窟:用代码打开千年艺术的大门 ——一个零基础也能看懂的神奇项目 前言:当古老艺术遇上现代代码 想象一下,你坐在电脑前,指尖轻轻一点,就能穿越到敦煌莫高窟——看飞天的衣袂飘飘、听千年的驼铃声声。这不是科…...
【后端开发】字节跳动青训营之性能分析工具pprof
性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接: 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…...
【测试】-- 认识测试
1. 软件测试定义 软件测试就是验证软件产品特性(功能、性能、界面、易用性等)是否满足用户的需求。 2. 测试的岗位 软件测试开发工程师(测开) 开发:开发测试效率工具(自动化、性能测试、覆盖率等&#x…...
浏览器hid 和蓝牙bluetooth技术区别
HID与蓝牙技术区别 引言 在前端开发中,与外部设备的交互越来越重要,尤其是在移动设备和物联网设备日益普及的今天。HID(Human Interface Device)和蓝牙(Bluetooth)是两种常用的技术,用于实现设备…...
PCIE模式配置
对于VU系列FPGA,当DMA/Bridge Subsystem for PCI Express IP配置为Bridge模式时,等同于K7系列中的AXI Memory Mapped To PCI Express IP。...
mysql 学习3 SQL语句--整体概述。SQL通用语法;DDL创建数据库,查看数据库,删除数据库,使用数据库;
SQL通用语法 SQL语句分类 DDL data definition language : 用来创建数据库,创建表,创建表中的字段,创建索引。因此成为 数据定义语言 DML data manipulation language 有了数据库和表以及字段后,那么我们就需要给这个表中 添加数…...
Swing使用MVC模型架构
什么是MVC模式? MVC是一组英文的缩写,其全名是Model-View-Controller,也就是“模型-视图-控制器”这三个部分组成。这三个部分任意一个部分发生变化都会引起另外两个发生变化。三者之间的关系示意图如下所示: MVC分为三个部分,所以在MVC模型中将按照此三部分分成三…...
Java定时任务实现方案(二)——ScheduledExecutorService
这篇笔记,我们要来介绍实现Java定时任务的第二个方案,使用ScheduledExecutorService,以及该方案的优点和缺点。 ScheduledExecutorService是Java并发包java.util.concurrent中用于执行定时任务和周期性任务的接口,它拓展了Executo…...
Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
在本系列的上篇中,小李哥为大家介绍了如何在亚马逊云科技上给社交数字营销场景创建AI代理的方案,用于社交动态的生成和对文章进行推广曝光。在本篇中小李哥将继续本系列的介绍,为大家介绍如何创建主代理,将多个子代理挂载到主代理…...
Leecode刷题C语言之收集所有金币可获得的最大积分
执行结果:通过 执行用时和内存消耗如下: int dfs(int node, int parent, int f, int* coins, int k, int **children, int *childCount, int **memo) {if (memo[node][f] ! -1) {return memo[node][f];}int res0 (coins[node] >> f) - k;int res1 coins[no…...
STM32_SD卡的SDIO通信_基础读写
本篇将使用CubeMXKeil, 创建一个SD卡读写的工程。 目录 一、SD卡要点速读 二、SDIO要点速读 三、SD卡座接线原理图 四、CubeMX新建工程 五、CubeMX 生成 SD卡的SDIO通信部分 六、Keil 编辑工程代码 七、实验效果 实现效果,如下图: 一、SD卡 速读…...
新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景
新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景 Handler 是啥?Handler 的几个核心功能: Thread.sleep 是啥?Thread.sleep 的核心特点: 两者的区别它们的应用场景1. Handler 的应用场景2. Thread.sleep…...
C语言-----扫雷游戏
扫雷游戏的功能说明 : • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷: ◦ 如果位置不是雷,就显⽰周围有⼏个雷 ◦ 如果位置是雷,就…...
监控与调试:性能优化的利器 — ShardingSphere
在分布式数据库系统中,监控和调试是确保系统高效运行的关键。ShardingSphere 提供了多种监控和调试工具,帮助开发者实时跟踪和优化性能,识别瓶颈,进行故障排查,从而提升系统的稳定性和响应速度。本文将介绍如何使用 Sh…...
Kubernetes相关知识入门详解
一、Pod的滚动升级 1.服务升级的一般思路:停止与该服务相关的所有服务pod,重新拉去更新后的镜像并启动。这种方法存在一个比较现实的问题是逐步升级导致较长时间的服务不可用。 2.Kubernetes滚动升级的思路:通过滚动升级的命令创建新的rc&…...
多层 RNN原理以及实现
数学原理 多层 RNN 的核心思想是堆叠多个 RNN 层,每一层的输出作为下一层的输入,从而逐层提取更高层次的抽象特征。 1. 单层 RNN 的数学表示 首先,单层 RNN 的计算过程如下。对于一个时间步 t t t,单层 RNN 的隐藏状态 h t h_t…...
Unity阿里云OpenAPI 获取 Token的C#【记录】
获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...
java+vue项目部署记录
目录 前言 一、java和vue 二、部署记录 1.获取代码 2.运行前端 3.运行后端 三、其他 1.nvm 总结 前言 近期工作需要部署一套javavue前后分离的项目,之前都略有接触,但属于不及皮毛的程度,好在对其他开发语言、html js这些还算熟&am…...
PID 控制算法(二):C 语言实现与应用
在本文中,我们将用 C 语言实现一个简单的 PID 控制器,并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态(如温度、速度等)。同时,我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器…...
深入MapReduce——计算模型设计
引入 通过引入篇,我们可以总结,MapReduce针对海量数据计算核心痛点的解法如下: 统一编程模型,降低用户使用门槛分而治之,利用了并行处理提高计算效率移动计算,减少硬件瓶颈的限制 优秀的设计,…...
在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
Qt实践:一个简单的丝滑侧滑栏实现
Qt实践:一个简单的丝滑侧滑栏实现 笔者前段时间突然看到了侧滑栏,觉得这个抽屉式的侧滑栏非常的有趣,打算这里首先尝试实现一个简单的丝滑侧滑栏。 首先是上效果图 (C,GIF帧率砍到毛都不剩了) QProperty…...
基于ESP32-IDF驱动GPIO输出控制LED
基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…...
OpenCV文字绘制支持中文显示
OpenCV版本:4.4 IDE:VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示,网上很多方法推荐的都是使用FreeType来支持,FreeType是什么呢?FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…...
jenkins-k8s pod方式动态生成slave节点
一. 简述: 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式,Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务,从而充分利用集群资源并实现更好的隔离性…...
消息队列篇--基础篇(消息队列特点,应用场景、点对点和发布订阅工作模式,RabbmitMQ和Kafka代码示例等)
1、消息队列的介绍 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue,简称MQ)…...