




| 分区策略 | 分区方式 | 说明 |
|---|---|---|
| 范围分区(Range) | 按数据范围值来做分区 | 按用户编号分区,0-10 存在分区 A,10-100 存在分区 B |
| 散列分区(Hash) | 通过对 key 进行 hash 运算分区 | 可以把数据分配到不同分区,这类似于取余操作,把余数相同的放在一个分区上 |
| 列表分区(List) | 根据某字段的某个具体指进行分区 | 长沙的用户分成一个分区,北京的一个分区 |
| 对比维度 | 关系数据库 | NoSQL |
|---|---|---|
| 应用领域 | 面向通用领域 | 特定应用领域 |
| 数据容量 | 有限数据 | 海量数据 |
| 数据类型 | 结构化数据(二维表) | 非结构化数据 |
| 并发控制 | 支持并发,但性能低 | 高并发 |
| 事务支持 | 高事务性 | 弱事务性 |
| 扩展方式 | 向上扩展 | 向外扩展 |
| 分类 | 典型应用场景 | 数据模型 | 优点 | 缺点 | 举例 |
|---|---|---|---|---|---|
| 键值(Key-Value) | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等。 | Key 指向 Value 的键值对,通常用 hashtable 实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或二进制数据 | Redis,TokyoCabinet,Tyrant,Voldemort,OracleBDB |
| 列存储数据库 | 分布式的文件系统 | 将同一列数据存在一起 | 扩展性强,更容易进行分布式扩展 | 功能相对局限 | Riak |
| 文档型数据库 | Web 应用(与 Key-Value 类似,Value 是结构化的,数据库能了解 Value 的内容) | Key-Value 对,Value 为结构化数据 | 数据结构要求不严格,表结构可变,无需预定义 | 查询性能不高,缺乏统一的查询语法 | CouchDB,MongoDB |
| 图形数据库(Graph) | 社交网络,推荐系统等,专注于构建关系图谱 | 图结构,利用最短路径寻址、N度关系查找等算法 | 适合复杂关系分析 | 需对整个图计算,分布式集群方案较难实现 | Neo4J,InfoGrid |

| 维度 | 涉及技术内容 |
|---|---|
| 从架构来看 | MVC,MVP,MVVM,REST,Webservice,微服务 |
| 从并发分流来看 | 集群(负载均衡)、CDN |
| 从缓存来看 | MemCache,Redis,Squid |
| 从数据来看 | 主从库(主从复制),内存数据库,反规范化技术,NoSQL,分区(分表)技术,视图与物化视图 |
| 从持久化来看 | Hibernate,Mybatis |
| 从分布存储来看 | Hadoop,FastDFS,区块链 |
| 从数据编码来看 | XML,JSON |
| 从Web应用服务器来看 | Apache,WebSphere,WebLogic,Tomcat,JBOSS,IIS |
| 从安全性来看 | SQL 注入攻击 |
| 其他 | 静态化,有状态与无状态,响应式 Web 设计,中台 |

| 工作特性 | MemCache | Redis |
|---|---|---|
| 数据类型 | 简单 key/value 结构 | 丰富的数据结构(如String,Hash,List,Set,SortedSet 等) |
| 持久性 | 不支持 | 支持(可通过 RDB 快照或 AOF 日志持久化) |
| 分布式存储 | 客户端哈希分片/一致性哈希 | 多种方式(主从复制、Sentinel 高可用、Cluster 集群模式) |
| 多线程支持 | 支持 | 不支持(Redis6.0 开始支持多线程 I/O) |
| 内存管理 | 私有内存池/内存池 | 无 |
| 事务支持 | 不支持 | 有限支持(通过 MULTI/EXEC 命令实现简单事务) |
| 数据容灾 | 不支持,不能做数据恢复 | 支持(可通过持久化文件恢复数据) |
| 集群切片方式 | 核心特点 |
|---|---|
| 客户端分片 | 在客户端通过 key 的 hash 值对应到不同的服务器。 |
| 中间件实现分片 | 在应用软件和 Redis 中间,例如:Twemproxy、Codis 等,由中间件实现服务到后台 Redis 节点的路由分派。 |
| 客户端服务端协作分片 | Redis Cluster 模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务 slot 上。不同的 slot 对应到不同服务器。 |
| 分片方案 | 分片方式 | 说明 |
|---|---|---|
| 范围分片 | 按数据范围值分片 | 例:按用户编号分片,0-999999 映射到实例 A;1000000-19999999 映射到实例 B |
| 哈希分片 | 对 key 进行 hash 运算分片 | 类似取余操作,余数相同的数据放在同一个实例上 |
| 一致性哈希分片 | 哈希分片的改进版 | 解决节点重新分配时导致的缓存命中率下降问题 |






