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

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂,软件开发越显得力不从心。于是,业界开始重视软件开发过程、方法、工具和环境的研究,软件工程应运而生。

在这里插入图片描述


目录

  • 🕒 1. 软件工程学概述
    • 🕘 1.1 软件和软件危机
    • 🕘 1.2 软件工程学的研究范畴
    • 🕘 1.3 软件工程的发展
  • 🕒 2. 软件生存周期与软件过程
    • 🕘 2.1 软件生存周期
    • 🕘 2.2 传统的软件过程
      • 🕤 2.2.1 瀑布模型(Waterfall Model)
      • 🕤 2.2.2 快速原型模型(Rapid Prototype Model)
    • 🕘 2.3 软件演化模型
      • 🕤 2.3.1 增量模型(Incremental Model)
      • 🕤 2.3.2 螺旋模型(Spiral Model)
      • 🕤 2.3.2 构件集成模型(Component Integration Model)
    • 🕘 2.4 形式化方法模型
      • 🕤 2.4.1 转换模型(Transformational Model)
      • 🕤 2.4.2 净室模型(Cleanroom Model)
    • 🕘 2.5 统一过程和敏捷过程
      • 🕤 2.5.1 统一过程(Rational Unified Process,RUP)
      • 🕤 2.5.2 敏捷过程(Agile Process)
      • 🕤 2.5.3 极限编程(extreme programming,XP)
    • 🕘 2.6 软件可行性研究(Feasibility Study)
  • 🕒 3. 结构化分析(Structured Analysis,SA)与设计(SD)
    • 🕘 3.1 概述
      • 🕤 3.1.1 SA模型的组成与描述
      • 🕤 3.1.2 SD模型的组成与描述
    • 🕘 3.2 结构化系统分析
    • 🕘 3.3 结构化系统设计
      • 🕤 3.3.1 变换映射
      • 🕤 3.3.2 事务映射
      • 🕤 3.3.3 优化结构设计的指导规则
    • 🕘 3.4 模块化设计

🕒 1. 软件工程学概述

软件 = 程序(包含数据) + 文档

  • 程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列
  • 数据是使程序能正常操纵信息的数据结构
  • 文档是与程序开发,维护和使用有关的图文材料

🕘 1.1 软件和软件危机

软件与硬件的不同

  • 软件开发不同于硬件设计
  • 软件生产与硬件制造不同
  • 软件维护不同于硬件维修

软件是逻辑的,而不是物理的

  • 软件开发与人关系密切
  • 软件开发成本大
  • 软件生产是简单的拷贝
  • 软件不会磨损和老化
  • 软件受环境影响大
  • 软件维护易产生新的问题

软件危机:是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

软件危机的表现

  • 对软件开发成本和进度的估算很不准确
  • 用户很不满意
  • 质量很不可靠
  • 没有适当的文档
  • 软件成本比重上升
  • 供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势

软件危机的原因

  • 客观:软件本身特点
    • 逻辑部件
    • 规模庞大、复杂度高
  • 主观:不正确的开发方法
    • 忽视需求分析
    • 个人化方式:软件开发=程序编写
    • 轻视软件维护

解决途径:

  • 组织管理:工程项目管理方法
  • 技术措施:软件开发技术与方法、软件工具

促使了软件工程的诞生:按工程化的原理和方法组织软件开发是软件开发中的问题一个主要出路

🕘 1.2 软件工程学的研究范畴

在这里插入图片描述

  • 软件开发方法
    • 为软件开发提供了 “如何做” 的技术
    • 个性化方法 → 结构化方法 → 面向对象方法 → 软件复用
  • 软件工具
    • 为软件开发提供了自动的或半自动的软件支撑环境
    • 单个工具 → 工具箱、集成工具 → 环境
  • 软件工程管理
    • 目的:为了按进度及预算完成软件计划
    • 内容:成本估算、进度安排、人员组织、质量保证等

🕘 1.3 软件工程的发展

