本笔记基于考纲核心知识点整理,配合代码示例和记忆口诀,适合冲刺复习。
一、法律法规与标准化
1.1 著作权
| 类别 | 内容 |
|---|---|
| 不受保护 | 政府公文、法律条例、时事新闻 |
| 受保护 | 演讲稿、编写的图书、软件代码 |
| 归属时间 | 软件开发完成之日起自动产生 |
| 保护期限 | 50年(署名权、修改权、完整权永久保护) |
著作权归属规则:
- 谁开发归谁
- 员工利用公司资源开发 → 归公司
- 职务作品无合同 → 归企业法人
- 改编作品 → 著作权归改编人
⚠️ 处理过程(算法逻辑)不属于软件著作权保护对象,只保护代码表达形式。
受时间限制的权利(50年): 发表权、发行权、展览权、复制权
永久保护的权利: 署名权、修改权、保护作品完整权
1.2 其他知识产权
- 商标权:注册完成后才享有;保护对象为软件注册商标
- 专利权:专利注册完成后才享有
二、软件工程
2.1 软件开发模型对比
| 模型 | 适用场景 | 核心特征 |
|---|---|---|
| 瀑布模型 | 需求明确固定 | 阶段严格顺序,不可逆 |
| 增量模型 | 需求部分明确,需快速交付核心 | 分批次交付模块 |
| 原型模型 | 需求模糊,用户难以描述 | 先做原型再开发目标软件 |
| 螺旋模型 | 大型复杂高风险项目 | 每轮增加风险评估环节 |
| 喷泉模型 | 面向对象开发 | 无严格阶段划分,阶段可交叉迭代 |
| V模型 | 可靠性要求高 | 开发与测试一一对应 |
| W模型 | 质量要求高 | 开发与测试同步进行 |
瀑布模型阶段:
需求分析 → 系统设计 → 详细设计 → 编码 → 测试 → 维护
(每个阶段完成后才进入下一阶段)
螺旋模型四象限:
① 制定计划 ② 风险分析
③ 实施工程 ④ 客户评估
2.2 敏捷开发方法对比
| 方法 | 核心理念 | 关键特征 |
|---|---|---|
| XP(极限编程) | 把传统开发做到极致精简 | 结对编程、测试先行、持续集成 |
| SCRUM | 短周期冲刺 | 三会议(站会/计划/回顾),需求按商业价值排序 |
| 水晶开发 | 以人为本 | 最轻量灵活,重团队协作,文档少 |
| FDD | 特性驱动 | 五步:建模→功能清单→规划→设计→实现 |
| ASD | 适应性开发 | 猜测→协作→复盘,三个非线性阶段 |
| DSDM | 动态系统开发 | 八条原则,聚焦业务价值按时交付 |
| 开放源码 | 全球协作 | 高并行排障,代码公开 |
SCRUM 三大会议: 每日站会、迭代计划会、复盘回顾会
2.3 基于 RUP 的软件过程
RUP = Rational Unified Process(统一软件开发过程)
四个阶段:
┌──────────┬──────────┬──────────┬──────────┐
│ 初始阶段 │ 细化阶段 │ 构建阶段 │ 移交阶段 │
│ 项目范围 │ 完善架构 │ 开发实现 │ 测试交付 │
│ 业务模型 │ │ │ 确认 │
└──────────┴──────────┴──────────┴──────────┘
九个核心工作流:
- 6个过程工作流:业务建模、需求、分析与设计、实现、测试、部署
- 3个支持工作流:配置与变更管理、项目管理、环境
开发方式: 以用例驱动 + 以体系结构为中心 + 迭代增量
2.4 软件维护类型
| 类型 | 触发原因 | 示例 |
|---|---|---|
| 改正性维护 | 修复已知 Bug | 修复闪退崩溃 |
| 适应性维护 | 外部环境变化 | 支持鸿蒙系统 |
| 完善性维护 | 新增用户需求 | 支持第三方登录 |
| 预防性维护 | 主动防止未来问题 | 限制登录频率防攻击 |
📊 工作量占比:完善性 > 适应性 > 改正性 > 预防性
2.5 能力成熟度模型(CMMI)
Level 1 初始级 → 全靠人,无流程,英雄救场
Level 2 可重复级 → 有基本流程,旧经验可复用
Level 3 已定义级 → 全组织统一标准化流程
Level 4 已管理级 → 量化管理,数据驱动决策
Level 5 优化级 → 持续改进,主动迭代升级
记忆口诀:初重定管优
2.6 逆向工程
信息抽象层次(从高到低):
| 层次 | 内容 | 类比 |
|---|---|---|
| 领域级 | 业务知识 | 设计思想 |
| 功能级 | 程序段功能 | 功能模块 |
| 结构级 | 结构图、调用图 | 系统框架 |
| 实现级 | 语法树、符号表、具体代码 | 源代码 |
- 重构:在同一抽象层级转化描述形式
- 设计恢复:从已有程序抽象出设计信息
- 再工程:基于逆向成果产生新版本
- 使用搜索和变换可导出:实现级 和 结构级
2.7 面向服务架构(SOA)
SOA 四大核心技术:
WSDL → 服务描述(这个服务能干什么,接口文档)
Web Service Description Language
SOAP → 服务通信(怎么打包发请求,XML信封)
Simple Object Access Protocol
UDDI → 服务注册与发现(去哪找这个服务)
Universal Description, Discovery and Integration
BPEL → 服务编排(把多个服务串成一个业务流程)
Business Process Execution Language
类比记忆:
先去UDDI黄页找服务 → 看WSDL说明书了解接口 → 用SOAP信封发请求 → BPEL编排整套业务流程
ESB(企业服务总线): 由中间件技术实现、支撑SOA的基础架构,负责服务路由、协议转换、消息转换。
2.8 软件测试与开发阶段对应关系
需求分析 ←→ 验收测试(用户验收)
概要设计 ←→ 系统测试(系统集成)
详细设计 ←→ 集成测试(模块集成)
编码阶段 ←→ 单元测试(依据:详细设计)
2.9 净室软件工程
目标:零缺陷,基于函数理论和抽样理论
核心要素:形式化规约 → 盒结构设计 → 正确性验证 → 增量统计控制 → 统计测试可靠性
防错不改错,适合高可靠系统(航天、医疗)
2.10 构件(Component)
构件特性(重点区别于类/对象):
- 不是实例单元,没有唯一标识
- 没有外部可见状态(可利用容器管理)
- 一个构件可包含多个类元素
- 同一环境中只能有一个拷贝
构件分类方法:
- 关键字分类法:树状层次结构
- 刻面分类法:多维度描述(facet),最灵活
- 超文本组织法:浏览器式搜索
构件三大性质: 独立可部署性、共享性、可组装性
架构失配:
构件失配 → 各种设施、模型不匹配
连接子失配 → 交互协议、数据格式、中间传输不匹配
三、系统分析与设计
3.1 UML 图谱
五大模型与对应图
| 模型 | 对应图 |
|---|---|
| 用例模型 | 用例图 |
| 静态结构模型 | 类图、对象图 |
| 行为动态模型 | 时序图、协作图、状态图、活动图 |
| 构件实现模型 | 构件图、部署图 |
UML 关系速查
关联关系 ─────► 普通认识关系(直线箭头)
依赖关系 - - -► 临时使用关系(虚线箭头)
泛化关系 ───▷ 继承关系(空心三角)
聚合关系 ◇──── 整体包含部分,部分可独立(空菱形)
组合关系 ◆──── 生死绑定,部分不能独立(实菱形)
用例图关系
| 关系 | 说明 | 示例 |
|---|---|---|
| 包含(include) | A 必须包含 B | 登录 include 验证密码 |
| 扩展(extend) | B 可选扩展 A | 登录 被 extend 找回密码 |
| 泛化(generalize) | 继承关系 | 微信支付/支付宝 generalize 统一支付 |
⚠️ 用例参与者之间的关系**只有继承(泛化)**一种,没有聚合。
3.2 设计模式
创建型模式
| 模式 | 意图 | Java 示例 |
|---|---|---|
| 单例 Singleton | 全局唯一实例 | Spring Bean 默认单例 |
| 工厂方法 | 父类定义接口,子类决定实例化 | BeanFactory |
| 抽象工厂 | 创建一系列相关产品 | 跨DB方言切换 |
| 建造者 Builder | 分步构建复杂对象 | StringBuilder、Lombok @Builder |
| 原型 Prototype | 克隆已有对象 | Object.clone() |
// 建造者模式示例(Lombok @Builder)
@Builder
public class UserQuery {
private String name;
private Integer age;
private String city;
}
// 使用
UserQuery query = UserQuery.builder()
.name("张三")
.age(25)
.city("上海")
.build();
// 单例模式(双重检查锁)
public class RedisClient {
private volatile static RedisClient instance;
private RedisClient() {}
public static RedisClient getInstance() {
if (instance == null) {
synchronized (RedisClient.class) {
if (instance == null) {
instance = new RedisClient();
}
}
}
return instance;
}
}
结构型模式
| 模式 | 意图 | Java 示例 |
|---|---|---|
| 适配器 Adapter | 接口转换 | InputStreamReader |
| 装饰器 Decorator | 动态添加功能 | BufferedInputStream |
| 代理 Proxy | 控制访问 | Spring AOP、MyBatis Mapper |
| 外观 Facade | 简化复杂子系统 | SLF4J 日志门面 |
| 桥接 Bridge | 抽象与实现分离 | JDBC Driver |
| 组合 Composite | 树形结构统一处理 | 菜单树、文件目录 |
| 享元 Flyweight | 共享大量相似对象 | Integer 缓存池 -128~127 |
// 代理模式(Spring AOP 本质)
@Aspect
@Component
public class LogAspect {
@Around("@annotation(Log)")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
long start = System.currentTimeMillis();
Object result = pjp.proceed();
log.info("耗时: {}ms", System.currentTimeMillis() - start);
return result;
}
}
// 装饰器模式示例
InputStream is = new FileInputStream("data.txt");
InputStream bis = new BufferedInputStream(is); // 添加缓冲功能
InputStream gis = new GZIPInputStream(bis); // 添加解压功能
行为型模式
| 模式 | 意图 | Java 示例 |
|---|---|---|
| 策略 Strategy | 算法族可互换 | Comparator、支付方式切换 |
| 观察者 Observer | 事件通知 | EventListener、Kafka Consumer |
| 责任链 Chain | 请求沿链传递 | Spring Security Filter Chain |
| 模板方法 | 定义算法骨架 | AbstractList、JdbcTemplate |
| 命令 Command | 请求封装为对象 | 撤销/重做、任务队列 |
| 状态 State | 状态驱动行为变化 | 订单状态机 |
| 迭代器 Iterator | 顺序遍历集合 | Iterator<T> |
| 访问者 Visitor | 不修改类添加操作 | AST 遍历、编译器 |
| 中介者 Mediator | 集中对象交互 | MQ、EventBus |
| 备忘录 Memento | 保存恢复状态 | 游戏存档、撤销操作 |
// 策略模式示例(支付方式)
public interface PayStrategy {
void pay(BigDecimal amount);
}
@Component("alipay")
public class AliPayStrategy implements PayStrategy {
public void pay(BigDecimal amount) { /* 支付宝支付逻辑 */ }
}
@Component("wechat")
public class WechatPayStrategy implements PayStrategy {
public void pay(BigDecimal amount) { /* 微信支付逻辑 */ }
}
// 责任链模式(Spring Security 过滤链)
public class AuthFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest req,
HttpServletResponse res, FilterChain chain)
throws ServletException, IOException {
// 前置处理
verifyToken(req);
// 传递给下一个过滤器
chain.doFilter(req, res);
}
}
3.3 面向对象设计七大原则
| 原则 | 核心 | 记忆 |
|---|---|---|
| 单一职责 SRP | 一个类只负责一件事 | 一心不二用 |
| 开闭原则 OCP | 对扩展开放,对修改封闭 | 加新功能不改老代码 |
| 里氏替换 LSP | 子类可完全替换父类 | 子类不破坏父类契约 |
| 依赖倒置 DIP | 依赖抽象而非具体实现 | 面向接口编程 |
| 接口隔离 ISP | 多个专用接口优于一个通用接口 | 不强迫实现不需要的方法 |
| 合成复用原则 | 优先使用组合/聚合而非继承 | 组合优于继承 |
| 迪米特法则 LoD | 只与直接朋友通信 | 最少知识原则 |
3.4 耦合与内聚(从低到高排序)
耦合(低→高):
非直接耦合 → 数据耦合 → 标记耦合 → 控制耦合 →
外部耦合 → 公共耦合 → 内容耦合
口诀:飞(非)鼠(数)标(标)恐(控)外(外)公(公)内(内)
内聚(低→高):
偶然内聚 → 逻辑内聚 → 时间内聚 → 过程内聚 →
通信内聚 → 顺序内聚 → 功能内聚
口诀:欧(偶)罗(逻)驶(时)过(过)通(通)顺(顺)宫(功)
设计目标:高内聚、低耦合
3.5 软件架构 4+1 视图
场景视图(用例视图)
↑
┌─────────────────────┐
│ 逻辑视图 │ 开发视图 │
│ (功能/类图) │(代码分包) │
├────────────┼─────────┤
│ 处理视图 │ 物理视图 │
│(运行时进程) │(部署架构) │
└─────────────────────┘
| 视图 | 关注点 | 使用图 |
|---|---|---|
| 场景视图 | 为谁做(需求验证) | 用例图 |
| 逻辑视图 | 做什么(功能分解) | 类图、对象图 |
| 开发视图 | 如何组织(代码结构) | 包图、组件图 |
| 处理视图 | 什么时候做(并发运行) | 时序图、活动图 |
| 物理视图 | 在哪做(硬件部署) | 部署图 |
四、系统架构设计
4.1 架构风格总览(22种)
数据流风格
| 风格 | 特征 | 典型场景 |
|---|---|---|
| 批处理 | 成批处理,无人工干预,以整体传递数据 | 银行对账、数据ETL |
| 管道-过滤器 | 数据流式传输,每个过滤器独立处理 | Unix管道、编译器 |
# 管道-过滤器 Unix 典型示例
cat access.log | grep "ERROR" | awk '{print $4}' | sort | uniq -c
# 数据源 过滤器1 过滤器2 过滤器3 过滤器4
调用返回风格
| 风格 | 特征 |
|---|---|
| 主程序/子程序 | 栈式调用,层层返回 |
| 面向对象 | 封装属性和方法 |
| 层次化架构 | 按抽象级别分层,上层调用下层 |
独立构件风格(事件/消息)
| 风格 | 特征 | 示例 |
|---|---|---|
| 事件驱动(隐式调用) | 发布事件,订阅者响应 | Spring Event、Kafka |
| 进程通信 | OS提供IPC机制 | 管道、共享内存、消息队列 |
虚拟机风格
| 风格 | 特征 | 示例 |
|---|---|---|
| 解释器 | 动态解析执行,灵活但效率低 | JVM、Python解释器 |
| 规则/专家系统 | 规则集+推理引擎 | Drools规则引擎 |
仓库风格(以数据为中心)
| 风格 | 特征 |
|---|---|
| 数据库系统 | 中央数据库作为核心 |
| 黑板风格 | 共享工作内存,适合语音识别、AI推理 |
| 超文本系统 | HTML+URL的网络结构 |
闭环控制风格
过程控制风格:传感器采集→控制器计算→执行器响应,注意闭环特征。
传感器(Sensor) → 控制器(Controller) → 执行器(Actuator)
↑__________________反馈______________________|
4.2 质量属性与架构评估
六大质量属性
运行期质量属性:
| 属性 | 关注点 | 度量方式 | 常见战术 |
|---|---|---|---|
| 性能 | 响应时间、吞吐量 | TPS、RT | 缓存、异步、负载均衡 |
| 可用性 | 出事后多久恢复 | MTTR | 主动冗余、心跳检测、选举 |
| 可靠性 | 多久不出故障 | MTBF、MTTF | 冗余、降级、熔断 |
| 安全性 | 抗攻击能力 | 漏洞数 | 认证授权、加密、审计 |
MTTR = Mean Time To Repair(平均修复时间)→ 越小越好
MTTF = Mean Time To Failure(平均失效前时间)→ 越大越好
MTBF = Mean Time Between Failure(平均无故障时间)→ 越大越好
MTBF = MTTF + MTTR
开发期质量属性: 可维护性、可扩展性、可测试性、可重用性、可移植性、可修改性、互操作性
可用性战术
故障检测:心跳(Heartbeat)、Ping-Echo、异常监控
故障恢复:主动冗余(热备)、被动冗余(冷备)、选举(Raft/Paxos)
故障预防:事务、进程监控、预测模型
可修改性战术
- 中间件解耦
- 接口与实现分离
- 抽象
- 信息隐藏
⚠️ 可变性不是可修改性考虑的内容
4.3 架构评估方法
| 方法 | 全称 | 特点 |
|---|---|---|
| ATAM | Architecture Tradeoff Analysis Method | 架构权衡分析,开发前评估质量属性折中,最常用 |
| SAAM | Software Architecture Analysis Method | 基础场景分析,关注非功能需求变化 |
| SASAM | — | 静态评估方法 |
| SAABNet | — | 动态分析方法 |
ATAM 关注四大质量属性:性能、安全性、可用性、可修改性
质量属性六要素(场景描述模板):
刺激源(谁触发)→ 刺激(发生什么)→ 环境(什么状态下)
→ 制品(影响哪部分)→ 响应(系统怎么做)→ 响应度量(达标标准)
架构评估三个概念:
- 架构风险:潜在问题的架构决策所带来的隐患
- 敏感点:为实现某质量属性,构件所具有的特性
- 权衡点:影响多个质量属性的特性(多个属性的敏感点)
4.4 ABSD(基于架构的软件开发)
驱动因素: 商业需求 + 质量属性 + 功能需求
开发过程: 需求 → 设计 → 文档化 → 复审 → 实现 → 演化
顶层概念架构分解为概念子系统,最终产生软件构件和类
4.5 DSSA(特定领域软件架构)
三类角色:
- 领域分析者 → 产生领域模型
- 领域设计者 → 开发DSSA,获得架构
- 领域实现者 → DSSA到具体实现
三个参考: 参考模型 + 参考需求 + 参考架构
4.6 大数据架构:Lambda vs Kappa
| 对比维度 | Lambda 架构 | Kappa 架构 |
|---|---|---|
| 链路 | 批处理 + 实时双链路 | 仅实时单链路 |
| 计算引擎 | Spark(批) + Flink/Storm(流) | 仅 Flink/Kafka Streams |
| 数据存储 | HDFS(批) + HBase/Redis(实时) | Kafka + ClickHouse/Doris |
| 口径一致性 | 难保证,双链路可能不一致 | 天然一致 |
| 维护成本 | 高(维护两套代码) | 低 |
| 数据延迟 | 批处理延迟高 | 近实时 |
| 适用场景 | 超大批量、强精准、传统数仓 | 实时大屏、风控、实时数仓 |
Lambda 架构:
原始数据 → ┬─ 批处理层(Spark/MapReduce) → 批次视图 ─┐
│ ├→ 查询层(Hive/Impala)
└─ 速度层(Flink/Spark Streaming) → 实时视图 ┘
Kappa 架构:
原始数据 → Kafka(消息队列) → Flink(流计算) → ClickHouse/Doris(查询)
4.7 微服务架构 vs 单体架构
| 维度 | 单体架构 | 微服务架构 |
|---|---|---|
| 代码结构 | 一个代码库 | 多个独立服务仓库 |
| 数据库 | 共享一个DB | 每服务独立DB |
| 部署发布 | 整体重新部署 | 独立部署,互不影响 |
| 扩容 | 整体扩容 | 按需对单个服务扩容 |
| 技术栈 | 统一 | 可异构 |
| 调用方式 | 本地方法调用 | HTTP/RPC跨网络调用 |
| 容错性 | 一个模块崩溃影响全局 | 服务隔离,故障不蔓延 |
| 适用 | 小型项目快速上线 | 大型复杂、高并发系统 |
Spring Cloud 微服务技术栈:
注册中心:Nacos / Eureka
配置中心:Nacos / Apollo
网关: Spring Cloud Gateway
服务调用:OpenFeign
熔断限流:Sentinel / Resilience4j
消息队列:Kafka / RabbitMQ
分布式事务:Seata
4.8 云计算服务模型
SaaS(Software as a Service) → 最上层,直接用软件
PaaS(Platform as a Service) → 中间层,提供开发平台
IaaS(Infrastructure as a Service)→ 最底层,提供硬件资源
五、数据库系统
5.1 范式
| 范式 | 要求 | 解决问题 |
|---|---|---|
| 1NF | 每列原子化,不可再分 | 列拆分 |
| 2NF | 满足1NF + 消除部分函数依赖 | 非主属性完全依赖主键 |
| 3NF | 满足2NF + 消除传递依赖 | A→B→C 改为 A→B, A→C |
| BCNF | 满足3NF + 每个决定因素都是候选键 | 更严格的3NF |
| 4NF | 满足BCNF + 消除多值依赖 | 多值依赖 |
部分函数依赖示例(违反2NF):
主键:(学号, 课程号)
问题:学生姓名 只依赖 学号(部分依赖)
解决:拆表 → 学生表(学号,姓名) + 选课表(学号,课程号,成绩)
传递依赖示例(违反3NF):
学号 → 系名 → 系主任(传递依赖)
解决:拆表 → 学生表(学号,系名) + 系表(系名,系主任)
5.2 关系代数
| 操作 | 符号 | 说明 |
|---|---|---|
| 笛卡尔积 | × | 硬凑,行数相乘 |
| 自然连接 | ⋈ | 按同名列连接,消除重复列 |
| 投影 | π | 保留哪些列(SELECT 列) |
| 选择 | σ | 过滤哪些行(WHERE 条件) |
| 并 | ∪ | 两表合并去重 |
| 差 | − | A中有但B中没有的 |
| 交 | ∩ | 两表共有的 |
5.3 Armstrong 公理系统
三大基本公理:
- 自反律:若 Y⊆X,则 X→Y
- 增广律:若 X→Y,则 XZ→YZ
- 传递律:若 X→Y,Y→Z,则 X→Z
三大常用推论:
- 合并规则:X→Y, X→Z ⟹ X→YZ
- 分解规则:X→YZ ⟹ X→Y, X→Z
- 伪传递规则:X→Y, WY→Z ⟹ WX→Z
5.4 分布式数据库
四种透明性(从高到低):
分片透明 → 不知道数据如何分片(最高层透明)
复制透明 → 不知道数据被复制到哪些节点
位置透明 → 不知道数据在哪个节点
逻辑透明 → 不知道底层数据模型(最低层透明)
两阶段提交(2PC):
Phase 1(准备/表决阶段):
协调者 → 所有参与者:"准备好了吗?"
参与者 → 协调者:"Yes/No"
Phase 2(执行/提交阶段):
全Yes → 协调者 → 所有参与者:"COMMIT"
有No → 协调者 → 所有参与者:"ROLLBACK"
分布式数据库概念模式层次:
全局外模式(顾客视角)
↓
全局概念模式(总部总账)
↓
分片模式(拆账规则)
↓
分布模式(分片存放位置)
5.5 数据库三级模式结构
外模式(用户视图/View) ← 用户看到的数据视图
模式(概念模式/表结构) ← 全局逻辑结构
内模式(物理存储/索引) ← 数据的存储方式
5.6 数据仓库特点
与普通数据库的区别:
- 面向主题(而非面向事务)
- 集成性(多源数据整合)
- 非易失性(只增不改,历史数据)
- 时变性(记录时间快照)
六、操作系统
6.1 进程管理
进程三态模型:
就绪态 ──(调度/分配CPU)──→ 运行态
↑ │
└──(时间片到/高优先级抢占)──┘
↑ ↓
└──(I/O完成)── 阻塞/等待态 ──(I/O请求)──┘
PCB(进程控制块)组织方式:
- 顺序方式(线性表)
- 链接方式(链表)
- 索引方式(索引表)
- 哈希方式
进程 vs 线程:
- 进程:资源分配和管理的最小单位
- 线程:进程的基本执行单元(CPU调度的最小单位)
6.2 死锁
四个必要条件(必须同时满足才死锁):
| 条件 | 说明 | 能否破坏 |
|---|---|---|
| 互斥 | 资源同时只能一个进程使用 | ❌ 不可破坏(资源本质) |
| 请求与保持 | 持有资源的同时请求新资源 | ✅ 可破坏(一次性申请所有) |
| 不可剥夺 | 资源不能被强制取走 | ✅ 可破坏(允许抢占) |
| 循环等待 | 进程形成环状等待链 | ✅ 可破坏(资源编号排序) |
银行家算法: 预判分配后系统是否还处于安全状态,如果不安全则拒绝分配。
6.3 磁盘调度
物理寻址三要素:
磁头号(盘面)→ 柱面号(磁道)→ 扇区号(位置)
访问时间 = 寻道时间 + 旋转延迟 + 数据传输时间
常见磁盘调度算法:
FCFS(先来先服务) → 公平但效率低
SSTF(最短寻道时间) → 可能饿死外圈磁道
SCAN(扫描/电梯) → 来回扫描,更均匀
C-SCAN(循环扫描) → 单向扫描,更公平
6.4 嵌入式系统
实时操作系统(RTOS)特点:
- 任务调度器:抢占式调度
- 强实时调度算法:Rate Monotonic Scheduling(RMS)
- 任务周期越短 → 优先级越高
低功耗设计策略:
- 编译优化技术
- 软硬协同设计
- 算法优化(减少计算量)
七、信息安全
7.1 加密算法
对称加密
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| DES | 56 位 | 已不安全 |
| 3DES | 112 位(56×2) | DES的增强版 |
| AES | 128/192/256 位 | 当前标准,安全高效 |
非对称加密
RSA 原理:
公钥加密 → 私钥解密(实现数据加密传输)
私钥签名 → 公钥验证(实现数字签名)
完整的数字签名流程:
发送方:原文 → Hash → 消息摘要 → 用私钥加密 → 数字签名
接收方:收到(原文+数字签名) → 用公钥解密签名得摘要1
→ 对原文Hash得摘要2
→ 摘要1==摘要2 则验证通过
消息摘要的作用:防止篡改
对摘要加密的作用:防止抵赖(数字签名)
7.2 第三方认证
| 协议 | 特点 | 适用 |
|---|---|---|
| Kerberos | 对称密钥加密,KDC分发密钥,时间戳防重放 | 企业内网/局域网 |
| PKI/CA | 公钥基础设施,CA颁发数字证书 | 互联网HTTPS |
Kerberos 防重放攻击的机制:时间戳
7.3 常见网络攻击
| 攻击类型 | 原理 |
|---|---|
| SYN Flooding | 利用TCP三次握手,伪造源IP发大量SYN,耗尽半连接资源 |
| Ping of Death | 发送超大ICMP包导致缓冲区溢出 |
| Teardrop | 发送重叠偏移的分片包导致崩溃 |
| Land | 源IP=目的IP的SYN包,导致死循环 |
| 业务流分析 | 监听流量分析通信模式(即使加密也危险) |
7.4 信息安全五个等级
Level 1 用户自主保护级
Level 2 系统审计保护级
Level 3 安全标记保护级
Level 4 结构化保护级
Level 5 访问验证保护级(最高)
7.5 灾难恢复最高级别
- 零数据丢失(RPO=0)
- 自动系统故障切换(RTO≈0)
八、项目管理
8.1 项目时间管理
PERT 期望时间公式:
$$T_e = \frac{T_{optimistic} + 4 \times T_{mostLikely} + T_{pessimistic}}{6}$$甘特图 vs PERT图:
- 甘特图:展示任务时间安排和进度,直观但不显示依赖关系
- PERT图:展示任务依赖和关键路径,可计算最早/最晚完成时间
8.2 WBS(工作分解结构)
项目
├── 阶段1
│ ├── 工作包1.1
│ └── 工作包1.2
├── 阶段2
│ ├── 工作包2.1
│ └── 工作包2.2
└── 阶段3
活动定义使用工具:WBS
8.3 配置管理
配置项的三种状态:
草稿 → 正式发布 → 正在修改
配置管理四大活动:
- 版本控制
- 变更管理
- 配置状态管理
- 访问控制与安全控制
8.4 需求管理
变更控制委员会:CCB(Change Control Board)
需求变更管理流程:
1. 问题分析和变更描述
2. 变更分析和成本计算
3. 变更实现
需求管理三大基本活动:
- 变更控制
- 版本控制
- 需求跟踪
附录:高频考点速记
核心口诀汇总
CMMI 五级:初重定管优(初始、可重复、已定义、已管理、优化)
耦合低→高:飞鼠标恐外公内
(非直接、数据、标记、控制、外部、公共、内容)
内聚低→高:欧罗驶过通顺宫
(偶然、逻辑、时间、过程、通信、顺序、功能)
范式口诀:
1NF=原子,2NF=完全依赖,3NF=无传递,4NF=无多值
架构风格选择指南
| 需求特征 | 推荐架构风格 |
|---|---|
| 数据流处理、编译器 | 管道-过滤器 |
| 大数据批处理 | 批处理风格 |
| 事件通知、解耦 | 事件驱动 |
| 分层系统、MVC | 分层架构 |
| 脚本解析、规则引擎 | 解释器/规则系统 |
| 黑板(AI推理、语音识别) | 黑板风格 |
| 网页系统 | B/S、REST |
| 企业系统集成 | SOA/ESB |
| 云原生弹性 | 微服务 |
| 嵌入式控制 | 闭环控制/过程控制 |
Java 后端关联考点
| 考点 | Java 实现 |
|---|---|
| 单例模式 | Spring Bean(scope=singleton) |
| 工厂模式 | BeanFactory、ApplicationContext |
| 代理模式 | Spring AOP(JDK动态代理/CGLIB) |
| 观察者模式 | Spring ApplicationEvent |
| 责任链模式 | Spring Security FilterChain |
| 策略模式 | Comparator、支付策略 |
| 模板方法 | JdbcTemplate、RestTemplate |
| SOA/ESB | Spring Integration、Apache Camel |
| 微服务 | Spring Cloud Alibaba |
| 消息队列 | Kafka(事件驱动架构) |
| 缓存 | Redis(仓库风格的中央数据存储) |