大厂开发必知必会:Devops、CI/CD、流水线和Paas的关系解析说明
为什么作为程序开发人员需要了解ci/cd流程和原理?
作为程序开发人员,了解CI/CD(持续集成/持续交付)的流程和原理具有以下几个重要的理由:
1. 提高代码质量和稳定性
- 自动化测试:CI/CD流程中集成了自动化测试,可以在每次代码变更时自动运行测试,确保代码的正确性,减少引入错误的风险。
- 持续集成:频繁的小变更比大规模的合并更容易调试和管理,减少了集成时的冲突和问题。
2. 加快开发和交付速度
- 自动化构建:CI/CD自动化了构建过程,减少了手动操作的时间,使开发人员可以更专注于编码。
- 快速反馈:通过自动化测试和构建,开发人员可以快速获得反馈,及时修复问题,提升开发效率。
3. 改善团队协作
- 共享代码变更:频繁的代码集成和自动化测试结果让团队成员随时了解项目状态,促进团队协作。
- 减少冲突:频繁的小规模集成和测试减少了代码冲突的可能性,提高了团队合作的效率。
4. 提高生产力和灵活性
- 自动化部署:CI/CD自动化了部署过程,从开发到生产环境的一致性部署减少了人为错误,提高了部署效率和系统稳定性。
- 持续交付:CI/CD使得软件可以随时准备发布,响应市场和用户需求的速度更快,增强了业务的敏捷性。
5. 增强可维护性和可追溯性
- 构建和测试记录:每次构建和测试都有详细的日志和报告,可以追溯到具体的代码提交和变更,便于问题排查和修复。
- 版本控制:与版本控制系统集成,自动记录每次构建和部署的版本,提升了系统的可维护性。
6. 符合现代开发实践
- DevOps文化:CI/CD是DevOps文化的重要组成部分,推动开发和运维团队的协作,提升整体交付能力。
- 业界标准:CI/CD已经成为现代软件开发的标准实践,了解和掌握CI/CD流程是职业发展的重要一环。
7 具体实例
自动化测试
自动化测试是CI/CD的重要部分。了解如何编写和集成自动化测试,可以确保代码在提交后立即得到验证,减少回归错误。例如,使用JUnit编写单元测试,集成到CI/CD管道中,每次提交代码后自动运行这些测试。
自动化部署
CI/CD可以自动化部署过程,确保每个版本的发布过程一致。例如,使用Jenkins和Kubernetes,可以在每次构建成功后自动部署到测试环境,进行进一步验证,并最终部署到生产环境。
快速反馈
通过CI/CD,开发人员可以在提交代码后几分钟内获得构建和测试结果,快速发现和修复问题。比如,当提交代码到GitHub时,触发Travis CI进行构建和测试,并将结果反馈给开发人员。
结论
了解和掌握CI/CD流程和原理,可以帮助程序开发人员提升代码质量和稳定性,加快开发和交付速度,改善团队协作,增强系统的可维护性和可追溯性,符合现代开发实践,促进职业发展。因此,作为程序开发人员,深入了解CI/CD流程和原理是非常必要且有益的。
CI/CD集成
什么是CI(Continuous Integration)持续集成?集成的是什么,到哪儿?
定义:持续集成是一种软件开发实践,开发人员频繁地(通常每天)将代码集成到主干分支中。每次集成都通过自动化构建和测试来验证,从而尽早发现问题。
目的:通过频繁的集成,减少集成问题,使开发人员能够更快地发现和修复错误,从而提高软件质量和开发效率。
CI(持续集成)和CD(持续交付/持续部署)的配置是在不同的阶段和场景下进行的。以下是一些常见的情况和步骤来配置CI和CD:
CI(持续集成)配置(实际上这些在各个大公司的PaaS平台上都会通过可视化的方式配置并且生成配置文件,避免开发人员直接编辑yml文件)
什么时候配置
- 项目启动阶段:在项目刚开始时配置CI,确保每次代码提交都能进行自动化构建和测试。
- 新功能开发阶段:每次新功能分支创建时,为该分支配置CI,确保新代码变更不影响代码库的稳定性。
- Bug修复阶段:在修复Bug的过程中配置CI,确保修复后的代码通过所有测试用例。
如何配置
- 选择CI工具:选择一个合适的CI工具(如Jenkins、GitLab CI、CircleCI等)。
- 创建CI配置文件:根据选择的CI工具,创建相应的配置文件(如Jenkinsfile、.gitlab-ci.yml等),定义构建和测试步骤。
- 定义触发条件:设置触发CI构建的条件,如代码提交(push)、合并请求(merge request)、定时任务等。
- 配置构建环境:定义构建环境,包括操作系统、依赖库、编译工具等。
- 编写构建和测试脚本:编写自动化构建和测试脚本,确保每次代码变更都能自动构建并运行测试用例。
- 集成代码库:将CI工具与代码库(如GitHub、GitLab、Bitbucket等)集成,确保每次代码提交都能触发CI构建。
CI配置实例
- 选择工具:使用GitLab CI。
- 创建配置文件:在项目根目录下创建.gitlab-ci.yml文件。
- 定义构建和测试步骤:
stages:- build- testbuild_job:stage: buildscript:- echo "Building the project"- ./build.shtest_job:stage: testscript:- echo "Running tests"- ./test.shonly:- master
```#### CI配置实例
1. **选择工具**:使用GitLab CI。
2. **创建配置文件**:在项目根目录下创建.gitlab-ci.yml文件。
3. **定义构建和测试步骤**:
```yaml
stages:- build- testbuild_job:stage: buildscript:- echo "Building the project"- ./build.shtest_job:stage: testscript:- echo "Running tests"- ./test.shonly:- master
CD(持续交付/持续部署)配置
什么时候配置
- 项目准备上线阶段:在项目即将上线时配置CD,确保代码变更能够自动部署到生产环境或预生产环境。
- 开发和测试完成阶段:当开发和测试工作完成后,为代码配置CD,自动化部署流程。
- 迭代发布阶段:每次迭代发布新版本时,为该版本配置CD,确保发布过程的自动化和可靠性。
如何配置
- 选择CD工具:选择一个合适的CD工具(如Jenkins、GitLab CI、Spinnaker等),或者使用与CI工具集成的CD功能。
- 创建CD配置文件:根据选择的CD工具,创建相应的配置文件,定义部署步骤。
- 定义部署环境:配置部署环境,包括生产环境、预生产环境、测试环境等,确保环境的一致性。
- 编写部署脚本:编写自动化部署脚本,包括部署步骤、环境变量、配置文件等。
- 设置部署策略:定义部署策略,如滚动更新、蓝绿部署、金丝雀发布等,确保部署过程的平稳和可靠。
- 集成CI和CD流程:将CI和CD流程集成在一起,确保代码变更在通过构建和测试后能够自动部署到目标环境。
- 监控和回滚:配置部署后的监控,确保部署成功并及时发现问题,设置回滚机制以应对部署失败的情况。
具体实例
CD配置实例
- 选择工具:使用GitLab CI/CD。
- 创建配置文件:在项目根目录下创建.gitlab-ci.yml文件。
- 定义部署步骤:
stages:- build- test- deploybuild_job:stage: buildscript:- echo "Building the project"- ./build.shtest_job:stage: testscript:- echo "Running tests"- ./test.shonly:- masterdeploy_job:stage: deployscript:- echo "Deploying the project"- ./deploy.shonly:- master
通过以上配置,项目在每次代码提交时会自动进行构建和测试,通过测试后会自动部署到生产环境或预生产环境,确保代码变更能够快速、安全地上线。
CI/CD和DevOps的关系是什么
CI/CD(持续集成/持续交付)和DevOps是现代软件开发和运维中的两个关键概念,它们有着密切的关系,且相互补充,共同促进软件交付流程的优化和自动化。
CI/CD(持续集成/持续交付)
持续集成(CI)
- 定义:持续集成是一种软件开发实践,开发人员频繁地将代码变更集成到共享代码库,并通过自动化构建和测试来验证这些变更。
- 目标:及早发现和修复代码中的问题,确保代码库始终处于可构建和可测试的状态。
- 关键实践:
- 自动化构建和测试:每次代码提交后,自动执行构建和测试。
- 快速反馈:提供快速的构建和测试结果反馈,帮助开发人员及时修复问题。
- 频繁集成:鼓励开发人员频繁提交代码变更,减少集成冲突。
持续交付(CD)
- 定义:持续交付是一种软件工程方法,确保软件始终处于可发布的状态,通过自动化的方式将软件交付到生产环境。
- 目标:使软件可以随时发布,以响应市场和用户需求。
- 关键实践:
- 自动化部署:将软件自动部署到多个环境(开发、测试、生产)。
- 持续测试:在部署过程中进行自动化测试,确保软件质量。
- 可发布的构建:每个构建版本都可以作为候选版本发布到生产环境。
DevOps
定义
- DevOps是一种文化和实践,强调开发(Development)和运维(Operations)团队之间的协作和沟通,通过自动化和持续交付来提升软件开发和交付的效率和质量。
目标
- 加速交付:通过自动化和持续交付,缩短从代码提交到生产部署的时间。
- 提高质量:通过自动化测试和监控,提升软件质量和系统稳定性。
- 增强协作:通过共享目标和工具,促进开发和运维团队的协作。
关键实践
- CI/CD:持续集成和持续交付是DevOps实践的核心,通过自动化构建、测试和部署,实现持续交付。
- 基础设施即代码(IaC):使用代码管理和自动化配置基础设施,确保环境的一致性和可重复性。
- 监控和日志记录:对系统进行持续监控和日志分析,及时发现和解决问题。
- 文化和组织变革:推动团队之间的协作和沟通,打破传统的开发和运维之间的壁垒。
CI/CD和DevOps的关系
- CI/CD是DevOps的核心实践:CI/CD是DevOps实践的重要组成部分,通过自动化构建、测试和部署,实现持续交付和持续部署的目标。
- 自动化和持续改进:DevOps强调自动化和持续改进,CI/CD通过自动化的方式,确保代码的持续集成和交付,推动持续改进。
- 文化和工具的结合:DevOps不仅仅是工具和技术,更是一种文化,强调团队协作和沟通。CI/CD提供了具体的工具和技术,帮助实现这一文化的目标。
- 提升效率和质量:通过CI/CD,开发团队可以更快地发现和修复问题,提升代码质量和交付效率。这与DevOps的目标是一致的,都是为了提升软件交付的速度和质量。
总结
CI/CD和DevOps是相互关联和互补的。CI/CD提供了具体的实践和工具,通过自动化构建、测试和部署,实现持续交付和持续部署的目标。而DevOps则是一个更广泛的文化和实践框架,强调开发和运维团队之间的协作和沟通,推动组织变革和技术创新。两者结合起来,可以显著提升软件开发和交付的效率和质量。
系统的运维团队主要日常?
系统运维团队的主要日常工作包括以下几个方面:
1. 系统监控与报警
- 实时监控:使用监控工具(如Prometheus、Nagios、Zabbix等)实时监控服务器、应用程序、网络设备的状态和性能指标。
- 报警处理:配置报警规则,当系统指标(如CPU、内存、磁盘使用率等)超过阈值时,自动发送报警通知(如邮件、短信、聊天工具等),并及时处理报警。
2. 日常维护与管理
- 系统更新与补丁管理:定期检查并应用操作系统和软件的安全补丁,确保系统始终处于最新和安全的状态。
- 用户和权限管理:管理系统用户及其权限,确保只有授权人员可以访问和操作系统资源。
- 备份与恢复:定期进行数据备份,并制定和测试数据恢复计划,以确保在数据丢失或系统故障时能够快速恢复。
3. 性能优化
- 性能分析:定期分析系统性能,识别性能瓶颈和潜在问题。
- 优化调整:根据分析结果进行系统配置和资源分配的优化调整,提升系统性能和稳定性。
4. 安全管理
- 安全审计:定期进行安全审计,检查系统的安全配置和日志记录,发现并修复安全漏洞。
- 入侵检测:使用入侵检测系统(IDS)和防火墙,监控和防御潜在的安全威胁。
- 应急响应:制定并实施应急响应计划,处理安全事件,恢复系统的正常运行。
5. 自动化运维
- 自动化脚本:编写和维护自动化脚本(如Shell、Python等)来完成常见的运维任务,减少人为操作和错误。
- 配置管理工具:使用配置管理工具(如Ansible、Puppet、Chef等)实现大规模系统的自动化配置和管理。
- CI/CD管道:与开发团队协作,建立和维护CI/CD管道,实现代码的自动化构建、测试和部署。
6. 日志管理
- 日志收集与分析:收集和存储系统日志,使用日志分析工具(如ELK Stack)分析日志数据,发现潜在问题和异常行为。
- 日志归档:定期归档历史日志,确保日志数据的完整性和可追溯性。
7. 协作与沟通
- 与开发团队合作:与开发团队保持紧密沟通,了解应用程序的变更和需求,共同优化系统性能和稳定性。
- 用户支持与服务:为用户提供技术支持和服务,处理用户的故障报告和需求请求。
8. 文档和报告
- 文档编写:编写和维护系统运维文档,包括系统架构、配置文件、操作手册等,确保知识的共享和传承。
- 定期报告:定期向管理层提交系统运行状态和性能报告,汇报运维工作的进展和成果。
具体实例
-
监控和报警处理:
- 使用Prometheus监控服务器和应用程序的资源使用情况,配置Grafana仪表盘进行可视化展示。
- 配置报警规则,当CPU使用率超过80%时,自动发送报警邮件并触发处理脚本。
-
系统更新和补丁管理:
- 使用Ansible编写自动化脚本,定期检查并更新操作系统和应用程序的安全补丁,确保系统安全。
-
自动化运维:
- 使用Jenkins建立CI/CD管道,实现代码从提交到生产环境部署的全流程自动化,减少手动操作和错误。
通过这些日常工作,系统运维团队可以确保系统的稳定运行,提高系统的性能和安全性,快速响应和处理故障和用户需求,为业务的持续发展提供可靠的技术支持。
流水线和CI/CD的关系
流水线(Pipeline)
- 定义:流水线是指将软件开发、构建、测试、部署等一系列步骤自动化并串联起来,形成一个完整的流程。每个步骤都有明确的输入、输出和执行逻辑。
- 功能:流水线将代码从开发阶段自动推进到生产环境,确保每个步骤都按照预期顺利进行。
CI/CD(持续集成/持续交付)
- CI(持续集成):在代码库中频繁地集成开发人员的代码变更,并通过自动化构建和测试来验证这些变更,确保代码库始终处于可构建和可测试的状态。
- CD(持续交付):通过自动化部署过程,将经过验证的代码变更交付到生产环境,确保软件可以随时发布。
关系
- 实现手段:CI/CD通过流水线来实现。流水线是CI/CD的核心工具,通过流水线自动化管理代码提交后的构建、测试和部署过程。
- 自动化流程:流水线将CI/CD的各个步骤(如代码构建、测试、部署等)串联起来,形成一个自动化的工作流,减少人为干预,提高效率和可靠性。
流水线和PaaS平台的关系
PaaS平台(Platform as a Service)
- 定义:PaaS是一种云计算服务模式,提供平台级的服务,帮助开发者在云端进行开发、运行和管理应用程序,而无需管理底层的基础设施。
- 功能:PaaS平台提供各种开发工具、数据库、中间件、运行环境等,使开发者能够专注于应用程序的开发和部署。
流水线
- 作用:在PaaS平台上,流水线用来自动化管理应用程序的开发、测试、部署等过程。通过流水线,开发者可以轻松地将代码从开发环境推进到生产环境。
- 集成:PaaS平台通常内置CI/CD流水线功能或与CI/CD工具集成,帮助开发者实现持续集成和持续交付。
关系
- 自动化部署:PaaS平台通过流水线实现应用程序的自动化部署,从代码提交到生产环境的整个过程都可以在PaaS平台上完成。
- 环境一致性:流水线在PaaS平台上运行,确保开发、测试和生产环境的一致性,减少部署时的环境差异问题。
- 资源管理:PaaS平台提供的资源和服务(如数据库、中间件等)可以通过流水线自动化配置和管理,提高开发效率。
DevOps为什么能促进“开发(Development)和运维(Operations)团队之间的协作和沟通”
DevOps的理念
- 文化和实践:DevOps是一种文化和实践,强调通过自动化和协作来提升软件开发和交付的效率和质量。它不是单纯的工具或技术,而是一种团队协作和沟通的方式。
促进协作和沟通的原因
- 共享目标:DevOps将开发和运维团队的目标统一起来,共同关注软件的快速、高质量交付,而不是各自为政。通过共同的目标,促进团队之间的协作。
- 自动化工具:DevOps使用自动化工具(如CI/CD流水线、配置管理工具等)来减少手动操作和人为错误,提高工作效率。这些工具提供了透明的流程和清晰的反馈,帮助团队成员了解和协作。
- 持续反馈:通过自动化构建、测试和部署,开发团队可以快速获得反馈,及时发现和修复问题。运维团队也可以通过监控和日志分析,及时了解系统状态并反馈给开发团队。
- 跨职能团队:DevOps强调跨职能团队的建设,开发和运维人员共同参与到项目的各个阶段,从需求分析到部署和运维,共享知识和技能,提高协作效率。
- 持续改进:DevOps倡导持续改进,通过持续的反馈和调整,优化开发和运维流程,促进团队之间的沟通和协作。
具体实例
-
共享目标:
- 开发和运维团队共同负责一个项目的交付,开发团队负责编写代码,运维团队负责部署和监控,双方都对项目的成功交付负责。
-
自动化工具:
- 使用Jenkins建立CI/CD流水线,自动化构建、测试和部署过程,减少手动操作,提供透明的流程和清晰的反馈。
-
持续反馈:
- 通过自动化测试,在代码提交后立即运行测试并反馈结果,开发人员可以及时修复问题,运维团队可以通过监控工具及时发现系统异常并反馈给开发团队。
-
跨职能团队:
- 建立一个包含开发和运维人员的跨职能团队,定期举行沟通会议,共同讨论项目进展、问题和改进方案,促进知识共享和技能提升。
-
持续改进:
- 定期回顾和总结项目的开发和运维流程,发现问题和改进点,持续优化流程,提高团队协作效率。
通过这些实践,DevOps能够有效促进开发和运维团队之间的协作和沟通,提升软件开发和交付的效率和质量。
相关文章:

