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理念真正落地,确实需要团队文化、流程和工具的全面支持和配合。

  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_的开发_阶段_测试

一文读懂软件开发流程的演变过程 - 知乎

软件测试笔记-软件开发流程的演变_软件开发 流程演变历史-CSDN博客

传统模式 - 软件开发生命周期与过程模型(瀑布模型,原型模型和螺旋模型等) | Java 全栈知识体系

开发模型的理解:瀑布模型/增量式/迭代/敏捷开发——笔记-腾讯云开发者社区-腾讯云

敏捷开发入门教程 - 阮一峰的网络日志

敏捷开发流程的8个步骤是什么

敏捷开发 - 敏捷软件开发理论及流程 | Java 全栈知识体系

敏捷开发的简介及迭代排期的最佳实践_云效(Apsara Devops)-阿里云帮助中心

敏捷与 DevOps - 软件开发实践之间的区别 - AWS

DevOps(过程、方法与系统的统称)_百度百科

DevOps工具链-CSDN博客

认识devops那点事(思维导图,流程大图,工具链)_devops流程图-CSDN博客

https://blog.51cto.com/u_13544/6969630

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习:过拟合和欠拟合的介绍与解决方法

过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合,还有一种是适度拟合,适度拟合就是我们模型训练想要达到的状态,不过适度拟合这个词平时真的好少见。 过拟合 过拟合的表现 模型在训练集上的表现非常好,但是在测试集…

代码随想录刷题笔记 DAY 23 | 修剪二叉搜索树 No.669 | 将有序数组转换为二叉搜索树 No.108 | 把二叉搜索树转换为累加树 No.538

文章目录 Day 2301. 修剪二叉搜索树(No. 669)1.1 题目1.2 笔记1.3 代码 02. 将有序数组转换为二叉搜索树(No. 108)2.1 题目2.2 笔记2.3 代码 03. 把二叉搜索树转换为累加树(No. 538)3.1 题目3.2 笔记3.3 代…

Vue - 快速入门(一)

阅读文章可以收获: 1. 明白什么是vue 2. 如何创建一个vue实例 3. vue中的插值表达式如何使用 4. 如何安装vue的开发者工具 Vue 概念 什么是vue? Vue 是一个用于 构建用户界面 的 渐进式 框架 框架优点:大大提升开发效率 (70%↑) 缺点…

第80讲订单管理功能实现

后端 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.java1234.mapper.OrderM…

深入学习Pandas:数据连接、合并、加入、添加、重构函数的全面指南【第72篇—python:数据连接】

深入学习Pandas&#xff1a;数据连接、合并、加入、添加、重构函数的全面指南 Pandas是Python中最强大且广泛使用的数据处理库之一&#xff0c;提供了丰富的函数和工具&#xff0c;以便更轻松地处理和分析数据。在本文中&#xff0c;我们将深入探讨Pandas中一系列数据连接、合…

React18原理: 再聊Fiber架构下的时间分片

时间分片 react的任务可以被打断&#xff0c;其实就是基于时间分片的人眼最高能识别的帧数不超过30帧&#xff0c;电影的帧数差不多是在24浏览器的帧率一般来说是60帧&#xff0c;也就是每秒60个画面, 平均一个画面大概是16.5毫秒左右浏览器正常的工作流程是运算渲染&#xff…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之QRCode组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之QRCode组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、QRCode组件 用于显示单个二维码的组件。 子组件 无。 接口 QRCode(value: st…

python-分享篇-GUI界面开发-PyQt5-对QListWidget列表进行数据绑定

代码 # -*- coding: utf-8 -*-# Form implementation generated from reading ui file bindlist.ui # # Created by: PyQt5 UI code generator 5.11.3 # # WARNING! All changes made in this file will be lost! 对QListWidget列表进行数据绑定from PyQt5 import QtCore, QtG…

Elasticsearch:混合搜索是 GenAI 应用的未来

在这个竞争激烈的人工智能时代&#xff0c;自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步&#xff0c;信息检索方法也在不断进步&#xff0c;从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中…

华为云ModelBox实战:体感小游戏应用实操

目录 一、VsCode插件注册ModelBox设备二、Windows SDK安装1.安装Git for Windows2.下载ModelBox SDK3.相关插件安装 三、体感小游戏应用开发1.技能模板使用2.AI应用示例3.体感小游戏体验 参与华为云活动【HCSD】ModelBox实战营邀请活动&#xff0c;呼朋唤友学AIoT&#xff0c;完…

flask+python企业产品订单管理系统938re

在设计中采用“自下而上”的思想&#xff0c;在创新型产品提前购模块实现了个人中心、个体管理、发布企业管理、投资企业管理、项目分类管理、产品项目管理、个体投资管理、企业投资管理、个体订单管理、企业订单管理、系统管理等的功能性进行操作。最终&#xff0c;对基本系统…

Java学习-常用API(二)

Math类及其常用API&#xff1a; 演示&#xff1a; StringBuilder的认识及其常用方法&#xff1a; StringBuilder支持链式编程 StringBuilder sbnew StringBuilder&#xff08;&#xff09;&#xff1b;sb.append&#xff08;12&#xff09;.append.&#xff08;“itHeima”&am…

synchronized关键字以及底层实现

目录 基本使用 底层实现 synchronized锁升级 对象的内存结构 ⅰ. 对象头 1. ① 运行时元数据 (Mark Word) (占64位) a. 哈希值 (HashCode) b. GC分代年龄 c. 锁状态标记 2. ② 类型指针: (Klass Point) (占 32位) ⅱ. 实例数据 ⅲ. 对齐填充 Moniter重量级锁 轻量…

[ai笔记3] ai春晚观后感-谈谈ai与艺术

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第3篇分享&#xff01; 今天我们不聊技术&#xff0c;只聊感受&#xff01; 1 关于ai春晚 期待许久的ai春晚&#xff0c;但是等初一晚上观看的时候&#xff0c;或多或少还是有些失望。 首先是观看人数…

前端工程化面试题 | 06.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【二叉树】构建销毁二叉树

目录 创建二叉树 整体思路 代码实现 图示理解​ 销毁二叉树 判断二叉树是否是完全二叉树&层序 整体思路 代码实现 图是理解 二叉树的性质 题目 创建二叉树 整体思路 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树遇到#就回退&#xff0c;返回…

浅谈路由器交换结构

一、路由器技术概述 路由器&#xff08;Router&#xff09;是连接两个或多个网络的硬件设备&#xff0c;在网络间起网关的作用&#xff0c;是读取每一个数据包中的地址然后决定如何传送的专用智能性的网络设备。它能够理解不同的协议&#xff0c;例如某个局域网使用的以太网协议…

文章页的上下篇功能是否有必要?boke112百科取消上下篇功能

也不知道是从什么时候开始&#xff0c;我们很多站长的博客网站文章页都会在文末添加上“上一篇”和“下一篇”功能&#xff0c;目的是进行站内SEO优化和方便用户阅读上下篇文章。 boke112百科不管是以前使用的Three主题还是现在使用的YIA主题&#xff0c;刚开始的文章页都是有…

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…

腾讯云4核8G服务器可以用来干嘛?怎么收费?

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…