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

系统架构师---软件重用、基于架构的软件设计、软件模型

目录

软件重用

构件技术

基于架构的软件设计

ABSD方法与生命周期

抽象功能需求

用例

抽象的质量和业务需求

架构选项

质量场景

约束

基于架构的软件开发模型

架构需求

需求获取

标识构件

需求评审

架构设计

架构文档

架构复审

架构实现

架构演化


前言:

软件重用技术是一种重要的软件开发方法,虽然至今软件重用技术还不够成熟,距离理想中的软件工厂还有一些距离,但是现有的一些重用技术(例如,中间件、应用服务器等)已经改变了开发过程。

软件重用

软件产品与其他的产品不同,是抽象的,一旦产生就可以不限制地复制,因此重复利用软件产品的意义重大,可以节约大量的人力物力。软件重用指的是利用已经存在的软件元素建立新的软件系统,这其中的软件元素既可以是软件产品、源代码、也可以是文档、设计思想甚至是领域知识。软件重用可以直接提高软件的开发效率、降低软件的开发成本、缩短软件的开发周期、提高软件质量。

常见的软件重用形式包括:

  1. 源代码复用。这是最简单的也是最常见的重用形式,但由于软件系统的复杂性,很难大规模地重用已有源代码。
  2. 架构重用。架构重用也很常见,随着软件架构风格和设计模式的推广和应用,架构重用已经对软件开发产生了重大的影响。
  3. 应用框架的重用。随着软件技术的发展,应用框架的重用变得越来越普遍,很多成熟的软件公司都建立了自己的开发框架。在开源社区中,世界各地的技术爱好者也在不断地推出应用了各种新技术的开发框架,例如,应用AOP技术的Spring等
  4. 业务建模的重用。虽然不同的软件的业务领域各自不同,但人们还是总结出了一些常见领域的建模方法,重用这些领域模型可以降低因领域知识不足而造成的需求风险。
  5. 文档以及过程重用。软件文档和软件过程也是软件开发中不可缺少的元素,有效地重用这些文档和过程也有助于提高开发效率和软件质量、降低开发成本。
  6. 软件构件的重用。
  7. 软件服务的重用。随着Web服务的提出,人们越来越关注服务的重用。SOA面向服务框架提出了面向服务的软件架构,并且定义了相应的标准。但是SOA还不够成熟,相信这一领域在未来的几年中还将取得更大的进展。
构件技术

构件又称为组件,是一个包容、可复用的程序集。首先,构件是一个程序集,或者说是一组程序的集合。这个集合可能会以各种方式体现出来,如源程序或二进制的代码。这个集合整体向外提供统一的访问接口,构件外部只能通过接口来访问构件,而不能直接操作构件的内部。

构件的两个最重要的特征是自包容与可重用。自包容指的是构件的本身是一个功能完整的独立体,构件内部与外部的功能界限清晰明确,可以独立配置与使用。而可重用既是构件的特点,也是构件 出现的目的。使用构件技术实现软件复用,采用搭积木的方式生产软件,就成为软件人员的梦想。

构件的开发者和使用者往往不是相同的人或组织,所以必须定义构件的标准才能够消除其中的障碍。随着构件技术的发展,目前应用比较广泛的构件标准有Java Bean。

基于架构的软件设计

基于架构的软件设计是一种架构驱动方法。

  1. 功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术。
  2. 通过选择架构风格来实现质量和业务需求。
  3. 软件模板的使用。软件模板利用了一些软件系统的结构。

软件模板是一个特殊类型的软件元素,包括描述所有这种类型的元素在共享服务和底层构造的基础上如何进行交互。软件模板还包括属于这种类型的所有元素的功能,这些功能的例子有,每个元素必须记录某些重大事件,每个元素必须为运行期间的外部诊断提供测试点等。在软件产品线系统 中,软件模板 显得格外重要,因为新元素的引入是一个通用的技术。这个技术用来使产品线架构适应一个特定的产品。

ABSD方式是递归的,且迭代的每一个步骤都是清晰定义的。因此,不管设计是否完成,架构总是清晰的,这有助于降低架构设计的随意性。

