软件设计师考证-必考知识&常错题目-整理

鉴于下个月参加软考(软件设计师),特开此贴,用来记录一下必考的知识点,和一些经常错误的题目,不定时更新,[大部分内容复制自互联网]
 

1.知识点:原码、反码、补码、移码

原码:如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,
其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。

例如: 
X=+101011 , [X]原= 00101011 
X=-101011 , [X]原= 10101011 位数不够的用0补全。
PS:正数的原、反、补码都一样:0的原码跟反码都有两个,因为这里0被分为+0和-0。

反码:在原码的基础上,符号位不变其他位按位取反(就是0变1,1变0)。
例如: [X]原= 10101011 ,[X]反=11010100

补码:在反码的基础上按照正常的加法运算加1。
例如:[X]反=11010100,[X]补=11010101
PS:0的补码是唯一的,如果机器字长为8那么[0]补=00000000。

移码:不管正负数,只要将其补码的符号位取反即可。
例如:[X]补=11010101,[X]移=01010101

2.错题:流水线结构

流水线结构的计算机中,条件转移指令会严重影响计算机的效率。
他的中断请求包含:精确和不精确断点法。
精确断点法:立即中断指令响应中断,不影响中断响应,但影响指令执行。
不精确断点法:暂时不响应中断,执行完流水线所有指令后再响应中断,即影响指令执行又影响中断响应。

3.错题:Flynn分类,计算机系统结构的分类方法之一

单指令单数据流SISD
单指令多数据流SIMD
多指令单数据流MISD
多指令多数据流MIMD

S - 单 - Single
M - 多 - Multiplicity
I - 指令 - Instruction
D - 数据 - Data

由多个独立的计算机组成的多处理机:属于MIMD

4.错题:cache容量算cache地址位数

对于这样的题目,直接把cache容量换算成2的n次方,n就是地址位数
如:容量2KB,地址位数=11位

5.错题:软件维护

软件维护是软件生命周期中占用时间最长的一个阶段,占60%-80%

6.错题:DNS服务是双向的

IP    ->    域名
域名  ->    IP

7.错题:标准的代号

强制性国家标准:GB
行业标准:行业拼音大字字母:金融JR
地方标准:DB+区号
企业标准:Q/+企业代号
所有推荐性都是在强制性后面加:/T
如国推荐性家标准:GB/T

8.错题:页/段式存储管理的区别

页 可以占用不连续空间
段 必须占用连续空间

段 长度不等,可动态增长,有利于新数据增长。
页 大小相同,位置不能动态增长。

页 一维地址空间
段 二维地址空间

页 段 的划分都是系统确定和进行的和用户无关
页 段 都是动态重定位

9.错题:PV操作的定义

procedure p(var s:samephore);
{
s.value=s.value-1;
if (s.value<0) asleep(s.queue);
}
procedure v(var s:samephore);
{
s.value=s.value+1;
if (s.value<=0) wakeup(s.queue);
}

10.错题:归并排序

归并排序

11.错题:公钥体系

在公钥体系中,公钥:加密和验证。私钥:解密和签名。

12.知识点:CA数字证书

CA的私钥:签名。CA的公钥:验证签名的真伪。
用户的私钥:解密对方发来的消息。用户的公钥:加密自己发出的消息。
用户A获取到用户B带CA签名的消息M,从CA获取B的数字证书并利用CA的公钥验证证书的真伪,然后从B的数字证书中获取B的公钥,利用B的公钥验证消息M的真实性,最后利用A自己的私钥来解密消息M。

13.错题:汇编语言

汇编程序的功能:将用汇编语言写的源程序翻译成机器指令程序。
汇编语句分为:
1 指令语句(汇编后产生对应的机器代码)
2 伪指令语句(在汇编时指示汇编程序完成某些操作,汇编后不产生机器代码)
3 宏指令语句。
汇编程序的工作过程:词法,语法,语义,中间代码生成,优化,目标代码生成

