系统架构设计师【第5章】: 软件工程基础知识 (核心总结)

文章目录

    • 5.1 软件工程
      • 5.1.1 软件工程定义
      • 5.1.2 软件过程模型
      • 5.1.3 敏捷模型
      • 5.1.4 统一过程模型(RUP)
      • 5.1.5 软件能力成熟度模型
    • 5.2 需求工程
      • 5.2.1 需求获取
      • 5.2.2 需求变更
      • 5.2.3 需求追踪
    • 5.3 系统分析与设计
      • 5.3.1 结构化方法
      • 5.3.2 面向对象方法
    • 5.4 软件测试
      • 5.4.1 测试方法
      • 5.4.2 测试阶段
    • 5.5 净室软件工程
      • 5.5.1 理论基础
      • 5.5.2 技术手段
      • 5.5.3 应用与缺点
    • 5.6 基于构件的软件工程
      • 5.6.1 构件和构件模型
      • 5.6.2 CBSE过程
      • 5.6.3 构件组装
    • 5.7 软件项目管理
      • 5.7.1 项目管理概述
      • 5.7.2 软件进度管理
      • 5.7.3 软件配置管理
      • 5.7.4 软件质量管理
      • 5.7.5 软件风险管理

5.1 软件工程

5.1.1 软件工程定义

软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件
工程活动,包括以下4个方面。

  • ( 1 ) P( Plan )——软件规格说明。规定软件的功能及其运行时的限制。
  • ( 2 ) D ( Do ) — —软件开发。开发出满足规格说明的软件。
  • ( 3 ) C ( Check )——软件确认。确认开发的软件能够满足用户的需求。
  • ( 4 ) A ( Action )——软件演进。软件在运行过程中不断改进以满足客户新的需求。

软件危机(Software Crisis)。具体表现为:软件开发进度难以预测、软件开发成本难以控制、软件功能难以满足用户期望、软件质量无法保证、软件难以维护和软件缺少适当的文档资料。

5.1.2 软件过程模型

软件过程模型。软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰这样的全过程,这个全过程就是软件的生命周期。软件生命周期描述了软件从生到死的全过程。为了使软件生命周期中的各项任务能够有序地按照规程进行,需要一定的工作模型对各项任务给予规程约束,这样的工作模型被称为软件过程模型,有时也称为软件生命周期模型。常见的软件过程模型主要包括:

1)瀑布模型(Waterfall Model) ,是结构化开发方法使用的软件过程模型。瀑布模型的特点是因果关系紧密相连,前一个阶段工作的输出结果,是后一个阶段工作的输入。每一个阶段工作完成后都伴随着一个里程碑。缺点是需求难以一次确定、变更的代价高、结果难以预见、各阶段工作不能并行。如下图:
在这里插入图片描述

2)原型模型(Prototype Model) ,又称快速原型,是原型方法使用的生命周期 模型。原型模型解决了瀑布模型需求难以一次确定、结果难以预见的缺点。原型模型有 原型开发和目标软件开发 两个阶段。抛弃型原型将原型作为需求确认的手段,在需求确认结束后就被抛弃不用, 继续用瀑布模型。演化性原型在需求确认结束后,不断补充和完善原型,直至形成一个完整的产品。如下图:
在这里插入图片描述

3)螺旋模型(Spiral Model),是在快速原型的基础上结合瀑布模型扩展而成。 把整个软件开发流程分成多个阶段,每一个阶段都由 目标设定、风险分析、开发和有效性验证、评审 4 部分组成。支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法, 强调其他模型忽视的风险分析。如下图:
在这里插入图片描述

5.1.3 敏捷模型

敏捷(Agile)模型,属于敏捷方法使用的模型。

1.敏捷方法的特点
敏捷型方法主要有两个特点:

  • 敏捷型方法是“适应性” (adaptive) 而非“预设性” (predictive) 的
  • 敏捷型方法是“面向人的” (People-oriented) 而非“面向过程的” (Process-oriented)

2.敏捷方法的核心思想
敏捷方法的核心思想主要有下面3点。

  • (1)敏捷方法是适应型,而非可预测型。
  • (2)敏捷方法是以人为本,而非以过程为本。
  • (3)迭代增量式的开发过程。