三种编程范型

  • 过程式编程范型
    • 程序由一组被动数据和一组能动过程组成
    • 程序 = 数据结构 + 算法
    • 着眼于程序的过程和基本控制结构,粒度最小
  • 面向对象编程范型
    • 数据及其操作被封装在对象中
    • 程序 = 对象 + 消息
    • 着眼于程序中的对象,粒度比较大
  • 基于构件技术的编程范型
    • 构件是通用的、可复用的标准化对象类
    • 程序 = 构件 + 架构
    • 着眼于适合整个领域的类对象,粒度更大

三代软件工程

  • 传统软件工程
    • 结构化分析 →结构化设计 → 面向过程的编码 → 软件测试
  • 面向对象软件工程
    • 面向对象基本概念:对象+类+继承+消息通信
    • OO分析与对象抽取 → 对象详细设计 → 面向对象的编码 和测试
  • 基于构件的软件工程
    • 领域分析和测试计划定制 → 领域设计 → 建立可复用构件库 → 查找并集成构件

🕒 2. 软件生存周期与软件过程

🕘 2.1 软件生存周期

需求分析 → 软件分析 → 软件设计 → 编码(测试) → 交付测试 → 使用维护

  • 需求分析
    • 明确需要解决的问题(从用户的视角)
    • 建立需求模型:功能、性能、约束、接口等
  • 软件分析
    • 从开发人员的视角对软件进行分析
    • 建立分析模型:软件的逻辑模型
  • 软件设计
    • 确定软件的总体结构和各部件的数据结构和操作
    • 建立软件设计模型:考虑实现技术和平台
  • 编码
    • 用程序设计语言将设计文档翻译成源程序
    • 建立软件实现模型:包含现有软件构件包
  • 软件测试
    • 发现程序中的错误、提高软件质量
    • 单元测试、集成测试、确认测试、系统测试
  • 运行维护

软件过程:围绕软件开发所进行的一系列活动

软件过程模型

  • 把软件生存周期中软件开发活动的有序流程用一个合理的框架来规范描述。
  • 软件过程模型是一种软件过程的抽象表示法,它从一个特定的角度表现一个开发过程。

软件生存周期中的阶段和软件过程中的活动是基本一致的

🕘 2.2 传统的软件过程

🕤 2.2.1 瀑布模型(Waterfall Model)

瀑布开发模型是一种基于软件生存周期的线性开发模型,它与软件生存周期的特点是一致的,强调软件文档,每一个阶段必须完成规定的文档,每一个阶段都要复审完成的文档。

在这里插入图片描述
特点

  • 阶段的顺序性和依赖性
  • 推迟实现的观点
  • 质量保证的观点

存在问题

  • 不适合需求模糊的系统
  • 开发初始阶段很难彻底弄清软件需求

🕤 2.2.2 快速原型模型(Rapid Prototype Model)

快速原型模型是一种基于原型的迭代化开发模型。中心思想是先建立一个能够反映用户主要需求的原型(Demo),让用户实际看一下未来系统的概貌,以便判断哪些功能是符合需要的,哪些方面还需要改进。然后将原型反复改进,直至建立完全符合用户要求的新系统。

在这里插入图片描述
特点

  • “逼真”的原型可以使用户迅速作出反馈
  • 循环回溯和迭代:非线性模型
  • 使用快速开发工具

种类

  • 渐进型:对原型补充和修改获得最终系统
  • 抛弃型:原型废弃不用

应防止的偏向:舍不得抛弃,从而影响软件质量

小结:瀑布模型是纸上谈兵,快速原型模型是真枪实干。

🕘 2.3 软件演化模型

演化开发模型:使所开发的软件在迭代中逐步完善。

🕤 2.3.1 增量模型(Incremental Model)

定义:把软件看作一系列相互联系的增量,每次迭代完成一个增量。

在这里插入图片描述
增量

  • 小而可用的软件
  • 第一个增量通常是软件的核心

