软件架构设计师
2023-08-31 18:57:39 0 举报
自己软件架构设计师整理的脑图,希望对你有所帮助。
作者其他创作
大纲/内容
考试介绍
科目一:综合知识
客观题:75道,150分钟
科目二:案例分析
主观题:5道大题(只做3道),90分钟,第一道必答,后4选2答
科目三:写作论文
论问题:4道题选做1道, 120分钟,有可能变成2选1,上半年系统分析师改了
一般情况下,所有科目达到45分合格
企业信息化战略与实施
信息与信息化的进本概念
信息定义
香浓:信息就是不确定性的减少
维纳(控制论):信息就是信息,既不是物质,也不是能量,但他们相互之间可以转化
统一概括:信息是对客观事物变化和特征的反映;是客观事物之间相互作用和联系的表征,是客观事物经过感知或认知后的再现
信息特点
客观性(真伪性):也叫事实性,不符合事实的信息不仅没有价值,还有副作用
动态性:信息随着时间的变化而变化
层次性:信息可分为战略级、管理级和操作级
传递性:信息在时间上的传递即是存储,在空间上的传递即是转移或扩散
滞后性:信息是数据加工后的产物,所以相对数据有滞后性
扩压性:信息和实物不同,它可以扩散,也可以压缩
分享性:信息可以分享,这和物质不同,并且信息分享具有非零和性(非零和性就是信息可以有多个人拥有,而非只能有一个人拥有)
信息化的概念
信息化是指在国家宏观信息政策指导下,通过信息技术开发、信息产业的发展、信息人才的配置,最大限度地利用信息资源以满足全社会的信息需求,从而加速社会各个领域共同发展,以推进信息社会的过程
信息化的主体是全体社会成员(政府、企业、团体、个人),时域是一个长期过程,空域是经济和社会的一切领域,手段是社会新进生产工具
信息化对组织的意义
组织的结构创新:如虚拟企业、虚拟社区
组织的管理创新:实施电子政务、建立电子政府、建立电子社区以提升管理水平
组织经营创新:利用信息化将经营和管理融为一体
造就信息化的人才队伍:三类人才(IT专业人才、业务人才、专家型人才)
企业信息化目的
企业信息化的具体目标是优化企业业务活动,使之更加有效,它的根本目的在于提高企业的竞争力,使得企业具有平稳和有效的运作能力,对紧急情况和机会做出快速反应,为企业内外部用户提供有价值的信息
涉及三类创新
技术创新:在生产工艺设计、产品设计中使用计算机辅助设计系统,并通过互联网及时了解和掌握新的技术信息,加快技术向生产的转化。还有,生产技术与信息技术相结合,能够大幅度地提高技术水平和产品竞争力。
管理创新:按照市场发展的要求,要对企业现有的管理流程重新整合,从作为管理核心的财务、资金管理,转向技术、物资、人力资源的管理,并延伸到企业技术创新、工艺设计、产品设计、生产制造过程的管理,进而还要扩展到客户关系管理、供应链的管理、乃至发展到电子商务。
制度创新:那些不适应企业信息化的管理体制、管理机制和管理制度必须得到创新
国家信息化体系的内容
1、信息资源的开发利用,信息资源是信息化源泉,信息资源的开发利用要解决三个问题:
- 原始信息的采集
- 使存在的信息在给定的时间内获得
- 是用户获得真正需要的信息
- 原始信息的采集
- 使存在的信息在给定的时间内获得
- 是用户获得真正需要的信息
2、信息网络的全面覆盖:计算机网络、电信网、电视网三网合一
3、信息技术的广泛应用:信息化的基础,直接反映了效率、效果和效益
4、信息产业的大力发展:国家信息化只有在产品和技术方面拥有雄厚的自主知识产权,才能提高综合国力
5、信息化人才的培养:信息化建设能否取得成功的关键所在。不仅要有各个层次的信息化技术人才,还要有精干的信息化管理人才、营销人才、法律人才、情报人才
6、信息化政策法规和标准规范建设:国家信息化快速、有序、健康、持续发展的保障
信息化需求的三个层次
战略需求:目标是提升组织的竞争力
运作需求:
- 实现信息化战略目标的需要
- 运作策略的需要
- 人才培养的需要
- 实现信息化战略目标的需要
- 运作策略的需要
- 人才培养的需要
技术需求:信息技术层面上对系统的完成、升级、集成
企业信息化方法
业务流程重构方法:彻底的、根本性的重新设计流程(BPR)
核心业务应用方法:围绕核心业务推动信息化
信息系统建设方法:建设信息系统作为企业信息化的重点和核心
主题数据库方法:建立面向企业核心业务的数据库,消除信息孤岛
资源管理方法:切入点是为企业资源管理提供强大的能力,比如:ERP、SCM
人力资本投资方法:人力资本理论(注意不是人力资源管理,人力资源管理是管理全体人员)把一部分企业的优秀员工看做是一种资本,能够取得投资收益
信息系统战略规划
整体
企业战略:企业战略规划
企业信息化战略:企业信息化战略规划
信息系统战略:信息系统战略规划,包含战略数据规划、信息技术战略规划、信息资源规划
单个信息系统开发:系统规划
第一阶段:以数据处理为核心,围绕职能部门需求
关键成功因素发(CSF,Critical Success Factors)
方法:企业战略(关键信息集合) => 关键成功因素发(CSF) => 确定开发优先次序(信息系统战略)
抓住关键点,比如公司主要靠销售,那么需要优先开发销售系统
战略集合转化法(SST,Strategy Set Transformation)
方法:企业战略(使命、目标、战略) => 战略集合转化法(SST) => 信息系统的战略目标(信息系统战略)
企业系统规划法(BSP,Business System Planning)
自上而下去规划,自下而上实现
工具:UC(use&create)矩阵(子系统划分),分成数据和过程两个维度,数据在某个过程中创建,也会在某个过程中使用
此外还有:投资回收法、征费法、零线预算法、阶石法
第二阶段:以企业内部MIS(Management Information System)为核心,围绕企业整体需求
战略数据规划法(SDP,Strategic Data Planning):主题数据库
不同于应用数据库,主题数据库打通了信息孤岛的数据库
企业将多个应用数据库整合起来,放到一个数据库里面,就形成了主题数据库
主题数据库的作用就是消除信息孤岛
信息工程法(IE,Information Engineering)
战略栅格法(SG, Strategic Grid)
第三阶段:综合考虑企业内外环境,以集成为核心,围绕企业战略需求
价值链分析法(VCA,Value Chain Analysis)
战略一致性模型(SAM,Strategic Alignment Model)
政府信息化与电子政务
角色
政府(Government)
企(事)业单位(Business)
公民(Citizen)
公务员(Employee)
关系
G2G
基础信息的采集、处理和利用,如:人口信息、地理信息
G2E
政府内部管理系统
G2B
政府给企业单位颁发各种营业执照、许可证、合格证、质量认证
B2G
企业向政府缴税
企业向政府提供各种商品和服务(含竞/投标)
企业向政府提建议、申诉
G2C
社区公安、水、火、天灾等与公共安全有关的信息
户口、各种证件和牌照的管理
C2G
个人应向政府缴纳的各种税款和费用
个人向政府反馈民意(征求群众意见)
报警服务(盗贼、医疗、急救、火警等)
企业信息化与电子商务
整体架构
企业应用系统层
制造、分销、财务、人力资源、呼叫中心、销售管理、市场分析、供应链管理、结算管理、公文流转、协同工作、知识共享
企业前端业务层
产品数据管理系统(PDM)、车间控制系统、企业资源计划系统(ERP)
客户关系管理系统(CRM)、供应链管理系统(SCM)、办公自动化(OA)、知识管理系统(KM)
客户关系管理系统(CRM)、供应链管理系统(SCM)、办公自动化(OA)、知识管理系统(KM)
企业数据应用层:企业信息总线(Enterprise Information Bus)
数据仓库(DW)
数据挖掘(DM)
在线分析系统(OLAP)
决策支持系统(DSS)
企业信息化工程核心技术层
信息技术
自动化技术
现代管理技术
制造技术
企业信息门户(Enterprise Information Portal)
企业资源计划
物料需求计划MRP(Material Requirement Planning)
物料单系统
制造资源计划MRPII(Manufacturing Resource Planning II)
核心是物流,主线是计划
企业资源计划ERP(Enterprise Resource Planning)
打通了供应链,扩展到了非制造业,重心转移到财务上
客户关系管理
CRM: Customer Relationship Management
CRM的目的是提高收入,核心思想就是以客户为中心
主要模块
销售自动化
营销自动化
客户服务与支持
商业智能
价值
提高工作效率,节省开支
提高客户满意度
提高客户的忠诚度
供应链管理
SCM: Supply Chain Management
理念:强强联合,整合与优化“三流”,打通企业间的“信息孤岛”,严格的数据交换标准
信息化的三流
信息流
需求信息流(需方到供方):如客户订单、生产计划、采购合同
供应信息流(供方到需方):如入库单、完工报告单、库存记录、可供销售量、提货发运单等
资金流
物流
供应链
供应商
制造商
分销商
零售商
商业智能(BI)
商业智能
包含:数据仓库、OLAP(联机分析处理)、数据挖掘
用途:决策分析,分析历史数据预测未来
普通应用系统开发
包含:应用数据库、OLTP(联机事物处理)
用途:支撑业务运作
数据仓库
数据库
面向应用:按应用组织
零散的:一个应用对应一个数据库
CRUD:增删改查是常态
解决当下应用的问题
数据仓库
面向主题:按主题组织数据
集成的:整个企业对应一个数据库
相对稳定的(非易失的):查询为主、基本无修改与删除
反映历史变化(时变的):各个阶段信息都有,并可做预测未来的趋势
体系(分层架构)
第一层:数据源
第二层:从数据源抽取、清洗、装载(ETL),形成数据仓库,而数据集市是部门级的数据仓库
第三层:OLAP服务器,对仓库的数据做各种分析处理
第四层:查询报表、分析数据、数据挖掘(利用隐藏的知识做分析与预测)
数据挖掘
关联分析:挖掘出隐藏在数据间的相互关系
序列模式分析:侧重点是分析数据间的前后关系(因果关系)
分类分析:为每一个记录赋予一个标记,再按标记分类
聚类分析:分类分析发的逆过程,把相同的数据分类到一起,再给它们一个标签
数据湖
数据湖是一个存储企业各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析、传输
数据湖从企业的多个数据源获取原始数据,并且针对不同的目的,同一份原始数据还可能有多种满足特定内部模型格式的数据副本,因此,数据湖中被处理的数据可能是任意类型的信息,从结构化数据到完全非结构化数据
数据仓库仅支持分析处理,数据湖既支持分析处理,也支持事务处理
数据湖是一个数据库和数据仓库的折中方案,而主题数据库还是为了应用,只是将应用数据放到一个数据库中
数据仓库&数据湖
数据
数据仓库:清洗过的数据,结构化的数据
数据湖:原始数据,结构化,半结构化
模式
数据仓库:数据存储之前定义数据模式,数据集成之前完成大量工作,数据的价值提前明确
数据湖:数据存储之后定义数据模式,提供敏捷、简单的数据集成,数据的价值尚未明确
存取方法
数据仓库:标准SQL接口
数据湖:应用程序,类SQL接口
优势
数据仓库:多数据源集成,干净、安全的数据,转换一次,多次使用
数据湖:无线扩展性、并行执行、支持编程框架、数据经济
业务流程重组(优化)
BPR:业务流程重组,革命性的,颠覆原有流程、彻底性的再设计
BPM:业务流程管理,演化型的,使用PDCA循环,持续改进
企业应用集成
常见的标准
表示集成(界面集成)
最简单,通过显示页面集成,其它的都没有更改,集成点在显示界面
数据集成
集成点在中间件层,通过JDBC等中间件,直接去修改数据,实现应用数据的集成
控制集成(应用集成,API集成)
集成点在应用逻辑层,通过应用的API来集成
业务流程集成(过程集成,B2B)
集成点也在应用逻辑层,主要是做流程的优化,可以去做跨企业的集成、整合
门户集成
将企业内网的一些信息、知识、应用,通过门户传递到互联网,提供给客户、合作伙伴/供应商、员工
企业门户类型
企业信息门户(EIP,Enterprise Information Portal):使员工/合作伙伴/客户/供应商都能够访问企业内部网络和因特网存储的各种自己所需的信息【统一访问入口】
企业知识门户(EKP,Enterprise Knowledge Portal):企业网站的基础上增加知识性内容【企业知识库】
企业应用门户(EAP,Enterprise Application Portal):以商业流程和企业应用为核心,把商业流程中功能不同的应用模块通过门户技术集成到一起【企业信息系统的网上集成界面】
垂直门户:为某一特定的行业服务的,传送的信息只属于人们感兴趣的领域(垂直是以行业划分的,水平是以构件划分的)
对比
集成点
界面集成:界面
数据集成:数据
控制集成:应用逻辑
业务流程集成:应用逻辑
效果
界面集成:统一入口,产生整体的感觉
数据集成:不同来源的数据逻辑或物理上“集中”
控制集成:调用其它系统已有的方法,达到集成效果
业务流程集成:跨企业,或优化流程而非直接调用
门户集成:将内部系统对接到互联网上
解题关键
界面集成:“整体”的感觉,最小代价实现一体化操作
数据集成:其它集成方法的基础
控制集成:
业务流程集成:企业之间的信息共享能力
门户集成:发布到互联网上
从数据传递的角度
消息集成:消息通信
共享数据库
文件传输:将数据导出成文件,然后发送给对方,对方在通过文件将数据导入到系统中
对比
消息集成:数据量小,交互频繁,立即地,异步
共享数据库:交互频繁,立即地,同步
文件传输:数据量大,交互频度低,即时性要求低(月末,年末)
按组织范围分类
内部集成
业务过程集成(高)
实现不同应用系统中的流程能够无缝连接
对应常见标准中的业务流程集成(过程集成,B2B)
应用系统集成
实现不同应用系统之间能够实现数据和方法的共享
对应常见标准中的控制集成(应用集成,API集成)
数据集成
实现不同系统的数据交流与共享
对应常见标准中的数据集成
技术平台集成(低)
软件/硬件/网络层面的集成
外部集成
合作伙伴系统集成
通过与合作伙伴信息系统的对接,建立动态的企业联盟
门户网站或互联网
通过门户网站和互联网实现企业内外部信息资源的有效交流和继承
企业集成平台
企业集成平台是一个支持复杂信息环境下信息系统开发、集成、协同运行的软件支撑环境
效果
平台运行管理工具:负责企业集成平台系统的配置、应用运行管理和维护、事件管理和出错管理
二次开发工具:简化开发工作
应用集成服务:通过高层应用编程接口来实现对相应应用程序的访问
信息集成服务:它为应用提供透明的信息访问服务,通过实现异种数据库系统之间的数据交换、互操作、分布数据管理和共享信息模型定义(或共享信息数据库的建立)
通信服务:分布环境下透明的同步/异步通信服务功能
集成支持的方式
面向信息的集成:针对信息孤岛,解决企业内数据共享问题
面向过程的集成:采用工作流管理方式,可以对业务过程逻辑和应用逻辑进行分离,实现过程建模和数据、功能的分离
面向服务的集成:面向服务的集成,可以较好地实现(企业间)具有松耦合关系的不同应用间的互操作
电子商务
角色
企业(Business)
个人(Customer)
类型
B2B:1688,聪慧网
C2C:咸鱼
B2C:京东、天猫
C2B:个人给企业提供咨询服务
O2O:Online To Offline,线上对线下,如:团购
数字化转型
数字化
数字化是新一代信息技术真正的实现推动整个【商业模式的变革】,推动产业链的重构,推动改进企业与消费者之间的关系,以及企业与合作伙伴之间的关系
发展阶段
初始级发展阶段
数码化:信息的数字化,记录、存储、传输数码化
单元级发展阶段
数量化:提升单项业务的运行规范性和效率
流程级发展阶段
数字化:关键业务流程及关键业务与设备设施、软硬件、行为活动等要素间的集成优化
网络级发展阶段
数模化:组织(企业)级数字化和产业互联网级网络化,实现以数据为驱动的业务创新模式
生态级发展阶段
数用化:生态级数字化和泛在物联网级网络化,推动与生态合作伙伴间资源、业务、能力等要素的开放共享和协同合作
智能制造体系
资源要素
生命周期:设备、生成、物流、销售、服务
智能特征:互联互通、融合共享、系统集成、新兴业态
系统层级:设备、单元、车间、企业、协同
系统层级
设备层:传感器、仪器仪表、及其、装置等
单元层:企业内处理信息、实现监测和控制物理流程的层级
车间层:面向工厂或车间的生产管理的层级
协同层:其内部和外部信息互联和共享,实现跨企业间业务协同的层级
软件工程
软件生命周期
软件定义时期
问题定义:软件的目标系统是“什么”
可行性研究:技术/经济/操作/社会可行性
需求分析:功能需求、性能需求和运行环境的约束
软件开发时期
概要(总体)设计:模块划分及模块间接口设计
详细设计:模块内部设计
编码
测试
软件运行和维护
软件活动:软件过程模型涉及的活动
软件描述:必须定义软件功能及其使用的限制
软件开发:软件的设计与实现
软件有效性验证:软件必须经过严格的验证,以保证能够满足客户的需求
软件进化(演化):软件随着客户需求的变化不断地改进
软件开发方法(★★★)
结构化方法
定义:自顶向下,逐步分解求精,严格分阶段,阶段产出标准化,应变能力差
面向对象方法
定义:自底向上,阶段界限不明,更好应变、更好复用,符合人们的思维习惯
强调系统内的元素,尽量和现实生活元素对应起来
面向服务的方法
定义:粗粒度、松耦合,标准化和构件化
抽象级别:操作【低】 => 服务【中】 => 业务流程【高】
服务本身就是标准化程度很高的构件
微服务
是面向服务的一种
粒度更细
原型法
定义:在需求阶段,构造一个原型出来,模拟运行场景
主要针对需求不明确
按功能分:水平原型(界面),垂直原型(复杂算法)
按最终结果分:抛弃式原型、演化型原型
其它软件开发方法
形式化方法
净室软件工程【受控污染级别的环境】
数学模型化
所有东西均可证明/验证,而不是测试
统一过程方法(UP)
敏捷方法
基于架构的开发方法(ABSD)
软件开发模型(★★★★)
瀑布模型
定义阶段
软件计划
需求分析
开发阶段
软件设计
程序编码
软件测试
维护阶段
运行维护
其它
和生命周期很像,所以也叫生命周期模型
严格区分阶段,只适合需求明确的项目
V模型【瀑布变种】
需求分析 => 概要设计 => 详细设计 => 编码
验收测试 <= 系统测试 <= 集成测试 <= 单元测试
其它
测试贯穿于始终
测试分阶段,测试计划提前
虽然并行做测试计划,但测试计划本身并不属于需求分析的工作
提前做测试计划,可以提前发现问题
原型模型
定义:在需求阶段,构造一个原型出来,模拟运行场景
主要针对需求不明确
按功能分:水平原型(界面),垂直原型(复杂算法)
按最终结果分:抛弃式原型、演化型原型
迭代与增量
增量型:一次实现一个小模块,最终完成整个软件的实现
迭代型:先做整体轮廓,然后一步步细化实现
很多软件都是增量与迭代结合在一起实现的
螺旋模型【原型+瀑布】
以原型为基础,再把瀑布模型加进来,考虑了风险问题
先做一个小的原型,按生命周期走一遍,然后再做第二个原型,增补一些东西,继续螺旋
特点:引入了风险分析,评价方案、识别风险、消除风险
构件组装模型/基于构件的开发方法
需求分析和定义
软件架构设计
构件库的建立
构件库
构件获取
构件管理
构件标准
CORBA、COM/DCOM、EJB
应用软件构建
测试和发布
快速应用开发RAD【瀑布+构件组装】
基于:SDLC(瀑布) + CBSD(基于构件)
步骤
业务建模
数据建模
过程建模
应用生成
测试与交付
统一过程/统一开发方法(UP/RUP)
四个阶段
初始
定义最终产品视图和业务模型
确定系统范围
细化
设计及确定系统架构
制定工作计划及资源要求
构建
构造产品并继续演进需求、架构、计划直至产品交付
交付
把产品提交给用户使用
特定
用例驱动:需求阶段提供用例
以架构为中心
迭代和增量
敏捷开发方法
特点
适应性的
以人为本
增量迭代,小步快跑
适合小型项目(大型项目也可用,因为大型项目可以拆分为对个子项目)
4大价值观
沟通【加强,面对面沟通】
减文档,文档是间接沟通工具
简单【不过度设计】
反馈【及时反馈】
勇气【接受变更的勇气】
12条过程实践规则
简单设计
测试驱动
代码重构
结对编程
持续集成
现场客户
发行版本小型化
系统隐喻
代码集体所有制
代码策划
代码规范
40小时工作制
敏捷开发过程强调
敏捷软件过程强调让客户满意和软件尽早增量发布;
小而高度自主的项目团队;
非正式的方法;
最小化软件工程工作产品以及整体精简开发。
采用敏捷开发的原因
在绝大多数软件开发过程中,提前预测哪些需求是稳定的和哪些需求会变化非常困难;
对于软件项目构建来说,设计和构建是交错的;
从指定计划的角度来看,分析、设计、构建和测试并不容易预测;
可执行原型和部分实现的可运行系统是了解用户需求和反馈的有效媒介。
敏捷方法
极限编程(XP):在一些对费用控制严格的公司中使用,非常有效
水晶方法:探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运行上达到一种平衡
开放式源代码:程序开发人员在地域上分布很广【其它方法强调集中办公】
SCRUM:明确定义了的可重复的方法过程
功能(功用)驱动开发方法(FDD):编程开发人员分成两类,首席程序员和“类”程序员
ASD方法:其核心是三个非线性的、重叠的开发阶段:猜测、合作、学习
敏捷开发方法之SCRUM
产品负责人从相关处获取需求
从产品代办列表选取一部分任务
团队选择迭代完成工作
迭代周期一般是1-4周
每日站会、迭代评审会
方法 vs 模型
方法大一号,模型小一号
方法相对抽象,模型相对具体
逆向工程(★)
步骤
现有系统
再工程
逆向工程
逆向工程师设计的恢复过程
考虑新需求
通过逆向工程得到原有的需求,再添加新的需求
正向工程
新系统
逆向工程恢复层级
实现级:包括程序的抽象语法书、符号表、过程的设计表示
结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构
功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型
领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如实体关系模型
相关概念
重构
重构是指在同一抽象级别上转换系统描述形式
设计恢复
设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息
逆向工程
逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程
正向工程
正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量
再工程
再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤
需求工程
重要程度
需求开发(★★★)
需求管理(★★★)
UML4+1视图(★★★★)
UML图(★★★★★)
UML关系(★★★★)
概述
软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望
需求分析
包含了系统分析和需求工程
系统分析:从技术维度来分析,比如软件、硬件、网络等等
需求工程:从项目管理维度分析
需求工程
需求开发【技术维度】
需求获取
获取方法
收集资料
联合讨论会(JRP):各方都来,成本高,但效率也高
用户访谈:1v1或者1v3
书面调查:面做的更广
现场观摩
参加业务实践
阅读历史文档
抽样调查:数学统计方式,节省成本
分层
业务需求(整体全局)
用户需求(用户视角)
系统需求(计算机化)
功能需求
性能需求(非功能)
设计约束
项目管理维度(QFD)
基本需求(明示,常规需求)
期望需求(隐含),用户觉得该做的事,没有收到明确信号
兴奋需求(多余)
需求分析
结构化需求分析(SA)
数据字典
数据元素
数据结构
数据流
数据存储
加工逻辑
外部实体
行为模型
状态转换图
状态(初态、终态)
事件
数据模型
E-R图
实体
联系
功能模型
数据流图(DFD)
数据流
加工
数据存储
外部实体
面向对象需求分析(OOA-类的分类)
边界类
机器接口(API接口)
人机交互(用户界面)
控制类
应用逻辑
业务逻辑
数据访问逻辑
实体类
数据
UML
UML(统一建模语言):平台无关、语言无关
UML
构造块
事物
结构事物:最静态的部分,包括类、接口、协作、用例、活动类、构件、节点
行为事物:代表时间和空间上的动作,包括消息、动作次序、连接
分组事物:看成是个盒子,如包、构件
注释事物:UML模型的解释部分,描述、说明和标注模型的元素
关系
图
规则
公共机制
UML图
静态图(结构图)
类图:一组类、接口、协作和他们之间的关系
对象图:一组对象及它们之间的关系
构件图:一个封装的类和它的接口
部署图:软硬件之间的映射
制作品:系统的物理结构
包图:由模型本身分解而成的组织单元,以及他们之间的依赖关系
组合结构图
动态图(行为图)
用例图:系统与外部参与者的交互
顺序图:交互图,强调按时间顺序
通信图:交互图,也叫协作图
定时图:交互图,强调实际时间
活动图:类似程序流程图,并行行为
状态图:状态转换变迁
UML-4+1视图
逻辑视图
系统分析、设计人员
类与对象
实现视图
程序员
物理代码文件和组件
进程视图
系统集成人员
线程、进程、并发
部署视图
系统和网络工程师
软件到硬件的映射
用例视图
最终用户
需求分析模型
需求定义
严格定义法(瀑布模型)
所有需求都能够被预先定义
开发人员与用户之间能够准确而清晰地交流
采用图形/文字可以充分体现最终系统
原型法(原型)
并非所有的需求都能在开发前被准确说明
项目参加者之间通常都存在交流上的困难
需要实际的、可供用户参与的系统模型
有合适的系统开发环境
反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法
需求验证
需求评审
正式评审
非正式评审
需求测试
用户签字确认
验收标准之一
需求管理【管理维度】
变更控制
版本控制
需求跟踪
用户原始需求
软件需求
下游工作产品
正向跟踪:用户原始需求 => 软件需求 => 下游工作产品
反向跟踪:下游工作产品 => 软件需求 => 用户原始需求
需求跟踪矩阵
横向是用例,纵向是原始需求
如果用例没有对应的原始需求,那么该需求是一个兴奋需求
如果原始需求没有用例实现,那么该原始需求没有在用例中实现
需求变更管理过程
一旦形成需求基线,就不能随意改变
1、问题分析和变更描述
2、变更分析和成本计算
3、变更实现,形成新的需求
变更审批由CCB负责(变更控制委员会)
需求状态跟踪
其它
需求管理从需求基线支持需求开发
需求定义的产出是SRS(软件规格说明书),SRS经过评审后形成需求基线
评审由需求变更控制委员会来评审(CCB)
需求变更控制委员会由客户、项目经理、开发人员、监理组成
软件系统建模
逆向工程
现有系统(物理系统) => 物理模型 => 逻辑模型
物理系统通过模型化得到物理模型
物理模型通过抽象化得到逻辑模型
正向工程
逆向工程后得到的逻辑模型,通过调整优化,形成新的逻辑模型
逻辑模型实例化得到物理模型
物理模型通过具体化得到物理系统,从而形成新的系统
需求分析阶段对应的是逻辑模型
软件设计阶段对应的是物理模型
系统设计
界面设计(★★)
黄金三法则
置于用户控制之下
以不强迫用户进入不必要的或不希望的动作的方式来定义交互方式
提供灵活的交互
允许用户交互可以被中断和撤销
当技能级别增加时,可以使交互流水化,并允许定制交互
使用户隔离内部技术细节
设计应允许用户和出现在屏幕上的对象直接交互
减少用户的记忆负担
减少对短期记忆的要求
建立有意义的缺省
定义直觉的捷径
界面的视觉布局应该基于真实世界的隐喻
以不断进展的方式揭示信息
保持界面的一致性
允许用户将当前任务放入有意义的语境
在应用系列内保持一致
如过去的交互模型已建立起了用户期望,除非迫不得已的理由,不要改变它
软件设计
体系结构设计:定义软件系统各个主要部件之间的关系(架构设计、概要设计,层次会高一点)
数据设计:将模型转换成数据结构的定义,好的数据设计将改善程序结构和模块划分,降低过程复杂性(算法与数据结构)
接口设计(人机界面设计):软件内部,软件和操作系统以及软件和人之间如何通信
过程设计:系统结构部件转换成软件的过程描述
结构化设计(★★)
概要设计【外部设计】:功能需求分配给软件模块,确定每个模块的功能和调用关系,形成模块结构图,如子系统划分、模块划分、模块接口设计
详细设计【内部设计】:为每个具体任务选择适当的技术手段和处理方法,也就是每个模块内部的设计
结构化设计原则
模块独立:高内聚、低耦合
内聚:模块内,各个内容联系的紧密程度
耦合:模块间,联系的紧密程度
内聚类型
功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
顺序内聚:处理元素相关,而且必须顺序执行
通信内聚:所有处理元素集中在一个数据结构的区域上
过程内聚:处理元素相关,而且必须按照特定的次序执行
瞬时内聚(时间内聚):所包含的任务在同一时间间隔内执行
逻辑内聚:完成逻辑上相关的一组任务
偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务
耦合类型
非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现
数据耦合:一组模块借助参数表传递简单数据
标记耦合:一组模块通过参数传递记录信息(数据结构)
控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息
外部耦合:一组模块都能访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息
公共耦合:多个模块都访问同一个公共数据环境
内部耦合(内容耦合):一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块内部;两个模块有一部分程序代码重叠;一个模块有多个入口
保持模块的大小适中
多扇入,少扇出
深度和宽度均不宜过高
模块的四个要素
输入和输出:模块的输入来源和输出去向都是同一个调用者,即一个模块从调用者那儿取得输入,进行加工之后再把输出返回给调用者
处理功能:指模块把输入转换成输出所做的工作
内部数据:指仅供该模块本身引用的数据
程序代码:指用来实现模块功能的程序
面向对象设计(★★★★★)
设计模式基本上每年都会考
1、设计模式三种类型定位
2、设计模式分类
3、设计模式应用场景及特定
设计原则
单一职责原则:设计目的单一的类
开放封闭原则:对扩展开放,对修改封闭
里氏替换原则:子类可以替换父类(子类覆盖了父类方法时,不能子类替换父类)
依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,而不是实现编程
接口隔离原则:使用多个专门的接口比使用单一的接口要好
组合重用原则:要尽量使用组合,而不是继承关系达到重用目的
迪米特原则(最少知识原则):一个对象应当对其它对象有尽可能少的了解(对象提供给外部的权限尽可能的少)
设计模式
什么是设计模式?
针对某一类问题的成熟的、标准的解决方案
设计模式是解决特定问题的解决方案
设计模式是软件开发过程中复用已有解决方案的常见策略
模式(套路)
架构模式:软件设计中的高层决策,例如:C/S结构就属于架构模式,架构模式反映了开发软件系统过程中所做的设计决策
设计模式:主要关注软件系统的设计,与具体的实现语言无关
惯用法:是最低层的模式,与具体语言相关,例如引用计数是C++中的一种惯用法
分类定义
创建型模式:创建型模式主要用于创建对象,为设计类实例化新对象提供指南
结构型模式:结构型模式主要用于处理类或对象的组合,对类如何设计以形成更大的结构提供指南
行为型模式:行为型模式主要用于描述类或对象的交互以及职责的分配,对类之间交互以及分配责任的方式提供指南
分类
创建型模式:创建对象
工厂方法(Factory Method)模式【纯类模式】
定义了创建对象的接口,它允许子类决定实例化哪个类【动态生产对象】
返回的是一个通用的接口,也就是涉及到继承和多态
抽象工厂(Abstract Factory)模式
提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类【生产成系列对象】
通过不同的工厂来创建不同的对象
原型(Prototype)模式
允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象,通过拷贝原型对象来创建新对象【克隆对象】
单例(Singleton)模式
确保一个类只有一个实例,并且提供了对该类的全局访问入口【单实例】
构建器(Builder)模式
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示【复杂对象构造】
结构型模式:更大的结构
适配器(Adaptor)模式【即是对象模式又是纯类模式】
将一个类的接口转换成用户希望得到的另一种接口,它使原本不相容的接口得以协同工作【转换接口】
桥接(Bridge)模式
将一个复杂的组件分成两个独立的但又相关的继承层次结构,将类的抽象部分和它的实现部分分离开来,使它们可以独立变化【继承树拆分】
防止内部组合爆炸,比如A类有五种类型,B类有五种类型,如果用一个C类去实现组合,那么就有25种,如果拆分开,我们只需要维护10种类型即可
组合(Composite)模式
创建树形层次结构来改变复杂性,同时允许结构中的每一个元素操作同一个接口,用于表示“整体-部分”的层次结构【树形目录结构】
组合模式和组合动作(组合和继承的组合)不是一回事,很多模式都会用到组合动作,比如桥接就用到了组合
装饰(Decorator)模式
在不修改对象外观的情况下添加或者删除对象功能,即动态地给一个对象添加一些额外的职责【动态附加职责】
外观(Facade)模式
子系统中的一组接口提供了一个统一的接口【对外统一接口】
把内部的单一接口拆分成多个接口,然后再通过外观模式,提供对外面向用户的统一接口,和单一职责原则不冲突,这是一个演化过程
享元(Flyweight)模式
可以通过共享对象减少系统中低等级的、详细的对象数目,提供支持大量细粒度对象共享的有效方法【汉字编码】
代理(Proxy)模式
为控制对初始对象的访问提供了一个代理或者占位符对象【快捷方式】
代理对象帮助解决复杂的问题,使用者不必关心,比如租房平台的中介经理,文件快捷方式等等
行为型模式:交互及职责分配
职责链(Chain Responsibility)模式
可以在系统中建立一个连,这样消息就可以在首先接收到它的级别处被处理,或者可以定位到可以处理它的对象【传递职责】
比如审批流程,某一个问题有专门的人负责处理,通过流程往下传递即可
命令(Command)模式
在对象中封装了请求,这样就可以保存命令,将命令传递给方法及像任何其它对象一样返回改命令【日志记录,可撤销】
解释器(Interpreter)模式【纯类模式】
可以解释定义其语法表示的语言,还提供了用来表示解释语言中的语句的解释器【虚拟机的机制】
相对于虚拟机风格,解释器是局部的,虚拟机是全局的
迭代器(Iterator)模式
为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合,并与之相分离【数据集】
不仅仅是next,还有first、last等等方法
中介者(Mediator)模式
通过引入一个能够管理对象间消息分布的对象,简化了系统中对象的通信【不直接引用】
通过中介者将多对多关系变为一对多关系
备忘录(Memento)模式
保持对象状态的“快照”,这样对象可以在不向外界公开其内容的情况下返回到它的最初状态【游戏存档】
观察者(Observer)模式
为组件向相关接收方广播消息提供了灵活的方法,定义对象间的一种一对多的依赖关系【订阅、广播、联动】
状态(State)模式
允许一个对象在其内部状态改变时改变它的行为【状态变成类】
策略(Strategy)模式
定义一系列算法,把他们一个个封装起来,并且使它们之间可以相互替换,从而让算法可以独立于使用它的用户而变化【多方案切换】
比如优惠方案,有多种方案,通过策略将方案对应的算法封装好,调用选择其中一种即可
模板方法(Template Method)模式【纯类模式】
提供了在不重写方法的前提下,允许子类重载部分方法的方法【框架】
在框架层面去替换一些东西,比如方法
访问者(Visitor)模式
提供了一种方便的、可维护的方法来表示在对象结构元素上要进行的操作【数据与操作分离】
其他分类
对象模式
以组合的方式复用代码
除了工厂方法、解释器、模板方法这三种,其余的都是对象模式
类模式
以继承的方式复用代码
工厂方法、适配器、解释器、模板方法这四种模式为类模式
案例分析
接口是什么?
哪些类实现了这个接口
从而解决了什么问题
软件测试
软件测试方法(★★)
动态测试【计算机运行】
白盒测试【结构测试】
内部逻辑可以看到
主要用于单元测试阶段
控制流测试【逻辑覆盖测试,路径测试】
数据流测试
程序变异测试【错误驱动测试】
黑盒测试【功能测试】
内部逻辑看不到
主要用于集成测试、确认测试和系统测试阶段
等价类划分:不同等价类,揭示不同的问题;有效等价类/无效等价类
边界值分析:1<=x<=10,可取x为0、1、10、11作为测试数据
错误推测:依靠测试人员的经验和直觉
因果图
灰盒测试
静态测试【人工监测和计算机辅助分析】
桌前检查
代码审查
控制流分析:是否存在没有使用的语句/无法到达的语句/调用并不存在的子程序
数据流分析:引用未定义的变量,对以前未使用的变量再次赋值
接口分析:模块之间接口的一致性、子程序和函数之间的接口一致性、函数形参与实参的数量、顺序、类型的一致性
表达式分析:括号不匹配、数据引用越界、除数为0等等
代码走查
测试阶段
单元测试:依据【详细设计】,模块测试,模块功能、性能、接口等等
集成测试:依据【概要设计】,模块间的接口
策略
一次性组装【风险高】
增量式组件【测试全面】
自顶向下【需要桩模块】
自底向上【需要驱动模块】
混合式【桩模块和驱动模块都需要】
系统测试:依据【需求文档】,在真实环境下,验证完整的软件配置项能否和系统正确连接
功能测试
性能测试
负载测试:各种工作负载下系统的性能
压力测试:系统的瓶颈或不能接受的性能点
强度测试:系统资源特别低【资源受限】的情况下运行
容量测试【并发测试】:同时在线的最大用户数
可靠性测试:MTTF类的测试
健壮性测试
用户界面测试
安全性测试
安装与反安装测试
确认测试:依据【需求文档】,验证软件与需求的一致性,内部确认测试、Alpha测试、Beta测试、验收测试
回归测试:测试软件变更之后,变更部分的正确性和对变更需求的符合性
面向对象测试
算法层(单元测试):包括等价类划分测试、组合功能测试(基于判定表的测试)、递归函数测试和多态消息测试
类型(模块测试):包括不变式边界测试、模态类测试和非模态类测试
模板层/类树层(集成测试):包括多态服务测试和展平测试
系统层(系统测试)
软件调试方法(★)
蛮力法:主要思想是“通过计算机找错”,低效、耗时
回溯法:从出错处人工沿控制流程往回追踪,直至发现错误的根源,复杂程序由于回溯路径多,难以实施
原因排除法:主要思想是演绎和归纳,用二分法实现
软件测试 vs 软件调试
测试目的是找出存在错误;调试时定位错误并修改程序,以修正错误
测试从一个已知的条件开始,使用预先定义的过程,有预知的结果;调试从未知的条件开始,结束的过程不可预计
测试过程可以事先设计,进度可以事先确定;调试不能描述过程或持续时间
系统运行与软件维护
遗留系统与系统转换计划(★★)
遗留系统演化策略
技术水平:技术是否过时
业务价值:系统能不能满足业务需求
高水平高价值【改造】:改造包括系统功能的增强和数据库模型的改造两个方面
高水平低价值【集成】:针对信息孤岛
低水平高价值【继承】:开发新系统时,需要完全兼容遗留系统的功能模型(UML)和数据模型(ER)
低水平低价值【淘汰】:
新旧系统转换策略
直接转换策略
并行转化策略【最费钱】
分段转换策略【两者的中和】
数据转换与迁移
ETL:抽取、转换、装载
软件维护(★★)
正确性维护【修正bug】:识别和纠正软件错误/缺陷,测试不可能发现所有错误
适应性维护【应变】:指使应用软件适应环境变化【外部环境、数据环境】而进行的修改
完善性维护【新需求】:扩充功能和改善性能而进行的修改
预防性维护【针对未来】:为了适应未来的软硬件环境的变化,应主动增加预防性的新功能,以使系统适应各类变化而不被淘汰,比如【专用】改为【通用】
软件架构设计
软件架构的概念(★★★)
架构的本质
1、软件架构为软件系统提供了一个结构、行为和属性的高级抽象
2、软件架构风格是特定应用领域的惯用模式,架构定义一个词汇表和一组约束
架构的作用
1、软件架构是项目干系人进行交流的手段
2、软件架构是可传递和可复用的模型,通过研究软件架构可能预测软件的质量
3、软件架构使推理和控制的更改更加简单,有助于循序渐进的原型设计,可以作为培训的基础
软件架构 = 软件体系结构
架构是需求分析和软件设计之间的桥梁
架构设计就是需求分配,即将满足需求的职责分配到组件上
架构的“4+1”视图
逻辑视图:最终用户,功能需求
开发视图:编程人员,软件管理
进程视图:系统集成人员,性能、可扩充性、吞吐量等等
物理视图:系统工程人员,系统拓扑、安装、通信等
场景视图
非功能性需求
操作性需求(Operational Requirements):指系统完成任务所需的操作环境要求及如何满足系统将来可能的需求变更的要求
性能需求(Performance Requirements):针对系统性能要求的指标。常见的包括:响应时间、吞吐率
安全性需求(Security Requirements):防止系统崩溃和保证数据安全所需要采取的保护措施或预防措施
文化需求(Cultural Requirements):使用本系统的不同用户群体对系统提出的特有要求
软件架构风格(★★★★★)
定义:架构风格定义了用于描述系统的术语表和一组指导构建系统的规则
定义:描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义
定义:描述特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义
1、数据流风格【Data Flow】
子风格
批处理【Batch Sequential】
大量整体数据、无需用户交互
管道-过滤器【Pipes and Filters】
流式数据、弱用户交互
以数据为中心,一步一步去处理
优点
1、松耦合【高内聚-低耦合】
2、良好的重用性/可维护性
3、可扩展性【标准接口适配】
4、良好的隐蔽性
5、并行支持
缺点
1、交互性较差
2、复杂性较高
3、性能较差(每个过滤器都需要解析与合成数据)
数据与处理紧密关联,调整处理流程需要系统重新启动
实例
传统编译器
网络报文处理
2、调用/返回【Call/Return】
主程序/子程序【Main Program and Subroutine】:面向过程
面向对象【Object Oriented】:对象的方法调用
面向对象风格:面向对象架构风格的特征是将数据表示和基本操作封装在对象中。这种模式的构件是对象,对象维护自身表示的完整性,对象之间通过消息机制进行通信,对象交互时需要知道彼此的标识,通过对象之间的协作完成计算过程。
分层架构【Layered System】
层与层之间的方法调用,比如系统分为核心层、基本工具层、用户系统层
优点
1、良好的重用性,只要接口不变,可用在别处
2、可维护性好
3、可扩展性好,支持递增设计
缺点
1、并不是每个系统都方便分层
2、很难找到一个合适的、正确的层次抽象方法
3、不同层次之间的耦合度高的系统很难实现
特点
各个层次的组件形成不同功能级别的虚拟机
多层相互协同工作,而且实现透明
3、独立构件风格【Independent Components】
子风格
进程通信【Communicating Process】
事件驱动系统【Event System】,也称为隐式调用架构风格
通过事件管理机制来管理构件的调用,触发事件,通知执行
优点
1、松耦合
2、良好的重用性/可修改性//可扩展性
缺点
1、构件放弃了对系统计算的控制,一个构件触发事件时,不确定其它构件是否会响应它,而且事件注册的构件也不能保证顺序调用
2、数据交换的问题
3、过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理就存在问题
特点
系统由若干个子系统构成且成为一个整体
系统有统一的目标
子系统有主从之分
每一个子系统有自己的事件收集和处理机制
4、虚拟机风格【Virtual Machine】
子风格
解释器【Interpreter】
适用于需要“自定义规则”的场合
规则系统【Rule-based System】
适用于专家系统
特点是在解释器的基础上增加经验规则
解决高度自定义场景的需求,比如工作流引擎,灵活性很高
优点是可以灵活应对自定义场景
缺点是复杂度较高
5、以数据为中心【Data-centered】
又称为仓库风格,包含据数据库架构和黑板架构子风格
数据库系统【Database System】
特点是以数据为中心,数据存储在中心仓库,处理流程独立,支持交互式处理
构件主要有两大类,一个是中央共享数据源,保存当前系统的数据状态;另一个是多个对处理元素,处理圆度对数据元素进行操作
优点:数据处理组件之间一般无依赖关系,可并发调用,性能高
缺点:数据与处理分离,需要加载数据,性能低
黑板系统【Blackboard System】
黑板架构包括知识源、黑板和控制3个部分,知识源包括若干干独立计算的不同单元,提供解决问题的知识
它响应黑板上的变化,也只修改黑板;黑板是一个全局数据库,包含解域的全部状态,是知识源互相作用的唯一媒介
知识源响应通过黑板状态的变化来控制,黑板架构风格通常应用于对解决问题没有确定性算法的系统中,如信号处理、问题规划以及编译器优化等软件系统的设计中
特点:以数据为中心的基础上,使用中心数据触发业务逻辑部件
优点:可更改性和可维护性;可重用的知识源;容错性和健壮性
缺点:测试困难;不能保证有好的解决方案;难以建立好的控制策略;低效;开发困难;缺少并发机制
实例:语音识别、知识推理、图像处理
超文本系统【Hypertext System】
架构风格是混合用的,一个系统不一定只有一个架构风格
闭环控制架构【过程控制】
适用于嵌入式系统,用于解决简单的闭环控制问题
经典应用:空调控温,定速巡航
环路控制架构风格:控制环路架构风格是将过程输出的指定属性维护在一个特定的参考值(设定点)。控制环路风格包括过程变量、被控变量、输入变量、操纵变量和设定点等构件,通过收集实际和理想的过程状态信息,并能调整过程变量使得实际状态趋于理想状态。
C2风格
构件和连接件都有一个顶部和底部
构件的顶部要连接到连接件的底部,构件的底部要连接到连接件的顶部,构件之间不允许直连
一个连接件可以和任意数目的其它构件和连接件连接
当两个连接件进行直接连接时,必须由其中一个的底部到另一个的顶部
一层构件,一层连接件
层次架构风格
两层C/S:胖客户端(业务逻辑和界面),服务器(数据库),升级维护困难
三层C/S:瘦客户端(仅界面),应用服务器(业务逻辑),服务器(数据库),业务逻辑变化不再需要更新客户端
三层B/S:零客户端(浏览器),WEB应用服务器(业务逻辑),服务器(数据库),完全不需要客户端,升级维护容易
三层B/S
表现层:MVC => MVP => MVVM
中间层
数据访问层:ORM
数据层
MVC架构风格
定义:用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
Model(模型):应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据
View(视图):应用程序中处理数据显示的部分,通常视图是依据模型数据创建的
Controller(控制):应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
J2EE体系结构中
视图(View):JSP
控制(Controller):Servlet
模型(Model):Entity Bean、Session Bean,也就是EJB
MVP架构风格
MVP是MVC的变种
MVP实现了V与M之间的解耦(V不直接使用M,修改V也不会影响M)
MVP更好的支持单元测试
MVP中V要处理界面事件,业务逻辑在P中,MVC中界面事件由C处理
MVP杜绝了跨层的调用关系,V和M不会直接调用,都通过P来交互
MVVM架构风格
View:HTML、CSS、模板文件
ViewModel:JS、Runtime、Compiler
Model:业务逻辑处理(Java/C#/NodeJS等等),数据库(MySQL/Oracle/MongoDB)
RIA(富互联网)架构风格
【富】客户端,零时下载客户端
优点:反应速度快、易于传播、交互性强
技术:Ajax、Flex、Bindows、HTML5、小程序
面向服务架构(SOA)
服务是一种为了满足某项业务需求的操作、规则等的逻辑组合,它包含一些列有序活动的交互,为实现用户目标提供支持
I/O处理 => 应用管理 => 企业服务总线 => 服务1 + 服务2 + ...
通过企业服务总线(ESB),将所有的服务串起来,比如历史遗留系统,我们可以将其封装成一个服务集成进新系统
单个服务内部包含服务接口,逻辑层、数据访问层、数据库
特点:松散耦合、粗粒度、标准化接口
对象 => 构件 => 服务 => SOA
服务构件 vs 传统构件
服务构件粗粒度,传统构件细粒度居多
服务构件的接口是标准的,主要是WSDL接口,传统构件常以具体API形式出现
服务构件的实现与语言无关,传统构件绑定某种特定语言
服务构件可以通过构件容器提供QoS的服务,传统构件完全由程序代码直接控制
SOA的实现方式 - Web Service
服务注册中心:描述服务
服务请求者
服务提供者:服务,服务描述
查找:服务请求时,会通过服务注册中心查找对应的服务,然后跟请求者绑定
发布:服务提供者会将自己的服务注册到服务中心,以此提供服务
特点
底层传输
通信服务协议层
服务描述层
服务层
业务流程层
服务注册层
SOA的实现方式 - ESB
服务请求者与服务提供者之间解耦
ESB是传统中间件技术与XML、WSDL等技术结合的产物,主要支持异构系统集成。
ESB基于内容的路由和过滤,具备复杂数据的传输能力,并可以提供一系列的标准接口。
ESB基于内容的路由和过滤,具备复杂数据的传输能力,并可以提供一系列的标准接口。
主要功能
应用程序的位置透明性
传输协议转换
消息格式转换
消息路由
消息增强
安全支持
监控和管理
结构
客户端:Web应用、MIS应用
基础架构服务:用户交互服务(单点登录/权限控制)、业务支持服务(服务注册/服务管理/业务流程编排)
企业服务总线:数据转换、消息传输、动态路由
应用服务连接:数据接口、应用程序接口
企业数据、企业应用
特点
提供位置透明性的消息路由和寻址服务
提供服务注册和命名的管理功能
支持多种的消息传递规范
支持多种可以广泛使用的传输协议
支持多种数据格式及相互转换
提供日志和监控功能
关键技术
1、发现服务:UDDI、DISCO
2、描述服务:WSDL、XML Schema
3、消息格式层:SOAP、REST
4、编码格式层:XML、DOM、SAX
5、传输协议层:HTTP、TCP/IP、SMTP等
WSDL就是Web Service接口对应的WSDL文件,该文件通过XML格式说明如何调用,可以看做Web Service的接口文档
微服务
是一种很小的服务,是属于面向服务架构的一种
特点
小服务【且专注于做某一件事】
轻量级的通信机制
松耦合
独立测试
独立部署【简单部署】
独立运行【每个服务独立在其进程中】
支持异构【如每个服务使用不同的数据库】
更好的可用性与弹性
化整为零,易于小团队开发
面临的挑战
分布式环境下的数据一致性【更复杂】
测试的复杂性【服务间依赖测试】
运维的复杂性
SOA vs 微服务
微服务:能拆分的就拆分
SOA:是整体的,服务能放一起的都放一起
SOA:是整体的,服务能放一起的都放一起
微服务:纵向业务划分
SOA:水平分多层
SOA:水平分多层
微服务:由单一组织负责
SOA:按层级划分不同部门的组织负责
SOA:按层级划分不同部门的组织负责
微服务:细粒度
SOA:粗粒度
SOA:粗粒度
微服务:两句话可以解释明白
SOA:几百字只相当于SOA的目录
SOA:几百字只相当于SOA的目录
微服务:独立的子公司
SOA:类似大公司里面划分了一些业务单元(BU)
SOA:类似大公司里面划分了一些业务单元(BU)
微服务:组件小
SOA:存在较复杂的组件
SOA:存在较复杂的组件
微服务:业务逻辑存在于每一个服务中
SOA:业务逻辑横跨多个业务领域
SOA:业务逻辑横跨多个业务领域
微服务:使用轻量级的通信方式,如HTTP
SOA:企业服务总线(ESB)充当了服务之间的通信角色
SOA:企业服务总线(ESB)充当了服务之间的通信角色
云原生架构
基于分布部署和统一运管的分布式云,以容器、微服务、DevOps等技术为基础,建立的一套云技术产品体系
包含的技术:微服务、容器、持续交付、DevOps
本质是:Oncloud(上云) => Incloud(到云里面去)
云原生架构设计原则
服务化原则
弹性原则
可观测原则
韧性原则
自动化原则
普通应用 vs 云原生应用
操作系统:操作系统;云原生操作系统
工具与开发库:Shell/Java/标准类库/配置管理/软件包管理;服务网络istio/AI计算Kubeflow/无服务Knative/应用管理OAM/镜像仓库
API与系统服务(POSIX/系统服务/Window管理器);Kubernetes Resource(工作负载/存储卷/服务发现/路由)
内核(资源管理、进程管理、安全模型、I/O管理);Kubernetes Core(资源调度、Pod管理、安全模型、CRD/Controller、基础设施资源抽象)
硬件;公有云、专有云、边缘计算
开发步骤对比
开发模式
普通应用:瀑布模式,串行开发
云原生应用:水平切分,并行开发,更敏捷
技术架构
普通应用:单体架构,耦合性强,灵活性差
云原生应用:纵向切分微服务,横向切分前后端,灵活性高
开发技能
普通应用:JSP、MVC、Java、Spring
云原生应用:Vue、MVVM、Java、Springboot
团队协作
普通应用:一个团队前后端都搞定
云原生应用:前后端两个团队,约定接口,独立开发
部署
普通应用:服务器安装部署全部自己搞定,耗时费力,容易出错
云原生应用:服务开通即用,部署更快,稳定性高,省时省力
运维
普通应用:实体定位比较明确,对运维技能要求一般
云原生应用:SDX,比较抽象,对运维技能要求高,由云厂商负责
MDA(模型驱动架构)
模型驱动架构,类似软件形式化开发方法
MDA:Model Driven Architecture
Model:客观事物的抽象表示
Architecture:构成系统的部件、连接件及其它约束规则
Model-Architecture:使用模型完成软件的分析、设计、构建、部署、维护等各开发活动
主要目标:Portability(可移植性),Interoperability(互通性),Reusability(可重用性)
核心模型
平台独立模型(PIM):具有高抽象层次、独立于任何实现技术的模型
平台相关模型(PSM):为某种特定实现技术量身定做,让你用这种技术中可用的实现构造来描述系统的模型,PIM会被变换成一个或多个PSM
代码Code:用源码对系统的描述,每个PSM都将被变换成代码
PIM(Platform Independent Models)、PSM(Platform Specific Models)
ADL
ADL是一种形式化语言,它在底层语义模型的支持下,为软件系统的概念体系结构建模提供了具体的语法和概念框架
如:Aesop、MetaH、C2、Rapide、SADL、Unicon等
三个基本元素
构件:计算或数据存储单元
连接件:用于构件之间交互建模的体系结构构造块,及其支配这些交互的规则
架构配置:描述体系结构的构件与连接件的连接图
特定领域软件架构(★★★)
定义:特定领域架构以一个特定问题为对象,形成有领域参考模型、参考需求、参考架构等组成的开发基础架构,支持一个特定领域中多个应用的生成
基本活动及产出物
领域【分析】:建立领域模型
领域【设计】:获得DSSA
领域【实现】:开发和组织可复用信息
DSSA类型
垂直域:相同领域,深入
水平域:不同领域,平移
参与人员
1、领域专家:有经验丰富的用户,从事该领域中系统的需求分析、设计、实现以及项目管理的有经验的软件工程师等
2、领域分析人员:领域分析人员应由具有知识工程师背景的有经验的系统分析员来担任
3、领域设计人员:领域设计人员应由具有经验的软件设计人员来担任
4、领域实现人员:领域实现人员应由有经验的程序设计人员来担任
领域分析
领域知识资源:技术文献、已完成的软件项目、用户评述、专家建议、当前及未来的需求
输出:分类方法、标准、功能模型、领域语言
建立过程(并发/递归/反复/螺旋)
定义领域范围
定义领域特定的元素
定义领域特定的设计和实现需求约束
定义领域模型和架构
产生、收集可复用的产品单元
DSSA必备特征
1.一个严格定义的问题域和/或解决域。即要对该系统的问题域和/或解决域进行严格的定义,不能跨越系统边界。
2.具有普遍性,使其可以用于领域中某个特定应用的开发。即设计出来的软件架构部分或全部能够应用于烟草行业的某个子系统。
3.对整个领域的合适程度的抽象。主要考虑抽象出来的模块、组件的粒度是否合适,是否适应于烟草行业的某些部门。
4.具备该领域固定的、典型的在开发过程中可重用的元素。
三层次模型
领域开发环境:领域架构师
领域特定的应用开发环境:应用工程师
应用执行环节:操作员
基于架构的软件开发(★★★★)
ABSD是架构驱动,即强调由业务、质量和功能需求的组成驱动架构设计
ABSD方法有三个基础
第一个是功能分解,在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术;
第二个是通过选择架构风格来实现质量和业务需求;
第三个是软件模板的使用
视角与视图:从不同的视角来检查,所以会有不同的视角,强调用视角与视图来描述架构
用例用来捕获功能需求、特定场景【刺激、环境、响应】用来捕获质量需求,采用用例和质量场景来描述需求
开发过程
架构需求
需求获取(需求库)
生成类图
对类进行分组
把类打包成构件
需求评审
架构设计
提出架构模型
映射构件
分析构件相互作用
产生架构
设计评审
架构文档化
主要输出结果是架构规则说明书和测试架构需求的质量设计说明书这两个文档
文档的完整性和质量是软件架构成功的关键因素
注意事项
文档必须要从使用者的角度进行编写
必须分发给所有与系统有关的开发人员
且必须保证开发者手上的文档是最新的
架构复审
架构复审【架构评估】的主要目的是标识潜在的风险,及早发现架构设计中的缺陷和错误
架构实现
架构演化
软件质量属性(★★★★★)
性能
性能(performance)是指系统的响应能力,即要经过多长时间才能对某个事件作出响应,或者在某段时间内系统所能处理的事件的个数
例如
1、同时支持1000并发
2、响应时间小于1s
3、显示分辨率达到4k
性能战术(提升性能的维度)
资源需求(节流)
提高计算效率;减少计算开销;管理事件率;控制采样频率
资源管理(开源)
引入并发;支持多个副本;增加可用资源
资源仲裁(合理调度)
资源调度策略:先进/先出;固定优先级;动态优先级;静态调用
可靠性
容错
健壮性
可用性
可用性(availablility)是指系统能够正常运行的时间比例,经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示
例如
1、主服务器故障,一分钟内切换至备用服务器
2、系统故障,1小时内修复
3、系统支持7 x 24小时
可用性战术
错误检测
命令/响应;【Ping/Echo】;心跳;异常
错误恢复
表决;冗余【主动/被动】;备件
错误预防
进程监视器;事务;从服务器删除
安全性
安全性(security)是指系统在向合法用户提供服务的同时,能够阻止非授权用户使用的企图或拒绝服务的能力,安全性又可划分为机密性、完整性、不可否认性及可控性等特性
例如
1、可抵御SQL注入攻击
2、对计算机的操作都有完整的记录
3、用户信息数据库授权必须保证99.9%可用
安全性战术
抵抗攻击
身份验证;用户授权;数据加密;数据完整性;限制暴露;限制访问
检测攻击
入侵检测
从攻击中恢复
识别:审计追踪
恢复:冗余【与可用性重叠】
可修改性
可修改性(modifiability)是指能够快速地以较高的性能价格比对系统进行变更的能力,通常以某些具体的变更为基准,通过考察这些变更的代价来衡量可修改性
例如
1、更该系统报表模块,必须在2人周内完成
2、对web界面风格进行修改,必须在4人月内完成
可修改性战术
局部化修改
维持语义一致性;预期期望的变更;泛化模块;限制可能的选择;抽象通用服务
防止连锁反应
隐藏信息;维持现有的接口;限制通信路径;使用仲裁者
推迟绑定时间
运行时注册;配置文件;多态;组件更换;遵守已定义的协议
包含
可维护性
可扩展性
结构重组
可移植性
易用性
易用性关注的是对用户来说完成某个期望任务的容易程度和系统所提供的的用户支持的种类
例如
1、界面友好
2、新用户学习使用系统时间不超过2小时
可测试性
软件可测试性是指通过测试揭示软件缺陷的容易程度
例如:提供远程调试接口,支持远程调试
功能性
可变性
互操作性
除了以上质量属性分类,还有别一些分类方式,不同的标准分类不一样
软件架构评估(★★★★)
问题
为什么要进行架构评估?
架构评估到底评什么?主要是评估质量属性
架构评估怎么评?
另外一个维度
敏感点:是一个或多个构件(或多个构件之间的关系)的特性,它能影响系统的某个质量属性
权衡点:是影响多个质量属性的特性,是多个质量属性的敏感点
风险点:是指架构设计中潜在的、存在问题的架构决策所带来的隐患
非风险点:是指不会带来隐患,一般以“XXX要求是可实现(或接受)的”方式表达
例如
1、对交易请求处理时间的要求将影响系统的数据传输协议和处理过程的设计(敏感点)
2、假设每秒钟用户请求的数量是10个,处理请求的时间为30ms,则“在1秒内完成用户的交易请求”这一要求可以实现(非风险点)
3、目前对系统信用卡支付业务逻辑的描述尚未达成共识,这可能导致部分业务功能模块的重复,影响系统的可修改性(风险点)
4、更改加密的级别将对安全性和性能产生影响(权衡点)
评估方法
基于调查问卷(检查表)的方式
过于主观
基于度量的方式
过于强调量化,很难实现量化打分
基于场景的方式
特性对比
通用性:调查问卷(通用)、检查表(特定领域)、场景(特定系统)、度量(通用或特定领域)
评估者对架构了解程度:调查问卷(粗略了解)、检查表(无限制)、场景(中等了解)、度量(精确了解)
实施阶段:调查问卷(早)、检查表(中)、场景(中)、度量(中)
客观性:调查问卷(主观)、检查表(主观)、场景(较主观)、度量(较客观)
基于场景分析法(SAAM)
特点:最初用于分析架构可修改性,后扩展到其他属性
处理流程
输入:问题描述 => 需求分析 => 需求说明 => 架构设计 => 架构描述
输出
场景开发
架构描述
单个场景评估
场景交互评估
总体评估
架构权衡分析法(ATAM)
特点:在SAAM基础上发展起来的,主要针对性能、实用性、安全性、可修改性,在系统开发之前,对这些质量属性进行评价和折中
行动计划
第一阶段:场景和需求收集
1、收集场景
2、收集需求/约束/环境
第二阶段:架构视图和场景实现
3、描述架构视图
4、实现场景
第三阶段:属性模型构造和分析
5、特定属性分析(优秀的单一理论)
第四阶段:折中
6、标志敏感度
7、标志折中
折中有属性折中,也有场景之间的优先级折中
质量效用树
性能
数据延迟
把客户数据库的存储延迟减小到200ms
提供实时视频图像
交易吞吐量
使认证服务器的平均吞吐量最大化
可修改性
新产品目录
商业产品的改变
以小于20人月的工作量添加CORBA中间件
以小于4人周的工作量更改Web用户界面
可用性
硬件故障
若站点1断电,要求3秒内将任务重定向到站点3
若磁盘出现故障,要在5分钟内重新启动
要在1.5分钟内检测并恢复网络
商业软件故障
安全性
数据机密性
信用卡交易在99.999%的时间内是安全的
客户数据库认证在99.999%时间内能正常工作
数据完整性
成本效益分析法(CBAM)
注意
架构评估方法不是精确的评估方法
评估的是架构,不是代码
软件产品线(★★★)
领域资源积累,融合软件架构 + 领域工程 + DSSA,就形成了软件产品线,特定领域的软件产品就可以像流水线一样生产出来
核心资源、产品集合、过程驱动、特定领域、技术支持、以架构为中心
双生命周期模型
领域工程:现有系统需求 => 领域分析 => 领域设计 => 领域实现
应用工程:新系统需求 => 需求分析 => 系统设计 => 系统实现 => 新系统
把共性的东西做成基础版的产品,再融合用户新的一些需求,通过二次开发,走应用工程的方式实现最终的新系统
软件产品线的建立方式
演化方式
基于现有产品
基于现有设计产品的架构,经演化现有架构,开发产品线构件
全新产品线
产品线核心资源随产品新成员的需求而变化
革命方式
基于现有产品
核心资源的开发基于现有产品集的需求和可预测的、将来需求的超集
全新产品线
开发满足所有预期产品线成员的需求的核心资源
4种方式
将现有产品演化为产品线(现有产品演化)
用软件产品线替代现有产品集(现有产品革命)
全新软件产品线的演化(全新产品演化)
全新产品线的开发(全新产品革命)
组织结构
组织结构类型
设立独立的核心资源小组
不设立独立的核心资源小组
动态的组织结构
SEI推荐组织结构划分
1、市场人员(售前)是产品线和产品能力、客户需求之间的沟通桥梁
2、核心资源组(产品组)负责架构和其他核心资源的开发
3、应用组(项目组)负责交付给客户的系统开发
4、管理者负责开发过程的协调、商务计划等
要成功实施产品线,主要取决于一下因素
对该领域具备长期和深厚的经验
一个用于构建产品的好的核心库
好的产品线架构
好的管理(软件资源、人员组织、过程)支持
构件与中间件技术(★★★★)
软件复用
软件复用【重用】是多次不同的软件开发过程中重复使用相同或相似【软件元素】的过程
软件元素:需求分析文档、设计过程、设计文档、程序代码、测试用例、领域知识
复用的历史发展路线:函数库(结构化时代) => 类库(框架,多个类的组合) => 构件库 => 服务库
复用的维度
水平复用:不分行业领域,通用
垂直复用:分行业领域,专用
构件的定义
定义1:软件构件是一种组装单元,它具有规范的接口规约和显式的语境依赖,软件构件可以被独立地部署,并由第三方任意地组装
定义2:构件是某系统中有价值的、几乎独立的、并可替代的一个部分,它在良好定义的体系结构语境内满足某清晰的功能
定义3:构件是一个独立发布的功能部分,可以通过其接口访问它的服务
特性
模块的特性
结构化开发的产物
对象的特性
1、一个实例单元,具有唯一的标志
2、可能具有状态,此状态外部可见
3、封装了自己的状态和行为
构件的特性
1、独立部署单元
2、作为第三方的组装单元
3、没有(外部的)可见状态
其它
构件是一组通常需要同时部署的原子构件
大多数原子构件都是属于某一个构件家族,不可拆分部署
由于构件可以单独部署,所以构件能跟它【所在的环境及其他构件完全分离】
一个原子构件是【一个模块】和【一组资源】
模块是一组类和可能的非面向对象的结构体,比如过程或者函数
资源:资源是外部化的不可更改的对象,可以包含代码资源,进而包含模块
构件分类(从构件外部形态来看)
1、独立而成熟的构件:已在实际运行环境多次检验,该类构件隐藏了所有的接口,用户只需用规定好的命令进行使用,例如:数据库管理系统和操作系统等
2、有限制的构建:有限制的构件提供了接口,指出使用的条件和前提,这种构件在装配时,会产生资源冲突、覆盖等影响,在使用时需要加以测试,例如:各种面向对象程序设计语言中的基础类库等
3、适应性构件:适应性构件进行了包装或使用了接口技术,把不兼容性、资源冲突等进行了处理,可以直接使用,这种构件可以不加修改地使用在各种环境中,例如ActiveX等
4、装配的构件:装配的构件在安装时,已经装配在操作系统、数据库管理系统或者信息系统的不同层次上,使用胶水代码就可以进行连接使用,目前一些软件商提供的大多数软件产品都属于这一类
5、可修改的构建:对原构件修改错误、增加新功能,可以利用重新“包装”或写接口来实现构件的版本替换,这种构件在应用系统开发中使用的比较多
构件复用的过程
检索与提取构件
1、基于关键字的检索
特点:树形或有向无回路图结构
2、刻面检索法
特点:利用Facet描述构件执行的功能、被操作的数据、构件应用的语境或者任意其它特征
3、超文本检索法
特点:按照人类的联想思维方式任意跳转到包含相关概念或构件的文档
理解与评价构件
1、要复用构件,准确地理解构件至关重要,特别是对构件修改使用时
2、为达到目的,必须要求构件的开发过程遵循公共标准
3、一般构件库的文档中全面而准确地说明一下内容:
构件的功能与行为、相关的领域知识、可适应性约束条件与例外情形、可以预见的修改部分及修改方法
构件的功能与行为、相关的领域知识、可适应性约束条件与例外情形、可以预见的修改部分及修改方法
修改构件
1、理想状态时直接复用构件库中现成的构件,但大多数情况下,必须对构件进行或多或少的修改,以应对新需求
2、为了减少构件修改的工作量,要求开发人员尽量使用构件的功能、行为和接口设计更为抽象化、通用化和参数化,这样,复用者即可通过对实参的选取来调整构件的功能或行为,如果这种调整人不足以使构件适用于新系统,复用者就必须借助设计信息和文档来修改构件
3、构件库中如无可修改使用的构件,则按新需求开发构件,并存入构件库
组装构件
组装的三种方式
1、基于功能的组装:采用子程序调用和参数传递的方式将构件组装起来
2、基于数据的组装:任然是传统的子程序调用与参数传递,但它所依赖的设计方法不再是功能分解,而是面向数据的设计方法,例如:Jackson系统开发方法
3、面向对象的组装:如果从类库中检索出来的基类能够满足新系统的需求,则可以直接应用,否则,必须以基类为父类,生成相应的子类,以满足新系统的需求
构件组装失配问题
1、由构件引起的失配,包括由于系统对构件基础设施、构件控制模型和构件数据模型的假设存在冲突引起的失配
2、由连接子引起的失配,包括由于系统对构件交互协议、连接子数据模型的假设存在冲突引起的失配
3、由于系统成分对全局体系结构的假设存在冲突引起的失配等,要解决失配问题,首先需要检测出失配问题,并在此基础上通过适当的手段消除检测出现的失配问题
中间件
中间件是一类构件
中间件是一类系统软件
简化结构、屏蔽差异、利于复用
中间件技术的优点
1、面向需求:即设计师集中精力于业务逻辑本身
2、业务的分隔和包容性:应用开发人员可以按照不同的业务进行功能的划分,体现为不同的接口或交互模式
3、设计与实现隔离:构件对外发生作用或构件间的交互,都是通过接口进行的,构件使用者只需要知道构件的接口,而不必关心其内部实现,这是设计与实现分离的关键
4、隔离复杂的系统资源:架构很重要的一个功能就是将系统资源与应用构件隔离,这是保证构件可以复用甚至“即插即用”的基础,与中间件的意图也是一致的
5、符合标准的交互模型:中间件则实现了架构的模型,实现了标准的协议
6、软件复用:中间件提供了构件封装、交互规则、与环境的隔离等机制,这些都为了软件复用提供了方便的解决方案
7、提供对应用构件的管理:基于中间件的软件可以方便地进行管理,因为构件总可以通过标识机制进行划分
三大构件标准
CORBA
代理调用,主要是单机系统向C/S架构演进的时候出现的技术
客户端调服务端就像调本地资源一样
客户端:对象引用 => 请求调用 => 桩/存根IDL Stub => 客户机ORB(对象请求代理) => 实际请求流
服务端:CORBA对象 <= 伺服对象 <= 对象适配器POA <= 框架IDL Skeleton <= 客户机ORB(对象请求代理) <= 实际请求流
伺服对象:CORBA对象的真正实现,负责完成客户端请求
对象适配器:用于屏蔽ORB内核的实现细节,为服务器对象的实现者提供抽象接口,以便他们使用ORB内部的某些功能
对象请求代理:解释调用并负责查找实现该请求的对象,将参数传给找到的对象,并调用方法返回结果,客户端不需要了解服务对象的位置、通信方式、实现、激活或存储机制
COM
EJB(企业Java Bean)
会话Bean:实现业务逻辑,负责完成服务端与客户端的交互
实体Bean:实现O/R映射,简化数据库开发
消息驱动Bean:处理并发与异常访问
Web架构设计(★★★★★)
系统安全分析与设计
安全基础技术
对称与非对称加密(★★★)
对称加密技术:加密秘钥和解密秘钥是一样的
1、加密强度不高,但效率高
2、秘钥分发困难
常见对称加密算法
DES:替换+位移、56位秘钥、64位数据块、速度快、秘钥易产生
3DES(三重DES):两个56位的秘钥K1、K2
RC-5:RSA数据安全公司的很多产品都使用了RC-5
IDEA算法:128位秘钥、64位数据块、比DES的加密性好、对计算机功能要求相对低,PGP
AES算法:高级加密标准,又称Rijndael加密法,是美国政府采用的一种区块加密标准
非对称加密:公钥加密+私钥解密
缺点:加密速度慢
常见非对称加密算法
RSA:2048位(或1024位)秘钥,计算量极大、难破解
Elgamal:安全性依赖于计算机有限域上离散对数这一难题
ECC:椭圆曲线算法
数字签名(★★★)
发送方对信息进行摘要,使用私钥对信息摘要签名(加密),然后发送给接收方
发送方在发送完签名信息之后,发送信息数据,接收方通过同样的算法获得信息摘要
接收方通过公钥解密数字签名,得到发送方发送的信息摘要,最后进行对比,看看摘要是否一致
作用
谁别发送方
防抵赖
信息摘要(★★★)
摘要是对正文的总概
信息摘要:单向散列函数、固定长度的散列值
常用的消息摘要算法有MD5、SHA等,市场上广泛使用的MD5,SHA算法的散列值分别为128和160位,由于SHA通常采用的秘钥长度较长,因此安全性高于MD5
练习:邮件以加密方式传输(加密解密技术),邮件最大附件内容可达2GB(对称加密),发送者不可抵赖(数字签名),第三方无法篡改(信息摘要技术)
数字证书内容
证书版本信息
证书的序列号,每个证书都有一个唯一的证书序列号
证书使用的签名算法
证书的发行机构名称,命名规则一般采用X.500格式
证书有效期,现在通用的证书一般采用UTC时间格式,它的计时范围为1950-2049
证书所有人的名称,命名规则一般采用X.500格式
证书所有人的公开密钥
证书发行者对证书的签名(可信任的机构)
PKI公钥体系
CA认证中心:颁发数字证书
RA:注册审批机构
证书受理点
秘钥管理中心-KMC
网络安全
安全协议(★★★)
网络层次
应用层
PGP(针对邮件和文件的混合加密系统)、Https、SSL
表示层
SSL
会话层
SSL
传输层
TLS(传输层安全协议)、SET(电子商务,身份认证)
网络层
防火墙、IPSec(对IP包加密)
数据链路层
链路加密、PPTP、L2TP
物理层
隔离、屏蔽
安全协议
PGP(Pretty Good Privacy):优良保密协议
SSL(Secure Sockets Layer):安全套接字协议
TLS(Transport Layer Security):传输层安全协议
SET(Secure Electronic Transaction):安全电子交易协议
IPSEC(Internet Protocol Security):互联网安全协议
网络攻击(★★)
被动攻击:收集信息为主,破坏保密性
主动攻击:主动攻击的类别主要有:中断(破坏可用性),篡改(破坏完整性),伪造(破坏真实性)
被动攻击
窃听(网络监听):用各种可能的合法或非法的手段窃取系统中的信息资源和敏感信息
业务流分析:通过对系统进行长期监听,利用统计分析方法对诸如通信频度、通信的信息流向、通信总量的变化等参数进行研究,从而发现有价值的信息和规律
非法登录:有些资料将这种方式归为被动攻击
主动攻击
假冒身份:通过欺骗通信系统或用户达到非法用户冒充成合法用户,或者特权小的用户冒充成特权大的用户的目的,黑客大多数采用假冒进行攻击
抵赖:这是一种来自用户的攻击,比如:自己否认曾经发布过某条消息、伪造一份对方来信等
旁路攻击:密码学中是指绕过对加密算法的繁琐分析,利用密码算法的硬件实现的运算中泄露的信息,如执行时间、功耗、电磁辐射等,结合统计理论快速破解密码系统
重放攻击:所截获的某次合法的通信数据拷贝,处于非法的目的而被重新发送,加时间戳能够识别并应对重放攻击
拒绝服务(DOS):对信息或其它资源的合法访问被无条件的阻止
等级保护标准(★★)
计算机信息系统安全保护等级划分标准(GB 17859-1999)
用户自主保护级:适用于普通内联网用户,系统破坏后,对公民、法人和其它组织权益有损害,但不损害国家安全、社会秩序和公共利益
系统审计保护级:适用于通过内联网或国际网进行商务活动,需要保密的非重要单位,系统破坏后,对公民、法人和其它组织权益有严重损害,或损害社会秩序和公共利益,但不损害国家安全
安全标记保护级:适用于地方各级国家机关、金融机构、邮电通信、能源与水源供给部门、交通运输、大型工商与信息技术企业、重点工程建设等单位。系统破坏后,对社会秩序和公共利益造成严重损害,或对国家安全造成损害
结构化保护级:适用于中央级国家机关、广播电视部门、重要物资储备单位、社会应急服务部门、尖端科技企业集团、国家重点科研机构和国防建设等部门。系统破坏后,对社会秩序和公共利益造成特别严重损害,或对国家安全造成严重损害
访问验证保护级:适用于国防关键部门和依法需要对计算机信息系统实施特殊隔离的单位。系统破坏后,对国家安全造成特别严重损害
安全防范体系的层次
1、物理环境安全性:包括通信线路、物理设备和机房安全等
2、操作系统的安全性:主要表现在三个方面,一是操作系统本身的缺陷带来的不安全因素,主要包括身份认证、访问控制和系统漏洞等;二是对操作系统的安全配置问题;三是病毒对操作系统的威胁
3、网络的安全性:网络层的安全问题主要体现在计算机网络方面的安全性,包括网络层身份认证、网络资源的访问控制、数据传输的保密与完整性、远程接入的安全、域名系统的安全、路由系统的安全、入侵检测的手段和网络实施防病毒等
4、应用的安全性:由提供服务所采用的应用软件和数据的安全性生产,包括Web服务、电子邮件系统和DNS等,此外还包括病毒对系统的威胁
5、管理的安全性:包括安全技术和设备的管理、安全管理制度、部门与人员的组织规则等
信息安全体系结构
OSI参考模型
应用层;表示层;会话层;传输层;网络层;数据链路层;物理层
安全服务
抗抵赖;数据保密性;数据完整性;访问控制;鉴别服务
安全机制
路由控制;业务流填充;数据交换;数据完整性;访问控制;数字签名;加密
安全服务
鉴别服务
用户名+口令
数字证书
生物特征识别
访问控制
自主访问控制(DAC)
访问控制列表(ACL)
强制访问控制(MAC)
基于角色的访问控制(RBAC)
基于任务的访问控制(TBAC)
可扩展访问控制标记语言(XACML)
数据完整性
阻止对媒体访问的机制:隔离,访问控制,路由控制
探测非授权修改的机制:数字签名,数据重复,数字指纹,消息序列号
数据保密性
通过加密提供机密性
抗抵赖
数字签名
区块链
【区块链】≠比特币
比特币底层采用了区块链技术
比特币交易在我国定性为【非法运用】
区块链是一个分布式账本,一种特殊的分布式数据库
去中心化
1、链表在多个结点存储,没有中心结点,数据不一致时,以“少数服从多数”原则执行
2、所以要篡改成功,除非篡改51%的结点
区块链的特点
去中心化:由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护
开放性:系统是开放的,如:【交易信息是公开的】,不过【账户身份信息是高度加密的】
自治性:区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成对机器的信任,任何人为的干预都不起作用
安全性(信息不可篡改):数据在多个结点存储多份,篡改数据得改掉51%结点的数据,这太难,同时还有其他安全机制,如:比特币的每笔交易,都由付款人使用私钥签名,证明确实是他同意向某人付款,其他人无法伪造
匿名性(去信任):由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此,交易对手无需通过公开身份的方式让对方自己产生信任,对信用的积累非常有帮助
创世块(0#) <= 1# <= 2# <= ... <= n#
hash加密/防篡改:每一个区块都会使用SHA来记录上一个区块信息的hash摘要信息,也就是篡改会牵一发而动全身
共识算法(博弈论)/全民记账
一般有:POW(工作量证明)、PoS(权益证明)、DPoS(股权授权证明机制)
比特币采用了POW,争夺记账权=挖矿
计算出来的账单结点哈希值前13个字符为0,则符合规则,得到记账权,有一个节点计算出来结果,则广播消息告知其它结点,其它结点更新数据
计算困难,但验证却很容易,比如218903 = 那两个质数的乘积?457*479
系统可靠性分析与设计
可靠性相关的基本概念(★★)
可靠性:软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本功能
可用性:系统能够正常运行的时间比例
软件可靠性≠硬件可靠性
复杂性:软件复杂性比硬件高,大部分失效来自于软件失效
物理退化:硬件失效主要是物理退化所致,软件不存在物理退化
唯一性:软件是唯一的,每个Copy版本都一样,而两个硬件不可能完全一样
版本更新周期:硬件较慢,软件较快
系统可靠性分析(★★★★)
可靠性指标
平均无故障时间:MTTF=1/λ
平均故障修复时间:MTTR=1/μ
平均故障间隔时间:MTBF=MTTF+MTTR
系统可用性:MTTF/(MTTR+MTTF)x100%
在实际应用中,一般MTTR很小,所以通常认为MTBF≈MTTF
串联系统和并联系统
串联系统:可靠性 R=R1*R2*...*Rn
并联系统:可靠性:R=1-(1-R1)*(1-R2)*...*(1-Rn)
混合系统:分块求解即可
分析方法
故障树分析方法
一种自顶向下的软件可靠性分析方法
从软件系统不希望发生的事件(顶事件),特别是对人员和设备的安全及可靠性产生重大影响的事件开始,向下逐步追查导致顶事件发生的原因,直至基本事件(底事件),从而确定软件故障原因的各种可能组合方式和(或)发生概率
基本步骤
软件故障树的建立
定性分析
定量分析
失效模式与效应分析方法
在软件开发阶段的早期,通过识别软件失效模式,分析造成的后果,研究分析各种失效模式产生的原因,寻找消除和减少其有害后果的方法,以便尽早发现潜在的问题,并采取相应的措施,从而提高软件的可靠性和安全性
SFMEA的分析对象可以是开发早期阶段的高层次的子系统、部件,也可以是详细设计阶段的单元、模块
对于不同的分析对象,其软件失效模式是不同的,采用的SFMEA分析方法也不同,前者采用系统级分析方法(system FMEA),后者为详细级分析方法(detailed FMEA)
基本步骤
系统定义
软件失效模式分析
软件失效原因分析
软件失效影响分析
改进措施分析
软件可靠性设计(★★★★)
影响软件可靠性的主要因素
1、软件的开发方法和开发环境
2、运行环境
3、软件规模
4、软件内部结构
5、软件的可靠性投入
可靠性设计
避错技术【加强测试评审】
降低复杂度设计
检错技术
出错后报警,人工处理,成本较低
容错技术
N版本程序设计(静态冗余)
与通常软件开发过程不同的是,N版本程序设计增加了三个新的阶段:相异成分规范评审、相异性确认、背对背测试
N版本程序的同步、N版本程序之间的通信、表决算法(全等表决、非精确表决、Cosmetie表决)、一致比较问题、数据相异性
恢复块设计(动态冗余),更适用于硬件
设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备份块之间的共性错误降到最低程度
必须保证验证测试程序的正确性
防卫式程序设计(try catch() {})
对于程序中存在的错误和不一致性,通过在程序中包含错误检查代码和错误恢复代码,使得一旦错误发生,程序能撤销错误状态,恢复到一个已知的正确状态中去
实现策略:错误检测、破坏估计、错误恢复
冗余
结构冗余
硬件冗余、软件冗余
信息冗余
校验码
时间冗余
重复多次进行相同的计算
恢复方式
前向恢复:使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况
后向恢复:系统恢复到前一个正确状态,继续执行
N版本 vs 恢复块
硬件运行环境:多级;单机
错误检测方法:表决;验证测试程序
恢复策略:前向恢复;后向恢复
实时性:好;差
双击容错
双机热备模式(主系统、备用系统)
双机互备模式(同时提供不同的服务,心不跳则接管)
双机双工模式(同时提供相同的服务,集群的一种)
双机模式是集群的前身
项目管理
立项管理(★)
盈亏平衡分析
销售额=固定成本+可变成本+税费+利润【正常情况】
销售额=固定成本+可变成本+税费【盈亏平衡】
可变成本比例是不变的,可以通过成本金额和销售金额计算出来
范围管理(★★)
确定项目的边界,即哪些工作是项目应该做的,哪些工作不应该包括在项目中
工作
范围计划编制
输出:项目范围管理计划
范围定义
输入:项目章程、项目范围管理计划、批准的变更申请、组织过程资产
输出:形成初步的项目范围
创建WBS
输出:WBS(便于估算,明确范围,防止需求蔓延,最底层是工作包)、WBS字典
范围确定
范围控制
时间管理(★★★★)
时间管理:也叫进度管理,就是采用科学的方法,确定进度目标,编制进度计划和资源供应计划。进行进度控制,在与质量、成本目标协调的基础上,实现工期目标
步骤
活动定义
输入:WBS工作包
活动排序
根据工作包依赖关系排序
活动资源估算
工作包所需要的工作人日,比如A模块需要10人日
活动历时估算
根据工作人日来计算具体的模块开发时间,还有不可压缩工期,有的工作不是可并行开发的
估算方法:专家判断法、三点估算法、功能点估算法、自上而下的估算、自下而上的估算
三点估算法:乐观时间+4*最可能时间+悲观时间
制定进度计划
是否为关键活动
偏差是否大于总时差
偏差是否大于自由时差
进度控制
赶工:增加资源
快速跟进:活动并行执行
关键路径法
关键路径长度 = 项目最短工期
最长路径是关键路径,也是最短工期
关键路径法是在指定进度计划时使用的一种进度网络分析技术。关键路径法沿着项目进度网络路线进行正向与反向分析,从而计算出所有计划活动理论上的最早开始与完成日期、最迟开始与完成日期,不考虑任何资源限制
总时差【松弛时间】:在不延误总工期的前提下,该活动的机动时间。总时差 = 最迟完成时间 - 最早完成时间,或最迟开始时间 - 最早开始时间
自由时差:在不影响紧后活动的最早时间前提下,该活动的机动时间
对于紧后活动的活动,其自由时差等于所有紧后活动最早开始的时间减活动最早完成时间所得之差最小值
对于没有紧后活动的活动,也就是以网络计划终点为完成节点的活动,其自由时差等于计划工期与本活动最早完成时间之差
对于网络计划中以终点为完成节点的活动,其自由时差与总时差相等。此外,由于活动的自由时差是其总时差的构成部分,所以,当活动的总时差为零时,其自由时差必然为零,可不必进行专门计算
总时差为0的结点成为关键结点,关键结点组成的路径称为关键路径
前导图法(单代号网络图,PDM)
ES 持续时间 EF
活动编号
LS 总时差 LF
活动编号
LS 总时差 LF
ES:最早开始时间
EF:最早完成时间
LS:最迟开始时间
LF:最迟完成时间
总时差 = LS - ES
自由时差 = ES(后) - EF(前)
总时差 >= 自由时差
箭线图法(双代号网络图,ADM)
相对于单代号网络图,任务包放到了边上,边包含任务名称和任务持续时间
ES、EF、LS、LF是一样的
能够评审复杂的依赖关系
虚活动:既不占时间,也不占资源,但不能去除(因为有依赖关系)
延误时间没有超过自由时差,不会对紧后活动造成影响
延误时间没有超过总时差,不会对项目总工期造成影响
甘特图(Gantt)
优点:甘特图直观、简单、易于制作,便于理解,能很清晰地标识出每一项任务的起始时间与结束时间,一般适用于比较简单的小型项目,可用于WBS的任何层次、进度控制、资源优化、编制资源和费用计划
缺点:不能系统地表达一个项目所包含的各项工作之间的复杂关系,难以进行定量的计算和分析,以及计划的优化等
内容:工作编号、工作名称、工作时间、项目进度
项目进度
如果影响到的是关键活动,则一定会影响总工期,此时需要采取进度的管控措施
如果不是关键活动,但偏差大于总时差,那么该活动会变成关键活动,会直接影响总工期
如果偏差大于自由时差,会影响到其它活动进度,可能间接影响总工期
采取手段
赶工:增加资源(加人/加班)
快速跟进:活动并行执行(活动的部分工作提前并行执行)
软件质量管理(★★)
质量保证(CMMI):一般是每隔一段时间(例如每个阶段末)进行的,主要通过系统的质量审计和过程分析来保证项目的质量,独特工具包括:质量审计和过程分析
质量控制(测试):是实时监控项目的具体结果,以判断他们是否符合相关质量标准,指定有效方案,以消除产生质量问题的原因
一定时间内质量控制的结果也是质量保证的质量审计对象,质量保证的成果又可以指导下一阶段的质量工作,包括质量控制和质量改进
发展流程:让客户测试(成本代价过高) => 质量控制(测试模拟用户) => 质量保证(在软件生产过程中展开相关工作)
软件过程改进—CMMI
二级(已管理级):项目级可重复,需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、质量和分析、过程和产品质量保证
三级(已定义级):组织化,文档化,标准化。需求开发、技术解决方案、产品集成、验证、确认、组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境
四级(定量管理级):组织级过程性能、定量项目管理
五级(持续优化):组织级改革与实施、因果分析和解决方案
软件配置管理(★★★)
配置项
基线配置项(可交付成果):需求设计、设计文档、源代码、可执行代码测试用例、运行软件所需的数据等
非基线配置项:各类计划(如项目管理计划,进度管理计划)、各类报告
配置库
开发库(动态库、程序员库、工作库):保存正在开发的配置实体
受控库(主库):管理基线
产品库(静态库、产品库、软件仓库):最终产品
版本控制
处于草稿状态配置项的版本号格式为:0.YZ,其中YZ数字范围为01-99,随着草稿的不断完善,YZ的取值应递增,YZ的初始值和增幅由开发者自己决定
处于正式发布状态的配置项的版本号格式为:X.Y,其中X为主版本号,取值范围为1-9;Y为次版本号,取值范围为1-9,配置项第一次正式发布时,版本号为1.0
如果配置项的版本升级幅度比较小,一般只增大Y值,X值保持不变,只有当配置项版本升级幅度比较大时,才允许增大X值
处于正在修改状态的配置项的版本号格式为:X.YZ,在修改配置项时,一般只增大Z值,X.Y值保持不变
软件工具
软件开发工具:需求分析工具、设计工具、编码与排错工具、测试工具
软件维护工具:版本控制工具(VSS、CVS、SCCS、SVN)、文档分析工具、开发信息库工具、逆向工程工具、再工程工具
软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择
软件开发环境
环境信息库:核心,用以存储与系统开发有关的信息,并支持信息的交流与共享
过程控制与消息服务器:实现过程集成和控制集成的基础
环境用户界面:统一的、具有一致性的用户界面
数据库系统
数据库概述(★★★)
数据库体系结构(三级模式—两级映射)
外模式:视图级
概念模式:表级结构
内模式:文件级
逻辑独立性:外模式-概念模式的映射
物理独立性:概念模式-内模式映射
关系表类型
基本关系(通常又称为基本表或基表):实际存在的表,实际存储的逻辑表示
查询表:查询结果对应的表
视图表:由基表和其它视图表导出的表,本身不独立存储,数据库只存放它的定义,常称为虚表
数据库视图:它是一个虚拟表,其内容由查询定义(仅保存SQL查询语句)。同真实的表一样,视图包含一系列带有名称的列和行数据。但是视图并没有真正存储这些数据,而是通过查询原始表动态生成所需要的数据
视图的优点
1、视图能简化用户操作
2、视图使用户能以多种角度看待同一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图可以对机密数据提供安全保护
物化视图:它不是传统意义上的虚拟视图,是实体化视图,其本身会存储数据。同时当原始表中的数据更新时,物化视图也会更新
视图性能较差,物化视图可以优化查询性能,但会降低更新性能
分布式数据库
金融机构:两地三中心
全局DBMS(分布式数据库新增的)
全局外模式
全局概念模式
分片模式
水平/垂直分片
分布模式
分片存储位置
局部DBMS(集中式数据库原有的)
局部概念模式
局部内模式
局部数据库
特性
数据独立性:除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明)
集中与自治共享结合的控制结构:局部的DBMS可以独立地管理局部的数据库,具有自治功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用
适当增加数据冗余度:在不同的场地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能(提高系统的可用性:当系统中某个节点发生故障时,因为数据有其它副本在非故障场地上,对其它所有场地来说,数据仍然是可用的,从而保证数据的完备性)
全局的一致性、可串行性和可恢复性
分布式数据库管理系统
组成:LDBMS + GDBMS + 全局数据字典 + 通信管理(CM)
结构:全局控制集中的DDBMS、全局控制分散的DDBMS、全局控制部分分散的DDBMS
分布透明性
分片透明性
水平/垂直/混合分片
用户不必关心数据是如何分片的,它们对数据的操作在全局关系上进行,即如何分片对用户是透明的
复制透明性
用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成
位置透明性
用户不必知道所有操作的数据放在何处,即数据分配到哪个或哪些站点存储,这个是对用户透明的
局部映像透明性(逻辑透明):是最低层次的透明性,该透明性提供数据到局部数据库的映像,即用户不必关系局部DBMS支持哪种数据模型、使用哪种数据操纵语言,数据模型和操纵语言的转换是由系统完成的,因此,局部映像透明性对异构型和同构异质的分布式数据库系统是非常重要的
两阶段提交协议2PC
两个阶段
表决阶段:目的是形成一个统一的决定
执行阶段:目的是实现这个协调者的决定
两条全局提交规则
只要有一个参与者撤销事务,协调者必须做出全局撤销的决定
只有所有参与者都同意提交事务,协调者才能做出全局提交决定
数据库设计阶段(★★)
整体设计阶段
需求分析
当前和未来应用的数据要求
数据处理要求
输出:数据流图、数据字典、需求说明书
概念结构设计
对数据建模,得到ER模型,也就是ER图
该ER模型是与DBMS的概念模型无关,它是概念上的一个抽象
逻辑结构设计
根据转换规则、规范化理论、DBMS特性,得到关系模式(二维表的结构)
关系模式名称就是表名,也就是将ER图转换成了数据库表
物理设计
考虑硬件、OS特性、数据的分布
概念结构设计阶段
ER图:属性(椭圆)、实体(矩形)、联系(菱形)
实体之间的联系:一对一、一对多、多对多、三元联系(三个实体之间的联系)
设计步骤
抽象数据
设计局部ER模型
合并局部模型,消除冲突
重构优化,消除冗余
集成的方法
多个局部ER图一次集成
逐步集成,用累加的方式一次集成两个局部ER
集成产生的冲突及解决办法
属性冲突:包括属性域和属性取值冲突
命名冲突:包括同名异义和译名同义
结构冲突:包括同一对象在不同应用中具有不同的抽象,以及同一实体在不同局部ER图中所包含的属性个数和属性排列次序完全不相同
逻辑结构设计
设计步骤
转换为数据模型
关系规范化
模式优化
设计用户子模式
ER图向关系模式的转换
实体向关系模式的转换
联系向关系模式的转换
关系模式的优化
确定完整性约束(保证数据的正确性)
用户视图的确定(提高数据的安全性和独立性)
根据数据流图确定处理过程使用的视图
根据用户类别确定不同用户使用的视图
应用程序设计
关系模式相关概念
目或度:关系模式中属性的个数
候选码:候选键,唯一标识元组,且无冗余,可以是单属性,也可以是多个属性组合,候选键可以有一个或者多个
主码:主键,从候选键中任选一个
主属性和非主属性:组成候选码的属性就是主属性,其它的就是非主属性
外码:外键,其它关系的主键
全码:关系模式的所有属性组是这个关系的候选码
简单属性、复合属性、派生属性、多值属性
完整性约束
实体完整性约束:基本关系的主属性不能取空值
参照完整性约束:关系与关系间的引用,是其他关系的主键或空值
用户自定义完整性约束:应用环境决定,比如用户年龄在0-100之间
还可以通过触发器来定义复杂的完整性约束
一个实体必须转换为一个关系模式
联系转关系模式
一对一
并入实体或独立关系,并入任一端
一对多
并入实体或独立关系,并入多端
多对多
独立关系
1、一对一联系的转换
独立的关系模式:并入两端主键及联系自身属性(主键:任一端主键)
归并(任意一端):并入另一端主键及联系自身属性(主键:保持不变)
2、一对多联系的转换
独立的关系模式:并入两端主键及联系自身属性(主键:多端主键)
归并(多端):并入另一端主键及联系自身属性(主键:保持不变)
3、多对多联系的转换
独立的关系模式:并入两端主键及联系自身属性(主键:两端主键的组合键)
ER模型(★)(下午)
关系代数(★★★★)(上午)
关系代数
并(∪):两个集合相同的记录
交(∩):两个集合所有的记录,注意,重复的记录要去掉
差(-):两个集合相减,减去的是相同的记录,集合相减顺序调换,结果是不一样的
投影(π):垂直方向上投射,也就是选择属性列,记录会自动去重
选择(σ):水平方向上选择,列不变,会自动筛选符合的记录
笛卡尔积(×):属性列是二者之和,结果行数是二者的乘积,也就是关系1的每个记录都会跟关系2的每个记录做拼接
自然连接(⨝)
同名属性列取值相等的连接
属性列数:是二者之和减去重复列
行:同名属性取值相等的行,若果有多个同名属性列,需要同时取值相等
关系表达中,且(and)使用“∧”符号来表示,或(or)使用“∨”符号来表示
并、交、差,运算的对象,运算的结果,表结构都是一样的
投影、选择,是一元运算,也就是运算对象只有一个,针对一个二维表来运算的
笛卡尔积、自然连接,对象可以是相同的表结构,也可以是不同的表结构
select 投影 from 笛卡尔积 where 选择 and or 自然连接
性能问题:先筛选运算表,再进行运算
如果运算相似的情况下,自然连接的性能理论上优于笛卡尔积
规范化理论(★★★★★)(上午下午)
价值与用途
非规范化的关系模式,可能存在的问题包括:数据冗余、更新异常、插入异常、删除异常
R(U, F):关系模式,U是属性集合,如:{编号, 姓名, 年龄, 薪资},F是函数依赖集合
函数依赖
当某一个属性能够决定或者推导出另外一个属性的时候,说明存在函数依赖关系,一个属性能够唯一决定另外一个属性
设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u, v,只要u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y(X推导出Y)
X决定因素,Y是被决定因素
部分函数依赖:候选键有多个,属性值可以通过其中的一个候选键推导出来,而不是全部候选键,那么该依赖就是部分函数依赖
传递函数依赖:B依赖A,C依赖B,可以得出C依赖A,这就是传递函数依赖
Armstrong公理
关系模式R<U, F>来说
A1.自反律:若Y⊆X⊆U,则X→Y成立
A2.增广律:若Z⊆U且X→Y,则XZ→YZ成立
A3.传递律:若X→Y且Y→Z,则X→Z成立
根据A1, A2, A3这三条推理规则可以得到下面三条推理规则
合并规则(A2, A3):由X→Y,X→Z,有X→YZ
伪传递规则(A2, A3):由X→Y,WY→Z,有XW→Z
分解规则(A1, A3):由X→Y及Z⊆Y,有X→Z
求候选键
将关系模式的函数依赖关系用“有向图”的方式表示
找到入度为0的属性,并以该属性集合为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键
若入度为0的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0的属性集中,直至该集合能遍历所有结点,集合为候选键
范式
1NF:属性值都是不可分的原子值
2NF:消除非主属性对候选键的部分依赖
3NF:消除非主属性对候选键的传递依赖
BCNF:消除主属性对候选键的部分依赖和传递依赖
逐步优化:解决插入异常、删除异常、数据冗余
第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式
第二范式(2NF):当且仅当实体E是第一范式,且每个非主属性完全依赖主键(不存在部分依赖)时,则称实体E是第二范式
第三范式(3NF):当且仅当实体E是第二范式时,且E中没有非主属性传递依赖于候选键时,则称实体E是第三范式
BC范式(BCNF):设R是一个关系模式,F是它的依赖集合,当且仅当其F中每个依赖的决定因素必定包含R的某个候选码,则称R是BC范式
如果已经满足1NF,且候选键为单属性集合,此关系模式规范化成都至少达到2NF,因为单属性集合不可能存在部分依赖
没有非主属性时,只要满足1NF,那么该关系至少可以达到3NF
表的分解
保持函数依赖分解:设数据模式P={R1, R2, ..., Rk}是关系模式R的一个分解,F是R上的函数依赖集合,P中每个模式Ri的FD集是Fi。如果{F1, F2, ..., Fk}与F是等价的(即相互逻辑蕴涵),那么成分解P保持FD
无损分解:分解之后可以还原,不能还原的称有损
无损连接分解:指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算,仍能还原到原来的关系模式
分解时,冗余函数依赖不需要考虑
无损分解
1、同名属性列取值相等
2、存在以同名属性列为左侧决定因素
3、函数依赖被保留
使用表格还原法来推导,比较方便快捷
并发控制(★)
事务(ACID要素)
原子性:事务要么都做,要么都不做
一致性:事务执行之前是一个状态,执行之后是另一个状态
隔离性:事务之间不相互影响,完全隔离
持续性(持久性):数据修改之后一直存在,即使数据库奔溃了,数据也不会变
并发产生的问题
丢失更新
不可重复读问题
“脏”数据的读出
解决方案
封锁协议:死锁、死锁的解除
封锁协议
读锁/S锁/共享锁,可重叠
写锁/X锁/排他锁/独占锁,不可叠加
一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放,可防止丢失修改
二级封锁协议:一级封锁协议加上事务T在读取R之前对其加S锁,读完即可释放S锁,可防止丢失修改,还可防止读“脏”数据
三级封锁协议:一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放,可防止丢失修改、防止读“脏”数据、防止数据重复读
两段锁协议,可串行化的,可能发生死锁
数据库完整性约束(★)
数据库备份与安全(★)
安全措施
用户标识和鉴定:最外层的安全保护措施,可以使用用户账户、口令及随机数检验等方式
存取控制:对用户进行授权,包括操作类型(如查找、插入、删除、修改等动作)和数据对象(主要是数据范围)的权限
密码存储和传输:对远程终端信息用加密传输
视图的保护:对视图进行授权
审计:使用专用的文件或数据库,自动将用户对数据库的所有操作都记录下来
数据备份
冷备份:也称为静态备份,是将数据库正常关闭,在停止状态下,将数据库的文件全部备份(复制)下来
热备份:也称为动态备份,是利用备份软件,在数据库正常运行状态下,将数据库中的数据文件备份出来
冷备份
优点:备份速度快(只需复制文件);容易归档(简单复制即可);容易恢复到某个时间点上;能与归档方案结合,做数据库“最佳”状态的恢复;低度维护,高度安全
缺点:只能恢复到某一个时间点;在备份过程中,数据库不能做其他工作;若是备份到外部存储设备上,速度会很慢;不能按表或用户恢复
热备份
优点:可在表空间或数据库文件级备份,备份时间短;备份时数据库仍可使用;可达到秒级恢复(恢复到某一时间点上);可对几乎所有数据库实体做恢复;恢复速度快
缺点:不能出错,否则后果严重;一旦备份失败,所得结果不可用于恢复;维护困难,不允许失败
完全备份:备份所有数据
差量备份:仅备份上一次完全备份之后变化的数据
增量备份:备份上一次备份之后变化的数据
日志文件:事务日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立文件中
真实的备份:第一次是完全备份;后面是多次增量备份+一次差量备份,不断循环该方式;备份到数据库出错之间的数据通过日志来恢复
数据有变化,先写日志,再写数据库
数据库故障与恢复
事务本身的可预期故障:本身逻辑问题,在程序中预先设置Rollback语句就可以了
事务本身的不可预期故障:算术溢出、违反存储保护,由DBMS的恢复子系统通过日志,撤销事务对数据库的修改,回退到事务初始状态
系统故障:系统停止运行,通常使用检查点法
介质故障:外存被破坏,一般使用日志重做业务
案例特训
技巧篇
考点分析
系统规划
从来没考到过
软件架构设计
每次必考,Web架构每次都会考
设计模式
极少情况涉及到
系统设计
数据库经常考到
系统建模
UML建模,偶尔考到
分布式系统设计
嵌入式系统设计
会有
系统的可靠性分析与设计
零星考过
系统的安全性和保密性设计
零星考过
必考点
Web应用系统架构
软件架构风格与架构评估
质量管理
系统建模
用例图、顺序图、通信图必须掌握
数据建模
试题对考生的要求
具有一定的系统架构设计实践经验,有较好的分析问题和解决问题的能力
对于有关系统架构设计方面,有广博而坚实的知识或见解
对应用的背景、事实和因果分析等有较强的理解能力和归纳能力
对于一些可以简单定量分析的问题已有类似经验并能进行估算,对于只能定性分析的问题能用简练的语言抓住要点加以表达
善于从一段书面表达叙述中提取最必要的信息,有时还需要舍弃一些无用的叙述或似是而非的内容
总结:有经验、有知识、有见解、较强的理解能力、归纳能力、表达能力
试题解答步骤
先标出问题要点,以此作为主要线索进行分析和思考
对照问题要点仔细阅读正文
通过定性分析或者定量估算,构思答案和要点
以最简练的语言写出答案(200字以内)
遇到新知识,不要慌,稳住心态
列条目回答问题,把自己认为对的都写上(按点记正分)
分析题目问题的倾向性,顺势答题
数据库设计篇
数据库设计关注的问题:性能、数据一致性、安全
规范化与反规范化(★★★)
范式级别提升带来了什么影响?主要是表拆分成多个之后,多表联合查询性能低
反规范化
技术手段
增加派生性冗余列:已有单价和数量列,增加总价列
增加冗余列:已有学号,增加姓名列
重新组表:把拆分的表重新组表,根据业务的查询来重新组表
分割表:把用户表做水平分割,长沙的用户存在长沙,上海的用户存在上海
优点
连接操作少,检索快,统计快;
需要查询的表减少,检索容易
缺点
数据冗余,需要更大的存储空间,用空间换时间
插入、更新、删除操作开销大
数据不一致,可能产生添、修改、删除异常
解决办法
1、触发器同步数据
2、应用程序同步数据
3、物化视图
更新和插入代码更难写
数据库索引:提升查询效率,降低添加、修改、删除效率,采用B数据,B+树等
数据库视图
视图并不在数据库中实际存在,而是一种虚拟表,通过视图可以简化用户操作
视图的优点
1、视图能简化用户的操作
2、视图机制可以使用用户以不同的方式查询同一数据
3、视图对数据库重构提供了一定程度的逻辑独立性
4、视图可以对机密的数据提供安全保护
物化视图:将视图的内容物理存储起来,其数据随原始表变化,同步更新,缺点是数据冗余
分区分表分库
分区:还是同一张表,只是数据存在多个文件里面,查询通过统一的端口查询
分表:逻辑上分成多个表,查询的时候需要多个表联合查询
分库:通过不同的数据库来存储不同的数据,可以提高性能
分区&分表
相同点
1、都针对数据表
2、都使用了分布式存储
3、都提升了查询效率
4、都降底了数据库的频繁I/O压力值
差异点
分区:逻辑上还是一张表
分表:逻辑上已是多张表
分区方式
范围分区:根据某个属性值的范围来分区(数字)
列表分区:根据某个属性值的具体值来分区(枚举)
哈希分区:根据key哈希运算平均分区
分区的优点
1、相对于单个文件系统或硬盘,分区可以存储更多的数据
2、数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可
3、精准定位分区查询数据,不需要全表扫描,大大提高数据检索效率
4、可跨多个分区磁盘查询,来提高查询的吞吐量
5、在涉及聚合函数查询时,可以很容易进行数据的合并
分布式数据库(★★★)
金融机构:两地三中心
全局DBMS(分布式数据库新增的)
全局外模式
全局概念模式
分片模式
水平/垂直分片
分布模式
分片存储位置
局部DBMS(集中式数据库原有的)
局部概念模式
局部内模式
局部数据库
特性
数据独立性:除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明)
集中与自治共享结合的控制结构:局部的DBMS可以独立地管理局部的数据库,具有自治功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用
适当增加数据冗余度:在不同的场地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能(提高系统的可用性:当系统中某个节点发生故障时,因为数据有其它副本在非故障场地上,对其它所有场地来说,数据仍然是可用的,从而保证数据的完备性)
全局的一致性、可串行性和可恢复性
分布式数据库管理系统
组成:LDBMS + GDBMS + 全局数据字典 + 通信管理(CM)
结构:全局控制集中的DDBMS、全局控制分散的DDBMS、全局控制部分分散的DDBMS
分布透明性
分片透明性
水平/垂直/混合分片
用户不必关心数据是如何分片的,它们对数据的操作在全局关系上进行,即如何分片对用户是透明的
复制透明性
用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成
位置透明性
用户不必知道所有操作的数据放在何处,即数据分配到哪个或哪些站点存储,这个是对用户透明的
局部映像透明性(逻辑透明):是最低层次的透明性,该透明性提供数据到局部数据库的映像,即用户不必关系局部DBMS支持哪种数据模型、使用哪种数据操纵语言,数据模型和操纵语言的转换是由系统完成的,因此,局部映像透明性对异构型和同构异质的分布式数据库系统是非常重要的
两阶段提交协议2PC
两个阶段
表决阶段:目的是形成一个统一的决定
执行阶段:目的是实现这个协调者的决定
两条全局提交规则
只要有一个参与者撤销事务,协调者必须做出全局撤销的决定
只有所有参与者都同意提交事务,协调者才能做出全局提交决定
NoSQL(★★★)
NoSQL:Not only SQL,不仅仅只是SQL,泛指非关系性的数据库
NoSQL和关系数据库对比
应用领域:关系数据库:面向通用领域;NoSQL:特定应用领域
数据容量:关系数据库:有限数据;NoSQL:海量数据
数据类型:关系数据库:结构化数据【二维表】;NoSQL:非结构化数据
并发支持:关系数据库:支持并发,但性能低;NoSQL:高并发
事务支持:关系数据库:高事务性(ACID);NoSQL:弱事务性(CAP)
扩展方式:关系数据库:向上扩展(垂直扩展:单台服务器不够用,换一台性能更好的);NoSQL:向外扩展(水平扩展:可以不断增加服务器节点)
数据一致性:关系数据库:实时一致性;NoSQL:最终一致性
三大基石
CAP
Consistency:一致性
Availability:可用性(指的是快速获取数据)
Tolerance of network Partition:分区容忍性(分布式)
CAP理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。
BASE
Basically Availble:基本可用,牺牲高一致性,获得可用性或可靠性
Soft-state:软状态/柔性事务,也可以理解为无连接,支持分区失败Soft state软状态 状态可以有一段时间不同步,异步
最终一致性
Eventual Consistency
Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一致
NoSQL数据库类型
键值(key-value)
典型应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等
数据模型:key指向value的键值对,通常用hash table来实现
优点:查找速度快
缺点:数据无结构化,通常只被当做字符串或者二进制数据
举例:Redis、Tokyo Cabinet/Tyrant、Voldemort、Oracle BDB
列存储数据库
典型应用场景:分布式文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优点:查找速度快,可扩展性强,更容易进行分布式扩展
缺点:功能相对局限
举例:HBase、Cassandra、Rlak
文档数据库
典型应用场景:Web应用(与key-value类似,value是结构化的,不同的是数据库能够了解value的内容)
数据模型:key-value对应的键值对,value为结构化数据
优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点:查询性能不高,而且缺乏统一的查询语法
举例:CouchDB、MongoDB
图形数据库(Graph)
典型应用场景:社交网络,推荐系统等,专注于构建关系图谱
数据模型:图结构
优点:利用图结构相关的算法,比如最短路径寻址,N度关系查找
缺点:很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案
举例:Neo4J、InfoGrid、Infinite Graph
内存数据库(★★★)
其它数据库扩展知识(★★★)
联邦数据库系统
联邦数据库系统(FDBS)是一个彼此协作却又相互独立的成员数据库(CDBS)的集合,它将成员数据库系统按不同程度进行集成,对该系统整体提供控制和协同操作的软件叫做联邦数据库管理系统(FDBMS)
联邦数据库特征
分布性
异构性:数据库类型不一样
自治性
透明性
联邦数据库分类
紧耦合
松耦合
数据库性能优化
集中式数据库优化
硬件系统:CPU、内存、I/O(硬盘,整列),网络
软件系统:参数,如进程优先级,CPU使用权, 内存使用
数据库设计
分区、分表、分库
物化视图
索引:常查询-建索引,常修改-避免索引
SQL优化
以不相干子查询代替相干子查询
值检索需要的列
用带IN的条件子句等价替换OR子句
经常提交COMMIT,以尽早释放锁
尽可能减少多表查询
应用软件:数据库连接池
分布式数据库优化
通信代价
全局查询树的变化
多副本策略
查询树的分解
半连接与直接连接
软件工程篇
需求分析(★★★★)
需求分析主要任务
主要任务就是要提炼、分析、认真审查已经获取到的需求,确保所有的项目干系人都要明白其中的含义,要找出其中的错误、遗漏或者其它不足的地方
需求分析主要工作
1、绘制系统的上下文的范围关系图
2、要创建用户界面的原型
3、要分析需求的可行性
4、要确定需求的优先级
5、要为需求建立模型
6、要创建数据字典
7、最后要使用QFD
分类
结构化需求分析
需要建立三个模型:功能模型、数据模型、行为模型
面向对象需求分析
结构化需求分析(SA)
分析步骤
功能模型:数据流图(DFD)
数据流
加工
数据存储
外部实体
数据模型:实体联系图(ER)
实体
联系
行为模型:状态转换图(STD)
状态(初态、终态)
事件
数据字典
数据元素
数据结构
数据流
数据存储
加工逻辑
外部实体
数据流图
父图与子图之间的平衡:外部的实体、数据流都是一样的
子图内平衡:有输入,也有输出
异常现象
黑洞:一个加工只有输入数据流,而无输出数据流
奇迹:一个加工只有输出数据流,而无输入数据流
灰洞:一个加工的输入数据流无法通过加工产生输出流
图形:数据流(箭头)、加工(圆形)、数据存储(双横线)、外部实体(矩形)
答题技巧
1、补充实体
2、补充存储
3、补充数据流
4、补充加工名
数据流图 vs 流程图
数据流图中的处理过程可并行;流程图在某个时间点只能处于一个处理过程
数据流图展现系统的数据流;流程图展现系统的控制流
数据流图展示的是全局处理过程,过程之间遵循不同的计时标准;流程图展示的往往是局部处理过程,遵循一致的计时标准
数据流图适用于系统分析中的逻辑建模,流程图适用于系统设计中的物理建模
三个原则
1).复杂性最小化原则:数据流图是分层结构,把信息划分为一批小且相对独立的子系统,这样就可以单独查看每一个子系统的数据流图,往下一层可以查看某一个加工的详细过程,往上一层可以查看数据流图与其它数据流图的关联信息。
2).接口最小化原则:接口最小化是复杂性最小化的一种具体规则,再设计模式时,应当让模式中的各个元素之间的接口数或连接数最小化。
3).数据流一致性原则:数据流的输入/输出应该匹配,输入数据足以产生输出数据,所有的输出数据都能够从输入数据中找到数据的来源。
UML图
静态图(结构图)
类图
类图描述一组类、接口、协作和他们之间的关系
类图
类名:方法名、属性名
多重度
对应关系,比如一本书对应0-n条借阅记录
1:表示一个集合中的一个对象对应另外一个集合中的一个对象
0..*:表示一个集合中的一个对象对应另一个集合中的0个或多个对象(可以不对应)
1..*:表示一个集合中的一个对象对应另一个集合中的一个或多个对象(至少对应一个)
*:表示一个集合中的一个对象对应另一个集合中的多个对象
*等价于0..*
关系
依赖关系:一个事物发生变化影响另一个事物
泛化关系:特殊(子)/一般关系(父)
关联关系:描述了一组链,链是对象之间的连接
聚合关系:整体与部分生命周期不同
组合关系:整体与部分生命周期相同
什么时间消亡:聚合不会一起消亡,组合会一起消亡
实现关系:接口与类之间的关系
关系图:依赖关系(虚线+实心三角箭头)、泛化关系(实线+空心三角箭头,有时候也会是实心三角箭头)、组合关系(实线+实心菱形箭头)、聚合关系(实线+空心菱形箭头)、实现关系(虚线+空心三角箭头)
对象图
对象图描述一组对象及它们之间的关系,对象描述了在类图中所建立的事物实例的静态快照
构件图
构件图描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图,对于由小的部件构建大的系统来说,构件图是很重要的,构件图是类图的变体
部署图
部署图描述对运行时的处理节点及在其中生存的构件配置。部署图给出了架构的静态部署视图,通常一个节点包含一个或多个部署图
制品图
包图
包图的图标像是一个带标签的文件夹,包的基本思想是把共同工作的元素放到一个文件夹中,比如:多个类或构件组成了一个子系统,就可以将它们放到一个包中
组合结构图
动态图(行为图)
用例图
用例图描述一组用例(圆圈)、参与者(人形图)及它们之间的关系(箭头)
用户角度描述系统功能
参与者是外部触发因素,包括用户、组织、外部系统、时间
用例是功能单元
关系包括:包含关系(虚线箭头+<<include>>)、扩展关系(虚线箭头+<<extend>>)、泛化关系(实线箭头)
用例建模的流程
识别参与者(必须)
合并需求获得用例(必须)
细化用例描述(必须)
调整用例模型(可选),优化动作,不是必须
细化用例描述
用例名称
用例ID
角色
用例说明
前置条件
基本事件流
其它事件流
异常时间流
后置条件
优先级
关系
包含关系:当可以从两个或两个以上的用例中提取公共行为时,应该使用包含关系来表示他们,其中这个提取出来的公共用例称为抽象用例,而把原始的用例称为基本用例或基础用例
扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种分支,则可以将这个用例分为一个基本用例和一个或多个扩展用例,这样使得描述可能更加清晰
泛化关系:当多个用例共同拥有一种类似结构和行为的时候,可以将它们的共性抽象成为父用例,其它用例作为泛化关系中的子用例。在用例的泛化关系中,子用例是父用例的一种特殊形式,子用例继承了父用例所有的结构、行为和关系
包含是必然关系,扩展关系是可选关系,泛化是父子关系
顺序图
顺序图又叫序列图(时序图),是一种交互图,它强调对象之间消息发送的顺序,同时显示对象之间的交互
呈现的是对象与对象之间的关系
考察方式:挖掉对象或者消息,通过题干描述填入对应的对象或消息
通信图
通信图也是一种交互图,它强调对象之间存在的消息收发关系,而不专门突出这些消息发送的时间顺序
状态图
状态图是对类描述的补充,用于展现此类对象所具有的可能状态,以及某些事情发生时其状态转移情况
活动图
活动图是一种特殊的状态图,活动图描述一个操作中要进行的各项活动的执行流程。同时,也常被用来描述一个用例的处理流程或者某种交互流程
活动图将进程或其它计算结构展示为计算内部一步步的控制流程和数据流,它强调对象间的控制流程
活动图 vs 流程图
流程图是面向过程的,活动图是面向对象的
活动图支持并发进程,流程图一般都是顺序进程
活动图着重表现系统的行为,而非处理过程,流程图着重描述处理过程
泳道式活动图:一种升级版的活动图,通过角色的泳道对活动进行划分,可以让活动图变得很清晰
定时图
定时图也叫计时图,也是一种交互图,用于展示交互过程中的真实时间信息,具体描述对象状态变化的时间点,以及维持特定状态的时间段
交互概览图
面向对象设计(★★)
架构设计篇
软件架构风格(★★★★)(试题1)
主要考五大架构风格,其它的也看一看
质量属性与架构评估(★★★★★)(试题1)
回顾架构模块的质量属性和架构评估
Web架构综合考察(★★★★★)(试题5)
Web开发涉及技术的综合应用
高性能、高可用、可维护、应变、安全
不同维度涉及的技术内容
从架构来看: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设计,中台
服务器演化
单台机器(Web服务器和数据库服务器使用一台机器) => 数据库与Web服务器分离(Web服务器和数据库服务器使用不同的机器)
应用服务器集群:服务压力过大,使用多台应用服务器,也就是横向拓展
负载均衡:将用户请求合理的分发到不同的服务器
session一致性:有状态和无状态问题
负载均衡
应用层
基于特定软件的负载均衡(HTTP重定向)
反向代理负载均衡
传输层
基于DNS的负载均衡
基于NAT的负载均衡
传输层的负载均衡效率更高一些
应用层负载均衡
1、http重定向:http重定向就是应用层的请求转发,用户的请求其实已经到了http重定向负债均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群
特点:实现简单,但性能较差
特点:实现简单,但性能较差
2、反向代理服务器:在用户的请求到达反向代理服务器时(已经到达网站机房),由反向代理服务器根据算法转发到具体的服务器,常用的Apache、Nginx都可以充当反向代理服务器
特点:部署简单,但代理服务器可能成为性能瓶颈
特点:部署简单,但代理服务器可能成为性能瓶颈
传输层负载均衡
1、DNS域名解析负载均衡:DNS域名解析负载均衡就是在用户请求DNS服务器,获取域名对应的IP地址时,DNS服务器直接给出负载均衡后的服务器IP
特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理
特点:效率比HTTP重定向高,减少维护负载均衡服务器成本。但一个应用服务器故障,不能及时通知DNS,而且DNS负载均衡的控制权在域名服务商那里,网站无法做更多的改善和更强大的管理
2、基于NAT的负载均衡:基于NAT的负载均衡将一个外部IP地址映射为多个IP地址,对每次连接请求动态地转换为一个内部节点的地址
特点:技术较为成熟,一般在网关位置,可以通过硬件实现,像四层交换机一般就采用了这种技术
特点:技术较为成熟,一般在网关位置,可以通过硬件实现,像四层交换机一般就采用了这种技术
负载均衡算法
静态算法(不考虑动态负载)
1、轮转算法:轮流将服务请求调度给不同的节点
2、加权轮转算法:考虑不同节点处理能力的差异
3、源地址哈希散列算法:根据请求源的IP地址,作为散列键从静态分配的散列表找出对应的节点
4、目标地址哈希散列算法:根据请求目标IP做散列找出对应的节点
5、随机算法:随机分配,简单,但不可控
动态算法(考虑动态负载)
1、最小连接数算法:新请求分配给当前活动请求最少的节点,每个节点处理能力相同的情况下
2、加权最小连接数算法:考虑节点的处理能力不同,按最小连接数分配
3、加权百分比算法:考虑了节点的利用率、硬盘速率、进程个数等,使用利用率来表现剩余处理能力
硬件负载均衡:F5
软件负载均衡:LVS、Nginx、HAproxy
Session共享机制
1、通过cookie来携带session,优点是简单便捷,缺点是不安全,还会降低整体访问效率,因为每个请求都带了cookie
2、服务之间同步session,服务器少的时候还好,服务器太多就有问题了
3、把session存在公共的Redis数据库中,该方案用的最多
有状态与无状态
无状态服务
对单单次请求的处理,不依赖其它请求,也就是说,处理一次所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如数据库),服务器本身不存储任何信息
有状态服务
会在自身保存一些数据,先后的请求是有关联的
不依赖上下文的是无状态服务,前后有关联的则是有状态服务
Session通过Redis共享,此时的Redis或者数据库就是外部数据服务器,而非应用服务器
持久化技术-ORM
ORM:对象与关系数据之间的映射
数据持久层是一组软件服务,将应用程序与该程序所使用的数据源分离,为整个项目提供一个统一、安全、并发的数据持久机制
映射关系表
类 => 数据库的表
对象 => 记录(数据行)
对象的属性 => 字段
优点
1、程序代码重用性强,即使更换数据库,只需要更改配置文件,不必重写程序代码
2、业务逻辑代码可读性强,在代码中不会有大量的SQL语言,提高程序的可读性
3、持久化技术可以自动优化,以减少对数据库的访问量,提高程序运行效率
4、简化开发工作,让开发人员更关注于业务逻辑的开发
5、通过对象/关系映射向业务逻辑提供面向对象的数据访问
6、分离业务逻辑层和数据层,降低两者之间的耦合
实现技术对比
Hibernate:强大、复杂、间接、SQL无关;可移植性好;不支持复杂多表关联
MyBatis:小巧、简单、直接、SQL相关;可移植性差;支持复杂多表关联
数据库读写分离化
主从数据库结构特点
1、一般:一主多从,也可以多主多从
2、主库做写操作,从数据库做读操作
主从复制步骤
1、主库更新数据完成前,将操作写成binlog日志文件
2、从库打开I/O线程与主库连接,做binlog dump process,并将事件写入中继日志
3、从库执行中继日志事件,保持与主库一直
缓存技术:用缓存缓解读库的压力
常见的缓存技术
MemCache:MemCache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。MemCache通过在内存里维护一个统一的巨大hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等
Redis:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存、亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
Squid:Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTP和HTTPS协议
缓存与数据库的数据一致性问题
一、读取数据
1、根据key从缓存读取
2、如缓存中没有,则根据key在数据库中查找
3、读取到“值”之后,更新缓存
二、写入数据
1、根据key值写数据库
2、根据key更新缓存【或删除缓存】
没有完全统一的做法
MemCache vs Redis
数据类型:MemCache:简单的key-value结构;Redis:丰富的数据结构【string(字符串)、list(双向链表)、dict(hash表)、zset(排序set)、Hash类型】
持久性:MemCache:不支持;Redis:支持
分布式存储:MemCache:客户端哈希分片/一致性哈希;Redis:多种方式,主从、Sentinel(哨兵)、Cluster等
多线程支持:MemCache:支持;Redis:不支持(Redis6.0开始支持)
内存管理:MemCache:私有内存池/内存池;Redis:无
事务支持:MemCache:不支持;Redis:有限支持
数据容灾:MemCache:不支持,不能做数据恢复;Redis:支持,可以在灾难发生时,恢复数据
Redis分布式存储方案
主从模式:一主多从,故障时手动切换
哨兵模式:有哨兵的一主多从,主节点故障会自动选择新的主节点
集群模式:分节点对等集群,分slots,不同slots的信息存储到不同的节点,slot(数据插槽)
Redis集群分片方式
客户端分片:在客户端通过key的hash值对应到不同的服务器
中间件实现分片:在应用软件和Redis中间,例如:Twemproxy、Codis等,由中间件实现服务到后台Redis节点的路由分派
客户端服务端协作分片:Redis Cluster模式,客户端可采用一致性哈希,服务端提供错误节点的重定向服务slot上。不同的slot对应到不同的服务器
Redis数据分片方案
范围分片:根据value的范围来分片
哈希分片:通过key的hash运算分片
一致性哈希分片:哈希分片的改进,通过环来解决节点动态增加的问题
Redis数据类型
String(字符串):存储二进制,任何类型数据,最大512MB。例如:缓存、计数、共享Session
Hash(字典):无序字典,数组+链表,适合存对象,key对应一个HashMap,针对一组数据。例如:存储、读取、修改用户属性
List(列表):
Linked List:双向链表,有序,增删快,查询慢;
ArrayList:数组方式,有序,增删慢,查询快。
例如:消息队列、文章列表、记录前N个最新登录的用户ID列表
Linked List:双向链表,有序,增删快,查询慢;
ArrayList:数组方式,有序,增删慢,查询快。
例如:消息队列、文章列表、记录前N个最新登录的用户ID列表
Set(集合):键值对,无序,唯一,增删查复杂度均为O(1),支持交/并/差集操作。例如:独立IP,共同爱好,标签
Sorted Set【Zset】(有序集合):键值对,有序,唯一,自带按权重排序效果。例如:排行榜
缓存淘汰算法
不淘汰
noeviction:禁止驱逐数据,内存不足以容纳新入数据时,新的写入操作就会报错,系统默认的一种淘汰策略
设置过期时间的键值空间
volatile-random:随机移除某个key
volatile-lru:优先移除最近未使用的key
volatile-ttl:ttl值小的key优先移除,ttl(还剩多少生命时间)
全键空间
allkeys-random:随机移除某个key
allkeys-lru:优先移除最近未使用的key
Redis持久化方式
RDB:传统数据库中快照的思想,指定时间间隔将数据进行快照存储
AOF:传统数据库中日志的思想,把每条改变数据集的命令追加到AOF文件末尾,这样出了问题,可以重新执行AOF文件中的命令来重建数据集
对比
备份量:RDB:重量级的全量备份,保存整个数据库;AOF:轻量级增量备份,一次只保存一个修改命令
保存时间:RDB:保存间隔时间长;AOF:保存间隔时间短,默认1秒
还原速度:RDB:数据还原速度快;AOF:数据还原速度慢
阻塞情况:RDB:save会阻塞,但bgsave或者自动不会阻塞;AOF:无论是平时还是AOF重写,都不会阻塞
数据体积:RDB:同等数据体积小;AOF:同等数据体积大
安全性:RDB:数据安全性低,容易丢数据;AOF:数据安全性高,根据策略决定
Redis常见问题
1、缓存雪崩
大部分缓存失效,从而会大量访问数据库,导致数据库崩溃
解决方案
1、使用锁或队列:保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上
2、为key设置不同的缓存失效时间:在固定的一个缓存时间的基础上+随机一个时间作为缓存失效时间
3、二级缓存:设置一个有时间限制的缓存+一个无时间限制的缓存,避免大规模访问数据库
2、缓存穿透
查询无数据返回,导致缓存也没有数据,进而每次都会去数据库查询
解决方案
1、如果查询结果为空,直接设置一个默认值放到缓存,这样第二次到缓存中获取就有值了,设置一个不超过5分钟的过期时间,以便能正常更新缓存
2、设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力
3、缓存预热
系统上线后,将相关需要缓存数据直接加到缓存系统中
解决方案
1、直接写一个缓存刷新页面,上线时手动操作
2、数据量不大时,可以在项目启动的时候自动进行加载
3、定时刷新缓存
4、缓存更新
除Redis系统自带的缓存失效策略,常见采用一下两种:
1、定时清理过期缓存
2、当有用户请求过来时,在判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存
5、缓存降级
降级的目的是保证核心服务可用,即使是有损失的,而且有些服务是无法降级的(如电商的购物流程等);在进行降级之前要对系统进行梳理,从而梳理出哪些必须保护,哪些可以降级
CDN(内容分发网络)
CDN全称是Content Delivery Network,即内容分发网络。基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使用内容传输得更快、更稳定
XML和JSON
XML
扩展标记语言,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言
优点
格式统一,符合标准
容易与其它系统进行远程交互,数据共享比较方便
缺点
XML文件庞大,文件格式复杂,传输占宽带
服务器端和客户端都需要大量的代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护
客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码
服务器端和客户端解析XML花费较多的资源和时间
JSON
JavaScript Object Notation,一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性,可在不同平台之间进行数据交换
优点
1、数据格式比较简单,易于读写,格式都是压缩的,占用宽带小
2、易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取
3、支持多种语言,包括ActionScript,C,C#,Java,JavaScript,Perl,PHP,Python等服务端语言,便于服务器端的解析
4、因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,易于维护
缺点
没有XML格式这么推广的深入人心和使用广泛,没有XML那么通用(已经过时了,这是以前老教材这么写的)
Web应用服务器
1、Web服务器:职能较为单一,就是把浏览器发送过来的Request请求,返回HTML页面
2、应用服务器:进行业务逻辑的处理
服务器:Apache、IIS、Tomcat、JBOSS、WebSphere、WebLogic、Jetty等等
REST(表述性状态转移)
REST(Representational State Transfer,表述性状态转移)是一种通常使用HTTP和XML进行基于Web通信的技术,可以降低开发的复杂性,提高系统的可伸缩性
五个原则
1、网络上的所有事物都被抽象为资源
2、每个资源对应一个唯一的资源标识
3、通过通用的连接件接口对资源进行操作
4、对资源的各种操作不会改变资源的标识
5、所有的操作都是无状态的
Restful就是基于该原则实现的框架
响应式Web设计
根据设备环境进行相应的布局
1、采用流式布局和弹性化设计:使用相对单位,设定百分比而非具体的方式设置页面元素大小
2、响应式图片:不仅要同比的缩放图片,还要在小设备上降低图片自身的分辨率
中台
中台是一套结合互联网技术和行业特性,将企业核心能力以共享服务形式沉淀,形成“大中台、小前台”的组织和业务机制,供企业快速降低成本。中台又可以进一步细分,比如业务中台、数据中台、XX中台。本质上,都是对企业通用进行业务创新的企业架构能力在不同层面的沉淀,并对外能力开放
业务中台:提供重用服务,比如用户中心、权限管理等之类的开箱即用的可重用能力
数据中台:提供数据整合分析能力,帮助企业从数据中学习改进,调整方向
技术中台:提供技术重用组件的能力,帮助解决基础技术平台的复用,如:中间件、分布式存储、AI、负载均衡等基础设施
数据中台必备的4个核心能力
1、数据汇聚整合能力
2、数据提纯加工能力
3、数据服务可视化
4、价值变现方面
其它篇
时间管理与成本管理(★★★★)
系统安全性(★★)
系统可靠性(★★)
论文写作
注意事项
切记,不要猜题,原则:要复用构件,不要整篇复用
不要抄范文,不要用网上的项目背景,原则:宁可杜撰项目,也不要使用网上范文中的项目
练习时写文章前,一定要做好功课,原则:理论重于实践
做好准备工作之后,要勇于迈出第一步,原则:万事开头难,迈出第一步之后就不难了
换个视角看论文,原则:以论文写作技巧视频为依据,对自己的论文进行自评
准备工作:加强学习、平时积累、共同提高、掌握写作技巧、提高写作速度(练字)、以不变应万变(不要押题,多准备点素材)
论文写作格式,摘要300-320字,正文2200-2500字
论文四部曲
找准核心论点(5分钟),论文有3个问题,要找准核心要点
搭建论文框架(10分钟)
摘要(300字 ~ 320字)
1. 项目相关背景及主要功能
2. 你的岗位及主要职责
3. 论文主体内容的总概
4. 项目最终实施效果或你的总结和感悟等
正文
项目背景介绍(450字左右)
1. 项目背景的详细介绍
2. 项目开发的原因(来龙去脉,系统相关信息)
3. 项目开始时间,实施周期
4. 你的主要岗位职责等
5. 系统主要功能、模块
过度内容(300字 ~ 400字)
1. 非核心论问题的回应
2. 引出主体内容(核心论点)
主体内容(1000字 ~ 1500字)
1. 采用总分式描述
2. 一总加三分模式(总概和三个论点)
3 可分为4个段落
论文总结(400字 ~ 500字)
结构上可分为三步走:
1. 先分析项目运行效果
2. 再总结项目不足
3. 最后提解决思路
其它注意事项
1. 项目周期需要8个月以上
2. 项目结束时间需要达到6个月以上,也就是上线时间
撰写摘要(15分钟)
正文写作(90分钟)
以我为中心
站在高级工程师的角度(不要过于细化到代码层面,讲解决方案即可)
忠于论点
条理清晰,开门见山
图文并茂,能收奇效(不建议画图,尽量使用文字表示,因为是手写论文)
标新立意,要有主见
首尾一致
常见问题及解决方案
走题
字数偏少或者偏多
摘要归纳欠妥
文章深度不够,缺少特色,泛泛而谈
文章口语化太重,文字表达能力太差
文章缺乏主题项目,项目年代久远(近3年内)
整篇文章从大一二三到小123,给人一种压抑感
文章结构不够清晰,段落太长
论文扣分和加分准则
下述情况的论文,需要适当扣5分到10分
没有写论文摘要,摘要过于简略,或者摘要中没有实质性内容的论文
字迹比较潦草,其中又不少字难以辨认
确实属于过分吹嘘、自我标榜、夸大其词的论文
内容有明显错误和漏洞的,按同一类错误每一类扣一次分
内容属于大学生或研究生实习性质的项目,并且实际应用水平相对较低的论文
下述情况的论文,可以适当加5分到10分
有独特的见解或者有很深入的体会,相对非常突出的论文
起点很高,确实符合当今信息系统发展的新趋势和新动向,并能加以应用的论文
内容详实,体会中肯,思路清晰,非常切合实际的很优秀的论文
项目难度很高,或者项目完成的质量优异,或者项目涉及国家重大信息系统工程且作者参加并发挥重要作用,并且能正确按照试题要求论述的论文
雷区(直接不及格)
虚构情节,文章中有较严重的不真实的或者不可信的内容
没有项目的实际开发经验,通篇都是浅层次纯理论的论文
所讨论的内容与方法过于陈旧,或者项目的水准非常底下的论文
内容不切题意,或者内容相对很空洞,基本上都是泛泛而谈,没有较深入体会的论文
正文与摘要的篇幅过于短小的论文(如论文小于1200字)
正文很不通畅,错别字很多,条理与思路不清晰,字迹潦草等情况相对较为严重的论文
考察主题
系统建模
软件架构设计(重点)
软件开发
数据库设计
企业集成
系统设计
分布式系统设计
系统可靠性分析与设计
系统安全性与保密性设计
计算机组成与体系结构
计算机结构(★)
冯诺依曼机
主机
CPU:运算器和控制器
主存储器
外设
辅助存储器
输入设备
输出设备
运算器
1、算术逻辑单元ALU:数据的算术运算和逻辑运算
2、累加寄存器AC:通用寄存器,为ALU提供一个工作区,用于暂存数据
3、数据缓冲寄存器DR:写内存时,暂存指令或数据
4、状态条件寄存器PSW:存状态标志与控制标志(有争议,也有将其归为控制器的)
控制器
1、程序计数器PC:存储下一条要执行的指令地址
2、指令寄存器IR:存储即将执行的指令
3、指令译码器ID:对指令中的操作码字段进行分析解释
4、时序部件:提供时序控制信号
存储系统(★★★★)
层次化存储结构
CPU:寄存器(最快)
Cache:按内容存取(相联存储器)
内存(主存):DRAM
外存(辅助):硬盘、光盘、U盘等(最慢)
分级存储体系主要目的是为了解决存储容量、价格和速度之间的矛盾
Cache
Cache的功能:提高CPU数据输入输出的速率,突破冯洛伊曼瓶颈,即CPU与存储系统之间数据传送宽带限制
在计算机的存储系统体系中,Cache是访问速度最快的(如果有寄存器,寄存器是最快的)
Cache对程序员是透明的(透明性:无法操作的对象称其是透明的)
使用Cache改善系统性能的依据是程序的局部性原理
时间局部性
空间局部性
时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型的原因是由于程序中存在大量的循环操作
空间局部性:指程序一旦访问了某个存储单元,不久以后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址可能集中在一定的范围内,其典型情况是程序顺序执行
工作集理论:工作集是进程运行时被频繁访问的页面集合
存储访问时间:t3 = hxt1+(1-h)*t2
h代表Cache访问命中率
t1表示Cache访问周期时间
t2表示主存储器的访问周期时间
t3是“Cache+主存储器”的系统的平均访问周期时间
1-h又称为失效率或者未命中率
平均访问周期=加权平均数
从主存到Cache地址映像/地址映射由硬件直接完成
替换算法是影响命中率的关键因素
有的硬件会将Cache集成到CPU中,称为CPU中的Cache,反之则是CPU之外的Cache
主存编址
1bit = 一个二进制位
按字节编址:1B = 8bit
按字编址:字长由计算器定义(8bit、16bit、32bit、64bit)
存储单元个数 = 最大地址 - 最小地址 + 1
存储总容量 = 存储单元个数 x 编址内容(按字节编址/按字编址)
存储总容量 = 单位芯片容量 x 总片数
磁盘管理
磁盘是持续、匀速、单向旋转的
垂直寻道
存取时间 = 寻道时间+等待时间+传输时间
寻道时间是指磁头移动到磁道所需的时间
等待时间为等待读写的扇区转到磁头下方所需的时间
读取最长时间和最优时间,最长时间一般连续存储,最优时间可以根据数据缓冲区域处理时间来调整数据存储间隔块
移臂调度算法
先来先服务(FCFS)
最短寻道时间优先(SSTF)
扫描算法(SCAN)
电梯算法
循环扫描算法(CSCAN)
单向电梯算法
最短寻道时间优先算法:只考虑柱面,优先读取距离当前柱面最近的柱面的数据(柱面:磁道号)
数据传输控制方式(★)
程序控制(查询)方式:分为无条件传送和程序查询方式两种,方法简单,硬件开销小,但I/O能力不高,严重影响CPU的利用率
程序中断方式:与程序控制方式相比,中断方式因为CPU无需等待而提高了传输请求的响应速度【结合栈使用】
DMA方式:DMA方式是为了在主存与外设之间实现高速、批量数据交换而设置的,DMA方式比程序控制方式与中断方式都高效
DMA
DMAC向总线裁决逻辑提出总线请求;CPU执行完当前总线周期即可释放总线控制权,此时DMA响应,通过DMAC通知I/O接口开始DMA传输
通道方式
I/O处理机
CISC与RISC(★)
CISC(复杂)
指令:数量多,使用频率差别大,可变长格式
寻址方式:支持多种
实现方式:微程序控制技术(微码)
其它:研制周期长
RISC(精简)
指令:数量少,使用频率接近,定长格式,大部分为单周期指令,操作寄存器,只有Load/Store操作内存
寻址方式:支持方式少
实现方式:增加了通用寄存器;硬布线逻辑控制为主;适合采用流水线
其它:优化编译,有效支持高级原因
流水线(★★)
相关参数计算:流水线执行时间计算、流水线吞吐率、流水线加速比等
流水线:指程序执行时多条指令重叠进行操作的一种标准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度
指令:取指 => 分析 => 执行
流水线周期为执行时间最长的一段
流水线计算公式:
1条执行执行时间+(指令条数-1)*流水线周期
理论公式:(t1+t2+...+tk)+(n-1)*t
实践公式:k*t+(n-1)*t
流水线吞吐率(TP)
指在单位时间内流水线所完成的任务数量或输出的结果数量
基本公式:TP = 指令条数/流水线执行时间(理论公式),如果答案里没有理论公式才考虑实践公式
最大吞吐率:TPmax = n/(k+n-1)≈1/t
流水线加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比成为流水线的加速比
s = 不使用流水线执行时间/使用流水线执行时间
流水线加速比一般都是大于1
校验码(★)
奇偶校验
校验码位数:1
校验码位置:一般拼接在头部
检错:可检奇数位错
纠错:不可纠错
校验方式
奇校验:最终1的个数是奇数个
偶校验:最终1的个数是偶数个
海明校验
校验码位数:
校验码位置:插入在信息位中间(位置)
检错:可检错
纠错:可纠错
校验方式:分组奇偶校验
CRC循环冗余校验
校验码位数:生成多项式最高次幂决定
校验码位置:拼接在信息位尾部
检错:可检错
纠错:不可纠错
校验方式:模二除法求余,拼接作为校验位
CRC循环冗余校验求取
1、已知信息位,也就是原始报文
2、从生成多项式获得最高次幂和除数(系数)
3、做模2除法
被除数:信息位+补0(0的个数是最高次幂)
除数:多项式的系数,注意多项式幂是从0开始的,也即是x的0次方是1
余数:模2除法求余可得
模2除法:在运算过程中不计其进位的除法,也就是异或运算
直到余数位数小于除数位数为止
4、将求取的余数拼接在信息位后面
操作系统
操作系统
管理系统的硬件、软件、数据资源
控制程序运行
人机之间的接口
应用软件与硬件之间的接口
管理
进程管理
存储管理
文件管理
作业管理
设备管理
进程管理
进程的状态(★)
进程 vs 线程
进程是操作系统分配资源的最小单位
线程是任务调动和执行的最小单位
线程可以共享的资源有:内存地址空间、代码、数据、文件等
线程不能共享的资源有:程序计数器、寄存器、栈
三态模型
运行:同时拥有A、B两类资源时,就会如运行状态
就绪:拥有B类资源,只缺少A资源,就会进入就绪状态
阻塞:缺少B类资源,会进入 阻塞状态,阻塞进程获取到B类资源之后就会进入就绪状态
资源:A(CPU资源)、B(非CPU资源)
CPU空闲时会调度就绪状态的进程进行运行
进程运行时间片到了也会进入就绪状态
五态模型
运行
静止就绪
活跃就绪
静止阻塞
活跃阻塞
当内存不够或者资源不够时,会将进程踢出去,也就是挂起,挂起的进程处于静止状态
前趋图(★★★★)
前趋图是一个有向无环图,记为:{(Pi, Pj)},Pi必须在Pj前面
工序(进程执行顺序)上是直接制约,资源(相同)上是间接制约
信号量与PV操作(★★★★)
进程的同步与互斥
同步:速度有差异,在一定情况下停下等待
互斥:如千军万马过独木桥,争夺临界资源,也就是全局共享的资源,某一时刻只能允许一个进程使用
临界资源:进程间需要通过互斥方式对齐进行共享的资源,比如打印机、磁带机等
临界区:每个进程中访问临界资源的那段代码称为临界区
信号量:是一种特殊的变量,临界资源数量有多个,通过信号量来控制资源的争夺
PV操作
P操作
1、申请和锁定资源,P(S)也就是S=S-1
2、检查资源是否足够,S<0时,进程会进入阻塞队列
V操作
1、释放资源,V(S),S=S+1
2、检查是否有进程排队,S<=0,说明有进程排队,通知排队进程
缓冲区
生产者:检查换冲去是否有空间,P(S1),如果有空间,执行V(S2),把产品放入缓冲区并通知排队的消费者有产品了
消费者:检查缓冲区是否有产品,P(S2),如果有产品,执行V(S1),从缓冲区取走产品并通知排队的生产者有空间了
S1初始值为1,S2初始值为0
缓冲区使用权S3,初始值为1
互斥模型需要在同一个进程中进行加锁解锁,也就是PV操作成对存在
同步模型可以在不同进程中进行加锁解锁,也就是PV操作可以交叉存在
死锁及银行家算法(★)
死锁:如果一个进程在等待一件不可能发生的事,则进程就锁死了,如果一个或者多个进程产生死锁,就会造成系统死锁
可不能发生死锁所需要的资源数:有m个进程各自需要w个资源,则资源数大于等于m*(w-1)+1
死锁的四大条件
互斥
保持和等待
不剥夺
环路等待
死锁的预防:打破四大条件
死锁的避免
有序资源分配法
银行家算法
银行家算法:分配资源的原则
当一个进程对资源的最大需求量不超过系统中的资源数时,可以接纳该进程
进程可以分期请求资源,但请求的总数不能超过最大需求量
当系统现有的资源不能满足进程需要的资源数时,对进程的请求可以推迟分配,但总能使进程在有限时间里得到资源
存储管理
段页式管理(★★★)
页式存储
将程序与内存均划分为同样大小的块,以页为单位将程序调入内存(逻辑上说页,物理上说块)
优点:利用率高,碎片小,分配及管理简单
缺点:增加了系统开销;可能产生抖动现象
逻辑地址=页号+页内地址
物理地址=页帧号+页内地址
用户程序中的地址是逻辑地址,内存中的地址是物理地址
页号和页帧号会有一个专门的页表来记录,通过页表可以将逻辑地址转为物理地址
已知逻辑地址和页大小,求物理地址
首先根据页大小换算出地址空间需要多少位二进制来表示
根据求出来的位数,得到逻辑地址的页号,也就是逻辑地址前几位
通过页表查询页号对应的块号(页帧号),最后将逻辑地址中的前几位换成物理块号即可
缺页中断:内存的页面有限,当页表中没有页号对应的页帧号时,会产生缺页中断,也就是需要将用户使用的数据调入内存中,而内存已满,此时需要从内存清理掉一部分数据
局部性原理
1、最近被访问过的页面很有可能会再次被访问,也就是优先淘汰访问位为0的页面
2、如果出现多个访问位为0的页面,在考虑淘汰修改位为0的页面
段式存储
按用户作业中的自然段来划分逻辑空间,然后调入内存,段的长度可以不一样
优点:多道程序共享内存,各段程序修改互不影响
缺点:内存利用率低,内存碎片浪费大
逻辑地址:段号+段内偏移量
逻辑地址转物理地址时,段内偏移量不能大于段表中所对应的段长
段页式存储
段页式存储是段式和页式的综合体,先分段,在分页。1个程序有若干段,每个段中可以有若干个页,每页的大小相同,但每个段的大小不同
优点:空间浪费小、存储共享容易、存储保护容易、能动态连接
缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大降低
块表:是一块小容量的相联存储器,由高速缓存器组成,速度快,并且可以从硬件上保证按内容并行查找,一般用来存放当前访问最频繁的少数活动页面的页号
块表:将页表存于Cache;慢表:将页表存于内存上
页面置换算法(★)
文件管理
绝对路径与相对路径(★)
索引文件(★★★)
目录:索引、地址项、物理块号
索引节点表:在Unix系统中默认是13个结点
0-9是直接索引
10是一级间接索引
11是二级间接索引
12是三级间接索引
直接索引存放的是物理块号,指向的是逻辑页范围
逻辑页号是连续的,默认从0开始
索引节点指向的物理块号存放的是逻辑页
逻辑页号是连续的,但逻辑页号对应的物理块号不一定是连续的
逻辑页存放的是数据块,索引表存放的是索引块
索引块存放的物理块号范围:物理块大小/索引大小,比如512B/2B=256
位示图(★)
对空闲存储管理:空闲(0)/占用(1)
空闲区表法(空闲文件目录)
空闲链表法
位示图法
位示图大小计算:磁盘大小/物理块大小,然后再除以字节长度或者字长
成组链接法
树形目录结构
文件属性
R只读文件属性
A存档属性
S系统文件
H隐藏文件
文件名组成
驱动器号
路径
文件名
扩展名
绝对路径:从盘符开始的路径
相对路径:从当前目录开始的路径
作业管理
设备管理
嵌入式系统
嵌入式微处理器(★)
嵌入式微处理器分类
嵌入式微控制器(MCU):又称为单片机,片上外设资源一般比较丰富,适用于控制
嵌入式微处理器(EMPU):又称为单板机,由通用计算机中的CPU发展而来,仅保留和嵌入式应用紧密相关的功能硬件(性能比较高)
嵌入式DSP处理器(DSP):专门用于信号处理方面的处理器(适用于运算量比较大的)
嵌入式片上系统(SOC):追求产品系统最大包容的集成器件
成功实现了软硬件的无缝结合,直接在微处理器片内嵌入操作系统的代码模块
减小了系统的体积和功耗、提高了可靠性和设计生产效率
嵌入式微处理器体系结构
冯诺依曼结构
是一种将程序指令存储器和数据存储器合并在一起的存储结构
特点
1、一般用于PC处理器,如:I3、I5、I7处理器
2、指令与数据存储器合并在一起
2、指令与数据都通过相同的数据总线传输
地址总线:CPU先通过地址总线发送地址,交给磁盘读取数据
数据总线:数据读完之后,CPU再通过数据总线读取数据
哈佛结构
是一种将程序指令存储和数据存储分开的存储器结构
哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间张红,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问
特点
一般用于嵌入式微处理器(DSP)
指令与数据分开存储,可以并行读取,有较高的数据吞吐率
有4条总线:指令和数据的数据总线与地址总线
总线(★)
总线基本概念
基本概念:总线是一组为多个部件分时共享的信息传送线,用来连接多个部件并为之提供信息交换通路
特点
1、连接在总线上的多个部件只能分时向总线发送数据,但可同时从总线接收数据
2、通过总线复用方式可以减少总线中信号线的数量,以较少的信号线传输更多的信息
总线分类
1、从功能上来分
数据总线:在CPU与RAM之间来回传送需要的处理或存储的数据(双向总线)
地址总线:用来指定在RAM之中存储的数据的地址(单向总线)
控制总线:将微处理器控制单元的信号传送给周边设备(双向总线)
2、从数据传输的方式来分
并行总线:将数据字节的各位用多条数据线同时进行传送,如ISA、PCI、VME等等
串行总线:数据是一位一位地进行传输的,在传输中每一位数据都占据一个固定的时间长度,如RS232、SPI、USB等等
串行总线
半双工总线:不能同时收发数据
全双工总线:可以同时收发数据
串行总线适用于长距离传输,波特率是预先定义好的,使用时可改变,数据正确性依赖于校验码纠正
嵌入式系统软件(★)
嵌入式系统软件特点
嵌入式系统是一种以应用为中心,以计算机技术为基础,可以适应不同应用对功能、可靠性、成本、体积和功耗等方面的要求,即可配置可裁减的软硬件于一体的专用计算机系统【面向特定领域】
特点
规模较小
开发难度
硬件资源有限
嵌入式软件一般涉及到底层软件的开发,需要软件、硬件基础
开发环境和运行环境不同
实时性和可靠性要求高,如火箭飞行控制、核电站
要求固化
嵌入式系统软件分类
根据系统对时间的敏感程度
嵌入式系统
嵌入式实时系统
强实时系统:损失比较大,不能接受;多副本
弱实时系统:损失较小,可接受范围内;检查点机制
从安全要求看
安全攸关系统
非安全攸关系统
嵌入式系统体系结构
体系结构
应用软件层:应用1、应用2...
中间件层:嵌入式CORBA、嵌入式JAVA、嵌入式DCOM、面向应用领域的中间件
操作系统层:TCP/IP网络系统、文件系统、内核、电源管理、嵌入式GUI
设备驱动层:板级初始化、Flash驱动、RTC/定时器驱动、串口驱动、以太网驱动等等
硬件层:微处理器、存储器、键盘、LCD显示器等等
优点:扩展性好
缺点:脆弱、性能比较差
嵌入式操作系统(★★★★)
嵌入式操作系统特点
嵌入式操作系统具有一般操作系统的功能,同时具有嵌入式软件的特点
特点
非通用型操作系统
在性能和实时性方面可能有严格的限制
能源、成本和可靠性通常是影响设计的重要因素
占用资源少
可裁减、可配置
嵌入式操作系统分类
按照系统对响应时间的敏感程度
硬实时系统:系统对响应时间有严格的要求,若响应时间不能满足,是绝对不允许的,会引起系统的崩溃或致命错误
软实时系统:系统对响应时间有要求,若响应时间不能满足,会带来额外可接受的代价
非实时系统:响应时间没有严格要求,如分时操作系统,基于公平性原则,各进程分享处理器,获得大致相同的运行时间
按软件体系结构
单体结构
是一种常见的组织结构
中间件和设备驱动程序通常集成在系统内核中
系统只有一个可执行文件,包含所有功能组件,功能模块可相互调用
如Linux、Jbed RTOS、PDOS等等
分层结构
操作系统被划分为若干个层次(0-N),各个层次之间的调用关系是单向的,即某一层次上的代码只能调用比它低层级的代码
分层
用户模式:用户
内核模式:文件系统、进程间通信、I/O和设备管理、虚存管理、基本进程管理
硬件
可修改性和可维护性提高,但性能下降
微内核结构
也称客户/服务结构
在内核中,把操作系统的大部分功能都剥离出去,只保留最核心的功能单元(如进程管理、存储管理等)
安全性、可靠性、可扩展性、可伸缩性、可移植性都很高
性能是下降的
结构
核心态:微内核、设备驱动程序、硬件
用户态:内存服务、进程服务、文件服务、网络服务、显示服务、应用程序客户
这三类差异
内核设计:内核中包含的功能组件
在系统中集成其它系统软件
单体内核 vs 微内核
实质
单体内核:将图形、设备驱动及文件系统等功能全部在内核中实现,运行在内核状态和同一地址空间
微内核:只实现基本功能,将图形系统、文件系统、设备驱动及通信功能放在内核之外
优点
单体内核:减少进程间通信和状态切换的系统开销,获得较高的运行效率
微内核:内核精炼,便于剪裁和移植。系统服务程序运行在用户地址空间,系统的可靠性、稳定性和安全性较高,可用于分布式系统
缺点
单体内核:内核庞大,占用资源较多且不宜剪裁。系统的稳定性和安全性不好
微内核:用户状态和内核状态需要频繁切换,从而导致系统效率不如单体内核
嵌入式实时操作系统的评价指标
中断响应和延迟时间
任务切换时间
信号量混洗时间
嵌入式实时操作系统调度算法
优先级调度算法:系统为每个任务分配一个相对固定的优先顺序
抢占式优先级调度算法:根据任务的紧急程度确定该任务的优先级。大多数RTOS调度算法都是抢占方式(可剥夺方式)
最早截止期调度算法(EDF算法):根据任务的截止时间来确定其优先级,对于时间期限最近的任务,分配最高的优先级
最晚截止期调度算法
嵌入式系统开发与设计(★★★)
交叉开发环境
JTAG(联合测试工作组):是一种国际标准测试协议,主要用于芯片内部测试和调试
软硬件协同设计
可移植性设计
嵌入式软件设计需要考虑可移植性,以保障良好的可移植性
无操作系统的软件移植
有操作系统的软件移植
低功耗设计
嵌入式系统设计一般要考虑功耗问题,低功耗设计是嵌入式系统设计中的难点,是一个系统化的综合问题,必须从两个方面考虑:
1、基于硬件的低功耗
板级电路低功耗设计
选择低功耗处理器
总线的低功耗设计
接口驱动电路的设计
分区分时供电技术
2、基于软件的低功耗
编译优化技术
软件与硬件的协同设计
算法优化
嵌入式数据库
嵌入式系统的数据库系统称为嵌入式数据库系统或嵌入式实时数据库系统。嵌入式数据库管理系统一般只提供本机服务接口,为前端应用提供基本的数据支持
常见的嵌入式数据库
SQLite
Berkelety
Empress
eXtremeDB
计算机网络
TCP/IP协议族
DHCP与DNS(★★★)
TCP与UDP(★★★)
OSI七层模型
应用层
表示层
会话层
传输层
基于数据报文的传输
网络层
IP数据包,查找路由
数据链路层
传输的是帧
物理层
电路信号,虚电路:建立通路
TCP/IP模型
应用层
基于TCP的协议:HTTP(80)、HTTPS(HTTP+SSL/443)、FTP(20/21)、POP3(101,邮件收取协议)、SMTP(25,邮件传送协议)、Telnet(23)
基于UDP的协议:DHCP(67)、TFTP(69)、SNMP(161)、DNS(53)
传输层
TCP
UDP
网际层
IP
ICMP
IGMP
ARP
RARP
网络接口层
CSMA/CD
ToKingRing
协议
POP3:110端口,邮件收取
SMTP:25端口,邮件发送协议
FTP:20数据端口/21控制端口,文件传输协议
HTTP:80端口,超文本传输协议,网页传输
DHCP:67端口,IP地址自动分配
SNMP:161端口,简单网路管理协议
DNS:53端口,域名解析协议,记录域名与IP的映射关系
TCP:可靠的传输层协议
UDP:不可靠的传输层协议
ICMP:英特网控制协议,ping命令来自该协议
ARP:地址解析协议,IP地址转换为MAC地址
RARP:反向地址解析协议,MAC地址转IP地址
注意端口,考试可能会考
TCP vs UDP
共同点:基于IP协议的传输层协议,可以端口寻址
不同点
TCP:面向连接(连接管理)、三次握手、流量控制、差错校验和重传、IP数据报按序接收不丢失不重复、可靠性强、牺牲通信量、效率低
UDP:不可靠、无连接、错误检测功能弱,无拥塞控制、无流量控制,有助于提高传输的高速率性;
不对无需IP数据报重新排序、不负责重传、不消除重复IP数据报、不对已接收的数据报进行确认、不负责建立或终止连接;
这些由UDP进行通信的应用程序进行处理。
不对无需IP数据报重新排序、不负责重传、不消除重复IP数据报、不对已接收的数据报进行确认、不负责建立或终止连接;
这些由UDP进行通信的应用程序进行处理。
相关协议
TCP:HTTP、FTP、Telnet、POP3、SMTP
UDP:DNS、DHCP、TFTP、SNMP
TCP
滑动窗口协议、控制数据传输、防止拥塞、窗口大小可变
纠错方式
前向纠错:通过校验码进行纠错
后向纠错:发现错误后要求重传
DHCP(动态主机配置协议)
1、客户机/服务器模型
2、租约默认8天
3、当租约过半时,客户机需要向DHCP服务器申请续租
4、当租约超过87.5%时,如果仍然没有和当初提供IP的DHCP服务器联系上,则开始联系其它的DHCP服务器
5、分配方式
固定分配(管理员分配静态绑定固定的IP地址)
动态分配(为客户端分配具有一定有效期限的IP地址)
自动分配(为客户端分配租期为无限长的IP地址)
6、无效地址:169.25.x.x和0.0.0.0
网络故障排查
1、物理连接
2、ipconfig
3、ping网关,目标ip等
4、traceroute/tracert查看路由路径
5、nslookup查看DNS
DNS
域名系统
根域名服务器
顶级域名服务器
权限域名服务器
本地域名服务器
查询方式
递归查询:服务器必须回答目标IP与域名的映射关系
迭代查询:服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址
迭代 vs 递归
返回信息
迭代:线索
递归:结果
处理步骤
迭代:直接返回结果
递归:进一步查询
主机向本地域名服务器的查询采用递归查询
本地域名服务器向根域名服务器的查询采用递归查询
根域名服务器负担重,效率低,故较少采用递归查询
浏览器输入域名:HOSTS => 本地DNS缓存 => 本地DNS服务器 => 根域名服务器 => 顶级域名服务器 => 权限域名服务器
主域名服务器连接收到域名请求:本地缓存记录 => 区域记录 => 转发域名服务器 => 根域名服务器
网络规划与设计
逻辑设计与物理设计(★★★★)
需求分析
功能需求
通信需求
性能需求
可靠性需求
安全需求
运行与维护需求
管理需求
网络规划原则:实用性原则、开放性原则、先进性原则
网络实施原则:可靠性原则、安全性原则、高效性原则、可扩展性原则
网络设计任务:确定网络总体目标、确定总体设计原则、通信子网络设计、设备选型、网络操作系统与服务器资源设备、网络安全设计
网络实施步骤:工程实施计划、网络设备到货验收、设备安装、系统测试、系统试运行、用户培训、系统转换
网络规划与设计
1、需求规范
理解网络应该具有的功能和性能,最终设计出符合用户需求的网络
2、通信规范
分析现有网络和新网络的各类资源分布,掌握网络所处状态
3、逻辑网络设计
拓扑结构、网络地址分配、安全规划、网络管理、选择路由协议、设备命名规则
4、物理网络设计
设备的物理分布、运行环境等确定
设备选型、结构化布线、机房设计
设备选型、结构化布线、机房设计
5、实施阶段
逻辑网络设计
逻辑网络设计时体现网络设计核心思想的关键阶段,在这个阶段根据需求规范和通信规范,选择一种比较适宜的网络逻辑结构,并给予该逻辑结构实施后续的资源分配、安全规划等内容。利用需求分析和现有网络体系分析的结果来设计逻辑网络结构,最后得到一份逻辑网络设计文档
主要工作
1、网路结构的设计
2、物理层技术的选择
3、局域网技术的选择与应用
4、广域网技术的选择与应用
5、地址设计和命名模型
6、路由选择协议
7、网络管理
8、网络安全
9、逻辑网络设计文档
输出的内容
逻辑网络设计图
IP地址方案
安全管理方案
具体的软/硬件、广域网连接设备和基本的网络服务
招聘和培训网络员工的具体说明
对软/硬件费用、服务提供费用、员工和培训的费用初步估计
物理网络设计
物理网络设计是对逻辑网络设计的物理实现,通过对设备的具体物理分布、运行环境等确定,确保网络的物理连接服务逻辑连接的要求。在这一阶段,网络设计者需要确定具体的软/硬件、连接设备、布线和服务的部署方案
输出内容
网络物理结构图和布线图
设备和部件的详细列表清单
软硬件和安装费用的估算
安装日程表,详细说明服务的时间以及期限
安装后的测试计划
用户的培训计划
分层设计
核心层:主要是高速数据交换,实现高速数据传输、出口路由,常用冗余机制
汇聚层:网络访问策略控制、数据包处理和过滤、策略路由、广播域定义、寻址
接入层:主要是针对用户端,实现用户接入、计费管理、MAC地址认证、MAC地址过滤、收集用户信息,可以使用集线器代替交换机
网络冗余设计
网络冗余设计中,对于通信线路常见的设计目标主要有两个:一个是备用路线,另一个是负载分担
备用路线
提高可用性,由路由器、交换机等设备之间的独立备用链路构成,一般情况下备用路径仅仅在主路径失效时投入使用
主要考虑
1、备用路径的宽带
2、切换时间
3、非对称
4、自动切换
5、测试
负载分担
是对备用路径方式的扩充,通过并行链路提供流量分担(冗余的形式)来提高性能,主要的实现方式是利用两个或多个网络接口和路径来同时传递流量
主要考虑
网络中存在备用路径、备用链路时,可以考虑加入负载分担设计
对于主路径、备用路径都相同的情况,可以试试负载分担的特例—负载均衡
对于主路径、备用路径不相同的情况,可以采用策略路由机制,让一部分应用的流量分摊到备用路径上
网络接入
3G与4G标准(★★★)
有线接入
公用交换电话网络
数字数据网
综合业务数字网
非对称数字用户线路
同轴光纤技术
无线接入
WiFi(IEEE 802.11)
蓝牙(IEEE 802.15):通信距离最短
红外
WAPI
无线通信
1G:四大缺点
2G:频谱效率高、容量大、语音质量高、安全性高
3G:3G采用CMDA(移动采用的是TD-SCDMA)技术,加入了分组交换技术,与2G系统相比,3G系统支持更多的用户,实现更高的传输速率
4G:分TD-LTE(时分双工)和FDD-LTE(频分双工)两种,下行:100MB/s,上行:50MB/s,4G+下行可达到300MB/s以上
5G:5G系统提升是全方位的,高性能、低延迟与高容量特性
优点:体现在毫米波、小基站、MIMO,全双工及波束成型5大技术
目前试运行速率:1Gbit/s,最高速率:10Gbit/s
5G不断优化之后,会像4G+一样,速度会不断提高
主要缺点:耗电,5G基站耗电量很大;信号穿透力很差,传输距离短
优点:体现在毫米波、小基站、MIMO,全双工及波束成型5大技术
目前试运行速率:1Gbit/s,最高速率:10Gbit/s
5G不断优化之后,会像4G+一样,速度会不断提高
主要缺点:耗电,5G基站耗电量很大;信号穿透力很差,传输距离短
网络存储
分类
直连式存储(DAS):存储设备直接挂载在服务器上,通过SCSI连接到服务器,不带任何操作系统,不能跨平台共享文件,各系统平台下文件分别存储
网络附加存储(NAS):通过网络接口与网络连接(服务器),有自己的OS,类似于一个专用的文件服务器,一般存储信息采用RAID进行管理,即插即用
存储区域网络(SAN):通过专用高速网络将一个或多个网络存储设备和服务器连接起来的专用存储系统,采用数据块的方式进行数据和信息的存储。目前主要使用以太网(IP SAN)和光纤通道(FC SAN)两类环境
IP-SAN:基于IP网络实现,设备成本低,配置技术简单,可共享和使用大量的存储空间
Raid(磁盘阵列)
Raid0(条块化):性能最高,并行处理,无冗余,损坏无法恢复
Raid1(镜像结构):可用性、可修复性好,仅有50%的利用率
Raid0+1(Raid10):Raid0与Raid1长处的结合,高效且可靠
Raid3(奇偶校验并行传送):N+1模式,有固定的校验盘,坏一个盘可修复
Raid5(分布式奇偶校验的独立磁盘):N+1模式,无固定的校验盘,坏一个盘可恢复
Raid(两种存储的奇偶校验):N+2模式,无固定的校验盘,坏两个盘可恢复
磁盘利用率:(n-1)/n
注意:多个磁盘有效容量计算以最小的为计算标准
IPv6
IPv4:点分十进制,用32位二进制表示,有4个分段,每个段有8位二进制,表示范围
IPv6是设计用于代替现行版本IP协议(IPv4)的下一代IP协议
特点
1、IPv6地址长度为128位,地址空间增大了倍
2、灵活的IP报文头部格式,使用一系列固定格式的扩展头部取代了IPv4中可变长度的选项字段,IPv6中选项部分的出现方式也有所变化,使路由器可以简单路过选项而不做任何处理,加快了报文处理速度
3、IPv6简化了报文头部格式,字段只有8个,加快了报文转发,提高了吞吐量
4、提高了安全性,身份验证和隐私权是IPv6的关键特性
5、支持更多的服务类型
6、允许协议继续演变,增加新的功能,使之适应未来技术发展
每台电脑至少有三个IPv6地址
单播地址:用于单个接口的标识符,传统的点对点通信
组播地址:多播地址,一点对多点的通信,数据包交付到一组计算机中的每一个,IPv6没有广播的术语,而是将广播看做多播的一个特例
任播地址:泛播地址,这是IPv6增加的一种类型,任播的目的站是一组计算机,但数据包交付时只交付给其中的一个,通常是距离最近的一个
多播:前缀为11111111(8个)
任播:前缀固定,其余位置为0
单播
可聚合全球单播地址:前缀为001
本地单播地址
链路本地:前缀为1111111010(一般以fe80开头)
站点本地:前缀为1111111011
IPv6地址由8个16进制字段构成
冒分十六进制,分8段,每个段有12位二进制
例如:2001:0db8:85a3:0000:1319:8a2e:0370:7344
IPv6地址的省略写法,上面的IP等价于:2001:0db8:85a3::1319:8a2e:0370:7344
地址压缩
每个地址段最前面的0可以压缩省略掉
如果地址段为0000,可以完全省略,也就会看到连续的两个冒号
如果有连续两个以上的段为0000,则可以压缩为一个双冒号
如果有多处连续为0000的段,只能有一处可以压缩为一个双冒号
双冒号不能出现在开头
IPv4/IPv6过渡技术
1、双协议栈技术:双栈技术通过节点对IPv4和IPv6双协议栈的支持,从而支持两种业务的共存
2、隧道技术:隧道技术通过在IPv4网络中部署隧道,实现在IPv4网络上对IPv6业务的承载,保证业务的共存和过渡,隧道技术包括:6ti4隧道;6over4隧道;ISATAP隧道
3、NAT-PT技术:NAT-PT使用网关设备连接IPv6和IPv4网络,当IPv4和IPv6节点相互访问时,NAT-PT网关实现两种协议的转换翻译和地址的映射
综合布线
工作区子系统:楼层里面办公区的子系统,由信息插座、插座盒、连接跳线和适配器组成
水平干线子系统:楼层里面连接办公区的子系统,也就是整个楼层的子系统,由内侧配线架的线缆所组成
管理间子系统:管理水平干线子系统和垂直干线子系统连接的子系统,由交连、互连配线架组成
垂直干线子系统:连接整栋楼所有楼层的子系统
建筑群子系统(园区子系统):楼与楼之间连接的子系统
设备间子系统:每个楼层里面的机房
网络技术扩展
物联网
一、物联网的核心和基础任然是互联网,是在互联网基础上延伸和扩展的网络
二、其用户端延伸和扩展到了任何物体与物体之间,使其进行信息交换和通信
分层
感知层:识别物体、采集信息,如二维码、RFID、摄像头、传感器(温度、湿度等等)
网络层:传递信息和处理信息,通信网络与互联网的融合网络、网络管理中心、信息中心和智能处理中心等
应用层:解决信息处理和人机交互的问题
射频识别技术(RFID):又称电子标签,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触,该技术是物联网核心技术,很多物联网应用都离不开它
RFID的基本组成:标签、阅读器、天线
二维码
是用某种特定的几何图形按一定规律在平面上分布的黑白相间的图形记录数据符号信息的
容量
若采用扩展的字母数字压缩格式,可容纳1850个字符
若采用二进制/ASCII格式,可容纳1108个字节
若采用数字压缩格式,可容纳2710个数字
云计算
概念:云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其它设备
云其实是网络、互联网的一种比喻说法
云计算的核心思想是将大量网络连接的计算资源统一管理和调度,构成一个计算机资源池向用户按需服务
提供资源的网络被称为“云”
狭义云计算指IT基础实施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源
广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务
这种服务可以是IT和软件、互联网相关,也可以是其它服务
云其实是网络、互联网的一种比喻说法
云计算的核心思想是将大量网络连接的计算资源统一管理和调度,构成一个计算机资源池向用户按需服务
提供资源的网络被称为“云”
狭义云计算指IT基础实施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源
广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务
这种服务可以是IT和软件、互联网相关,也可以是其它服务
特点
集合了大量计算机,规模达到成千上万
多种软硬件技术相结合
对客户端设备的要求低
规模化效应
服务
软件即服务(SaaS)
平台即服务(PaaS)
基础实施即服务(laaS)
分类:公有云、私有云、混合云
系统配置与性能评价
性能指标(★)
分类
硬件
计算机:时钟频率(主频)、运算速度与精度、内存的存储容量、存储器的存取周期、数据处理速率PDR、吞吐率、各种响应时间、各种利用率、RASIS特性、平均故障响应时间、兼容性、可扩充性、性能价格比
路由器:设备吞吐量、端口吞吐量、全双工线速转发能力、丢包率、时延、时延抖动、VPN支持能力、端口硬件队列数、基于Web的管理、网管类型等
交换机:交换机类型、配置、支持的网络类型、最大ATM端口数、支持协议和标准等
网络:设备级性能指标、网络级性能指标、应用级性能指标、用户级性能指标、吞吐量
软件
操作系统:系统的可靠性、系统的吞吐率(量)、系统响应时间、系统资源利用率、可移植性
数据库管理系统:数据库的大小、数据库中标的数量、单个表的大小、表中允许的记录数量、单个记录的大小、表上所允许的索引数量、数据库所允许的索引数量、最大并发事务处理能力、负载均衡能力、最大连接数等
Web服务器:最大并发连接数、响应延迟、吞吐量
性能计算:字长和数据通路宽度、主存容量和存取速度、运算速度、吞吐量与吞吐率、响应时间(RT)与完成时间(TAT)、兼容性、主频=外频*倍频、主频与CPU时钟周期、CPI与IPC、MIPS与MFLOPS
CPI:平均每条指令的平均时钟周期个数,CPI=时钟周期总数/指令总数
IPC:每个时钟周期运行指令条数,IPC=指令总数/时钟周期总数
MIPS:每秒执行几百万条指令?,M(百万),S是秒,I是指令,MIPS=指令总数/执行总时间(秒)
MFLOPS:每秒执行几百万个浮点操作?
RT:响应时间
MIPS=指令条数/(执行时间×)=主频/CPI=主频×IPC
MFLOPS=浮点操作次数/(执行时间×)
性能调整
查找并消除瓶颈
数据库系统:主要包括CPU/内存使用情况、优化数据库设计、优化数据库管理以及进程/线程状态、硬盘剩余空间、日志文件大小等
应用系统:应用系统的可用性、响应时间、并发用户数以及特定应用的系统资源占用等
阿姆达尔解决方案(★★★)
确定优化模块占比,得到优化之后的时间,使用百分比来计算,结果=100/(优化模块优化后的时间+未优化模块的时间)=
性能评价方法(★★★)
时钟频率发:以时钟频率高低衡量速度
指令执行速度法:表示及其运算速度的单位是MIPS
等效指令速度法:通过各类指令在程序中所占的比例进行计算得到,特点:考虑指令比例不同的问题
数据处理速率法:PDR值的方法来衡量机器性能,PDR值越大,机器性能越好,PDR=L/R,特点:考虑CPU+存储
综合理论性能法:CTP用MTOPS表示,CTP的估算方法是,首先算出处理部件每个计算单元的有效计算率,再按不同的字长加以调整,得出该计算单元的理论性能,所有组成该处理部件的计算单元的理论性能之和记为CTP
基准程序法:把应用程序中用的最多、最频繁的那部分核心程序作为评估计算机系统性能的标准程序,成为基准测试程序,基准程序法是目前一致承认的测试系统性能的较好方法
测试精确度排名
真实的程序 > 核心程序 > 小型基准程序 > 合成基准程序
测试
Dhrystone基准程序:它是一个综合性的整数基准测试程序,是为了测试编译器和CPU处理整数指令和控制功能的有效性,认为地选择一些典型指令综合起来形成测试程序
Linpack基准程序:它是国际上最流行的用于测试高性能计算机系统浮点性能的测试
Whetstone基准程序:它是用Fortran语言编写的综合性测试程序,主要由执行浮点运算、功能调用、数组变址、条件转移和超越函数的程序组成
SPEC基准测试:一种是测试计算机完成单项任务有多快,称为速度测试;另一种是测试计算机在一定时间内能完成多少项任务,称为吞吐率测试
TPC基准程序:TPC基准程序用以评测计算机在事务处理、数据库处理、企业管理与决策支持系统等方面的性能。该基准程序的测评结果用每秒完成的事物处理数TPC来表示
TPC
TPC-A基准程序规范用于评价在OLTP环境下的数据库和硬件的性能
TPC-B测试的是不包括网络的纯事物处理量,用于模拟企业计算环境
TPC-C测试的是联机订货系统(在线事务处理)
TPC-D、TPC-H和TPC-R测试的都是决策支持系统,其中TPC-R允许有附加的优化选项
TPC-E测试的是大型企业信息服务系统
TPC-W是基于Web应用的基准程序,用来测试一些通过Internet进行市场服务和营销的商业行为,所以TPC-W可以看作是一个服务器的测试标准
知识产权与标准化
保护范围与对象(★★★)
著作权法
保护对象及范围:著作权,文学、绘画、摄影等作品
注意事项
1、不需要申请,作品完成即可开始保护
2、绘画或摄影作品原件出售(赠予)著作权还归原作者,原件拥有者:所有权、展览权
软件著作权法
计算机软件保护条例
计算机软件保护条例
保护对象及范围:软件著作权,软件作品
注意事项
1、不需要申请,作品完成即可开始保护
2、登记制度便于举证
专利法
保护对象及范围:专利权
注意事项
需要申请,专利权有效期是从申请日开始计算
商标法
保护对象及范围:商标权
注意事项
需要申请,核准之日起商标受保护
反不当竞争法
保护对象及范围:商业秘密权
注意事项
1、商业秘密包括技术与经营两个方面
2、必须有保护措施才能认定商业秘密
保护期限(★★)
公民作品
权利类型:署名权、修改权、保护作品完整权;保护期限:没有限制
权利类型:发表权、使用权和获得报酬权;保护期限:作者终生及其死亡后的50年(第50年的12月31日)
单位作品
权利类型:发表权、使用权和获得报酬权;保护期限:50年(首次发表后的第50年的12月31日)
公民软件作品
权利类型:署名权、修改权;保护期限:没有限制
权利类型:发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权;保护期限:作者终生及死后50年(第50年的12月31日)
单位软件作品
权利类型:发表权、复制权、发行权、出租权、信息网络传播权、翻译权、使用许可权、获得报酬权、转让权;保护期限:50年(首次发表后的第50年的12月31日,若期间未发表,满50年则不再保护)
注册商标
保护期限:有效期10年(若注册人死亡或倒闭1年后,未转移则可注销,期满后6个月内必须续注)
发明专利权
保护期限:保护期为20年(从申请日开始)
实用新型和外观设计专利权
保护期限:保护期为10年(从申请日开始)
商业秘密
保护期限:不确定,公开后公众可用
区别
1、没有限制,永久保护,署名权、修改权、保护作品完整权
2、50年
3、可以延长
4、不确定
5、20年
6、10年
知识产权人确定(★★★)
作品
判断说明:利用单位的物质技术条件进行创作,并由单位承担责任的
归属:除署名权外其它著作权归单位
判断说明:有合同约定,其著作权属于单位
归属:除署名权外其它著作权归单位
判断说明:其它
归属:作者拥有著作权,单位有权在业务范围内优先使用
软件
判断说明:属于本职工作明确规定的开发目标
归属:单位享有著作权
判断说明:属于从事本职工作活动的结果
归属:单位享有著作权
判断说明:使用了单位资金、专用设备、未公开的信息等物质、技术条件,并由单位或组织承担责任的软件
归属:单位享有著作权
专利权
判断说明:本职工作中作出的发明创造
归属:单位享有专利
判断说明:履行本单位交付的本职工作之外的任务所作出的发明创造
归属:单位享有专利
判断说明:离职、退休或调动工作后1年内,与原单位工作相关
归属:单位享有专利
判断:与工作相关
软件作品
委托创作
有合同约定,著作权归委托方
合同中未约定著作权归属,著作权归属创作方
合作开发
只进行组织、提供咨询意见、物质条件或者进行其他辅助工作,不享有著作权
共同创作的,共同享有,按人头比例;成果可分割,可分开申请
商标
谁先申请谁拥有(除知名商标的非法抢注)
同时申请,则根据谁先使用(需提供证明)
无法提供证据,协商归属,无效是使用抽签(但不可不确定)
专利
谁先申请谁拥有
同时申请则协商归属,协商不成则同时驳回双方的专利申请
侵权判断(★★★★)
中国公民、法人或其他组织的作品,不论是否发表,都享有著作权
开发软件所用的思想、处理过程、操作方法或者数学概念不受保护(保护的不是单纯的代码,而是带有业务逻辑的程序)
著作权法不适用于下列情形
法律、法规,国家机关的决议、决定、命令和其它具有立法、行政、司法性质的文件,及其官方正式译文
时事新闻
历法、通用数表、通用表格和公式
不侵权
个人学习、研究或者欣赏
适当引用
公开演讲内容
用于数学或科学研究
复制馆藏作品
免费表演他人作品
室外公共场所艺术临摹、绘画、摄影、录像
将汉语作品翻译成少数民族语言作品或文盲出版
侵权
未经许可,发表他人作品
未经合作作者许可,将与他人合作创作的作品当作自己独创的作品发表
未参加创作,在他人作品署名
歪曲,篡改他人作品
剽窃他人作品
使用他人作品,未付报酬
未经出版者许可,使用其出版的图书、期刊的版式设计
标准分类(★)
国际标准:ISO、IEC等国际化标准组织
国家标准:GB-中国、ANSI-美国、BS-英国、JIS-日本
区域标准:又称为地区标准,如PASC-太平洋地区标准会议、CEN-欧洲标准委员会、ASAC-亚洲标准咨询委员会、ARSO-非洲地区标准化组织
行业标准:GJB-中国军用标准、MIT-S-美国军用标准、IEEE-美国电气电子工程师协会
地方标准:国家的地方一级行政机构制订的标准
企业标准
项目规范
标准代号的识别(★)
国际、国外标准代号:标准代号+专业类号+顺序号+年代号
我国国家标准代号:强制性标准代号(GB)、推荐性标准代号(GB/T)、指导性标准代号(GB/Z)、实物标准代号(GSB)
行业标准代号:由汉语拼音大写字母组成,如电子行业SJ
地方标准代号:由DB加上省级行政区划代码的前两位
企业标准代号:由Q加上企业代号组成
数学与经济管理
图论应用
最小生成树
1、把所有节点连接起来且没有回路
2、把所有边权值加起来,最小的就是最小生成树
最短路径
1、找到可以连通起点和终点的路线,并不需要连接所有的节点
2、把所有边权值相加,找到边权值之和最小的那条路径,即是最短路径
3、一般使用迪杰斯特拉算法求解,是一种贪心算法,不断在未标记的节点中寻找距离起点最近的节点,并将其标记,直到所有节点都标记完毕
网络与最大流量(★)
1、找到最大流量通路,然后减去通路中最小流量
2、将这条通路上的流量值都减去这个最小流量值,得到新的网络
3、重复1,2步骤,直到网络无法连通为止,将减去的这些最小流量值相加即可
运筹方法
关键路径法(★★★)
线性规划(★)
1、一般都是目标函数求极值,先要列出约束条件(方程)
2、最优解一般都在交点上,画图找交点或者列方程求解(约束条件)
3、将所有交点带入目标函数,找到最大结果的交点即可
注意:约束条件可以两两求解得到交点,然后验证其它约束条件是否满足,不满足可以直接排除,这样可以快速得到目标交点
动态规划(★★★)
资源分配问题:可以通过暴力求解,将所有情况都列出来,找到最优的结果即可
任务分配问题:可以使用贪心的思想,先找出每一行或每一列的最小值,然后在做动态调整获得最优解
工序问题
第一步:耗时最短的安排最开始执行
第二步:再把最后一步耗时最短的安排在最后完成
通过上面两步可以将方案减少很多
预测与决策(★)
预测
博弈论:考虑不同维度的悖论
状态转移矩阵:,矩阵相乘:
排队论
决策
决策者、可供选择的方案、衡量选择方案的准则、事件、每一事件的发生将会产生的某种结构、决策者的价值观
类型
确定性决策
风险决策
不确定性决策
不确定型决策
乐观主义准则:maxmax准则,其决策的原则是“大中取大”,总抱有乐观和冒险的态度,绝不放弃任何获得最好结果的机会
在决策表中各个方案各个状态的结果中选出最大者,记在表的最右列,再从该列中选出最大者
在决策表中各个方案各个状态的结果中选出最大者,记在表的最右列,再从该列中选出最大者
悲观主义准则:maxmin准则,其决策的原则是“小中取大”,抱有悲观和保守的态度,在各种最坏的可能结果中选择最好的
在决策表中各个方案对各个状态的结果选出最小者,记在表的最右列,再从该列中选出最大者
在决策表中各个方案对各个状态的结果选出最小者,记在表的最右列,再从该列中选出最大者
折中主义准则:Harwicz,即不乐观冒险,也不悲观保守,而是从中折中平衡,用一个系数(折中系数)来表示
并规定,,然后比较cvi,从中选择最大者
并规定,,然后比较cvi,从中选择最大者
等可能准则:Laplace准则,当决策者无法事先确定每个自然状态出现的概率时,可以将每个状态出现的概率定为1/n,然后按照EMV决策
后悔值准则:Savage准则,每个自然状态的最大收益值(损失矩阵取为最小值)作为该状态的理想目标,并将该状态的其它值与最大值的差作为未达到理想目标的后悔值。决策的原则是最大后悔值达到最小(minmax,大中取小,最小最大后悔值)
决策树
求加权平均值:路径加权值*概率
数学建模(★★)
数学建模:是一种数学的思考方法,是运用数学的语言和方法,通过抽象和简化,建立能近似刻画并解决实际问题的模型的一种强有力的数学手段
数学建模过程:模型准备 => 模型假设 => 模型建立 => 模型求解 => 模型分析 => 模型验证(如果验证不合理,要修改假设模型) => 模型应用(验证合理之后)
建模过程
模型准备:了解问题的实际背景,明确其实际意义,掌握对象的各种信息,用数学语言来描述问题
模型假设:根据实际对象的特征和建模的目的,对问题进行必要的简化,并用精确的语言提出一些恰当的假设
模型建立:在假设的基础上,利用适当的数学工具来刻化各变量之间的数学关系,建立相应的数学结构。只要能够把问题描述清楚,尽量使用简单的数学工具
模型求解:利用获取的数据资料,对模型的所有参数做出计算(估算)
模型分析:对所得结果进行数学上的分析
模型验证:将模型分析结果与实际情形进行比较,以此来验证模型的准确性,合理性和适用性。如果模型与实际较吻合,则对计算结果给出其实际含义,并进行解释。如果模型与实际吻合较差,则应该修改假设,再次重复建模过程
模型应用:应用方式因问题的性质和建模的目的而异
模型分析
模型的合理性分析(最佳、适中、满意等)
模型的误差分析(模型误差、观测误差、截断误差、舍入误差、过失误差、绝对误差、相对误差等等)
参数的灵敏性分析(变量数据是否敏感,在最优方案不变的条件下,这些变量允许变化的范围)
模型验证
利用实际案例数据对模型进行检验是很常见的。将模型作为一个黑盒,通过案例数据的输入,检查其输出是否合理
可以请专家来分析模型是否合理。经验丰富的专家一般会根据模型自身的逻辑,再结合实际情况,分析是否会出现矛盾或问题
利用计算机来模拟实际问题,再在计算机上检验该数学模型。有时很难用实际案例或聘请专家来检验模型,采用计算机模拟方法来检验就十分有效
例如:实验项目太大,难以取得实际案例,有的项目技术比较新,缺乏有经验的专家等等
例如:实验项目太大,难以取得实际案例,有的项目技术比较新,缺乏有经验的专家等等
数学建模方法
直接分析法:认识原理,直接构造出模型
类比法:根据类似问题模型构造新模型
数据分析法:大量数据统计分析之后建模
构想法:对将来可能发生的情况给出设想,从而建模
拓展知识点
AI
发展阶段
孕育期(1956年以前:人类追求用工具代替人的脑力脑洞)
形成期(1956年-1970年):AI科学诞生
成长期(1970年-1980年):从实验室走向实际应用,如:专家系统、智能机器人
发展期(1980年以后):使逻辑推理达到数值计算那么快
定义
1、人工智能是赋予机器同人的能力,进行更深度维度的思考能力
2、人工智能是高效能自动化处理人的思维、决策、问题求解和学习的技术
3、人工智能是计算机模型研究智能行为
4、人工智能是提升理解、推理和未知行为的可能性的计算
5、人工智能是计算机程序智能化执行人或动物的行为的任务
图灵测试:指测试者与被测试者(人或者机器)隔开的情况下,通过一些装置向被测试者随意提问题,进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能
AI的核心技术
语音识别技术:将人类的语音中的词汇内容转换为计算机可读的输入
计算机视觉:从图像中识别物体、场景和活动的能力
机器学习:研究计算机怎么模拟或实现人类的学习行为,以获取新的知识或技能
机器人技术:将机器改造成能和人类一起工作,能在不同环境完成不同任务
自然语言处理:计算机处理、理解以及运用人类语言
AI的应用
1、智能工厂:智能工厂由商业智能、运营智能、操作智能三个层次组成,由于自身的自动化水平较高,因此实施智能工厂相对比较容易
2、智能机器人:目前智能机器人开始“就业”,缓慢而稳步地进入日常生活,正在改变人类的生活
3、智能物流:具有数据智慧化、网络协同化和决策智慧化的特征
4、智能家居:以住宅为平台,利用综合布线技术、网络通信技术、自动控制技术、音视频技术将居家生活有关的设施集成
5、智能手机应用:拍照优化、相片按人分组、人脸解锁等等
区块链
【区块链】≠比特币
比特币底层采用了区块链技术
比特币交易在我国定性为【非法运用】
区块链是一个分布式账本,一种特殊的分布式数据库
去中心化
1、链表在多个结点存储,没有中心结点,数据不一致时,以“少数服从多数”原则执行
2、所以要篡改成功,除非篡改51%的结点
区块链的特点
去中心化:由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护
开放性:系统是开放的,如:【交易信息是公开的】,不过【账户身份信息是高度加密的】
自治性:区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成对机器的信任,任何人为的干预都不起作用
安全性(信息不可篡改):数据在多个结点存储多份,篡改数据得改掉51%结点的数据,这太难,同时还有其他安全机制,如:比特币的每笔交易,都由付款人使用私钥签名,证明确实是他同意向某人付款,其他人无法伪造
匿名性(去信任):由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此,交易对手无需通过公开身份的方式让对方自己产生信任,对信用的积累非常有帮助
创世块(0#) <= 1# <= 2# <= ... <= n#
hash加密/防篡改:每一个区块都会使用SHA来记录上一个区块信息的hash摘要信息,也就是篡改会牵一发而动全身
共识算法(博弈论)/全民记账
一般有:POW(工作量证明)、PoS(权益证明)、DPoS(股权授权证明机制)
比特币采用了POW,争夺记账权=挖矿
计算出来的账单结点哈希值前13个字符为0,则符合规则,得到记账权,有一个节点计算出来结果,则广播消息告知其它结点,其它结点更新数据
计算困难,但验证却很容易,比如218903 = 那两个质数的乘积?457*479
收藏
0 条评论
下一页