【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。
软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”,目前涵盖了计算机软件、计算机网络、计算机应用技术、信息系统、信息服务5大领域,总共27个科目,也是分为初、中、高三个级别。
通信专业主要需要关注“计算机网络”这个专业类别,可以考的科目有初级资格的“网络管理员”、中级的“网络工程师”。
还有5个高级资格专业,分别是“信息系统项目管理师“”系统分析师“”系统架构设计师“”网络规划设计师“”系统规划与管理师“。
软考高级证书在通信行业比较吃香,主要原因有两个: 通信行业与计算机软件是相近专业,评职称满足相近专业的要求; 通信高级不能以考代评,但软考高级可以,很多考生通过考软考高级来评高级职称。
————————————————
目录
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。
5.3软件设计
5.3.1结构化设计
1.模块结构
2.系统结构图
5.3.2面向对象设计
1.实体类
2.控制类
3.边界类
5.3.3统一建模语言
1.UML中的事物
2.UML中的关系
3.UML2.0中的图
4.UML视图
5.3.4设计模式
5.3软件设计
软件设计的目标是根据软件分析的结果,完成软件构建的过程。其主要目的是绘制软件的蓝 图,权衡和比较各种技术和实施方法的利弊,合理分配各种资源,构建新的详细设计方案和相关模 型,指导软件实施工作的顺利开展。
软件设计是需求的延伸与拓展。需求阶段解决“做什么 ”的问题,而软件设计阶段解决“怎么 做 ”的问题。同时,它也是系统实施的基础,为系统实施工作做好铺垫。合理的软件设计方案既可 以保证软件的质量,也可以提高开发效率,确保软件实施工作的顺利进行。从方法上来说,软件设 计分为结构化设计与面向对象设计。
5.3.1结构化设计
结构化设计(Structured Design ,SD)是一种面向数据流的方法,其目的在于确定软件结构。 它以SRS和SA阶段所产生的DFD和数据字典等文档为基础,是一个自顶向下、逐层分解、逐步求精 和模块化的过程。SD方法的基本思想是将软件设计成由相对独立且具有单一功能的模块组成的结 构。从管理角度讲,其分为概要设计和详细设计两个阶段。其中,概要设计又称为总体结构设计, 它是开发过程中很关键的一步,其主要任务是确定软件系统的结构,将系统的功能需求进行模块划 分,确定每个模块的功能、接口和模块之间的调用关系,形成软件的模块结构图,即系统结构图。 在概要设计中,将系统开发的总任务分解成许多个基本的、具体的任务,而为每个具体任务选择适 当的技术手段和处理方法的过程称为详细设计。详细设计的主要任务是为每个模块设计实现的细 节,根据任务的不同,详细设计又可分为多种,例如,输入/输出设计、处理流程设计、数据存储设计、用户界面设计、安全性和可靠性设计等。( 中23下)
1.模块结构
系统是一个整体,它具有整体性的目标和功能,但这些目标和功能的实现又是由相互联系的各 个组成部分共同工作的结果。人们在解决复杂问题时使用的一个很重要的原则,就是将它分解成多 个小问题分别处理,在处理过程中,需要根据系统总体要求,协调各业务部门的关系。在SD中, 这种功能分解就是将系统划分为模块,模块是组成系统的基本单位,它的特点是可以自由组合、分 解和变换,系统中任何一个处理功能都可以看成一个模块。
(1)信息隐藏与抽象。信息隐藏原则要求采用封装技术,将程序模块的实现细节(过程或数据 等)隐藏起来,对于不需要这些信息的其他模块来说是不能访问的,使模块接口尽量简单。按照信 息隐藏的原则,系统中的模块应设计成“黑盒 ”,模块外部只能使用模块接口说明中给出的信息, 如操作和数据类型等。模块之间相对独立,既易于实现,也易于理解和维护。抽象原则要求抽取事 物最基本的特性和行为,参见本章5.2.4小节中关于抽象的说明。
(2)模块化。在SD方法中,模块是实现功能的基本单位,它一般具有功能、逻辑和状态3个基 本属性。其中,功能是指该模块“做什么 ”,逻辑是描述模块内部“怎么做 ”,状态是该模块使用 时的环境和条件。在描述一个模块时,必须按模块的外部特性与内部特性分别描述。模块的外部特 性是指模块的模块名、参数表和给程序乃至整个系统造成的影响;模块的内部特性则是指完成其功 能的程序代码和仅供该模块内部使用的数据。对于模块的外部环境(例如,需要调用这个模块的上 级模块)来说,只需要了解这个模块的外部特性就足够了,不必了解它的内部特性。而软件设计阶 段,通常是先确定模块的外部特性,然后再确定它的内部特性。
(3)耦合。耦合表示模块之间联系的程度。紧密耦合表示模块之间联系非常强,松散耦合表示 模块之间联系比较弱,非直接耦合则表示模块之间无任何直接联系。模块的耦合类型通常分为7 种,根据耦合度从低到高排序如表5-1所示。
表5-1:模块的耦合类型
耦合类型 | 描述 |
非直接耦合 | 两个模块之间没有直接关系,它们之间的联系完全是通过上级模块的控制和调用来 实现的 |
数据耦合 | 一组模块借助参数表传递简单数据 |
标记耦合 | 一组模块通过参数表传递记录等复杂信息(数据结构) |
控制耦合 | 模块之间传递的信息中包含用于控制模块内部逻辑的信息 |
通信耦合 | 一组模块共用了一组输入信息,或者它们的输出需要整合, 以形成完整数据,即共 享了输入或输出 |
公共耦合 | 多个模块都访问同一个公共数据环境,公共的数据环境可以是全局数据结构、共享 的通信区、 内存的公共覆盖区等 |
内容耦合 | 一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模 块的内部;两个模块有一部分程序代码重叠:一个模块有多个入口等 |
对于模块之间耦合的强度,主要依赖于一个模块对另一个模块的调用、一个模块向另一个模块 传递的数据量、一个模块施加到另一个模块的控制的多少, 以及模块之间接口的复杂程度等。
(4) 内聚。 内聚表示模块内部各代码成分之间联系的紧密程度,是从功能角度来度量模块内的 联系,一个好的内聚模块应当恰好做目标单一的一件事情。模块的内聚类型通常也可以分为7种, 根据内聚度从高到低排序如表5-2所示。
表5-2:模块的内聚类型
内聚类型 | 描述 |
功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 处理元素相关,而且必须顺序执行 |
通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
时间内聚 | 所包含的任务必须在同一时间间隔内执行 |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚 | 完成一组没有关系或松散关系的任务 |
一般来说,系统中各模块的内聚越高,则模块间的耦合就越低,但这种关系并不是绝对的。耦 合低使得模块间尽可能相对独立,各模块可以单独开发和维护; 内聚高使得模块的可理解性和维护 性大大增强。因此,在模块的分解中应尽量减少模块的耦合,力求增加模块的内聚,遵循“高内 聚、低耦合 ”的设计原则。
2.系统结构图
系统结构图(Structure Chart ,SC)又称为模块结构图,它是软件概要设计阶段的工具,反映 系统的功能实现和模块之间的联系与通信,包括各模块之间的层次结构,即反映了系统的总体结 构。在系统分析阶段,系统分析师可以采用SA方法获取由DFD 、数据字典和加工说明等组成的系 统的逻辑模型;在系统设计阶段,系统设计师可根据一些规则,从DFD中导出系统初始的SC。
详细设计的主要任务是设计每个模块的实现算法、所需的局部数据结构。详细设计的目标有两个:实现模块功能的算法要逻辑上正确;算法描述要简明易懂。详细设计必须遵循概要设计来进 行。详细设计方案的更改,不得影响到概要设计方案;如果需要更改概要设计,必须经过项目经理 的同意。详细设计应该完成详细设计文档,主要是模块的详细设计方案说明。设计的基本步骤如 下:
●分析并确定输入/输出数据的逻辑结构;
●找出输入数据结构和输出数据结构中有对应关系的数据单元;
●按一定的规则由输入、输出的数据结构导出程序结构;
●列出基本操作与条件,并把它们分配到程序结构图的适当位置;
●用伪码写出程序。
详细设计的表示工具有图形工具、表格工具和语言工具。
(1)图形工具。利用图形工具可以把过程的细节用图形描述出来。具体的图形有业务流程图、 程序流程图、问题分析图(Problem Analysis Diagram ,PAD)、NS流程图(由Nassi和Shneiderman 开发,简称NS)等。
●业务流程图:是一种描述管理系统内各单位、人员之间的业务关系、作业顺序和管理信息流 向的图表。业务流程图的绘制是按照业务的实际处理步骤和过程进行的,它用一些规定的符号及连 线表示某个具体业务的处理过程,帮助分析人员找出业务流中的不合理流向。
●程序流程图:又称为程序框图,是使用最广泛的一种描述程序逻辑结构的工具。它用方框表 示一个处理步骤,用菱形表示一个逻辑条件,用箭头表示控制流向。其优点是结构清晰,易于理 解,易于修改;缺点是只能描述执行过程而不能描述有关的数据。
●NS流程图:也称为盒图或方框图,是一种强制使用结构化构造的图示工具。其具有以下特
点:功能域明确,不可能任意转移控制,很容易确定局部和全局数据的作用域,很容易表示嵌套关 系及模板的层次关系。
●PAD图:是一种改进的图形描述方式,可以用来取代程序流程图,比程序流程图更直观,结 构更清晰。最大的优点是能够反映和描述自顶向下的历史和过程。PAD提供了5种基本控制结构的 图示,并允许递归使用。
(2)表格工具。可以用一张表来描述过程的细节,在这张表中列出了各种可能的操作和相应的 条件。
(3)语言工具。用某种高级语言来描述过程的细节,例如伪码或PDL(Program DesignLanguage)等。PDL也可称为伪码或结构化语言,它用于描述模块内部的具体算法,以便开发人员之间比较精确地进行交流。语法是开放式的,其外层语法是确定的,而内层语法则不确定。外层语 法描述控制结构,它用类似于一般编程语言控制结构的关键字表示,所以是确定的。内层语法描述 具体操作,考虑到不同软件系统的实际操作种类繁多, 内层语法因而不确定,它可以按系统的具体 情况和不同的设计层次灵活选用。
●PDL的优点:可以作为注释直接插在源程序中;可以使用普通的文本编辑工具或文字处理工 具产生和管理; 已经有自动处理程序存在,而且可以自动由PDL生成程序代码。
●PDL的不足:不如图形工具形象直观,描述复杂的条件组合与动作间的对应关系时不如判定 树清晰简单。
5.3.2面向对象设计
面向对象设计(Object-Oriented Design ,OOD)是OOA方法的延续,其基本思想包括抽象、封 装和可扩展性,其中可扩展性主要通过继承和多态来实现。在OOD中,数据结构和在数据结构上 定义的操作算法封装在一个对象之中 。 由于现实世界中的事物都可以抽象出对象的集合,所以 OOD方法是一种更接近现实世界、更自然的软件设计方法。
OOD的主要任务是对类和对象进行设计,这是OOD中最重要的组成部分,也是最复杂和最耗 时的部分。其主要包括类的属性、方法, 以及类与类之间的关系。OOD的结果就是设计模型。对 于OOD而言,在支持可维护性的同时,提高软件的可复用性是一个至关重要的问题,如何同时提 高软件的可维护性和可复用性,是OOD需要解决的核心问题之一。在OOD中,可维护性的复用是 以设计原则为基础的。
常用的OOD原则包括:
●单职原则:一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。
●开闭原则:对扩展开放,对修改封闭。当应用的需求改变时,在不修改软件实体的源代码或 者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
●里氏替换原则:子类可以替换父类,即子类可以扩展父类的功能,但不能改变父类原有的功 能。
●依赖倒置原则:要依赖于抽象,而不是具体实现;要针对接口编程,不要针对实现编程。
●接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
●组合重用原则:要尽量使用组合,而不是继承关系达到重用目的。
●迪米特原则( 最少知识法则):一个对象应当对其他对象有尽可能少的了解。其目的是降低 类之间的耦合度,提高模块的相对独立性。( 高23上)
在OOD中,类可以分为3种类型:实体类、控制类和边界类。
1.实体类
实体类映射需求中的每个实体,是指实体类保存需要存储在永久存储体中的信息。例如,在线 教育平台系统可以提取出学员类和课程类,它们都属于实体类。实体类通常都是永久性的,它们所 具有的属性和关系是长期需要的,有时甚至在系统的整个生存期都需要。实体类对用户来说是最有 意义的类,通常采用业务领域术语命名,一般来说是一个名词,在用例模型向领域模型的转换中, 一个参与者一般对应于实体类。通常可以从SRS中的那些与数据库表(需要持久存储)对应的名词 着手来找寻实体类。通常情况下,实体类一定有属性,但不一定有操作。
2.控制类
控制类是用于控制用例工作的类,一般是由动宾结构的短语( “动词+ 名词 ”或“名词+动 词 ”)转化来的名词。例如,用例“身份验证 ”可以对应于一个控制类“身份验证器 ”,它提供了 与身份验证相关的所有操作。控制类用于对一个或几个用例所特有的控制行为进行建模,控制对象 (控制类的实例)通常控制其他对象,因此,它们的行为具有协调性。
控制类将用例的特有行为进行封装,控制对象的行为与特定用例的实现密切相关,当系统执行 用例的时候,就产生了一个控制对象,控制对象经常在其对应的用例执行完毕后消亡。通常情况 下,控制类没有属性,但一定有方法。
3.边界类
边界类用于封装在用例内、外流动的信息或数据流。边界类位于系统与外界的交接处,包括所 有窗体、报表、打印机和扫描仪等硬件的接口, 以及与其他系统的接口。要寻找和定义边界类,可 以检查用例模型,每个参与者和用例交互至少要有一个边界类,边界类使参与者能与系统交互。边 界类是一种用于对系统外部环境与其内部运作之间的交互进行建模的类。常见的边界类有窗口、通 信协议、打印机接口、传感器和终端等。实际上,在系统设计时,产生的报表都可以作为边界类来 处理。
边界类用于系统接口与系统外部进行交互,边界对象将系统与其外部环境的变更(例如,与其 他系统的接口的变更、用户需求的变更等)分隔开,使这些变更不会对系统的其他部分造成影响。 通常情况下,边界类可以既有属性也有方法。
5.3.3统一建模语言
统一建模语言(Unified Modeling Language ,UML)是一种定义良好、易于表达、功能强大且 普遍适用的建模语言( 中23下2次、23上) 。它融入了软件工程领域的新思想、新方法和新技术, 它的作用域不仅支持OOA(面向对象分析法)和OOD(面向对象设计) ,还支持从需求分析开始 的软件开发的全过程( 高18上)。从总体上来看,UML的结构包括构造块、规则和公共机制3个部分,如表5-3所示。
表5-3:UML的结构
部分 | 说明 |
构造块 | UML有3种基本的构造块,分别是事物(thing)、关系(relationship)和图 ( Diagram)。事物是UML的重要组成部分,关系把事物紧密联系在一起,图是多 个相互关联的事物的集合 |
规则 | 规则是构造块如何放在一起的规定,包括:为构造块命名;给一个名字以特定 含义的语境,即范围;怎样使用或看见名字,即可见性;事物如何正确、一致地相 互联系,即完整性:运行或模拟动态模型的含义是什么,即执行 |
公共机制 | 公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说 明)、修饰、公共分类(通用划分)和扩展机制4种 |
1.UML中的事物
UML中的事物也称为建模元素,包括结构事物(Structural Things) 、行为事物(Behavioral Things ,也称动作事物)、分组事物(Grouping Things)和注释事物(Annotational Things ,也称注 解事物)。这些事物是UML模型中最基本的OO(面向对象)构造块,如表5-4所示。
表5-4:UML中的事物
建模元素 | 说明 |
结构事物 | 结构事物在模型中属于最静态的部分,代表概念上或物理上的元素。UML有 7种结构事物,分别是类、接口、协作、用例、活动类、构件和节点 |
行为事物 | 行为事物是UML模型中的动态部分,代表时间和空间上的动作。UML有两 种主要的行为事物:第一种是交互(内部活动),交互是由一组对象之间在特定 上下文中,为达到特定目的而进行的一系列消息交换而组成的动作,交互中组成 动作的对象的每个操作都要详细列出,包括消息、动作次序(消息产生的动 作)、连接(对象之间的连接);第二种是状态机,状态机由一系列对象的状态 组成 |
分组事物 | 分组事物是UML模型中的组织部分,可以把它们看成盒子,模型可以在其中 进行分解。UML只有一种分组事物,称为包。包是一种将有组织的元素分组的机 制。与构件不同的是,包纯粹是一种概念上的事物,只存在于开发阶段,而构件 可以存在于系统运行阶段 |
注释事物 | 注释事物是UML模型的解释部分 |
2.UML中的关系
UML用关系把事物结合在一起,主要有4种关系:依赖、关联、泛化和实现。
(1)依赖(Dependency) 。依赖是两个事物之间的语义关系,其中一个事物发生变化会影响另 一个事物的语义。
(2)关联(Association)。关联是指一种对象和另一种对象有联系。
(3)泛化(Generalization)。泛化是一般元素和特殊元素之间的分类关系,描述特殊元素的对 象可替换一般元素的对象。
(4)实现(Realization)。实现将不同的模型元素(例如,类)连接起来,其中的一个类指定 了由另一个类保证执行的契约。
3.UML2.0中的图
UML2.0包括14种图,如表5-5所示。
表5-5:UML2.0中的图
种类 | 说明 |
类图(Class Diagram | 类图描述一组类、接口、协作和它们之间的关系。在OO系统的 建模中最常见的图就是类图。类图给出了系统的静态设计视图,活 动类的类图给出了系统的静态进程视图 |
对象图(Object Diagram) | 对象图描述一组对象及它们之间的关系。对象图描述了在类图 中所建立的事物实例的静态快照。和类图一样,这些图给出系统的 静态设计视图或静态进程视图,但它们是从真实案例或原型案例的 角度建立的 |
构件图(Component Diagram) | 构件图描述一个封装的类和它的接口、端口, 以及由内嵌的构 件和连接件构成的内部结构。构件图用于表示系统的静态设计实现 视图。对于由小的部件构建大的系统来说,构件图是很重要的。构 件图是类图的变体 |
组合结构图(Composite Structure Diagram) | 组合结构图描述类中的内部构造,包括结构化类与系统其余部 分的交互点。组合结构图用于画出结构化类的内部内容。组合结构 图比类图更抽象 |
用例图(UseCase Diagram) | 用例图是用户与系统交互的最简表示形式。用例图给出系统的 静态用例视图。这些图在对系统的行为进行组织和建模时是非常重 |
要的 | |
顺序图(Sequence Diagram 也称序列图) | 顺序图也是一种交互图 ,它是强调消息的时间次序的交互图 (Interaction Diagram) 。交互图展现了一种交互,它由一组对象或参 与者以及它们之间可能发送的消息构成。交互图专注于系统的动态 视图 |
通信图(Communication Diagram) | 通信图也是一种交互图,它强调收发消息的对象或参与者的结 构组织。顺序图和通信图表达了类似的基本概念,但它们所强调的 概念不同,顺序图强调的是时序,通信图表达的是对象之间相互协 作完成 一个 复杂 功 能 。 在UML1.X 版本 中 , 通信 图称 为协作 图 (Collaboration Diagram) |
定时图(Timing Diagram也 称计时图) | 定时图也是一种交互图,用来描述对象或实体随时间变化的状 态或值,及其相应的时间或期限约束。它强调消息跨越不同对象或 参与者的实际时间,而不只是关心消息的相对顺序 |
状态图(State Diagram) | 状态图描述一个实体基于事件反应的动态行为,显示了该实体 如何根据当前所处的状态对不同的事件做出反应 。它由状态、转 移、事件、活动和动作组成。状态图给出了对象的动态视图。它对 于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对 象行为,这非常有助于对反应式系统建模 |
活动图(Activity Diagram | 活动图将进程或其他计算结构展示为计算内部一步步的控制流 和数据流。活动图专注于系统的动态视图。它对系统的功能建模和 业务流程建模特别重要,并强调对象间的控制流程。活动图在本质 上是一种流程图 |
部署图(Deployment Diagram) | 部署图描述对运行时的处理节点及在其中生存的构件的配置。 部署图给出了架构的静态部署视图,通常一个节点包含一个或多个 部署图 |
制品图(Artifact Diagram) | 制品图描述计算机中一个系统的物理结构。制品包括文件、数 据库和类似的物理比特集合。制品图通常与部署图一起使用。制品 也给出了它们实现的类和构件 |
包图(Package Diagram) | 包图描述由模型本身分解而成的组织单元,以及它们之间的依赖关 |
系 | |
交互概览图(Interaction Overview Diagram) | 交互概览图是活动图和顺序图的混合物 |
4.UML视图
UML对系统架构的定义是系统的组织结构,包括系统分解的组成部分, 以及它们的关联性、 交互机制和指导原则等提供系统设计的信息。具体来说,就是指逻辑视图、进程视图、实现视图、 部署视图和用例视图这5个系统视图。
(1)逻辑视图。逻辑视图也称为设计视图,它用系统静态结构和动态行为来展示系统内部的功 能是如何实现的,其侧重点在于如何得到功能。它表示了设计模型中在架构方面具有重要意义的部 分,即类、子系统、包和用例实现的子集。
(2)进程视图。进程视图是可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实 例,描述了并发与同步结构。
(3)实现视图。实现视图对组成基于系统的物理代码的文件和构件进行建模。
(4)部署视图。部署视图把构件部署到一组物理节点上,表示软件到硬件的映射和分布结构:
(5)用例视图。用例视图是最基本的需求分析模型。它从外部角色的视角来展示系统功能。 另外,UML还允许在一定的阶段隐藏模型的某些元素、遗漏某些元素, 以及不保证模型的完
整性,但模型要逐步地达到完整和一致。
5.3.4设计模式
设计模式是前人经验的总结,它使人们可以方便地复用成功的软件设计。当人们在特定的环境 下遇到特定类型的问题,采用他人已使用过的一些成功的解决方案,一方面可以降低分析、设计和 实现的难度,另一方面可以使系统具有更好的可复用性和灵活性。设计模式包含模式名称、问题、 目的、解决方案、效果、实例代码和相关设计模式等基本要素。
根据处理范围不同,设计模式可分为类模式和对象模式。类模式处理类和子类之间的关系,这 些关系通过继承建立,在编译时刻就被确定下来,属于静态关系;对象模式处理对象之间的关系, 这些关系在运行时刻变化,更具动态性。
根据目的和用途不同,设计模式可分为创建型(Creational)模式、结构型(Structural)模式 和行为型(Behavioral)模式3种。创建型模式主要用于创建对象,包括工厂方法模式、抽象工厂模 式、原型模式、单例模式和建造者模式等;结构型模式主要用于处理类或对象的组合,包括适配器 模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式等;行为型模式主要用于描述类或对象的交互以及职责的分配,包括职责链模式、命令模式、解释器模式、迭代器模式、中 介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。
1 #include "stdio.h"
2 void main()
3 {
4 int time;
5 for (time=1;time<=10;time++)
6 printf("%d、喜欢的帮忙点赞收藏加关注哦!\n",time);
7 }
相关文章:
![](https://i-blog.csdnimg.cn/direct/10fcca012a6a4786a2d5b190454b4b69.png)
【中项】系统集成项目管理工程师-第5章 软件工程-5.3软件设计
前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…...
![](https://www.ngui.cc/images/no-images.jpg)
C++学习笔记-内联函数使用和含义
引言 内联函数是C为了优化在函数的调用带来的性能开销而设计的,特别是当函数体很小且频繁调用时,内联函数可以让编译器在调用点直接展开函数体,从而避免了函数调用的开销。 一、内联函数的定义与含义 1.1 定义 内联函数是通过在函数声明或…...
![](https://i-blog.csdnimg.cn/direct/d37bbca50e3b43a2afea05d90ef71aa1.png)
数据库(MySQL)-视图、存储过程、触发器
一、视图 视图的定义、作用 视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。但是视图只能用来查看表,不能做增删改查。 视图的作用:①简化查询 ②重写格式化数据 ③频繁访问数据库 ④过…...
![](https://www.ngui.cc/images/no-images.jpg)
js 优雅的实现模板方法设计模式
在JavaScript中,优雅地实现模板方法设计模式通常意味着我们要遵循一些最佳实践,如清晰地定义算法的骨架(模板方法),并确保子类能够灵活地扩展或修改这些算法中的特定步骤。由于JavaScript是一种动态语言,我…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言——输入输出
C语言——输入输出 输入输出函数的类型getcharputcharprintf占位符的分类 scanf 什么是输入输出呢? 所谓输入输出是以计算机为主机而言的,往内存中输入数据为输入,反之从内存中输出数据为输出。 输入输出的功能 C语言本身是不提供输入输出功能…...
![](https://i-blog.csdnimg.cn/direct/2447ef28de5f4444b7191e8c2cb8b11b.gif#pic_center)
【微软蓝屏】微软Windows蓝屏问题汇总与应对解决策略
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
![](https://i-blog.csdnimg.cn/direct/6e2c09dbc3874577bcc47c85af620702.png#pic_center)
OpenCV图像滤波(2)均值平滑处理函数blur()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,blur()函数用于对图像应用简单的均值模糊(mean blur)。这种模糊效果可以通过将图像中的每个像素替…...
![](https://i-blog.csdnimg.cn/direct/42b1b35c9f494735a09bd4bd7ce2032a.png)
Android lmkd机制详解
目录 一、lmkd介绍 二、lmkd实现原理 2.1 工作原理图 2.2 初始化 2.3 oom_adj获取 2.4 监听psi事件及处理 2.5 进程选取与查杀 2.5.1 进程选取 2.5.2 进程查杀 三、关键系统属性 四、核心数据结构 五、代码时序 一、lmkd介绍 Android lmkd采用epoll方式监听linux内…...
![](https://www.ngui.cc/images/no-images.jpg)
linux shell(中)
结构化命令 if语句 if-then 最基本的结构化命令是 if-then 语句。if-then 语句的格式如下: if command thencommands ifif command; then # 通过把分号(;)放在待求值的命令尾部,可以将 then 语句写在同一行commands ifbash sh…...
![](https://i-blog.csdnimg.cn/direct/c6a71de960d84954bd9d5f1993e98b97.png)
VMware三种网络模式---巨细
文章目录 目录 ‘一.网络模式概述 二.桥接模式 二.NAT模式 三.仅主机模式 四.案例演示 防火墙配置: 虚拟电脑配置 前言 本文主要介绍VMware的三种网络模式 ‘一.网络模式概述 VMware中分为三种网络模式: 桥接模式:默认与宿主机VMnet0绑…...
![](https://i-blog.csdnimg.cn/direct/e47bd7173dc14f9ebb7015e2b9267c3f.png)
力扣高频SQL 50 题(基础版)第一题
文章目录 力扣高频SQL 50 题(基础版)第一题1757.可回收且低脂的产品题目说明思路分析实现过程准备数据:实现方式:结果截图: 力扣高频SQL 50 题(基础版)第一题 1757.可回收且低脂的产品 题目说…...
![](https://i-blog.csdnimg.cn/direct/65de060b9aa34454a770771d5c1d28cd.png#pic_center)
2.1.卷积层
卷积 用MLP处理图片的问题:假设一张图片有12M像素,那么RGB图片就有36M元素,使用大小为100的单隐藏层,模型有3.6B元素,这个数量非常大。 识别模式的两个原则: 平移不变性(translation inva…...
![](https://img-blog.csdnimg.cn/img_convert/db310765805092370625ac197c1c57be.png)
网易《永劫无间》手游上线,掀起游戏界狂潮
原标题:网易《永劫无间》手游上线,网友:发烧严重 易采游戏网7月26日消息:自网易宣布《永劫无间》手游即将上线以来,广大游戏玩家的期待值就不断攀升。作为一款拥有丰富内容和极高自由度的游戏,《永劫无间》…...
![](https://i-blog.csdnimg.cn/direct/6a745223e3364e848a57fc6ad90c324c.png)
RNN(一)——循环神经网络的实现
文章目录 一、循环神经网络RNN1.RNN是什么2.RNN的语言模型3.RNN的结构形式 二、完整代码三、代码解读1.参数return_sequences2.调参过程 一、循环神经网络RNN 1.RNN是什么 循环神经网络RNN主要体现在上下文对理解的重要性,他比传统的神经网络(传统的神…...
![](https://www.ngui.cc/images/no-images.jpg)
php 根据位置的经纬度计算距离
在开发中,我们要经常和位置打交道,要计算附近的位置、距离什么的。如下: 一.sql语句 SELECT houseID,title,location,chamber,room,toward,area,rent,is_verify,look_type,look_time, traffic,block_name,images,tag,create_time,update_time, location->&g…...
![](https://i-blog.csdnimg.cn/direct/f1395822eb854aaa930d0928729374a3.png)
17 Python常用内置函数——基本输入输出
input() 和 print() 是 Python 的基本输入输出函数,前者用来接收用户的键盘输入,后者用来把数据以指定的格式输出到标准控制台或指定的文件对象。无论用户输入什么内容,input() 一律作为字符串对待,必要时可以使用内置函数 int()、…...
![](https://i-blog.csdnimg.cn/direct/200b86f8e5c248a697b679c86077a45f.png)
【Web】LitCTF 2024 题解(全)
目录 浏览器也能套娃? 一个....池子? 高亮主题(划掉)背景查看器 百万美元的诱惑 SAS - Serializing Authentication exx 浏览器也能套娃? 随便试一试,一眼ssrf file:///flag直接读本地文件 一个....池子? {…...
![](https://img-blog.csdnimg.cn/06d1f6e6a5f54a4191dd14caaccc0eea.jpg)
家政项目小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,家政人员管理,家政服务管理,咨询信息管理,咨询服务管理,家政预约管理,留言板管理,系统管理 微信端账号功能…...
![](https://i-blog.csdnimg.cn/direct/92dae9bdef44460baaac4adbaf75dabb.png)
electron TodoList网页应用打包成linux deb、AppImage应用
这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…...
![](https://i-blog.csdnimg.cn/direct/e026b280bc1943eba35a9ee61bdc72cc.png)
【C语言】 使用fgets和fputs完成两个文件的拷贝
目录 1、使用fgets和fputs完成两个文件的拷贝 2、使用fgets统计给定文件的行号 fgets和fputs的使用方法函数原型:int fputs(const char *s,FILE *stream); char *fgets(char *s,int size,FILE *stream);fupts…...
![](https://img-blog.csdnimg.cn/e53507633ab14664a6271c43e97fe635.png#pic_center)
使用PyTorch导出JIT模型:C++ API与libtorch实战
PyTorch导出JIT模型并用C API libtorch调用 本文将介绍如何将一个 PyTorch 模型导出为 JIT 模型并用 PyTorch 的 CAPI libtorch运行这个模型。 Step1:导出模型 首先我们进行第一步,用 Python API 来导出模型,由于本文的重点是在后面的部署…...
![](https://i-blog.csdnimg.cn/direct/f2cbaeccdac74ddaaba83bc25e369245.png)
Python——异常捕获,传递及其抛出操作
01. 异常的概念 1. 程序在运行时,如果 python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常。 2. 程序停止执行并且提示错误信息这个动作,我们通常称之为:抛出(raise…...
![](https://www.ngui.cc/images/no-images.jpg)
【Maven】 的继承机制
Maven是一个强大的项目管理工具,主要用于Java项目的构建和管理。它以其项目对象模型(POM)为基础,允许开发者定义项目的依赖、构建过程和插件。Maven的继承机制是其核心特性之一,它允许子项目继承和复用父项目的配置&am…...
![](https://www.ngui.cc/images/no-images.jpg)
微信小程序结合后端php发送模版消息
前端: <view class"container"><button bindtap"requestSubscribeMessage">订阅消息</button> </view> // index.js Page({data: {tmplIds: [UTgCUfsjHVESf5FjOzls0I9i_FVS1N620G2VQCg1LZ0] // 使用你的模板ID},requ…...
![](https://www.ngui.cc/images/no-images.jpg)
sqlalchemy报错sqlalchemy.orm.exc.DetachedInstanceError
解决方案: 在初始化数据库的代码中,将 maker sessionmaker(bindeng)修改为 maker sessionmaker(bindeng, expire_on_commitFalse)为什么要添加 expire_on_commitFalse 参数? expire_on_commit 可以用来更改 SQLAlchemy 的对象刷新机制&…...
![](https://img-blog.csdnimg.cn/img_convert/d6a8f79d1b0bb5d2d50f274c43246a62.png)
华为网络模拟器eNSP安装部署教程
eNSP是图形化网络仿真平台,该平台通过对真实网络设备的仿真模拟,帮助广大ICT从业者和客户快速熟悉华为数通系列产品,了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力,从而帮助企业构建更高效࿰…...
![](https://img-blog.csdnimg.cn/direct/ee9077c56a1c476d803af8a178e0eb98.gif#pic_center)
【React】详解样式控制:从基础到进阶应用的全面指南
文章目录 一、内联样式1. 什么是内联样式?2. 内联样式的定义3. 基本示例4. 动态内联样式 二、CSS模块1. 什么是CSS模块?2. CSS模块的定义3. 基本示例4. 动态应用样式 三、CSS-in-JS1. 什么是CSS-in-JS?2. styled-components的定义3. 基本示例…...
![](https://img-blog.csdnimg.cn/img_convert/3eefee19a01157368b2800470e218716.png)
【ROS2】高级:安全-理解安全密钥库
目标:探索位于 ROS 2 安全密钥库中的文件。 教程级别:高级 时间:15 分钟 内容 背景安全工件位置 公钥材料 私钥材料域治理政策 安全飞地 参加测验! 背景 在继续之前,请确保您已完成设置安全教程。 sros2 包可以用来创…...
![](https://i-blog.csdnimg.cn/direct/57f38d6a0f004782a05e05240512b26c.png)
C语言 ——— 数组指针的定义 数组指针的使用
目录 前言 数组指针的定义 数组指针的使用 前言 之前有编写过关于 指针数组 的相关知识 C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 指针数组 顾名思义就是 存放指针的数组 那什么是数组指针呢? 数组指针的定义 何为数组指针…...
![](https://i-blog.csdnimg.cn/direct/df0e89de0dd54b42acc3bec74a39752c.png)
opencascade AIS_ManipulatorOwner AIS_MediaPlayer源码学习
前言 AIS_ManipulatorOwner是OpenCascade中的一个类,主要用于操纵对象的交互控制。AIS_ManipulatorOwner结合AIS_Manipulator类,允许用户通过可视化工具(如旋转、平移、缩放等)来操纵几何对象。 以下是AIS_ManipulatorOwner的基…...
![](https://www.ngui.cc/images/no-images.jpg)
如何防止用户通过打印功能复制页面文字
简单防白嫖,要让打印出来的页面是空白,通常的做法是在打印时隐藏页面上的所有内容。这可以通过CSS的媒体查询(Media Queries)来实现,特别是针对media print的查询。 在JavaScript中,你通常不会直接控制打印…...
![](https://i-blog.csdnimg.cn/direct/393a76daee2b4afaa506b91a7462e57f.png)
Python3网络爬虫开发实战(3)网页数据的解析提取
文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …...
![](https://i-blog.csdnimg.cn/blog_migrate/2ec2950ee0d2fb09bbaba07889dcf38a.png)
基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)
构建监控平台数据可视化大屏:基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示,运维团队可以迅速发现异常,优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…...
![](https://i-blog.csdnimg.cn/direct/3e04ba8d334c41e0beddeeb6e5d280f7.png#pic_center)
立创梁山派--移植开源的SFUD和FATFS实现SPI-FLASH文件系统
本文主要是在sfud的基础上进行fatfs文件系统的移植,并不对sfud的移植再进行过多的讲解了哦,所以如果想了解sfud的移植过程,请参考我的另外一篇文章:传送门 正文开始咯 首先我们需要先准备资料准备好,这里对于fatfs的…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL之视图和索引实战
1.新建数据库 mysql> create database myudb5_indexstu; Query OK, 1 row affected (0.01 sec) mysql> use myudb5_indexstu; Database changed 2.新建表 1.学生表student,定义主键,姓名不能重名,性别只能输入男或女,所在…...
![](https://img-blog.csdnimg.cn/img_convert/546fdb6abc94773e00c3a4a384ef5b7d.png)
快速参考:用C# Selenium实现浏览器窗口缩放的步骤
背景介绍 在现代网络环境中,浏览器自动化已成为数据抓取和测试的重要工具。Selenium作为一个强大的浏览器自动化工具,能够与多种编程语言结合使用,其中C#是非常受欢迎的选择之一。在实际应用中,我们常常需要调整浏览器窗口的缩放…...
![](https://www.ngui.cc/images/no-images.jpg)
MyBatis 插件机制、分页插件如何实现的
MyBatis 插件机制允许开发者在 SQL 执行的各个阶段(如预处理、执行、结果处理等)中插入自定义逻辑,从而实现对 MyBatis 行为的扩展和增强。以下是 MyBatis 插件运行原理的详细介绍: 插件接口 MyBatis 插件通过实现 org.apache.i…...
![](https://i-blog.csdnimg.cn/direct/fc23aef012fa4349af2bdd190d50f4ea.png)
CentOS6.0安装telnet-server启用telnet服务
CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…...
![](https://img-blog.csdnimg.cn/a3509e58320e472ca12a3ba2787080da.jpg)
H5+CSS+JS工作性价比计算器
工作性价比=平均日新x综合环境系数/35 x(工作时长+通勤时长—0.5 x摸鱼时长) x学历系数 如果代码中的公式不对,请指正 效果图 源代码 <!DOCTYPE html> <html> <head> <style> .calculator { width: 300px; padd…...
![](https://i-blog.csdnimg.cn/direct/e381446f4f8142adb1a7a3d64930ea57.png)
Linux:基础命令学习
目录 一、ls命令 实例:-l以长格式显示文件和目录信息 实例:-F根据文件类型在列出的文件名称后加一符号 实例: -R 递归显示目录中的所有文件和子目录。 实例: 组合使用 Home目录和工作目录 二、目录修改和查看命令 三、mkd…...
![](https://img-blog.csdnimg.cn/direct/15f11b9000784d40a96da05717b0d9b0.jpeg)
遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....
websocket 是一种双向通信协议,在建立连接后,websocket服务端和客户端都能主动向对方发送或者接收数据,而在http协议中,一个request只能有一个response,而且这个response也是被动的,不能主动发起。 websoc…...
![](https://img-blog.csdnimg.cn/img_convert/e16b92698e81a7b38d48c242e9644c60.png)
高性能 Java 本地缓存 Caffeine 框架介绍及在 SpringBoot 中的使用
在现代应用程序中,缓存是一种重要的性能优化技术,它可以显著减少数据访问延迟,降低服务器负载,提高系统的响应速度。特别是在高并发的场景下,合理地使用缓存能够有效提升系统的稳定性和效率。 Caffeine 是一个高性能的…...
![](https://img-blog.csdnimg.cn/img_convert/6f391b7b9050f989db459c0d349ac6f1.png)
Http 和 Https 的区别(图文详解)
在现代网络通信中,保护数据的安全性和用户的隐私是至关重要的。HTTP(Hypertext Transfer Protocol)和 HTTPS(Hypertext Transfer Protocol Secure)是两种常见的网络通信协议,但它们在数据保护方面的能力存在…...
![](https://www.ngui.cc/images/no-images.jpg)
DP学习——外观模式
学而时习之,温故而知新。 外观模式 角色 2个角色,外观类,子系统类。 个人理解 感觉就是对外接口封装,这个是封装一个功能的对外接口,越简单越好,提供给第三方用。 应用场景 封装为对外库时ÿ…...
![](https://img-blog.csdnimg.cn/img_convert/3382fbe3704145e96b3a66bc80e72d62.png)
Vue3 + Vite 打包引入图片错误
1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入,注意src最好引用为符引入,不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …...
![](https://i-blog.csdnimg.cn/direct/4220100a42054dd28fbb7dbf3f45862d.png)
搭建NFS、web、dns服务器
目录 1、搭建一个nfs服务器,客户端可以从该服务器的/share目录上传并下载文件 服务端配置: 客户端测试: 2、搭建一个Web服务器,客户端通过www.haha.com访问该网站时能够看到内容:this is haha 服务端配置: 客户端…...
![](https://i-blog.csdnimg.cn/direct/37ad7f6bdfd34fe8a1b532122c80a523.png)
C++的UI框架和开源项目介绍
文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目:QGIS(地理信息系统) https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目:filezilla https://svn.filezilla-project.org/svn/ wxWidg…...
![](https://i-blog.csdnimg.cn/direct/de36a03649cd4a8aa6faf3da1bcdc69a.png)
SpringBoot连接PostgreSQL+MybatisPlus入门案例
项目结构 一、Java代码 pom.xml <?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://mave…...
![](https://i-blog.csdnimg.cn/direct/1c397a795d864de78ab3c79c0f52debc.png)
vue3里将table表格中的数据导出为excel
想要实现前端对表格中的数据进行导出,这里推荐使用xlsx这个依赖库实现。 1、安装 pnpm install xlsx 2、使用 import * as XLSX from "xlsx"; 直接在组件里导入XLSX库,然后给表格table通过ref创建响应式数据拿到table实例,将实…...
![](https://i-blog.csdnimg.cn/direct/6e3fc20a3a7a42e09016092262087b6e.png)
【算法】分布式共识Paxos
一、引言 在分布式系统中,一致性是至关重要的一个问题。Paxos算法是由莱斯利兰伯特(Leslie Lamport)在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算…...