大厂开发必知必会:Devops、CI/CD、流水线和Paas的关系解析说明
为什么作为程序开发人员需要了解ci/cd流程和原理? 作为程序开发人员,了解CI/CD(持续集成/持续交付)的流程和原理具有以下几个重要的理由: 1. 提高代码质量和稳定性 自动化测试:CI/CD流程中集成了自动化测…...

Qt学习:Qt窗口组件以及窗口类型
一、Qt的窗口组件有哪些 Qt是一个跨平台的C应用程序开发框架,它的窗口组件,也称为用户界面元素,为开发者提供了丰富的可视化界面设计选项。在Qt中,窗口组件主要包括: 窗口(Window):…...

基于AGX ORIN与FPGA K7实现PCIE高速数据通信/Orin与FPGA高速数据传输/XDMA在linux系统使用教程
因最近想学习AGX orin和FPGA实现数据高速通信,借此机会和大家一起学习AGX orin和FPGA 制作不易,记得三连哦,给我动力,持续更新!!! 完整工程文件下载:AGX orin与FPGA实现PCIE完整…...

Vue3:全局播放背景音乐
说明:一个全局播放的背景音乐,首页无音乐无音乐图标,在首页互动跳转页面并开始播放音乐,切换页面不需暂停音乐也不会重置音乐,可以通过音乐图标控制暂停或播放。 MusicPlay.vue(音乐组件) <…...

