软件设计师知识点100条
1、码制的表示
定点整数
原码与反码的0既有+0也有-0,数码的表示个数为2n-1个。补码与移码有人为定义,-0编码定义为最小数值-1,数码的表示个数为2n个,最小表示数值为2n-1。
定点小数
数码的表示个数与定点整数一致。补码与移码的人为定义,将-0的编码定义为最小数值-1。
2、浮点数的表示
浮点数格式
阶码决定范围,阶码越长,范围越大;
尾数决定精度,尾数越长,精度越高。
浮点数运算过程
对阶→尾数计算→格式化;
对阶:小数像大数看齐,尾数右移。
3、校验码
4、CPU组成
CPU分为运算器与控制器两大部分。
运算器
算术逻辑单元ALU:执行算术运算和逻辑运算。
累加寄存器AC:暂存数据,为ALU提供工作区。
数据缓冲寄存器DR
状态条件寄存器PSW归属有争议
控制器
指令计数器PC:存储下一条要执行指令的地址
指令寄存器IR:存储即将执行的指令
指令译码器ID
时序部件
5、CISC与RISC
CISC(复杂指令集)的特点:指令数量多,指令频率差别大,变长,多种寻址方式,使用微码(微程序)实现。
RISC(精简指令集)的特点:指令数量少,频率接近,定长,单周期,多寄存器寻址,多通用寄存器,硬布线逻辑控制,适用于流水线。有效支持高级程序语言,优化编译。
6、流水线技术
流水线建立时间:第1条指令执行时间
流水线周期:指令分段后,最长段时间
流水线执行时间(默认使用理论公式,无答案时考虑实践公式)
理论公式:流水线建立时间+(指令条数-1)*流水线周期
实践公式:指令段数*流水线周期+(指令条数-1)*流水线周期
吞吐率=指令条数/流水线执行时间
最大吞吐率=流水线周期的倒数。
7、局部性原理
时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型原因是由于程序中存在着大量的循环操作。
空间局部性:指一旦程序访问了某个存储单元,不久以后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址可能集中在一定的范围内,其典型情况是程序顺序执行。
8、常见存储器
按内容存取
相联存储器(如Cache)
按地址存取
随机存取存储器(如内存)
顺序存取存储器(如磁带)
直接存取存储器(如磁盘)
工作方式
随机存取存储器RAM(如内存DRAM)
只读存储器ROM(如BIOS)
9、Cache
在计算机的存储系统体系中,Cache是(除寄存器以外)访问速度最快的层次。解决CPU与主存之间速度容量不匹配问题。
Cache与主存映射三种方式:
10、主存编址计算
内存单元数个数=最大地址+1-最小地址
内存编址内容:
按字编址(每个存储单元存放内容为机器字长—题干定义)
按字节编址(每个存储单元内容为1字节即8bit)
内存总容量=内存单元数*编址内容
总容量=单位芯片容量*总片数
总片数=总容量/单位容量;
单位芯片容量=总容量/芯片片数。
11、输入输出技术
程序控制(查询)方式:分为无条件传送和程序查询方式。方法简单,硬件开销小,但I/O能力不高,严重影响CPU的利用率。
程序中断方式:与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度。
DMA方式:DMA方式是为了在主存与外设之间实现高速、批量数据交换而设置的。DMA方式比程序控制方式与中断方式都高效。
12、中断
中断处理(CPU无需等待也不必查询I/O状态):
当I/O系统准备好以后,发出中断请求信号通知CPU;
CPU接到中断请求后,保存正在执行程序的现场(保存现场),打断的程序当前位置即为断点;
(通过中断向量表-保存中断服务程序的入口地址)
转入I/O中的服务程序的执行,完成I/O系统的数据交换;
返回被打断的程序继续执行(恢复现场)。
13、可靠性
串联系统计算:R总=R1*R2*…*Rn;
并联系统计算:R总=1-(1-R1)(1-R2)…(1-Rn);
N模混联系统:先将整个系统划分为多个部分串联R1、R2…等,再计算R1、R2内部的并联可靠性,带入原公式。
可靠性表示:MTTF/(1+MTTF)
14、操作系统位置和功能
管理系统的硬件、软件、数据资源
控制程序运行
人机之间的接口
应用软件与硬件之间的接口
15、嵌入式操作系统
特点:微型化、可定制(针对硬件变化配置)、实时性、可靠性、易移植性(硬件抽象层HAL和板级支撑包BSP支持)
初始化过程:片级初始化→板级初始化→系统初始化
16、线程
同一个进程当中的各个线程,可以共享该进程的各种资源,如内存地址空间、代码、数据、文件等,线程之间的通信与交流非常方便。
对于同一个进程当中的各个线程来说, 他们可以共享该进程的大部分资源。每个线程都有自己独立的CPU运行上下文和栈,这是不能共享的。
(程序计数器、寄存器和栈不能共享)
17、PV操作
P操作:S=S-1(申请并锁定资源);S<0(检查资源是否足够)
V操作:S=S+1(释放资源);S<=0(检查是否有进程排队并通知排队进程)
S信号量:表示资源数,初值即为初始状态无操作时,资源的数量;信号量小于0的时候,还可以表示排队的进程数量。
18、前趋图与PV操作分析题技巧
针对箭线标注信号量,箭线的起点位置是V操作(即前趋活动完成后以V操作通知后继活动);箭线的终点位置是P操作(即后继活动开始前以P操作检查前趋活动是否完成)。
19、死锁
死锁四大条件:互斥、保持和等待、不剥夺、环路等待。
假设m个进程各自需要w个R资源,系统中共有n个R资源,此时不可能形成死锁的条件是:m*(w-1)+1<=n。
20、页式存储的淘汰原则
页面淘汰时,主要依据原则(考试中默认按照此原则进行淘汰):先淘汰最近未被访问的(访问位为0),其次多个页面访问位为0时,则淘汰未被修改的(即修改位为0,因为修改后的页面淘汰时代价更大)。
21、树形目录结构(多级目录结构)
绝对路径从根目录开始写起,并且该文件的全名即为绝对路径+文件名。
相对路径从当前位置下一级目录开始写起。
22、I/O管理软件
硬件:完成具体的I/O操作。
中断处理程序:I/O完成后唤醒设备驱动程序
设备驱动程序:设置寄存器,检查设备状态
设备无关I/O层:设备名解析、阻塞进程、分配缓冲区
用户级I/O层:发出I/O调用。
23、分布式透明性
分片透明:用户不必关心数据是如何分片的即如何分片对用户是透明的。
复制透明:用户不用关心数据库在网络中各个结点的复制情况,被复制的数据的更新由系统自动完成。
位置透明:用户不必知道所操作的数据放在何处,即数据分配到哪个或哪些站点存储对用户是透明的。
局部映像透明性(逻辑透明):用户不必知道局部数据库模式。
24、数据库三级模式两级映像
外模式-视图;模式-基本表;内模式-文件。
外模式-模式映射,保证数据逻辑独立性,即数据的逻辑结构发生变化后,用户程序也可以不修改。只需要修改外模式和概念模式之间的映像。
模式-内模式映射,保证数据物理独立性,即当数据的物理结构发生改变时,应用程序不用改变。只需要修改概念模式和内模式之间的映像。
25、数据库设计过程
需求分析阶段产物:数据流图、数据字典、需求说明书。
概念设计阶段产物:E-R模型。
逻辑设计阶段产物:关系模式。设计依据:需求分析、E-R模型、转换原则、规范化理论。
26、关系模式基本概念
属性
简单属性和复合属性:
简单属性是原子的,不可再分的;
复合属性可以细分为更小的部分(即划分为别的属性)。
单值属性和多值属性:
定义的属性对于一个
特定的实体都只有单独的一个值,称为单值属性;
在某些特定情况下,一个属性可能对应一组值,称为多值属性。
NULL属性:表示无意义或不知道。
派生属性:可以从其他属性得来。
目或度:关系模式中属性的个数。
候选码(候选键):标示元组的属性集合,可以有多个。
主码(主键):从候选键选择一个。
主属性与非主属性:组成候选码的属性就是主属性,其它的就是非主属性。
外码(外键):其他关系模式的主键。
全码(ALL-Key):关系模式的所有属性组是这个关系的候选码。
27、候选键
选择入度为0(无函数依赖可推导得出的属性入度为0)的属性集合,从该集合尝试推导出全部属性(可通过传递函数依赖等进行传递推导),如果可以,该集合为候选键,否则,该集合依次添加既有入度也有出度(既可被推导得出也可推导出其他属性)的中间结点,直到推导出所有属性为止,最终集合即为候选键。
28、E-R图转关系模式转换原则
实体必须单独转换为1个关系模式。
联系根据类型不同:
1对1联系可以转换为独立的关系模式,也可以归并到任意一端实体中。
1对多联系可以转换为独立的关系模式,也可以归并到多端实体中。
多对多联系只能转换为独立的关系模式,不能归并。
29、关系代数
笛卡尔积×:结果的属性列数是二者之和,结果的元组行数是二者乘积。
投影π:对垂直方向的属性列进行筛选。
选择σ:对水平方向的元组行进行筛选。
自然连接⋈:结果的属性列数是二者之和减去重复列数,结果元组是同名属性列取值相等的元组。
30、Amstrong公理体系
A1.自反律(Reflexivity):若Y⊆X⊆U,则X →Y成立。
A2.增广律(Augmentation):若Z⊆U且X→Y,则XZ→YZ成立。
A3.传递律(Transitivity):若X→Y且Y→Z,则X→Z成立。
合并规则:由X→Y,X→Z,有X→YZ。 (A2, A3)
伪传递规则:由X→Y,WY→Z,有XW→Z。 (A2, A3)
分解规则:由X→Y及 Z ⊆ Y,有X→Z。 (A1, A3)
31、规范化程度判断即范式判定依据
1NF:属性值都是不可分的原子值。(基本二维表)
2NF:在1NF基础上,消除了非主属性对候选键的部分函数依赖。(候选键是单属性至少满足2NF)
3NF:在2NF基础上,消除了非主属性对候选键的传递函数依赖。(没有非主属性至少满足3NF)
BCNF:在3NF基础上,消除了主属性对候选键的部分函数依赖和传递函数依赖。
32、查询
SELECt [ALL|DISTINCT] <目标表达式> [, <目标表达式>]…
FROM <表名> [,<表名>]…
[WHERe <条件表达式>]
[GROUP BY <列名1> [HAVINg <条件表达式> ] ]
[ORDER BY <列名2> [ASC|DESC ] … ];
33、事务特性(ACID)
原子性A:事务是原子的,要么都做,要么都不做。
一致性C:事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性的状态。
隔离性I:事务相互隔离,当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的。
持续性D:一旦事务成功提交,即使数据库崩溃,其对数据库的更新操作也将一直有效。
34、封锁协议
共享锁(S锁、读锁):若事务T对数据对象A添加了S锁,则只允许T读取A,但不能修改A。并且其他事务只能对A加S锁,不能加X锁。
排他锁(X锁、写锁、独占锁):若事务T对数据对象A添加了X锁,则只允许T读取和修改A,其他事务不能再对A加任何锁。
35、OSI七层模型
36、TCP/IP协议簇四层模型
37、常见协议功能
POP3:邮件收取
SMTP:邮件发送
FTP:20数据端口/21控制端口,文件传输协议
HTTP:超文本传输协议,网页传输
DHCP: IP地址自动分配
SNMP:简单网络管理协议
DNS:域名解析协议,记录域名与IP的映射关系
TCP:可靠的传输层协议
UDP:不可靠的传输层协议
ICMP:因特网控制协议,PING命令来自该协议
IGMP:组播协议
ARP:地址解析协议,IP地址转换为MAC地址
RARP:反向地址解析协议,MAC地址转IP地址
38、常见网络诊断命令
ping:用于检查网络是否连通;
tracert(linux: traceroute):用于确定 IP数据包访问目标所采取的路径,若网络不通,能定位到具体哪个结点不通;
ipconfig ( linux: ifconfig):显示TCP/IP网络配置值,如:IP地址,MAC地址,网关地址等;
nslookup:查询DNS记录;
Netstat:用于显示网络连接、路由表和网络接口信息。
39、特殊的IP地址
40、层次化网络
核心层:主要是高速数据交换,实现高速数据传输、出口路由,常用冗余机制。
接入层:主要是针对用户端,实现用户接入、计费管理、MAC地址认证、MAC地址过滤、收集用户信息,可以使用集线器代替交换机。
汇聚层 :网络访问策略控制、数据包处理和过滤、策略路由、广播域定义 、寻址。
41、URL
URL:协议名://主机名.组名.较高层域名
42、加密算法
常见对称密钥加密算法(共享密钥加密技术):DES、 3DES(三重DES)、 RC-5、IDEA、AES算法。
常见非对称密钥加密算法(公开密钥加密技术): RSA、ECC
常见的摘要算法:MD5(128位),SHA(160位)。
43、加密技术应用
数字信封:用接收方公钥加密使用的对称密钥。
数字签名:用发送方私钥签名,保证发送方身份真实性,发送者不可抵赖。与信息摘要结合,可防篡改。
信息摘要:单向散列值函数,防篡改,保证消息完整性。
数字证书
数字证书的内容包括:CA签名、用户信息(用户名称)、用户公钥等。
证书中的CA签名验证数字证书的可靠性、验证网站真伪。
用户公钥:客户端利用证书中的公钥加密,服务器利用自己的私钥解密。
44、网络安全协议分层
HTTPS协议是HTTP协议与SSL协议的结合,默认端口号443。
PGP协议是邮件安全协议。
SET协议是电子商务安全协议,涉及电子交易安全。
SSH:为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
45、网络攻击
46、网络防御
防火墙技术:防外不防内,对于DMZ非军事区主要放置应用服务器(如邮件服务器,WEB服务器)。
漏洞扫描:入侵者可以利用系统漏洞侵入系统,系统管理员可以通过漏洞扫描技术,及时了解系统存在的安全问题,并采取相应措施来提高系统的安全性。
入侵检测IDS:根据攻击者行为和模式库记录的行为进行模式匹配,对攻击行为报警。
47、病毒
病毒的特性:计算机病毒的特性包括隐蔽性、传染性、潜伏性、触发性和破坏性等
分类:
文件型计算机病毒感染可执行文件(包括EXE和COM文件)。
引导型计算机病毒影响软盘或硬盘的引导扇区。
目录型计算机病毒能够修改硬盘上存储的所有文件的地址。
宏病毒感染的对象是使用某些程序创建的文本文档、数据库、电子表格等文件。
48、常见的软件开发模型
瀑布模型
容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始。
适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目
V模型
强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型。
喷泉模型
以用户需求为动力,以对象为驱动,适合于面向对象的开发方法。
特点是迭代、无间隙。
原型模型
典型的原型开发方法模型。适用于需求不明确的场景,可以帮助用户明确需求。
增量模型
可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。
49、螺旋模型与RUP
螺旋模型
典型特点是引入了风险分析。结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。
统一过程RUP
典型特点:用例驱动、以架构为中心、迭代和增量。
构思阶段
强调定义和细化用例,并将其作为主要模型。
细化阶段
重点是创建分析和设计模型,强调类的定义和体系结构的表示。确定系统架构。
构建阶段
将设计转化为实现,并进行集成和测试。
移交阶段
将产品发布给用户进行测试评价,交付或再次进行迭代修改产品使之完善。
50、敏捷方法
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。
水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。
并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件。
自适应软件开发的核心是三个非线性的,重叠的开发阶段:猜测、合作、学习。
51、极限编程
极限编程是一种轻量级的开发方法。
它提出了四大价值观:沟通、简单、反馈、勇气。
五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
52、开发方法
结构化开发方法:用户至上,严格区分工作阶段,每阶段有任务和结果,强调系统开发过程的整体性和全局性,系统开发过程工程化,文档资料标准化,自顶向下,逐步求精。
原型开发方法:适用于需求不明确的情况。
面向对象开发方法:更好的复用性,关键在于建立一个全面、合理、统一的模型,分析、设计、实现三个阶段界限不明确。
53、内聚性
54、耦合性
55、测试分类
静态测试
桌前检查、代码走查、代码审查。
动态测试
黑盒测试
等价类划分(确定无效与有效等价类,设计用例尽可能多的覆盖有效类,设计用例只覆盖一个无效类)
边界值分析(处理边界情况时最容易出错,选取的测试数据应该恰好等于、稍小于或稍大于边界值)
错误推测
因果图
白盒测试:语句覆盖、判定覆盖、条件覆盖、条件/判定覆盖、路径覆盖。
56、白盒测试
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、Gantt图与PERT图
甘特图能够消晰描述每个任务的开始/结束时间及各任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系;
PERT利用项目的网络图和各活动所需时间的估计值(通过加权平均得到的)去计算项目总时间,强调任务之间的先后关系,但不能反映任务之间的并行性,以及项目的当前进展情况。
64、PERT图
关键路径是图中源点至汇点的最长路径,关键路径的时间称之为项目工期,也表述为项目完成所需的最少时间。
总时差:在不延误总工期的前提下,该活动的机动时间。一般在图中,以最晚结束时间减去最早结束时间求取,或以最晚开始时间减去最早开始时间求取。
65、风险管理
风险的特性:具有不确定性,可能会造成损失。
风险的类别
项目风险涉及到各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能导致项目损失。
技术风险涉及到技术相关的可能会导致项目损失的问题。
商业风险与市场因素相关。
社会风险涉及到政策、法规等因素。
风险曝光度(RiskExposure)=错误出现率(风险出现率) X错误造成损失(风险损失)。
66、沟通路径
有主程序员:n个成员小组,1个主程序员,普通程序员只需要与主程序员沟通。沟通路径:n-1。
无主程序员:n个成员的项目小组,相互之间都可以沟通。沟通路径:n(n-1)/2。
67、数据流图
数据流常见的3种错误
黑洞:加工只有输入没有输出;
奇迹:加工只有输出没有输入;
灰洞:加工中输入不足以产生输出。
子图与父图保持平衡
父图与子图之间平衡是指任何一张DFD子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据了保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。
68、面向对象基本概念
面向对象:对象+分类+继承+通过消息的通信
对象:属性(数据)+方法(操作)+对象ID
封装:隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)
类(实体类/控制类/边界类):对对象的抽象。
接口:一种特殊的类,他只有方法定义没有实现
继承与泛化:复用机制
消息和消息通信:对象之间进行通信的一种构造叫做消息。消息是异步通信的。
重置/覆盖:在子类中重新定义父类中已经定义的方法。
重载:一个类可以有多个同名而参数类型不同的方法。
动态绑定:根据接收对象的具体情况将请求的操作与实现的方法进行连接(运行时绑定)。
多态:不同对象收到同样的消息产生不同的结果。(软设一般只涉及过载多态-同一个名字在不同的上下文中所代表的含义不同)
69、面向对象设计原则
单一职责原则:设计目的单一的类
开放-封闭原则:对扩展开放,对修改封闭
李氏(Liskov)替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
70、UML图分类
71、类图关系
依赖关系:一个事物发生变化影响另一个事物。
泛化关系:特殊/一般关系
关联关系:描述了一组链,链是对象之间的连接。
聚合关系:整体与部分生命周期不同。
组合关系:整体与部分生命周期相同。
实现关系:接口与类之间的关系
72、用例关系
73、设计模式分类
74、创建型设计模式应用场景
75、结构型设计模式应用场景
76、行为型设计模式应用场景1
77、顺序表和链表对比
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层到⌊〖log〗_2n ⌋+1层,每层从左到右依次编号。
80、特殊的二叉树
满二叉树:任何结点,或者是树叶,或者恰有两棵非空子树。
完全二叉树:最多只有最小面的两层结点的度可以小于2,并且最下面一层的结点全都集中在该层左侧的若干位置。
平衡二叉树:树中任一结点的左右子树高度之差不超过1。
查找二叉树:又称之为排序二叉树。任一结点的权值,大于其左孩子结点,小于其右孩子结点。中序遍历结果有序。
线索二叉树:在每个结点中增加两个指针域来存放遍历时得到的前驱和后继信息。
81、最优二叉树的概念
最优二叉树:又称为哈弗曼树,它是一类带权路径长度最短的树。
路径是从树中一个结点到另一个结点之间的通路,路径上的分支数目称为路径长度。
树的路径长度是从树根到每一个叶子之间的路径长度之和。结点的带权路径长度为从该结点到树根之间的路径长度与该结点权值的乘积。
树的带权路径长度为树中所有叶子结点的带权路径长度之和。
82、二叉树的遍历操作
前序遍历:又称为先序遍历,按根左右的顺序进行遍历。
后序遍历:按左右根的顺序进行遍历。
中序遍历:按左根右的顺序进行遍历。
层次遍历:按层次顺序进行遍历。
83、图的概念
完全图
在无向图中,若每对顶点之间都有一条边相连,则称该图为完全图(complete graph)。
在有向图中,若每对顶点之间都有二条有向边相互连接,则称该图为完全图。
强连通图:在有向图中,对于每一对顶点,从顶点vi到顶点vj和从顶点vj到顶点vi都存在路径,则称为强连通图。
84、图的遍历特点
深度优先遍历:
当以邻接矩阵作为存储结构时,深度优先搜索遍历图的时间复杂度为O(n2)
当以邻接表作为存储结构时,深度优先搜索遍历图的时间复杂度为O(n+e)
广度优先遍历和深度优先搜索遍历图的运算时间复杂度相同,其不同之处仅仅在于对顶点的访问次序不同。
85、算法特性
有穷性:执行有穷步之后结束,且每一步都可在有穷时间内完成。
确定性:算法中每一条指令都必须有确切的含义,不能含糊不清。
输入(>=0)
输出(>=1)
有效性(可行性):算法的每个步骤都能有效执行并能在执行有限次后得到确定的结果。例如a=0,b/a就无效
86、常见算法策略
87、常见的对算法执行所需时间的度量
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)
88、常见排序算法对比
89、常见排序算法适用常见对比1
若待排序列的记录数目n较小,可采用直接插入排序和简单选择排序。由于直接插入排序所需的记录移动操作较简单选择排序多,因而当记录本身信息量大时,用简单选择排序方法较好。
若待排记录按关键字基本有序,宜采用直接插入排序或冒泡排序。
当n很大且关键字位数较少时,采用基数排序较好。
若n很大,则应采用时间复杂度为O(nlog2n)的排序方法,例如快速排序、堆排序或归并排序:
快速排序目前被认为是内部排序中最好的方法,当待排序的关键字为随机分布时,快速排序的平均运行时间最短;
堆排序只需要一个辅助空间,并且不会出现在快速排序中可能出现的最快情况。
快速排序和堆排序都是不稳定的排序方法,若要求排序稳定,可选择归并排序。
90、编译与解释的区别
编译方式下机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,因此执行时效率较高;
解释方式下解释程序和源程序(或某种等价表示)要参与到程序的运行过程中,边解释边执行,执行效率较低。
即:解释方式,翻译程序不生成独立的目标程序,而编译方式则生成独立保持的目标程序。
91、编译过程
符号表
符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的存在可以贯穿编译所有阶段。
错误管理
静态错误:编译时所发现的程序错误,分为语法错误和静态语义错误。
语法错误包含:单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
静态语义分析:运算符与运算对象类型不合法等错误。
动态错误:发生程序运行时,也叫动态语义错误。包括死循环、变量取零时做除数、引用数组元素下标越界等错误。
92、文法和正规式
一般的程序设计语言属于上下文无关文法。
正规文法,表示的语言集合是正规集,正规集的规律可以用正规式表示。
93、传值调用和引用调用
94、常见的程序设计语言
Fortran语言(第一个高级程序设计语言,科学计算,执行效率高)
Pascal语言(结构化程序设计语言,表达能力强,Delphi)
C语言(通用、结构化程序设计语言,指针操作能力强,高效)
Lisp语言(函数式程序语言,符号处理,人工智能)
C++语言(C语言基础上增加了类机制,面向对象,高效,与C兼容)
Java语言(面向对象,中间代码,跨平台,通用的程序设计语言)
Python(面向对象,解释型程序设计语言,胶水语言,通用的脚本语言)
PHP(服务器端脚本语言,制作动态网页)
Ruby(简单快捷、面向对象、脚本语言)
Delphi(快速应用程序开发工具,可视化编程环境)
COBOL(数据处理领域最为广泛的程序设计语言,高级编程语言)
XML(可扩展标记语言,标准通用标记语言的子集 )
PROLOG(逻辑式语言,间接性,表达能力强,建造希赛网系统、数据库、自然语言理解、智能知识库等)
注:C/C++常被用于操作系统开发;脚本语言是解释性语言。
95、保护范围和保护对象
96、保护期限
97、知识产权人确定-职务作品判定
98、知识产权人确定-其他
99、侵权判断的特殊要求
中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。
开发软件所用的思想、处理过程、操作方法或者数学概念不受保护
著作权法不适用于下列情形:
法律、法规,机关的决议、决定、命令和其他具有立法、行政、司法性质的文件,及其正式译文;
时事新闻;
历法、通用数表、通用表格和公式。
100、典型的合理引用和侵权行为