特点

  • 在前面增量的基础上开发后面的增量
  • 每个增量的开发可用瀑布或快速原型模型
  • 每个增量开发的顺序性和总体的迭代性相结合

🕤 2.3.2 螺旋模型(Spiral Model)

在这里插入图片描述

特点

  • 瀑布模型(顺序性、边开发边复审)+ 快速原型(迭代性)
  • 风险分析 → 发现、控制风险

一个螺旋式周期

  • 计划:确定目标,选择方案,选定完成目标的策略
  • 风险分析:从风险角度分析该策略
  • 开发:启动一个开发活动
  • 评审:评价前一步的结果,计划下一轮的工作

🕤 2.3.2 构件集成模型(Component Integration Model)

在这里插入图片描述

构件

  • 在某个领域内具有通用性,可以复用的软件部件
  • 将可以复用的构件存储起来,形成构件库

特点

  • 面向对象
  • 基于构件库
  • 融合螺旋模型特征
  • 支持软件开发的迭代方法
  • 软件复用

🕘 2.4 形式化方法模型

形式化方法模型:基于程序变换和验证技术的软件开发

🕤 2.4.1 转换模型(Transformational Model)

在这里插入图片描述
开发过程

  • 确定形式化需求规格说明书
  • 进行自动的程序变换
  • 针对形式化开发记录进行测试

特点

  • 形式化软件开发方法
    • 形式化需求规格说明
    • 变换技术
  • 程序自动生成技术
  • 确保正确

🕤 2.4.2 净室模型(Cleanroom Model)

在这里插入图片描述

净室思想

  • 在分析和设计阶段消除错误
  • 在“洁净”状态下实现软件制作

形式化

  • 盒结构表示分析和设计
  • 正确性验证

增量模型

  • 把软件看成一系列的增量

软件过程模型的特点汇总:

开发模型特点适用场合
瀑布模型线性模型,每一阶段必须完成规定的文档需求明确的中、小型软件开发
快速原型模型用户介入早,通过迭代完善用户需求,原型废弃不用需求模糊的小型软件开发
增量模型每次迭代完成一个增量,可用于OO开发容易分块的大型软件开发
螺旋模型典型迭代模型,重视风险分析,可用于OO开发具有不确定性大型软件开发
构件集成模型软件开发与构件开发平行进行领域工程、行业的中型软件开发
转换模型形式化的规格说明,自动的程序变换系统理想化模型,尚无成熟工具支持
净室模型形式化的增量开发模型,在洁净状态下实现软件制作开发团队熟悉形式化方法,中小型软件开发

🕘 2.5 统一过程和敏捷过程

🕤 2.5.1 统一过程(Rational Unified Process,RUP)

统一过程描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动。

统一过程将软件开发分为四个阶段:

  • 先启:定义整个项目的范围
  • 精化:制定项目计划、描述功能、建立体系架构框架
  • 构建:构造软件产品
  • 迁移:将软件产品移交到最终用户手中

在这里插入图片描述

🕤 2.5.2 敏捷过程(Agile Process)

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,其软件开发过程称为“敏捷过程”

🕤 2.5.3 极限编程(extreme programming,XP)

极限编程是敏捷过程中的一种,是轻量级的、敏捷的软件开发方法。

🕘 2.6 软件可行性研究(Feasibility Study)

目的

  • 研究项目是否可能实现和值得进行
  • 回答 Why to do?

研究的内容:经济可行性、技术可行性、运行可行性、法律可行性

可行性研究的步骤:

  • 对当前系统进行调查和研究
    • 弄清当前系统
    • 导出新系统逻辑模型
  • 导出新系统的解决方案
    • 设计不同的解决方案
  • 提出推荐的方案
    • 本项目的开发价值
    • 推荐这个方案的理由
  • 编写可行性认证报告
    • 系统概述
    • 可行性分析
    • 结论意见

软件风险分析:

  • 风险识别:项目风险、技术风险、商业风险
  • 风险预测
    • 风险发生的可能性
    • 风险发生后的后果
  • 风险的驾驭和监控