3.主要敏捷方法简介
敏捷模型主要有 极限编程(XP)、水晶系列方法、并列争球法(Scrum)、特征驱动开发方法 等具体的敏捷方法,这些方法的显著特征如下:

  • 极限编程(Extreme Programming,XP): 高效、低风险、测试先行(先写测试代码,再编写程序)。
  • 水晶系列方法: 不同的项目,采用不同的策略。
  • 并列争球法(Scrum): 该方法侧重于项目管理。Scrum 包括一系列实践和预定义角色的过
    程骨架(是一种流程、计划、模式,用于有效率地开发软件)。在 Scrum 中,使用产品 Backlog 来管理产品的需求,产品 Backlog 是一个按照商业价值排序的需求列表。根据 Backlog 的内 容,将整个开发过程分为若干个短的迭代周期(Sprint),在 Sprint 中,Scrum 团队从产品 Backlog 中挑选最高优先级的需求组成 Sprint Backlog。在每个迭代结束时,Scrum 团队将递 交潜在可交付的产品增量。当所有 Sprint 结束时,团队提交最终的软件产品。
  • 特征驱动开发方法(Feature Driven Development,FDD): 该方法会将开发人员分类,分为指挥者(首席程序员)、类程序员等。

5.1.4 统一过程模型(RUP)

软件统一过程(Rational Unified Process,RUP)模型。RUP 是一种重量级过程模型,属于构件化开发使用的软件过程模型。其生命周期是一个二维的软件开发模型,划分为多个循环 (Cycle),每个循环生成产品的一个新的版本,每个循环依次由 初始、细化、构造和移交 4 个连续的阶段(Phase)组成,每个阶段完成确定的任务。

RUP 中有 9 个核心工作流,这 9 个核心工作流 分别是: 业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境。

RUP 的特点是 用例驱动的、以架构为中心的、迭代和增量 的软件开发过程。
RUP 用“4+1”视图模型来描述架构,如图所示,后被 UML 吸收采纳。
在这里插入图片描述

  • 逻辑视图: 对应最终用户,主要支持功能性需求,即在为用户提供服务方面系统所应该提 供的功能。逻辑视图常用类图、对象图、状态图、协作图表示。
  • 实现视图: 又称为开发视图,对应程序员,关注软件开发环境下实际模块的组织,描述系 统的各部分如何被组织为模块和组件即开发环境中软件的静态组织结构。该视图通常包 含包图和组件图。
  • 进程视图: 又叫过程视图,对应系统集成人员,考虑一些非功能性的需求,如性能和可用 性,它可以解决并发性、分布性、系统完整性、容错性的问题。进程视图常用活动图表示。
  • 部署视图: 又叫物理视图,对应系统工程师。描述如何将前三个视图中所述的系统设计实 现为一组现实世界的实体。展示了如何把软件映射到硬件上,它通常要考虑到系统性能、规模、可靠性等。解决系统拓扑结构、系统安装、通信等问题。部署视图常用部署图表示。
  • 用例视图: 所有其他视图都依靠用例视图(场景)来指导它们,这就是将模型称为“4+1”的原因。

RUP 在每次迭代中,只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程。

5.1.5 软件能力成熟度模型

软件能力成熟度模型(Capability Maturity Model for Software,CMM)。CMM 是一个概
念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。

软件能力成熟度模型集成(Capability Maturity Model Integration for Software,CMMI)。 CMMI 是在 CMM 的基础上发展而来的。CMMI 提供了一个软件能力成熟度的框架,它将软件过程 改进的步骤组织成 5 个成熟度等级: 初始级、已管理级、已定义级、量化管理级、优化级。量化管理级与已定义级的区别是对过程性能的可预测。

5.2 需求工程

软件需求的层次
软件需求包括 3 个不同的层次。

  • ( 1 ) 业务需求(Business Requirement),反映了组织机构或客户对系统、产品高层次的目标要求。
  • ( 2 )用户需求(User Requirement) ,描述了用户使用产品必须要完成的任务,是用户对该软
    件产品的期望。业务需求和用户需求构成了用户原始需求文档的内容。
    ( 3 ) 功能需求(functional requirement) ,从系统操作的角度定义了开发人员必须实现的软件功能,来满足业务需求和用户需求。

