当前位置: 首页 > ops >正文

软考-系统架构设计师 计算机系统基础知识详细讲解二

个人博客:blogs.wurp.top

一、计算机网络 (架构师的连接蓝图)

架构师视角:网络是分布式系统的基石,所有设计都必须考虑网络延迟、带宽、可靠性和安全性。

1. 网络体系结构 (核心模型)

  • OSI七层模型理论模型,用于理解和教学。
    • 记忆口诀:应、表、会、传、网、数、物 (从上到下)。
    • 每一层的功能和协议是考查重点。
  • TCP/IP五层(或四层)模型实际应用的工业标准。
    • 应用层 (对应OSI应用层、表示层、会话层):HTTP, HTTPS, FTP, SMTP, DNS, DHCP。
    • 传输层:TCP, UDP。
    • 网络层:IP, ICMP, IGMP, ARP/RARP。核心任务是路由和寻址
    • 数据链路层:Ethernet, PPP, Switch。核心任务是帧同步、差错控制、流量控制
    • 物理层:定义物理介质标准,传输比特流。

2. 关键协议详解 (必考)

  • TCP vs UDP必须熟练掌握对比
    特性TCP (传输控制协议)UDP (用户数据报协议)
    连接性面向连接 (三次握手,四次挥手)无连接
    可靠性可靠 (确认、重传、排序、流量控制)不可靠 (尽力交付)
    数据形式字节流 (无边界)数据报文 (有边界)
    头部开销大 (20字节以上)小 (8字节)
    速度
    应用场景Web (HTTP), 邮件(SMTP), 文件传输(FTP)视频会议, 语音通话, DNS查询
  • TCP的重要机制
    • 三次握手:建立连接。SYN -> SYN/ACK -> ACK。防止已失效的连接请求报文突然又传送到服务器。
    • 四次挥手:释放连接。FIN -> ACK -> FIN -> ACK。因为连接可能是半关闭的。
    • 流量控制:使用滑动窗口协议,接收方通过通告窗口大小来控制发送方的速率,防止接收方缓冲区溢出。
    • 拥塞控制:维护一个拥塞窗口(cwnd),算法包括:慢启动、拥塞避免、快重传、快恢复。目的是避免网络过载。
  • HTTP/HTTPS
    • HTTP 1.1: 持久连接、管道化。但仍存在队头阻塞(Head-of-Line Blocking)
    • HTTP/2: 多路复用(解决队头阻塞)、头部压缩、服务器推送。底层仍是TCP。
    • HTTP/3: 基于QUIC协议,运行在UDP之上。进一步解决TCP层面的队头阻塞,减少连接建立延迟。
    • HTTPS = HTTP + SSL/TLS。TLS协议通过非对称加密(如RSA, ECC)协商密钥,然后用对称加密(如AES)通信,保证安全。

3. IP地址与路由

  • IPv4 vs IPv6:IPv6解决了地址枯竭问题,地址长度128位,简化了报头,更安全。
  • 子网划分与CIDR:架构师需要规划网络地址,例如根据主机数量划分子网。
  • 路由协议
    • 内部网关协议(IGP):在自治系统(AS)内部使用,如OSPF (开放最短路径优先,链路状态协议)、RIP (路由信息协议,距离矢量协议)。
    • 外部网关协议(EGP):在AS之间使用,主要是BGP (边界网关协议)。

4. 网络安全

  • 攻击类型:DDoS、SQL注入、XSS、CSRF、中间人攻击等。
  • 防御手段
    • 防火墙:包过滤、状态检测、应用代理。
    • 加密技术:对称加密(AES)、非对称加密(RSA)、哈希算法(SHA、MD5)。
    • 身份认证:数字证书、数字签名、动态口令、生物认证。

二、计算机语言与程序编译 (架构师的表达工具)

架构师视角:语言是思维的载体,选择何种语言和范式直接影响系统的性能、可维护性和团队效率。

1. 程序设计范式

  • 面向过程 (POP):以函数为中心,数据与操作分离。C语言是典型代表。
  • 面向对象 (OOP)必考重点。以对象为中心,核心概念:
    • 四大特性抽象、封装、继承、多态
    • 设计原则:SOLID原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置)。
    • 设计模式23种经典设计模式(创建型、结构型、行为型)是解决常见设计问题的方案,如工厂、单例、适配器、观察者、策略模式等。架构师必须精通。
  • 函数式编程 (FP):将计算视为数学函数的求值,避免状态和可变数据。核心概念:高阶函数、闭包、惰性求值、无副作用。适用于并发编程和数据处理。Scala, Haskell是代表。
  • 响应式编程 (RP):一种面向数据流和变化传播的编程范式,适用于异步和事件驱动系统。如RxJava。