🕒 3. 结构化分析(Structured Analysis,SA)与设计(SD)

🕘 3.1 概述

结构化分析与设计最初系由结构化程序设计扩展而来

  • 是瀑布模型的首次实践
  • SA与SD的流程
    • 结构化分析(工具:DFD、PSPEC) → 分析模型(分层DFD图)+ SRS
    • 结构化设计(工具:SC图) → 映射 \stackrel{映射}{\rightarrow} 映射 初始设计模型(初始SC图)
    • 初始设计模型(初始SC图) → 优化 \stackrel{优化}{\rightarrow} 优化 最终设计模型(最终SC图)
  • 基本任务与指导思想
    • 结构化分析
      • 建立分析模型(Analysis Model)
      • 编写需求说明(Software Requirements Specification,SRS)
    • 结构化设计
      • 软件设计 = 总体设计 + 详细设计
      • SC图须分两步完成:初始SC图、最终SC图
    • 细化与分解
      • 逐步细化,细化的本质就是分解

🕤 3.1.1 SA模型的组成与描述

SA模型的描述工具:

  • DFD、DD和PSPEC:这是早期SA模型的基本组成部分
  • CFD(Control Flow Diagram,控制流图)、CSPEC(Control Specification,控制规格说明)和STD(Status Transform Diagram,状态转换图):是早期SA模型的扩展成分,适应实时软件的建模需要;
  • E-R图(Entity-Relation Diagram):适用于描述具有复杂数据结构的软件数据模型;

在这里插入图片描述

  • 数据流图(Data Flow Diagram,DFD)
    • 指明数据在系统中移动时如何被变换,描述对数据流进行变换的功能和子功能。
    • 组成符号
      • 圆框代表加工;
      • 箭头代表数据的流向,数据名称总是标在箭头的边上;
      • 方框表示数据的源点和终点;
      • 双杠(或单杠)表示数据文件或数据库
      • 文件与加工之间用带箭头的直线连接,单向表示只读或只写,双向表示又读又写

在这里插入图片描述

  • 数据字典(Data Dictionary,DD)
    • 对软件中的每个数据规定一个定义条目。
    • ①数据流、②数据文件、③数据项

数据流图与数据字典共同构成系统的逻辑模型

  • 加工说明(Process Specification,PSPEC)
    • 对数据流图中出现的每个加工/处理的功能描述
    • 主要工具:结构化语言,判定树或判定表

例题:某公司为推销人员制订了奖励办法,把奖金与推销金额及预收货款的数额挂钩。凡每周推销金额不超过10000元,按预收货款是否超过50%,分别奖励推销额的6%或4%。反之若推销金额超过10000元,则按预收货款是否超过50%,分别奖励推销额的8%或5%。对于月薪低于1000元的推销员,分别另发鼓励奖300、200和500、300元。

试分别采用判定表和判定树为DFD图中用来“计算奖金”的加工写出加工说明(即PSPEC)。
在这里插入图片描述在这里插入图片描述

🕤 3.1.2 SD模型的组成与描述

在这里插入图片描述

  • 包含数据设计、体系结构设计、接口设计与过程设计
  • 体系结构设计是用来确定软件结构的,其描述工具为结构图,简称SC图
  • 过程设计主要指模块内部的详细设计

SC图的组成符号

  • 矩形框来表示模块,带箭头的连线表示模块间的调用,并在调用线的两旁标出传入和传出模块的数据流
    在这里插入图片描述

SC图的模块调用:为了画面简洁,在下图中调用线的两旁均未标出数据流。在实际的 SC 图中不允许这种省略。
在这里插入图片描述

🕘 3.2 结构化系统分析

定义:结构化分析就是使用DFD、DD、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化说明书的目标文档。

结构化分析的基本步骤

  • 由顶向下对系统进行功能分解,画出分层DFD图
  • 由后向前定义系统的数据和加工,编制DD和PSPEC
  • 最终写出SRS

画分层数据流图:(自顶向下,逐步细化)

  • 好处:便于实现,便于使用