需求工程(Requirement Engineering,RE) : 是指应用已证实有效的原理、方法,通过合适的工具和记号,系统地描述待开发系统 及其行为特征和相关约束。需求工程由 需求获取、需求分析、形成需求规格(或称为需求文档化)、 需求确认与验证、需求管理 5 个阶段组成。

软件需求规格说明书(Software Requirement Specification,SRS) 具体包括功能需求、非功能需求和约束。约束包括设计约束和过程约束。批准的 SRS 是 需求开发和需求管理之间的桥梁。

需求管理 需求管理是一个对系统需求变更、了解和控制的过程,包括变更控制、版本控制、需求跟踪等活动。

5.2.1 需求获取

需求获取是获得系统必要的特征,或者是获得用户能接受的、系统必须满足的约束。需求获取的基本步骤:

  • (1)开发高层的业务模型。
  • (2)定义项目范围和高层需求。
  • (3)识别用户角色和用户代表。
  • (4)获取具体的需求。
  • (5)确定目标系统的业务工作流。
  • (6)需求整理与总结。

需求获取的方法包括:用户面谈、需求专题讨论会、问卷调查、现场观察、原型化方法和头脑风
暴法
等。

5.2.2 需求变更

变更控制委员会(Change Control Board,CCB) 由项目所涉及的多方成员共同组成,通常包括用户和实施方的决策人员。CCB 是决策机构,不是作业机构,通常 CCB 的工作是通过评审手段来决定项目是否能变更,但不提出变更方案。

过程及操作步骤为 制定决策、交流情况、重新协商约定

5.2.3 需求追踪

需求跟踪提供了由需求到产品实现整个过程范围的明确查阅的能力。需求跟踪的目的是建立与维护 “需求—设计—编程—测试”之间的一致性,确保所有的工作成果符合用户需求。

需求跟踪有 正向跟踪和逆向跟踪 两种方式,合称为“双向跟踪”。不论采用何种跟踪方式,都要建立与维护 需求跟踪矩阵

5.3 系统分析与设计

5.3.1 结构化方法

结构化方法(Structured Analysis and Structured Design,SASD)又称为面向功能的软件开发方法或面向数据流的软件开发方法。针对软件生存周期各个不同的阶段,有结构化分析、结构化设计和结构化编程等方法。

(1)结构化分析(Structured Analysis,SA)
SA 利用图形表达用户需求中的功能需求,使用的手段主要有 数据流图(Data Flow Diagram,DFD)、数据字典、结构化语言、判定表以及判定树 等。

数据流图(DFD)由 4 种基本元素组成: 数据流、处理/加工、数据存储和外部项。 结构化分析具体的建模过程及步骤为明确目标、确定系统范围、建立顶层 DFD 图、构建第一层 DFD 分解图、开发 DFD 层次结构图、检查确认 DFD 图。DFD 图需要满足规则:父图数据流必 须在子图中出现;一个处理至少有一个输入流和一个输出流;一个存储必定有流入和流出;一个数 据流至少有一端是处理端;模型表达的信息是全面的、完整的、正确的和一致的。

数据字典(Data Dictionary) 是一种标记用户可以访问的数据项和元数据的目录,是对系统中 使用的所有数据元素定义的集合,包括数据项、数据结构、数据流、数据存储和处理过程。

(2)结构化设计(Structured Design,SD)
SD 是一种面向数据流的设计方法,以 SRS 和 SA 阶段所产生的数据流图和数据字典等文档为基础,是一个 自顶向下、逐步求精和模块化 的过程。 SD 分为 概要设计和详细设计 两个阶段,其中概要设计的主要任务是确定软件系统的结构,对系统 进行模块划分,确定每个模块的功能、接口和模块之间的调用关系;详细设计的主要任务是为每个模块设计实现的细节。

