软考软件设计师必背100题(上)https://developer.aliyun.com/article/1507663?spm=a2c6h.13148508.setting.40.1b484f0eD2AqhJ
49、极限编程
极限编程是一种轻量级的开发方法。
它提出了四大价值观:沟通、简单、反馈、勇气。
五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
计划游戏:快速制定计划、随着细节的不断变化而完善。
小型发布:系统的设计要能够尽可能早地交付。
隐喻:找到合适的比喻传达信息。
简单设计:只处理当前的需求,使设计保持简单。
测试先行:先写测试代码,然后再编写程序。
重构:重新审视需求和设计,重新明确地描述它们以符合新的和现有的需求。
结对编程。
集体代码所有制。
持续集成:可以按日甚至按小时为客户提供可运行的版本。
每周工作40小时。
现场顾客:系统最终用户代表应该全程配合XP团队。
编码标准。
50、开发方法
结构化开发方法:用户至上,严格区分工作阶段,每阶段有任务和结果,强调系统开发过程的整体性和全局性,系统开发过程工程化,文档资料标准化,自顶向下,逐步求精。
原型开发方法:适用于需求不明确的情况。
面向对象开发方法:更好的复用性,关键在于建立一个全面、合理、统一的模型,分析、设计、实现三个阶段界限不明确。
51、结构化设计任务
体系结构设计:定义软件系统各主要部件之间的关系。
数据设计:基于E-R图确定软件涉及的文件系统的结构及数据库的表结构。
接口设计(人机界面设计):软件内部,软件和操作系统间以及软件和人之间如何通信。
过程设计:系统结构部件转换成软件的过程描述。确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法。
52、模块设计原则
保持模块的大小适中。
尽可能减少调用的深度。
多扇入,少扇出。
单入口,单出口。
模块的作用域应该在模块之内。
功能应该是可预测的。
53、内聚性
内聚类型 |
描 述 |
功能内聚 |
完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 |
处理元素相关,而且必须顺序执行 |
通信内聚 |
所有处理元素集中在一个数据结构的区域上 |
过程内聚 |
处理元素相关,而且必须按特定的次序执行 |
瞬时内聚(时间内聚) |
所包含的任务必须在同一时间间隔内执行 |
逻辑内聚 |
完成逻辑上相关的一组任务 |
偶然内聚(巧合内聚) |
完成一组没有关系或松散关系的任务 |
显示详细信息
54、耦合性
耦合类型 |
描 述 |
非直接耦合 |
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的 |
数据耦合 |
一组模块借助参数表传递简单数据 |
标记耦合 |
一组模块通过参数表传递记录信息(数据结构) |
控制耦合 |
模块之间传递的信息中包含用于控制模块内部逻辑的信息 |
外部耦合 |
一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息 |
公共耦合 |
多个模块都访问同一个公共数据环境 |
内容耦合 |
一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口 |
显示详细信息
55、测试分类
(1)静态测试
桌前检查、代码走查、代码审查。
(2)动态测试
- 黑盒测试
等价类划分(确定无效与有效等价类,设计用例尽可能多的覆盖有效类,设计用例只覆盖一个无效类)、边界值分析(处理边界情况时最容易出错,选取的测试数据应该恰好等于、稍小于或稍大于边界值)、错误推测、因果图。
- 白盒测试:语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、路径覆盖。
56、白盒测试
定义 |
特点 |
|
语句覆盖 |
被测试程序中的每条语句至少执行一次。 |
对执行逻辑覆盖很低,一般认为是很弱的逻辑覆盖。 |
判定覆盖 (分支覆盖) |
被测程序每个判定表达式至少获得一次“真”值和“假”值(或者程序中每一个判定取“真”分支和取“假”分支至少通过一次。) |
判定覆盖比语句覆盖更强一些。 判定可以是1个条件,也可以是多个条件的组合。 |
条件覆盖 |
每一个判定语句中每个逻辑条件的各种可能的值至少满足一次。 |
条件覆盖和判断覆盖没有包含关系。 |
判断/条件覆盖 |
判定中每个条件的所有可能取值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。 |
同时满足判定覆盖和条件覆盖 |
条件组合覆盖 |
每个判定中的各种可能值的组合都至少出现一次。 |
同时满足判定覆盖、条件覆盖、判定/条件覆盖。 |
路径覆盖 |
覆盖被测试程序中所有可能的路。 |
|
基本路径测试 |
每一条独立路径都执行过(即程序中可执行语句至少执行一次)。 |
测试用例个数与环路复杂度一致。判定为关键控制结点,必须出现在基本路径中。 |
循环覆盖 |
循环中每个条件都得到验证。 |
注意数组参数可循环验证 |
显示详细信息
57、特殊的测试阶段及任务
验收测试:有效性测试、软件配置审查、验收测试。
系统测试:恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试。
集成测试:模块间的接口和通信。
单元测试:模块接口、局部数据结构、边界条件、独立的路径、错误处理。
回归测试:修改软件后进行的测试,防止引入新的错误。
负载测试:对软件负载能力的测试。
压力测试:对软件超负荷条件下运行情况的测试。
58、McCabe复杂度计算
McCabe复杂度计算公式:V(G)=m-n+2,其中m是有向弧的条数,n是结点数。
对于伪代码可以先转换为程序流程图,对程序流程图可以最终转换为结点图处理,转换时注意将交点的地方标注为新的结点,以最终的结点图带入公式结算其McCabe复杂度。
59、维护
更正性维护:针对真实存在并已经发生的错误进行的维护行为。
预防性维护:针对真实存在但还未发生的错误进行的维护。
适应性维护:指使应用软件适应信息技术变化和管理需求变化而进行的修改。企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。
完善性维护:扩充功能和改善性能而进行的修改。对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。
60、质量属性与其依从属性
功能性:适合性、准确性、互操作性、安全保密性。
可靠性:成熟性、容错性、易恢复性。
易用性:易理解性、易学性、易操作性。
效率:时间特性、资源利用性。
维护性:易分析性、稳定性、易测试性、易改变性。
可移植性:适应性、易安装性、一致性、易替换性。
61、CMMI(能力成熟度模型集成)阶段式
初始的:过程不可预测且缺乏控制。
已管理的:过程为项目服务。
已定义的:过程为组织服务。
定量管理的:过程已度量和控制。
优化的:集中于过程改进。
62、CMMI(能力成熟度模型集成)连续式
CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标。
CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2(已管理的):其共性目标是集中于已管理的过程的制度化。
CL3(已定义级的):其共性目标集中于已定义的过程的制度化。
CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化。
CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效。
63、PERT图
关键路径是图中源点至汇点的最长路径,关键路径的时间称之为项目工期,也表述为项目完成所需的最少时间。
总时差:在不延误总工期的前提下,该活动的机动时间。一般在图中,以最晚结束时间减去最早结束时间求取,或以最晚开始时间减去最早开始时间求取。
64、风险管理
(1)风险的特性:具有不确定性,可能会造成损失。
(2)风险的类别
项目风险涉及到各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能导致项目损失。
技术风险涉及到技术相关的可能会导致项目损失的问题。
商业风险与市场因素相关。
社会风险涉及到政策、法规等因素。
(3)风险曝光度(RiskExposure)=错误出现率(风险出现率) X错误造成损失(风险损失)。
65、沟通路径
有主程序员:n个成员小组,1个主程序员,普通程序员只需要与主程序员沟通。沟通路径:n-1。
无主程序员:n个成员的项目小组,相互之间都可以沟通。沟通路径:n(n-1)/2。
66、COCOMO II模型
67、数据流图
(1)数据流常见的3种错误
黑洞:加工只有输入没有输出;
奇迹:加工只有输出没有输入;
灰洞:加工中输入不足以产生输出。
(2)子图与父图保持平衡
父图与子图之间平衡是指任何一张DFD子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据了保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。
68、面向对象基本概念
面向对象:对象+分类+继承+通过消息的通信。
对象:属性(数据)+方法(操作)+对象ID。
封装:隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)。
类(实体类/控制类/边界类):对对象的抽象。
接口:一种特殊的类,他只有方法定义没有实现。
继承与泛化:复用机制。
消息和消息通信:对象之间进行通信的一种构造叫做消息。消息是异步通信的。
重置/覆盖:在子类中重新定义父类中已经定义的方法。
重载:一个类可以有多个同名而参数类型不同的方法。
动态绑定:根据接收对象的具体情况将请求的操作与实现的方法进行连接(运行时绑定)。
多态:不同对象收到同样的消息产生不同的结果(软设一般只涉及过载多态-同一个名字在不同的上下文中所代表的含义不同)。
69、面向对象设计原则
单一职责原则:设计目的单一的类。
开放-封闭原则:对扩展开放,对修改封闭。
李氏(Liskov)替换原则:子类可以替换父类。
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程。
接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的。
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。
重用发布等价原则:重用的粒度就是发布的粒度。
共同封闭原则:包中的所有类对于同一性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包里的所有类产生影响,而对于其他的包不造成任何影响。
共同重用原则:一个包里的所有类应该是共同重用的。如果重用了包里的一个类,那么就要重用包中的所有类。
无环依赖原则:在包的依赖关系图中不允许存在环,即包之间的结构必须是一个直接的无环图形。
稳定依赖原则:朝着稳定的方向进行依赖。
稳定抽象原则:包的抽象程度应该和其稳定程度一致。
70、UML图分类
71、类图关系
依赖关系:一个事物发生变化影响另一个事物。
泛化关系:特殊/一般关系。
关联关系:描述了一组链,链是对象之间的连接。
聚合关系:整体与部分生命周期不同。
组合关系:整体与部分生命周期相同。
实现关系:接口与类之间的关系。
72、用例关系
包含关系:其中这个提取出来的公共用例称为抽象用例,而把原始用例称为基本用例或基础用例系,当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示它们。
扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使描述可能更加清晰。
泛化关系:当多个用例共同拥有一种类似的结构和行为的时候,可以将它们的共性抽象成为父用例,其他的用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系。
73、设计模式分类
创建型 |
结构型 |
行为型 |
||
类 |
factory method 工厂方法模式 |
adapter 适配器模式(类和对象) |
template method 模板方法模式 |
interpreter 解释器模式 |
对象 |
abstract factory 抽象工厂模式 prototype 原型模式 singleton 单例模式 builder 构建器模式 |
bridge 桥接模式 composite 组合模式 decorator 装饰模式 facade 外观模式 flyweight 享元模式 proxy 代理模式 |
chain of responsibility 职责链模式 command 命令模式 iterator 迭代器模式 mediator 中介者模式 |
memento 备忘录模式 observer 观察者模式 state 状态模式 strategy 策略模式 visitor 访问者模式 |
显示详细信息
74、创建型设计模式应用场景
设计模式名称 |
简要说明 |
速记关键字 |
Factory Method 工厂方法模式 |
定义一个创建对象的接口,但由子类决定需要实例化哪一个类。工厂方法使得子类实例化的过程推迟 |
动态生产对象 |
Abstract Factory 抽象工厂模式 |
提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类 |
生产成系列对象 |
Builder 构建器模式 |
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示 |
复杂对象构造 |
Prototype 原型模式 |
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 |
克隆对象 |
Singleton 单例模式 |
保证一个类只有一个实例,并提供一个访问它的全局访问点 |
单实例 |
显示详细信息
75、结构型设计模式应用场景
设计模式名称 |
简要说明 |
速记关键字 |
Adapter 适配器模式 |
将一个类的接口转换成用户希望得到的另一种接口。它使原本不相容的接口得以协同工作 |
转换接口 |
Bridge 桥接模式 |
将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化 |
继承树拆分 |
Composite 组合模式 |
将对象组合成树型结构以表示“整体-部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 |
树形目录结构 |
Decorator 装饰模式 |
动态地给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活 |
动态附加职责 |
Facade 外观模式 |
定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用 |
对外统一接口 |
Flyweight 享元模式 |
提供支持大量细粒度对象共享的有效方法 |
汉字编码 |
Proxy 代理模式 |
为其他对象提供一种代理以控制这个对象的访问 |
快捷方式 |
显示详细信息
76、行为型设计模式应用场景
设计模式名称 |
简要说明 |
速记关键字 |
Chain of Responsibility 职责链模式 |
通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求 |
传递职责 |
Command 命令模式 |
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作 |
日志记录,可撤销 |
Interpreter 解释器模式 |
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子 |
虚拟机的机制 |
Iterator 迭代器模式 |
提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示 |
数据集 |
Mediator 中介者模式 |
用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互 |
不直接引用 |
Memento 备忘录模式 |
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态 |
游戏存档 |
Observer 观察者模式 |
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 |
联动 |
State 状态模式 |
允许一个对象在其内部状态改变时改变它的行为 |
状态变成类 |
Strategy 策略模式 |
定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化 |
多方案切换 |
Template Method 模板方法模式 |
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤 |
框架 |
Visitor 访问者模式 |
表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作 |
数据与操作分离 |
显示详细信息
77、顺序表和链表对比
性能类别 |
具体项目 |
顺序存储 |
链式存储 |
空间性能 |
存储密度 |
=1,更优 |
<1 |
容量分配 |
事先确定 |
动态改变,更优 |
|
时间性能 |
查找运算 |
O(n) |
O(n) |
读运算 |
O(1),更优 |
O(n),最好情况为1,最坏情况为n |
|
插入运算 |
O(n),最好情况为0,最坏情况为n |
O(1),更优 |
|
删除运算 |
O(n) |
O(1),更优 |
显示详细信息
78、树的基本概念
双亲、孩子和兄弟:结点的子树的根称为该结点的孩子;相应地,该结点称为其子结点的双亲。具有相同双亲的结点互为兄弟。
结点的度:一个结点的子树的个数记为该结点的度。
叶子结点:也称为终端结点,指度为0的结点。
内部结点:度不为0的结点,也称为分支结点或非终端结点。除根结点之外,分支结点也称为内部结点。
结点的层次:根为第一层,根的孩子为第二层,依次类推,若某结点在第i层,则其孩子结点在第i+1层。
树的高度:一棵树的最大层次数记为树的高度(深度)。
79、二叉树的特性
在二叉树的第i层上最多有2i-1 个结点(i≥1)。
深度为k的二叉树最多有2k -1个结点(k≥1)。
对任何一棵二叉树,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1。
对一棵有n个结点的完全二叉树的结点按层序编号,即从第1层到log2n+1 层,每层从左到右依次编号。
80、特殊的二叉树
满二叉树:任何结点,或者是树叶,或者恰有两棵非空子树。
完全二叉树:最多只有最小面的两层结点的度可以小于2,并且最下面一层的结点全都集中在该层左侧的若干位置。
平衡二叉树:树中任一结点的左右子树高度之差不超过1。
查找二叉树:又称之为排序二叉树。任一结点的权值,大于其左孩子结点,小于其右孩子结点。中序遍历结果有序。
线索二叉树:在每个结点中增加两个指针域来存放遍历时得到的前驱和后继信息。
81、最优二叉树的概念
最优二叉树:又称为哈弗曼树,它是一类带权路径长度最短的树。
路径是从树中一个结点到另一个结点之间的通路,路径上的分支数目称为路径长度。
树的路径长度是从树根到每一个叶子之间的路径长度之和。结点的带权路径长度为从该结点到树根之间的路径长度与该结点权值的乘积。
树的带权路径长度为树中所有叶子结点的带权路径长度之和。
82、二叉树的遍历操作
前序遍历:又称为先序遍历,按根à左à右的顺序进行遍历。
后序遍历:按左à右à根的顺序进行遍历。
中序遍历:按左à根à右的顺序进行遍历。
层次遍历:按层次顺序进行遍历。
83、图的概念
(1)完全图
在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图(complete graph)。
在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图。
(2)强连通图:在有向图中,对于每一对顶点,从顶点vi到顶点vj和从顶点vj到顶点vi都存在路径,则称为强连通图。
84、图的遍历特点
深度优先遍历:
当以邻接矩阵作为存储结构时,深度优先搜索遍历图的时间复杂度为O(n2)
当以邻接表作为存储结构时,深度优先搜索遍历图的时间复杂度为O(n+e)
广度优先遍历和深度优先搜索遍历图的运算时间复杂度相同,其不同之处仅仅在于对顶点的访问次序不同。
85、最小生成树与最短路径
(1)最小生成树解决方案
普里姆算法:找最短的边,直到把所有点连起来。注意:不能形成闭环。【贪心策略】
迪杰斯特拉算法:每一次只考虑从上一层节点到当前结点的最短路径。【贪心策略】
(2)最短路径问题解决方案
克鲁斯卡尔算法:从某个点开始,找现有点集合中最短的边。注意:不能形成闭环。【贪心策略】
86、常见算法策略
算法名称 |
关键点 |
特征 |
典型问题 |
分治法 |
递归技术 |
把一个问题拆分成多个小规模的相同子问题,一般可用递归解决。 |
归并排序、快速排序、二分搜索 |
动态规划法 |
最优子结构和递归式 |
划分子问题(最优子结构),并把子问题结果使用数组存储,利用查询子问题结果构造最终问题结果。 |
矩阵乘法、背包问题、 LCS最长公共子序列 |
贪心法 |
一般用于求满意解,特殊情况可求最优解(部分背包) |
局部最优,但整体不见得最优。每步有明确的,既定的策略。 |
背包问题(如装箱)、多机调度、找零钱问题 |
回溯法 |
探索和回退 |
系统的搜索一个问题的所有解或任一解。有试探和回退的过程。 |
N皇后问题、迷宫、背包问题 |
显示详细信息
87、常见的算法执行所需时间的度量
O(1)
88、常见排序算法对比
类别 |
排序方法 |
时间复杂度 |
空间复杂度 |
稳 定 性 |
|
平均情况 |
特殊情况 |
辅助存储 |
|||
插入排序 |
直接插入 |
O(n2) |
基本有序最优O(n) |
O(1) |
稳定 |
Shell排序 |
O(n1.3) |
- |
O(1) |
不稳定 |
|
选择排序 |
直接选择 |
O(n2) |
- |
O(1) |
不稳定 |
堆排序 |
O(nlog2n) |
- |
O(1) |
不稳定 |
|
交换排序 |
冒泡排序 |
O(n2) |
基本有序最优O(n) |
O(1) |
稳定 |
快速排序 |
O(nlog2n) |
基本有序最差(n2) |
O(1) |
不稳定 |
|
归并排序 |
O(nlog2n) |
-- |
O(n) |
稳定 |
|
基数排序 |
O(d(n+rd)) |
-- |
O(rd) |
稳定 |
显示详细信息
89、常见排序算法适用常见对比
若待排序列的记录数目n较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量大时,用简单选择排序方法较好。
若待排记录按关键字基本有序,宜采用直接插入排序或冒泡排序。
当n很大且关键字位数较少时,采用基数排序较好。
若n很大,则应采用时间复杂度为O(nlog2n)的排序方法,例如快速排序、堆排序或归并排序。
快速排序目前被认为是内部排序中最好的方法,当待排序的关键字为随机分布时,快速排序的平均运行时间最短。
堆排序只需要一个辅助空间,并且不会出现在快速排序中可能出现的最快情况。
快速排序和堆排序都是不稳定的排序方法,若要求排序稳定,可选择归并排序。
90、编译与解释的区别
编译方式下机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,因此执行时效率较高。
解释方式下解释程序和源程序(或某种等价表示)要参与到程序的运行过程中,边解释边执行,执行效率较低。
即:解释方式,翻译程序不生成独立的目标程序,而编译方式则生成独立保持的目标程序。
91、编译过程
(1)符号表
符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的存在可以贯穿编译所有阶段。
(2)错误管理
静态错误:编译时所发现的程序错误,分为语法错误和静态语义错误。
语法错误包含:单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
静态语义分析:运算符与运算对象类型不合法等错误。
动态错误:发生程序运行时,也叫动态语义错误。包括死循环、变量取零时做除数、引用数组元素下标越界等错误。
92、文法和正规式
一般的程序设计语言属于上下文无关文法。
正规文法,表示的语言集合是正规集,正规集的规律可以用正规式表示。
正规式 |
正规集 |
举例 |
ab |
字符串ab构成的集合 |
{ab} |
a|b |
字符串a、b构成的集合 |
{a , b } |
a* |
由0或多个a构成的字符串集合 |
{空 , a , aa , aaa , a…a(n个a )} |
(a|b)* |
所有字符a和b构成的串的集合 |
{空 , a , b , ab , aab , abb , baa, aba , …} |
a(a|b)* |
以a为首字符的a、b字符串的集合 |
{a , aa , ab , aab, aba , aaab , aaba , …} |
(a|b)*abb |
以abb结尾的a、b字符串的集合 |
{abb, aabb, babb, abaabb, abaabb, …} |
显示详细信息
93、传值调用和引用调用
传递方式 |
主要特点 |
传值调用 |
形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变 |
传址调用 (引用调用) |
形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值 |
94、常见的程序设计语言
Fortran语言(第一个高级程序设计语言,科学计算,执行效率高)
Pascal语言(结构化程序设计语言,表达能力强,Delphi)
C语言(通用、结构化程序设计语言,指针操作能力强,高效)
Lisp语言(函数式程序语言,符号处理,人工智能)
C++语言(C语言基础上增加了类机制,面向对象,高效,与C兼容)
Java语言(面向对象,中间代码,跨平台,通用的程序设计语言)
Python(面向对象,解释型程序设计语言,胶水语言,通用的脚本语言)
PHP(服务器端脚本语言,制作动态网页)
Ruby(简单快捷、面向对象、脚本语言)
Delphi(快速应用程序开发工具,可视化编程环境)
COBOL(数据处理领域最为广泛的程序设计语言,高级编程语言)
XML(可扩展标记语言,标准通用标记语言的子集 )
PROLOG(逻辑式语言,间接性,表达能力强,建造专家系统、数据库、自然语言理解、智能知识库等)
注:C/C++常被用于操作系统开发;脚本语言是解释性语言。
95、保护范围和保护对象
法律法规名称 |
保护对象及范围 |
注意事项 |
著作权法 |
著作权 文学、绘画、摄影等作品 |
1、不需要申请,作品完成即开始保护 2、绘画或摄影作品原件出售(赠予)著作权还归原作者,原件拥有者有:所有权、展览权。 |
软件著作权法 计算机软件保护条例 |
软件著作权 软件作品 |
1、不需要申请,作品完成即开始保护 2、登记制度便于举证 |
专利法 |
专利权 |
需要申请,专利权有效期是从申请日开始计算 |
商标法 |
商标权 |
需要申请,核准之日起商标受保护 |
反不正当竞争法 |
商业秘密权 |
1、商业秘密包括技术与经营两个方面 2、必须有保密措施才能认定商业秘密 |
显示详细信息
96、保护期限
客体类型 |
权力类型 |
保护期限 |
公民作品 |
署名权、修改权、保护作品完整权 |
没有限制 |
发表权、使用权和获得报酬权 |
作者终生及其死亡后的50年(第50年的12月31日) |
|
单位作品 |
发表权、使用权和获得报酬权 |
50年(首次发表后的第50年的12月31日) |
公民软件产品 |
署名权、修改权 |
没有限制 |
发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权 |
作者终生及死后50年(第50年12月31日)。合作开发,以最后死亡作者为准 |
|
单位软件产品 |
发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权 |
50年(首次发表后的第50年的12月31日) |
注册商标 |
有效期10年(若注册人死亡或倒闭1年后,未转移则可注销,期满后6个月内必须续注) |
|
发明专利权 |
保护期为20年(从申请日开始) |
|
实用新型和外观设计专利权 |
保护期为10年(从申请日开始) |
|
商业秘密 |
不确定,公开后公众可用 |
显示详细信息
97、知识产权人确定-职务作品判定
情况说明 |
判断说明 |
归属 |
|
作品 |
职务 作品 |
利用单位的物质技术条件进行创作,并由单位承担责任的 |
除署名权外其他著作权归单位 |
有合同约定,其著作权属于单位 |
除署名权外其他著作权归单位 |
||
其他 |
作者拥有著作权,单位有权在业务范围内优先使用 |
||
软件 |
职务 作品 |
属于本职工作中明确规定的开发目标 |
单位享有著作权 |
属于从事本职工作活动的结果 |
单位享有著作权 |
||
使用了单位资金、专用设备、未公开的信息等物质、技术条件,并由单位或组织承担责任的软件 |
单位享有著作权 |
||
专利权 |
职务 作品 |
本职工作中作出的发明创造 |
单位享有专利 |
履行本单位交付的本职工作之外的任务所作出的发明创造 |
单位享有专利 |
||
离职、退休或调动工作后1年内,与原单位工作相关 |
单位享有专利 |
显示详细信息
98、知识产权人确定-其他
情况说明 |
判断说明 |
归属 |
|
作品软件 |
委托创作 |
有合同约定,著作权归委托方 |
委托方 |
合同中未约定著作权归属 |
创作方 |
||
合作开发 |
只进行组织、提供咨询意见、物质条件或者进行其他辅助工作 |
不享有著作权 |
|
共同创作的 |
共同享有,按人头比例 成果可分割的,可分开申请 |
||
商标 |
谁先申请谁拥有(除知名商标的非法抢注) 同时申请,则根据谁先使用(需提供证据) 无法提供证据,协商归属,无效时使用抽签(但不可不确定) |
||
专利 |
谁先申请谁拥有 同时申请则协商归属,协商不成则同时驳回双方的专利申请,最好的方式就是双方作为一个团体一起申请、享有专利 |
显示详细信息
99、侵权判断的特殊要求
中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。
开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。
著作权法不适用于下列情形:
- 法律、法规,国家机关的决议、决定、命令和其他具有立法、行政、司法性质的文件,及其官方正式译文;
- 时事新闻;
- 历法、通用数表、通用表格和公式。
100、典型的合理引用和侵权行为
不侵权 |
侵权 |
个人学习、研究或者欣赏; 适当引用; 公开演讲内容 用于教学或科学研究 复制馆藏作品; 免费表演他人作品; 室外公共场所艺术品临摹、绘画、摄影、录像; 将汉语作品译成少数民族语言作品或盲文出版。 |
未经许可,发表他人作品; 未经合作作者许可,将与他人合作创作的作品当作自己单独创作的作品发表的; 未参加创作,在他人作品署名; 歪曲、篡改他人作品的; 剽窃他人作品的; 使用他人作品,未付报酬; 未经出版者许可,使用其出版的图书、期刊的版式设计的。 |