顶层DFD:通常把整个系统当作一个大的加工标明系统的输入与输出,以及数据的源点与终点(统称为“外部项”)

在这里插入图片描述

第二层DFD:

在这里插入图片描述

第三层DFD——销售子系统:
在这里插入图片描述

第三层DFD——采购子系统:
在这里插入图片描述

确定数据定义与加工策略(从数据的终点开始定义数据和加工)
数据定义—DD

  • 例如:发票
    • 发票 = 学号+姓名+{书号+单价+数量+总价}+书费合计

加工策略—PSPEC

  • 数据定义DD
  • 加工策略PSPEC
  • 需求规格说明书SRS

需求分析的复审

🕘 3.3 结构化系统设计

SD概述

  • 面向数据流设计和面向数据设计
    • 面向数据流:数据流是考虑一切问题的出发点
    • 面向数据:以数据结构作为分析与设计的基础
  • 从分析模型导出设计模型
  • 结构化设计的描述工具:SC图

从分析模型导出设计模型:
在这里插入图片描述

数据流图(DFD)的类型:

  • 变换(transform)型结构

    • 传入路径
    • 变换中心
    • 传出路径
      在这里插入图片描述
  • 事务(transaction)型结构

    • 一条接受路径
    • 一个事务中心
    • 若干条动作路径
      在这里插入图片描述

同时存在两类结构:
在这里插入图片描述
SD方法的步骤

  • 复审DFD图,必要时可再次进行修改或细化
  • 鉴别DFD图所表示的软件系统的结构特征,确定它所代表的软件结构是属于变换型还是事务型
  • 按照SD方法规定的一组规则,把DFD图为初始的SC图
    • 变换型DFD图 → 变换映射 \stackrel{变换映射}{\rightarrow} 变换映射 初始SC图
    • 事务型DFD图 → 事务映射 \stackrel{事务映射}{\rightarrow} 事务映射 初始SC图
  • 按照优化设计的指导原则改进初始的SC图,获得最终SC图

🕤 3.3.1 变换映射

  • 划分DFD图的边界
  • 建立初始SC图的框架
    • 顶层都只含一个用于控制的主模块
    • 第一层包括传入、传出和中心变换三个模块
  • 分解SC图的各个分支
    • 分解实质上是“映射”

例题:用变换映射规则从下图导出初始 SC图
在这里插入图片描述

划定边界:左边是输入流、中间是变换中心、右边是输出流
在这里插入图片描述

一级分解:
在这里插入图片描述

  • MC:控制模块,可以将整个系统的名称作为控制模块
  • MA:传入模块,输入流整体作为传入模块
  • MT:变换模块,变换中心作为变换模块
  • ME:传出模块,输出流整体作为传出模块

二级分解:对传入、传出和变换模块的分解
在这里插入图片描述

从变换分析导出的初始 SC 图:
在这里插入图片描述

深度:5层;宽度(广度):7层;

注意:必须对一个模块的全部直接下属模块都设计完成之后,才能转向另一个模块的下层模块的设计;在设计下层模块时,应考虑模块的耦合和内聚问题;使用“黑箱”技术,先把这个模块的所有下层模块定义成“黑箱”,不考虑其内部结构和实现;一个模块的直接下属模块一般在五个左右,如果直接下属模块超过10个,可设立中间层次。

🕤 3.3.2 事务映射

  • 在DFD图上确定边界
    • 事务中心
    • 接受部分(包括接受路径)
    • 发送部分(包括全部动作路径)
  • 画出SC图框架
    • DFD图的三个部分分别映射为事务控制模块,接受模块和动作发送模块
  • 分解和细化接受分支和发送分支

一个事务型数据流图,事务中心是 I
在这里插入图片描述
从事务分析导出的两种初始 SC 图:

在这里插入图片描述

在这里插入图片描述
通常一个大型的软件系统是变换型结构和事务型结构的混合结构。

🕤 3.3.3 优化结构设计的指导规则

