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

10.1软件工程知识详解上

  • 软件工程概述

  1. 软件开发生命周期
    1. 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。
    2. 软件开发时期:就是软件的设计与实现,可分成概要设计、详细设计、编码、测试等。
    3. 软件运行和维护:就是把软件产品移交给用户使用。
  2. 软件系统的文档可以分为用户文档和系统文档两类,用户文档主要描述系统功能和使用方法,并不关系这些功能是怎样实现的;系统文档描述系统设计、实现和测试等各方面的内容。
  3. 软件工程过程是指为获得软件产品包括以下4个方面活动:
    1. P(plan)——软件规格说明。规定软件的功能及其运行时的限制。
    2. D(Do)——软件开发。开发出满足规格说明的软件。
    3. C(Check)——软件确认。确认开发的软件能够满足用户的需求。
    4. A(Action)——软件演进。软件在运行过程中不断改进以满足客户新的需求。
  4. 软件系统工具通常可以按软件过程活动将软件工具分为:
    1. 软件开发工具:需求分析工具、设计工具、编码与排错工具、测试工具等。
    2. 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
    3. 软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。
  5. 软件设计四个活动:数据设计、架构(体系结构)设计、人机界面(接口)设计和过程设计。
  • 能力成熟度模型

  1. 能力成熟度模型CMM

能力等级

特点

关键过程区域

初始级(Initial)

软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。

可重复级(Repeatable)

建立了基本的项目管理过程和时间来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。

软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理。

已定义级(Defined)

管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来发和维护软件。

同行评审、组件协调、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点。

已管理级(Managed)

制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制

软件质量管理和定量过程管理

优化级(Optimized)

加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。

过程更改管理、技术改革管理和缺陷预防

  1. 能力成熟度模型集成CMMI

是若干过程模型的综合和改进,不仅仅软件,而是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。

CMMI两种表示方法:

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

能力等级

特点

关键过程区域

初始级

过程不可预测且缺乏控制

已管理级

过程为项目服务

需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证

已定义级

过程为组织服务

需求开发、技术解决方案、产品集成、验证、确认组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境

定量管理

过程已度量和控制

组织过程性能、定量项目管理

优化级

集中于过程改进和优化

组织级改革与实施、因果分析和解决方案

其中2-5级对应的过程域如下表所示:

成熟度等级

过程域

已管理级

需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证

已定义级

需求开发、技术解决方案、产品集成、验证、确认、组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境

定量管理

组织过程性能、定量项目管理

优化级

组织级改革与实施、因果分析和解决方案

  1. 连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。

  • 软件过程模型

  1. 瀑布模型(SDLC)

    1. 概念:瀑布模型是一个经典的生命周期模型,一般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码(含单元测试)、测试、运行维护几个阶段。
    2. 特点:
      • 从上一项开发活动接受该项活动的工作对象作为输入。
      • 利用这一输入,实施该项活动应完成的工作内容。
      • 给出该项活动的工作成果,作为输出给下一项开发活动。
      • 对该项活动的实施工作成果进行评审。若其工作成果得到确认,则继续进行下一项开发活动;否则返回前一项,甚至更前项的活动。尽量减少多个阶段的反复。以相对来说较小的费用来开发软件。
  1. 螺旋模型

    1. 螺旋模型是一个演化软件过程模型,将原型实现的迭代特征与线性顺序(瀑布),模型中控制的和系统化的方面结合起来。在螺旋模型中,软件开发是一系列的增量发布。
    2. 开发过程具有周期性重复的螺旋线状。四个象限分别标志每个周期所划分的四阶段:制定计划、风险分析、实施工程和客户评估。螺旋模型强调了风险分析,特别使用于庞大而复杂的、高风险的系统。
  1. V模型

V模型从整体上看起来,就是一个V字型的结构,从左右两边组成。左边的下划线分别代表了需求分析、概要设计、详细设计、编码。右边的上划线代表了单元测试、集成测试、系统测试与验收测试。V模型的特点如下:

  1. 单元测试的主要目的是针对编码过程中可能存在的各种错误。
  2. 集成测试的主要目的是针对详细设计中可能存在的问题。
  3. 系统测试主要是针对概要设计,检查系统作为一个整体是否有效地得到运行。
  4. 验收测试通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。
  5. V模型用于需求明确和需求变更不频繁的情形。
  1. 原型化模型

    1. 原型化模型第一步就是创建一个快速原型,能够满足项目干系人与未来的用户可以与原型进行交互,再通过与相关干系人进行充分的讨论和分析,最终弄清楚当前系统的需求,进行了充分的了解之后,再原型的基础上开发出用户满意的产品。
    2. 原型法认为很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下。
      • 实际可行
      • 具有最终系统的基本特征
      • 构造方便、快速、造价低。原型法的特点在于原型法对用户的需求是动态响应、逐步纳入的。

  1. 增量模型

  1. 增量模型:首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级最高的服务最先交付。
  2. 特点:由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分成多个增量。与原型不同的是增量模型的每一次增量版本都可作为独立可操作的作品,而原型的构造一般是为了演示。

  1. 喷泉模型

喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。使开发过程具有迭代性和无间隙性。

  1. 基于构件的开发模型CBSD

基于构件的开发模型CBSD:利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品软件构件。

特点是增强了复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。

  1. 形式化方法模型

建立在严格数学基础上的一种软件开发方法,主要活动是生成计算机软件形式化的数学规格说明。

  1. 敏捷模型

  1. 开发宣言:个体和交互胜于过程和工具、可以工作的软件胜过面面俱到的文档、客户合作胜过合同谈判、响应变化胜过遵循计划。
  2. 敏捷方法区别在于其他方面的两个特点:
    • 是“适应性”而非“预设性”
    • 是“面向人的”而非“面向过程的”。
  3. 敏捷方法和核心思想:
    • 敏捷方向是适应型,而非可预测型。拥抱变化,适应变化。
    • 敏捷方法是以人为本,而非以过程为本。发挥人的特性。
    • 迭代增量式的开发过程。以原型开发思想为基础,采用法代增量式开发,发行版本小型化。
  4. 主要敏捷方法;
    • 极限编程(XP)。基础和价值是交流、朴素、反馈和勇气,即任何一个软件项目都可以从4个方面入手进行改善:加强交流;从简单做起;寻求反馈;勇于实事求是。
      1. Xp是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对简单的小周期:通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
      2. XP提倡测试先行,为了将以后出现bug的几率降到最低。
    • 水晶系列方法。与XP方法一样,都有以人为中心的理念,但在实际上有所不同。其目的是发展一种体长“机动性的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。
    • 并列争球法(Scrum)。是一种迭代的增量化过程,把每段时间(如30天)一次的迭代称为一个“冲刺”(Sprint),并按需求的优先级别来实现产品,多个自组织和自治的小组并行地迭代实现产品。
    • 特性驱动开发方法(FDD)。是一个迭代的开发模型。认为有效的软件开发需要3个要素:人、过程和技术。有5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。

  1. 统一过程模型(RUP)

  1. RUP描述了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过程。RUP类似一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针、模板以及事例支持。
  2. RUP软件开发生命周期是一个二维的软件开发模型,RUP中有9个核心工作流,如下:
    • 业务建模:理解代开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估代开发系统对所在机构的影响。
    • 需求:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求,为项目预算及计划提供基础。
    • 分析与设计:把需求分析的结果转化为分析与设计模型。
    • 实现:把设计模型转换为实现结果,对开发的代码做单元测试,将不同实现人员开发的模块集成为可执行系统。
    • 测试:检查各子系统之间的交互、集成,验证所有需求是否均被正确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议。
    • 部署:打包、分发、安装软件,升级旧系统;培训用户及销售人员,并提供技术支持。
    • 配置与变更管理:跟踪并维护系统开发过程中产生的所有制品的完整性和一致性。
    • 项目管理:为软件开发项目提供计划、人员分配、执行、监控等方面的指导,为风险管理提供框架。
    • 环节:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持。
  3. RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新的版本,每个循环依次由4各连续的阶段组成,每个阶段完成确定的任务,这4各阶段如下。
    • 初始阶段:定义最终产品视图和业务模型,并确定系统范围。
    • 细化阶段:设计及确定系统的体系结构,制订工作计划及资源要求。
    • 构造阶段:构造产品并继续演进需求、体系结构、计划直至产品提交。
    • 移交阶段:把产品提交给用户使用。
  4. RUP中定义了如下一些核心概念,理解这些概念对理解RUP很有帮助。
    • 角色:Who的问题。角色描述某个人或一个小组的行为与职责。RUP预先定义了很多角色,如体系结构师、设计人员、实现人员、测试员和配置管理人员等,并对每一个角色的工作和职责都做了详尽的说明。
    • 活动:How的问题。活动是一个有明确目标的独立工作单元。
    • 制品:What的问题,制品是活动生成、创建或修改的一段信息。
    • 工作流:When的问题。工作流描述了一个有意义的连续的活动序列,每一个工作流产生一些有价值的产品,并显示了角色之间的关系。
  5. RUP的特点
    • 用例驱动:需求分析、设计、实现和测试等活动都是用例驱动的。
    • 以体系结构为中心:包括系统的总体组织和全局控制、通信协议等。是一个多维的结构,会采用多个视图来描述。在典型的4+1视图模型中:
      1. 分析人员和测试人员关心的是系统的行为,会侧重于用例视图;
      2. 最终用户关心的是系统的功能,会侧重于逻辑视图;
      3. 程序员关心的是系统的配置、装配等问题,会侧重于实现视图;
      4. 系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会侧重于进程视图;
      5. 系统工程师关心的是系统的发布、安装、拓扑结构等问题,会侧重于部署视图。

    • 迭代与增量。把整个项目开发分为多个迭代过程。在每次迭代中,只考虑系统的一部分需求,进行分析、设计、实现、测试和部署等过程;每次迭代是在已完成部分的基础上进行的,每次增加一些新的功能实现,以此进行下去,直到最后项目的完成。

  • 逆向工程

  1. 软件复用是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。
  2. 逆向工程:软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程。逆向工程的四个级别:
    1. 实现级:包括程序的抽象语法树、符号表、过程的设计表示。
    2. 结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构。
    3. 功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型。
    4. 领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,如:R-R模型。