14.知识点:数据库

关系:表
元组:记录:一行
元:属性:字段:一列
候选码:表中所有可以唯一确定一条记录的字段和字段组
主码:表中可以唯一确定一条记录的字段或字段组
外码:另一个表中的主码相对应的字段
域:字段的取值范围
元数:表中属性/字段/列的个数
基数:表中元组/记录/行的个数

三范式:
1NF 任何属性不可再分解(不能能是复合的属性)
例子:学生编号(主码),学生信息(不满足,应该再分解)

2NF 任何属性后必须依赖于主码
例子:学生编号(主码1),课程编号(主码2),课程成绩(满足),学生姓名(不满足,不依赖于主码课程编号)

3NF 任何属性都不能存在非主属性的传递(2非主码的属性间不能有关联)
例子:班级编号(主码),班级名称(满足),所属系部编号(满足),系部名称(不满足,与所属系部编号存在传递)

内连接
SELECT * FROM 表1,表2 WHERE 连接条件 and 查询条件

外连接
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 连接条件 WHERE 查询条件
左外 LEFT OUTER JOIN:前面的表所有数据都在结果集中出现,某些字段在后表中不存在关联的话为null。
右外 RIGHT OUTER JOIN:后面的表所有数据都在结果集中出现,某些字段在前表中不存在关联的话为null。
全外 FULL OUTER JOIN:2表所有数据都在结果集中出现,某些字段不存在关联的话为null。

自连接
SELECT * FROM 表1 INNER JOIN 表2 ON 连接条件 WHERE 查询条件

子连接
SELECT * FROM 表1 WHERE 查询条件=(SELECT * FROM 表1 WHERE 查询条件)
查询条件还包括 
IN / NOT IN 
如:教室号 IN (查询教室号)
ALL / ANY
如:比全部人都小的年龄 < ALL (查询所有学生的年龄)  ANY 就是一个都没
EXIST / NOT EXIST 
判断子查询中是否存在记录,存在则TRUE否则FALSE

∏ :投影:取列
o :选择运算:选择列运算

要注意看算式中的是 X 还是 ∝

15.快速排序

一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]赋给A[j];
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[j]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

形象化:你可以想象一下i和j是两个机器人,数据就是大小不一的石头,先取走i前面的石头留出回旋的空间,然后他们轮流分别挑选比k大和比k小的石头扔给对面,最后在他们中间把取走的那块石头放回去,于是比这块石头大的全扔给了j那一边,小的全扔给了i那一边。只是这次运气好,扔完一次刚好排整齐。

注意:快速排序不会直接得到最终结果,只会把比k大和比k小的数分到k的两边。为了得到最后结果,需要再次对下标2两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。

例如:360254
第一次快速排序:
360254,K = 3,j-- ,找到 2 < 3
260354,i++,找到 6 > 3 
230654,j--,找到 0 < 3
203654,i++,i = j,结束于 K = 3
因为将 20(3)654  分为20  654 两个快速排序
20:02
645:456
排序完成 02 3 456

16.设计模式:

设计模式主要分三个类型:创建型、结构型和行为型。 

创建型:
    Singleton,单例模式:保证一个类只有一个实例 
    Abstract Factory,抽象工厂:提供无须指定具体类便可创建相关对象的接口。 
    Factory Method,工厂方法:让子类决定实例化哪一个类,使一个类的实例化延迟到了子类。 
    Builder,建造模式:将构建与表示相分离。 
    Prototype,原型模式:通过拷贝原型来创建新的对象。 