2. 编译与解释

  • 编译型语言 (C, C++, Go):源代码 -> 编译器 -> 机器码 -> 执行。执行速度快
  • 解释型语言 (Python, JavaScript):源代码 -> 解释器 -> 逐行解释执行。跨平台性好,灵活
  • 混合型 (Java, C#):源代码 -> 编译器 -> 字节码 -> 虚拟机(JVM, CLR) 解释/编译执行。兼顾速度和跨平台。

3. 编译过程 (重点)

源代码到目标代码的转换过程:

  1. 词法分析:将源程序分解为一系列记号(Token)(关键字、标识符、常数等)。
  2. 语法分析:根据语法规则将Token序列构造成语法树
  3. 语义分析:检查类型是否匹配、是否声明等。
  4. 中间代码生成:生成与机器无关的中间表示(如三地址码)。
  5. 代码优化:对中间代码进行优化,提高效率。
  6. 目标代码生成:将优化后的中间代码转换成特定机器的目标代码(汇编或机器码)。

4. 运行时系统

  • 内存管理
    • :存放局部变量、函数调用信息。自动管理,速度快。
    • :动态分配的内存(如new, malloc)。由程序员或垃圾回收器管理。
  • 垃圾回收 (GC):自动回收不再使用的内存。
    • 引用计数法:简单,但无法解决循环引用问题。
    • 标记-清除:标记所有可达对象,清除未标记的。会产生碎片。
    • 标记-整理:在标记-清除基础上进行整理,消除碎片。
    • 分代收集 (如Java JVM):将堆分为新生代和老年代,根据对象存活周期采用不同算法。这是主流商用虚拟机的算法

三、系统工程 (架构师的方法论)

架构师视角:系统工程是指导复杂系统从概念、设计、实现到运维的全过程、全生命周期的方法论。

1. 系统开发方法论

  • 结构化方法 (瀑布模型):自顶向下,逐步求精。适用于需求明确的项目。缺点:灵活性差,风险滞后。
  • 面向对象方法:贯穿分析、设计、实现全过程,使用UML进行建模。更好地应对变化。
  • 原型法:快速构建一个简化版,获取用户反馈,逐步演化。适用于需求不明确的项目。
  • 敏捷开发应对快速变化的需求。迭代、增量开发,强调人员和协作。
    • Scrum:角色(PO, SM, Dev Team)、工件(Product Backlog, Sprint Backlog)、事件(Sprint, 站会, 评审, 复盘)。
    • DevOps开发与运维一体化,强调自动化(CI/CD)、持续交付和协作。

2. 系统规划与需求工程

  • 可行性分析:技术可行性、经济可行性、操作可行性等。
  • 需求层次业务需求、用户需求、功能需求、非功能需求
  • 需求获取技术:访谈、问卷调查、原型、观察等。
  • 需求分析模型用例图(谁对系统做什么)、数据流图/DFD(数据流动和处理)。

3. 系统设计原则

  • 高内聚、低耦合:模块内部元素紧密相关,模块之间依赖尽可能简单。这是最重要的设计原则
  • 抽象与信息隐藏:隐藏模块的实现细节,只暴露接口。
  • 关注点分离:将不同的问题分开处理(如MVC模式将数据、视图、控制分离)。

4. 系统验证与验证

  • 测试级别
    • 单元测试:测试单个模块或类。
    • 集成测试:测试模块之间的接口。
    • 系统测试:测试整个系统的功能和非功能需求(性能、安全、压力测试)。
    • 验收测试:由用户进行,确认系统是否满足合同要求。
  • 测试方法
    • α测试:开发环境内部测试。
    • β测试:用户在实际使用环境中测试。

5. 系统运行与维护

  • 维护类型
    • 更正性维护:修复错误。
    • 适应性维护:使系统适应外部环境变化(如操作系统升级)。
    • 完善性维护:扩充功能或提高性能。
    • 预防性维护:为未来的可维护性和可靠性做修改。

总结与软考应用

  1. 综合性:软考案例分析题和论文题极有可能将这三部分知识与硬件、OS知识结合。例如,设计一个高并发电商系统,需要:
    • 网络:考虑CDN、负载均衡、TCP连接池。
    • 语言:选择Java(生态成熟)或Go(高并发性能)。
    • 系统工程:采用微服务架构(架构设计)、敏捷开发模式(项目管理)、CI/CD流水线(DevOps)。
  2. 权衡决策:架构师的角色就是做选择题。为什么用TCP不用UDP?为什么用Java不用Go?为什么用敏捷不用瀑布?你的答案必须基于对上述知识的深刻理解,并能分析其优缺点。
  3. 紧跟趋势:了解云原生、Service Mesh、Serverless等现代架构理念,并将其与传统知识关联,能在论文中体现你的技术视野。
http://www.xdnf.cn/news/18800.html

相关文章:

  • 人工智能之数学基础:离散型随机变量的概率分布有哪些?
  • 【大模型实战篇】基于开源视觉大模型封装多模态信息提取工具
  • 策略设计模式
  • Redis之Keys命令和Scan命令
  • 在python 代码中调用rust 源码库操作步骤
  • mysql优化-mysql索引下推
  • LeetCode - 946. 验证栈序列
  • Linux-孤儿进程和僵死进程
  • mysql是怎样运行的(梳理)
  • Python包管理与安装机制详解
  • EasyExcel 3.x 导出动态表头,动态sheet页
  • Rust:函数与控制流
  • 《Java反射与动态代理详解:从原理到实践》
  • 【Ansible】Ansible部署K8s集群--准备环境--配置网络
  • PEFT 模型解析(59)
  • 《数据之心》——鱼小妖的觉醒
  • ctfshow_萌新web16-web20-----文件包含日志注入
  • 《信息检索与论文写作》实验报告二 引文索引数据库检索
  • 我们来学mysql -- safe启动
  • 解析xml文件并录入数据库
  • 类似ant design和element ui的八大Vue的UI框架详解优雅草卓伊凡
  • Vue中的scoped属性
  • 推荐系统王树森(三)粗排精排
  • 【NER学习笔记】:基于AdaSeq的NER模型训练笔记
  • Linux下TCPT通信
  • 8.26 支持向量机
  • 什么样的 IP 能穿越周期,持续被用户买单?​
  • 基于大模型的智能占卜系统实战-Qwen-VL、RAG、FastAPI
  • “喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
  • Python编程快速上手—让繁琐工作自动化