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

news2025/1/18 21:01:27

文章目录

    • 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.coloradmin.cn/o/1719867.html

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

相关文章

Kafka自定义分区器编写教程

1.创建java类MyPartitioner并实现Partitioner接口 点击灯泡选择实现方法,导入需要实现的抽象方法 2.实现方法 3.自定义分区器的使用 在自定义生产者消息发送时,属性配置上加入自定义分区器 properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,&q…

RabbitMQ(Direct 订阅模型-路由模式)的使用

文章目录 RabbitMQ(Direct 订阅模型-路由模式)一,Direct 订阅模型-路由模式介绍(Routing)二,使用1.添加依赖2.修改配置文件3.创建配置类4.注入RabbitMQ模版引擎5.消息的发送6.消息的接收(监听)7.设置回调函…

2024.5.30学习记录

1 面经复习 LRU 手写 等 2 代码随想录二刷 3 rosebush完成 upload组件 初步完成 form组件

如何设置手机的DNS

DNS 服务器 IP 地址 苹果 华为 小米 OPPO VIVO DNS 服务器 IP 地址 中国大陆部分地区会被运营商屏蔽网络导致无法访问,可修改手机DNS解决。 推荐 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公开DNS参考: 苹果…

鸿蒙开发接口媒体:【@ohos.multimedia.media (媒体服务)】

媒体服务 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 媒体子系…

dubbo复习:(11)使用grpc客户端访问tripple协议的dubbo 服务器

一、服务器端依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

尝试用智谱机器人+知识库,制作pytorch测试用例生成器

尝试用智谱机器人知识库,制作pytorch测试用例生成器 1 保存pytorch算子文档到txt2 创建知识库3 创建聊天机器人4 测试效果5 分享 背景:是否能将API的接口文档和sample放到RAG知识库,让LLM编写API相关的程序呢 小结:当前的实验效果并不理想,可以生成代码,但几乎都存在BUG 1 保存…

Window系统安装Docker

因为docker只适合在liunx系统上运行&#xff0c;如果在window上安装的话&#xff0c;就需要开启window的虚拟化&#xff0c;打开控制面板&#xff0c;点击程序&#xff0c;在程序和功能中可以看到启动和关闭window功能&#xff0c;点开后&#xff0c;找到Hyper-V&#xff0c;Wi…

DevExpress开发WPF应用实现对话框总结

说明&#xff1a; 完整代码Github​&#xff08;https://github.com/VinciYan/DXMessageBoxDemos.git&#xff09;DevExpree v23.2.4&#xff08;链接&#xff1a;https://pan.baidu.com/s/1eGWwCKAr8lJ_PBWZ_R6SkQ?pwd9jwc 提取码&#xff1a;9jwc&#xff09;使用Visual St…

FFmpeg 中 Filters 使用文档介绍

描述 这份文档描述了由libavfilter库提供的过滤器Filters、源sources和接收器sinks。 滤镜介绍 FFmpeg通过libavfilter库启用过滤功能。在libavfilter中,一个过滤器可以有多个输入和多个输出。为了说明可能的类型,我们考虑以下过滤器图: 这个过滤器图将输入流分成两个流,然…

微信小程序-wx.showToast超长文字展示不全

wx.showToast超长文字展示不全 问题解决方法1 问题 根据官方文档&#xff0c;iconnone&#xff0c;最多显示两行文字。所以如果提示信息较多&#xff0c;超过两行&#xff0c;就需要用其他方式解决。 解决方法1 使用vant组件里面的tost 根据官方例子使用&#xff1a; 1、在…

实用软件分享---- i茅台 在windows上自动预约和自动获取小茅运的软件

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

设计模式22——备忘录模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 备忘录模式&#xff08;Mement…

Unity 资源 之 100+风格化武器包-幻想RPG资源分享

Unity 资源 之 100风格化武器包-幻想RPG资源分享 前言资源包内容领取兑换码 前言 在游戏开发的广阔天地中&#xff0c;Unity 一直是备受青睐的强大引擎。而今天&#xff0c;我们要着重为大家介绍一个令人瞩目的 Unity 资源——100风格化武器包-幻想 RPG。 这个武器包就像是一…

移植其他命令行Vivado IDE的工具

移植其他命令行Vivado IDE的工具 介绍 本章介绍如何迁移各种AMD命令行工具以在AMD中使用 Vivado™集成设计环境&#xff08;IDE&#xff09;。 迁移ISE Partgen命令行工具 ISE™Design Suite Partgen工具可获得&#xff1a; •系统上安装的所有设备的信息 •详细的包装信息 您可…

2.5Bump Mapping 凹凸映射

一、Bump Mapping 介绍 我们想要在屏幕上绘制物体的细节&#xff0c;从尺度上讲&#xff0c;一个物体的细节分为&#xff1a;宏观、中观、微观宏观尺度中其特征会覆盖多个像素&#xff0c;中观尺度只覆盖几个像素&#xff0c;微观尺度的特征就会小于一个像素宏观尺度是由顶点或…

谷歌上架,可以用云手机来完成开发者个人号“20+14”封测?

根据谷歌的政策要求&#xff0c;自2023年11月13日之后创建的个人开发者账号&#xff0c;其应用必须满足20人连续14天封闭测试的要求&#xff0c;才能在Google Play 中上架正式版应用。 20人连续测试14天&#xff0c;这对大多数开发者&#xff0c;尤其是那些采用矩阵方式上架的开…

免费生物蛋白质的类chatgpt工具助手copilot:小分子、蛋白的折叠、对接

参考: https://310.ai/copilot 可以通过自然语言通话晚上蛋白质的相关处理:生成序列、折叠等 应该是agent技术调用不同工具实现 从UniProt数据库中搜索和加载蛋白质。使用ESM Fold方法折叠蛋白质。使用310.ai基础模型设计新蛋白质。使用TM-Align方法比较蛋白质。利用Protei…

neutron学习小结

概述 基于yoga版本学习neutron&#xff0c;通过源码、官方文档、部署环境进行学习 neutron-dhcp-agent neutron.agent.dhcp_agent.main 创建server&#xff0c;调oslo_service launch server&#xff0c;最后实际调了server的start方法 neutron.service.Service.start Serv…

编程入门(七)【虚拟机VMware安装Linux系统Ubuntu】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 &#x1f525;前言&#x1f680;Ubuntu知多少&#x1f680;安装的前期准备&am…