原码与反码的0既有+0也有-0,数码的表示个数为2n-1个。补码与移码由人为定义,-0编码定义为最小数值-1,数码的表示个数为2n个,最小表示数值为2^n-1。
数码的表示个数与定点整数一致。补码与移码的人为定义,将-0的编码定义为最小数值-1。
阶码决定范围,阶码越长,范围越大
尾数决定精度,尾数越长,精度越高
对阶==》尾数计算==》格式化
对阶:小数向大数看齐,尾数右移
校验方式 | 校验码位数 | 校验码位置 | 检错 | 纠错 | 校验方式 |
---|---|---|---|---|---|
奇偶校验 | 1 | 一般拼接在头部 | 可检查奇数位错 | 不可纠错 | 奇校验:最终1的个数是奇数个; 偶校验:最终1的个数是偶数个; |
CRC循环冗余校验 | 生成多项最高次幂决定 | 拼接在信息位尾部 | 可检错 | 不可纠错 | 模二除法求余数,拼接作为校验位 |
海明校验 | 2^r ≥ m+r+1 | 插入在信息位中间 | 可检错 | 可纠错 | 分组奇偶校验 |
cpu分为运算器与控制器两大部分
CISC(复杂指令集)的特点:指令数量多,指令频率差别大,变长,多种寻址方式,使用微码(微程序)实现。
RISC(精简指令集)的特点:指令数量少,频率接近,定长,单周期,多寄存器寻址,多通用寄存器,硬布线逻辑控制,适用于流水线。有效支持高级程序语言,优化编译
随机存取存储器(如内存)
顺序存取存储器(如磁带)
直接存取存储器(如磁盘)
在计算机的存储系统体系中,Cache是(除寄存器以外)访问速度最快的层次。
解决CPU与主存之间速度容量不匹配问题。
Cache与主存映射三种方式:
冲突率 | 电路复杂度 | |
---|---|---|
直接相连映像 | 高 | 简单 |
全相联映像 | 低 | 复杂 |
组相联映像 | 折中 | 折中 |
内存单元数个数 = 最大地址 + 1 - 最小地址
内存编址内容:
内存总容量 = 内存单元数 * 编制内容
总容量 = 单位芯片容量 * 总片数
总片数 = 总容量/单位容量
单位芯片容量 = 总容量 / 芯片片数
中断处理(CPU无需等待也不必查询I/O状态):
串联系统计算:R总 = R1 * R2 * R3 * … * Rn;
并联系统计算:R总 = 1-(1-R1)(1-R2)…(1-Rn);
N模混联系统:先将整个系统划分为多个部分串联R1、R2…等,再计算R1、R2内部的并联可靠性,带入原公式。
可靠性表示:MTTF/(1+MTTF)
特点:微型化、可定制(针对硬件变化配置)、实时性、可靠性、易移植性(硬件抽象层HAL和板级支撑包BSP支持)
P操作:S = S - 1(申请并锁定资源);S < 0(检查资源是否足够)
V操作:S = S +1(释放资源);S ≤ 0(检查是否有进程排队并通知排队进程)
S信号量:表示资源数,初值即为初始状态无操作时,资源的数量;信号量小于0时的时候,还可以表示排队的进程数量
针对箭线标注信号量
箭线的起点位置是V操作(即前趋活动完成后以V操作通知后继活动)
箭线的终点位置是P操作(即后继活动开始前以P操作检查前趋活动是否完成)
死锁四大条件:
假设m个进程各自需要w个R资源,系统中共有n个R资源,此时不可能形成死锁的条件是:m * (w - 1)+1 <= n
解决死锁的策略:
页面淘汰时,主要依据原则(考试中默认按照此原则进行淘汰):
先淘汰最近未被访问的(访问位为0),其次多个页面访问位为0时,则淘汰未被修改的(即修改位为0,因为修改后的页面淘汰时代价更大)
访问0 ——> 修改0
绝对路径从根目录开始写起,并且该文件的全名即为绝对路径 + 文件名
相对路径从当前位置下一级目录开始写起。
三级模式:
外模式 <===> 视 图
模 式 <===> 基本表
内模式 <===> 文 件
两级映像(外模逻辑,模内物理):
1、需求分析阶段产物:数据流图、数据字典、需求说明书
2、概念设计阶段产物:E-R模型
3、逻辑设计(详细设计)阶段产物:关系模式
4、物理设计阶段
5、数据库实施阶段
6、数据库运行和维护阶段
设计依据:需求分析、E-R模、转换原则、规范化理论
简单属性和复合属性
单值属性和多值属性
NULL属性:表示无意义或不知道
派生属性:可以从其他属性得来
关系模式中属性的个数
又称为候选键,唯一标示元组的属性集合,可以有多个
又称为主键,从候选键中选择一个
组成候选码的属性就是主属性,其他的就是非主属性
其他关系模式的主键
关系模式的所有属性组是这个关系的候选码
选择入度为0(无函数依赖可推导得出的属性入度为0)的属性集合,从该集合尝试推导出全部属性(可通过传递函数依赖等进行传递推导),如果可以,该集合为候选键,否则,该集合依次添加既有入度也有出度(既可被推导得出也可推导出其他属性)的中间结点,直到推导出所有属性为止,最终集合即为候选键。
顺藤摸瓜…
实体必须单独转换为1个关系模式
联系根据类型不同:
笛卡尔积x:结果的属性列数是二者之和,结果的元组行数是二者乘积
投影Π:对垂直方向的属性列进行筛选 select
选择:对水平方向的元组行进行筛选 where
自然连接:结果的属性列数是二者之和减去重复列数,结果元组是同名属性列取值相等的元组
A1.自反律(Reflexivity):若Y⊆X⊆U,则X→Y为F所蕴含
A2.增广律(Augmentation):若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含
A3.传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F 所蕴含
合并规则:由X→Y,X→Z,由 X→YZ(A2,A3)
伪传递规则:由X→Y,WY→Z,有XW→Z(A2,A3)
分解规则:由X→Y及Z⊆Y,有X→Z(A1,A3)
1NF:属性值都是不可分的原子值。(基本二维表)
2NF:在1NF基础上,消除了非主属性对候选键的部分函数依赖。(候选键是单属性至少满足2NF)
3NF:在2NF基础上,消除了非主属性对候选键的传递函数依赖。(没有非主属性至少满足3NF)
BCNF:在3NF基础上,消除了主属性对候选键的部分函数依赖和传递函数依赖
SELECT [ ALL | DISTINCT ] < 目标表达式 > [, < 目标表达式 > ] …
FROM < 表名 > [, <表名> ] …
[WHERE <条件表达式> ]
[GROUP BY <列名 1> [ HAVING <条件表达式> ] ]
[ORDER BY <列名2> [ ASC | DESC ] … ]
处理类型 | 处理子类 | 示例 / 语法 |
---|---|---|
结果排序 | 升序或降序 | ORDER BY 字段名 DESC | ASC |
统计 | COUNT( [ ALL | DISTINCT ] <列名> ) | |
计算一列值的总和 | SUM( [ ALL |DISTINCT ] <列名> ) | |
计算一列值的平均值 | AVG( [ALL | DISTINCT] <列名> ) | |
求一列值中的最大值 | MAX([DISTINCT | ALL] <列名> ) | |
求一列值中的最小值 | MIN([DISTINCT | ALL] <列名> ) | |
对结果分组 | 将查询结果按列值分组 | GROUP BY <列名> |
对分组结果筛选 | 对分组结果筛选 | HAVING <条件表达式> |
层次 | 名称 | 主要功能 | 主要设备及协议 |
---|---|---|---|
7 | 应用层 | 实现具体的应用功能 | POP3、FTP、HTTP |
6 | 表示层 | 数据的格式与表达、加密、压缩 | Telnet、SMTP、DHCP |
5 | 会话层 | 建立、管理和终止会话 | TFTP、SNMP、DNS |
4 | 传输层 | 提供端到端的连接 | TCP、UDP |
3 | 网络层 | 分组传输和路由选择 | 三层交换机、路由器 ARP、RARP、IP ICMP、IGMP |
2 | 数据链路层 | 传送以帧为单位的信息 | 网桥、交换机(多端口网桥)、网卡 PPTP、L2TP、SLIP、PPP |
1 | 物理层 | 二进制传输 | 中继器、集线器(多端口中继器) |
主要区别在于:用途不同、使用要求不同。
一、使用要求不同
1、PPTP的使用要求:互联网络必须为IP网络。
2、L2TP的使用要求:L2TP只要求隧道媒介提供面向数据包的点对点的连接。L2TP可以在IP(使用UDP),帧中继永久虚拟电路(PVCs)、X.25虚拟电路(VCs)或ATM网络上使用。
二、用途不同
1、PPTP的用途:通过PPTP,远程用户能够通过 Microsoft Windows NT工作站、Windows xp 、 Windows 2000 和windows2003。
2、L2TP的用途:L2TP用来整合多协议拨号服务至现有的因特网服务提供商点。PPP 定义了多协议跨越第二层点对点链接的一个封装机制。
都是用于提供两台主机之间的点对点串行通信,它们之间有什么区别?
SLIP代表串行线网际协议,是一种TCP / IP协议、一种简单的互联网链接协议。它允许用户使用计算机来获得上网的调制解调器。
SLIP连接有助于PC与本地Internet协议进行通信,并将其转换为Internet主机。它消除了将PC用户连接到互联网连接的中央计算机的需要。因此,SLIP直接向个人计算机提供互联网服务。
SLIP代表到串行线路互联网协议;而,PPP代表点对点协议。
SLIP是一种过时的协议,尽管它仍然在某些地方使用;而,PPP是用于与SLIP相同目的的新协议,它已经成为互联网标准,提供了一些新功能。
IP协议是SLIP支持的唯一协议。而,PPP支持多种协议。
PPP提供身份验证,错误检测,纠错,压缩和加密;而SLIP没有这些功能。
在SLIP中,IP地址是静态分配的。而,PPP执行动态分配。
可以在SLIP中以同步模式传输数据。而,PPP促进了数据传输的同步和异步模式。
PPP比SLIP好在哪里?
1、网络协议的多路复用
2、链路配置
3、错误检测
4、增值通信特性
5、建立网络地址
6、身份验证
POP3:邮件收取
SMTP:邮件发送
FTP:20 数据端口、21控制端口,文件传输协议
HTTP:超文本传输协议,网页传输
DHCP:IP地址自动分配
SNMP:简单网络管理协议
DNS:域名解析协议,记录域名与IP地址的映射关系
TCP:可靠的传输层协议
UDP:不可靠的传输层协议
ICMP:因特网控制协议,PING命令来自该协议
IGMP:组播协议
ARP:地址解析协议,IP地址转换为MAC地址
RARP:反向地址解析协议,MAC地址转换为IP地址
IP | 说明 |
---|---|
127网段 | 回播地址,本地环回地址 |
主机号非全0或非全1 | 可作为子网中的主机号使用 |
主机号全0地址 | 代表这个网络本身,可作为子网地址使用 |
主机号全1地址 | 特定子网的广播地址 |
169.254.0.0 | 保留地址,用于DHCP失效(win) |
0.0.0.0 | 保留地址,用于DHCP失效(Linux) |
URL(统一资源定位器):协议名://主机名.组名.最高层域名
组织模式 | 含义 | 地理模式 | 含义 |
---|---|---|---|
com | 商业组织 | cn | 中国 |
edu | 教育机构 | hk | 中国香港 |
gov | 政府机构 | mo | 中国澳门 |
mil | 军事部门 | tw | 中国台湾 |
net | 主要网络支持中心 | us | 美国 |
org | 上述以外组织 | uk | 英国 |
int | 国际组织 | jp | 日本 |
常见对称密钥加密算法(共享密钥加密技术):DES、3DES(三重DES)、RC-5、IDEA、AES算法
常见非对称密钥加密算法(公开密钥加密技术):RSA、ECC
常见的摘要算法:MD5(128位)、SHA(160位)
数字证书:
HTTPS:是HTTP协议和SSL(安全套接层协议)的结合,默认端口443
PGP:邮件安全协议
SET:电子商务安全协议,涉及电子交易安全
SSH:为建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议
攻击类型 | 攻击名称 | 描述 |
---|---|---|
被动攻击 | 窃听(网络监听) | 用各种可能的合法或非法的手段窃取系统中的信息资源和敏感信息 |
业务流分析 | 通过对系统进行长期监听,利用统计分析方法对参数进行研究,从而发现有价值的信息和规律 | |
主动攻击 | 重放攻击 | 所截获的某次合法的通信数据拷贝,出于非法的目的而被重新发送 |
拒绝服务(DOS) | 对信息或其他资源的合法访问被无条件地阻止 |
病毒的特性:计算机病毒的特性包括隐蔽性、传染性、潜伏性、触发性和破坏性
文件型计算机病毒感染可执行文件(包括EXE和COM文件)
引导型计算机病毒影响软盘或硬盘的引导扇区
目录型计算机病毒能够修改硬盘上存储的所有文件的地址
宏病毒感染的对象是使用某些程序创建的文本文档、数据库、电子表格等文件
瀑布模型
V模型
喷泉模型
原型模型
增量模型
螺旋模型
统一过程RUP
敏捷开发是一种以人为核心、迭代、循环渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想
水晶法强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论
并列争球法的核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件
自适应软件开发的核心是三个非线性的,重叠的开发阶段:猜测、合作、学习
极限编程是一种轻量级的开发方法
它提出了四大价值观:沟通、简单、反馈、勇气
五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作
十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准
1、结构化开发方法:
2、原型化开发方法:
3、面向对象开发方法:
内聚类型 | 描述 |
---|---|
功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 处理元素相关,而且必须顺序执行 |
通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
瞬时内聚(时间内聚) | 所包含的任务必须在同一时间间隔内执行 |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚(巧合内聚) | 完成一组没有关系或松散关系的任务 |
耦合类型 | 描述 |
---|---|
非直接耦合 | 两个模块之间没有直接关系,他们之间的联系完全是通过主模块的控制和调用来实现的 |
数据耦合 | 一组模块借助参数表传递简单数据 |
标记耦合 | 一组模块通过参数表传递记录信息(数据结构) |
控制耦合 | 模块之间传递的信息中包含用于控制模块内部逻辑的信息 |
外部耦合 | 一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息 |
公共耦合 | 多个模块都访问同一个公共数据环境 |
内容耦合 | 一个模块直接访问另一个模块的内部数据; 一个模块不通过正常入口转到另一个模块的内部; 两个模块有一部分程序代码重叠; 一个模块有多个入口 |
静态测试
动态测试
定义 | 特点 | |
---|---|---|
语句覆盖 | 被测试程序中的每条语句至少执行一次 | 对执行逻辑覆盖很低,一般认为是很弱的逻辑覆盖 |
判定覆盖(分支覆盖) | 被测程序每一个判定表达式至少获得一次 “真” 值和 “假” 值(或者程序中每一个判定取“真”分支和取“假”分支至少通过一次) | 判定覆盖比语句覆盖更强一些。 判定可以是1个条件,也可以是多个条件的组合 |
条件覆盖 | 每一个判定语句中每个逻辑条件的各种可能的值至少满足一次 | 条件覆盖和判断覆盖没有包含关系 |
判断/条件覆盖 | 判定中每个条件的所有可能取值(真/假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次 | 同时满足判定覆盖和条件覆盖 |
条件组合覆盖 | 每个判定中的各种可能值的组合都至少出现一次 | 同时满足判定覆盖、条件覆盖、判定/条件覆盖 |
路径覆盖 | 覆盖被测程序中所有可能的路径 | |
基本路径测试 | 每一条独立路径都执行过(即程序中可执行语句至少执行一次) | 测试用例个数与环路复杂度一致。 判定为关键控制节点,必须出现在基本路径中 |
循环覆盖 | 循环中每个条件都得到验证 | 注意数组参数可循环验证 |
McCabe复杂度计算公式:V(G) = m - n + 2
其中m是有向弧的条数,n是结点数。
对于伪代码可以先转换为程序流程图,对程序流程图可以最终转换为节点图处理
转换时注意将交点的地方标注为新的结点,以最终的结点图带入公式结算其McCabe复杂度
甘特图能够清晰描述每个任务的开始/结束时间及各个任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系
PERT利用项目的网络图和各活动所需时间的估计值(通过加权平均得到)去计算项目总时间,强调任务之间的先后关系,但不能反映任务之间的并行性,以及项目的当前进展情况
风险的特性:具有不确定性,可能会造成损失
风险的类别:
风险曝光度(RiskExposure) = 错误出现率(风险出现率)X 错误造成损失(风险损失)
有主程序员:n各成员小组,一个主程序员,普通程序员只需要与主程序员沟通。沟通路径:n-1
无主程序员:n个成员的项目小组,相互之间都可以沟通。沟通路径:n(n - 1)/2
数据流常见的3中错误
子图与父图保持平衡
面向对象:对象 + 分类 + 继承 + 通过消息的通信
对象:属性(数据) + 方法(操作) + 对象ID
封装:隐藏对象的属性和实现细节,仅对外公开接口(信息隐藏技术)
类(实体类、控制类、边界类):对象的抽象
接口:一种特殊的类,它只有方法定义没有具体的实现
继承与泛化:复用机制
消息和消息通信:对象之间进行通信的一种构造叫做消息。消息是异步通信的
重置/覆盖/重写(override):在子类中重新定义父类中已经定义的方法
重载:一个类可以有多个同名而参数类型不同的方法
动态绑定:根据接收对象的具体情况将请求的操作与实现的方法进行连接(运行时绑定)
多态:不同对象收到同样的消息产生不同的结果。
单一职责原则:设计目的单一的类
开放-封闭原则:对扩展开发,对修改封闭
李氏(Liskov)替换原则:子类可以替换父类
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程
接口隔离原则:使用多个专门的接口比使用单一的总接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解
如图:书籍列表,书籍,借阅记录,借阅记录列表对应的就是类名或对象名。
新增,修改,查询…是方法名。
书名,类别,作者…是属性名。
多重度
1:表示一个集合中的一个对象对应另一个集合中1个对象。
0…:表示一个集合中的一个对象对应另一个集合中的0个或多个对象。(可以不对应)
1…:表示一个集合中的一个对象对应另一个集合中的一个或多个对象。(至少对应一个)
*:表示一个集合中的一个对象对应另一个集合中的多个对象。
顺序图最大的特点:清楚表现出 处理事务时,时间顺序的情况。
描述的是状态的变迁(状态触发的条件)
通信图又被称为协作图,顺序图的另一种表达方式。(和顺序图统称为交互图)
依赖关系:一个事物发生变化影响另一个事物
泛化关系:特殊/一般关系
关联关系:描述了一组链,链是对象之间的连接
聚合关系:整体与部分生命周期不同(有你有我,没你也有我)
组合关系:整体与部分生命周期相同(有你有我,没你无我)
实现关系:接口与类之间的关系
设计模式名称 | 简要说明 | 速记关键字 |
---|---|---|
Factory Method 工厂方法模式 |
定义一个创建对象的接口,但由子类决定需要实例化哪一个类 工厂方法使得子类实例化的过程推迟 |
动态生产对象 |
Abstract Factory 抽象工厂模式 |
提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定他们具体的类 | 生产成系列对象 |
Builder 构建器模式 |
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示 | 复杂对象构造 |
Prototype 原型模式 |
用原型示例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象 | 克隆对象 |
Singleton 单例模式 |
保证一个类只有一个实例,并提供一个访问它的全局访问点 | 单实例 |
设计模式名称 | 简要说明 | 速记关键字 |
---|---|---|
Adapter 适配器模式 |
将一个类的接口转换成用户希望得到的另一种接口。 它使原本不相容的接口得以协同工作 |
转换接口 |
Bridge 桥接模式 |
将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化 | 继承树拆分 |
Composite 组合模式 |
将对象组合成树型结构表示“整体—部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性 | 树形目录结构 |
Decorator 装饰模式 |
动态地给一个对象添加一些额外的职责。 它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活 |
动态附加职责 |
Facade 外观模式 |
定义一个高层接口,为子系统中的一组接口提供一个一致的外观,从而简化了该系统的使用 | 对外统一接口 |
Flyweight 享元模式 |
提供支持大量细粒度对象共享的有效方法 | 汉字编码 |
Proxy 代理模式 |
为其他对象提供一种代理以控制这个对象的访问 | 快捷方式 |
设计模式名称 | 简要说明 | 速记关键字 |
---|---|---|
Chain of Responsibility 职责链模式 |
通过多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。 将接收对象链接起来,在链中转递请求,直到有一个对象处理这个请求 |
传递职责 |
Command 命令模式 |
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作 | 日志记录 可撤销 |
Interpreter 解释器模式 |
给定一种语言,定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子 | 虚拟机的机制 |
Iterator 迭代器模式 |
提供一种方法来顺序访问一个聚合对象中个各个元素,而不需要暴露该对象的内部表示 | 数据集 |
Mediator 中介者模式 |
用一个中介对象来封装一系列的对象交互。 它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互 |
不直接引用 |
Memento 备忘录模式 |
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态 | 游戏存档 |
Observer 观察者模式 |
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 | 联动 |
State 状态模式 |
允许一个对象在其内部状态改变时改变它的行为 | 状态变成类 |
Strategy 策略模式 |
定义一系列算法,把它们一个个封装起来,并且使它们之间可互相替换,从而让算法可以独立于使用它的用户而变化 | 多方案切换 |
Template Method 模板方法模式 |
定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤 | 框架 |
Visitor 访问者模式 |
表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用域这些元素的新操作 | 数据与操作分离开 |
性能类别 | 具体项目 | 顺序存储 | 链式存储 |
---|---|---|---|
空间性能 | 存储密度 | = 1 更优 |
<1 |
容量分配 | 事先确定 否则造成空间浪费 |
动态改变 更优 |
|
时间性能 | 查找运算 | O(n/2) | O(n/2) |
读运算 | O(1) 更优 |
O([n+1]/2) 最好情况为1 最坏情况为n |
|
插入运算 | O(n/2) 最好情况为0 最坏情况为n |
O(1) 更优 |
|
删除运算 | O([n-1]/2) | O(1) 更优 |
双亲、孩子和兄弟:
结点的度:
叶子结点:
内部结点:
结点的层次:
树的高度:
**性质1:**二叉树的第i层上至多有2^(i-1)(i≥1)个节点
**性质2:**深度为h的二叉树中至多含有2^h-1个节点
**性质3:**若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1
**性质4:**具有n个节点的满二叉树深为log2n+1。(log向下取整)
**性质5:**若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:
当i=1时,该节点为根,它无双亲节点
当i>1时,该节点的双亲节点的编号为i/2
若2i≤n,则有编号为2i的左节点,否则没有左节点
若2i+1≤n,则有编号为2i+1的右节点,否则没有右节点
满二叉树:任何结点,或者是树叶,或者恰有两棵非空子树
完全二叉树:最多只有最小面的两层结点的度可以小于2,并且最下面一层的结点全都集中在该层左侧的若干位置
平衡二叉树:树中任一结点的左右子树高度之差不超过1
查找二叉树:又称之为排序二叉树。任一结点的权值,大于其左孩子结点,小于其右孩子结点。(中序遍历结果有序)
线索二叉树:在每个结点中增加两个指针域来存放遍历时得到的前驱和后继信息
最优二叉树:又称哈佛曼树,它是一类带权路径长度最短的树
路径是从树中一个结点到另一个结点之间的通路,路径上的分支数目称为路径长度
树的路径长度是从树根到每一个叶子之间的路径长度之和。
结点的带权路径长度为从该结点到树根之间的路径长度与该结点权值的乘积
树的带权路径长度为树中所有叶子结点的带权路径长度之和
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
层次遍历:按层次顺序进行遍历
完全图
强连通图
深度优先遍历
广度优先遍历和深度优先搜索遍历图的运算时间复杂度相同,其不同之处仅仅在于对顶点的访问次序不同
可行性(有效性):算法的每个步骤都能有效执行并能在执行有限次后得到确定的结果。
有穷性:执行有穷步骤之后结束,且每一步都可在有穷时间内完成
确定性:算法中每一条指令都必须有确切的含义,不能含糊不清
输入(≥0):算法可以没有输入
输出(≥1):算法至少有一个输入
算法名称 | 关键点 | 特征 | 典型问题 |
---|---|---|---|
分治法 | 递归技术 | 把一个问题拆分成多个小规模的相同子问题,一般可以递归解决 | 归并排序、快速排序、二分搜索 |
动态规划法 | 最优子结构和递归式 | 划分子问题(最优子结构),并把子问题结果使用数组存储,利用查询子问题结果构造最终问题结果 | 矩阵乘法、背包问题、LCS最长公共子序列 |
贪心法 | 一般用于求满意解,特殊情况可求最优解(部分背包) | 局部最优,但整体不见得最优。 每一步有明确的,既定的策略 |
背包问题(装箱)、多机调度 找零钱问题 |
回溯法 | 探索和回退 | 系统的搜索一个问题的所有解或任一解 有试探和回退的过程 |
N皇后问题、迷宫 背包问题 |
O(1) < O(log2n) < O(n) < O(nlog2n) < O(n^2) < O(n^3) < O(2^n)
编译方式下机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程,因此执行时效率较高(目标程序,移植性好)
解释方式下解释程序程序和源程序(或某种等价表示)要参与到程序的运行过程中,边解释边执行,执行效率较低(无目标程序产生,依赖机器)
一般的程序设计语言属于上下文无关文法
正规文法,表示的语言集合是正规集,正规集的规律可以用正规式表示。
正规式 | 正规集 | 举例 |
---|---|---|
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,bba,…} |
a(a|b)* | 以a为首字符的a、b字符串的集合 | {a,aa,ab,aab,aba,aaab,aaba,…} |
(a|b)*abb | 以abb结尾的a、b字符串的集合 | {abb,aabb,babb,abaabb,abaabb,…} |
传递方式 | 主要特点 |
---|---|
传值调用 | 形参取的是实参的值 形参的改变不会导致调用点所传的实参的值发生改变 |
传址调用 引用调用 |
形参取的是实参的地址 即相当于实参存储单元的地址引用 因此其值的改变同时改变了实参的值 |
Fortran语言:第一个高级程序设计语言,科学计算,执行效率高
Pascal语言:结构化程序设计语言,表达能力强,Delphi
C语言:通用、结构化程序设计语言,指针操作能力强,高效
Lisp语言:函数式程序语言,符号处理,人工智能
C++语言:C语言基础上增加了类机制,面向对象,高效,与C兼容
Java语言:面向对象,中间代码,跨平台,通用的程序设计语言
Python:面向对象,解释型程序设计语言,胶水语言,通用的脚本语言
PHP语言:服务器端脚本语言,制作动态网页
Ruby:简单快捷,面向对象,脚本语言
Delphi:快速应用程序开发工具,可视化编程环境
COBOL:数据处理领域最为广泛的程序设计语言,高级编程语言
XML:可扩展标记语言,标准通用标记语言的子集
PROLOG:逻辑式语言,间接性,表达能力强,建造专家系统,数据库,自然语言理解,智能知识库
注意:C/C++常被用于操作系统开发;脚本语言是解释型语言(无目标程序)
法律法规名 | 保护对象及范围 | 注意事项 |
---|---|---|
著作权法 | 著作权文学、绘画、摄影等作品 | 1、不需要申请,作品完成即开始保护 2、绘画或摄影作品原件出售(赠予)著作权还是原作者 原件拥有者有:所有权、展览权 |
软件著作法 计算机软件保护条例 |
软件著作权 软件作品 |
1、不需要申请,作品完成即开始保护 2、登记制度便于举证 |
专利法 | 专利权 | 需要申请,专利权有效期是从申请日开始计算 |
商标法 | 商标权 | 需要申请,核准之日起商标受保护 |
反不正当竞争法 | 商业秘密权 | 1、商业秘密包括技术与经营两个方面 2、必须有保密措施才能认定商业秘密 |
中国公民,法人或者其他组织的作品,无论是否发表,都享有著作权。(此处发表的定义为公之于众,包括了网络形式的传播)
开发软件所用的思想,处理过程,操作方法或数学概念不受保护。(可以选择申请专利)
著作权法不适用于一下情形:
1)法律,法规,国际机关的决议,决定,命令和其他具有立法,行政,司法性质的文件,及其官方正式译文。
2)时事新闻
3)历法,通用数表,通用表格或公式
国际标准:
国家标准(⭐):GB-中国,ANSI-美国,BS英国,JIS-日本
区域标准
行业标准(⭐):GJB-中国军用标准,MIT-S-美国军用标准,IEEE-美国电气电子工程师协会
地方标准(⭐):国家地方一级行政机构制定的标准
企业标准(⭐):企业内部指定的标准,也叫企业规范
项目规范
标准的编号
我国国家标准代号:强制性标准代号为GB,推荐性标准代号为GB/T,指导性标准代号为GB/Z,实物标准代号为GSB
行业标准代号:由汉语拼音大写字母组成(如电子行业为SJ)
地方标准代号:由DB加上省级行政区划代码的前两位
企业标准代号:由Q加上企业代号组成