对模块划分的指导规则

  • 提高内聚,降低耦合后
  • 简化模块接口
  • 少用全局性数据和控制型信息

保持高扇入/低扇出的原则

  • 扇入高则上级模块多,能够增加模块的利用率
  • 扇出低则表示下级模块少,可以减少模块调用和控制的复杂度

在这里插入图片描述

  • 煎饼型不可取,应增加中间层减少扇出,实现塔型结构。
  • 设计良好的软件通常具有瓮型结构,两头小,中间大,在低层模块使用了较多高扇入的共享模块。

🕘 3.4 模块化设计

模块设计是传统软件工程的重要组成部分,其性质属于详细设计

目的:为SC图中的每个模块确定算法和数据结构,用选定的表达工具给出清晰的描述

主要任务: 编写软件的“模块设计说明书”

原则与方法:

  • 清晰第一的设计风格
  • 结构化的控制结构
    • 仅用这三种控制结构(顺序、选择、循环)来构成程序;
    • 每个控制结构只应有一个入口和一个出口
  • 逐步细化的实现方法

详细设计中常用的表达工具:流程图、N-S图、伪代码、PDL语言

N-S图:
在这里插入图片描述


OK,以上就是本期知识点“软工学绪论及传统软件工程”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

相关文章:

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂&#xf…...

C语言编译成库文件的要求

keil编译成库文件 在Keil中,将C语言源文件编译成库文件通常需要进行以下步骤: 创建一个新的Keil项目,并将所需的C语言源文件添加到该项目中。 在项目设置中配置编译选项,确保生成的目标文件符合库文件的标准格式。 编译项目&…...

Python的模块应用和文件I/O

Python 解释 Python是一种高级编程语言,以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言,适用于广泛的应用领域,包括软件开发、数据分析、人工智能等。python是一种解释型,面向对象、动态数据类型的高级程序设计…...

设计模式之依赖倒转原则

目录 1、 基本介绍 2、 应用实例 3、 依赖关系传递的三种方式 (1) 接口传递 (2) 构造方法传递 (3) setter方式传递 4、 注意事项和细节 1、 基本介绍 依赖倒转原则(Dependence Inversion Principle)是指: 高层模块不应该依赖低层模块,二者都应该依…...

Springboot启动后想要做某些事可以通过什么方法实现?

在Spring Boot应用中,如果你想在应用启动完成后执行一些特定的操作(例如缓存预热),可以实现CommandLineRunner或ApplicationRunner接口。这两个接口都提供了一个run方法,在Spring Boot应用上下文初始化完成后会被自动调…...

网络原理初识(2)

目录 一、协议分层 1、分层的作用 2、OSI七层模型 3、TCP / IP五层(或四层)模型 4、网络设备所在分层 5、网络分层对应 二、封装和分用 发送过程(封装) 1、应用层(应用程序) QQ 2、传输层 3、网络层 4、数据链路层 5、物理…...

【C++】每日一题 92 反转链表

给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 class ListNode { public:int val;ListNode* next;ListNode(int _val) {val _val;next nullptr;} };…...

算法D39 | 动态规划2 | 62.不同路径 63. 不同路径 II

今天开始逐渐有 dp的感觉了&#xff0c;题目不多&#xff0c;就两个 不同路径&#xff0c;可以好好研究一下 62.不同路径 本题大家掌握动态规划的方法就可以。 数论方法 有点非主流&#xff0c;很难想到。 代码随想录 视频讲解&#xff1a;动态规划中如何初始化很重要&#x…...

面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:如何在 Spring Boot 启动的时候提前运行一些特定的代码 在Spring Boot启动的时候提前运行一些特定的代码可以通过实现ApplicationRunner接口、Com…...

力扣最热100题——56.合并区间

吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述 Java解法一&#xff1a;排序然后原地操作 具体代码如下 Java解法二&#xff1a;new一个list&#xf…...

docker学习(十四)docker搭建私服

