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

软件系统开发

目录

软件开发方法

软件开发生命周期

软件开发模型

敏捷方法

敏捷型方法两个特点

敏捷方法的核心思想三点

4个核心价值观

主要敏捷方法

RUP

RUP的核心特点:

RUP软件开发生命周期

9个核心工作流

RUP裁剪

软件系统工具

软件开发工具

需求分析工具

设计工具

编码与排错工具

测试工具

软件维护工具

版本控制工具

文档分析工具

开发信息库工具

逆向工程工具

再工程工具

软件管理工具

项目管理工具

配置管理工具

软件评价工具

关键支持工具

设计原则

耦合类型

内聚类型

需求管理

主要活动

CMM 过程能力成熟度模型(Capability Maturity Model, CMM)

开发管理

项目的范围,时间,成本

配置管理

文档管理

设计方法

软件的重用

逆向工程和重构工程



软件开发方法

软件开发生命周期

按照传统的软件生命周期方法学,可以把软件生命期划分为软件定义、软件开发、软件运行与维护三个阶段。

软件定义:软件定义包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标。具体可分成问题定义、可行性研究、需求分析。需求分析工作完成后要提交软件需求规格说明(Software Requirements Specification, SRS)​。内容可以有系统(或子系统)名称、功能描述、接口、基本数据结构、性能、设计需求、开发标准、验收原则等。

软件开发:软件开发时期就是软件的设计与实现,可分成概要(总体)设计、详细设计、编码、测试等。概要设计是在软件需求规格说明的基础上,建立系统的总体结构(含子系统的划分)和模块间的关系,定义功能模块及各功能模块之间的关系。详细设计对概要设计产生的功能模块逐步细化,把模块内部细节转化为可编程的程序过程性描述。详细设计包括算法与数据结构、数据分布、数据组织、模块间接口信息和用户界面等的设计,并写出详细设计报告。

软件开发模型

瀑布模型(waterfall model),瀑布模型的特点是因果关系紧密相连,前一个阶段工作的结果是后一个阶段工作的输入。或者说,每一个阶段都是建筑在前一个阶段正确结果之上,前一个阶段的错漏会隐蔽地带到后一个阶段。这种错误有时甚至可能是灾难性的。因此每一个阶段工作完成后,都要进行审查和确认,这是非常重要的。【软件需求分析的准确性很难确定,甚至是不可能和不现实的。】

原型模型(prototype model)又称快速原型。由于瀑布型的缺点,原型模型(prototype model)又称快速原型。开发原型可以考虑以下三种途径:● 利用模拟软件系统的人机界面和人机交互方式。● 真正开发一个原型。● 找来一个或几个正在运行的类似软件进行比较。开发原型可以考虑以下三种途径:● 利用模拟软件系统的人机界面和人机交互方式。● 真正开发一个原型。● 找来一个或几个正在运行的类似软件进行比较。

螺旋模型(Spiral Model)是在快速原型的基础上扩展而成。也有人把螺旋模型归到快速原型,实际上,它是生命周期模型与原型模型的一个结合,螺旋模型(Spiral Model)是在快速原型的基础上扩展而成。也有人把螺旋模型归到快速原型,实际上,它是生命周期模型与原型模型的一个结合,

1)目标设定。为该项目进行需求分析,定义和确定这一个阶段的专门目标,指定对过程和产品的约束,并且制定详细的管理计划。

(2)风险分析。对可选方案进行风险识别和详细分析,制定解决办法,采取有效的措施避免这些风险。

(3)开发和有效性验证。风险评估后,可以为系统选择开发模型,并且进行原型开发,即开发软件产品。

(4)评审。对项目进行评审,以确定是否需要进入螺旋线的下一次回路,如果决定继续,就要制定下一阶段计划。

螺旋模型的软件开发过程实际是上述4个部分的迭代过程,每迭代一次,螺旋线就增加一周,软件系统就生成一个新版本,这个新版本实际上是对目标系统的一个逼近(更接近一步)​。经过若干次的迭代后,系统应该尽快地收敛到用户允许或可以接受的目标范围内,否则也有可能中途夭折。【该模型支持大型软件开发,适用于面向规格说明、面向过程和面向对象的软件开发方法,也适用于几种开发方法的组合。】

基于可重用构件的模型

基于面向对象的模型

