文章目录
设计模式
- 设计模式分类:
创建型 | 结构型 | 行为型 | |
---|---|---|---|
类 | Factory Method | Adapter(类) | Interpreter、 Template Method |
对象 | Abstract Factory、 Builder、 Prototype、 Singleton | Adapter(对象)、 Bridge、 Composite、 Decorator、 Façade、 Flyweight、 Proxy | Chain of Responsibility、 Command、 Iterator、 Mediator、 Memento、 Observer、 State、 Strategy、 Visitor |
- 创建型:
说明 | |
---|---|
抽象工厂(Abstract Factory) | 提供一个创建一些列相关或相互依赖对象的接口,而无需指定他们具体的类。 |
建造模式(Builder) | 将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。 |
工厂方法(Factory Method) | 定义一个用于创建对象的接口,让子类决定实例化哪一个类。 |
原型(Prototype) | 用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 |
单例(Singleton) | 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 |
- 结构型:
说明 | |
---|---|
适配器(Adapter) | 将一个类的接口转换成客户希望的另一个接口。 |
桥接(Bridge) | 将抽象部分与其实现部分分离,使他们都可以独立的变化。 |
组合(Composite) | 将对象组合成树型结构以表示“部分-整体”的层次结构。 |
装饰(Decorator) | 动态的给一个对象添加一些额外的职责(功能)。 |
外观(Façade) | 为子系统中的一组接口提供一个一致的界面,外观模型定义了一个高层接口,这个接口使得这一子系统更加容易使用。 |
享元(Flyweight) | 运用共享技术有效地支持大量细粒度的对象。 |
代理(Proxy) | 为其他对象提供一种代理以控制对这个对象的访问。 |
- 行为型:
说明 | |
---|---|
责任链(Chain of Responsibility) | 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 |
命令(Command) | 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 |
解释器(Interpreter) | 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解析器使用该表示来解释语言中的句子。 |
迭代器(Iterator) | 提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。 |
中介者(Mediator) | 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互访问,从而实现耦合松散,而且可以独立的改变它们之间的交互。 |
备忘录(Memento) | 在不破坏封装性的前提下捕获哟个对象的内部状态,并在对象之外保存这个状态。 |
观察者(Observer) | 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 |
状态(State) | 允许一个对象在其内部状态改变时改变它的行为。 |
策略(Strategy) | 定义一些列的算法,把它们一个个封装起来,并且使它们可以相互转换。 |
模板方法(Template Method) | 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 |
访问者(Visitor) | 表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。 |
内聚/耦合度排序
- 内聚度由高到低:
内聚类型 | 描述 |
---|---|
功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 处理元素相关,而且必须顺序执行 |
通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
瞬时内聚 | 所包含的任务必须在同一时间间隔内执行(如初始化模块) |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚 | 完成一组没有关系或松散关系的任务 |
- 耦合度由低到高:
耦合类型 | 描述 |
---|---|
非直接耦合 | 没有直接联系,互相不依赖对方 |
数据耦合 | 借助参数表传递简单数据 |
标记耦合 | 一个数据结构的一部分借助于模块接口被传递 |
控制耦合 | 模块间传递的信息中包含用于控制模块内部逻辑的信息 |
外部耦合 | 与软件以外的环境有关 |
公共耦合 | 多个模块引用同一个全局数据区 |
内容耦合 | 一个模块访问另一个模块的内部数据; 一个模块不能通过正常入口转到另一模块的内部; 两个模块有一部分程序代码重叠; 一个模块有多个入口 |
白盒测试
- 白盒测试中的逻辑覆盖:
- 语句覆盖:被测试程序的每个语句至少执行一次。是一种很弱的覆盖标准。
- 判定覆盖:不仅每个语句至少执行一次,而且每个判定的每种可能的结果都至少执行一次。
- 条件覆盖:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。
- 判定/条件覆盖:同时满足判定覆盖和条件覆盖。
- 条件组合覆盖:使得每个判定表达式中条件结果的所有可能组合至少出现一次。
- 路径覆盖:使得程序中每条可能执行到的路径都至少经过一次。
ISO/IEC9126软件质量模型
特性 | 内容 | 子特性 |
---|---|---|
功能性 | 指与软件所具有的各项功能及其规定性质有关的一组属性。 | 适合性、准确性、互操作性、依从性、安全性 |
可靠性 | 指在规定运行条件下和规定时间周期内,与软件维护其性能级别的能力有关的一组属性。 | 成熟性、容错性、可恢复性 |
可用性 | 指根据规定用户或隐含用户的评估所作出的与使用软件所需要的努力程度有关的一组属性。 | 可理解性、易学性、可操作性 |
效率 | 指在规定条件下,与软件性能级别和所用资源总量之间的关系的一组属性。 | 时间特性、资源特性 |
可维护性 | 指与软件进行修改的难易程度有关的一组属性。 | 可分析性、可改变性、稳定性、可测试性 |
可移植性 | 指与一个软件从一个环境转移到另一个环境运行的能力有关的一组属性。 | 适应性、可安装性、一致性、可替换性 |
UML
名称 | 内容 |
---|---|
类图 | 描述一组类、接口、协作和它们之间的关系。对系统静态结构的描述。 |
对象图 | 描述一组对象及它们之间的关系。 |
构件图 | 描述一个封装的类和它们的接口、端口,以及有内嵌的构件和连接件构成的内部结构。 |
用例图 | 描述一组用例、参与者以及它们之间的关系。定义的是系统的功能需求。 |
顺序图(序列图) | 强调消息的时间次序的交互图。反映对象之间已发送消息的先后次序。 |
通信图(协作图) | 强调收发消息的对象或参与者的结构组织。强调上下文相关。 |
状态图 | 描述一个状态机,由状态、转移、事件和活动组成。强调事件导致的对象行为,有助于对反应式系统建模。 |
活动图 | 将进程或其他计算结构展示为计算内部一步步的控制流和数据流。对系统的功能建模和业务流程建模特别重要,并强调对象间的控制流程。 |
部署图 | 描述对运行时的处理结点及在其中生存的构件的配置。显示系统中软/硬件的物理架构。 |
包图 | 描述由模型本身分解而成的组织单元,以及他们之间的依赖关系。 |
析构函数和构造函数
构造函数:函数名与类名相同;没有返回值;被声明定义为共有函数;建立对象时由系统自动调用。
析构函数:没有任何参数,不能被重载,但可以是虚函数,一个类只有一个析构函数;没有返回值;函数名与类名相同,但需要在前面加~符号;一般由用户自己定义,在对象消失时由系统自动调用,若没有定义,系统生成默认析构函数。
极限编程XP
内容 | |
---|---|
四大价值观 | 沟通、简单、反馈、勇气 |
五大原则 | 快速反馈、简单性假设、逐步修改、提倡更改、优质工作 |
十二个最佳实践 | 计划游戏、小型发布、隐喻、简单设计、测试先行、重构、集体代码所有制、结对编程、每周工作40小时、持续集成、编码标准、现场客户 |
域名解析流程
- 客户机提出域名解析请求,并将该请求发送给本地的域名服务器;
- 当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地的域名服务器就直接把查询的结果返回;
- 如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址;
- 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关的下级的域名服务器的地址;
- 重复第四步,直到找到正确的记录;
- 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
数据字典
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。数据字典的条目有:数据项、数据流、数据存储、基本加工等。
对象的状态包括这个对象的所有属性(通常是静态的)以及每个属性当前的值(通常是动态的);行为是对象根据它的状态改变和消息传递所采取的行动和所作出的反应;对象的行为代表了其外部可见的活动;操作代表了一个类提供给它的对象的一种服务。
数字签名
数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。若相同,则说明收到的信息完整;否则信息被修改过。因此数字签名能够验证信息的完整性。
数字签名是个加密的过程,数字签名验证是个解密的过程。保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。
函数依赖及蕴含
TCP和UDP区别
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
- TCP提供可靠的服务(通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达);UDP尽最大努力交付。
- TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
- 每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信。
- TCP首部开销20字节;UDP的首部开销8字节。
- TCP的逻辑通信信道是全双工的可靠信道;UDP则是不可靠信道,整体来看UDP开销较小。
分布式数据库(分片/复制/位置/逻辑透明等基本概念)
基本概念 | |
---|---|
分片透明 | 是指用户或应用程序不需要知道逻辑上访问的表具体是如何分块存储的。 |
复制透明 | 采用复制技术的分布方法,用户不需知道数据是复制到哪个节点,如何复制。 |
位置透明 | 是指用户无需知道数据存放的物理位置。 |
逻辑透明 | 是指局部数据模型透明,即用户或应用程序无需知道局部使用的是哪种数据模型。 |
绑定
绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。静态绑定在编译时进行的;动态绑定在运行时进行的。
I/O设备管理
I/O设备管理软件一般分为4层:中断处理程序、设备驱动程序、与设备无关的系统软件、用户级软件。
算法策略
算法策略 | 设计思想 | 经典实例 |
---|---|---|
分治法 | 将一个难以直接解决的大问题分解成一些规模较小的相同问题,以便各个击破,分而治之。 | 归并排序、最大子段和问题 |
动态规划 | 用到了分治法思想,不同的是存储了子问题的解而避免计算重复的子问题。常用于求最优解。 | 0-1背包问题、最长公共子序列(LCS) |
贪心法 | 与动态规划法类似,常用于求最优解。不同的是,贪心法是局部最优。 | 活动选择问题、背包问题 |
回溯法 | 从跟节点出发,以深度优先的方式搜索整个解空间。从一条路往前走,能进则进,不进则退,换条路走。 | 0-1背包问题、n皇后问题 |
分治法和动态规划都用到回溯,回溯一般用到递归。贪心法一般不考虑整体情况,所以不会用到回溯。
加密技术
对称加密技术
加密算法 | 内容 |
---|---|
DES | 运算速度快,密钥容易产生,适用于当前大多计算机 |
3DES | 将密钥长度加倍 |
RC-5 | RSA数据安全公司的很多产品都使用RC-5,适合明文加密 |
IDEA | 基于DES,类似于DES,IDEA也是一种数据块加密算法 |
AES | 基于排列和置换运算;AES是一个迭代的,对称密钥分组的密码 |
非对称加密技术
RSA
优点:保密性比较好;消除了最终用户交换密钥的需要;只适用于对少量数据进行加密
缺点:加密和解密花费的时间长、速度慢、不适合于对文件加密
认证技术
PKI是利用公钥理论和技术建立的提供安全服务的基础设施。
PKI的基础技术包括:加密、数字签名、数据完整性机制、数字信封、双重数字签名等。
信息摘要算法
MD5:信息摘要算法。专门用于加密处理的并广泛使用的Hash函数。
SHA-1:信息摘要算法。MD5和SHA-1均不能用来加密数据
共享锁(S)和排他锁(X)
共享锁(S锁/读锁):若事务T对数据对象A加上S锁,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
排他锁(X锁/写锁):若事务T对数据对象A加上X锁,其他事务不能再对Ajia任何锁,直到T释放A上的S锁。