ABSD方法与生命周期

ABSD方法在生命周期中的位置。尽管我们没有描述一个需求获取、组织或跟踪的特定方法,但还是假设一个需求阶段至少部分完成,从需求获取(包括功能需求、质量和业务需求、约束)。ABSD方法的输出是三个视图的概念构件的集合,包括能够产生每个概念构件的假设、软件模板的集合和那些已经做出具体实现的决策,我们把具体实现决策当作附加约束来维护。

在ABSD方法中,必须记录所有做出的决策及这些决策的原理,这有利于决策的可跟踪性和决策评审。

ABSD方法的输入由下列部分组成

  1. 抽象功能需求,包括变化的需求和通用的需求
  2. 用例(实际功能需求)
  3. 抽象的质量和业务需求
  4. 质量因素(实际质量和业务需求)
  5. 架构选项
  6. 约束
抽象功能需求

ABSD方法假定需求阶段的输出之一是功能需求的抽象描述,包括这些需求的粗略变化描述。当获取需求时,考虑所有最终用户是重要的。

对一个特定系统来说,通常有不同类型的最终用户。不同的系统管理员(数据库管理员、系统管理员、网络管理员等)都是可以是最终用户。维护工程师也可以是系统的最终用户。总之,一个最终用户就是当系统运行时使用系统的任何人员。

与抽象功能需求相联系的是对公共需求和与这些需求相关的粗略变化的描述,在设计阶段,理解这些需求之间的依赖关系是至关重要的。

我们必须在某些抽象级别上获取功能需求,产品的详细需求往往要等具体产品开发完成后才能知道。当详细需求明确时,抽象功能的获取为详细需求提供了分类。

用例

用例是一个或多个最终用户系统之间的交互的具体表述,在这里,最终用户既可以是操作人员,也可以是与系统进行交互操作的其他软件系统。虽然用例很容易找到和创新,甚至可能有成百上千个,但是,因为我们需求分析用例,所以必须限制用例的数量。在架构设计阶段,只有重要的用例才有用。我们必须对所创建的用例进行分组,设置优先级,以便筛选出最重要的用例,剩下的用例可以在设计阶段的任何时候创建。

抽象的质量和业务需求

必须对待构建系统的质量和业务需求进行编号,每个质量属性都包含一个特定的行为,以及希望得到的结果,质量需求要尽量具体化。

架构选项

对每个质量和业务需求,我们都要列举能够满足该需求的所有可能的架构。例如,如果需求是支持一系列 不同的用户界面,则可能的架构选择就是把不同的用户界面分解成不同的构件。如果需求是保持操作系统的独立性,则可能的架构选择就是构建虚拟的操作系统层,接受所有的操作系统调用,并解释之为当前操作系统所能的支持。

只需要列举所有可能的选项,而不需要对这些架构选项进行决策,这种列举取决于设计师的经验,即可来自某些书籍介绍,也可直接来自设计师本身的实践。

质量场景

用例功能需求具体化一样,质量场景使质量需求具体化。质量场景使质量需求的特定扩充。

和用例一样,质量场景也很容易找到和创建,可以创建很多个。我们必须对质量场景进行分组,设置优先级,只需要验证最重要的质量场景。

约束

约束是一个前置的设计决策,设计过程本身包含决策。某些决策可以直接由业务目标导出而无须考虑对设计的影响。例如,如果一个公司在某个中间件产品上投入大量资金,那么在产品的选择上就可以不必考虑其他决策。在需求获取阶段,约束主要来自系统的业务目标。

在某些特殊情况下,约束由遗留系统决定。今天,几乎没有软件系统不参考已有系统的,常见的情况下,新老系统同时并存,或者新系统替代老系统,但是必须尽可能重用老系统的功能。在设计阶段,虽然这些遗留系统处于被设计系统的外部,但是设计师必须考虑遗留系统的特征。也就是说,在某种程度上,遗留系统影响着当前的设计,因此,理解遗留系统的结构和解决 问题的技术都很重要。出于商业的目的,可能要求重用遗留系统的构件,这种需求就变成了约束。