在 SD 中,模块是实现功能的基本单位,一般具有 功能、逻辑和状态 3 个基本属性。 耦合表示模块之间联系的程度,耦合度从低到高依次如下所示。
!](https://img-blog.csdnimg.cn/direct/c75c38a9733a4bedae96e2ad2470ce08.png)

内聚表示模块内部各代码成分之间联系的紧密程度,内聚度从高到低的排序如下:
在这里插入图片描述
模块分解中应遵循“高内聚、低耦合”的设计原则。

概要设计使用系统结构图(Structure Chart,SC),又称为模块结构图,反映了系统的总体结构。 详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的表示工具
有图形工具、表格工具和语言工具。图形有业务流图、程序流程图、问题分析图(Problem Analysis Diagram,PAD)、NS 流程图等。

(3)结构化编程(Structured Programming,SP)
SP 通过顺序、分支和循环三种基本的控制 结构可以构造出任何单入口单出口的程序。SP 强调:自顶向下,逐步细化;清晰第一,效率第二; 书写规范,缩进格式;基本结构,组合而成。P 原则:程序=(算法)+(数据结构)。两者分开设计, 以算法(函数或过程)为主。

(4)数据库设计(概念结构设计部分)。
概念结构设计建立抽象的概念数据模型,通常采用实体-联系图(Entity Relationship Diagram,E-R 图)来表示。

5.3.2 面向对象方法

(1) 面向对象的分析方法(Object-Oriented Analysis,OOA)。OOA 模型由

  • 5 个层次( 主题层、对象类层、结构层、属性层和服务层 )和
  • 5个活动( 标识对象类、标识结构、定义主题、定义属性 和定义服务 )组成。

OOA 的基本原则有 抽象、封装、继承、分类、聚合、关联、消息通信、粒度控制和行为分析

OOA 的 5 个基本步骤: 确定对象和类、确定结构、确定主题、确定属性、确定方法

(2)面向对象设计方法(Object-Oriented Design,OOD)。在 OOD 中,数据结构和在数据结构上定义的操作算法封装在一个对象之中。类封装了信息和行为,是具有相同属性、方法和关系的 对象集合的总称。类可以分为 3 种类型:

  • 1)实体类:一般来说是一个名词,通常都是永久性需要存储的,例如教师、学生。
  • 2)控制类:是用于控制用例工作的类,控制对象(控制类的实例)通常控制其他对象或协调其他对象的行为,例如登录验证。
  • 3)边界类:用于封装在用例内、外流动的信息或数据流,例如窗口、通信协议、接口等。

(3)面向对象程序设计(Object-Oriented Programming,OOP)。OOP 以对象为核心,该方法认为程序由一系列对象组成。OOP 的基本特点有 封装、继承和多态。封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作组装到一起。继承是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。继承可以分为 4 类,分别为取代继承、包含继承、受限继承和特化继承。多态指同一操作作用于不同的对象,可以产生不同的结果。

(4)数据持久化与数据库。永久保存对象的状态,需要进行对象的持久化(Persistence),把 内存中的对象保存到数据库或可永久保存的存储设备中。在多层软件设计和开发中采用持久层 (Persistence Layer)专注于实现数据持久化,将对象持久化到关系数据库中,需要进行对象/关系 的映射(Object/Relation Mapping,ORM)。目前主流的持久化技术框架包括 Hibernate、iBatis/Mybatis 和 JDO 等。

    1. Hibernate: 是一个开源的全自动的 ORM 框架,对 JDBC 进行了非常轻量级的对象封装, 提供抽象的 HQL 可以自动生成不同数据库的 SQL 语句,优点是具有跨数据库平台的特性。
    1. iBatis/Mybatis: 提供手动的 ORM 实现,需要程序员手写 SQL,优点是可以结合特定的数 据库特性深度优化。
    1. Java 数据对象(Java Data Object,JDO): 是 Java 标准中的持久化 API,提供了透明的对象 存储,并且不仅仅支持关系数据库,还支持普通文件、XML 文件和对象数据库等。

其他设计方法如构件与软件重用。软件重用是使用已有软件产品来开发新的软件系统的过程, 分为水平式重用和垂直式重用两种类型:

  • 水平式重用:不同应用领域中的软件元素,如标准函数库
  • 垂直式重用: 共性应用领域间的软部件,区块链

逆向工程(Reverse Engineering) 是通过分析已有的程序,寻求比源代码更高级的抽象表现形式(比如文档)的活动, 是在不同抽象层级中进行的溯源行为。

逆向工程得出的设计称为设计恢复(Design Recovery),但不一定能够抽象还原到原设计。

重构(Restructuring)是在同一抽象层级中转换系统描述的活动。对逆向工程所形成的系统进 行修改或重构,生成的新版本称为重构工程。逆向工程信息恢复的级别如下:
在这里插入图片描述

