Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
五、代码示例与解释
(一)Dockerfile 示例
以下是一个简单的基于 Python Flask 应用的 Dockerfile 示例:
# 使用Python 3.10-slim作为基础镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件到容器内的工作目录
COPY. /app
# 安装项目依赖
RUN pip install -r requirements.txt
# 暴露应用运行的端口
EXPOSE 5000
# 定义容器启动时执行的命令
CMD ["python", "app.py"]
- FROM:这是 Dockerfile 的第一条指令,用于指定基础镜像。python:3.10-slim是官方提供的 Python 3.10 版本的精简镜像,它包含了运行 Python 应用所需的基本环境,基于这个镜像可以大大减少我们构建镜像的工作量 。
- WORKDIR:设置容器内的工作目录为/app,后续的指令如COPY、RUN等如果没有指定绝对路径,都会在这个工作目录下执行。这样可以保证文件操作的一致性和可预测性 。
- COPY:将当前目录(即构建上下文)下的所有文件和目录复制到容器内的/app目录中。第一个.表示当前目录,第二个/app表示目标路径 。
- RUN:在镜像构建过程中执行命令。这里使用pip install -r requirements.txt来安装项目所需的依赖项,requirements.txt文件中列出了项目的所有 Python 依赖包 。
- EXPOSE:声明容器运行时会监听 5000 端口,这只是一个声明,并不会自动将容器端口映射到宿主机,主要用于提示用户和其他工具(如 Kubernetes)该容器的服务端口 。
- CMD:指定容器启动时要执行的命令。这里是运行python app.py来启动 Flask 应用,app.py是 Flask 应用的主程序文件 。如果在运行容器时指定了其他命令,将会覆盖CMD中的命令。
(二)CI/CD 脚本示例
假设我们使用 GitLab CI/CD 来实现自动化构建和部署,以下是一个简单的.gitlab-ci.yml文件示例:
stages:
- build
- test
- deploy
build:
stage: build
script:
- docker build -t my_flask_app:latest.
- docker tag my_flask_app:latest registry.example.com/my_flask_app:latest
- docker push registry.example.com/my_flask_app:latest
test:
stage: test
script:
- docker run -it --rm registry.example.com/my_flask_app:latest pytest
deploy:
stage: deploy
script:
- ssh user@production_server "docker pull registry.example.com/my_flask_app:latest && docker stop my_flask_container && docker rm my_flask_container && docker run -d --name my_flask_container -p 5000:5000 registry.example.com/my_flask_app:latest"
- stages:定义了 CI/CD 流程中的三个阶段,分别是build(构建)、test(测试)和deploy(部署),这些阶段会按照顺序依次执行 。
- build作业:
-
- stage指定该作业属于build阶段。
-
- script部分定义了构建镜像的步骤:首先使用docker build命令构建一个名为my_flask_app:latest的镜像;然后使用docker tag为镜像打标签,将其标记为registry.example.com/my_flask_app:latest,其中registry.example.com是私有镜像仓库地址;最后使用docker push将镜像推送到私有镜像仓库 。
- test作业:
-
- stage指定该作业属于test阶段。
-
- script部分使用docker run运行刚刚推送到仓库的镜像,并执行pytest测试命令,--rm参数表示容器在测试完成后自动删除 。
- deploy作业:
-
- stage指定该作业属于deploy阶段。
-
- script部分通过ssh连接到生产服务器,首先拉取最新的镜像,然后停止并删除正在运行的容器,最后使用新的镜像启动一个新的容器,并将容器的 5000 端口映射到服务器的 5000 端口 。
六、实际应用场景
(一)微服务架构
在微服务架构中,一个大型应用被拆分成多个小型的、独立的服务,每个服务都有自己独立的业务逻辑、数据存储和接口 。Docker 与 CI/CD 的集成在微服务架构中发挥着关键作用,实现了各服务的独立构建、测试和部署。
- 独立构建:每个微服务都可以有自己独立的 Dockerfile,定义该服务的镜像构建过程。例如,在一个电商系统中,订单服务、商品服务、用户服务等微服务各自拥有独立的代码仓库和 Dockerfile。订单服务的 Dockerfile 可以基于官方的 Node.js 镜像,安装订单服务所需的依赖包,如 Express 框架、数据库连接库等,然后将订单服务的代码复制到镜像中,构建出订单服务的 Docker 镜像 。这样,当订单服务的代码发生变更时,只需要重新构建该服务的镜像,而不会影响其他微服务。
- 独立测试:利用 Docker 的隔离性,每个微服务的测试可以在独立的容器环境中进行,避免了测试环境的相互干扰。以商品服务为例,在 CI/CD 流程中,当商品服务的代码提交后,CI 工具会自动拉取代码,根据 Dockerfile 构建商品服务的镜像,然后在容器中运行单元测试、集成测试等。如果测试失败,开发人员可以快速定位到问题所在,而不会因为其他服务的影响导致问题排查困难 。同时,通过在测试容器中模拟各种真实场景,如高并发访问、网络延迟等,可以更全面地测试微服务的性能和稳定性。
- 独立部署:在 CD 阶段,每个微服务的 Docker 镜像可以独立地部署到生产环境中。使用 Kubernetes 等容器编排工具,可以轻松地管理各个微服务的容器实例,实现服务的弹性扩展和负载均衡。例如,当电商系统的订单量突然增加时,可以通过 Kubernetes 快速增加订单服务的容器实例数量,以应对高并发请求;而商品服务的容器实例数量则可以根据实际业务需求保持不变 。这种独立部署的方式使得微服务架构更加灵活和可维护,一个微服务的更新和部署不会影响到其他微服务的正常运行。
(二)容器化部署
将应用打包成 Docker 容器进行部署,在不同环境中具有显著的优势和广泛的应用场景。
- 环境一致性优势:无论应用是部署在开发环境、测试环境还是生产环境,Docker 容器都能确保应用及其依赖的运行环境完全一致。例如,一个基于 Java Spring Boot 的 Web 应用,在开发环境中使用 Docker 容器进行开发和测试,开发人员可以在本地轻松搭建与生产环境相同的运行环境,包括 Java 版本、依赖的第三方库、数据库连接等 。当应用需要部署到测试环境或生产环境时,只需将相同的 Docker 镜像复制到目标环境中运行即可,避免了因环境差异导致的各种问题,大大提高了部署的成功率和效率。
- 应用场景:
-
- 云平台部署:在云计算环境中,如亚马逊的 AWS、微软的 Azure、谷歌的 GCP 等,Docker 容器可以方便地部署在各种云服务器上。以 AWS 为例,通过使用 ECS(Elastic Container Service)或 EKS(Elastic Kubernetes Service),可以轻松地将 Docker 容器部署到 AWS 的云基础设施中,利用云平台的弹性计算、存储和网络资源,实现应用的快速部署和扩展 。例如,一个初创的互联网公司可以将其 Web 应用以 Docker 容器的形式部署到 AWS ECS 上,根据业务流量的变化自动调整容器实例数量,降低运营成本。
-
- 混合云与多云部署:对于企业来说,可能会同时使用多个云平台或混合云架构(既有公有云又有私有云)。Docker 容器的可移植性使得应用可以在不同的云平台之间轻松迁移。例如,企业的核心业务应用在私有云中运行,而一些非核心的业务应用可以部署到公有云中。通过 Docker 容器,这些应用可以在不同的云环境中保持一致的运行状态,实现了混合云与多云部署的无缝衔接 。当企业需要将某个应用从一个公有云平台迁移到另一个公有云平台时,只需将 Docker 镜像复制到目标云平台并运行即可,无需重新配置和部署整个应用。
(三)持续集成与持续部署
通过 Docker 与 CI/CD 的集成,能够实现代码的快速交付,显著提高开发效率,以下是一些实际的例子。
- 快速反馈与问题修复:在一个大型的软件开发项目中,可能有多个开发人员同时进行开发。每次开发人员提交代码到代码仓库时,CI/CD 流程会自动触发。以一个基于 Python Django 的 Web 应用为例,CI 工具会拉取最新的代码,根据 Dockerfile 构建 Docker 镜像,然后运行单元测试、集成测试等 。如果测试失败,CI 工具会立即通知开发人员,开发人员可以快速定位和修复问题。这种快速反馈机制使得问题能够在早期被发现和解决,避免了问题在后续阶段的积累和放大,大大提高了开发效率。例如,开发人员在提交代码后几分钟内就能收到测试结果通知,及时修复代码中的语法错误或逻辑问题,而不需要等到整个项目集成阶段才发现问题,从而节省了大量的时间和精力。
- 频繁迭代与快速交付:在互联网产品开发中,业务需求变化频繁,需要快速迭代产品。通过 Docker 与 CI/CD 的集成,当开发人员完成新功能的开发并提交代码后,CI/CD 流程会自动构建、测试和部署新的版本。例如,一个在线教育平台,为了满足用户的学习需求,可能需要频繁更新课程内容、优化用户界面等 。借助 Docker 与 CI/CD,开发团队可以快速将新功能部署到生产环境中,用户可以及时体验到新的功能和改进。这种频繁迭代和快速交付的能力使得产品能够更好地满足市场需求,提高用户满意度和产品竞争力。
七、工具与资源推荐
(一)Docker 相关工具
- Docker Desktop:是一款用于在本地开发环境中轻松管理和运行 Docker 容器的工具,支持 Windows、Mac 和 Linux 系统。它提供了直观的图形界面,方便用户进行镜像拉取、容器创建与管理等操作,同时也集成了 Kubernetes,便于在本地进行容器编排的测试和开发。对于开发人员来说,Docker Desktop 是快速上手 Docker 的必备工具,可大大提高开发效率。
- Docker Compose:用于定义和运行多容器的 Docker 应用程序。通过一个 YAML 文件,就可以配置应用程序的各个服务,包括每个服务使用的镜像、环境变量、端口映射等。使用docker-compose up命令,即可一键启动整个多容器应用,非常适合在开发和测试环境中部署复杂的分布式应用。例如,一个包含 Web 服务、数据库服务和缓存服务的应用,就可以使用 Docker Compose 进行快速部署和管理。
(二)常见 CI/CD 工具
- Jenkins:是一款开源的自动化服务器,具有丰富的插件生态系统,能够与各种版本控制系统(如 Git、SVN)和构建工具(如 Maven、Gradle)集成,实现自动化的构建、测试和部署流程。其可视化的 Web 界面便于用户进行配置和管理,支持多种触发方式,如代码提交触发、定时触发等,适用于各种规模的项目和团队。
- GitLab CI/CD:是 GitLab 平台内置的 CI/CD 工具,与 GitLab 代码仓库紧密集成。使用 YAML 文件来定义 CI/CD 流水线,配置简洁明了,且具有实时的构建日志和良好的 UI 交互体验。对于使用 GitLab 进行代码管理的团队而言,GitLab CI/CD 是一个便捷且高效的选择,能够无缝地融入团队的开发工作流程。
- Travis CI:是一款托管的 CI/CD 服务,主要用于构建和测试托管在 GitHub 和 Bitbucket 上的软件项目。它支持多种编程语言和框架,配置简单易懂,容易上手。Travis CI 提供了免费的服务,对于开源项目来说是一个经济实惠且功能强大的选择,能够帮助开源项目快速实现自动化的构建和测试。
(三)学习资源
- 书籍:
-
- 《Docker 技术入门与实战 第 3 版》:全面系统地介绍了 Docker 的基本原理、构建与操作,涵盖了从基础入门到实战案例、进阶技能以及开源项目等多个方面的内容,适合不同层次的读者学习 Docker 技术。
-
- 《持续交付:发布可靠软件的系统方法》:深入阐述了持续交付的理念、流程和实践方法,对于理解和实施 CI/CD 具有重要的指导意义,帮助读者掌握如何将软件可靠且快速地交付到生产环境。
- 在线课程:
-
- Coursera 上的 “Docker and Kubernetes: The Complete Guide”:详细讲解了 Docker 和 Kubernetes 的核心概念与实践操作,通过实际案例和动手实验,帮助学习者深入理解和掌握这两项技术,提升在容器化和容器编排方面的技能。
-
- 网易云课堂的 “Jenkins 持续集成与持续部署实战”:专注于 Jenkins 的使用,通过实际项目案例,全面介绍了 Jenkins 在 CI/CD 流程中的配置、使用和优化,帮助学习者快速掌握 Jenkins 的应用技巧,实现自动化的软件开发流程。
- 官方文档:
-
- Docker 官方文档:提供了全面且详细的 Docker 使用指南、API 文档等,是学习 Docker 最权威的资料来源,能够帮助用户深入了解 Docker 的各项功能和使用方法。
-
- 各个 CI/CD 工具的官方文档:如 Jenkins、GitLab CI/CD、Travis CI 等,详细介绍了工具的安装、配置、使用方法以及各种高级特性,是学习和使用这些工具的重要参考资料 。
八、总结与展望
(一)总结
Docker 与 CI/CD 的集成,为软件开发和部署带来了前所未有的变革。通过将应用程序及其依赖项打包成容器镜像,Docker 实现了环境的一致性和隔离性,有效解决了传统软件开发中环境差异导致的各种问题。而 CI/CD 流程的自动化特性,则使得代码的构建、测试和部署过程更加高效、可靠,大大缩短了软件的交付周期,提高了开发团队的工作效率。
在集成步骤方面,我们首先需要准备好 Docker 镜像,通过选择合适的基础镜像和编写 Dockerfile,将应用程序及其依赖项打包成可移植的镜像。接着,编写 CI 脚本,实现从代码仓库拉取代码、构建镜像、运行测试和生成报告等功能。然后,选择合适的 CI/CD 工具,如 Jenkins、GitLab CI/CD、Travis CI 等,并将 CI 脚本集成到工具中,实现自动化的构建和部署流程。在自动化构建与部署过程中,通过配置触发器和使用容器编排工具,实现代码变更时的自动构建和部署。最后,配置应用监控和日志管理系统,实时了解应用的运行状态,及时发现和解决问题。
从实际应用场景来看,Docker 与 CI/CD 的集成在微服务架构、容器化部署和持续集成与持续部署等方面都发挥着重要作用。在微服务架构中,每个微服务都可以独立构建、测试和部署,提高了开发效率和系统的可维护性;在容器化部署中,Docker 容器的可移植性和环境一致性优势,使得应用可以在不同的环境中轻松部署和运行;在持续集成与持续部署中,通过自动化的构建、测试和部署流程,实现了代码的快速交付和迭代。
(二)未来发展趋势
展望未来,Docker 与 CI/CD 的集成将在多个方面持续发展。在多云和混合云环境方面,随着企业对云计算的依赖不断增加,多云和混合云架构将成为主流。Docker 容器的可移植性将使其在不同云平台之间的迁移更加便捷,CI/CD 流程也需要适应这种复杂的云环境,实现跨云平台的自动化构建和部署。例如,企业可能会同时使用 AWS、Azure 和 Google Cloud 等多个云平台,Docker 与 CI/CD 的集成需要确保应用在不同云平台上的一致性和稳定性。
在 AI 和机器学习领域,随着 AI 和机器学习技术的快速发展,越来越多的应用将集成 AI 和机器学习功能。Docker 与 CI/CD 的集成将有助于实现 AI 模型的快速部署和迭代,通过自动化的流程,将训练好的模型打包成容器镜像,并快速部署到生产环境中。同时,CI/CD 流程也可以利用 AI 和机器学习技术,实现自动化的测试和部署策略,提高软件的质量和交付效率。例如,通过机器学习算法预测代码变更可能带来的风险,提前进行测试和验证。
安全性和隐私保护将是未来发展的重要关注点。随着数据安全和隐私问题的日益突出,Docker 与 CI/CD 流程需要加强安全性和隐私保护措施。在镜像构建过程中,需要确保基础镜像的安全性,避免引入安全漏洞;在部署过程中,需要加强对容器的安全管理,如限制容器的权限、加密数据传输等。同时,CI/CD 流程也需要加强对代码和镜像的安全扫描,及时发现和修复安全问题。
然而,这些发展趋势也带来了一些挑战。技术复杂性的增加,要求开发人员掌握更多的技术知识和技能,包括 Docker、CI/CD 工具、云平台、AI 和机器学习等方面的知识。集成和兼容性问题也需要解决,Docker 与 CI/CD 流程需要与其他工具和技术相兼容,如各种云平台的服务、安全工具、监控工具等。此外,随着容器化应用的规模不断扩大,容器的管理和运维也将面临更大的挑战,需要更加高效的容器编排和管理工具。
总之,Docker 与 CI/CD 的集成已经成为现代软件开发的重要趋势,未来将在多云、AI、安全等方面持续发展,为企业带来更高的效率和竞争力。但在发展过程中,也需要不断应对各种挑战,推动技术的不断进步和创新。
相关文章:
Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
五、代码示例与解释 (一)Dockerfile 示例 以下是一个简单的基于 Python Flask 应用的 Dockerfile 示例: # 使用Python 3.10-slim作为基础镜像 FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 复制项目文件到容器内的工作目录 C…...
SQL Server的安装和简单使用
目录 一、SQL Server 1.1、简介 1.2、安装包 二、安装SQL Server 2.1、双击安装包 2.2、选择自己想要安装的位置 2.3、点击安装 2.4、安装完成之后会出现以下页面,按照序号依次点击 2.5、不用管密钥,点击下一步 2.6、选择【我接受】 2.7、是否…...
c/c++蓝桥杯经典编程题100道(19)汉诺塔问题
汉诺塔问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 汉诺塔问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1:递归法(难度★) 解法2:迭代法(难度★★★) 四、C实现 解法1࿱…...
Linux 信号量
Linux 信号量 一、信号量基础概念1.1 同步机制的核心需求1.2 信号量的核心原理1.3 信号量类型对比 二、实战代码解析2.1 共享内存与信号量结合示例2.2 信号量类实现要点 三、关键实现细节分析3.1 初始化三步骤3.2 SEM_UNDO机制3.3 原子操作保证 四、进阶应用场景4.1 生产者-消费…...
Qt开发①Qt的概念+发展+优点+应用+使用
目录 1. Qt的概念和发展 1.1 Qt的概念 1.2 Qt 的发展史: 1.3 Qt 的版本 2. Qt 的优点和应用 2.1 Qt 的优点: 2.2 Qt 的应用场景 2.3 Qt 的应用案例 3. 搭建 Qt 开发环境 3.1 Qt 的开发工具 3.2 Qt SDK 的下载和安装 3.3 Qt 环境变量配置和使…...
向量库(Vector Database)
向量库 1. 向量库发展史 早期阶段(2000s) 基于关系型数据库的扩展(如 PostgreSQL 的向量插件)。简单相似度计算(如欧氏距离、余弦相似度)。 专用向量库的兴起(2010s) FAISS…...
torchsparse安装过程的问题
1、项目要求torchsparse githttps://github.com/mit-han-lab/torchsparse.gitv1.4.0 2、torch1.8.1cu111 nvcc--version:11.1 这个版本的cuda匹配的gcc、g经常是7.5。设置为7.5. (这个gcc、g版本修改不一定,可以先进行后面的,…...
【核心算法篇七】《DeepSeek异常检测:孤立森林与AutoEncoder对比》
大家好,今天我们来深入探讨一下《DeepSeek异常检测:孤立森林与AutoEncoder对比》这篇技术博客。我们将从核心内容、原理、应用场景等多个方面进行详细解析,力求让大家对这两种异常检测方法有一个全面而深入的理解。 一、引言 在数据科学和机器学习领域,异常检测(Anomaly…...
Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务
Win10环境使用零讯ZeroNews内网穿透实现Deepseek对外服务 前言 之前笔者已经在Win10环境搭建好了Ollama、DeepSeek、Open WebUI、Dify等组件,成功实现了私有化部署及内网访问: https://lizhiyong.blog.csdn.net/article/details/145505686 https://l…...
CUDA 安装 一直卡在Installing Nsight Visual Studio Edition
最近在安装CUDA的时候,CUDA 安装 一直卡在Installing Nsight Visual Studio Edition,莫名的一直卡在安装进行中这儿,过很久都没进度,如图 后面重新下载了12.6的进行安装也是如此 无论是local还是network,都是这样。度…...
Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网
| 线上研讨会时间:2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括:是否只需集成单一的工…...
STM32 定时器产生定周期方法
目录 背景 程序 第一步、使能PCLK1外设时钟编辑 第二步、时基单元配置 第三步、配置NVIC(设置定时中断优先级)编辑 第四步、使能溢出中断 第五步、使能定时器 第六步、填写中断处理函数(ISR) 背景 在单片机开发当中&…...
解锁机器学习核心算法 | 支持向量机:机器学习中的分类利刃
一、引言 在机器学习的庞大算法体系中,有十种算法被广泛认为是最具代表性和实用性的,它们犹如机器学习领域的 “十大神器”,各自发挥着独特的作用。这十大算法包括线性回归、逻辑回归、决策树、随机森林、K - 近邻算法、K - 平均算法、支持向…...
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署
青少年编程与数学 02-009 Django 5 Web 编程 21课题、部署 一、软件开发部署部署的主要内容部署的步骤部署的方式部署的环境 二、Django项目部署1. 准备工作2. 代码部署3. 配置Django项目4. Web服务器和应用服务器配置5. 安全和性能优化6. 监控和日志管理7. 测试和上线 三、在U…...
ARM系统源码编译OpenCV 4.10.0(包含opencv_contrib)
因项目部署在ARM系统上,需要编译一个arm版本的opencv-4.10.0(带opencv_contrib)版本。 若需要Linux系统下源码安装OpenCV,可参考:https://blog.csdn.net/qq_45445740/article/details/142770493?spm1001.2014.3001.55…...
cmake:定位Qt的ui文件
如题。在工程中,将h,cpp,ui文件放置到不同文件夹下,会存在cmake找不到ui文件,导致编译报错情况。 cmake通过指定文件路径,确保工程找到ui文件。 标识1:ui文件保存路径。 标识2:添加…...
(leetcode 1749 前缀和)1749. 任意子数组和的绝对值的最大值
核心题意 任意子数组和 的绝对值的最大值实际上是前缀和之间的差的最大值 建立前缀和数组 如果我们只考虑前缀和的最大值和最小值之差,那么就能够获得一个最大的子数组和的绝对值。因为任意一个子数组的和 prefix[j1] - prefix[i],它的绝对值是最大当…...
下载安装运行测试开源vision-language-action(VLA)模型OpenVLA
1. 安装 项目官网OpenVLA 首先按照官网提示的以下代码,执行创建环境->安装最小依赖->git克隆项目等 # Create and activate conda environment conda create -n openvla python3.10 -y conda activate openvla# Install PyTorch. Below is a sample comma…...
【网络安全 | 漏洞挖掘】我如何通过Cookie Manipulation发现主域上的关键PII?
未经许可,不得转载。 文章目录 正文正文 在分析 Example.com 的认证机制时,我注意到一个特定的 cookie,USER_ID,包含了一个具有预测性的会话标识符,其格式为: USER_ID="VYCVCDs-TZBI:XXXX-random-data"其中,XXXX 是由四个大写字母组成的部分,我使用 Burp S…...
【操作系统】操作系统概述
操作系统概述 1.1 操作系统的概念1.1.1 操作系统定义——什么是OS?1.1.2 操作系统作用——OS有什么用?1.1.3 操作系统地位——计算机系统中,OS处于什么地位?1.1.4 为什么学操作系统? 1.2 操作系统的历史1.2.1 操作系统…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