G(x)=x^4+x+1,在原始信息位 10110 后添加 4 个 0 作为被除数 101100000,由多项式得到除数 10011,将被除数和除数进行模 2 运算(异或运算),不要商,只要 4 位的余数 1111,如果余数不足 4 位,左边用 0 补齐,然后将余数添加至原始信息位之后 101101111,发送给接收方,接收方用多项式 G(x) 来除,得到余数为 0,则信息无误。| 指令系统类型 | 指令 | 寻址方式 | 实现方式 | 其他 |
|---|---|---|---|---|
| CISC | 数量多,使用频率差别大,可变长格式 | 支持多种寻址方式 | 微程序控制技术(微码) | 研制周期长 |
| RISC | 数量少,使用频率接近,订长格式,大部分为单周期指令,操作寄存器,只有 Load/Store 操作内存 | 支持寻址方式少 | 增加了通用寄存器,硬布线逻辑控制为主,适合采用流水线 | 优化编译,有效支持高级语言 |


(90%*1+10%*1000)ns,命中率随着 Cache 的容量增加而逐渐增大,趋近于 100%n*(R-1),不发生死锁的最小资源数为 n*(R-1)+1,表示资源达到这么多的时候,无论如何不会发生死锁4GB,页大小为 4KB,则内存可划分为 2^20 个页,页号中存储的就是每个页的编号,2^20 个页就需要 20 位才能表示出所有的页,则剩余的 32-20=12 位用来表示业内地址(物理偏移地址)。






S1∪S2,结果是两张表中的所有记录的合并,表结构必须相同,相同记录只显示一次S1∩S2,结果是两张表中相同的记录S1-S2,结果是 S1 表中存在而 S2 中不存在的记录,即从 S1 表中去除两表中相同的记录S1*S2,产生的结果包含 S1 和 S2 的所有属性列,并且 S1 中每条记录依次和 S2 中每条记录组合成一条记录,最终属性列为 S1 和 S2 的所有属性列(包括重复列),记录数为 S1 和 S2 的记录数的乘积π,实际是按条件选择关系模式中的某列,列亦可以用数字表示σ,实际是按条件选择某种关系模式中的某条记录R∞S,结果显示全部的属性列,但是相同属性列只显示一次,显示两个关系模式中属性相同且值相同的记录R(A, B, C, D) 和模式 S(C, D, E),与 等价的关系代数是 R.D>S.E:
{t|xxx} 表示最终选择的 R 中的元组,条件是只要存在 u 满足 t 的第 3 列元素的值小于 s 的第 2 列的值,则把 t 选择出来X,能唯一确定 Y,或者说 Y 依赖 X,表示为 X→YA 可以确定 C,(A,B) 也可以确定 C,(A,B) 中的一部分(即 A)可以确定 C,称为部分函数依赖A 和 B 不等价时,A 可以确定 B,B 可以确定 C,则 A 可以确定 C
R<U, F>,U 是关系模式 R 的属性全集,F是关系模式 R 的一个函数依赖集,对于 R<U, F> 来说有以下:X⊆Y,则 X→Y 为 F 所逻辑蕴含X→Y 为 F 所逻辑蕴含,且 Z⊆U,则 XZ→YZ 为 F 所逻辑蕴含,两边同乘X→Y 和 Y→Z 为 F 所逻辑蕴含,则 X→Z 为 F 所逻辑蕴含X→Y,X→Z,则 X→YZ 为 F 所逻辑蕴含X→Y,Z⊆Y,则 X→Z 为 F 所蕴含,确定范围缩小X→Y,WY→Z,则 XW→Z 为 F 所蕴含(S,T) 和 (S,J),依赖集为 (SJ→T, T→J)。对于 候选键 (S,T),每个依赖左侧的决定因素都包含一个主属性。而对于候选键 (S,J),对于依赖 T→J,T 不是候选键,即 T→J 的决定因素不包含任何候选键,不满足 BCNF。R(A,B,C),依赖集 F(A→B,B→C,A→C),将其分解为两个关系模式 R1(A,B) 和 R2(B,C),此时 R1 中保持依赖 A→B,R2 保持依赖 B→C,说明分解后的 R1 和 R2 是保持函数依赖的分解,因为 A→C 这个函数依赖实际是一个余依赖,可以由前两个依赖传递得到,因此不需要管。F+ 是代表 F 函数依赖集的闭包,通俗一点,就是从函数依赖集 F 能推导出来的依赖关系。X 通过函数依赖 F 所能推导出的属性为 Y。如果 Y 包含关系模式 R 的所有属性,则 X 就是候选键(检查属性集的闭包是否包含所有属性),推导方法:先令 Y 等于 X,然后对每个依赖 A→B,如果 A 中的属性都在 Y 中,则把 B 加入 Y(不包含重复属性),重复多轮 F,直到 Y 不再增加


