系统架构设计师案例分析题——web篇
软考高项系统架构设计师,其中的科二案例分析题为5选3,总分75达到45分即合格。本贴来归纳web设计题目中常见的知识点即细节:
目录
一.核心知识
1.常见英文名词
2.私有云
3.面向对象三模型
4.计网相关——TCP和UDP的差异
5.MQTT和AMQP协议
6.面向对象建模
7.Web应用设计三种层次架构
二.案例考察重点
1.MQTT协议(理解与Http和AMQP的区别)
2.Mybatis和Hibernate两种持久层方案
3.Rest风格(RestFul构建工具)
4.Memcache和Redis对比
5.关系型数据库和NoSQL
三.真题
1.2024下半年
2.2024上半年
一.核心知识
1.常见英文名词
- Html5:最新HTML标准,新增语义化标签、多媒体支持、Canvas绘图等
- CSS3:层叠样式表升级版,支持动画、弹性布局、媒体查询等响应式特性
- JavaScript:浏览器脚本语言,实现动态交互效果
- ES6:JavaScript 2015标准,引入let/const、箭头函数、Promise等现代语法
- Bootstrap:前端UI框架,提供响应式布局和预设组件
- Ajax:异步通信技术(Asynchronous JavaScript and XML),实现无刷新数据交互
- Vue:渐进式前端框架
- React:函数式前端框架
- Angular:企业级前端框架
- Uniapp:基于Vue的跨平台开发框架(小程序/H5/App)
- Webpack:模块打包工具,支持代码压缩、loader转换、代码分割
- node.js:JavaScript运行时环境,使JS能运行在服务端
- RestFul:基于HTTP协议的API架构设计风格,强调资源化操作
- JavaWeb:基于Java的Web开发技术总称(Servlet/JSP等)
- JavaEE:企业级Java规范(现改名为Jakarta EE)
- Maven:项目管理工具,依赖管理+构建自动化
- Tomcat:轻量级Web服务器/Servlet容器
- JDBC:Java数据库连接标准接口
- Mybatis:持久层框架,通过XML/注解配置SQL映射
- Spring:轻量级控制反转(IoC)和面向切面(AOP)框架
- SpringMVC:基于MVC模式的Web框架
- SpringBoot:快速构建Spring应用的脚手架,约定优于配置
- MySQL:主流开源关系型数据库
如上为Web开发最基础简单的重要名词,这里只是简单的点名一下,自行搜集资料并在简答题中达到自圆其说的水平即可~
2.私有云
私有云是一个为客户独立构件的云平台,对数据的安全性、服务质量有所保障,可以部署在企业的防火墙内部,私有云的核心属性是专用资源。
- saas:软件即服务,采用b/s架构将企业的应用和数据都置于云服务器上
- pass:平台即服务,提供一个平台,并整合了部分中间件供企业使用
- iaas:基础设施即服务,比如阿里云,提供一个基础的环境,需要安装各类软件
在可用性方面,私有云依托集群的部署方式,当一台机器故障时,其他机器可以替代,不影响业务,传统服务则有可能因为故障二导致系统瘫痪。
在扩展性方面,私有云可以利用云平台的优势,利用弹性扩容机制,通过配置给与更多的资源,而传统服务器则需要升级,成本高,且需要变更。
3.面向对象三模型
- 对象模型是静态的,描述系统的数据结构,描述了系统的一些实体,以及对象之间的关系、属性和操作。通常需要用类图和对象图来表示。
- 动态模型主要强调对象之间是如何交互的,主要用于描述系统的控制结构,如UML协作图、状态图、顺序图、通信图等~
- 功能模型主要用于描述系统的功能,通常用数据流图表示,描述系统做什么。
三者均可用于需求分析阶段。
4.计网相关——TCP和UDP的差异
UDP是一种面向无连接的传输层通信协议,丢包后不会重传,所以不能保证通信可靠性;而TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP之所以可靠,是因为建立连接时有3次握手,通信时有回应机制,所以丢了包,能重传以保障通信可靠性。对于有可靠通信需求的系统,必须采用TCP协议。
5.MQTT和AMQP协议
MQTT消息队列遥测传输是一个基于发布订阅的消息协议,它工作在TCP/IP协议族上,是为硬件性能低下远程设备以及网络状况糟糕的情况下而设计的发布订阅型消息协议。MQTT协议是轻量、简单、开放和易于实现的。
AMQP是一种消息队列协议,它定义了消息的格式和如何通过中间件传输消息,以及如何处理消息的路由和确认。AMQP的主要特征是面向消息、队列、路由、可靠性、安全。多用于企业系统内,对数据一致性、稳定性和可靠性要求很高的场景、对性能和吞吐量的要求还在其次。
6.面向对象建模
面向对象建模分为用例建模和分析建模,5个步骤分别是:确定对象和类、确定架构、确定主题、确定属性、确定方法,类可以分为边界类、实体类、控制类。
实体用于数据建模,而类用于面向对象建模。实体只有属性,而类有属性和操作。
类之间的6种关系:
- 继承关系:子类继承父类的属性和方法,体现单向、层次化,父类更加通用,子类更加具体
- 实现关系:类实现接口的契约,完成接口定义的方法。接口定义行为,类负责具体实现
- 依赖关系:临时性使用关系,一个类的变化可能影响另一个类。通过方法参数、局部变量或静态调用体现。
- 关联关系:类间的结构性关系,一个对象持有另一个对象的引用。可以是单向也可以是双向,通过成员变量体现
- 聚合关系:弱‘整体-部分’关系,部分可以独立于整体存在。生命周期不绑定,是关联的特例
- 组合关系:强‘整体-部分’关系,部分依赖整体存在。生命周期一致,真题负责部分的创建和销毁。
7.Web应用设计三种层次架构
- MVC:模型-视图-控制器,一种后端开发思想,将数据从后端经过控制器层转向前端视图展示。View层即视图层,UI界面;Model为模型,数据相关;而Controller为控制器,接受并处理用户请求通知Model改变,并将Model返回给View。由于不同的层级各司其职,每一层不同的应用具有某些特性有利于通过工程化管理程序代码,可以使用控制器来连接不同的模型和视图去完成客户的需求。控制器可以根据用户需求选择模型进行处理,然后选择视图将处理结果显示给用户。
- MVP:在MVC的基础上,限定了通信方式,即Model和View之间不直接通信,通过Presenter通信,这个Presenter和MVC找那个的Controller一脉相承,均代表应用中的逻辑层。Presenter负责项目中的逻辑,并且直接与View和Model通信,操作数据更新后手动同步到View上。优点在于模型与视图完全分离,我们可以修改视图而不影响模型。
- MVVM:基于前端的架构模式,其核心是提供对View和ViewModel的双向数据绑定,这使得ViewModel的状态改变可以自动传递给View,即所谓的数据双向绑定。
二.案例考察重点
这里从网上的题库归纳总结一些常见的高频考查知识点,依概率各位必须掌握:
1.MQTT协议(理解与Http和AMQP的区别)
MQTT适用于物联网、弱网络环境,HTTP适用于Web服务与API交互以及明确的操作确认,而AQMP适用于金融和关键业务系统。
2.Mybatis和Hibernate两种持久层方案
- 支持基本对象关系映射,能够生成简单基本的DAO层方案(前者不可)
- 业务涉及单词百万条规模的大批量数据读取需求,应方便支持复杂查询操作的SQL人工调优(后者不可)
- 支持复杂的多表关联操作(后者不可)
- 提供良好的数据库移植性支持,支持不同厂商的关系型数据库(前者不可)
3.Rest风格(RestFul构建工具)
优点:
- Rest服务很好的实现了跨平台,任何一个语言的调用方都可以根据接口定义来实现
- Rest服务提供方和调用方的依赖只是依靠定义好的规则,不存在依赖问题
- Rest完全通过HTTP协议实现,使用HTTP协议处理数据通信
5条关键原则:
- 网络上的所有事物都被抽象为资源
- 每个资源对应一个唯一的资源标识
- 通过通用的连接件接口对资源进行操作
- 对资源的各种操作不会改变资源标识
- 所有的操作都是无状态的
4.Memcache和Redis对比
- 数据类型:前者支持简单的key和value类型,而后者不仅支持该两种,还支持list、set、hash等数据结构的存储
- 持久化:前者不支持数据持久化,后者支持
- 分布式存储:前者需要通过hash一致化来支撑主从结构,后者支持多种方式,如主从、sentinel、cluster等
5.关系型数据库和NoSQL
- 数据一致性:前者为实时一致性,后者为弱一致性
- 数据类型:前者为结构化数据,后者为非结构化数据
- 事务:前者为强事务性,后者弱事务性
- 水平扩展:前者弱后者强
- 数据容量:前者有限数据,后者海量数据
三.真题
1.2024下半年
基于Elasticsearch分词的商品推荐系统
1. 基于Elasticsearch分词,解释下Standard, Simple, Whitespace, Keyword 几种分词器的分词原理。(比较新颖的概念,拿不到分不强求)
- Standard:standard分词器通常用于处理多种语言的文本,它会识别并拆分单词、数字、电子邮件地址、网址等,并且能够处理一些标点符号。对于中文、日文、韩文等不使用空格的语言,Standard 分词器可能不是最佳选择,因为它不能很好地理解这些语言的语法规则。例如:“Hello, World!” 分词结果为[“Hello”, “,”, “World”, “!”]。
- Simple:simple分词器非常基础,它只是简单地按照非字母字符进行分割,即将所有的非字母字符视为分隔符。因此,所有连续的字母序列都会被视为一个词汇单元,而任何非字母字符(如空格、标点符号、数字)都会被丢弃或用作分隔标志。例如:“Hello, World! How are you?”分词结果为[“Hello,”, “World!”, “How”, “are”, “you?”]
- Whitespace:whitespace分词器仅仅根据空白字符(如空格、制表符、换行符)来分割文本,不会去除任何字符,也不会考虑标点符号。这意味着标点符号会被当作独立的词汇单元处理。例如:“Hello, World! How are you?”分词结果为[“Hello,”, " ", “World!”, " ", “How”, " ", “are”, " ", “you?”]
- Keyword:keyword分词器并不真正执行分词操作。相反,它会将整个输入文本作为一个单独的词汇单元输出。这意味着输入文本中的所有内容都被认为是一个不可分割的整体。例如:“Hello, World!” 分词结果为 [“Hello, World!”]。
2. 系统架构图填空,从给出的选项中选出对应的选项填入对的位置。
- 分层:接入层、显示层、网络层、应用层、业务逻辑层、控制层、数据层。
- 技术:Mybatis、Nginx、Flink、Javascript、Node.js、RESTful、Elasticsearch、Kafka
送分题,非常传统的理论题。
- 显示层
- 控制层
- Nginx
- JavaScript
- RestFul
- 业务逻辑层
- Mybatis
- 数据层
3.RESTful 架构有什么特点,是如何实现前后端分离的。
(主流框架,必须掌握)
- 无状态性:每个请求从客户端到服务器都必须包含理解该请求所需的所有信息。服务器不会存储任何客户端的状态或会话数据,这使得前端和后端可以独立扩展,并且任意一个都可以在不影响另一个的情况下进行更新。
- 统一接口:Restful API 提供了一套标准的操作集(GET、POST、PUT、DELETE 等),这些操作与资源(通常是名词形式的数据实体,如用户、订单等)相关联。这种一致性简化了前端与后端之间的交互,使前端开发者可以更容易地理解和使用API。
- 资源导向:在 RESTful 设计中,所有的操作都是围绕着资源展开的。资源通过URL标识,并通过HTTP方法来表示对资源的不同操作。这种方式让前端能够以直观的方式与后端资源进行交互。
- 分层系统:RESTful 架构支持分层系统,这意味着客户端不必直接连接到最终的服务端;相反,它可以经过多个中间层(如负载均衡器、缓存代理等)。这增加了系统的灵活性和安全性,同时也便于前后端各自独立演化。
- 基于HTTP协议:RESTful 服务通常基于HTTP协议构建,利用HTTP的方法和状态码来传递语义信息。这使得任何能够发起HTTP请求的技术栈都可以作为前端与RESTful后端通信,从而促进了技术选型的多样性。
- JSON 或 XML 数据格式:RESTful API 常常使用JSON或XML格式交换数据。这两种格式都是轻量级的、易于解析的文本格式,非常适合跨平台的数据传输。前端可以通过JavaScript轻松处理JSON对象,而后端可以用多种语言和技术生成和解析它们。
前后端分离部署:前端代码(HTML、CSS、JavaScript)可以托管在一个静态文件服务器上,甚至可以直接嵌入到单页应用(SPA)中,而不需要依赖于后端逻辑。后端则专注于提供业务逻辑和服务,两者之间仅通过API进行通信。
2.2024上半年
1.有关数据库,依旧是填空(必须拿下)
选项:接口层、处理层、数据层、MySQL,HDFS,HBase,ES。
答案:
- 接口层
- 处理层
- 数据层
- MySQL
- HDFS
- HBase
- ES
2.MongoDB特点(类似下半年的RestFul,较为主流的概念必须说出来个所以然)
MongoDB 是一种流行的 NoSQL 数据库,其核心特点如下:
1. 灵活的文档模型
数据以 BSON(二进制 JSON) 格式存储,支持嵌套对象、数组等复杂结构。无固定模式(Schema-less),允许动态调整数据结构,适应快速迭代的开发需求。
2. 水平扩展与高可用
分片(Sharding):通过分布式集群自动分割数据,支持海量数据存储和高并发访问。复制集(Replica Set):提供数据冗余与自动故障转移,主节点故障时从节点自动接管,保障服务连续性。
3. 强大的查询与索引
支持丰富的查询操作(如范围、正则、地理空间查询)及聚合框架(Aggregation Pipeline)。多种索引类型(单字段、复合、全文、地理空间等),显著提升查询效率。
4. 高性能
基于内存映射文件,读写速度快,尤其适合读密集型场景。WiredTiger 存储引擎支持文档级并发控制、数据压缩,优化资源使用。
5. 事务支持
自 4.0 版本起支持 多文档 ACID 事务,满足复杂业务场景的一致性需求。6. 安全与扩展性
提供身份验证、权限管理、TLS/SSL 加密传输及存储加密。支持水平扩展,通过添加节点轻松提升处理能力,避免单点瓶颈。
7. 适用场景
适用于实时分析、内容管理、物联网(IoT)、移动应用等非结构化数据处理场景。不适用于高度事务性系统(如传统金融系统),此类场景更适合关系型数据库。
总结
MongoDB 以灵活性、扩展性和高性能著称,适合现代应用快速迭代和大数据处理需求,但对复杂事务的支持仍有限,需根据场景权衡选择。
3.冷热数据(冷门概念,可放)
冷热数据分类在数据管理中具有重要作用,主要通过区分数据的访问频率和重要性来优化资源利用。
1. 资源优化与成本控制
- 热数据:存储在高性能介质(如SSD、内存)中,确保快速访问,但成本较高。
- 冷数据:迁移至低成本存储(如HDD、云归档、磁带),显著降低存储费用。例如,云服务中冷数据采用低频访问存储可节省70%以上成本。
2. 提升系统性能
热数据的快速响应能力支撑实时应用(如在线交易、即时推荐),减少延迟。冷数据远离主存储系统,避免占用高速资源,防止性能瓶颈。
3. 高效数据生命周期管理
自动策略(如TTL、访问频率阈值)将数据按热度分级,实现动态迁移。例如,日志数据30天后自动转为冷存储。简化运维,减少人工干预需求。
4. 扩展性与灵活性
热存储层可横向扩展应对突发流量(如电商大促)。冷数据支持长期保留,满足历史分析、审计等需求,无需扩容主系统。5. 合规与风险管理
冷存储满足法规数据留存要求(如GDPR规定医疗数据保存15年)。冷数据加密、离线存储降低安全风险,如磁带库防勒索攻击。6. 节能与可持续性
冷存储设备(如磁带库)功耗仅为硬盘的1/10,符合绿色数据中心趋势。典型案例:
- 视频平台:热片缓存于边缘节点,冷门内容存于中心归档。
- 金融系统:当日交易数据内存处理,5年前记录存于磁带。
- 通过冷热分层,企业可在性能、成本、合规间取得平衡,适应数据价值随时间衰减的规律。
总的来说,本题目拿到10-15分基本上能达到及格的最低限度~