四代语言(4th Generation Language, 4GL)

(1)用于快速开发应用软件的高产工具(重点强调了提高软件开发的生产率)​。(2)用于快速事务处理系统的高产工具(突出了主要应用领域)​。其主要特征描述如下。(1)它是非过程化的语言,目的在于高效、直接地实现各种应用系统。它完全不用编程的方式来构造应用系统。程序员可以不再使用通常编程的方法、算法等来完成某一个功能,而是利用一些生成器,例如,菜单生成器、报表生成器、屏幕生成器、图形软件包等。在屏幕上以对话的交互方式,通过填表或操作屏幕上的窗口和按钮图标,或者在某一个按钮定义时加上适当的一段程序……从而构造用户需要的应用系统生成器自动生成源程序。(2)它与数据库的关系密切,能够对大型数据库进行高效处理。它被广泛地应用于数据库管理系统中。

敏捷方法

敏捷型方法两个特点

● 敏捷型方法是“适应性”​(adaptive)而非“预设性”​(predictive)的。重型方法试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。

● 敏捷型方法是,​“面向人的”​(people-oriented)而非“面向过程的”​(process-oriented)​。它们试图使软件开发工作能够利用人的特点,充分发挥人的创造能力。它们强调软件开发应当是一项愉快的活动。

敏捷方法的核心思想三点

(1)敏捷方法是适应型,而非可预测型。与传统方法不同,敏捷方法拥抱变化,也可以说它的初衷就是适应变化的需求,利用变化来发展,甚至改变自己,最后完善自己。

(2)敏捷方法是以人为本,而非以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它。并且软件开发在无过程控制和过于严格繁琐的过程控制中取得一种平衡,以保证软件的质量。

(3)迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化。它根据客户需求的优先级和开发风险,制定版本发行计划,每一发行版都是在前一成功发行版的基础上进行功能需求扩充,最后满足客户的所有功能需求。

敏捷型方法认为最根本的文档应该是源码,而不是繁琐的文档。

敏捷方法的主要内容包括4个核心价值观和12条过程实践规则。

4个核心价值观

  • 沟通,它强调设计者、开发者和客户三者之间的有效交流是开发成功的关键;
  • 简单是设计和编码的指导原则,它强调只满足当前功能需求,不做假想设计,尽量使代码简单化;
  • 反馈,强调设计者、开发者和客户之间及时和详尽的意见反馈是开发成功的保证;
  • 勇气,是开发适应变化的前提,要求设计者和开发者在必需做出取舍或重构时,勇于抉择,勇于实践。

依据敏捷方法的4个核心价值观,提出12条过程实践规则,分别为简单设计、测试驱动、代码重构、结对编程、持续集成、现场客户、发行版本小型化、系统隐喻、代码集体所有制、规划策略、规范代码、40小时工作机制。

主要敏捷方法

XP(Extreme Programming,极限编程)提倡小型版本发布,每一轮迭代大约两周

-只处理当前的需求,使设计保持简单。

-编写完程序之后编写测试代码。

-系统最终用户代表应该全程配合XP团队

-极限编程(XP) 由价值观、原则、实践和行为4个部分组成,其中 4大价值观为沟通、简单性、反馈和勇气

并列争求法(Scrum):使用迭代的增量化过程,按需求的优先级来实现产品,把每30天一次的迭代称为一个“冲刺”

自适应开发(ASD)Adaptive Software Development:强调开发方法的适应性,有6个基本原则。其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。

水晶方法(Crystal):水晶法认为每一个不同项目都需要一套不同的策略,约定和方法论

敏捷统一过程 AUP:敏捷统一过程 (Agile Unified Process,AUP)采用“在大型上连续”以及在“在小型上迭代”的原理来构建软件系统。

统一过程模型(UP Unified Process)一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程.

①起始阶段Inception Phase:专注于项目的初创活动

②精化阶段Elaboration Phase:理解了最初的领域范围之后进行需求分析和架构演进

③构建阶段Construction Phase:设计转化为实现,并进行集成和测试

④移交阶段.Transition Phase:软件提交方面的工作,产生软件增量,产生的主要工作产品有提交的软件增量、β测试报告和综合用户反馈

RUP