2024年07月03日 Redis部署方式和持久化
Redis持久化方式:RDB和AOF,和混合式 RDB:周期备份模式,每隔一段时间备份一份快照文件,从主线程Fork一个备份线程出来备份,缺点是会造成数据的丢失。 AOF:日志模式,每条命令都以操作…...

成都仅需浏览器即可快速查看的数据采集监控平台!
LP-SCADA数据采集监控平台无需额外客户端,只需要一个标准的Web浏览器,用户可以迅速访问系统并开始使用,同时支持跨平台访问。一个用户可监控多个过程,多个用户可以监控同一过程,真正实现了数据的开放性及过程信号的透明…...

LLM - 神经网络的训练过程
1. 对于回归问题,用损失函数来计算预测值和真实值的差异,一种常用的公式是如下图所示(Mean Square Error),如果损失函数的值越小说明神经网络学习越准确,所以神经网络训练目标是减小损失函数的值, 2. 对于分类问题&…...

【全网最全ABC三题完整版】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文
我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…...

Python | Leetcode Python题解之第213题打家劫舍II
题目: 题解: class Solution:def rob(self, nums: List[int]) -> int:def robRange(start: int, end: int) -> int:first nums[start]second max(nums[start], nums[start 1])for i in range(start 2, end 1):first, second second, max(fi…...

揭秘数据之美:【Seaborn】在现代【数学建模】中的革命性应用
目录 已知数据集 tips 生成数据集并保存为CSV文件 数据预览: 导入和预览数据 步骤1:绘制散点图(Scatter Plot) 步骤2:添加回归线(Regression Analysis) 步骤3:分类变量分析&…...

【宠粉赠书】UML 2.5基础、建模与设计实践
为了回馈粉丝们的厚爱,今天小智给大家送上一套系统建模学习的必备书籍——《UML 2.5基础、建模与设计实践》。下面我会详细给大家介绍这本书,文末留有领取方式。 图书介绍 《UML 2.5基础、建模与设计实践》以实战为主旨,结合draw.io免费软件…...

Python中几个重要的集合
Python中几个重要的集合(Collection)类型,包括列表(List)、元组(Tuple)、集合(Set)和字典(Dictionary) 1. 列表(List) 说…...

【JS】纯web端使用ffmpeg实现的视频编辑器-视频合并
纯前端实现的视频合并 接上篇ffmpeg文章 【JS】纯web端使用ffmpeg实现的视频编辑器 这次主要添加了一个函数,实现了视频合并的操作。 static mergeArgs(timelineList) {const cmd []console.log(时间轴数据,timelineList)console.log("文件1",this.readD…...

解决Python用xpath爬取不到数据的一个思路
前言 最近在学习Python爬虫的知识,既然眼睛会了难免忍不住要实践一把。 不废话直接上主题 代码不复杂,简单的例子奉上: import requests from lxml import etreecookie 浏览器F12网络请求标头里有 user_agent 浏览器F12网络请求标头里有…...

C#面:如何把一个array复制到arrayist里
要将一个数组复制到ArrayList中,可以使用ArrayList的AddRange方法。以下是一个示例代码: int[] array { 1, 2, 3, 4, 5 }; ArrayList arrayList new ArrayList(); arrayList.AddRange(array); 在上面的代码中,我们首先创建了一个整数类型…...

解决前后端同一个端口跨域问题
前端起了一个代理 如果url是api开头的自动代理访问8080端口(解决前后端端口不一致要么是前端代理,要么是后端加过滤器) proxy:{/api:{target:http://localhost:8080,changeOrigin : true,// 替换去掉路径上的api// rewrite:(path)>path.r…...

《C语言》认识数据类型和理解变量
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:C语言基础 目录 前言 一、数据类型的介绍 1.1 字符型 1.2 整形 1.3 浮点型 1.4 布尔类型 1.5 各种数据类型的长度 1.5.1 sizeof操作符 1.5.2 数据类型长度…...

【ARM 常见汇编指令学习 7.1 -- LDRH 半字读取指令】
请阅读【嵌入式开发学习必备专栏】 文章目录 LDRH 使用介绍LDRH(Load Register Half-word)总结 LDRH 使用介绍 在ARMv9架构中,汇编指令LDRH用于从内存中载入数据到寄存器的指令,下面将分别对它进行详细介绍: LDRH&am…...

C++期末整理
课堂笔记 构造与析构 #include <iosteam> #include <cstring> using namespace std;struct Date {int y, m, d;void setDate(int, int, int);Date(int yy, int mm, int dd) {y yy, m mm, d dd;} };class Student { private:char* name;Date birthday; public:…...

技术派Spring事件监听机制及原理
Spring事件监听机制是Spring框架中的一种重要技术,允许组件之间进行松耦合通信。通过使用事件监听机制,应用程序的各个组件可以在其他组件不直接引用的情况下,相互发送和接受消息。 需求 在技术派中有这样一个需求,当发布文章或…...

秋招突击——设计模式补充——简单工厂模式和策略模式
文章目录 引言正文简单工厂模式策略模式策略模式和工厂模式的结合策略模式解析 总结 引言 一个一个来吧,面试腾讯的时候,问了我单例模式相关的东西,自己这方面的东西,还没有看过。这里需要需要补充一下。但是设计模式有很多&…...

SwiftUI中List的liststyle样式及使用详解添加、移动、删除、自定义滑动
SwiftUI中的List可是个好东西,它用于显示可滚动列表的视图容器,类似于UITableView。在List中可以显示静态或动态的数据,并支持垂直滚动。List是一个数据驱动的视图,当数据发生变化时,列表会自动更新。针对List…...

PostgreSQL的系统视图pg_stats
PostgreSQL的系统视图pg_stats pg_stats 是 PostgreSQL 提供的一种系统视图,用于展示当前数据库中的统计信息。这些统计信息由数据库内部的自动统计过程通过 ANALYZE 命令收集,它们帮助查询规划器做出更好的执行决策,从而优化查询性能。 pg…...

UML2.0-系统架构师(二十四)
1、(重点)系统()在规定时间内和规定条件下能有效实现规定功能的能力。它不仅取决于规定的使用条件等因素,还与设计技术有关。 A可靠性 B可用性 C可测试性 D可理解性 解析: 可靠性:规定时间…...

leetcode 152. 乘积最大子数组「贪心」「动态规划」
152. 乘积最大子数组 题目描述: 给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组,并返回该子数组所对应的乘积 思路1:贪心 由于 n u m s [ i ] nums[i] nums[i]都是整数,所以多乘一些数肯定不会让绝…...

Android项目目录结构
Android项目目录结构 1. 顶层目录2. 重要的顶层文件和目录3. app模块目录结构4. 重要的**app**模块文件和目录5. 典型的 **build.gradle** 文件内容 典型的Android项目结构的详细介绍。 1. 顶层目录 MyAndroidApp/ ├── .gradle/ ├── .idea/ ├── app/ ├── build/ ├…...

网络安全--计算机网络安全概述
文章目录 网络信息系统安全的目标网络安全的分支举例P2DR模型信息安全模型访问控制的分类多级安全模型 网络信息系统安全的目标 保密性 保证用户信息的保密性,对于非公开的信息,用户无法访问并且无法进行非授权访问,举例子就是:防…...

用requirements.txt配置环境
1. 在anaconda创建环境 创建Python版本为3.8的环境,与yolov5所需的包适配。 2. 在Anaconda Prompt中激活环境 (base) C:\Users\吴伊晴>conda activate yolov5 3. 配置环境 用指定路径中的requirements.txt配置环境。 (yolov5) C:\Users\吴伊晴>pip insta…...

APP渗透-android12夜神模拟器+Burpsuite实现
一、夜神模拟器下载地址:https://www.yeshen.com/ 二、使用openssl转换证书格式 1、首先导出bp证书 2、将cacert.der证书在kali中转换 使用openssl生成pem格式证书,并授予最高权限 openssl x509 -inform der -in cacert.der -out cacert.pem chmod 777 cacert…...

源码扭蛋机开发初探
在软件开发的世界里,创新总是层出不穷。今天,我们将一起探讨一个有趣而富有创意的项目——源码扭蛋机。源码扭蛋机,顾名思义,就是将传统的扭蛋机概念与代码编程相结合,让开发者们在扭动的过程中随机获得各种有趣的、实…...