p={R1,R2},F 为 R 所满足的函数依赖集,分解 p 具有无损分解的充要条件是:R1∩R2→(R1-R2) 或者 R1∩R2→(R2-R1)
| 故障关系 | 故障原因 | 解决办法 |
|---|---|---|
| 事务本身的可预期故障 | 本身逻辑 | 在程序中预先设置 Rollback 语句 |
| 事务本身的不可预期故障 | 算术溢出、违反存储保护 | 由DBMS的恢复子系统通过日志,撤消事务对数据库的修改,回退到事务初始状态 |
| 系统故障 | 系统停止运转 | 通常使用检查点法 |
| 介质故障 | 外存被破坏 | 一般使用日志重做业务 |





| 层 | 功能 | 单位 | 协议 | 设备 |
|---|---|---|---|---|
| 物理层 | 在链路上透明地传输位。需要完成的工作包括线路配置、确定数据传输模式、确定信号形式、对信号进行编码、连接传输介质。为此定义了建立、维护和拆除物理链路所具备的机械特性、电气特性、功能特性以及规程特性 | 比特 | EIA/TIA RS-232、RS-449、V.35、RJ-45、FDDI | 中继器、集线器 |
| 数据链路层 | 把不可靠的信道变为可靠的信道。为此将比特组成帧,在链路上提供点到点的帧传输,并进行差错控制、流量控制等 | 帧 | SDLC、HDLC、LAPB、PPP、STP、帧中继等、IEEE802、ATM | 交换机、网桥 |
| 网络层 | 在源节点-目的节点之间进行路由选择、拥塞控制、顺序控制、传送包,保证报文的正确性。网络层控制通信子网的运行,因此又称为通信子网层 | IP分组 | IP、ICMP、IGMP、ARP、RARP | 路由器 |
| 传输层 | 提供端到端(端口)间可靠的、透明的数据传输,保证报文顺序的正确性、数据的完整性 | 报文段 | TCP、UDP | 网关 |
| 会话层 | 建立通信进程的逻辑名字与物理名字之间的联系,提供进程之间的建立、管理和终止会话的方法,处理同步与恢复等 | RPC、SQL、NFS | 网关 | |
| 表示层 | 实现数据转换(包括格式转换、压缩、加密等),提供标准的应用接口、公用的通信服务、公共数据表示方法) | JPEG、ASCII、GIF、MPEG、DES | 网关 | |
| 应用层 | 对用户不透明的提供各种服务,如 Email | 数据 | Telnet、FTP、HTTP、SMTP、POP3、DNS、DHCP | 网关 |
| 协议 | 以太网 | 速率 | 介质 |
|---|---|---|---|
| IEEE 802.3 | 标准以太网 | 10Mb/s | 传输介质为细同轴电缆 |
| IEEE 802.3u | 快速以太网 | 100Mb/s | 双绞线 |
| IEEE 802.3z | 千兆以太网 | 1000Mb/s | 光纤或双绞线 |
| IEEE 802.3ae | 万兆以太网 | 10Gb/s | 光纤 |



| 类别 | IP 地址范围 | 网络号 | 网络数 |
|---|---|---|---|
| A | 10.0.0.0~10.255.255.255 | 10 | 1 |
| B | 172.16.0.0~172.31.255.255 | 172.16~172.31 | 16 |
| C | 192.168.0.0~192.168.255.255 | 192.168.0~192.168.255 | 256 |
| 网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
|---|---|---|---|---|
| 0 | 0 | 可以 | 可以 | 在本网络上的本主机 |
| 全 1 | 全 1 | 不可 | 可以 | 在本网络上广播 |
| Net-ID | 全 1 | 不可 | 可以 | 对 Net-ID 上的所有主机进行广播 |
| 127 | 非全 0 或全 1 的数 | 可以 | 可以 | 运作本地软件回环测试使用 |
| 169.254 | 非全 0 或全 1 的数 | 可以 | 可以 | WIndows 主机 DHCP 服务器故障分配 |
