RUP(Rational Unified Process)是一种软件开发过程框架, Rational表示RUP是由Rational公司提出的,Unified表示RUP是最佳开发经验总结,而Process表示RUP是一个软件开发过程。RUP提供了一种结构化的方法来管理软件开发项目,旨在提高软件开发的质量和效率。它结合了面向对象的设计原则和迭代开发的理念。

RUP的核心特点:

RUP是用例驱动的、以体系结构为中心的、迭代和增量的软件开发过程。

1.RUP中的开发活动是用例驱动的,即需求分析、设计、实现和测试等活动都是用例驱动的。

2.以体系结构为中心,在RUP中,是采用如图4-6所示的“4+1”视图模型来描述软件系统的体系结构。在“4+1”视图模型中,分析人员和测试人员关心的是系统的行为,因此会侧重于用例视图;最终用户关心的是系统的功能,因此会侧重于逻辑视图;程序员关心的是系统的配置、装配等问题,因此会侧重于实现视图;系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,因此会侧重于进程视图;系统工程师关心的是系统的发布、安装、拓扑结构等问题,因此会侧重于部署视图。

3.迭代和增量开发**:RUP强调通过多个迭代周期逐步开发和完善软件,每个迭代都包括需求分析、设计、实现和测试等活动。软件开发采用迭代和增量的方式有以下好处:(1)在软件开发的早期就可以对关键的、影响大的风险进行处理。(2)可以提出一个软件体系结构来指导开发。(3)可以更好地处理不可避免的需求变更。(4)可以较早地得到一个可运行的系统,鼓舞开发团队的士气,增强项目成功的信心。(5)为开发人员提供一个能更有效工作的开发过程。

*角色和职责**:RUP定义了在软件开发过程中不同角色的职责,包括项体系结构师(architect)​、设计人员(designer)​、实现人员(implementer)​、测试员(tester)和配置管理人员(configuration manager)等。

RUP软件开发生命周期

这4个阶段如下。

● 初始(inception)阶段:定义最终产品视图和业务模型,并确定系统范围。

● 细化(elaboration)阶段:设计及确定系统的体系结构,制定工作计划及资源要求。

● 构造(construction)阶段:构造产品并继续演进需求、体系结构、计划直至产品提交。

● 移交(transition)阶段:把产品提交给用户使用。

9个核心工作流

业务建模(business modeling)​:理解待开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估待开发系统对所在机构的影响。

需求(requirements)​:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础。

分析与设计(analysis & design)​:把需求分析的结果转化为分析与设计模型。

实现(implementation)​:把设计模型转换为实现结果,对开发的代码做单元测试,将不同实现人员开发的模块集成为可执行系统。

测试(test)​:检查各子系统的交互与集成,验证所有需求是否均被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议。

部署(deployment)​:打包、分发、安装软件,升级旧系统;培训用户及销售人员,并提供技术支持。

配置与变更管理(configuration & change Management)​:跟踪并维护系统开发过程中产生的所有制品的完整性和一致性。

项目管理(project management)​:为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架。

环境(environment)​:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持。

RUP裁剪

RUP是一个通用的过程模板,针对具体的开发机构和项目,应用RUP时还要做裁剪,也就是要对RUP进行配置。RUP裁剪可分为以下几步:

(1)确定本项目的软件开发过程需要哪些工作流。RUP的9个核心工作流并不总是需要的,可以根据项目的规模、类型等对核心工作流做一些取舍。如嵌入式软件系统项目一般就不需要业务建模这个工作流。

2)确定每个工作流要产出哪些制品。如规定某个工作流应产出哪些类型的文档。

(3)确定4个阶段之间(初始阶段、细化阶段、构造阶段和移交阶段)如何演进。确定阶段间演进要以风险控制为原则,决定每个阶段要执行哪些工作流,每个工作流执行到什么程度,产出的制品有哪些,每个制品完成到什么程度等。

(4)确定每个阶段内的迭代计划。规划RUP的4个阶段中每次迭代开发的内容有哪些。迭代是RUP非常强调的一个概念,可以进一步降低开发风险。

(5)规划工作流内部结构。工作流不是活动的简单堆积,工作流涉及角色、活动和制品,工作流的复杂程度与项目规模及角色多少等有很大关系,这一步决定裁剪后的RUP要设立哪些角色。最后,规划工作流的内部结构,通常用活动图的形式给出。

软件系统工具

软件开发工具

需求分析工具