基于架构的软件开发模型

基于架构的软件开发模型(ABSDM)把整个基于架构的软件过程划分为架构需求、设计、文档化、复审、实现、演化等6个子过程。

架构需求

需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。架构需求受技术环境和架构设计师的经验影响。需求过程主要是获取用户需求,标识系统种所要用到的构件。如果以前有类似的系统架构的需求,我们可以从需求库中取出,加以利用和修改,以节省需求获取的时间,减少重复劳动,提高开发效率。

需求获取

架构需求一般来自三个方面,分别是系统的质量目标,系统的业务目标和系统开发人员的业务目标。软件架构需求获取过程主要是定义开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足业务上的功能需求。

与此同时,还要获得软件质量属性,满足一些非功能需求。

标识构件

上图所示虚框部分属于标识构件过程,该过程为系统生产初始逻辑结构,包含大致的构件。这一过程又可以分为三步来实现。

第一步:生产类图。生产类图的CASE工具有很多,例如Rational Rose就能生成类图。

第二步:对类进行分组。在生成的类图基础上,使用一些标准对类进行分组可以大大简化类图结构,使之更清晰。一般地,与其他类隔离的类形成一个组,由泛化关联的类组成一个附加组,由聚合或组合关联的类也形成一个附件组。

第三步:把类打包成构件。把在第二步得到的类打包成构件,这些构件可以分组合并成更大的构件。

需求评审

组织一个由不同代表(如分析人员、客户、设计人员、测试人员)组成的小组,对架构需求及相关构件进行仔细的审查。审查的主要内容包括所获取的需求是否真实反映了用户的需求,类的分组是否合理,构件合并是否合理等。

必要时,可以在“需求-标识构件-需求评审”之间进行迭代。

架构设计

架构需求用来激发和调整设计决策,不同的视图被用来表达与质量目标有关的信息。架构设计是一个迭代的过程,如果要开发的系统能够 从已拥有的系统中导出大部分,则可以使用已有系统的设计过程。软件架构设计过程如图:

  1. 提出软件架构模型
    1. 在建立架构的初期,选择一个合适的架构风格是首要的。在 这个风格基础上,开发人员通过架构模型,可以获得关于架构属性的理解。此时,虽然这个模型是理想化的(其中的某些部分可能错误地表示了应用的特征),但是,该模型为将来的实现和演化过程建立了目标。
    2. 把已标识的构件映射到软件架构中,把在架构需求阶段已标识的构件映射到架构中,将产生一个中间结构,这个中间结构只包含哪些能明确适合架构模型的构件。
    3. 分析构件之间的相互作用,为了把所有已标识的构件集成到架构中,必须认真分析这些构件的相互作用和关系。
    4. 产生软件架构,一旦决定了关键构件之间的关系和相互作用,就可以在第二阶段得到的中间架构的基础上进行细化。
    5. 设计评审,一旦设计了软件架构,我们必须邀请独立于系统开发的外部人员对架构进行评审。
架构文档

绝大多数的架构都是抽象的,由一些概念上的构件组成。例如,层的概念在任何程序设计语言中都不存在。因此,要让系统分析师和程序员去实现架构,还必须把架构进行文档化。文档是在系统演化的每一个阶段,系统设计与开发人员的通信媒介,是为验证架构设计和提炼或修改这些设计所执行预先分析的基础。

架构文档化过程的主要输出结果是架构需求规格说明和测试架构需求的质量设计说明书这两个文档。生成需求模型构件的精确 的 形式化的描述,作为用户和开发者之间的一个约定。

软件架构的文档要求与软件开发项目中的其他文档是类似的。文档的完整性和质量是软件架构成功的关键因素。文档要从使用者的角度进行编写,必须分发给所有与系统有关的开发人员,并且保证开发者手上的文档是最新的。

架构复审

上图中可以看出,架构设计、文档化和复审是一个迭代的过程。从这方面来说,在一个主版本的软件架构分析之后,要安排一次由外部人员(用户代表和领域专家)参加的复审。

