软考软件设计师 · 每日一练 | 2026-04-19
距离2026上半年软考(5月23-26日)还有34天!
今日专题:页面置换算法 / 面向对象设计原则 / 数据流图深化 / 风险管理与知识产权
一、选择题精练(10题)
【1】页面置换算法·LRU(操作系统)
某系统采用LRU页面置换算法,分配给某进程3个物理块,页面引用串为 7, 0, 1, 2, 0, 3, 0, 4, 2, 3,则缺页中断次数为( )。
A. 4
B. 5
C. 6
D. 7
答案:C
解析:逐步模拟LRU(最近最少使用,淘汰最久未使用的页面):
访问 物理块1 物理块2 物理块3 是否缺页 7 7 ✅ 缺页 0 7 0 ✅ 缺页 1 7 0 1 ✅ 缺页 2 2 0 1 ✅ 缺页(淘汰7) 0 2 0 1 ❌ 命中 3 3 0 1 ✅ 缺页(淘汰2) 0 3 0 1 ❌ 命中 4 4 0 1 ✅ 缺页(淘汰3) 2 4 0 2 ✅ 缺页(淘汰1) 3 3 0 2 ✅ 缺页(淘汰4) 缺页次数 = 6次,缺页率 = 6/10 = 60%
LRU核心思想:利用"时间局部性"原理,认为最近使用的页面在不久的将来还会被使用。
【2】页面置换算法·FIFO与Belady异常(操作系统)
关于FIFO页面置换算法,下列说法正确的是( )。
A. FIFO算法不会产生Belady异常
B. Belady异常是指增加物理块数量后缺页率反而增加的现象
C. FIFO算法的性能通常优于LRU算法
D. LRU算法也会产生Belady异常
答案:B
解析:
- Belady异常:分配更多的物理块,缺页率不降反升!这是FIFO算法特有的异常现象。
- 经典例子:页面引用串 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
- 3个物理块:缺页9次
- 4个物理块:缺页10次(反而更多!)
- LRU和OPT算法不会产生Belady异常,它们属于栈算法。
三种算法对比:
算法 是否栈算法 是否有Belady异常 实现难度 OPT(最佳) 是 否 无法实现(需未来知识) LRU(最近最少使用) 是 否 需硬件支持(计数器/栈) FIFO(先进先出) 否 ✅会 最简单
【3】页面置换算法·OPT(操作系统)
在最优页面置换算法(OPT)中,淘汰页面的依据是( )。
A. 淘汰最早进入内存的页面
B. 淘汰最近最少使用的页面
C. 淘汰将来最长时间不再使用的页面
D. 淘汰将来最先被访问的页面
答案:C
解析:OPT(Optimal)又称最佳置换算法,选择未来最长时间内不再被访问的页面进行淘汰。它是理论上的最优算法(缺页率最低),但需要预知未来的页面访问序列,实际上无法实现,仅用于作为其他算法的性能比较基准。
【4】面向对象设计原则·开闭原则(软件工程)
下列设计模式中,最能体现"开闭原则"的是( )。
A. 单例模式
B. 工厂方法模式
C. 观察者模式
D. 适配器模式
答案:B
解析:工厂方法模式定义一个创建对象的接口,但让子类决定实例化哪个类。新增产品时只需新增一个具体工厂子类,无需修改已有代码,完美体现"对扩展开放,对修改关闭"。
设计模式与设计原则对应:
设计原则 典型体现模式 开闭原则 工厂方法、策略模式 单一职责 代理模式、装饰器模式 里氏替换 策略模式、模板方法 依赖倒置 工厂方法、依赖注入 接口隔离 适配器模式、门面模式 迪米特法则 门面模式、中介者模式
【5】面向对象设计原则·综合判断(软件工程)
下列关于面向对象设计原则的描述,错误的是( )。
A. 开闭原则是面向对象设计的核心,其他原则是实现开闭原则的手段
B. 里氏替换原则要求子类不能重写父类的方法
C. 依赖倒置原则要求高层模块依赖抽象,不依赖具体实现
D. 迪米特法则要求一个对象应对其他对象保持最少的了解
答案:B
解析:里氏替换原则并不是"不能重写父类方法",而是"子类可以扩展父类功能,但不能改变父类原有的功能语义"。也就是说子类重写方法时,前置条件不能更严格,后置条件不能更宽松,保证替换父类后程序行为不变。
七大设计原则速记:
- 开闭原则(OCP):对扩展开放,对修改关闭
- 里氏替换(LSP):子类能替换父类且行为不变
- 依赖倒置(DIP):依赖抽象不依赖具体
- 单一职责(SRP):一个类只有一个变化原因
- 接口隔离(ISP):接口要小而专,不臃肿
- 迪米特法则(LoD):最少知道,不和陌生人说话
- 合成复用(CRP):优先组合/聚合,而非继承
【6】数据流图·平衡原则(软件工程)
在数据流图(DFD)中,父图中某加工的输入流为3条,输出流为2条,则子图中( )。
A. 输入流必须为3条,输出流必须为2条
B. 输入流和输出流之和必须为5
C. 子图的输入输出数据必须与父图对应加工的输入输出一致
D. 子图的输入输出流数量可以任意
答案:C
解析:父图与子图平衡原则——子图的输入/输出数据流必须与父图中对应加工的输入/输出数据流一致(数据内容相同,数量可以不同,因为子图可能对数据进行了拆分或合并)。
注意:是"数据流内容一致",不是"数量相同"!子图可以把一条数据流拆成多条,只要数据总量守恒即可。
数据流图四大组成:
符号 名称 含义 箭头 数据流 数据的流向(必须有名字) 圆/矩形 加工/处理 对数据的变换操作 双横线 数据存储 数据的存放处(文件、数据库) 方框 外部实体 系统外部的数据源或接收者
【7】数据流图·数据守恒(软件工程)
在数据流图中,若一个加工的输出数据流与其输入数据流不匹配,这种现象违反了( )原则。
A. 父图平衡原则
B. 数据守恒原则
C. 抽象原则
D. 层次原则
答案:B
解析:数据守恒原则——加工的输出数据必须能从其输入数据中推导出来。如果输出数据与输入数据无关,说明该加工"凭空产生"了数据,违反了数据守恒。
解题技巧:数据流图答题时,每个加工必须检查——"输出的数据能否从输入得到?"如果不能,要么缺了输入数据流,要么多了输出数据流。
DFD答题四步法:
- 读说明:标出所有实体、数据流、数据存储、加工
- 看父图:确认外部实体和顶层数据流
- 查子图:用平衡原则和守恒原则检查每个加工
- 找遗漏:注意数据流方向(谁给谁)和数据存储的读写
【8】风险管理·应对策略(软件工程)
项目风险应对策略中,"为项目购买保险"属于( )策略。
A. 风险回避
B. 风险转移
C. 风险减轻
D. 风险接受
答案:B
解析:
- 风险回避:改变计划以消除风险(如取消有风险的功能模块)
- 风险转移:将风险后果转移给第三方(购买保险、外包、签订合同)
- 风险减轻:降低风险发生的概率或影响(增加测试、原型验证)
- 风险接受:不主动处理,准备好应急计划(准备金、备选方案)
常见混淆辨析:
策略 核心思想 举例 回避 不做有风险的事 取消某个 risky feature 转移 让别人承担风险 买保险、签SLA合同 减轻 降低概率或影响 加测试、做原型、加人 接受 承认风险,备好Plan B 设应急预算、备选方案
【9】知识产权·著作权(法律)
关于软件著作权的保护期限,下列说法正确的是( )。
A. 软件著作权的保护期为50年
B. 软件著作权的保护期为作者终生及死后50年
C. 软件著作权的保护期为30年
D. 软件著作权没有保护期限
答案:B
解析:软件著作权属于著作权的一种(计算机软件也是作品),保护期限为作者终生及其死亡后50年(截止于第50年的12月31日)。如果是法人/组织的作品,保护期为首次发表后50年。
知识产权高频考点:
知识产权类型 保护期限 保护条件 著作权(含软件) 自然人:终生+50年;法人:发表后50年 自动取得,无需登记 发明专利 20年 需申请,有新颖性、创造性、实用性 实用新型专利 10年 需申请 外观设计专利 15年 需申请 商标权 10年(可无限续展) 需注册
【10】知识产权·职务作品(法律)
某程序员在公司任职期间,利用公司设备和资源开发的软件,其著作权归属为( )。
A. 程序员个人
B. 公司
C. 程序员与公司共有
D. 由法院裁定
答案:B
解析:这是典型的职务作品(职务软件)问题。
软著归属规则:
- 利用单位物质技术条件(设备、资料等)开发的软件 → 著作权归单位
- 属于本职工作或单位指派任务→ 著作权归单位
- 非职务软件开发(业余时间、自备设备、与工作无关) → 著作权归开发者个人
注意:署名权永远归实际开发者(不能转让),但著作权的其他经济权利根据上述规则确定归属。
二、页面置换算法·核心知识体系
2.1 三大算法对比
| 算法 | 淘汰策略 | Belady异常 | 性能 | 实现难度 |
|---|---|---|---|---|
| OPT(最佳) | 淘汰未来最久不被访问的 | ❌ 无 | 最优(理论基准) | 不可实现 |
| LRU(最近最少使用) | 淘汰最近最久未使用的 | ❌ 无 | 接近OPT | 较高(需硬件支持) |
| FIFO(先进先出) | 淘汰最早进入内存的 | ✅有 | 一般 | 最简单 |
2.2 LRU与FIFO核心区别
LRU:看"最近有没有被用过"——谁最久没被用,淘汰谁 FIFO:看"最早什么时候进来"——谁最先来,淘汰谁 例:内存中依次放入A→B→C,然后访问了A,再需要放入D - LRU淘汰:B(B是最久没被访问的) - FIFO淘汰:A(A是最早进入的,即使刚被访问过也要淘汰)2.3 页面置换算法必记结论
- FIFO有Belady异常,LRU和OPT无此异常
- LRU利用时间局部性,性能优于FIFO
- OPT是理论最优,实际只能作为比较基准
- 缺页率 = 缺页次数 / 访问总次数
- 增加物理块数→FIFO缺页率不一定下降(Belady异常)
- 增加物理块数→LRU/OPT缺页率一定下降或不变
三、面向对象设计七大原则·速记体系
3.1 原则速记口诀
"开(开闭)单(单一)依(依赖倒置)里(里氏) 接(接口隔离)迪(迪米特)合(合成复用)"3.2 核心思想一句话总结
| 原则 | 一句话 |
|---|---|
| 开闭原则 | 改代码不如加代码,能加不改 |
| 单一职责 | 一个类只干一件事 |
| 里氏替换 | 父类能用的地方子类也能用 |
| 依赖倒置 | 面向接口编程,不面向实现 |
| 接口隔离 | 接口要小而专,别搞万能接口 |
| 迪米特法则 | 少跟陌生人说话 |
| 合成复用 | 组合优于继承 |
3.3 设计原则与设计模式对应关系
软考高频出题点:给一段代码/场景,问"体现了哪个设计原则"。
| 场景 | 体现的原则 |
|---|---|
| 通过继承扩展新功能而不修改原有代码 | 开闭原则 |
| 将大接口拆分成多个小接口 | 接口隔离原则 |
| 使用接口/抽象类引用而非具体类 | 依赖倒置原则 |
| 类A通过类B与类C通信,不直接调用C | 迪米特法则 |
| 将"发动机"组合到"汽车"中而非继承 | 合成复用原则 |
| 子类不重写父类已有方法 | 里氏替换原则 |
| 每个类只处理一种业务逻辑 | 单一职责原则 |
四、数据流图(DFD)·深化解题模板
4.1 DFD四大组成元素
┌──────┐ ┌─────────┐ │ │ 数据流 │ │ 外部实体│─────→│ 加工 │─────→ │外部实体 │ │ (圆形) │ 数据流 │ └──────┘ └────┬────┘ │ 数据流 ↓ ┌─────────┐ │ 数据存储 │ │ ═══════ │ └─────────┘4.2 三大平衡/守恒原则
| 原则 | 内容 | 检查方法 |
|---|---|---|
| 父图平衡 | 子图的输入输出必须与父图加工一致 | 逐条数据流对比 |
| 数据守恒 | 加工输出必须能从输入推导 | 检查每个加工的"产出" |
| 加工分解守恒 | 子图内的加工之和外层功能 = 父加工功能 | 检查是否有遗漏的功能 |
4.3 下午题DFD答题模板
第1步:读题 → 标出所有【实体名】、【数据流名】、【数据存储名】 第2步:看父图 → 外部实体必须与顶层图一致(不能多不能少) 第3步:填子图 → 用父图平衡原则,对照父加工的输入输出填入子图 第4步:查守恒 → 每个加工"进来什么、出去什么"要合理 第5步:标遗漏 → 检查是否缺了数据流方向箭头常见陷阱:
- 数据流的方向(谁发给谁)容易搞反
- 数据存储的读/写操作(读箭头从存储出来,写箭头指向存储)
- 外部实体之间不能直接有数据流(必须经过加工)
- 一个加工不能只有输出没有输入(违反数据守恒)
五、风险管理与知识产权·高频考点
5.1 风险管理四步走
风险识别 → 风险评估 → 风险应对 → 风险监控 识别:列出所有可能的风险 评估:评估概率 × 影响 = 风险等级 应对:回避/转移/减轻/接受 监控:跟踪风险状态变化5.2 知识产权·软考必背
著作权(软考最高频):
- 人身权(不可转让):发表权、署名权、修改权、保护作品完整权
- 财产权(可转让):复制权、发行权、出租权、信息网络传播权等
- 保护期:自然人终生+50年;法人首次发表后50年
专利权:
- 发明专利:20年 | 实用新型:10年 | 外观设计:15年
- 需要申请,满足新颖性+创造性+实用性
商标权:10年,可无限续展
软考常考陷阱:
- “软件著作权需要登记才能获得” → ❌ 自动取得,登记只是证据
- “职务作品的署名权归单位” → ❌ 署名权永远归开发者
- “专利权保护期从申请日起算” → ✅ 正确(著作权从创作完成日起算)
六、Scrum敏捷开发·必考知识点
6.1 Scrum三角色
| 角色 | 英文 | 核心职责 |
|---|---|---|
| 产品负责人 | Product Owner | 管理产品待办列表,确定优先级 |
| 敏捷教练 | Scrum Master | 消除障碍,守护Scrum流程 |
| 开发团队 | Development Team | 自组织、跨职能,交付增量 |
6.2 Scrum五事件(仪式)
| 事件 | 频率 | 核心内容 |
|---|---|---|
| Sprint | 1-4周一次 | 时间盒,固定长度迭代 |
| Sprint计划会议 | Sprint开始 | 确定Sprint目标和待办事项 |
| 每日站会 | 每天15分钟 | 昨天做了什么、今天做什么、有什么障碍 |
| Sprint评审会 | Sprint结束 | 展示成果,收集反馈 |
| Sprint回顾会 | Sprint结束 | 反思流程,改进工作方式 |
6.3 Scrum三工件
| 工件 | 说明 |
|---|---|
| 产品待办列表(Product Backlog) | 整个产品的需求列表,按优先级排序 |
| Sprint待办列表(Sprint Backlog) | 当前Sprint要完成的任务 |
| 产品增量(Increment) | Sprint结束时交付的可工作软件 |
七、今日记忆卡片
| 序号 | 知识点 | 关键记忆 |
|---|---|---|
| 1 | LRU淘汰策略 | 淘汰最久没被访问的页面 |
| 2 | Belady异常 | FIFO特有,增加物理块→缺页率反升 |
| 3 | OPT vs LRU | OPT看未来,LRU看过去 |
| 4 | 开闭原则 | 对扩展开放,对修改关闭 |
| 5 | 里氏替换 | 子类不能改变父类原有功能语义 |
| 6 | 依赖倒置 | 面向接口编程,不面向实现 |
| 7 | DFD平衡原则 | 子图输入输出与父图加工一致 |
| 8 | DFD守恒原则 | 加工输出必须能从输入推导 |
| 9 | 风险转移 | 购买保险、外包、签合同 |
| 10 | 软著保护期 | 自然人:终生+50年;法人:发表后50年 |
| 11 | 署名权 | 永远归实际开发者,不可转让 |
| 12 | Scrum角色 | PO定优先级、SM守护流程、团队交付增量 |
八、倒计时提醒
📅 今天:2026-04-19(周日) 📋 距软考:34天 ⏰ 冲刺阶段建议: ✓ 上午刷10道选择题(30分钟)+ 页面置换算法手动模拟 ✓ 下午练习数据流图补全题(找实体/填数据流/检查平衡) ✓ 晚上回顾设计原则7大原则 + Scrum三角色五事件 ✓ 每天花10分钟默写知识产权保护期限表昨日回顾:PV操作四步解题法、生产者消费者代码、前趋图信号量、ER图转关系模式、范式判断、Cache映射、磁盘存取时间、事务ACID
明日预告:排序算法时间复杂度汇总、二叉树遍历与构造、UML类图与状态图、CMM/CMMI成熟度模型