按描述需求定义的方法可将需求分析工具分为基于自然语言或图形描述的工具基于形式化需求定义语言的工具。

基于自然语言或图形描述的工具,采用分解与抽象等基本手段,对用户问题逐步求精,如:

结构化分析方法采用数据流图的描述方法,分析的主要结果是一套分层的数据流图和一个数据词典。结构化需求分析工具通常由图形编辑器、数据词典管理器和检测机制三部分组成。使用图形编辑器绘制数据流图,该图形编辑器应支持图形的分层结构,以构成分层数据流图。在构造数据流图的同时把数据流图的有关信息(如加工名、数据流名、数据项、文件名等及它们之间的联系)填入数据词典。在填写数据词典的过程中,数据词典管理器即可查出重名等错误。在构造出分层数据流图后,可通过检测机制来检查分层数据流图的合法性,可发现诸如父图与子图不平衡,遗漏的数据流(如无输入数据流或无输出数据流的加工)​,只有读文件没有写文件或只有写文件没有读文件等错误。然后将修改后的数据流图和词典与用户交流,考察它是否符合用户的功能需求。若不一致,再使用图形编辑器进行修改。需求分析工具还应具备同步修改的功能,即修改数据流图的同时也修改数据词典中的有关信息,以保持数据流图与数据词典的一致性。经过多次反复的交流和修改,使功能规范逐步达到准确、完整和一致,最后形成有效的功能规范。除此以外,该工具还可浏览数据词典,生成各种统计或查询报告。

基于形式化需求定义语言的工具大多以基于知识的需求智能助手的形式出现,并把人工智能技术运用于软件工程。这类工具通常具有一个知识库和一个推理机制。知识库中存放需求分析所需的公共知识,以及特定的应用领域知识。这些知识能用来理解需求定义中的省略写法,能部分消除不完整性和歧义性。推理机制能容忍需求定义的无序性,部分解决描述中的不一致性。这类工具接受用形式化语言书写的功能描述,运用知识库中的知识,通过推理,发现需求定义中的矛盾和不足,经补充、更新知识库中的知识和规则,以及与系统分析员的不断交互,得到完整的功能规范。

设计工具

通常设计规范分成概要设计规范详细设计规范概要设计规范描述软件的功能模块及其相互关系,说明模块的处理过程和外部行为,同时还应描述数据的逻辑结构。详细设计规范描述每个模块的处理算法及涉及到的全部数据结构。

编码与排错工具

测试工具

软件维护工具

版本控制工具

文档分析工具

开发信息库工具

逆向工程工具

在软件生存周期中,将某种形式表示的软件转换成更高抽象形式表示的软件的活动称为逆向工程。

再工程工具

代码重构工具可把用一种程序语言书写的程序转换成用另一种程序语言书写的或适用于不同硬件平台的程序。代码重构工具可把用一种程序语言书写的程序转换成用另一种程序语言书写的或适用于不同硬件平台的程序

软件管理工具

项目管理工具

1.采用某种成本估算模型(如COCOMO模型)对项目的成本进行估算。它可以通过间接的测量(如对代码行和功能点的测量)来估算项目的规模大小,并描述总的项目特征,如问题的复杂度、开发组经验和过程成熟度等。然后按一定的估算模型估算出项目的工作量、工期和开发人数等。当项目截止期限变更时,可检测它对整个开发成本的影响。

配置管理工具

软件评价工具

1.可按某个软件质量模型(如McCall软件质量模型,ISO软件质量度量模型等)对被评价的软件进行度量。

2.根据某种软件复杂性模型(如Mc-Cabe的环路复杂度等)

McCabe方法是一种软件质量度量方法,它是基于对程序拓扑结构复杂度的分析。

环路复杂度=闭环数+1

必考)V(G)=m-n+2 m是箭头线n是节点

关键支持工具

设计原则

耦合类型

(1)非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。这种模块的耦合度最低、模块独立性最强。

(2)数据耦合(传递变量):指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递。

(3)标记耦合(传递数据结构): 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址。

(4)控制耦合(控制参数):指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行模块内某一功能。

(5)外部耦合(公共变量):一组模块都访问同一全局简单变量而不是同一全 局数据结构,而且不是通过参数表传递该全局变量的信息。

(6)公共耦合(公共数据结构):指一组模块都访问同一个公共数据环境,如全局数据结构,共享通信区。