复审的目的是标识潜在的风险,以及早发现架构设计中的缺陷和错误,包括架构能否满足需求、质量需求是否在设计中得到体现、层次是否清晰、构件的划分是否合理、文档表达是否明确、构件的设计是否满足功能与性能的要求,等等

由外部人员进行复审的目的是保证架构的设计能够公正的进行检验,使组织的管理者能够决定正式实现架构。

架构实现

所谓的实现,就是用实体来显示出一个软件架构,即要符合架构所描述的架构性设计决策,分割成规定的构件,按规定方式互相交互。架构的实现过程如图

上图中的虚框部分是架构实现过程。整个实现过程是以复审后的文档化的架构说明书为基础的,每个构件必须满足软件架构中说明的对其他 构件的责任。这些决定即实现的约束是在系统级或项目范围内做出的,每个构件上工作的实现者是看不见的。

在架构说明书中,已经定义了系统中的构件与构件之间的关系。因为在架构层次上,构件接口约束对外唯一地 代表了构件,所以可以从构件库中查找符合接口约束的构件,必要时开发新的满足要求的构件。

然后,按照设计提供的结构,通过组装支持工具把这些 构件的实现体组装起来,完成整个软件系统的连接与合成。

最后一步是测试,包括单个构件的功能性测试和被组装应用的整个功能和性能测试。

架构演化

在构件开发过程中,最终用户 的需求可能还有变动。在软件开发完毕,正常运行后,由一个单位移植到另一个单位,需求也会发生变化。在这种情况下,就必须相应地修改软件架构,以适应新的软件需求。架构演化过程如下图所示。脚骨演化是使用系统演化步骤去修改应用,以满足新的需求。主要包括以下七个步骤。

  1. 需求变动归类首先必须对用户需求的变化进行分类,使变化的需求与已有构件对应。对找不到对应构件的变动,也要做好标记,在后续的工作中,将创建新的构件,以对应这部分变化的需求。
  2. 制定架构演化计划在改变原有结构之前,开发组织必须制定一个周密的架构演化计划,作为后续演化开发工作的指南。
  3. 修改、增加或删除构件在演化计划的基础上,开发人员可根据在第一步得到的需求变动的归类情况,决定是否修改或删除存在的构件、增加新的构件。最后,对修改和增加的构件进行功能性测试。
  4. 更新构件的相互作用随着构件的增加、删除和修改,构件之间的控制流必须得到更新。
  5. 构件组装与测试通过组装支持工具把这些构件的实现组装起来,完成整个软件系统的连接与合成,形成新的架构。然后对组装后的系统的整体功能和性能进行测试。
  6. 技术评审对以上步骤进行确认,进行技术评审。评审组装后的架构是否反映需求变动,符合用户需求。如果不符合,则需要进行2到6步之间进行迭代。
  7. 产生演化后的架构在原来的系统上所作修改必须集成到原来的架构中,完成一次演化过程。

相关文章:

系统架构师---软件重用、基于架构的软件设计、软件模型

目录 软件重用 构件技术 基于架构的软件设计 ABSD方法与生命周期 抽象功能需求 用例 抽象的质量和业务需求 架构选项 质量场景 约束 基于架构的软件开发模型 架构需求 需求获取 标识构件 需求评审 架构设计 架构文档 架构复审 架构实现 架构演化 前言&…...

【Web开发指南】MyEclipse XML编辑器的高级功能简介