K=<Ke, Kd>C=E(M, Ke)M=D(C, Kd)=D(E(M, Ke), Kd)

arp-gate-way-ip gate-way-mac 固化 ARP 表,阻止 ARP 欺骗/etc/hosts.equiv、SHOME/.rhosts 文件,修改 /etc/inetd.conf 文件,使得 RPC 机制无法应用。另外,还可以通过设置防火墙过滤来自外部而信源地址却是内部 IP 的报文。

| 能力等级 | 特点 | 关键过程区域 |
|---|---|---|
| 初始级 | 软件过程的特点是杂乱无章,甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖于个人的努力和英雄式核心人物的作用 | 无 |
| 可重复级 | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功 | 6 个:软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理 |
| 已定义级 | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后的标准软件过程来开发和维护软件 | 7 个:同行评审、组间协调、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点 |
| 已管理级 | 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制 | 软件质量管理和定量过程管理 |
| 优化级 | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈过程能不断持续地改进 | 过程更改管理、技术改革管理和缺陷预防 |
| 能力等级 | 特点 | 关键过程区域 |
|---|---|---|
| 初始级 | 过程不可预测且缺乏控制 | 无 |
| 已管理级 | 过程为项目服务 | 7 个:需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证 |
| 已定义级 | 过程为组织服务 | 12 个:需求开发、技术解决方案、产品集成、验证、确认组织级过程焦点、组织级过程定义、组织级培训、项目集成管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
| 定量管理 | 过程已度量和控制 | 2 个:组织过程性能、定量项目管理 |
| 优化级 | 集中于过程改进和控制 | 2 个:组织级改革与实施、因果分析和解决方案 |



原型化模型

















| 内聚分类 | 定义 | 记忆关键字 |
|---|---|---|
| 偶然内聚 | 一个模块内的各处理元素之间没有任何联系 | 无直接关系 |
| 逻辑内聚 | 模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪个功能 | 逻辑相似、参数决定 |
| 时间内聚 | 把需要同时执行的动作组合在一起形成的模块 | 同时执行 |
| 过程内聚 | 一个模块完成多个任务,这些任务必须按指定的过程执行 | 指定的过程顺序 |
| 通信内聚 | 模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据 | 相同数据结构、相同输入输出 |
| 顺序内聚 | 一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一个元素功能的输出就是下一个元素的输入 | 顺序执行、输入作为输出 |
| 功能内聚 | 模块内的所有元素共同作用完成一个功能,缺一不可 | 共同作用,缺一不可 |
| 耦合分类 | 定义 | 记忆关键字 |
|---|---|---|
| 无直接耦合 | 两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,不传递任何信息 | 无直接关系,不传递任何信息 |
| 数据耦合 | 两个模块间有调用关系,传递的是简单的数据值,高级语言中的值传递 | 传递数据值调用 |
| 标记耦合 | 两个模块之间传递是数据结构 | 传递数据结构 |
| 控制耦合 | 一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择的执行模块内的某一个功能 | 控制变量,选择执行某一功能 |
| 外部耦合 | 模块间通过软件之外的环境联合(如 IO 将模块耦合到特定的设备。格式。通信协议)时 | 软件外部环境 |
| 公共耦合 | 通过一个公共数据环境相互作用的那些模块间的耦合 | 公共数据结构 |
| 内容耦合 | 当一个模块直接使用另一个模块内数据,或通过非正常入口传入另一个模块内部时 | 模块内部关联 |


18 和大专是无效等价类,但是 C 这个测试用例覆盖的两个无效等价类,因此是不好的测试用例


m,节点数为 n,则此有向图的环路复杂度为 m-n+2m 和 n 代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。
















| 创建型设计模式 | 定义 | 记忆关键词 |
|---|---|---|
| 工厂方法模式 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 | 访问者表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下添加作用于这些元素的新操作 | 结构和操作分离 |












| 功能 | 协议 |
|---|---|
| 发现服务 | UDDI、DISCO |
| 描述服务 | WSDL、XML Schema |
| 消息格式 | SOAP、REST |
| 编码格式 | XML(DOM、SAX) |
| 传输层协议 | HTTP、TCP/IP、SMTP等 |