(7)内容耦合 : 一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。是最差的耦合。(内容耦合性最强,模块的独立性最弱)

尽量使用数据耦合,少使用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合

内聚类型

(1)功能内聚:指模块内所有元素共同完成某一功能,联系紧密 ,缺一不可,是最强的内聚类型。模块的独立性最强。

(2) 顺序内聚:指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出是下一功能元素的输入。即一个模块完成多个功能,这些模块又必须顺序执行。

(3) 通信内聚:指模块内所有处理元素都在同一个数据结构上操作,或者指各处理使用相同的输入数据或者产生相同的输出数据。

(4) 过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没 有数据进行传递。

(5)时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块,所有的动作需在同一个时间段内执行。

(6) 逻辑内聚:把几种相关的功能组合在一起, 每次被调用时, 由传送给模块参数来确定该模块应完成哪一种功能。

(7) 偶然内聚:模块内各部分之间没有联系,或者有联系,这种联系也很松散,是内聚度最低的模块

需求管理

主要活动

CMM 过程能力成熟度模型(Capability Maturity Model, CMM)

该模型描述了软件处理能力的5个成熟级别。为了达到过程能力成熟度模型的第二级,组织机构必须具有6个关键过程域(Key Process Areas, KPA)​。

CMM成熟度5个等级,1级最低,5级最高。

1为初始级,混乱和不可预测;

2为重复级,管理监控和跟踪 ;

3确定级,通过软件过程和制度化对产品质量的控制;

4管理级,产品得到策划,软件过程基于度量的跟踪;

5优化级,持续的过程能力改进

阶段式模型:类似于CMM,它关注组织地成熟度,五个成熟度模型如下:

初始的:过程不可预测且缺乏控制。

已管理的:过程为项目服务。

已定义的:过程为组织服务。

定量管理的:过程为以度量和控制。

优化的:集中于过程改进。

能力成熟度模型CMMI:将已有的几个CMM模型结合在一起,使之构造成为“集成模型”。支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需求,能提高过程的质量和工作效率。

(考点)

C1(执行):关键词输入产品转输出产品。

C2(管理):关键词管控。

C3(定义):关键词标准化,文档化。

C4(量化):关键词软件过程,产品质量的度量。

C5(优化):关键词优化改进。

CMMI 中包括 6个过程域能力等级,等级号为 0~5。

C L 0 (未完成的):过程域未执行或未得到 C L 1 中定义的所有目标。

C L 1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。

C L 2(已管理的): 其共性目标集中于已管理的过程的制度化。