MyEclipse v2023.1.2离线版下载 1. 在MyEclipse中编辑XML 本文档介绍MyEclipse XML编辑器中的一些可用的函数,MyEclipse XML编辑器包括高级XML编辑,例如: 语法高亮显示标签和属性内容辅助实时验证(当您输入时)文档内容的源(Sou…...

设计模式-观察者模式(观察者模式的需求衍变过程详解,关于监听的理解)

目录 前言概念你有过这样的问题吗? 详细介绍原理:应用场景: 实现方式:类图代码 问题回答监听,为什么叫监听,具体代码是哪观察者模式的需求衍变过程观察者是为什么是行为型 总结: 前言 在软件设计…...

vue+electron中实现文件下载打开wps预览

下载事件 win.webContents.downloadURL(url) 触发session的will-download事件 win.webContents.session.on(will-download, (event, downloadItem, webContents) > {// 设置文件保存路径// 如果用户没有设置保存路径,Electron将使用默认方式来确定保存路径&am…...

第4章 性能分析中的术语和指标

Linux perf和Intel VTune Profiler工具。 4.1 退休指令与执行指令 考虑到投机执行,CPU执行的指令要不退休指令多。Linux perf使用perf stat -e instruction ./a.exe即可获得退休指令的数量。 4.2 CPU利用率 CPU利用率表示在一段时间内的繁忙程度,用时…...

数字化转型能带来哪些价值?_光点科技

随着科技的迅猛发展,数字化转型已成为企业和组织的一项重要战略。它不仅改变了商业模式和运营方式,还为各行各业带来了诸多新的机遇和价值。在这篇文章中,我们将探讨数字化转型所能带来的价值。 数字化转型能够显著提升效率和生产力。通过引入…...

适用于Android™的Windows子系统Windows Subsystem fo r Android™Win11安装指南

文章目录 一、需求二、Windows Subsystem for Android™Win11简介三、安装教程1.查看BIOS是否开启虚拟化2.安装Hyper-V、虚拟机平台3.启动虚拟机管理程序(可选)4.安装适用于Android™的Windows子系统5.相关设置 一、需求 需要在电脑上进行网课APP(无客户端只有App&…...

hive高频使用的拼接函数及“避坑”

hive高频使用的拼接函数及“避坑” 说到拼接函数应用场景和使用频次还是非常高,比如一个员工在公司充当多个角色,我们在底层存数的时候往往是多行,但是应用的时候我们通常会只需要一行,角色字段进行拼接,这样join其他…...

windows ipv4 多ip地址设置,默认网关跃点和自动跃点是什么意思?(跃点数)

文章目录 Windows中的IPv4多IP地址设置以及默认网关跃点和自动跃点的含义引言IPv4和IPv6:简介多IP地址设置:Windows环境中的实现默认网关跃点:概念和作用自动跃点:何时使用?关于“跃点数”如何确定应该设置多少跃点数&…...

java_免费文本翻译API_小牛翻译

目录 前言 开始集成API 纯文本翻译接口 双语对照翻译接口 指定术语翻译接口 总结 前言 网络上对百度,有道等的文本翻译API集成的文章比较多,所以集成的第一篇选择了小牛翻译的文本翻译API。 小牛翻译文本翻译API,支持388个语种&#xff0…...

flink消费kafka数据,按照指定时间开始消费

kafka中根据时间戳开始消费数据 import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer; import org.apache.flink.kafka.shaded.org.apache.kafka.clients.consumer.OffsetRese…...

【SpringCloud】Feign使用

文章目录 配置maven启动类添加yml 使用添加Feign服务Controller 其他设置超时设置YML开启OpenFeign客户端超时控制&#xff08;Ribbon Timeout&#xff09;OpenFeign日志打印功能日志级别YML开启日志 配置 maven <dependencies><!--openfeign--><dependency&g…...

WebApIs 第五天

window对象 BOM&#xff08;浏览器对象模型&#xff09;定时器-延时函数JS执行机制location对象navigator对象histroy对象 本地存储 一.BOM&#xff08;浏览器对象模型&#xff09; ① BOM是浏览器对象模型 window 对象是一个全局对象&#xff0c;也可以说是JavaScript中的…...

按斤称的C++散知识

一、多线程 std::thread()、join() 的用法&#xff1a;使用std::thread()可以创建一个线程&#xff0c;同时指定线程执行函数以及参数&#xff0c;同时也可使用lamda表达式。 #include <iostream> #include <thread>void threadFunction(int num) {std::cout <…...

C++策略模式

1 简介&#xff1a; 策略模式是一种行为型设计模式&#xff0c;用于在运行时根据不同的情况选择不同的算法或行为。它将算法封装成一个个具体的策略类&#xff0c;并使这些策略类可以相互替换&#xff0c;以达到动态改变对象的行为的目的。 2 实现步骤&#xff1a; 以下是使用…...

如何在网页下载腾讯视频为本地MP4格式

1.打开腾讯视频官网地址 腾讯视频 2.搜索你想要下载的视频 3. 点击分享,选择复制通用代码 <iframe frameborder="0" src="ht...

opencv-yolov8-目标检测

import cv2 from ultralytics import YOLO# 模型加载权重model YOLO(yolov8n.pt)# 视频路径cap cv2.VideoCapture(0)# 对视频中检测到目标画框标出来 while cap.isOpened():# Read a frame from the videosuccess, frame cap.read()if success:# Run YOLOv8 inference on th…...

CRYPTO 密码学-笔记

一、古典密码学 1.替换法&#xff1a;用固定的信息&#xff0c;将原文替换成密文 替换法的加密方式&#xff1a;一种是单表替换&#xff0c;另一种是多表替换 单表替换&#xff1a;原文和密文使用同一张表 abcde---》sfdgh 多表替换&#xff1a;有多涨表&#xff0c;原文和密文…...

基于YOLOv8模型的五类动物目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的五类动物目标检测系统可用于日常生活中检测与定位动物目标&#xff08;狼、鹿、猪、兔和浣熊&#xff09;&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与…...

Java课题笔记~ SpringBoot基础配置

二、基础配置 1. 配置文件格式 问题导入 框架常见的配置文件有哪几种形式&#xff1f; 1.1 修改服务器端口 http://localhost:8080/books/1 >>> http://localhost/books/1 SpringBoot提供了多种属性配置方式 application.properties server.port80 applicati…...

vue实现文件上传,前后端

前端封装el-upload组件&#xff0c;父组件传值dialogVisible&#xff08;用于显示el-dialog&#xff09;&#xff0c;子组件接收&#xff0c;并且关闭的时候返回一个值&#xff08;用于隐藏el-dialog&#xff09;,最多上传五个文件&#xff0c;文件格式为.jpg\pdf\png <tem…...

OJ练习第151题——克隆图

克隆图 力扣链接&#xff1a;133. 克隆图 题目描述 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08;克隆&#xff09;。 示例 分析 对于一张图而言&#xff0c;它的深拷贝即构建一张与原图结构&#xff0c;值均一样的图&#xff0c;但是…...

keepalived+lvs实现高可用

目录 环境 1.配置real-server服务器 2.配置keepalived和lvs 3.测试&#xff1a; 概述 keepalivedlvs实现高可用&#xff1a; lvs可以监控后端服务器&#xff0c;当服务器宕机之后可以对其进行故障切换。 keepalived是对VIP进行检测&#xff0c;当某一个主机的vip错误&…...

【Let‘s make it big】英语合集61~70

61(82) top-of-range it doesn’t get any better than this There seems to be a problem with my account What seems to be the problem withdraw money from my saving account charged an overdraft fee we don’t give loans to customers whose accounts are overdrawn…...

python实现图像的二分类

要实现图像的二分类&#xff0c;可以使用深度学习中的卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;模型。下面是一个使用Keras库实现的简单CNN模型示例&#xff1a; from keras.models import Sequential from keras.layers import Conv2D, MaxPoo…...

8.深浅拷贝和异常处理

开发中我们经常需要复制一个对象。如果直接用赋值会有下面问题: 8.1 浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝&#xff1a;拷贝的是地址 常见方法: 1.拷贝对象&#xff1a;Object.assgin() / 展开运算符{…obj} 拷贝对象 2.拷贝数组&#xff1a;Array.prototype.con…...

Element Plus el-table 数据为空时自定义内容【默认为 No Data】

1. 通过 Table 属性设置 <div class"el-plus-table"><el-table empty-text"暂无数据" :data"tableData" style"width: 100%"><el-table-column prop"date" label"Date" width"180" /&g…...

使用nginx和frp实现高效内网穿透:简单配置,畅通无阻

I. 引言 A. 介绍内网穿透的概念和用途 内网穿透是一种网络技术&#xff0c;它允许用户通过公共网络访问位于私有网络&#xff08;内网&#xff09;中的资源和服务。在传统的网络环境中&#xff0c;内网通常是由路由器或防火墙保护的&#xff0c;无法直接从外部网络访问内部资…...

Python土力学与基础工程计算.PDF-螺旋板载荷试验

python 求解代码如下&#xff1a; 1. import numpy as np 2. 3. # 已知参数 4. p_a 100 # 标准压力&#xff0c; kPa 5. p np.array([25, 50, 100, 200) # 荷载&#xff0c; kPa 6. s np.array([2.88, 5.28, 9.50, 15.00) / 10 # 沉降量&#xff0c; cm 7. D 10 # 螺旋板直…...

低代码开发ERP:精打细算,聚焦核心投入

企业数字化转型已经成为现代商业环境中的一项关键任务。如今&#xff0c;企业面临着日益激烈的竞争和不断变化的市场需求。在这样的背景下&#xff0c;数字化转型不仅是企业生存的必然选择&#xff0c;也是取得竞争优势和实现可持续发展的关键因素。 在数字化转型的过程中&…...

顺序表(数据结构)

“路虽远&#xff0c;行则将至” ❤️主页&#xff1a;小赛毛 顺序表目录 1.线性表 2.顺序表 概念及结构 静态顺序表&#xff1a;使用定长数组存储元素。 动态顺序表&#xff1a;使用动态开辟的数组存储。 接口实现 1.线性表 线性表 &#xff08; linear list &#xff09; 是…...

stable_diffusion_webui docker环境配置

1.新建docker环境 docker run -tid --name e_commerce_sd --net host --runtimenvidia nvidia/cuda:11.1-cudnn8-devel-cent os7-ssh /bin/bashdocker exec -ti e_commerce_sd /bin/bash echo expor…...

【Java】常见面试题:HTTP/HTTPS、Servlet、Cookie、Linux和JVM

文章目录 1. 抓包工具&#xff08;了解&#xff09;2. 【经典面试题】GET和POST的区别&#xff1a;3. URL中不是也有这个服务器主机的IP和端口吗&#xff0c;为啥还要搞个Host&#xff1f;4. 补充5. HTTP响应状态码6. 总结HTTPS工作过程&#xff08;经典面试题&#xff09;7. H…...

批量爬虫采集完成任务

批量爬虫采集是现代数据获取的重要手段&#xff0c;然而如何高效完成这项任务却是让许多程序员头疼的问题。本文将分享一些实际操作价值高的方法&#xff0c;帮助你提高批量爬虫采集的效率和专业度。 目标明确&#xff0c;任务合理划分&#xff1a; 在开始批量爬虫采集前&…...

intelij idea 2023 创建java web项目

1.点击New Project 2.创建项目名称为helloweb &#xff0c;jdk版本这里使用8&#xff0c;更高版本也不影响工程创建 点击create 3.新建的工程是空的&#xff0c;点击File-> Project Structure 4.点击Modules 5.点击加号&#xff0c;然后键盘输入web可以搜索到web模块&…...

【论文笔记】基于指令回译的语言模型自对齐-MetaAI

MetaAI最近发布的Humpback&#xff0c;论文链接&#xff1a;https://arxiv.org/abs/2308.06259 解决什么问题&#xff1f; 大量高质量的指令微调数据集的生成。 思路 在这项工作中&#xff0c;我们通过开发迭代自训练算法来利用大量未标记的数据来创建高质量的指令调优数据集…...

MySQL和MariaDB的版本对应关系

MariaDB 10.0和MariaDB 10.1可以作为MySQL 5.6的有限替代。 MariaDB 10.2可以作为MySQL 5.7的有限替代。 一&#xff0c;目前最新版本 MariaDB 10.5.8 10.4.17 10.3.27 10.2.36 MySQL 8.0.23 二&#xff0c;oracle MySQL版本和MariaDB版本对应表: MariaDB版本 …...

Python数据的输入与输出

编辑&#xff1a;2023-08-14 17:00 Python是一种高级编程语言&#xff0c;它支持多种输入输出方式&#xff0c;包括标准输入输出、文件输入输出等。本文将从以下几个方面详细阐述Python数据的输入与输出。 一、标准输入输出 Python中的标准输入和标准输出指的是控制台输入输…...

生成国密密钥对

在线生成国密密钥对 生成的密钥对要妥善保管&#xff0c;丢失是无法找回的。...

ASR(自动语音识别)任务中的LLM(大语言模型)

一、LLM大语言模型的特点 二、大语言模型在ASR任务中的应用 浅度融合 浅层融合指的是LLM本身并没有和音频信息进行直接计算。其仅对ASR模型输出的文本结果进行重打分或者质量评估。 深度融合 LLM与ASR模型进行深度结合&#xff0c;统一语音和文本的编码空间或者直接利用ASR…...

简单介绍一下centos上有什么工具可以优雅的管理开机启动项

在CentOS上&#xff0c;你可以使用以下工具来优雅地管理开机启动项&#xff1a; systemctl&#xff1a;systemctl 是 systemd 系统和服务管理器的主要命令。它提供了一种优雅的方式来管理启动项。你可以使用 systemctl 命令来启用、禁用、查看和管理系统服务。例如&#xff0c;…...

万宾燃气管网监测解决方案,守护城市生命线安全

方案背景 城市燃气管网作为连接天然气长输管线与天然气用户的桥梁&#xff0c;担负着向企业和居民用户直接供气的重要职责。随着城市燃气需求的急剧增加&#xff0c;城市燃气管网规模日趋庞大&#xff0c;安全隐患和风险也随之增加。目前&#xff0c;我国燃气管网的运行仍存在…...

Django框架 靓号管理(增删改查)

Django框架 靓号管理&#xff08;增删改查&#xff09; 新建一个项目 backend 使用pycharm创建app startapp app项目目录 C:\code\backend ├── app | ├── admin.py | ├── apps.py | ├── migrations | ├── models.py | ├── tests.py | ├── views.…...

责任链模式简单实现

两种实现方式 第一种 public interface IBaseTask {public void doAction(String isTask,IBaseTask iBaseTask); }public class ChainManager implements IBaseTask{//工作类的集合private List<IBaseTask> iBaseTaskList new ArrayList<>();public void addTas…...

Excel自动化办公——Openpyxl的基本使用

Excel自动化办公——Openpyxl的基本使用 个人感觉&#xff0c;相比Pandas&#xff0c;openpyxl对Excel的操作更为细致&#xff0c;Pandas则更适用于统计计算&#xff1b; 01 基本环境02 Excel数据读取操作03 案例04 向Excel写入数据05 表数据定向修改06 单元格样式制定07 单元…...

解决Fastjson2 oom(Out Of Memory),支持大对象(LargeObject 1G)json操作

在使用Fastjson中的 JSON.toJSONString时,如果对象数据太大&#xff08;>64M&#xff09;会出现Out Of Memory,查看源码发现为JSONWriter中的判断代码 其中maxArraySize默认最大为64M,如果超过了就会抛出oom错误 如果fastjson过多的使用内存,也可能导致java堆内存溢出,所以这…...

SpringBoot + redis处理购物车逻辑

1、pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 2、application.xml spring: characterEncodingutf-8&useSSLfalseredis:host: 127.0.…...

open cv学习 (五) 图像的阈值处理

图像的阈值处理 demo1 # 二值化处理黑白渐变图 import cv2 img cv2.imread("./img.png", 0) # 二值化处理 t1, dst cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow("img", img) cv2.imshow("dst", dst) cv2.waitKey() cv2.des…...

NVIDIA vGPU License许可服务器高可用全套部署秘籍

第1章 前言 近期遇到比较多的场景使用vGPU&#xff0c;比如Citrix 3D场景、Horizon 3D场景&#xff0c;还有AI等&#xff0c;都需要使用显卡设计研发等&#xff0c;此时许可服务器尤为重要&#xff0c;许可断掉会出现掉帧等情况&#xff0c;我们此次教大家部署HA许可服务器。 …...

基于CNN卷积神经网络的口罩检测识别系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................ % 循环处理每张输入图像 for…...