其中,领域级抽象级别最高,完备性最低,实现级抽象级别最低,完备性最高。

  1. 相关概念有重构、设计恢复、再工程和正向工程。
    1. 重构是指在同一抽象级别上转换系统描述形式。
    2. 设计恢复是指借助工具从已有程序中抽象出有关数据的设计、总体结构设计和过程设计等方面的信息。
    3. 再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程。包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
    4. 正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
  2. 软件系统工具通常可以按照软件过程活动将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。
    1. 软件开发工具:需求分析工具、设计工具、编码与排错工具
    2. 软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
    3. 软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具和评价和选择。

  • 需求工程

  1. 软件需求

  1. 软件需求:是指用户对系统在功能、行为、性能、设计约束等方面的期望。是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力的文档说明。
  2. 分为需求开发和需求管理两大过程,如下图所示:

  3. 业务需求:反映企业或客户对系统高层次的目标要求,通常来自项目投资人、客户、市场营销部门或产品策划部门。通过业务需求可以确定项目视图和范围。
  4. 用户需求:描述的是用户的具体目标,或用户要求系统必须能完成的任务。即描述了用户能使用系统来做什么。通常采用用户访谈和问卷调查等方式,对用户使用的场景进行整理,从而建立用户需求。
  5. 系统需求:从系统的角度来说明软件的需求。包括功能需求、非功能需求和设计约束等。
    • 功能需求:也称为行为需求,规定了开发人员必须在系统中实现的软件功能,用户利用这些功能来完成任务,满足业务需要。
    • 非功能需求:指系统必须具备的属性或品质,又可以细分为软件质量属性(如可维护性、可靠性、效率等)和其他非功能需求。
    • 设计约束:也称为限制条件或补充规约,通常是对系统的一些约束说明,例如必须采用国有自主知识产权的数据库系统,必须运行在UNIX操作系统之下等。
  6. 软件需求开发是指从情况收集、分析和评价到编写文档、评审等一系列产生需求的活动,分为获取情况、分析、制定需求规格说明和评审四个阶段。
  1. 需求获取

    1. 需求获取:是一个确定和理解不同的项目关系人的需求和约束的过程。
    2. 常见的需求获取法包括:
      • 用户访谈:1对1-3,有代表性的用户。其形式包括结构化和非结构化两种。
      • 问卷调查:用户多,无法一一访谈。
      • 采样:从种群中系统地选出有代表性的样本集的过程。样本数量=0.25*(可信度因子/错误率)²。
      • 情节串联版:一系列图片,通过这些图片来将故事。
      • 联合需求计划(JRP):通过联合各个关键用户代表、系统分析师、开发团队代表一起,通过有组织的会议来讨论需求。
      • 需求记录技术:任务卡片、场景说明、用户故事、Volere白卡。
  2. 需求分析

  1. 需求分析:一个好的需求应该具有无二义性、完整性、一致性、可测试性、确定性、可跟踪行、正确性、必要性等特性,因此,需要分析人员把杂乱无章的用户要求和期望转化为用户需求,这就是需求分析的工作。
  2. 需求分析的任务
    • 绘制系统上下文范围关系图
    • 创建用户界面原型
    • 分析需求的可行性
    • 确定需求的优先级
    • 为需求建立模型
    • 创建数据字典
    • 使用QFD(质量功能部署)
  3. 结构化的需求分析
    • 结构化特点:自顶向下,逐步分解,面向数据
    • 三大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典。

  1. 数据流图DFD
    • 基本图像元素:外部实体、加工、数据存储、数据流。

      1. 数据流:由一组固定成分的数据组成,表示数据的流向。在DFD中,数据流的流向必须经过加工。
      2. 加工:描述了输入数据流到输出数据流之间的变换,数据流图中常见的三种错误如图所示:

        1. 加工3.1.2有输入但是没有输出,称之为“黑洞”
        2. 加工3.1.3有输出但没有输入,称之为“奇迹”
        3. 加工3.1.1中输入不足以生产输出,我们称之为“灰洞”。
      1. 数据存储:用来存储数据。
      2. 外部实体(外部主体):是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地(源)和系统所产生的数据的归宿地(宿)。
  1. 数据字典DD