行为型: 
    Iterator,迭代器模式:提供一个方法顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。 
    Observer,观察者模式:我改变,他人得知自动改变
    Template Method,模板方法:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即可以重定义该算法得某些特定步骤。 
    Command,命令模式:将请求封装为对象,。 
    State,状态模式:允许在其状态改变时改变行为。似乎对象改变了类。 
    Strategy,策略模式:定义一系列的算法,把他们一个个封装起来,并使他们可以互相替换,本模式使得算法可以独立于使用它们的客户。 
    China of Responsibility,职责链模式:使多个对象都有机会处理请求,从而避免请求的送发者和接收者之间的耦合关系 
    Mediator,中介者模式:使多对多变成一对多,只需要关心Mediator即可,降低复杂性,提高扩展性。 
    Visitor,访问者模式:表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。 
    Interpreter,解释器模式:给定一个语言,定义他的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 
    Memento,备忘录模式:在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 

结构型: 
    Composite,组合模式:类层次结构化
    Facade,外观模式:子系统多接口提供一致的界面接口
    Proxy,代理模式:代理提供相同的接口访问对象
    Adapter,适配器模式:接口的兼容转换。 
    Decrator,装饰模式:动态增加职责。 
    Bridge,桥模式:将抽象与实现相分离。 
    Flyweight,享元模式:共享对象

17.UML中 include 于 extend 简单区分

用例图中
<<include>> 用于包含关系
如:创建订单 include   提交订单
<<extend>>  用于扩展关系
当一个函数执行他的扩展关系用例后会返回来的,即使
如:提交订单 extend 登录  (需要登录完才回来继续提交)

18.芯片数、地址线计算

芯片数目 = 欲组成的芯片总容量 / 芯片单容量
地址线数目 = log2(芯片数) + log2(芯片容量)

19.流水线结构

流水线的周期取决于最长的一个
流水线总时间的计算一般是:20个任务总时间 = 第一个任务时间+(19*周期时间)

20.cache的地址映射

全相联映射:对应的位置是任意的,按内容访问
直接映射:对应的位置是固定的
组相联映射:全相联和直接的综合

21.需求分析阶段不产生软件测试计划

22.结构化分析方法

结构化分析方法建立的系统模型:数据流图,数据字典,小说明
结构化设计:把数据流图转换成模块结构图

23.Dfa状态转换图

如图:dfa

可以转换为状态转换矩阵

a

b

0

0

1

1

0

2

2

3

2

3

3

2



意思是 状态0,如果是a,那么转向0,如果是b,那么转向1

据此可以判断2个状态是否可以合并(如图 2和3 可以合并)

24.面向对象中的类属机制

在面向对象技术中,类属是一种 (参数多态) 机制.一个类属类是关于一组类的一个特性抽象,
它强调的是这些类的成员特征中与 (具体类型无关) 的那些部分,而用变元来表示与 (具体类型相关) 的那些部分.

25.广义表的Head和Tail操作

Head是取元素,Tail是永远是取表.
多说无用,直接看例子。
(a,b,c) 取 head = a
(a,b,c) 取 tail = (b,c)

例:LS=(a,(b,c,d))
head(LS)=a
tail(LS)=((b,c,d))
head(tail(LS))=(b,c,d)
tail(tail(LS))=()
head(head(tail(LS)))=b
tail(head(tail(LS)))=(c,d)
head(tail(head(tail(LS))))=c
tail(tail(head(tail(LS))))=(d)
head(tail(tail(head(tail(LS)))))=d
tail(tail(tail(head(tail(LS)))))=()

26.声音的数据量计算

采样频率 = 每秒钟多少个数据
量化精度 = 一个数据多少位
8位 = 1字节
双声道 = 数据量 * double

数据量(kb) = 采样频率(HZ) * 量化精度(byte) * 双声道 * 时间(s) / 8 / 1024

27.关系模式的候选码计算