5.4 软件测试

测试是确保软件的质量,确认软件以正确的方式做了用户所期望的事情。软件测试通常在规定的时间和成本内完成,以尽量多地发现漏洞,但不能保证发现所有的漏洞。

5.4.1 测试方法

(1)根据程序执行状态可分为 静态测试(Static Testing,ST)和动态测试(Dynamic Testing,DT)

(2)根据是否关注具体实现和内部结构可分为 黑盒测试、白盒测试和灰盒测试

(3)根据程序执行的方式来分类可分为 人工测试(Manual Testing,MT)和自动化测试
(Automatic Testing,AT)

5.4.2 测试阶段

从阶段上划分,软件测试可以分为 单元测试、集成测试、系统测试和验收测试

  • 1)单元测试 主要是对该软件的模块进行测试,往往由程序员自己完成。常采用白盒的静态测
    试如静态分析、代码审查等,也可以采用自动化的动态测试。
  • 2)集成测试 对通过单元测试的模块进行组装测试,以验证组装的正确性,一般采用白盒测试
    和黑盒测试结合的方法。
  • 3)系统测试 检查组装完成的系统是否符合 SRS 的要求。主要测试内容包括功能测试、性能测
    试、健壮性测试、安全性测试等,结束标志是测试工作已满足测试目标所规定的需求覆盖率,并且 测试所发现的缺陷都已全部归零。
  • 4)验收测试 是确认系统满足用户需求或者协议的要求,确保系统能支撑业务运行。

(5)其他测试还有 AB 测试、Web 测试、链接测试和表单测试等。

5.5 净室软件工程

5.5.1 理论基础

净室软件工程(Cleanroom Software Engineering,CSE) 是一种在软件开发过程中强调在软件中建立正确性的需要的方法。CSE 的理论基础主要是函数理论和抽样理论。

5.5.2 技术手段

CSE 使用 盒子结构规约 进行分析和设计建模,并且强调将正确性验证(而不是测试)作为发现和消除错误的主要机制, 可以生成质量非常高的软件。

5.5.3 应用与缺点

CSE 的缺点是太理论化、忽视测试、带有传统软件工程的弊端。

5.6 基于构件的软件工程

5.6.1 构件和构件模型

基于构件的软件工程(Component-Based Software Engineering,CBSE) 是一种基于分布对象技术、 强调通过可复用构件设计与构造软件系统的软件复用途径。用于 CBSE 的构件应该具备以下特征:

  • (1)可组装型: 所有外部交互必须通过公开定义的接口进行。
  • (2)可部署性: 必须能作为一个独立实体在提供其构件模型实现的构件平台上运行。
  • (3)文档化: 构件必须是完全文档化的。
  • (4)独立性: 构件应该是独立的,如确实需要其他构件提供服务,则应显示声明。
  • (5)标准化: 必须符合某种标准化的构件模型。

构件模型定义了构件实现、文档化以及开发的标准。目前主流的构件模型是 Web Services 模 型、Sun 公司的 EJB 模型和微软的.NET 模型 。构件模型包含了一些模型要素如 接口、使用信息和部署信息

构件模型提供了一组被构件使用的通用服务,包括 平台服务和支持服务。容器是构件模型基础设施,是支持服务的一个实现加上一个接口定义,构件必须提供该接口定义以便和容 器整合在一起。

5.6.2 CBSE过程

支持基于构件组装的软件开发过程主要包括:
(1)系统需求概览。
(2)识别候选构件。
(3)根据发现的构件修改需求。
(4)体系结构设计。
(5)构件定制与适配。
(6)组装构件,创建系统。

CBSE 过程与传统的软件开发过程的不同点:
(1)早期需要完整的需求,以便尽可能多地识别出可复用的构件。
(2)早期阶段根据可利用的构件来细化和修改需求以匹配 CBSE。
(3)架构设计完成后,可能需要修改构件以适合功能和架构的需求。
(4)开发过程就是组装构件的过程,有时需要开发适配器。
(5)CBSE 中的架构设计阶段特别重要,决定和限制了可选构件的范围。

5.6.3 构件组装