数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。

数据字典有一下4类条目:数据流、数据项、数据存储和基本加工。

符号

含义

举例及说明

=

被定义为

+

x=a+b,表示x由a和b组成

[…/…]

x=[a/b],表示x由a或b组成

{……}

重复

x={a},表示x由0个或多个a组成

加工逻辑也称为“小说明”。常用的加工逻辑描述方法有结构化语言、判定表和片定树3种。

  1. 需求定义

  1. 需求定义(软件需求规格说明书SRS):是需求开发活动的产物,编制该文档的目的是使项目干系人与开发团队对系统的初始规定有一个共同的理解,使之成为整个开发工作的基础。SRS使软件开发过程中最重要的文档之一,对于任何规模和性质的软件项目都不应该缺少。
  2. 需求定义方法
    • 严格定义也称为预先定义,需求的严格定义建立在以下的基本假设之上;所有需求都能够被预先定义。开发人员与用户之间能够准确而清晰地交流。采用图形(或文字)可以充分体现最终系统。
    • 原型方法:迭代的循环型开发方式,需要注意的问题:并非所有的需求都能在系统开发前被准确地说明。项目干系人之间通常都存在交流上的困难,原型提供了克服该困难的一个手段。特点:需要实际的、可供用户参与的系统模型。有合适的系统开发环境。反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法。
  1. 需求验证

  1. 需求验证:也称需求确认,目的是与用户一起确认需求无误,对需求规格说明书SAS进行评审和测试,包括两个步骤:
    • 需求评审:正式评审和非正式评审。
    • 需求测试:设计概念测试用例。
  2. 需求验证通过后,要请用户签字确认,作为验收标准之一,此时,这个需求规格说明书就是需求基线,不可以再随意更新,如果需要更改必须走需求变更流程。

  1. 需求管理

  1. 定义需求基线:通过了评审的需求说明书就是需求基线,下次如果需要变更需求,就需要按照流程来一步步进行。需求的流程及状态如下图所示:

  1. 需求变更和风险

主要关心需求变更过程种的需求风险管理,带有风险的做法有:无足够用户参与、忽略了用户分类、用户需求的不断增加、摸棱两可的需求、不必要的特性、过于精简的SRS、不准确的估算。

  1. 变更产生的原因:外部环境的变化、需求和设计做的不够完整、新技术的出现、公司机构重组造成业务流程的变化。
  2. 变更控制委员会CCB:也成为配置控制委员会,其任务是对建议的配置项变更做出评价、审批,以及监督已经批准变更的实施。
  3. 双向跟踪,两个层次,如下图所示:

    • 正向跟踪表示用户原始需求是否都实现了,反向跟踪表示软件实现的是否都是用户要求的,不多不少,可以用原始需求和用例表格(需求跟踪矩阵)来表示;
    • 若原始需求和用例有对应,则在对应栏打对号,若某行都没有对号,表明原始需求未实现,正向跟踪发现问题;若某列都没有对号,表明有多余功能用例,软件实现了多余功能,反向跟踪发现问题。

相关文章:

10.1软件工程知识详解上

软件工程概述 软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。软件开发时期:就是软件的设计与实现,可分成…...

03Frenet与Cardesian坐标系(Frenet转Cardesian公式推导)

Frenet转Cardesian 1 明确目标 已知车辆质点在Frenet坐标系下的状态: Frenet 坐标系下的纵向坐标: s s s纵向速度: s ˙ \dot{s} s˙纵向加速度: s \ddot{s} s横向坐标: l l l横向速度: l ˙ \dot{l} l…...