C L 3 (已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的剪裁指南从组织的标准过程集中剪裁得到的,还必须收集过程资产和过程的度量,并用于将来对过程的改进。

C L 4(定量管理的):其共性目标集中于可定量管理的过程的制度化。使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的定量目标作为管理准则。

C L 5 (优化的):使用量化(统计学) 手段改变和优化过程域,以满足客户要求的改变和持续改进计划中的过程域的功效。

开发管理

项目的范围,时间,成本

配置管理

配置管理是通过技术和行政手段对产品及其开发过程和生命周期进行控制、规范的一系列措施和过程。配置管理的一个重要内容就是对变更加以控制,使变更对成本、工期和质量的影响降到最小。产品配置是指一个产品在其生命周期各个阶段所产生的各种形式(机器可读或人工可读)和各种版本的文档、计算机程序、部件及数据的集合。(考点)

文档管理

文档是影响软件可维护性的决定因素。软件系统的文档可以分为用户文档和系统文档两类。用户文档主要描述系统功能和使用方法,并不关心这些功能是怎样实现的;系统文档描述系统设计、实现和测试等各方面的内容。

软件开发的质量和风险

设计方法

结构化分析与设计

面向对象的分析设计

软件的重用

逆向工程和重构工程

重构(restructuring),指在同一抽象级别上转换系统描述形式;

设计恢复(design recovery)​,指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息(不一定是原设计)​;

重构工程(re-engineering)​,也称修复和改造工程,它是在逆向工程所获信息的基础上修改或重构已有的系统,产生系统的一个新版本。

相关文章:

软件系统开发

目录 软件开发方法 软件开发生命周期 软件开发模型 敏捷方法 敏捷型方法两个特点 敏捷方法的核心思想三点 4个核心价值观 主要敏捷方法 RUP RUP的核心特点: RUP软件开发生命周期 9个核心工作流 RUP裁剪 软件系统工具 软件开发工具 需求分析工具 设计…...

浅谈RPC的实现原理与RPC实战

浅谈RPC的实现原理与RPC实战 什么是RPC?RPC框架基本原理gRPC框架介绍Http/2ProtoBuf gRPC实战一、创建项目二、导入依赖三、编写proto文件编写服务端编写客户端 什么是RPC? RPC(Remote Procedore Call),及远程过程调用,是一种在分布式系统中用于进程间…...

算法|牛客网华为机试31-40C++

牛客网华为机试 上篇:算法|牛客网华为机试21-30C 文章目录 HJ31 单词倒排HJ32 密码截取HJ33 整数与IP地址间的转换HJ34 图片整理HJ35 蛇形矩阵HJ36 字符串加密HJ37 统计每个月兔子的总数HJ38 求小球落地5次后所经历的路程和第5次反弹的高度HJ39 判断两个IP是否属于同…...

Mysql 大表limit查询优化原理

优化前( 查询耗时 114.1s) explain select * from link_exec_task limit 80000, 10 # 查询耗时 114.1s优化后( 查询耗时 0.121s) explain select * from link_exec_task a INNER JOIN (select id from link_exec_task limit 80000, 10) b on a.id b.id #0.121s原理&…...

封装axios、环境变量、api解耦、解决跨域、全局组件注入

官网:Axios中文文档 | Axios中文网 安装:npm install axios axios封装: // 1. 引入axios import axios from "axios"; import storage from /utils/storage // 2. 创建axios实例 const instance axios.create({baseURL: proces…...

CDGP|数据治理于企业而言到底有什么用?

在当今数字化时代,数据已成为企业最重要的资产之一。无论是大型跨国公司还是初创型企业,数据都扮演着驱动决策、优化运营和推动创新的关键角色。然而,仅仅拥有大量的数据并不足以确保企业的成功。如何有效管理、整合和利用这些数据&#xff0…...

Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)

1、Java数组(Arrays)语法知识点及案例 一、数组的基本概念 数组是多个相同类型的数据按照一定的顺序排列的集合,使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是引用数据类型&…...

11.4OpenCV_图像预处理习题02

1.身份证号码识别(结果:身份证号识别结果为:911124198108030024) import cv2 import numpy as np import paddlehub as hubdef get_text():img cv2.imread("images1/images/shenfen03.jpg")# 灰度化gray_img cv2.cvt…...

go的template示例

