DevOps:CI、CD、CB、CT、CD
目录
一、软件开发流程演化快速回顾
(一)瀑布模型
(二)原型模型
(三)螺旋模型
(四)增量模型
(五)敏捷开发
(六)DevOps
二、走近DevOps(Development 开发,Operations 运维)
(一)开发全流程周期
(二) DevOps与传统开发方式区别
(三)DevOps 具体落地
(四)DevOps流程简述
三、CI(Continuous Integration,持续集成)
四、CD(Continuous Delivery,持续交付)
五、持续构建(Continuous Build,CB)
六、持续测试(Continuous Testing,CT)
七、持续部署(Continuous Deployment,CD)
一、软件开发流程演化快速回顾
在软件开发流程的演化过程中,我们可以观察到一系列方法的逐步发展和改进。其基本时间线总结如下:
软件开发流程的演化过程、各个阶段的特点和分析可以整合成下表直观来看:
时间线 | 软件开发流程 | 特点与分析 |
---|---|---|
20世纪70年代中期 | 瀑布模型 | - 最早的软件开发方法之一,将开发过程划分为线性阶段。 - 缺乏灵活性,难以应对需求变化。 |
20世纪70年代晚期 | 原型模型 | - 引入快速原型开发的概念,旨在更早地发现和解决问题。 - 提高了与用户交互和验证需求的效率。 |
1988年 | 螺旋模型 | - 将软件开发过程视为一个不断循环的过程,注重风险管理和迭代开发。 - 提高了开发过程的灵活性和适应性。 |
90年代初期 | 增量模型 | - 将开发过程划分为多个增量,每个增量都包括完整的开发周期。 - 逐步完成系统开发,增强了灵活性和用户满意度。 |
1990年代末期至2000年初期 | 敏捷开发 | - 强调快速响应变化、灵活性和客户满意度。 - 通过迭代、自组织和持续改进,提高了软件交付的效率和质量。 |
2009年左右 | DevOps | - 结合了开发和运维的文化和实践,通过持续开发、持续测试、持续集成等实践加快了软件交付速度,提高了软件质量。 - 强调开发团队和运维团队之间的协作和整合。 |
(一)瀑布模型
瀑布模型是一种顺序执行的软件开发方法,最早由温斯顿·罗伊斯在1970年提出。它将软件开发过程划分为一系列线性阶段,包括制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动。这些阶段按照固定的次序依次执行,前一个阶段的输出作为下一个阶段的输入,如同瀑布流水逐级下落,因此得名。
瀑布模型严格强调文档化,每个阶段都有相应的文档输出,例如需求文档、设计文档、测试文档等。其优点在于结构清晰、易于管理和控制,有利于项目进度的把控。然而,瀑布模型的缺点也显而易见,包括缺乏灵活性、难以适应需求变化和市场变化、开发周期较长、只有在开发后期才能看到软件“模样”等。另外,严格的阶段顺序和文档化也可能导致开发人员感觉过多地花费在编写文档上,而不是真正的软件开发工作上。
总的来说,瀑布模型强调了阶段的顺序性和文档化,适用于一些对需求变化要求不高、对项目进度和成本控制要求较高的项目。但在需求变化频繁、市场变化快速的情况下,瀑布模型可能显得束缚和不适应。
(二)原型模型
原型模型是一种软件开发方法,其基本思想是在开发真实系统之前,先构造一个原型,然后逐步完成整个系统的开发工作。在需求分析阶段很难得到完全、一致、准确、合理的需求说明,因此快速原型模型利用原型辅助软件开发,通过快速实现一个原型来加强用户与开发者之间的通信与反馈。通过反复评价和改进原型,减少误解,弥补漏洞,适应变化,最终提高软件质量。
原型模型的优点在于它允许快速建立原型系统,并通过与用户交互和反馈来验证和修正需求,从而减少后续阶段的返工。同时,通过建立原型系统,开发人员可以提前学习到许多关于系统的信息,从而减少后续阶段的错误。此外,原型模型加强了用户与开发者之间的通信与反馈,有助于提高软件质量。
然而,原型模型也存在一些缺点。快速建立的系统结构加上连续的修改可能会导致产品质量低下,特别是对于大型系统的开发可能不适用。此外,选择原型时可能会限制开发人员的创新,因为所选用的原型不一定符合主流的发展。最后,原型模型是不带反馈环的,软件产品的开发基本上是按线性顺序进行的。
(三)螺旋模型
螺旋模型是由巴利·玻姆(Barry Boehm)于1988年提出的软件开发方法。
螺旋模型的优点在于它结合了瀑布模型和快速原型方法的优点,强调了风险管理和迭代开发。通过周期性的迭代,团队可以逐步构建系统,并在每个周期中进行风险分析和评审,提前发现和解决问题。这种灵活性和适应性使得螺旋模型尤其适用于大型复杂系统的开发,尤其是当项目需求不明确或变化频繁时。另外,螺旋模型的风险分析机制允许团队在无法排除重大风险时有机会停止开发,以减小潜在损失。
然而,螺旋模型的缺点包括可能较长的开发周期和对较高技术和管理水平的要求。此外,对风险分析的准确性和有效性要求较高,难以在一些简单或小规模的项目中合理应用。
(四)增量模型
增量模型是一种软件开发方法,将产品分解为多个组件,并在日程时间的推进中交错线性序列,每个序列生成一个可发布的“增量”。每个增量都通过需求、设计、编码和测试阶段,然后逐步并入已有的软件体系结构中。增量模型强调每个增量都发布一个可操作的产品,客户对每个增量的使用和评估都指导下一个增量的开发。该模型灵活管理技术风险,每次迭代后执行回归测试,容易识别和修复故障,客户可以根据每个增量的功能变化进行反馈。
增量模型的优点在于它灵活地管理技术风险,允许灵活的人员分配和计划管理。每次迭代后执行回归测试,有助于快速识别和修复故障。客户可以根据每个增量的功能变化进行反馈,从而提高产品的灵活性和用户满意度。
然而,增量模型也存在一些缺点。由于构件逐步并入现有系统中,需要开放式的软件体系结构,并且可能会退化为边做边改模型,导致软件过程失去整体性。如果增量包之间存在相交情况且未很好处理,则需要做全盘系统分析。此外,增量产生的成本可能超过组织的成本,且随着产品增加功能可能会出现与系统体系结构相关的问题。
(五)敏捷开发
敏捷开发是一种软件开发方法,其基本思想是通过小规模的迭代开发和持续交付来满足不断变化的需求。敏捷开发强调团队合作、快速反应和灵活性,以更好地应对不确定性和变化。其核心原则包括个体和交互、工作的软件、客户合作、响应变化等。
敏捷开发的优点在于它强调灵活应对变化,通过小规模的迭代开发和持续交付,能够快速响应客户需求,提高产品的竞争力和客户满意度。同时,敏捷开发也促进了团队合作和沟通,增强了团队的凝聚力和工作效率。
然而,敏捷开发也存在一些挑战。它要求团队具备高度的技术和管理水平,需要团队成员之间密切的合作和沟通,如果团队协作不够密切,可能会影响项目的进展和质量。此外,敏捷开发也需要客户的积极参与和支持,如果客户参与度不高或者需求不明确,可能会导致项目进展缓慢或者质量下降。
(六)DevOps
DevOps是一种软件开发和运维的文化和方法论,其基本思想是通过促进开发团队和运维团队之间的协作和沟通,实现软件开发、测试、部署和运维的自动化和持续化。它强调了团队之间的合作和文化变革,以及使用工具和技术来实现持续交付和持续集成。
DevOps的优点在于它通过促进团队合作和自动化流程,加速了软件交付速度,提高了软件质量和稳定性,并降低了软件发布的风险。同时,它还增强了团队之间的协作和凝聚力,有助于提高团队的工作效率和生产力。
然而,DevOps也面临一些挑战。首先,实施DevOps需要进行文化变革和团队协作,这可能会遇到组织结构和文化的阻力。其次,引入DevOps可能需要投入一定的人力资源和资金成本,特别是在初始阶段可能会增加一些开发和运维成本。最后,DevOps的实施还涉及使用各种工具和技术来实现自动化和持续化,这可能会增加技术复杂性和学习成本。
二、走近DevOps(Development 开发,Operations 运维)
(一)开发全流程周期
在软件开发领域,开发全流程周期是指将一个软件产品从概念到最终交付的完整过程。这个过程通常包括需求分析、设计、开发、构建、测试、部署与发布以及运维与维护等阶段。
下面是一个以表格方式分析和讲解软件开发全流程周期,包括各阶段的主要活动、产物和相关工具/技术的示例:
阶段 | 主要活动 | 产物 | 示例工具/技术 |
---|---|---|---|
需求分析阶段 | 收集和分析用户需求 | 需求规格文档 | 会议记录、用户故事板、调查问卷、原型工具(如Axure、Mockplus) |
设计阶段 | 设计软件系统的架构、模块、界面等 | 系统架构设计文档、界面设计稿、数据库设计文档 | UML、流程图、数据库建模工具(如MySQL Workbench) |
开发阶段 | 编写代码,实现软件的功能和特性 | 源代码、可执行程序 | 编程语言(如Java、Python、JavaScript)、集成开发环境(IDE) |
构建阶段 | 编译、打包、部署代码到测试环境或其他目标环境 | 可执行程序、部署包 | 构建工具(如Maven、Gradle)、持续集成工具(如Jenkins) |
测试阶段 | 测试和调试软件,发现并修复错误和缺陷 | 测试报告、缺陷报告 | 自动化测试工具(如Selenium、JUnit)、缺陷管理工具(如JIRA) |
部署与发布阶段 | 将软件部署到目标环境,并向用户发布 | 部署包、发布说明文档 | 容器化技术(如Docker、Kubernetes)、部署工具(如Ansible) |
运维与维护阶段 | 持续监控和维护软件,及时处理用户反馈和问题 | 日志记录、用户反馈报告 | 监控工具(如Prometheus、Grafana)、日志管理工具(如ELK Stack) |
(二) DevOps与传统开发方式区别
通过上面的整体回顾和全观开发全流程周期,应该可以看到:传统的开发方式往往是线性的,各个阶段之间存在明显的边界,开发与运维之间存在隔阂,导致沟通效率低下。
相比之下,DevOps使开发与运维的流程形成了一个闭环。它打破了传统开发中的隔阂,通过自动化和持续集成的方式,使得开发团队和运维团队更加紧密地协作,从而提高了协作效率和软件交付速度。
(三)DevOps 具体落地
要使DevOps理念真正落地,确实需要团队文化、流程和工具的全面支持和配合。
-
团队文化: 成员需要理解并认可DevOps的核心理念,包括持续改进、自动化、协作和共享责任等。团队应该鼓励开放的沟通和合作,以及对失败的接纳和学习。
-
流程: 确定适合团队和项目的DevOps流程。这可能包括持续集成、持续交付、持续部署、持续监控等。流程应该是自动化的、可重复的,并且能够快速响应变化和需求。
-
工具: 选择合适的工具来支持DevOps流程。这些工具可能包括版本控制系统(如Git)、持续集成工具(如Jenkins)、配置管理工具(如Ansible)、容器化平台(如Docker、Kubernetes)以及监控和日志管理工具等。
通过团队文化的培育、流程的设计和工具的选择,团队可以更好地实现DevOps理念,提高软件交付的效率和质量,从而实现持续创新和业务价值的快速实现。
(四)DevOps流程简述
-
持续集成(Continuous Integration,CI): 持续集成是一种软件开发实践,通过频繁地将代码集成到共享存储库中,并自动进行构建和测试,以确保团队能够快速发现和解决集成问题。
-
持续交付(Continuous Delivery,CD): 持续交付是一种软件交付实践,通过自动化和持续的流程,使团队能够随时交付高质量的软件到生产环境,但仍需要人工审查和确认。
-
持续构建(Continuous Build,CB): 持续构建是持续集成的一部分,指的是持续地自动构建软件,并生成可执行的程序或部署包,以便进行进一步的测试和部署。
-
持续测试(Continuous Testing,CT): 持续测试是一种软件测试实践,通过自动化测试和持续集成的方式,持续地对软件进行测试,以确保软件质量和稳定性。
-
持续部署(Continuous Deployment,CD): 持续部署是一种软件部署实践,通过自动化流程将经过测试的软件自动部署到生产环境,以实现快速且可靠的软件发布
三、CI(Continuous Integration,持续集成)
持续集成确实是软件开发周期中的一种实践,其主要目的是确保团队能够频繁地将代码合并到主干分支,并自动进行构建和测试。通过集成代码仓库、构建工具和测试工具,团队可以在代码发生变化时自动触发构建和测试流程,以及执行后续的自定义动作。这种频繁地将所有开发者的工作合并到主干上的做法,有助于尽早地发现和解决集成问题,从而提高软件质量和团队的开发效率。
简化的含义为:持续集成意味着将开发人员的代码更频繁地集成到共享代码仓库中,以确保团队的代码始终处于一个可集成的状态,进而促进更快速地软件交付和更高质量的软件产品。
持续集成的流程通常分为三个步骤:
- 开发人员提交代码到源代码仓库(Source Repository)。
- CI服务器(持续集成服务器)通过触发机制(如git hook)执行编译、测试以及输出结果等相关功能。
- CI服务器向开发人员反馈执行结果的报告。
持续集成的核心目标是确保新增的代码能够与原有代码正确地集成。与后续的持续交付和持续部署相比,其最主要的差别在于目标的不同。
持续集成的优势包括:
- 易于定位错误:频繁的代码集成将复杂的代码逻辑切割成小块,有助于更容易地定位和解决问题。
- 易于控制开发流程:细致的工作提交使得工作进度更容易判断,有助于管理者规划开发流程。
- 易于CodeReview:代码切分为小块有助于进行代码审查。
- 易于减少不必要的工作:自动化的构建和测试过程可以节约大量时间,使开发人员能够将更多时间投入到有价值的工作中。
四、CD(Continuous Delivery,持续交付)
持续交付是在持续集成的基础上进行了扩展,主要是在持续集成环节完成了软件构建和测试工作后,形成了新的版本,接下来将进行交付。与持续集成不同的是,持续交付的交付对象不是代码,而是可交付的产物,通常是部署到类生产环境(如灰度环境或预发环境)进行测试。
简化的含义是通过一种能够使得软件在较短的循环中可靠地发布的软件工程方法。与持续集成相比,持续交付的侧重点在于实现软件的可交付性,而不仅仅是代码的集成和测试。持续交付通常涉及一些额外的流程,例如部署到类生产环境进行测试、进行灰度测试等,以确保软件能够可靠地发布到生产环境中。
持续交付相比持续集成添加了Test -> Staging -> Production的流程,以确保新增的代码在生产环境中是可用的。
- Test环节不仅包含基本的单元测试,还需要进行更为复杂的功能测试和集成测试等,以确保代码的功能和集成性能。
- Staging阶段指的是类生产环境,模拟真实的网络拓扑、数据库数据和硬件设备等资源,测试代码在生产环境中的表现。
- 每个阶段的执行结果都会向开发人员提供反馈,每个错误都可能导致版本的回滚。一旦测试完成并确认无误,相关人员将手动将其部署到生产环境中。
通过这样的流程,可以确保新增的代码在经过全面的测试和验证后才会部署到生产环境中,从而降低了潜在的生产环境风险,提高了软件的稳定性和可靠性。
五、持续构建(Continuous Build,CB)
持续构建(Continuous Build,CB)是DevOps流程中的一个重要环节,它通常是持续集成和持续交付流程的一部分。持续构建的主要目的是自动化地构建软件项目,并生成可执行的软件包或部署文件。
持续构建的基本思想是将代码提交到源代码仓库后,立即触发构建过程。这包括编译源代码、执行单元测试、生成部署文件等。持续构建的频繁执行有助于尽早地发现代码中的错误和问题,并及时反馈给开发团队。
持续构建的核心优势包括:
- 自动化:持续构建过程完全自动化,无需人工干预,提高了构建的效率和可靠性。
- 及时反馈:持续构建能够在代码提交后立即触发,及时反馈构建结果和错误信息,有助于开发人员及时修复问题。
- 提高软件质量:通过频繁地构建和测试,持续构建有助于提高软件的质量和稳定性,减少潜在的问题和缺陷。
- 加快交付速度:持续构建能够快速生成可部署的软件包或部署文件,加快了软件交付的速度,有利于快速响应用户需求。
通过自动化地构建和测试软件,有助于提高软件开发的效率、质量和交付速度。
六、持续测试(Continuous Testing,CT)
持续测试(Continuous Testing,CT)是DevOps流程中的一个关键环节,它旨在通过持续地进行自动化测试来确保软件质量和稳定性。
持续测试与传统的软件测试方式不同,它不仅限于在开发完成后执行一次测试,而是在整个软件开发周期中持续进行测试。具体来说,持续测试通常包括以下几个方面:
-
自动化测试:持续测试依赖于自动化测试工具和脚本,通过编写自动化测试用例和脚本来模拟用户操作、执行功能和性能测试等,以确保软件的功能和性能符合预期。
-
并行测试:持续测试需要在短时间内完成大量测试,因此通常会采用并行测试的方式,同时运行多个测试用例,提高测试效率。
-
持续反馈:持续测试会及时将测试结果反馈给开发团队,包括测试通过的用例、失败的用例以及错误信息等,以便开发人员及时修复问题。
-
自动化部署测试环境:持续测试还可以借助自动化部署工具,在需要时自动部署测试环境,并在其中执行测试,从而确保测试环境的一致性和可重复性。
七、持续部署(Continuous Deployment,CD)
持续部署(Continuous Deployment,CD)是DevOps流程中的一环,它建立在持续交付的基础之上,旨在将软件的部署过程自动化,以便将新的软件功能频繁地交付到生产环境中。
持续部署的主要特点包括:
-
自动化部署:持续部署通过自动化工具和流程,将新的软件功能自动部署到生产环境中,消除了手动部署过程中的人为错误和延迟。
-
频繁交付:持续部署强调频繁地交付新的软件功能到生产环境中,从而加速了软件开发和交付的速度,提高了团队的反应能力和灵活性。
-
实时监控:持续部署过程中通常会包括实时监控和反馈机制,以确保部署的软件功能在生产环境中稳定运行,及时发现并解决潜在的问题。
-
版本控制:持续部署依赖于版本控制系统和自动化工具,确保部署的软件版本与代码仓库中的代码保持一致,减少了版本管理和部署的复杂性。
持续集成(Continuous Integration,CI)与持续交付(Continuous Delivery,CD)之间的区别在于其对生产环境的自动化程度。
持续集成是指开发人员将代码提交到代码仓库后,自动触发构建、测试等过程,但并不自动将代码部署到生产环境。持续集成的主要目的是确保团队成员的代码能够及时集成,并通过自动化的测试流程进行验证,从而尽早地发现和解决潜在的集成问题。
持续交付则更进一步,除了包含持续集成的流程外,还将代码自动部署到类生产环境(例如预发布环境或灰度环境),以便进行进一步的测试和验证。持续交付的目标是确保团队能够随时准备好将代码部署到生产环境,但仍然需要人工的干预来决定何时进行实际的生产部署。
因此,持续交付相比持续集成,更加强调自动化部署和测试的全流程,以确保新的功能能够及时交付到类生产环境,但仍然保留了人工决策的环节,以便进行最终的生产部署。
一些其他的阅读和参考:
软件开发流程进化史:从瀑布、敏捷到DevOps_的开发_阶段_测试
一文读懂软件开发流程的演变过程 - 知乎
软件测试笔记-软件开发流程的演变_软件开发 流程演变历史-CSDN博客
传统模式 - 软件开发生命周期与过程模型(瀑布模型,原型模型和螺旋模型等) | Java 全栈知识体系
开发模型的理解:瀑布模型/增量式/迭代/敏捷开发——笔记-腾讯云开发者社区-腾讯云
敏捷开发入门教程 - 阮一峰的网络日志
敏捷开发流程的8个步骤是什么
敏捷开发 - 敏捷软件开发理论及流程 | Java 全栈知识体系
敏捷开发的简介及迭代排期的最佳实践_云效(Apsara Devops)-阿里云帮助中心
敏捷与 DevOps - 软件开发实践之间的区别 - AWS
DevOps(过程、方法与系统的统称)_百度百科
DevOps工具链-CSDN博客
认识devops那点事(思维导图,流程大图,工具链)_devops流程图-CSDN博客
https://blog.51cto.com/u_13544/6969630
相关文章:

DevOps:CI、CD、CB、CT、CD
目录 一、软件开发流程演化快速回顾 (一)瀑布模型 (二)原型模型 (三)螺旋模型 (四)增量模型 (五)敏捷开发 (六)DevOps 二、走…...
[leetcode经典算法题]删除有序数组中的重复项(双指针)
删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素…...
【国产MCU】-CH32V307-触摸按键检测(TKEY)
触摸按键检测(TKEY) 文章目录 触摸按键检测(TKEY)1、TKEY介绍2、TKEY使用实例触摸检测控制(TKEY)单元,借助ADC 模块的电压转换功能,通过将电容量转换为电压量进行采样,实现触摸按键检测功能。检测通道复用ADC 的16 个外部通道,通过ADC 模块的单次转换模式实现触摸按键…...

Hive的小文件问题
目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一:insert overwrite (推荐) 3.2.2 方式二:concatenate 3.2.3 方式三ÿ…...

攻防世界——re2-cpp-is-awesome
64位 我先用虚拟机跑了一下这个程序,结果输出一串字符串flag ——没用 IDA打开后 F5也没有什么可看的 那我们就F12查看字符串找可疑信息 这里一下就看见了 __int64 __fastcall main(int a1, char **a2, char **a3) {char *v3; // rbx__int64 v4; // rax__int64 v…...

问山海——天涯海角——桃花渊boss攻击顺序
文章目录 桃花渊代码代码解读代码执行结果攻击顺序示意图 桃花渊 规划击杀各个boss顺序。 副本持续时间为30分钟,每个地方的boss被打死后,需要一定时间才能重新刷新。 只考虑其中两种boss,龟将和龟龙。各有四个。 其中我从一个boss地点到…...

springboot181基于springboot的乐享田园系统
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...
Dubbo集成Zookeeper embbed模式
为了简化应用支持服务方便的分合,使用Zookeeper embbed模式。集成Zookeeper比较容易,使用starter或自己写代码都可以。但是由于集成了Dubbo,每次启动时都会发现zookeeper没有启动就开始报错退出,但是确是已经集成了。 于是只能翻…...

156基于Matlab的光纤陀螺随机噪声和信号
基于Matlab的光纤陀螺随机噪声和信号,利用固定步长和可调步长的LMS自适应滤波、最小二乘法、滑动均值三种方法进行降噪处理,最后用阿兰方差评价降噪效果。程序已调通,可直接运行。 156 信号处理 自适应滤波 降噪效果评估 (xiaohongshu.com)...

秋招上岸大厂,分享一下经验
文章目录 秋招过程学习过程项目经验简历经验面试经验offer选择总结 秋招过程 今天是除夕,秋招已经正式结束了,等春节过完就到了春招的时间点了。 运气比较好,能在秋招的末尾进入一家大厂,拿到20k的sp offer。 从九月份十月份就开…...
使用 C++23 从零实现 RISC-V 模拟器
👉🏻 文章汇总「从零实现模拟器、操作系统、数据库、编译器…」:https://okaitserrj.feishu.cn/docx/R4tCdkEbsoFGnuxbho4cgW2Yntc 使用 C23 从零实现 RISC-V 模拟器 使用 C23 从零实现的 RISC-V 模拟器,最终的模拟器可以运行 x…...

Hugging Face 刚刚推出了一款开源的 AI 助手制造工具,直接向 OpenAI 的定制 GPT 挑战
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
powershell 雅地关闭UDP监听器
在PowerShell中优雅地关闭UDP监听器意味着你需要一种机制来安全地停止正在运行的UdpClient实例。由于UdpClient类本身没有提供直接的停止或关闭方法,你需要通过其他方式来实现这一点。通常,这涉及到在监听循环中添加一个检查点,以便在接收到停…...

Google Cloud 2024 年报告重点介绍了关键的网络威胁和防御
Google Cloud 的 2024 年威胁范围报告预测了云安全的主要风险,并提出了加强防御的策略。 该报告由 Google 安全专家撰写,为寻求预测和应对不断变化的网络安全威胁的云客户提供了宝贵的资源。 该报告强调,凭证滥用、加密货币挖矿、勒索软件和…...
【算法题】102. 二叉树的层序遍历
题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2:…...

【龙年大礼】| 2023中国开源年度报告!
【中国开源年度报告】由开源社从 2015 年发起,是国内首个结合多个开源社区、高校、媒体、风投、企业与个人,以纯志愿、非营利的理念和开源社区协作的模式,携手共创完成的开源研究报告。后来由于一些因素暂停,在 2018 年重启了这个…...

本地搭建three.js官方文档
因为three.js官网文档是国外的网站,所以你没有魔法的情况下打开会很慢,这时我们需要在本地搭建一个官方文档便于我们学习查看。 第一步:首先我们先访问GitHub地址 GitHub - mrdoob/three.js: JavaScript 3D Library. 下载不下来的小伙伴们私…...
【seata自动化治愈数据库问题解决方案】
wu-database-lazy-seata-cure-plus-starter 描述 针对saas 数据库隔离情况下,每次版本迭代都需要重新修改对应的数据库,对于升级与运维存在一定的难度,那么这个数据库治愈框架来了,使用场景如下 1.数据库不存在自动创建数据库 …...

Node.js之npm单独与批量升级依赖包的方式
Node.js之npm单独与批量升级依赖包的方式 文章目录 Node.js之npm单独与批量升级依赖包的方式npm查看与升级依赖包1. 单独安装或升级最新版本2. 查看依赖但不升级1. npm outdated2. npm update 3. 批量升级新版本4. npm-check-updates1. 全局安装2. ncu查看可升级的版本3. 升级依…...
66.加一
66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入ÿ…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
后端下载限速(redis记录实时并发,bucket4j动态限速)
✅ 使用 Redis 记录 所有用户的实时并发下载数✅ 使用 Bucket4j 实现 全局下载速率限制(动态)✅ 支持 动态调整限速策略✅ 下载接口安全、稳定、可监控 🧩 整体架构概览 模块功能Redis存储全局并发数和带宽令牌桶状态Bucket4j Redis分布式限…...