knowLedge-Vue I18n 是 Vue.js 的国际化插件

1.简介 Vue I18n 是 Vue.js 的国际化插件,它允许开发者根据不同的语言环境显示不同的文本,支持多语言。 Vue I18n主要有两个版本:v8和v9。v8版本适用于Vue2框架。v9版本适用于Vue3框架。 2. 翻译实现原理 Vue I18n 插件通过在 Vue 实例中注…...

【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)

本文项目编号 T 060 ,文末自助获取源码 \color{red}{T060,文末自助获取源码} T060,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

expressjs 中的mysql.createConnection,execute 怎么使用

在 Express.js 应用中使用 MySQL 数据库,你通常会使用 mysql 或 mysql2 这样的库来创建和管理数据库连接,并执行查询。然而,mysql.createConnection 并不直接提供 execute 方法。相反,你可以使用 query 方法来执行 SQL 语句。 以…...

每日一题|983. 最低票价|动态规划、记忆化递归

本题求解最小值,思路是动态规划,但是遇到的问题是:动态规划更新的顺序和步长,以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天(可能不在需要出行的天数里),需要花费…...

oracle 正则 匹配 身份正 手机号

1.正则匹配身份证号: regexp_like(card_id,^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$) ^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$ ^[1-9]:第一位数字不能为0。 \d{5}:接下来…...

在树莓派上部署开源监控系统 ZoneMinder

原文:https://blog.iyatt.com/?p17425 前言 自己搭建,可以用手里已有的设备,不需要额外买。这套系统的源码是公开的,录像数据也掌握在自己手里,不经过不可控的三方。 支持设置访问账号 可以保存录像,启…...

2022年6月 Frontier 获得性能第一的论文翻译

为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化,rocHPL 是 AMD 对 HPL 基准的开源实现,主要是针对节点进行优化的架构,是为百万兆级系统而设计的,比如:Frontier suppercomput…...

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域,商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展,各类新模式层出不穷,各种商城系统也应运而生,其中B2B商城更是最为常见的一种。 近年来,得益于电子商务的迅猛发展,B2B商…...

初始C语言(五)

前言 本文章就代表C语言介绍以及了解正式完成,后续进行具体分析和详细解析学习。知识根深蒂固才可以应付后来的学习,地基要打好,后续才会轻松。 十四、结构体 结构体是C语言中最最重要的知识点,使得C语言有能力描述复杂的类型。 …...

mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)

1、SQL 修改表(ALTER TABLE 语句) 在编写一个SQL的ALTER TABLE语句时,你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例,这些示例展示了如何修改表…...

【网络基础】网络常识快速入门知识清单,看这篇文章就够了

💐个人主页:初晴~ 在现在这个高度智能化的时代,网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗🤔 然而如此对于如此重要的网络&#xf…...

OceanBase 关于一号表笔记与ERROR 1060(42S21)问题

OceanBase 关于客户端访问OceanBase 的表数据的过程说明 1.OBserver中的location cache 会保存observer 曾经访问过的实体表的位置信息(meta table 主要包括 __all_core_table、__all_root_table、__all_tenant_meta_table 三张内部表。OB 集群中所有实体表的 location&#x…...

【四】Spring Cloud OpenFeign原理分析

Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了,一直想着总结一下这系列的知识点,最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解,文中将会给出基础使用的示例,还…...

EDM平台大比拼 用户体验与营销效果双重测评

本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台,分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…...

开卷可扩展自动驾驶(OpenDriveLab)

一种通用的视觉点云预测预训练方法 开卷可扩展自动驾驶(OpenDriveLab) 自动驾驶新方向?ViDAR:开卷可扩展自动驾驶(OpenDriveLab)-CSDN博客 创新点 在这项工作中,本文探索了专为端到端视觉自动…...

基于大数据的二手电子产品需求分析及可视化系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架(如 Logback、Log4j2 等)中,logging.level.root主要用于设置根日志记录器的日志级别…...

Android OpenGLES2.0开发(三):绘制一个三角形

我们总是对陌生人太客气,而对亲密的人太苛刻 上一篇文章中,我们已经将OpenGL ES环境搭建完成。接下来我们就可以开始我们的绘图之旅了。该篇我们讲解最基本图形三角形的绘制,这是一切绘制的基础。在OpenGL ES的世界里一切图形都可以由三角形拼…...

【Oracle APEX开发小技巧12】

有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...