模板定义: type Config struct {{{- $len : len .DbConfigs -}}{{- $i : 0 -}}{{- range $key, $value : .DbConfigs}}{{title $key}} *DbConfig "yaml:\"{{lower $key}}\"" {{if lt $i (sub $len 1)}},{{end}}{{- $i add $i 1 -}}{{- end…...

『YOLO』| 断点训练、解决训练中断异常情况

文章目录 方法一方法二 当yolo在训练的时候,如果训练中断或者出现异常,可通过修改代码,从上一次断掉处重新训练,实现断点续训。 方法一 第一种方法: 按照官方给出的恢复训练代码,用yolo命令格式&#xff…...

MQTT+Disruptor 提高物联网高并发

基于springboot2.5.7 废话不多说,直接上干货: Slf4j Configuration EnableConfigurationProperties(MqttProperties.class) IntegrationComponentScan(basePackages {"扫描包路径","扫描包路径"}) public class MqttAutoConfig {…...

SpringBoot项目集成ONLYOFFICE

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…...

用于nodejs的开源违禁词检测工具 JavaScript node-word-detection

地址 : https://www.npmjs.com/package/node-word-detection github地址: https://github.com/xiaobaidadada/node-word-detection 非常节省内存的轻量级快速违禁词、词典库 检测工具 、 50万个词大约需要300MB内存、被检测的文本100字内结果在1毫秒左右。本项目没有提供词库请…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。

上图是在安防领域的要求,一般都是一个屏幕上有显示多个摄像头捕捉到的画面,这一节,我们是从文件中读取多个文件,显示在屏幕上。...

Linux权限问题(账号切换,权限,粘滞位)

1.什么是权限? 在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户可以在Linux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/xxx)工作&#…...

el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)

1.el-upload 上传附件&#xff1a; <el-uploadref"upload":action"upload.url ?updateSupport upload.updateSupport":auto-upload"false":disabled"upload.isUploading":headers"upload.headers":limit"1"…...

数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性

文章目录 前言一、二极管的电流-电压关系——Shockley方程二、PN结二极管正向特性的Python仿真三、仿真结果分析写在后面的话 前言 使用Python代码仿真了描述二极管的电流-电压关系的Shockley方程&#xff0c;对仿真结果进行了分析&#xff0c;说明在正向偏置区域&#xff0c;…...

ctfshow(89,90,92,93)--PHP特性--intval函数

Web89 源代码&#xff1a; include("flag.php"); highlight_file(__FILE__);if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("no no no!");}if(intval($num)){echo $flag;} }审计 GET传参num。 如果在参数num中…...

构建ubuntu22.04.4私有源服务以及配置ubuntu私有源

构建ubuntu22.04.4私有源服务以及配置ubuntu私有源 一、环境说明1.1 私有源服务器1.2 客户机二 、构建私有源服务2.1 服务构建2.2 发布新的deb包到源服务器1. 准备新的 `.deb` 包2. 将 `.deb` 包添加到仓库目录3. 更新 `Packages` 文件4. 更新仓库的发布文件(可选)5. 通知客户…...

模块功能的描述方法

目录 行为描述方法 语句块 过程赋值语句 高级程序语句 循环语句 数据流描述 结构描述 混合描述方法 module 模块名(端口列表); // 模块声明// 端口定义input [数据类型] [位宽] 输入端口列表; output [数据类型] [位宽] 输出端口列表; inout [数据类…...

【WPF】MatrixTransform类

【WPF】MatrixTransform类 主要特性使用场景示例 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;MatrixTransform 类是用于表示一个仿射变换的类&#xff0c;它允许开发者通过一个矩阵来定义一个二维空间中的线性变换。这种变换可以包括平移&…...

【C++】继承的理解

1.继承的概念和定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序…...

day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)

前言&#xff1a;前段时间论文开题落下了很多进度&#xff0c;今天开始会尽快赶上 99.岛屿数量 深搜 思路&#xff1a;对地图进行遍历遇到一个没有遍历过的陆地节点&#xff0c;计数器就1&#xff0c;并把该节点所能遍历到的陆地都标记上&#xff1b;遇到标记过的陆地节点和海…...

超详细从基准将VMware ESXi 升级到 vSphere 6.7U1教程

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01; “ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福…...

华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…...

MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台

物联网&#xff08;IoT&#xff09;时代&#xff0c;企业正以前所未有的速度加快数字化转型。西安天能软件科技有限责任公司&#xff08;Skyable&#xff09;作为工业物联网领域的领先企业&#xff0c;携手MatrixOne&#xff0c;共同构建新一代一体化物联网平台&#xff0c;实现…...

正则表达式---元字符

简介 正则表达式分为两种语法&#xff1a;POSIX标准的语法&#xff0c;Perl语法。 正则表达式的POSIX规范&#xff0c;分为基本型正则表达式&#xff08;Basic Regular Expression, BRE&#xff09;&#xff0c;扩展型正则表达式&#xff08;Extended Regular Expression&…...

数据库Redis篇

系列文章目录 第一章 C/C语言篇第二章 计算机网络篇第三章 操作系统篇第四章 数据库MySQL篇第五章 数据库Redis篇第六章 场景题/算法题第七篇 常见HR问题篇 本系列专栏&#xff1a;点击进入 后端开发面经 关注走一波 秋招阶段&#xff0c;面过很多大中小厂&#xff0c;积攒了…...

在区块链技术中,什么是权益证明(PoS)?

权益证明&#xff08;Proof of Stake, PoS&#xff09;是一种与工作量证明&#xff08;Proof of Work, PoW&#xff09;类似的共识机制&#xff0c;但它通过不同的方式来确保区块链网络的安全性和一致性。PoS的主要目标是解决PoW中存在的高能耗问题&#xff0c;并提高网络的扩展…...

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中&#xff0c;控制台上打印出来的一大堆内容就是日志&#xff0c;可以帮助我们发现问题&#xff0c;分析问题&#xff0c;定位问题&#xff0c;除此之外&#xff0c;日志还可以进行系统的监控&#xff0c;数据采集等 2. 日志的使用 在程序中获取日…...