当前位置: 首页 > news >正文

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)

八、总结


干货分享,感谢您的阅读!

随着软件开发领域的快速演进,从最早的瀑布模型到现代的DevOps方法论,软件开发流程经历了多次变革与改进。这些变革不仅反映了技术的进步,更折射出开发人员对更高效、灵活的开发流程的追求。在本文中,我们将简要回顾软件开发流程的演化,从传统的瀑布模型到如今广泛应用的敏捷开发与DevOps方法,重点介绍持续集成(CI)、持续交付(CD)、持续构建(CB)、持续测试(CT)和持续部署(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理念真正落地,确实需要团队文化、流程和工具的全面支持和配合。

  1. 团队文化: 成员需要理解并认可DevOps的核心理念,包括持续改进、自动化、协作和共享责任等。团队应该鼓励开放的沟通和合作,以及对失败的接纳和学习。

  2. 流程: 确定适合团队和项目的DevOps流程。这可能包括持续集成、持续交付、持续部署、持续监控等。流程应该是自动化的、可重复的,并且能够快速响应变化和需求。

  3. 工具: 选择合适的工具来支持DevOps流程。这些工具可能包括版本控制系统(如Git)、持续集成工具(如Jenkins)、配置管理工具(如Ansible)、容器化平台(如Docker、Kubernetes)以及监控和日志管理工具等。

通过团队文化的培育、流程的设计和工具的选择,团队可以更好地实现DevOps理念,提高软件交付的效率和质量,从而实现持续创新和业务价值的快速实现。

(四)DevOps流程简述

  1. 持续集成(Continuous Integration,CI): 持续集成是一种软件开发实践,通过频繁地将代码集成到共享存储库中,并自动进行构建和测试,以确保团队能够快速发现和解决集成问题。

  2. 持续交付(Continuous Delivery,CD): 持续交付是一种软件交付实践,通过自动化和持续的流程,使团队能够随时交付高质量的软件到生产环境,但仍需要人工审查和确认。

  3. 持续构建(Continuous Build,CB): 持续构建是持续集成的一部分,指的是持续地自动构建软件,并生成可执行的程序或部署包,以便进行进一步的测试和部署。

  4. 持续测试(Continuous Testing,CT): 持续测试是一种软件测试实践,通过自动化测试和持续集成的方式,持续地对软件进行测试,以确保软件质量和稳定性。

  5. 持续部署(Continuous Deployment,CD): 持续部署是一种软件部署实践,通过自动化流程将经过测试的软件自动部署到生产环境,以实现快速且可靠的软件发布

三、CI(Continuous Integration,持续集成)

持续集成确实是软件开发周期中的一种实践,其主要目的是确保团队能够频繁地将代码合并到主干分支,并自动进行构建和测试。通过集成代码仓库、构建工具和测试工具,团队可以在代码发生变化时自动触发构建和测试流程,以及执行后续的自定义动作。这种频繁地将所有开发者的工作合并到主干上的做法,有助于尽早地发现和解决集成问题,从而提高软件质量和团队的开发效率。

简化的含义为:持续集成意味着将开发人员的代码更频繁地集成到共享代码仓库中,以确保团队的代码始终处于一个可集成的状态,进而促进更快速地软件交付和更高质量的软件产品。

持续集成的流程通常分为三个步骤:

  1. 开发人员提交代码到源代码仓库(Source Repository)。
  2. CI服务器(持续集成服务器)通过触发机制(如git hook)执行编译、测试以及输出结果等相关功能。
  3. CI服务器向开发人员反馈执行结果的报告。

持续集成的核心目标是确保新增的代码能够与原有代码正确地集成。与后续的持续交付和持续部署相比,其最主要的差别在于目标的不同。

持续集成的优势包括:

  1. 易于定位错误:频繁的代码集成将复杂的代码逻辑切割成小块,有助于更容易地定位和解决问题。
  2. 易于控制开发流程:细致的工作提交使得工作进度更容易判断,有助于管理者规划开发流程。
  3. 易于CodeReview:代码切分为小块有助于进行代码审查。
  4. 易于减少不必要的工作:自动化的构建和测试过程可以节约大量时间,使开发人员能够将更多时间投入到有价值的工作中。

四、CD(Continuous Delivery,持续交付)

持续交付是在持续集成的基础上进行了扩展,主要是在持续集成环节完成了软件构建和测试工作后,形成了新的版本,接下来将进行交付。与持续集成不同的是,持续交付的交付对象不是代码,而是可交付的产物,通常是部署到类生产环境(如灰度环境或预发环境)进行测试。

简化的含义是通过一种能够使得软件在较短的循环中可靠地发布的软件工程方法。与持续集成相比,持续交付的侧重点在于实现软件的可交付性,而不仅仅是代码的集成和测试。持续交付通常涉及一些额外的流程,例如部署到类生产环境进行测试、进行灰度测试等,以确保软件能够可靠地发布到生产环境中。

持续交付相比持续集成添加了Test -> Staging -> Production的流程,以确保新增的代码在生产环境中是可用的。

  • Test环节不仅包含基本的单元测试,还需要进行更为复杂的功能测试和集成测试等,以确保代码的功能和集成性能。
  • Staging阶段指的是类生产环境,模拟真实的网络拓扑、数据库数据和硬件设备等资源,测试代码在生产环境中的表现。
  • 每个阶段的执行结果都会向开发人员提供反馈,每个错误都可能导致版本的回滚。一旦测试完成并确认无误,相关人员将手动将其部署到生产环境中。

通过这样的流程,可以确保新增的代码在经过全面的测试和验证后才会部署到生产环境中,从而降低了潜在的生产环境风险,提高了软件的稳定性和可靠性。

五、持续构建(Continuous Build,CB)

持续构建(Continuous Build,CB)是DevOps流程中的一个重要环节,它通常是持续集成和持续交付流程的一部分。持续构建的主要目的是自动化地构建软件项目,并生成可执行的软件包或部署文件。

持续构建的基本思想是将代码提交到源代码仓库后,立即触发构建过程。这包括编译源代码、执行单元测试、生成部署文件等。持续构建的频繁执行有助于尽早地发现代码中的错误和问题,并及时反馈给开发团队。

持续构建的核心优势包括:

  1. 自动化:持续构建过程完全自动化,无需人工干预,提高了构建的效率和可靠性。
  2. 及时反馈:持续构建能够在代码提交后立即触发,及时反馈构建结果和错误信息,有助于开发人员及时修复问题。
  3. 提高软件质量:通过频繁地构建和测试,持续构建有助于提高软件的质量和稳定性,减少潜在的问题和缺陷。
  4. 加快交付速度:持续构建能够快速生成可部署的软件包或部署文件,加快了软件交付的速度,有利于快速响应用户需求。

通过自动化地构建和测试软件,有助于提高软件开发的效率、质量和交付速度。

六、持续测试(Continuous Testing,CT)

持续测试(Continuous Testing,CT)是DevOps流程中的一个关键环节,它旨在通过持续地进行自动化测试来确保软件质量和稳定性。

持续测试与传统的软件测试方式不同,它不仅限于在开发完成后执行一次测试,而是在整个软件开发周期中持续进行测试。具体来说,持续测试通常包括以下几个方面:

  1. 自动化测试:持续测试依赖于自动化测试工具和脚本,通过编写自动化测试用例和脚本来模拟用户操作、执行功能和性能测试等,以确保软件的功能和性能符合预期。

  2. 并行测试:持续测试需要在短时间内完成大量测试,因此通常会采用并行测试的方式,同时运行多个测试用例,提高测试效率。

  3. 持续反馈:持续测试会及时将测试结果反馈给开发团队,包括测试通过的用例、失败的用例以及错误信息等,以便开发人员及时修复问题。

  4. 自动化部署测试环境:持续测试还可以借助自动化部署工具,在需要时自动部署测试环境,并在其中执行测试,从而确保测试环境的一致性和可重复性。

七、持续部署(Continuous Deployment,CD)

持续部署(Continuous Deployment,CD)是DevOps流程中的一环,它建立在持续交付的基础之上,旨在将软件的部署过程自动化,以便将新的软件功能频繁地交付到生产环境中。

持续部署的主要特点包括:

  1. 自动化部署:持续部署通过自动化工具和流程,将新的软件功能自动部署到生产环境中,消除了手动部署过程中的人为错误和延迟。

  2. 频繁交付:持续部署强调频繁地交付新的软件功能到生产环境中,从而加速了软件开发和交付的速度,提高了团队的反应能力和灵活性。

  3. 实时监控:持续部署过程中通常会包括实时监控和反馈机制,以确保部署的软件功能在生产环境中稳定运行,及时发现并解决潜在的问题。

  4. 版本控制:持续部署依赖于版本控制系统和自动化工具,确保部署的软件版本与代码仓库中的代码保持一致,减少了版本管理和部署的复杂性。

持续集成(Continuous Integration,CI)与持续交付(Continuous Delivery,CD)之间的区别在于其对生产环境的自动化程度。

持续集成是指开发人员将代码提交到代码仓库后,自动触发构建、测试等过程,但并不自动将代码部署到生产环境。持续集成的主要目的是确保团队成员的代码能够及时集成,并通过自动化的测试流程进行验证,从而尽早地发现和解决潜在的集成问题。

持续交付则更进一步,除了包含持续集成的流程外,还将代码自动部署到类生产环境(例如预发布环境或灰度环境),以便进行进一步的测试和验证。持续交付的目标是确保团队能够随时准备好将代码部署到生产环境,但仍然需要人工的干预来决定何时进行实际的生产部署。

因此,持续交付相比持续集成,更加强调自动化部署和测试的全流程,以确保新的功能能够及时交付到类生产环境,但仍然保留了人工决策的环节,以便进行最终的生产部署。

八、总结

我们这篇文章通过详细的回顾与分析,介绍了软件开发流程的演化以及DevOps的概念与实践。首先,文章梳理了从瀑布模型、原型模型、螺旋模型、增量模型到敏捷开发和DevOps的演变过程,并分析了各阶段的特点及其在不同项目中的适用性。接着,文章深入探讨了DevOps这一融合开发与运维的新兴理念,强调了通过持续集成(CI)、持续交付(CD)、持续构建(CB)、持续测试(CT)和持续部署(CD)来提升软件交付速度、质量和稳定性的技术手段。最终,文章指出,DevOps作为一种文化和实践,推动了开发团队与运维团队的协作,打破了传统开发流程的瓶颈,帮助团队实现了自动化和高效的软件交付流程。

一些其他的阅读和参考:

软件开发流程进化史:从瀑布、敏捷到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 二、走…...

网络安全 | WAF防护开通流程与技术原理详解

关注:CodingTechWork 引言 随着互联网安全形势的日益严峻,Web应用防火墙(WAF, Web Application Firewall)逐渐成为网站和应用的标准防护措施。WAF能够有效识别和防止如SQL注入、跨站脚本攻击(XSS)、恶意流…...

【我的 PWN 学习手札】IO_FILE 之 FSOP

FSOP:File Stream Oriented Programming 通过劫持 _IO_list_all 指向伪造的 _IO_FILE_plus,进而调用fake IO_FILE 结构体对象中被伪造的vtable指向的恶意函数。 目录 前言 一、glibc-exit函数浅析 二、FSOP 三、Largebin attack FSOP (…...

Spring——自动装配

假设一个场景: 一个人(Person)有一条狗(Dog)和一只猫(Cat),狗和猫都会叫,狗叫是“汪汪”,猫叫是“喵喵”,同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…...

C语言——文件IO 【文件IO和标准IO区别,操作文件IO】open,write,read,dup2,access,stat

1.思维导图 2.练习 1:使用C语言编写一个简易的界面,界面如下 1:标准输出流 2:标准错误流 3:文件流 要求:按1的时候,通过printf输出数据,按2的时候,通过p…...

人工智能知识分享第九天-机器学习_集成学习

集成学习 概念 集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本进行预测时…...

腾讯云AI代码助手编程挑战赛-武器大师

作品简介 对话过程能够介绍二战 各种武器 冷战 武器 现代的 各种武器装备,陆海空三军都知道。 技术架构 使用全后端分离的架构,前端使用Vue脚手架,腾讯云修改样式css 开发环境、开发流程 系统:win11 开发工具:VS…...

Python机器学习笔记(十八、交互特征与多项式特征)

添加原始数据的交互特征(interaction feature)和多项式特征(polynomial feature)可以丰富特征表示,特别是对于线性模型。这种特征工程可以用统计建模和许多实际的机器学习应用中。 上一次学习:线性模型对w…...

java_深入理解main方法

深入理解main方法 在 main()方法中,我们可以直接调用 main 方法所在类的静态方法或静态属性。但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员,[举例说明]…...

NLP中常见的分词算法(BPE、WordPiece、Unigram、SentencePiece)

文章目录 一、基本概念二、传统分词方法2.1 古典分词方法2.2 拆分为单个字符 三、基于子词的分词方法(Subword Tokenization)3.1 主要思想3.2 主流的 Subword 算法3.3 Subword 与 传统分词方法的比较 四、Byte Pair Encoding (BPE)4.1 主要思想4.2 算法过…...

HTTP/HTTPS ②-Cookie || Session || HTTP报头

这里是Themberfue 上篇文章介绍了HTTP报头的首行信息 本篇我们将更进一步讲解HTTP报头键值对的含义~~~ ❤️❤️❤️❤️ 报头Header ✨再上一篇的学习中,我们了解了HTTP的报头主要是通过键值对的结构存储和表达信息的;我们已经了解了首行的HTTP方法和UR…...

前端 动图方案

1、vue3lottie 解析使用Bodymovin导出为json格式的Adobe After Effects动画 vue3lottie的使用神器&#xff1a;vue3-lottie (electron也适用)-CSDN博客 2、MP4文件 //template部分 <video class"header-bg" src"../../assets/images/screen/layout/heade…...

C#语言的字符串处理

C#语言的字符串处理 引言 在现代编程中&#xff0c;字符串处理是一项重要的技能&#xff0c;几乎在所有编程语言中都有应用。C#语言作为一种强类型的、面向对象的编程语言&#xff0c;提供了丰富的字符串处理功能。这使得开发人员能够方便地进行文本操作&#xff0c;比如字符…...

【shell编程】报错信息:bash: bad file descriptor(包含6种解决方法)

大家好&#xff0c;我是摇光~ 在运行 Shell 脚本时&#xff0c;遇到 bash: bad file descriptor 错误通常意味着脚本尝试对一个无效或不可用的文件描述符&#xff08;file descriptor&#xff09;执行了读写操作。 以下是一些可能导致这个问题的原因、详细案例以及相应的解决…...

vscode 配置c/c++环境 中文乱码

D:\MIscrobingDownload\mingw64\binmingw配置到环境变量中 测试一下&#xff0c;按winr输入cmd打开终端 gcc -v g -v安装插件 一 二 run code 因为run code 插件配置实质上是用它提供的指令进行编译执行&#xff0c;因此无法直接使用断点调试功能&#xff0c;需要对配置进行…...

leetcode 面试经典 150 题:两数之和

链接两数之和题序号1题型数组解题方法1. 哈希表&#xff0c;2. 暴力法难度简单熟练度✅✅✅✅✅ 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输…...

【Unity报错】error Cs0103: The name ‘keyCode‘ does not exist in the current context

报错提示&#xff1a; 解决方法&#xff1a; KeyCode K大写...

家用万兆网络实践:紧凑型家用服务器静音化改造(二)

大家好&#xff0c;这篇文章我们继续分享家里网络设备的万兆升级和静音改造经验&#xff0c;希望对有类似需求的朋友有所帮助。 写在前面 在上一篇《家用网络升级实践&#xff1a;低成本实现局部万兆&#xff08;一&#xff09;》中&#xff0c;我们留下了一些待解决的问题。…...

“AI智能实训系统:让学习更高效、更轻松!

大家好&#xff0c;作为一名资深产品经理&#xff0c;今天我来跟大家聊聊一款备受瞩目的产品——AI智能实训系统。在这个人工智能技术飞速发展的时代&#xff0c;AI智能实训系统应运而生&#xff0c;为广大学习者提供了全新的学习体验。那么&#xff0c;这款产品究竟有哪些亮点…...

【Linux 之一 】Linux常用命令汇总

Linux常用命令 ./catcd 命令chmodclearcphistoryhtoplnmkdirmvpwdrmtailunamewcwhoami 我从2021年4月份开始才开始真正意义上接触Linux&#xff0c;最初学习时是一脸蒙圈&#xff0c;啥也不会&#xff0c;啥也不懂&#xff0c;做了很多乱七八糟&#xff0c;没有条理的笔记。不知…...

Git 从入门到精通

一、环境配置 下载地址&#xff1a;https://git-scm.com/downloads/ 二、用户配置 找到git bash git --version 查看当前版本 git config --global user.name szhipeng625 设置用户名 git config --global user.email szhipeng625gmail.com 设置邮箱 git config --global …...

【Uniapp-Vue3】创建自定义页面模板

大多数情况下我们都使用的是默认模板&#xff0c;但是默认模板是Vue2格式的&#xff0c;如果我们想要定义一个Vue3模板的页面就需要自定义。 一、我们先复制下面的模板代码&#xff08;可根据自身需要进行修改&#xff09;&#xff1a; <template><view class"…...

Ansible之批量管理服务器

文章目录 背景第一步、安装第二步、配置免密登录2.1 生成密钥2.2 分发公钥2.3 测试无密连接 背景 Ansible是Python强大的服务器批量管理 第一步、安装 首先要拉取epel数据源&#xff0c;执行以下命令 yum -y install epel-release安装完毕如下所示。 使用 yum 命令安装 an…...

android compose 串口通信

1.添加依赖 implementation("io.github.xmaihh:serialport:2.1.1") 2.添加SerialHelper派生类 class SerialPortHelper(portName:String,baudRate:Int): SerialHelper(portName,baudRate) {var receivedDataBuffer mutableListOf<Byte>()override fun onDa…...

ios脚本巨魔商店多巴胺越狱基本操作教程

准备工作 确认设备兼容性&#xff1a;A9-A11&#xff08;iPhone6s&#xff0d;X&#xff09;&#xff1a;iOS15.0-16.6.1&#xff1b;A12-A14&#xff08;iPhoneXR&#xff0d;12PM&#xff09;&#xff1a;iOS15.0-16.5.1&#xff1b;A15-A16&#xff08;iPhone13&#xff0d…...

NLP项目实战——基于Bert模型的多情感评论分类(附数据集和源码)

在当今数字化的时代&#xff0c;分析用户评论中的情感倾向对于了解产品、服务的口碑等方面有着重要意义。而基于强大的预训练语言模型如 Bert 来进行评论情感分析&#xff0c;能够取得较好的效果。 在本次项目中&#xff0c;我们将展示如何利用 Python 语言结合transformers库&…...

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解&#xff0c;以至于经过.net这几年的发展进化&#xff0c;概念越来越多&#xff0c;越来越梳理不容易理解了。内心深处存在思想上的懒惰&#xff0c;以为自己专注于Unity开发就好&#xff0c;这些并不属于核心范畴&#xff0c;所以对这些概念总是…...

Mybatis原理简介

看到Mybatis的框架图&#xff0c;可以清晰的看到Mybatis的整体核心对象&#xff0c;我更喜欢用自己的图来表达Mybatis的整个的执行流程。如下图所示&#xff1a; 原理详解&#xff1a; MyBatis应用程序根据XML配置文件创建SqlSessionFactory&#xff0c;SqlSessionFactory在根…...

腾讯云AI代码助手-公司职位分析AI助手

作品简介 腾讯云AI代码助手是一款智能工具&#xff0c;专注于为公司提供职位分析服务。通过自然语言处理和机器学习技术&#xff0c;它能快速解析职位描述&#xff0c;提取关键信息&#xff0c;并提供数据驱动的洞察&#xff0c;帮助公司优化招聘流程和职位设计。 技术架构 …...

腾讯云AI代码助手编程挑战赛-解忧助手

作品简介 何以解忧,唯有杜康。而随着Ai的发展,解忧不再只有杜康还有Ai,使用的是腾讯云AI代码助手来生成的所有代码&#xff0c;使用方便&#xff0c;快捷&#xff0c;高效。 技术架构 采用了全后端分离的架构&#xff0c;前端使用Vue.js&#xff0c;腾讯云的AI服务处理自然语…...

Sentinel服务保护 + Seata分布式事务

服务保护 【雪崩问题】微服务调用链路中某个服务&#xff0c;引起整个链路中所有微服务都不可用。 【原因】&#xff1a; 微服务相互调用&#xff0c;服务提供者出现故障。服务调用这没有做好异常处理&#xff0c;导致自身故障。调用链中所有服务级联失败&#xff0c;导致整个…...

【Leetcode·中等·数组】59. 螺旋矩阵 II(spiral matrix ii)

题目描述 英文版描述 Given a positive integer n, generate an n x n matrix filled with elements from 1 to n(2) in spiral order. Example 1: Input: n 3 Output: [[1,2,3],[8,9,4],[7,6,5]] 提示&#xff1a; 1 < n < 20 英文版地址 https://leetcode.com…...

WebSocket 扩展生态:协议与框架

在前七篇文章中,我们深入探讨了 WebSocket 的基础原理、开发实践和实战案例。今天,让我们把视野扩展到 WebSocket 的生态系统,看看有哪些扩展协议和框架可以帮助我们更好地开发 WebSocket 应用。我曾在一个大型即时通讯项目中,通过合理使用这些工具,将开发效率提升了 50%。 扩…...

MySQL —— 在CentOS9下安装MySQL

MySQL —— 在CentOS9下安装MySQL 1.查看自己操作系统的版本2.找到对应的安装源3.上传我们在windows下&#xff0c;下载的文件&#xff0c;解压4.执行rpm命令&#xff0c;启用MySQL8仓库5.执行dnf install -y mysql-community-server6.设置开机自启动7.获得初始密码8.登录MySQL…...

用VS C#构建Windows服务【纯操作版,附带项目地址】

1.点击“创建新项目”,选择“Windows 服务(.NET Framework)” 2、给项目命名 3、双击“Service1.cs”,右键,选择“添加安装程序”,就会生成一个“ProjectInstaller.cs”文件 4、双击“ProjectInstaller.cs”文件,右键“serviceProcessInstaller1”,选择“属性…...

1.UGUI相关

1.这一种UIcanvas下的组件,会显示在3d物体之前 2.可以设置3d物体在UI界面之前。选中第二个模式。这时候会指定一个摄像机。一般情况下&#xff0c;不用主摄像机。需要新建一个专门给UI的摄像机。相当于设置距离摄像机的远近。两个layer 可以理解成 章节&#xff0c;关卡。相同…...

大语言模型训练的数据集从哪里来?

继续上篇文章的内容说说大语言模型预训练的数据集从哪里来以及为什么互联网上的数据已经被耗尽这个说法并不专业&#xff0c;再谈谈大语言模型预训练数据集的优化思路。 1. GPT2使用的数据集是WebText&#xff0c;该数据集大概40GB&#xff0c;由OpenAI创建&#xff0c;主要内…...

Android 来电白名单 只允许联系人呼入电话

客户需求只允许通讯录中联系人可以呼入电话。参考自带的黑名单实现 CallsManager.java类中的onSuccessfulIncomingCall方法有一些过滤器&#xff0c;可以仿照黑名单的方式添加自己的过滤器。 packages/services/Telecomm/src/com/android/server/telecom/CallsManager.java …...

StarRocks Awards 2024 年度贡献人物

在过去一年&#xff0c;StarRocks 在 Lakehouse 与 AI 等关键领域取得了显著进步&#xff0c;其卓越的产品功能极大地简化和提升了数据分析的效率&#xff0c;使得"One Data&#xff0c;All Analytics" 的愿景变得更加触手可及。 虽然实现这一目标的道路充满挑战且漫…...

plane开源的自托管项目

Plane 是一个开源的自托管项目规划解决方案&#xff0c;专注于问题管理、里程碑跟踪以及产品路线图的设计。作为一款开源软件&#xff0c;Plane 的代码托管在 GitHub 平台上&#xff0c;允许任何人查看和贡献代码。它为用户提供了便捷的项目创建与管理手段&#xff0c;并配备了…...

WebLogic安全基线

WebLogic安全基线 一、 用户权限1 、检查weblogic 的启动用户2 、用户权限整改3 、使用普通用户重启weblogic 二、账户共用1 、检查weblogic 控制台的账户2 、账户共用整改3 、测试登录weblogic 控制台新账户 三、 账户清理1 、检查weblogic 控制台的账户2 、帐户清理整改 四、…...

复杂园区网基本分支的构建

目录 1、各主机进行网络配置。2、交换机配置。3、配置路由交换&#xff0c;进行测试。4、配置路由器接口和静态路由&#xff0c;进行测试。5、最后测试任意两台主机通信情况 模拟环境链接 拓扑结构 说明&#xff1a; VLAN标签在上面的一定是GigabitEthernet接口的&#xff0c…...

设计模式-结构型-组合模式

1. 什么是组合模式&#xff1f; 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;它允许将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。换句话说&#xff0c;组合模式允…...

32单片机从入门到精通之用户界面——用户界面(十四)

不论你现在处于什么样的困境和挑战&#xff0c;不要放弃希望和努力。成功之路不会一帆风顺&#xff0c;但是只要你坚定信念&#xff0c;勇敢面对困难&#xff0c;努力奋斗&#xff0c;就一定能够战胜困难&#xff0c;迈向成功的道路。困难和挫折只是暂时的&#xff0c;而坚持和…...

Redis 优化秒杀(异步秒杀)

目录 为什么需要异步秒杀 异步优化的核心逻辑是什么&#xff1f; 阻塞队列的特点是什么&#xff1f; Lua脚本在这里的作用是什么&#xff1f; 异步调用创建订单的具体逻辑是什么&#xff1f; 为什么要用代理对象proxy调用createVoucherOrder方法&#xff1f; 对于代码的详细…...

NFS 组件容器化部署实战指南

文章目录 前言部署NFS服务器K8S部署NFS问题记录 前言 使用nfs-client-provisioner这个应用&#xff0c;利用nfs server给kubernets提供作为持久化后端&#xff0c;并且动态提供pv。所有节点需要安装nfs-utils组件&#xff0c;并且nfs服务器与kubernets worker节点都能网络连通…...

LCE(Local Cascade Ensemble)预测模型和LSTM(Long Short-Term Memory)模型在效果和特点上存在显著差异

LCE&#xff08;Local Cascade Ensemble&#xff09;预测模型和LSTM&#xff08;Long Short-Term Memory&#xff09;模型在效果和特点上存在显著差异。以下是对两者的比较&#xff1a; 一、效果比较 LCE模型&#xff1a; 优势&#xff1a;LCE结合了随机森林和XGBoost的优势&a…...

rk3568平台Buildroot编译实践:内核rootfs定制 及常见编译问题

目录 编译前准备常规编译流程定制内核修改内核 参数并增量 保存修改rootfs并增量 保存修改rootfs包下载源rootfs软件包增删refBuildroot 是一个用于自动化构建嵌入式 Linux 系统的工具。它通过使用简单的配置文件和 Makefile,能够从源代码开始交叉编译出一个完整的、可以运行在…...

头歌python实验:网络安全应用实践-恶意流量检测

第1关:re 库的使用 本关任务:编写一个能正则匹配出 ip 地址的小程序。 re 的主要功能函数 常用的功能函数包括: compile、search、match、split、findall(finditer)、sub(subn)。 re.search 函数 re.search 扫描整个字符串并返回第一个成功的匹配。 函数语法: re…...

Linux内核编程(二十一)USB应用及驱动开发

一、基础知识 1. USB接口是什么&#xff1f; USB接口&#xff08;Universal Serial Bus&#xff09;是一种通用串行总线&#xff0c;广泛使用的接口标准&#xff0c;主要用于连接计算机与外围设备&#xff08;如键盘、鼠标、打印机、存储设备等&#xff09;之间的数据传输和电…...