常见的构件组装有 顺序组装、层次组装和叠加组装 3 种组装方式。构件组装可能面临接口不兼
容的问题,常见的有 参数不兼容、操作不兼容和操作不完备 3 种。这时需要编写适配器构件来解决 不兼容的问题。

5.7 软件项目管理

5.7.1 项目管理概述

软件项目管理 是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员 (People)、 产品 (Product)、 过程 (Process) 和项目 (Project) 进行分析和管理的活动。

5.7.2 软件进度管理

软件进度管理 一般包括活动定义、活动排序、活动资源估计、活动历时估计、制定进度计划和进度控制 6 个过程。活动定义是指确定完成项目的各个可交付成果所必须进行的各项具体活动,还需要明确每个活动的前驱、持续时间、必须完成日期、里程碑或可交付成果。

工作分解结构(Work Breakdown Structure,WBS) 是把一个项目,按一定的原则分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的活动中,直到分解不下去为止。 以可交付成果为导向,对项目要素进行的分组,总是处于计划过程的中心。

任务活动图 是项目进度管理、项目成本管理等一系列项目管理活动的基础,通常采用甘特图等方式来展示和管理项目活动。

5.7.3 软件配置管理

软件配置管理(Software Configuration Management,SCM) 是一种标识、组织和控制修改的技术。SCM 的目的是使错误降为最小并最有效地提高生产效率。

SCM 的核心内容包括 版本控制和变更控制

  • 版本控制(Version Control) 是指对软件开发过程中各种文件变更的管理,最主要的功能就是追踪和记录文件的变更、并行开发。
  • 变更控制(Change Control) 是指对变更进行管理, 确保变更有序进行。

5.7.4 软件质量管理

软件质量就是软件与明确地和隐含地定义的需求相一致的程度。软件质量保证(Software Quality Assurance,SQA) 的目的是使软件过程对于管理人员来说是可见的。SQA 的主要任务是:

  • 1 ) SQA 审计与评审,包括对软件工作产品、软件工具和设备的审计,评审开发组的行为符合 预定的过程。
  • 2 ) SQA 报告
  • 3 ) 处理不符合问题

软件质量认证,国内软件企业主要采用的是 ISO 9001 和 CMM。

5.7.5 软件风险管理

软件项目风险 是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响。风险管理的主要目标是预防风险,及应对发生的风险。风险管理活 动可以分为:

  • 1)Bochm 把风险管理活动分成风险估计(风险辨识、风险分析、风险排序)和风险控制(风 险管理计划、风险处理、风险监督)两大阶段。
  • 2)Charette 把风险分成分析(辨识、估计、评价)和管理(计划、控制、监督)两大阶段。

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

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

相关文章

Qt6 mathgl数学函数绘图

1. 程序环境 Qt6.5.1, mingw11.2mathgl 8.0.1: https://sourceforge.net/projects/mathgl/,推荐下载mathgl-8.0.LGPL-mingw.win64.7z,Windows环境尝试自己编译mathgl会缺失一些库,补充完整也可以自己编译,路径"D:\mathgl-8.0.LGPL-mingw.win64\bin"添加至系统环境…

复试不考机试,初试300分以上,上岸稳了?东北林业大学计算机考研考情分析!

东北林业大学(Northeast Forestry University),简称东北林大(NEFU),位于黑龙江省哈尔滨市,是一所以林科为优势、林业工程为特色的中华人民共和国教育部直属高校,由教育部、国家林业局…

Java多线程--volatile关键字

并发编程的三大特性 可见性有序性原子性 可见性 为什么会有可见性问题? 多核CPU 为了提升CPU效率,设计了L1,L2,L3三级缓存,如图。 如果俩个核几乎同时操作同一块内存,cpu1修改完,当下是对c…

APISIX的安装与测试(springboot服务测试)

安装: 1.1安装依赖: curl https://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh -sL | bash -1.2 安装 OpenResty yum-config-manager --add-repo https://openresty.org/package/centos/openresty.reposudo yum i…

英语翻译程序,可以对用户自己建立的词汇表进行增删查改

⑴ 自行建立一个包含若干英文单词的词汇表文件,系统初始化时导入内存,用于进行句子翻译。 ⑵ 用户可以输入单词或者句子,在屏幕上显示对应翻译结果。 ⑶ 用户可对词汇表进行添加和删除,并能将更新的词汇表存储到文件中。 #defi…

