![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软件设计师考试
文章平均质量分 65
flysh05
这个作者很懒,什么都没留下…
展开
-
设计模式之访问者模式
该方法的目的是根据当前元素类将其调用重定向到相应访问者的方法。请注意, 即使元素基类实现了该方法, 所有子类都必须对其进行重写并调用访问者对象中的合适方法。访问者模式建议将新行为放入一个名为_访问者_的独立类中, 而不是试图将其整合到已有类中。现在, 需要执行操作的原始对象将作为参数被传递给访问者中的方法, 让方法能访问对象所包含的一切必要数据。(Visitor) 接口声明了一系列以对象结构的具体元素为参数的访问者方法。如果编程语言支持重载, 这些方法的名称可以是相同的, 但是其参数一定是不同的。原创 2022-11-02 19:43:11 · 423 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式建议将算法分解为一系列步骤, 然后将这些步骤改写为方法, 最后在 “模板方法” 中依次调用这些方法。老师 批改作业 打分数。System.out.println(“老师:上课 讲课 解答问题 布置作业”);System.out.println(“学生:听课 学习 做笔记 提出问题”);System.out.println(“上课 去教室”);System.out.println(“学生:写作业 提交作业”);System.out.println(“老师:批改作业 打分数”);原创 2022-11-01 20:30:54 · 502 阅读 · 0 评论 -
设计模式之策略模式
实际上, 上下文并不十分了解策略, 它会通过同样的通用接口与所有策略进行交互, 而该接口只需暴露一个方法来触发所选策略中封装的算法即可。上下文不清楚其所涉及的策略类型与算法的执行方式。是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。策略模式建议找出负责用许多不同方式完成特定任务的类, 然后将其中的算法抽取到一组被称为_策略_的独立类中。(Strategy) 接口是所有具体策略的通用接口, 它声明了一个上下文用于执行策略的方法。原创 2022-10-31 21:05:13 · 358 阅读 · 0 评论 -
设计模式之状态模式
在任何一个特定状态中, 程序的行为都不相同, 且可瞬间从一个状态切换到另一个状态。不过, 根据当前状态, 程序可能会切换到另外一种状态, 也可能会保持当前状态不变。(Context) 保存了对于一个具体状态对象的引用, 并会将所有与该状态相关的工作委派给它。上下文通过状态接口与状态对象交互, 且会提供一个设置器用于传递新的状态对象。状态可以通过该引用从上下文处获取所需信息, 并且能触发状态转移。上下文和具体状态都可以设置上下文的下个状态, 并可通过替换连接到上下文的状态对象来完成实际的状态转换。原创 2022-10-30 20:50:28 · 153 阅读 · 0 评论 -
设计模式之观察者模式
实际应用中可能会有十几个不同的订阅者类跟踪着同一个发布者类的事件, 你不会希望发布者与所有这些类相耦合的。因此, 所有订阅者都必须实现同样的接口, 发布者仅通过该接口与订阅者交互。这并不像听上去那么复杂。现在, 无论何时发生了重要的发布者事件, 它都要遍历订阅者并调用其对象的特定通知方法。拥有一些值得关注的状态的对象通常被称为_目标_, 由于它要将自身的状态改变通知给其他对象, 我们也将其称为_发布者_ (publisher)。(Client) 会分别创建发布者和订阅者对象, 然后为订阅者注册发布者更新。原创 2022-10-29 21:08:16 · 115 阅读 · 0 评论 -
设计模式之备忘录模式 - 简书
其他对象必须使用受限接口与备忘录进行交互, 它们可以获取快照的元数据 (创建时间和操作名称等), 但不能获取快照中原始对象的状态。在该实现方法中, 备忘录类将被嵌套在原发器中。另一方面, 负责人对于备忘录的成员变量和方法的访问权限非常有限: 它们只能在栈中保存备忘录, 而不能修改其状态。由于编辑器拥有对备忘录的完全访问权限, 因此它可以使用从备忘录中获取的数值来替换自身的状态。当原发器需要回溯历史状态时, 负责人将从栈中获取最顶部的备忘录, 并将其传递给原发器的恢复 (restoration) 方法。原创 2022-10-28 21:04:01 · 735 阅读 · 0 评论 -
设计模式之中介者模式
这些组件必须调用特殊的中介者对象, 通过中介者对象重定向调用行为, 以间接的方式进行合作。最终, 组件仅依赖于一个中介者类, 无需与多个其他组件相耦合。每个组件都有一个指向中介者的引用, 该引用被声明为中介者接口类型。组件不知道中介者实际所属的类, 因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。由于所有组件间关系都被包含在中介者中, 因此你无需修改组件就能方便地新建中介者类以定义新的组件合作方式。该模式让你将对象间的所有关系抽取成为一个单独的类, 以使对于特定组件的修改工作独立于其他组件。原创 2022-10-26 19:22:58 · 132 阅读 · 0 评论 -
设计模式之迭代器模式
无论集合的构成方式如何, 它都必须提供某种访问元素的方式, 便于其他代码使用其中的元素。不过由于集合提供不同的元素访问方式, 你的代码将不得不与特定集合类进行耦合。迭代器模式的主要思想是将集合的遍历行为抽取为单独的_迭代器_对象。这样一来, 只要有合适的迭代器, 客户端代码就能兼容任何类型的集合或遍历算法。请注意, 返回方法的类型必须被声明为迭代器接口, 因此具体集合可以返回各种不同种类的迭代器。是一种行为设计模式, 让你能在不暴露集合底层表现形式 (列表、 栈和树等) 的情况下遍历集合中所有的元素。原创 2022-10-25 19:35:17 · 586 阅读 · 0 评论 -
设计模式解释器模式
与解释器模式类似,目前还诞生了很多基于抽象语法树的源代码处理工具,例如 Eclipse 中的 Eclipse AST,它可以用于表示 Java 语言的语法结构,用户可以通过扩展其功能,创建自己的文法规则。在某些情况下,为了更好地描述某一些特定类型的问题,我们可以创建一种新的语言,这种语言拥有自己的表达式和结构,即文法规则,这些问题的实例将对应为该语言中的句子。由于表达式可分为终结符表达式和非终结符表达式,因此解释器模式的结构与组合模式的结构有些类似,但在解释器模式中包含更多的组成元素。易于改变和扩展文法。原创 2022-10-24 19:32:31 · 111 阅读 · 0 评论 -
设计模式之命令模式
命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。优秀的软件设计通常会将关注点进行分离, 而这往往会导致软件的分层。 最常见的例子: 一层负责用户图像界面; 另一层负责业务逻辑。 GUI 层负责在屏幕上渲染美观的图形, 捕获所有输入并显示用户和程序工作的结果。 当需要完成一些重要内容时 (比如计算月球轨道或撰写年度报告), GUI 层则会将工作委派给业务逻辑底层。命令模式建议原创 2022-10-23 21:06:59 · 278 阅读 · 0 评论 -
设计模式之责任链模式
链上的每个处理者都有一个成员变量来保存对于下一处理者的引用。除了处理请求外, 处理者还负责沿着链传递请求。请求会在链上移动, 直至所有处理者都有机会对其进行处理。在我们的订购系统示例中, 处理者会在进行请求处理工作后决定是否继续沿着链传递请求。如果请求中包含正确的数据, 所有处理者都将执行自己的主要行为, 无论该行为是身份验证还是数据缓存。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。最重要的是: 处理者可以决定不再沿着链传递请求, 这可高效地取消所有后续处理步骤。原创 2022-10-22 22:10:33 · 420 阅读 · 0 评论 -
设计模式之享元模式
除此之外, 你还可以新建一个工厂类, 或者创建一个静态的工厂方法并将其放入实际的享元类中。为了使用方便, 外在状态和引用享元的成员变量可以移动到单独的情景类中。是一种结构型设计模式, 它摒弃了在每个对象中保存所有数据的方式, 通过共享多个对象所共有的相同状态, 让你能在有限的内存容量中载入更多对象。找到所有使用外在状态成员变量的方法, 为在方法中所用的每个成员变量新建一个参数, 并使用该参数代替成员变量。内在状态: 包含不变的、 可在许多对象中重复使用的数据的成员变量。享元对象是不可变的。原创 2022-10-20 19:43:48 · 104 阅读 · 0 评论 -
设计模式外观模式
根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。- 外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观对象进行,外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。引入外观类将子系统与客户以及其他子系统解耦,可以提高子系统的独立性和可移植性。原创 2022-10-17 21:08:50 · 98 阅读 · 0 评论 -
设计模式之装饰器模式
一个对象可以使用多个类的行为, 包含多个指向其他对象的引用, 并将各种工作委派给引用对象。继承中的对象则继承了父类的行为, 它们自己_能够_完成这些工作。当你需要更改一个对象的行为时, 第一个跳入脑海的想法就是扩展它所属的类。如果你希望在无需修改代码的情况下即可使用对象, 且希望在运行时为对象新增额外的行为, 可以使用装饰模式。你无法在运行时更改已有对象的行为, 只能使用由不同子类创建的对象来替代当前的整个对象。是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。原创 2022-10-16 21:51:14 · 298 阅读 · 0 评论 -
设计模式之组合模式
是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们。如果应用的核心模型能用树状结构表示, 在应用中使用组合模式才有价值。原创 2022-10-15 22:28:49 · 139 阅读 · 0 评论 -
设计模式之桥接模式
设计模式_四人组_的著作 在桥接定义中提出了_抽象部分_和_实现部分_两个术语。但是, 你很快会发现这种类的数量_很多_。具体来说, 就是抽取其中一个维度并使之成为独立的类层次, 这样就可以在初始类中引用这个新层次的对象, 从而使得一个类不必拥有所有的状态和行为。在实际的程序中, 抽象部分是图形用户界面 (GUI), 而实现部分则是底层操作系统代码 (API), GUI 层调用 API 层来对用户的各种操作做出响应。该层自身不完成任何具体的工作, 它需要将工作委派给_实现部分_层 (也被称为_平台_)。原创 2022-10-14 22:29:52 · 504 阅读 · 0 评论 -
设计模之适配器模式
如果您需要复用这样一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。例如, 你可以使用一个将所有数据转换为英制单位 (如英尺和英里) 的适配器封装运行于米和千米单位制中的对象。适配器模式允许你创建一个中间层类, 其可作为代码与遗留类、 第三方类或提供怪异接口的类之间的转换器。这是一个特殊的对象, 能够转换对象接口, 使其能与其他对象进行交互。适配器不仅可以转换不同格式的数据, 其还有助于采用不同接口的对象之间的合作。原创 2022-10-13 20:13:13 · 110 阅读 · 0 评论 -
设计模式之单例模式
它的运作方式是这样的: 如果你创建了一个对象, 同时过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。无论何时调用该方法, 它总是会返回相同的对象。如今, 单例模式已经变得非常流行, 以至于人们会将只解决上文描述中任意一个问题的东西称为_单例_。是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。检查客户端代码, 将对单例的构造函数的调用替换为对其静态构建方法的调用。原创 2022-10-12 20:14:35 · 172 阅读 · 0 评论 -
设计模式之原型模式
即使你可以接受额外的依赖性, 那还有另外一个问题: 有时你只知道对象所实现的接口, 而不知道其所属的具体类, 比如可向方法的某个参数传入实现了某个接口的任何对象。该方法会创建一个当前类的对象, 然后将原始对象所有的成员变量值复制到新建的类中。即使不考虑代码耦合的情况, 你的代码也不能依赖这些对象所属的具体类, 因为你不知道它们的具体信息。原型模式为客户端代码提供一个通用接口, 客户端代码可通过这一接口与所有实现了克隆的对象进行交互, 它也使得客户端代码与其所克隆的对象具体类独立开来。原创 2022-10-11 20:37:01 · 84 阅读 · 0 评论 -
设计模式-生成器模式
建造一栋简单的房屋, 首先你需要建造四面墙和地板, 安装房门和一套窗户, 然后再建造一个屋顶。但是如果你想要一栋更宽敞更明亮的房屋, 还要有院子和其他设施 (例如暖气、 排水和供电设备), 那又该怎么办呢?你可以在 房屋基类中创建一个包括所有可能参数的超级构造函数, 并用它来控制房屋对象。最简单的方法是扩展 房屋基类, 然后创建一系列涵盖所有参数组合的子类。该模式允许你使用相同的创建代码生成不同类型和形式的对象。生成器模式建议将对象构造代码从产品类中抽取出来, 并将其放在一个名为_生成器_的独立对象中。原创 2022-10-10 21:26:37 · 343 阅读 · 0 评论 -
设计模式-抽象工厂模式
不同的工厂创建不同的具体类型的对象,但是和以前一样返回一个抽象类型的引用(或指针),因此客户端代码的其他部分不需要任何改动。如果是后者的话,需要修改代码中每一个创建这种对象的地方(而且需要注意的是,这些地方都知道对象的具体类型,而且需要引入具体类型的头文件或类定义)。客户端程序只需要知道得到的对象是“信件”或者“简历”,而不需要知道具体的主题,因此客户端程序从抽象工厂DocumentCreator中得到了Letter Resume类的引用,而不是具体类的对象引用。然而,工厂知道具体对象的类型;原创 2022-10-06 21:05:51 · 166 阅读 · 0 评论 -
设计模式-工厂方法模式
该方法的返回对象类型必须与产品接口相匹配。(Concrete Creators) 将会重写基础工厂方法, 使其返回不同类型的产品。工厂方法将创建产品的代码与实际使用产品的代码分离, 从而能在不影响其他代码的情况下扩展产品创建部分代码。例如, 如果需要向应用中添加一种新产品, 你只需要开发新的创建者子类, 然后重写其工厂方法即可。是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。当你在编写代码的过程中, 如果无法预知对象确切类别及其依赖关系时, 可使用工厂方法。原创 2022-10-05 21:49:29 · 77 阅读 · 0 评论 -
设计模式-简单工厂模式
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。由于工厂类集中了所有实例的创建逻辑,违反了。原创 2022-10-04 21:29:32 · 97 阅读 · 0 评论 -
C++派生类
一般来说,在派生类中对于基类成员的访问应该是唯一的,但是,由于多继承中派生类拥有多个基类,如果多个基类中拥有同名的成员,那么,派生类在继承各个基类的成员之后,当我们调用该派生类成员时,由于该成员标识符不唯一,出现二义性,编译器无法确定到底应该选择派生类中的哪一个成员,这种由于多继承而引起的对类的某个成员访问出现不唯一的情况就称为二义性问题。虚基类的定义是在融合在派生类的定义过程中的,其定义格式如下:class 派生类名:virtual 继承方式 基类名。派生类名::派生类名(基类1形参,基类2形参,…原创 2022-10-03 21:54:31 · 1253 阅读 · 0 评论 -
软考C++基础知识(2)
①函数的定义函数是一个命名的程序代码块,是程序完成其操作的场所,是将功能重复的程序段抽象出来所形成一个独立的、可重复使用的功能模块。定义函数的一般格式为:返回类型 函数名 (数据类型1 参数1, 数据类型2 参数2,… ){语句序列;}②C++中,函数原型声明原则•如果函数定义在先,调用在后,调用前可以不必声明;如果函数定义在后,调用在先,调用前必须声明。•在程序设计中,为了使程序设计的逻辑结构清晰,一般将主要的函数放在程序的起始位置声明,这样也起到了列函数目录的作用。原创 2022-10-02 22:15:51 · 591 阅读 · 0 评论 -
软考C++基础知识
C++语言是从C语言发展演变而来的,C++包含了整个C,C是建立C++的基础。C++包括C的全部特征、属性和优点,同时,C++添加了对面向对象编程的完全支持。原创 2022-10-01 21:06:36 · 678 阅读 · 0 评论 -
关于动态规划法
用分治法递归求解问题时,每次遇到子问题都会视为新问题,如果存在大量的重叠子问题,会极大地降低算法的效率,而动态规划法总是充分利用重叠子问题,对每个重叠的子问题仅计算1次,把解保存在一个需要时就可以查询的表中,并使得每次查表的时间为常数,从而提高了算法的执行效率。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划,可以解决各类最优化问题。指一个问题的最优解中包含了其子问题的最优解。原创 2022-09-30 21:32:35 · 823 阅读 · 0 评论 -
关于分治法的一些思想介绍
第4条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但时在一般情况下,用动态规划法较好。如果原问题可分割成k个子问题,1原创 2022-09-28 20:01:52 · 140 阅读 · 0 评论 -
关于贪心法
在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。从贪心算法的定义可以看出,贪心算法并不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法是否可以得到最优解。贪心法的基本原理是从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。(4)把子问题的解局部最优解合成原来解问题的一个解。(2)循环求解,求出可行解的一个解元素;原创 2022-09-27 20:54:31 · 381 阅读 · 0 评论 -
关于递归法
一旦遇到递归出口,分解过程结束,开始求值过程,所以分解过程是“量变”过程,即原来的“大问题”在慢慢变小,但尚未解决。一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归调用的有效性是可以用数学归纳法证明的,所以当我们在设计递归函数时,不必设法跟踪可能很长的递归调用途径(比如Hanoi Tower问题)。(1)数据的定义是按递归定义的。原创 2022-09-26 19:55:52 · 899 阅读 · 0 评论 -
关于软件设计师考试中的算法
算法设计是指设计一系列解决问题的清晰指令,通过系统的方法描述解决问题的策略与机制。算法能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。原创 2022-09-25 21:12:38 · 598 阅读 · 0 评论 -
多媒体相关的计算和种类
常见压缩的分类:一类是无损压缩编码法(Lossless compression coding),也称冗余压缩法或熵编码法,能够还原,比如我们常见的压缩软件,压缩格式zip等,可以解压缩还原;(3)表现媒体(显示媒体):进行信息输入输出的媒体。1、多媒体定义:传播信息的载体,如语言、文字、图像、视频、音频等;存贮信息的载体,如ROM、RAM、磁带、磁盘、光盘等。(2)表示媒体:传输感觉媒体的中介媒体,用于数据交换的编码。(1)感觉媒体:直接用于人的感觉器官,使人产生直接感觉的媒体。如电缆、光缆和交换设备等。原创 2022-09-23 21:50:24 · 653 阅读 · 0 评论 -
关于多媒体的一些知识
显示分辨率:显示屏上能够显示的像素数目,1024*768表示显示屏分为768行(垂直分辨率),每行(水平分辨率)显示1024个像素。像素深度:存储每个像素所用的二进制数,度量图像的色彩分辨率,图像深度为b位,则该图像最多的颜色数或灰度级为2b种。(.mov/.qt):Apple公司发布的视频文件格式,较小存储空间,开放性(Quick Time文件)(.mpeg/.mpg/.dat/.mp4):运动图像压缩标准,压缩效率高,质量好,兼容性好。(.jpg):有损压缩,压缩比例高,适合于处理大量图像的场合。原创 2022-09-22 20:17:18 · 107 阅读 · 0 评论 -
时间复杂度与空间复杂度
通常分析时间复杂度的方法是从算法中选取一种对于所研究的问题来说是基本运算的操作,以该操作重复执行的次数作为算法的时间度量。由于许多情况下要精确计算T(n)是困难的,因此引入了渐进时间复杂度在数量上估计一个算法的执行时间。如果存在两个常数c和m,对于所有的n,当n≥m时有f(n)≤cg(n),则有f(n)=O(g(n))。也就是说,随着n的增大,f(n)渐进地不大于g(n)。例如,一个程序的实际执行时间为T(n)=3n3+2n2+n,则T(n)=O(n3)。(5)所有不同可能的排列组合:O(2n)原创 2022-09-21 20:30:55 · 89 阅读 · 0 评论 -
排序分类和常见查找方法
合并的过程是:比较A[i]和A[j]的排序码大小,若A[i]的排序码小于等于A[j]的排序码,则将第一个有序表中的元素A[i]复制到R[k]中,并令i和k分别加1;开放定址法是指当构造散列表发生冲突时,使用某种探测手段,产生一个探测的散列地址序列,并且逐个查找此地址中是否存储了数据元素,如果没有,则称该散列地址开放,并将关键字存入,否则冲突,继续查找下一个地址。第一步,在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录都分成两组,第1组都小于该数,第2组都大于该数,如图所示。原创 2022-09-20 20:24:51 · 630 阅读 · 0 评论 -
树与二叉树
哈夫曼编码:根据哈夫曼树进行边长编码,编码长度与路径长度相关,左侧分支编码为0(或1),右侧分支编码为1(或0),从根结点到对应叶子结点所有路径分支上右侧分支编码为1(或0),从根结点到对应叶子结点所有路径分支上的编码记录下来,即为该叶子结点的编码。结点的层次:根为第一层,根的孩子为第二层,依次类推,若某节点在第i层,则其孩子结点在第i+1层。3、对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1。如果2i+1>n,则结点i无右子叶点,否则,其右子结点是结点2i+1。原创 2022-09-19 19:59:55 · 172 阅读 · 0 评论 -
数组,矩阵与线性表
2、顺序表:线性表顺序存储,即用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素,在物理上也相邻。只需要存储数据元素,不需要存储元素的逻辑关系因此存储密度为1。3、链表:线性表链式存储,即用通过指针链接起来的结点来存储数据元素,存储各数据元素的结点物理上不要求连续,因此后期扩展方便。2、对于存储位置的计算,可以理解为计算当前位置以要求的存储方式存放时,前面已经存放了多少个元素。1、对于数组或矩阵,存储时注意存储方式是按行存储还是按列存储,二者结果有区别。原创 2022-09-18 21:08:36 · 133 阅读 · 0 评论 -
甘特图与比特图的一些特点
1、甘特图能够消晰描述每个任务的开始/结束时间及各任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系;PERT利用项目的网络图和各活动所需时间的估计值(通过加权平均得到的)去计算项目总时间,强调任务之间的先后关系,但不能反映任务之间的并行性,以及项目的当前进展情况。一般在图中,以最晚结束时间减去最早结束时间求取,或以最晚开始时间减去最早开始时间求取。2、关键路径法是图中源点至汇点的最长路径,关键路径的时间称之为项目工期,也表述为项目完成所需的最少时间。原创 2022-09-17 21:36:14 · 685 阅读 · 0 评论 -
McCabe复杂度计算
2、风险的类别:项目风险涉及到各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能导致项目损失。3、风险暴露又称风险曝光度,测量的是资产的整个安全性风险,它将表示实际损失的可能性与表示大量可能损失的资讯结合到单一数字评估中。2、对于伪代码可以先转换为程序流程图,对程序流程图可以最终转换为结点图处理,转换时注意将交点的地方标注为新的结点,以最终的结点图带入公式结算其McCabe复杂度。1、更正性维护:针对真实存在并已经发生的错误进行的维护行为。2、预防性维护:针对真实存在但还未发生的错误进行的维护。原创 2022-09-16 22:19:39 · 911 阅读 · 0 评论 -
软件测试方法
(5)其他测试:回归测试(修改软件后进行的测试,防止引入新的错误)。压力测试(对软件超负荷条件下运行情况的测试)。语句覆盖:语句覆盖是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。(2)系统测试:恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。判定覆盖:判定覆盖又称为分支覆盖,它的含义是,不仅每个语句至少执行一次,条件覆盖:条件覆盖的含义是,不仅每个语句至少执行一次,而且使得判定表达。路径覆盖:它的含义是,选取足够多的测试用例,使得程序的每条可能执行到的。原创 2022-09-15 21:16:58 · 205 阅读 · 0 评论