在学习数据库的时候,经常要碰到候选键的求取,但是一开始的时候,根本搞不清楚怎么去求,最近看了一些文章和资料,终于搞明白了。
首先来看候选键的定义:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选键。
若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。
设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:
(1)左右出现;
(2)只在左部出现;
(3)只在右部出现;
(4)不在左右出现;
算法:按以下步骤求候选键:
1.只在FD右部出现的属性,不属于候选码;
2.只在FD左部出现的属性,一定存在于某候选码当中;
3.外部属性一定存在于任何候选码当中;
4.其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
例1:R<U,F>,U=(A,B,C,D,E,G),F={AB-->C,CD-->E,E-->A.A-->G},求候选码。
  因G只在右边出现,所以G一定不属于候选码;而B,D只在左边出现,所以B,D一定属于候选码;BD的闭包还是BD,则对BD进行组合,除了G以外,BD可以跟A,C,E进行组合
  先看ABD
  ABD本身自包ABD,而AB-->C,CD-->E,A-->G,所以ABD的闭包为ABDCEG=U
  再看BDC
  CD-->E,E-->A,A-->G,BDC本身自包,所以BDC的闭包为BDCEAG=U
  最后看BDE
  E-->A,A-->G,AB-->C,BDE本身自包,所以BDE的闭包为BDEAGC=U
  因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABC、BCD和BDE

例2:R<U,F>,U=(A,B,C),F={AB-->C,C-->B},求候选码。
因为A只出现在左边,所以A一定是候选键。A的闭包还是A,则对A进行组合,可以和B,C进行组合。
首先看AB,AB本身自包AB,而AB-->C,所以AB的闭包是ABC=U。
再看AC,AC本身自包AC,而C-->B,所以AC的闭包是ABC=U。
因为AB,AC的闭包都是ABC,也就是U,所以候选键是AB,AC。

28.关系模式的分解是否存在依赖的判断、

对于每一个函数关系,在分解后的集合中都必须能找到,否则不存在函数依赖,如
R(U,F),U={A,B,C},F={A-C,B-C}
那么分解{R1(BC),R1(AC)}存在依赖
而分解{R1(AB),R2(BC)}不存在依赖

29.chche地址直接映射

去掉前面N位,后面的判断即可。
16进制转2进制的方法:16进制中1位=2进制中的4位
如 E8F8 = 1110 1000 1111 1000

30.软件开发-结构化方法

把软件的开发分为多个阶段:
只有一个阶段获得认可, 才能进行下一个阶段的工作

31.模块间的耦合和内聚

耦合:最高:内容。最低:数据。
内聚:最高:功能。最低:偶然。

32.委托开发署名权

有书面协议的按书面协议,
没有书面协议的归被委托者所有

33.消费者模式PV操作需要2个信号量

一个:判断管道是否满,是否可写
另一个:判断管道中是否有东西,是否可读

34.shell编程

$$ 进程标识号
$# 命令行参数个数
$* 命令汗所有参数值
$@ 用双引号包括所有参数值
$0 表示命令本身
$1-$9 表示命令行的9个参数

35.知识点:树的遍历

前序:根左右
中序:左根右
后序:左右根

36.错题:FTP协议

传输层使用的是:TCP协议
使用的端口是:21

37.错题:无向图中顶点的度

无向图中顶点的度是指与该顶点相邻的顶点数

38.cache于主存之间的操作是由硬件完成

39.脉冲编码调制技术(PCM)

MIC(话筒)输出的是音频模拟信号,声卡从MIC获取音频模拟信号后,通过模数转换器(ADC),
将声波振幅信号采样转换成一串数字信号并存储到计算机中。重放时,这些数字信号送到数模转换器(DAC),
以同样的采样速度还原为模拟波形,放大后送到扬声器发声,这一技术称为脉冲编码调制技术(PCM)。

40.甘特图:不利于表示任务的相互依赖

gante

41.软件生存周期模型

瀑布模型:需求很明确
演化模型:快速分析构造出该软件的一个初始可运行版本,然后逐步演化成为最终软件产品。
原型模型:快速构造软件的原型,在此基础上开发最终软件产品。
针对需求不确定
螺旋模型:增加风险分析。

42软件安全性归于功能性中