软考高级系统架构设计师-第12章 系统质量属性与架构评估
【本章学习建议】
根据考试大纲,本章不仅考查系统架构设计师单选题,预计考11分左右,而且案例分析和论文写作也是必考,对应第二版教材第8章,属于重点学习的章节。
12.1 软件系统质量属性
12.1.1 质量属性概念
软件系统质量属性(Quality Attribute)是一个系统的可测量或者可测试的属性,用来描述系统满足利益相关者(Stakeholders)需求的程度。基于软件系统的生命周期,可以将软件系统的质量属性分为开发期质量属性和运行期质量属性2个部分。
1. 开发期质量属性
开发期质量属性主要指在软件开发阶段所关注的质量属性,主要包含6个方面。
(1)易理解性:指设计被开发人员理解的难易程度。
(2)可扩展性:软件因适应新需求或需求变化而增加新功能的能力,也称为灵活性。
(3)可重用性:指重用软件系统或某一部分的难易程度。
(4)可测试性:对软件测试以证明其满足需求规范的难易程度。
(5)可维护性:当需要修改缺陷、增加功能、提高质量属性时,识别修改点并实施修改的难易程度。
(6)可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
2. 运行期质量属性
运行期质量属性主要指在软件运行阶段所关注的质量属性,主要包含7个方面。
(1)性能:性能是指软件系统及时提供相应服务的能力,如速度、吞吐量和容量等的要求。
(2)安全性:指软件系统同时兼顾向合法用户提供服务,以及阻止非授权使用的能力。
(3)可伸缩性:指当用户数和数据量增加时,软件系统维持高服务质量的能力。例如,通过增加服务器来提高能力。
(4)互操作性:指本软件系统与其他系统交换数据和相互调用服务的难易程度。
(5)可靠性:软件系统在一定的时间内持续无故障运行的能力。
(6)可用性:指系统在一定时间内正常工作的时间所占的比例。可用性会受到系统错误,恶意攻击,高负载等问题的影响。
(7)鲁棒性:是指软件系统在非正常情况(如用户进行了非法操作、相关的软硬件系统发生了故障等)下仍能够正常运行的能力,也称健壮性或容错性。
12.1.2 面向架构评估的质量属性
在架构评估过程中,所普遍关注的质量属性有以下几种。
(1)性能:指系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理的事件的个数。如响应时间、吞吐量。设计策略:优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度等。
(2)可靠性:是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。可靠性通常用平均失效等待时间(Mean Time To Failure,MTTF)和平均失效间隔时间(Mean Time Between Failure,MTBF)来衡量。在失效率为常数和修复时间很短的情况下,MTTF 和MTBF几乎相等。可分为容错和健壮性。容错是指在错误发生时确保系统正确的行为,并进行内部“修复”。健壮性是指系统不受错误使用和错误输入的影响,按既定程序忽略错误。设计策略:冗余、心跳、选举、Ping/Echo。
(3)可用性:是系统能够正常运行的时间比例,经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。如故障间隔时间。设计策略:冗余、心跳、选举、Ping/Echo。
(4)安全性:是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。可分为机密性、完整性、不可否认性、可控性。机密性保证信息不泄露给未授权的用户、实体或过程;完整性保证信息的完整和准确,防止信息被非法修改;不可否认性是指信息交换的双方不能否认其在交换过程中发送信息或接收信息的行为;可控性保证对信息的传播及内容具有控制的能力,防止为非法者所用。设计策略:入侵检测、用户认证、用户授权、追踪审计。
(5)可修改性:指能够快速的以较高的性能价格比对系统进行变更的能力。通常以某些具体的变更为基准,通过考查这些变更的代价来衡量可修改性。可分为可维护性、可扩展性、结构重组和可移植性。
可维护性:在错误发生后“修复”软件系统的难易程度。
可扩展性:软件因适应新需求或需求变化而增加新功能的能力。
结构重组:重新组织软件系统的构件及构件之间的关系。
可移植性:将软件系统从一个运行环境转移到另一个不同的运行环境的难易程度。
设计策略:接口-实现分类、抽象、信息隐藏。
(6)功能性:是系统所能完成所期望的工作的能力。一项任务的完成需要系统中许多或大多数构件的相互协作。
(7)可变性:指架构经扩充或变更而成为新架构的能力。这种新架构应该符合预先定义的规则,在某些具体方面不同于原有的架构。当要将某个架构作为一系列相关产品的基础时,可变性是很重要的。
(8)互操作性:作为系统组成部分的软件不是独立存在的,通常与其他系统或自身环境相互作用。为了支持互操作性,软件架构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。程序和用其他编程语言编写的软件系统的交互作用就是互操作性的问题,这种互操作性也影响应用的软件架构。
12.1.3 质量属性场景描述
为了精确描述软件系统的质量属性,通常采用质量属性场景(Quality Attribute Scenario)作为描述质量属性的手段。质量属性场景是一种面向特定质量属性的需求。它由6部分组成:
·刺激源(Source):这是某个生成该刺激的实体(人、计算机系统或者任何其他刺激器) 。
·刺激(Stimulus):该刺激是当刺激到达系统时需要考虑的条件。
·环境(Environment):该刺激在某些条件内发生。当激励发生时,系统可能处于过载、运行或者其他情况。
·制品(Artifact):某个制品被激励。这可能是整个系统,也可能是系统的一部分。
·响应(Response):该响应是在激励到达后所采取的行动。
·响应度量(Measurement):当响应发生时,应当能够以某种方式对其进行度量,以对需求进行测试。
可修改性质量属性场景描述实例(以淘宝APP为例):
刺激源:淘宝APP进行更新,开发人员修改代码;刺激:淘宝APP暂时维护,增加部分功能;
环境:APP平台;制品:新版本的淘宝APP;响应:增添部分功能或修复部分BUG;
响应度量:过去的BUG消失或增加了新功能。
可修改性质量属性场景描述实例:
场景要素 | 可能的情况 |
刺激源 | 最终用户、开发人员、系统管理员 |
刺激 | 希望增加、删除、修改、改变功能、质量属性、容量等 |
环境 | 系统设计时、编译时、构建时、运行时 |
制品 | 系统用户界面、平台、环境或与目标系统交互的系统 |
响应 | 查找架构中需要修改的位置,进行修改且不会影响其他功能,对所做的修改进行测试,部署所做的修改 |
响应度量 | 根据所影响元素的数量度量的成本、努力、资金;该修改对其他功能或质量属性所造成影响的程度 |
质量属性场景举例:
·性能场景:①数据传递时延不大于1S,并提供相应的优先级管理。②网站在并发用户数量10万的负载情况下,用户请求的平均响应时间应小于3秒。
·可用性场景:①系统采用双机热备,主备机必须实时监测对方状态,以便完成系统的实时切换。②主站宕机后,系统能够在10秒内自动切换至备用站点并恢复正常运行。
·安全性场景:系统应能够防止99%的黑客攻击。
·可修改性场景:系统完成上线后,少量的外围业务功能和界面的调整与修改不超过10人·月。
质量属性场景主要关注可用性、可修改性、性能、可测试性、易用性和安全性等6类质量属性。
·可用性质量属性场景所关注的方面包括系统故障发生的频率、出现故障时会发生什么情况、允许系统有多长时间是非正常运行、什么时候可以安全地出现故障、如何防止故障的发生以及发生故障时要求进行哪种通知。
·可修改性质量属性场景主要关注系统在改变功能、质量属性时需要付出的成本和难度,可修改性质量属性场景可能发生在系统设计、编译、构建、运行等多种情况和环境下。
·性能质量属性场景主要关注系统的响应速度,可以通过效率、响应时间、吞吐量、负载来客观评价性能的好坏。
·可测试性质量属性场景主要关注系统测试过程中的效率,发现系统缺陷或故障的难易程度等。
·易用性质量属性场景主要关注用户在使用系统时的容易程度,包括系统的学习曲线、完成操作的效率、对系统使用过程的满意程度等。
·安全性质量属性场景主要关注系统在安全性方面的要素,衡量系统在向合法用户提供服务的同时,阻止非授权用户使用的能力。
12.2 系统架构评估
12.2.1 系统架构评估中的重要概念
系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。
系统架构评估中的重要概念:
(1)敏感点和权衡点。 敏感点和权衡点是关键的架构决策。敏感点:是指为了实现某种特定的质量属性,一个或多个构件所具有的特性。权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点。改变加密级别可能会对安全性和性能产生非常重要的影响。提高加密级别可以提高安全性,但可能要耗费更多的处理时间,影响系统性能。如果某个机密消息的处理有严格的时间延迟要求,则加密级别可能就会成为一个权衡点。
(2)风险承担者或者称为利益相关人。系统的架构涉及很多人的利益,这些人都对架构施加各种影响,以保证自己的目标能够实现。例如,风险承担者是软件系统架构师,职责是负责软件架构的质量需求间进行权衡的人,所关心的问题是对其他风险承担者提出的质量需求的折中和调停。
(3)场景。在进行架构评估时,一般首先要精确地得出具体的质量目标,并以之作为判定该架构优劣的标准。为得出这些目标而采用的机制称之为场景。场景是从风险承担者的角度对与系统的交互的简短描述。在架构评估中,一般采用刺激、环境和响应三方面来对场景进行描述。
系统架构评估在架构设计之后,系统设计之前,因此与设计、实现、测试都没有关系。评估的目的是为了评估所采用的架构是否能解决软件系统需求。
系统架构评估的方法有3种:
·基于调查问卷或检查表的方法:类似于需求获取中的问卷调查方式,只不过是架构方面的问卷,要求评估人员对领域熟悉。
·基于场景的评估方法:主要方法。它是通过分析软件架构对场景(也就是对系统的使用或修改活动)的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。从三个方面对场景进行设计:刺激(事件);环境(事件发生的环境);响应(架构响应刺激的过程)。应用在架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)和软件架构分析方法(Software Architecture Analysis Method,SAAM)中。
·基于度量的评估方法:制定一些定量指标来度量架构,如代码行数等。要制定质量属性和度量结果之间的映射,要求评估人员对架构熟悉。它是建立在软件架构度量的基础上的,涉及3个基本活动,首先需要建立质量属性和度量之间的映射原则,然后从软件架构文档中获取度量信息,最后根据映射原则分析推导出系统的质量属性。
12.2.2 系统架构评估方法
1. 基于场景的架构分析方法SAAM
SAAM是一种非功能质量属性的架构分析方法,是最早形成文档并得到广泛使用的软件架构分析方法。
(1)特定目标。SAAM的目标是对描述应用程序属性的文档,验证基本的架构假设和原则。
(2)评估技术。SAAM所使用的评估技术是场景技术。场景代表了描述架构属性的基础,描述了各种系统必须支持的活动和可能存在的状态变化。
(3)质量属性。这一方法的基本特点是把任何形式的质量属性都具体化为场景,但可修改性是SAAM分析的主要质量属性。
(4)风险承担者。SAAM协调不同参与者之间感兴趣的共同方面,作为后续决策的基础,达成对架构的共识。
(5)架构描述。SAAM用于架构的最后版本,但早于详细设计。架构的描述形式应当被所有参与者理解。功能、结构和分配被定义为描述架构的3个主要方面。
(6)方法活动。SAAM的主要输入是问题描述、需求声明和架构描述。下图描绘了SAAM分析活动的相关输入及评估过程。SAAM分析评估架构的过程包括5个步骤,即场景开发、架构描述、单个场景评估、场景交互评估和总体评估。
(7)已有知识库的可重用性:SAAM不考虑这个问题。
(8)方法验证:SAAM是一种成熟的方法,己被应用到众多系统中,这些系统包括空中交通管制、嵌入式音频系统、WRCS (修正控制系统)、KWIC (根据上下文查找关键词系统)等。
2. 架构权衡分析方法ATAM
架构权衡分析方法ATAM是在SAAM的基础上发展起来的,主要针对性能、安全性、可修改性和可用性,在系统开发之前,对这些质量属性进行评价和折中。
架构权衡分析法ATAM,让架构师明确如何权衡多个质量目标,参与者有评估小组、项目决策者和其他项目相关人。
ATAM被分为四个主要的活动领域,分别是场景和需求收集、体系结构视图和场景实现、属性模型构造和分析、折中。整个评估过程强调以质量属性作为架构评估的核心。
用ATAM方法评估软件架构,其工作分为4个基本阶段,即演示、调查和分析、测试和报告, 如图所示。
(1)阶段1--演示
这是使用ATAM评估软件体系结构的初始阶段。
①介绍ATAM。描述ATAM的评估过程。
②介绍业务驱动因素。着重业务视角,提供有关系统功能、主要利益
相关方、业务目标和其他限制等信息。
③介绍要评估的体系结构。侧重可用性以及体系结构的质量要求。
(2)阶段2--调查和分析
在这个阶段,人们对评估期间需要重点关注的一些关键问题进行彻底调查。
①确定架构方法:涉及能够理解系统关键需求的关键架构方法。
②生成质量属性效用树:确定最重要的质量属性,并确定有限次序。
③分析体系结构方法:彻底调查和分析,找出处理相应质量属性架构的方法。包括4个主要阶段:调查架构方法->创建分析问题->分析问题的答案->找出风险、非风险、敏感点和权衡点。
(3)阶段3--测试
①头脑风暴和优先场景:将头脑风暴的优先列表与生成质量属性效用树中所获取的优先方案进行比较。利益相关者需要使用头脑风暴的三种场景:
·用例场景:在这种情况下,利益相关者就是最终用户。
·增长情景:代表了架构发展的方式。
·探索性场景:代表架构中极端的增长形式。
②分析架构方法。
(4)阶段4--报告ATAM
提供评估期间收集的所有信息,呈现给利益相关者。
质量属性效用树:
ATAM方法采用效用树(Utility tree)这一工具来对质量属性进行分类和优先级排序。效用树的结构包括:树根--质量属性--属性分类--质量属性场景(叶子节点)。需要注意的是,ATAM主要关注4类质量属性:性能、安全性、可修改性和可用性,这是因为这4个质量属性是利益相关者最为关心的。
3. 成本效益分析法CBAM
成本效益分析法CBAM是在ATAM上构建,用来对架构设计决策的成本和收益进行建模,让决策者根据投资回报率ROI来选择合适的架构,在ATAM确定质量合理的基础上,再对效益进行分析。有以下8个步骤:
(1)整理场景(确定场景,并确定优先级,选择优先级最高的1/3场景进行分析);
(2)对场景进行细化(对每个场景详细分析,确定最好、最坏的情况);
(3)确定场景的优先级(项目干系人对场景投票,根据投票结果生成场景的权值);
(4)分配效用(对场景响应级别确定效用表,建立策略、场景、响应级别的表格);
(5)形成“策略-场景-响应级别”的对应关系;
(6)使用内插法确定期望的质量属性响应级别的效用(根据效用表确定所对应的具体场景的效用表);
(7)计算各架构策略的总收益;
(8)根据受成本限制影响的投资回报率ROI选择架构策略(估算成本,用上一步的收益减去成本,计算ROI并排序,从而选择收益最高的架构策略)。
4. 其他评估方法(仅了解)
1.SAEM方法。将软件架构看作一个最终产品以及设计过程中的一个中间产品,从外部质量属性和内部质量属性两个角度来阐述它的评估模型,旨在为软件架构的质量评估创建一个基础框架。
外部属性指用户定义的质量属性,而内部属性指开发者决定的质量属性。该软件架构评估模型包含以下几个流程。
(1)对待评估的质量属性进行规约建模。
(2)为外部和内部的质量属性创建度量准则,先从评估目的(如软件架构比较、最终产品的质量预测),评估角度(如开发者、用户、维护者),评估环境(架构作为最终产品或设计中间产品)出发来定义架构评估的目标,再根据目标相关的属性来提出问题,然后回答每个问题并提出相应的度量准则。
(3)评估质量属性,包括数据收集、度量和结果分析3个活动。
2.SAABNet方法。是一种用来表达和使用定性知识以辅助架构的定性评估。该方法来源于人工智能,允许不确定、不完整知识的推理。该方法使用BBN来表示和使用开发过程中的知识,包含定性和定量的描述,其中定性的描述是所有结点的图,定量的描述是每个结点状态相关的条件概率。其中的变量可分为3类,即架构质量属性变量(如可维护性、灵活性等)、质量属性的度量准则变量(如容错性、响应性等)和架构特征变量(如继承深度、编程语言等),高层抽象的质量属性变量分解为低层抽象的度量准则变量,度量准则变量则分解为更低层抽象的架构特征变量。
3.SACMM方法。是一种软件架构修改的度量方法。
4.SASAM方法。通过对预期架构(架构设计阶段的相关描述材料)和实际架构(源代码中执行的架构)进行映射和比较来静态地评估软件架构。
5.ALRRA方法。是一种软件架构可靠性风险评估方法,该方法使用动态复杂度准则和动态耦合度准则来定义组件和连接件的复杂性因素,其中,动态复杂度准则在某个场景的执行中分析组件的动态行为来度量组件的复杂性,动态耦合度准则在某个场景的执行中分析连接件的消息传递协议来度量连接件的复杂性。利用失效模式和影响分析(FMEA)技术。
6.AHP方法(层次分析法)。是对定性问题进行定量分析的一种简便、灵活而又实用的多准则决策方法。AHP方法的特点是把复杂问题中的各种因素通过划分为相联系的有序层次使之条理化,并在一般情况下通过两两对比,根据一定客观现实的主观判断结构,把专家意见和分析者的客观判断结果直接、有效地结合起来,将一定层次上元素的某些重要性进行定量描述,之后利用数学方法计算反映每一层次元素的相对重要性次序的权值,并最后通过所有层次之间的总排序计算所有元素的相对权重及对权重进行排序。
7.COSMIC+UML方法。基于度量模型来评估软件架构可维护性的方法。针对不同表达方式的软件架构,采用统一的软件度量COSMIC方法来进行度量和评估。该方法主要是为了辅助分析软件架构的演化方案是否可行,并在开源软件DCMMS的软件架构UML组件图上得以验证。
中间件(补充)
中间件是指在一个分布式系统环境中处于操作系统和应用程序之间的系统级软件,可以在不同的技术之间共享资源,将不同的操作系统、数据库、异构的网络环境以及若干应用结合成一个有机的协同工作整体。
中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通信,有如下特点:
(1)中间件是一类软件,而非一种软件;
(2)中间件不仅仅实现互连,还要实现应用之间的互操作;
(3)中间件是基于分布式处理的软件,最突出的特点是其网络通信功能。
中间件的任务是使应用程序开发变得更容易,通过提供统一的程序抽象,隐藏异构系统和分布式系统下低级别编程的复杂度。
中间件提供的支持通常包括两方面:
·交互支持:协调系统中不同组件之间的通信和数据交换。中间件可以提供消息队列、远程过程调用(RPC)、对象请求代理(ORB)等机制,以实现分布式环境中的进程间通信(IPC)。这些机制使得应用程序不必关心底层网络细节,能够更专注于业务逻辑。
·提供公共服务:中间件提供对服务的可复用的实现,如事务管理、安全服务、命名和目录服务、持久化服务、负载均衡、故障恢复和容错能力等。这些服务有助于解决分布式系统中常见的问题,如一致性、可用性和伸缩性。
中间件的功能:
·负责客户机与服务器之间的连接和通信,以及客户机与应用层之间的高效率通信机制。
·提供应用层不同服务之间的互操作机制,以及应用层与数据库之间的连接和控制机制。
·提供多层架构的应用开发和运行的平台,以及应用开发框架,支持模块化的应用开发。
·屏蔽硬件、操作系统、网络和数据库的差异。
·提供应用的负载均衡和高可用性、安全机制与管理功能,以及交易管理机制,保证交易的一致性。
·提供一组通用的服务去执行不同的功能,避免重复的工作和使应用之间可以协作。
中间件的分类:
(1)通信处理(消息)中间件,保证系统能在不同平台之间通信,利用消息传递机制实现分布式系统中可靠的、高效的、实时的跨平台数据传输。例如IBM的MQSeries。
(2)事务处理(交易)中间件,实现协调处理顺序、监视和调度、负载均衡等功能。例如BEA的Tuxedo。
(3)数据存取管理中间件,为不同种类数据的读写和加解密提供统一的接口。例如Windows平台的ODBC和Java平台的JDBC等。
(4)Web服务器中间件,提供Web程序执行的运行时容器。例如Tomcat、JBOSS等。
(5)安全中间件,用中间件屏蔽操作系统的缺陷,提升安全等级。例如Kerberos、SSL/TLS。
(6)跨平台和架构的中间件,用于开发大型应用软件。例如CORBA、JavaBeans、COM+模型。
(7)专用平台中间件,为解决特定应用领域的开发设计问题提供构件库。例如Android SDK、iOS SDK。
(8)网络中间件,包括网管、接入、网络测试、虚拟社区和虚拟缓冲等,也是当前最热门的研发项目。例如TCP/IP协议栈、HTTP服务器。
相关文章:
软考高级系统架构设计师-第12章 系统质量属性与架构评估
【本章学习建议】 根据考试大纲,本章不仅考查系统架构设计师单选题,预计考11分左右,而且案例分析和论文写作也是必考,对应第二版教材第8章,属于重点学习的章节。 12.1 软件系统质量属性 12.1.1 质量属性概念 软件系…...
RockyLinux9 部署 Zabbix7 完整步骤
一、Zabbix介绍 Zabbix 是企业级开源监控解决方案,支持实时监控数台服务器,虚拟机和网络设备,开源免费,官方手册 https://www.zabbix.com/documentation/7.0/zh/manual 二、RockyLinux9部署Zabbix 1、进入到相对的系统下&#…...
「小推桌面官方下载」小推桌面TV版-安卓电视版官方免费下载新版
下面小编将给大家详细介绍小推桌面免费下载新版 1. 查找官网:通过搜索引擎查找小推桌面的官方网站。注意要确保进入的是官方正规网站,避免从不可信的来源下载应用,以防安全风险。 2. 下载安装包:在官网中找到适合安卓电视版的小…...
Java多线程学习指南
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java多线程学习指南**一、入门基础**1. **线…...
HTTPS实现安全的关键方法及技术细节
HTTPS(HyperText Transfer Protocol Secure)通过多种技术手段实现数据传输的安全性,其核心机制基于SSL/TLS协议,并结合数字证书、加密算法等技术。 SSL:Secure Sockets Layer,安全套接字层 TLS:…...
记录:安装 Docker Desktop 时直接设置安装路径及容器存储路径
近期学用 deepseek 本地知识库的构建,准备尝试几个不同的 RAG 工具,结果基本都需要 Docker 支持,故又重新拾起 Docker 来安装,刚好看到个不用目录链接就可以直接设置安装路径的方法,就记录一下,以免以后忘…...
日志分析-mysql应急响应
日志分析-mysql应急响应 任务: 1.黑客第一次写入的shell flag{关键字符串} 2.黑客反弹shell的ip flag{ip} 3.黑客提权文件的完整路径 md5 flag{md5} 注 /xxx/xxx/xxx/xxx/xxx.xx 4.黑客获取的权限 flag{whoami后的值} 黑客第一次写入的shell flag{关键字符串} …...
【C++ 】智能指针:内存管理的 “自动导航仪”
目录 一、引入 二、智能指针的两大特性: 1、RAII 特点: 好处: 2、行为像指针 三、智能指针起初的缺陷:拷贝问题 四、几种智能指针的介绍。 1、C98出现的智能指针——auto_ptr auto_ptr解决上述拷贝构造的问题:…...
macOS 上使用 Homebrew 安装和配置 frp 客户端
macOS 上使用 Homebrew 安装和配置 frp 客户端 (frpc) 指南 frp (Fast Reverse Proxy) 是一款高性能的反向代理应用,常用于内网穿透。本文将介绍在 macOS 上使用 Homebrew 安装 frpc,并进行配置和管理。 一、安装 frpc 使用 Homebrew 安装(…...
OSI参考模型
1.1 OSI参考模型 OSI(Open System Interconnection,开放式系统互联),由ISO(International Organization for Standardization,国际标准化组织)收录在ISO 7489标准中并于1984年发布。OSI参考模…...
《探秘鸿蒙分布式软总线:开启无感发现与零等待传输新时代》
在数字化浪潮中,设备之间的互联互通成为构建智能生态的关键。鸿蒙系统中的分布式软总线技术,宛如一座桥梁,让各种智能设备紧密相连。尤其是其实现的设备间无感发现和零等待传输功能,更是为用户带来了前所未有的便捷体验࿰…...
QML ListView:列表视图的数据交互与样式定制
目录 引言相关阅读项目结构示例一:ListView样式定制代码解析运行效果 示例二:ListView数据交互代码解析运行效果 总结 引言 在现代应用程序开发中,列表视图是最常见且实用的UI组件之一。Qt Quick(QML)提供了强大的Lis…...
C#集合List<T>与HashSet<T>的区别
在C#中,List和HashSet都是用于存储元素的集合,但它们在内部实现、用途、性能特性以及使用场景上存在一些关键区别。 内部实现 List:基于数组实现的,可以包含重复的元素,并且元素是按照添加的顺序存储的。 HashSet&…...
【C++进阶六】list模拟实现
【C进阶六】list模拟实现 1.list的大致框架结构2.节点类3. 迭代器4.list内各种功能的实现1.push_back(正常实现)2.insert3.begin()和end()4.push_back和push_front(复用insert)5.erase6. pop_back与pop_front (复用erase)7.clear 清空数据8.swap9.无参构造10.析构函数11.含参构…...
Spring 事件机制与观察者模式的深度解析
一、引言 在软件设计中,观察者模式(Observer Pattern)是一种非常经典且实用的设计模式。它允许一个对象(Subject)在状态发生改变时通知所有依赖它的对象(Observers),从而实现对象之…...
危险作业自动化如何重构工业安全新生态
在化工车间的反应器旁,巡检员正戴着防毒面具靠近高温罐体;在矿山深处,凿岩工人在粉尘弥漫中操控机械臂;在高架桥梁上,检修人员正攀爬至数十米高空排查隐患…… 这些场景中,每一个动作都伴随着不可预估的安全…...
Trae 下安装 Pylance 插件(仅作为实验,版权由微软所有)
目录 背景0. Trae 环境准备1. 从VSCode市场获取插件安装包2. 直接安装插件至Trae会失败3. 解压 vsix 文件4. 直接移动安装参考文献: 背景 基于 VSCode 改版但使用 Open VSX 的编辑器(如 trae、Cursor)会遇到以下限制1: 微软官方…...
多模态大语言模型arxiv论文略读(十八)
Large Model Based Referring Camouflaged Object Detection ➡️ 论文标题:Large Model Based Referring Camouflaged Object Detection ➡️ 论文作者:Shupeng Cheng, Ge-Peng Ji, Pengda Qin, Deng-Ping Fan, Bowen Zhou, Peng Xu ➡️ 研究机构: Ts…...
oracle查询锁表和解锁
oracle查询锁表和解锁 1.数据库表被锁后------解锁第一步第二步 2.查锁语句 1.数据库表被锁后------解锁 第一步 select t2.username, t2.sid, serial#, t2.logon_time from v l o c k e d o b j e c t t 1 , v locked_object t1, v lockedobjectt1,vsession t2 where t1.S…...
mysql 数据库localhost密码忘记
使用此查询语句: SELECT user, authentication_string FROM mysql.user WHERE user root; 复制对应的密码: 密码是通过md5加密后的 md5在线解密破解,md5解密加密 将密码输入进来 就可以直接破解了...
如何把pdf的内容转化成结构化数据进行存储到mysql数据库
一、PDF解析与数据提取 文本提取工具选择 使用Python的pdfplumber或PyPDF2库进行基础文本提取。 pythonCopy Code import pdfplumber def extract_text(pdf_path): with pdfplumber.open(pdf_path) as pdf: return [page.extract_text() for page in pdf.pages if page.e…...
豪越消防一体化安全管控平台:构建消防“一张图”新生态
在城市化进程加速、建筑规模与功能日益复杂的当下,消防救援工作面临着诸多严峻挑战。火灾隐患如同隐藏在暗处的“定时炸弹”,广泛分布于城市的各个角落,想要快速、精准定位绝非易事。信息传递的不顺畅更是雪上加霜,导致救援效率大…...
中和农信:以数字化与普惠理念重塑“三农”服务新生态
在乡村振兴与农业现代化的时代命题下,中国农村市场既承载传统生产模式效率不足的挑战,也面临着数字化变革带来的机遇。作为深耕农村市场多年的综合服务机构,中和农信完成了从单一小额信贷机构向综合型“三农”服务平台的跨越式转型࿰…...
Docker详细使用
Docker详细使用 文章目录 Docker详细使用使用场景docker安装常用命令帮助启动类命令镜像命令网络命令容器命令compose(服务编排) 功能列表存储(挂载本地)介绍使用⽬录挂载卷映射 网络介绍使用 DockerfileCompose介绍使用 使用场景…...
[福游宝——AI智能旅游信息查询平台]全栈AI项目-阶段二:聊天咨询业务组件开发
简言 本项目旨在构建一个以AI智能体为核心的福建省旅游信息查询系统,聚焦景点推荐、路线规划、交通天气查询等功能,为游客提供智能化、便捷化的旅游信息服务。项目采用前后端分离架构,前端基于Vite TypeScript Vue3技术栈,搭配…...
【Linux】进程的详讲(下)--进程的环境变量
目录 📖一、进程优先级 📖二、查看进程优先级 📖三、环境变量 📖四、环境变量PATH:Linux系统中的指令搜索路径 📖五、环境变量HOME 📖六、环境变量USER 📖七、命令行参数 …...
深入理解 MVC 模式在 C# 中的应用
MVC(Model-View-Controller)是一种经典的软件设计模式,广泛应用于现代应用程序开发中,尤其是在 Web 应用程序和桌面应用程序中。它通过将应用程序的不同职责进行分离,有助于提高代码的可维护性、可扩展性以及可测试性。…...
《鸿蒙软总线:基于UDP的数据传输奥秘与优势》
在鸿蒙系统构建的万物互联世界里,分布式软总线扮演着至关重要的角色,尤其是其基于UDP协议的数据传输机制,成为支撑多设备高效协同的关键技术。深入剖析这一技术的原理与优势,有助于我们理解鸿蒙系统如何实现设备间的无缝连接与流畅…...
关于 驱动开发方法 的详细分类、核心特点及对比分析,涵盖 TDD、MDD、BDD、DDD、ATDD、FDD、PDD 等主流方法
以下是关于 驱动开发方法 的详细分类、核心特点及对比分析,涵盖 TDD、MDD、BDD、DDD、ATDD、FDD、PDD 等主流方法: 一、驱动开发方法分类及详解 1. 测试驱动开发(TDD: Test-Driven Development) 定义:通过编写测试用…...
考研数据结构之二叉树(二):二叉树的遍历与线索二叉树(包含真题实战)
考研数据结构之二叉树(二):二叉树的遍历与线索二叉树 在上一篇文章中,我们详细探讨了二叉树的定义和存储结构。本文将深入讲解二叉树的核心操作——遍历,以及其重要应用形式之一——线索二叉树。这些内容不仅是考研的…...
Guava Cache的refreshAfterWrite机制
Guava Cache 的 refreshAfterWrite 机制在源码中通过 惰性刷新调度 和 细粒度锁控制 实现,核心逻辑集中在 LocalCache 类的 Segment 结构中。以下是关键源码解析: 一、核心数据结构 1. Segment 类 • 继承自 ReentrantLock:每个 Segment 独…...
邮件发送频率如何根据用户行为动态调整?
邮件发送频率,这可是个技术活儿。发多了,用户烦;发少了,机会溜。别担心,今天就给你支几招,教你如何根据用户行为,像变魔术一样灵活调整邮件发送频率。 一、盯紧用户行为数据 先别急着发邮件&a…...
HDMI与DVI接口热插拔检测
在当今数字音视频传输中,高清多媒体接口与数字视觉接口已成为主流标准。无论是电脑、蓝光播放器,还是电视与显示器,这两种接口都发挥着重要作用。而在保证系统“即插即用”和自动识别的过程中,热插拔检测(HPD)承担着关键角色。研究表明,HDMI 的第 19 引脚和 DVI 的第 16…...
Redis,RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻塞。 比如: 已知会有10个字节发送过来,但是我…...
Express学习笔记(六)——前后端的身份认证
目录 1. Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 前后端分离的优缺点 1.5 如何选择 Web 开发模式 2. 身份认证 2.1 什么是身份认证 2.2 为什么需要身份认证 2.3 不同开发模式下的身份认证 3. Sessio…...
DDoS攻防实战指南——解析企业级防护五大解决方案
一、流量清洗中心的智能化演进 云清洗服务已从被动响应转向主动防御。基于全球Anycast网络的分布式清洗节点,可在攻击发生时将流量牵引至专用清洗集群。阿里云2023年实测数据显示,其新一代清洗设备对SYN Flood的识别准确率达99.97%,误杀率控…...
2025年机电一体化、机器人与人工智能国际学术会议(MRAI 2025)
重要信息 时间:2025年4月25日-27日 地点:中国济南 官网:http://www.icmrai.org 征稿主题 机电一体化机器人人工智能 传感器和执行器 3D打印技术 智能控制 运动控制 光电系统 光机电一体化 类人机器人 人机界面 先进的运动控制 集成制造系…...
QT Sqlite数据库-教程002 查询数据-上
【1】DQL语句: DQL语句(数据查询语言),用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。DQL 语句并不会改变数据库,而是让数据库将查询结果发送结果集给客户端,返回的结果是一张虚…...
Java List流式编程全解析:从入门到实战高手
🚀 Java List流式编程全解析:从入门到实战高手 #Java8新特性 #Stream流 #集合操作 #高效编程 一、为什么需要Stream流? 传统集合操作痛点: 代码冗长:多层循环嵌套,可读性差难以并行:手动拆分…...
【Linux】深入理解线程控制
个人主页~ 深入理解线程控制 一、线程等待的原理二、线程的局部存储三、初步理解线程互斥1、互斥的概念2、需要互斥的原因 一、线程等待的原理 pthread_join的作用是线程等待,其中retval参数传递线程退出状态的原理是:当目标线程结束时,pthr…...
android面试情景题详解:android如何处理断网、网络切换或低速网络情况下的业务连续性
在移动互联网时代,Android应用已经成为人们日常生活中不可或缺的一部分。从社交媒体到在线购物,从移动办公到娱乐消费,几乎所有的服务都依赖于网络连接。然而,网络环境并非总是稳定可靠。断网、网络切换(如从Wi-Fi切换…...
基于 Qt 的 BMP 图像数据存取至 SQLite 数据库的实现
基于 Qt 的 BMP 图像数据存取至 SQLite 数据库的实现说明 本项目通过 Qt 框架实现了将 BMP 图像文件以二进制形式存入 SQLite 数据库,并可从数据库中读取还原为 BMP 图像文件的功能,适用于需要图像与结构化数据统一管理的场景。 整个流程分为两个主要部…...
Melos 发布pub.dev
🧰 Melos 全套实用教程(Flutter Monorepo 管理神器) 🚀 目录: 什么是 Melos?适合哪些项目? 安装与初始化 项目结构推荐 melos.yaml 配置详解 常用命令讲解(bootstrap、run、exe…...
基于 SSM 高校二手交易平台
收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...
Missashe考研日记-day20
Missashe考研日记-day20 1 高数 学习时间:2h30min学习内容: 今天当然是刷题啦,做不等式的证明板块的真题,证明题懂的都懂,难起来是真的一点思路都没有,这个板块还没做完,做完再总结题型。 2…...
Spring 单元测试核心注解全解:@InjectMocks、@MockBean、@Mock、@Autowired 的区别与实战
在编写 Spring Boot 应用的单元测试过程中,@InjectMocks、@MockBean、@Mock 和 @Autowired 是最常用的几个注解,但它们经常被混淆或误用,导致测试失败或注入错误。 本文将从本质区别、使用场景、示例代码、对比表格等多个维度,全面解析这几者的使用方法与差异,助你写出结…...
Spring Boot 项目里设置默认国区时区,Jave中Date时区配置
在 Spring Boot 项目里设置国区时区(也就是中国标准时间,即 Asia/Shanghai),可通过以下几种方式实现: 方式一:在application.properties或application.yml里设置 application.properties properties sp…...
如何使用Cloud Sync搭建群晖NAS跨设备自动备份与手机端实时监控
文章目录 前言1. 群晖NAS安装Cloud Sync1.1 安装和配置 Cloud Sync 2. 功能演示3. 群晖安装cpolar内网穿透3.1 配置Cloud Sync公网访问地址 4. 配置固定公网地址 前言 在当今这个信息爆炸的时代,个人和企业都面临着一个共同的难题:数据分散在各种设备和…...
git回退到指定版本
查看提交历史 在本地仓库中运行 git log 命令,找到需要回退到的版本对应的 commit ID。 重置本地分支 执行 git reset --hard commit_id 将本地分支回退至目标版本,commit_id为要会退的版本号。 强制推送更改 运行 git push origin HEAD --force 强制更…...
【Python爬虫】简单介绍2
目录 四、网页数据的加载方式 4.1 数据直接放在请求响应结果中 4.2 数据在异步请求响应结果中 五、爬虫 - 反爬虫 - 反反爬虫 5.1 反爬虫 5.2 反反爬虫 六、风险 6.1 合法性与合规性的重要性 6.2 违规使用爬虫面临的法律风险示例 6.3 合法合规使用爬虫的建议 四、网页…...