docker私服搭建&#xff0c;配置域名访问&#xff0c;设置访问密码 启动registry docker run -d \-p 5000:5000 \-v /opt/data/registry:/var/lib/registry \registrydocker pull hello-world docker tag hello-world 127.0.0.1:5000/hello-world docker push 127.0.0.1:5000…...

基于BERTopic模型的英文20新闻数据集主题聚类及可视化

文章目录 bertopic介绍20 newsgroups dataset20 newsgroups数据集下载数据导入nltk数据处理bertopic模型构建模型训练运行模型可视化目前主题的一致性得分语料库建模bertopic介绍 BERTopic 是基于深度学习的一种主题建模方法。BERT 是一种用于 NLP 的预训练策略,它成功地利用…...

【Oracle之DataGuard的初步学习】

** 以下所有均是基于11G版本的 ** 一、DataGuard的部署方式 DG的部署最常用的方式就是直接在备库端部署一个空库然后再设置参数&#xff0c;但是这样做在初始同步时如果数据量过大会耗费较长的时间&#xff1b;相对来说这中方式比较简单不易出错。 还有一种方式就是通过rman的备…...

PyCharm无代码提示解决

PyCharm无代码提示解决方法 在使用PyCharm工具时&#xff0c;调用方法却无法进行提示&#xff0c;针对PyCharm无代码提示整理下解决方案 1、Python内置语法无智能提示 复现&#xff1a;我这里以urllib库读取网页内容为例&#xff0c;在通过urlopen(&#xff09;之后调用getur…...

记一次 .NET某设备监控自动化系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 先说一下题外话&#xff0c;一个监控别人系统运行状态的程序&#xff0c;结果自己出问题了&#xff0c;有时候想一想还是挺讽刺的&#xff0c;哈哈&#xff0c;开个玩笑&#xff0c;我们回到正题&#xff0c;前些天有位朋友找到我&#xff0c;说…...

大数据与云计算

目录 一、大数据时代二、云计算——大数据的计算三、云计算发展现状四、云计算实现机制五、云计算压倒性的成本优势 一、大数据时代 我们先来看看百度关于 “大数据”&#xff08;Big Data&#xff09;的搜索指数。 可以看出&#xff0c;“大数据” 这个词是从2012年才引起关注…...

一. 并行处理与GPU体系架构-并行处理简介

目录 前言0. 简述1. 串行处理与并行处理的区别2. 并行执行3. 容易混淆的几个概念4. 常见的并行处理总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第一章——并行处…...

vb机试考试成绩分析与统计,设计与实现(高数概率统计)-141-(代码+程序说明)

转载地址http://www.3q2008.com/soft/search.asp?keyword141 前言: 为何口出狂言,作任何VB和ASP的系统, 这个就是很好的一个证明 :) 又有些狂了... 数据库操作谁都会,接触的多了也没什么难的,VB编程难在哪?算法上,这个是一个算法题的毕业设计,里面涉及到对试卷的 平均分,最…...

Arm MMU深度解读

文章目录 一、MMU概念介绍二、虚拟地址空间和物理地址空间2.1、(虚拟/物理)地址空间的范围2.2、物理地址空间有效位(范围) 三、Translation regimes四、地址翻译/几级页表&#xff1f;4.1、思考&#xff1a;页表到底有几级&#xff1f;4.2、以4KB granule为例&#xff0c;页表的…...

2024 年 AI 辅助研发趋势

在2024年&#xff0c;AI辅助研发的应用趋势将非常广泛。举个例子&#xff0c;比如在医疗健康领域&#xff0c;AI将深度参与新药研发、早期癌症研究以及辅助诊断等&#xff0c;助力医疗技术的突破。同时&#xff0c;在农业领域&#xff0c;AI也将通过无人机、智能装备等方式&…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

&#x1f525; 推荐一个高质量的Java LSM Tree开源项目&#xff01; https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree&#xff0c;专为高并发写入场景设计。 核心亮点&#xff1a; ⚡ 极致性能&#xff1a;写入速度超…...