Adobe Acrobat DC无法卸载

控制版面、电脑管家等均无法卸载,使用自身的remove也不能卸载 解决方法:删除Adobe Acrobat DC的注册表 1、首先打开注册列表: 2、根据圈出来的信息,找到以下路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Inst…

现如今AI大环境究竟怎样?

遇到难题不要怕!厚德提问大佬答! 厚德提问大佬答10 你是否对AI绘画感兴趣却无从下手?是否有很多疑问却苦于没有大佬解答带你飞?从此刻开始这些问题都将迎刃而解!你感兴趣的话题,厚德云替你问,你…

车载电子电器架构 —— 智能座舱技术范围(万字长文精讲)

车载电子电器架构 —— 智能座舱技术范围 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

MySQL性能分析工具——EXPLAIN

性能分析工具——EXPLAIN 1、概述 定位了查询慢的SQL之后,我们就可以使用EXPLAIN或DESCRIBE工具做针对性的分析查询语句 。 DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句的优化器模块&…

FreeRTOS基础(五):任务挂起与恢复

今天我们将探讨FreeRTOS中的两个非常重要的函数:任务挂起和恢复函数。在实际的嵌入式系统开发中,我们常常需要在特定条件下暂停某些任务的执行,而在满足某些条件后再恢复这些任务的执行。这就像我们日常生活中的“暂停”和“继续”按钮。无论…

【Kubernetes】Pod理论详解

一、Pod基础概念: Pod是kubernetes中最小的资源管理组件,Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的,例如,用于管理Pod运行…

Unix、Linux 软件包管理快速入门对照

Linux(RHEL、Ubuntu)或者 Unix(macOS、FreeBSD)可以参看下表快速入门: 命令功能/系统Darwin (macOS)FreeBSDDebian/UbuntuRHEL(dnf yum)搜索和查找软件包brew searchpkg searchapt listyum list查看软件包…

生态系统服务功能之碳储量

大家好,这期开始新生态系统服务功能即碳储量的计算,这部分较简单,下面让我们开始吧!!! 碳储量的计算公式 生态系统通过从大气中释放和吸收二氧化碳等温室气体来调节地球气候,而森林、 草原和沼…

Stable Diffusion生成图片的参数查看与抹除方法

前几天分享了几张Stable Diffusion生成的艺术二维码,有同学反映不知道怎么查看图片的参数信息,还有的同学问怎么保护自己的图片生成参数不会泄露,这篇文章就来专门分享如何查看和抹除图片的参数。 查看图片的生成参数 1、打开Stable Diffus…

php反序列化入门

一,php面向对象。 1.面向对象: 以“对象”伪中心的编程思想,把要解决的问题分解成对象,简单理解为套用模版,注重结果。 2.面向过程: 以“整体事件”为中心的编程思想,把解决问题的步骤分析出…

就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi

通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | ->1. 常用选项说明 --build-arg&#xff0c;设…

Windows安装Docker

启用虚拟化 打开 勾选Hyper-V 验证 下载Docker Docker官网 阿里云 安装Docker 傻瓜式安装 遇到问题&#xff1a; 打开命令窗口&#xff0c;执行命令&#xff1a; wsl --update升级完成之后点击Restart按钮即可 切换阿里镜像 https://fmkoym4e.mirror.aliyuncs.com

Firebase Local Emulator Suite详解

文章目录 Firebase Local Emulator Suite 组件安装和使用步骤1. 安装 Firebase CLI2. 初始化 Firebase 项目3. 配置模拟器4. 启动模拟器5. 配置应用程序使用本地模拟器 常见用途 Firebase Local Emulator Suite 是一组本地服务&#xff0c;可以模拟 Firebase 平台的在线服务&am…

每天写两道(五)合并两个有序链表、最长回文子串

21.合并两个有序链表 . - 力扣&#xff08;LeetCode&#xff09; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] (1)迭代法…

小白教你搭建测试环境(docker部署版)

如何使用docker创建多数据库端口&#xff08;云服务器版&#xff09; 背景&#xff1a; 需要搭建一个测试环境&#xff0c;同时还需要不同的端口映射mysql端口。那么我采用的docker拉取mysql镜像&#xff0c;通过宿主机和docker容器端口映射完成。 准备一台云服务器服务器安装…