精华内容
下载资源
问答
  • 2019软件设计师考试要点

    万次阅读 多人点赞 2019-03-18 22:43:12
    软件设计师笔记 一、计算机系统基础知识 1.CPU 的功能:程序控制、操作控制、时间控制、数据处理。 2.计算机系统组成示意图: 指令寄存器 程序计数器 地址寄存器 指令译码器 3.数据表示:原码、反码、补码、移码。...

    软件设计师笔记
    一、计算机系统基础知识
    1.CPU 的功能:程序控制、操作控制、时间控制、数据处理。
    2.计算机系统组成示意图:

    在这里插入图片描述

    指令寄存器 程序计数器 地址寄存器 指令译码器

    3.数据表示:原码、反码、补码、移码。(0 为正,1 为负)
    4.移码:如果机器字长为 N,偏移量为 2N-1,则[X]移=2N-1+[X]补(X 为纯整数)。[X]移=1+X(X
    为纯小数)。
    5.IEEE754:符号位(1 位,0 正 1 负)+阶码(8 位,+127)+尾数(23 位,小数点在最高位之后,随后省略最高位)。
    6.浮点数加减:0 操作数检查,对阶操作(小阶变大阶),尾数加减(阶码用双符号位,尾数用
    单符号位),结果规格化,舍入处理(判定溢出)。
    7.常用校验码:奇偶校验码(只能检错)、海明码(纠错加检错)、循环冗余校验码(CRC)。
    8.计算机体系结构分类:单处理系统,并行处理与多处理系统,分布式处理系统。
    9.指令集的发展:CISC(复杂指令集计算机):增强原有指令的功能,用更为复杂的新指令取
    而代之;RISC(精简指令集计算机):减少指令总数简化指令功能,优化编译降低复杂度。
    10.指令控制方式:顺序方式,重叠方式,流水方式。
    11.RISC 中的流水线技术:超流水线技术,超标量技术,超长指令字技术。
    12.并发性的解决:阵列处理机,并行处理机,多处理机。
    13.主存与 cache 地址映射方式:全相联映射-将主存一个块的地址与内容一起存入 cache 中,

    拷贝灵活但是比较器电路难设计实现;直接映射-一个主存块只能拷贝到 cache 的特定行上去,硬件简单成本低但是容易冲突效率下降;组相联映射-主存块放到哪个组是固定的,但是放到哪一行是灵活的,折中办法广泛采用。
    14.虚拟存储器:页式:页表硬件小,查表速度快但不利于存储保护;段式:界限分明便于
    程序的模块化设计,易于编译修改和保护,但主存利用率低,产生大量碎片,查表速度慢; 段页式:折中办法,广泛采用,但地址变换速度比较慢。
    15.计算机与外设数据交换:无条件传送,查询方式传送,中断方式传送,直接存储器存取
    方式(DMA):CPU 仅在过程开始和结束时有处理,过程中DMA 占用系统总线传送数据。 16.多中断处理办法:多中断信号线法,中断软件查询法,菊花链法,总线仲裁法,中断向量表法。
    17.总线分类:内部总线:芯片的互连,系统总线:CPU,内存,接口等的连接;外部总线: 数据交换。
    18.信息安全 5 要素:机密性,完整性,可用性,可控性,可审查性。
    19.加密技术:对称加密(私人密钥加密):数据加密标准(DES)+三重 DES+RC-5+国际数
    据加密算法(IDEA)+高级加密标准(AES);非对称加密(公开密钥加密,比如 RSA 算法):加密模型+认证模型。
    20.PKI:一种遵循既定标准的密钥管理平台,能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系,必须具有权威认证机构、数字证书库、密钥备份和恢复系统、证书作废系统、应用接口。
    21.计算机可靠性:可靠性:串联系统 R=R1R2,并联系统 R=1-(1-R1)(1-R2);平均无故
    障时间:串联系统 K=K1+K2,并联系统 K=1/K
    (1+1/2)。
    22.计算机系统性能评测常用方法:时钟频率,指令执行速度,等效指令速度法,数据处理速率(PDR)。

    二、程序语言基础知识
    1.编程语言之间的翻译形式:汇编,解释,编译。
    2.程序设计语言的定义:语法,语义,语用。
    3.程序语言的分类:命令式程序设计语言:FORTRAN,PASCAL,C 语言;面向对象的程序
    设计语言(C++,JAVA,smaltalk);函数式程序设计语言(LISP);逻辑型程序设计语言
    (PROLOG)。
    4.程序语言的基本成分:数据,运算,控制,传输。
    5.汇编语言源程序:指令语句,伪指令语句,宏指令语句。
    6.汇编程序:将汇编语言所编写的源程序翻译成机器指令程序。
    7.编译过程:源程序—词法分析—语法分析—语义分析—中间代码生成—代码优化—目标代
    码生成—目标代码。(另全过程有符号表管理和出错处理)
    8.解释程序:分析部分:词法分析、语法分析、语义分析->中间代码;解释部分:解释执行中间代码。
    9.编译与解释方式的比较:前者效率高;后者更具有灵活性和可移植性。

    三、操作系统知识
    1.操作系统的作用:通过资源管理提高计算机系统的效率;改善人机界面,向用户提供友好的工作环境。
    2.操作系统的特征:并发性、共享性、虚拟性和不确定性
    3.操作系统的功能:处理机管理、文件管理、存储管理、设备管理、作业管理
    4.操作系统的类型:批处理操作系统(单道、多道)、分时操作系统(UNIX,多路性、独立
    性、交互性、及时性)、实时操作系统(快速的相应时间、有限的交互能力、高可靠性)、网络操作系统、分布式操作系统、微机操作系统(Windows,Linux)、嵌入式操作系统
    5.程序并发执行的特点:失去了程序的封闭性,程序和机器的执行程序的活动不再一一对应,
    并发程序间的相互制约性
    6.进程的组成:程序、数据、进程控制块(PCB)
    7.进程的状态:新建、就绪、运行、阻塞、终止
    8.原语(若干条机器指令组成)的特点:执行时不能被分割,要么都做要么都不做
    9.进程的同步:进程间完成一项任务时直接发生相互作用的关系
    10 进程的互斥:系统中各进程互斥使用临界资源
    11.信号量的意义:若 S>=0 表示某资源的可用数;若 S<0 则其绝对值表示阻塞队列中等待
    该资源的进程数
    12.PV 操作(低级通讯方式):P 操作申请一个资源,V 操作释放一个资源
    13.高级通讯方式:共享存储模式,消息传递模式,管道通信
    14.管城:由一些共享数据、一组能为并发进程所执行的作用在共享数据上的操作的集合、
    初始代码以及存取权组成,一种同步机制
    15.进程调度(可剥夺+不可剥夺)算法:先来先服务算法:主要用于宏观调度;时间片轮转: 微观调度,分时间片占用 CPU;优先级调度:根据优先级(静态+动态);多级反馈调度:分多个优先级队列前三中调度的综合,先执行新进程。
    16.产生死锁的原因:竞争资源及进程推进顺序算法
    17.产生死锁的四个必要条件:互斥条件,请求保持条件,不可剥夺条件,环路条件
    18.死锁的处理:预防;避免(银行家算法:先计算,如果分配资源后系统进入不安全状态则不予分配);检测(系统定时运行死锁检测程序);解除(资源剥夺法+撤销进程法)
    19.安全状态:系统能按某种顺序来为每个进程分配其所需资源,使每个进程都能顺序完成
    20.线程:是进程中的一个实体,是被系统独立分配和调度的基本单位,基本上不拥有资源
    21.存储器管理:分配和回收主存空间、提高主存利用率、扩充主存、有效保护主存信息
    22.存储器的的层次结构:寄存器、快速缓存(cache)、主存、外存
    23.地址重定位:将逻辑地址转变成物理地址的过程,分静态和动态(程序运行时完成转换)
    24.虚拟存储页面置换算法:最佳置换(以后最久不会被使用),先进先出置换,最近最少未
    使用,最近未用
    25.设备管理的目标:提高设备的利用率,为用户提供方便统一的界面
    26.磁盘调度(使平均寻道时间最少)算法:先来先服务,最短寻道时间优先,扫描算法,
    单向扫描调度
    27.文件:具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合
    28.文件系统:操作系统中实现文件统一管理的一组软件和相关数据的集合,专门负责管理
    和存取文件信息的软件机构
    29.存储管理方案示意图

    在这里插入图片描述

    30.文件系统的安全:一类涉及到技术、管理、法律、道德和政治等问题;另一类涉及操作系统的安全机制
    31.文件系统的可靠性:转储和恢复,日志文件,文件系统的一致性
    32.作业:系统为完成一个用户的计算任务(或一次事物处理)所做的工作总和
    33.作业状态:提交,后备,执行,完成
    34.作业调度算法:先来先服务,短作业优先,响应比高优先,优先级调度,均衡调度
    35.网络操作系统:集中模式,客户端/服务器模式,对等模式
    36.嵌入式操作系统:微型化,可定制,实时性,可靠性,易移植性
    37.shell 变量:用户定义变量,系统定义变量,shell 定义变量

    四、系统开发和运行知识
    1.软件工程:指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件工程的问题。其目的是提高软件生产率,提高软件质量,降低软件成本
    2.软件生存周期:可行性分析与项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护
    3.软件生存周期模型:瀑布模型(按顺序阶段性开发),演化模型(先构造一个初始版本再不断改进),螺旋模型(制定计划、风险分析、实施工程、用户评估),喷泉模型(重视用户需求,允许各步骤交叉进行)
    4.软件开发方法:结构化方法(面向数据流,自顶向下逐层分解),jackson 方法(面向数据结构),原型化方法(开发一个对用户透明的框架,然后根据用户需求壮大),面向对象开发方法
    5.需求分析:确定软件系统的综合要求,分析软件系统的数据要求,导出系统的逻辑模型, 修正项目开发计划,可开发一个原型系统
    6.数据域的属性:数据流,数据内容,数据结构

    7.需求工程:需求开发(需求捕获、需求分析、编写规格说明书、需求验证),需求管理(定义需求基线、处理需求变更、需求跟踪)
    8.软件开发项目管理:成本估算(自顶向下估算方法、自底向上估算方法、差别估算方法),风险分析(风险识别、风险预测、风险评估),进度管理(Gantt 图、PERT 图),人员管理
    (主程序员组、无主程序员组、层次式程序员组)
    9.软件配置管理的目标:标识变更,控制变更,确保变更正确地实现,报告有关变更
    10.基线:软件生存期中各开发阶段的一个特定点,相当于断点,便于检查和肯定阶段成果
    11.软件开发工具:需求分析工具,设计工具,编码与排错工具,测试工具
    12.软件维护工具:版本控制工具,文档分析工具,开发信息库工具,逆向工程工具,再工
    程工具
    13.软件管理和软件支持工具:项目管理工具,配置管理工具,软件评价工具
    14.软件过程评估的意义:改进软件过程,降低软件风险
    15.软件能力过程成熟度:初始级,可重复级,已定义级,已管理级,优化级
    16.统一过程:起始阶段,精化阶段,构建阶段,移交阶段,产生阶段
    17.敏捷开发:极限编程(计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对
    编程、持续集成),水晶法(不同的项目需要不同的策略、约定和方法论),并列征求法(多个小组并行递增实现产品),自适应软件开发
    18.软件质量特性:功能性,可靠性,易使用性,效率,可维护性,可移植性
    19.软件质量保证:应用技术方法,进行正式的技术评审,测试软件,标准的实施,控制变
    更,度量,记录保存和报告
    20.软件复杂性:规模,难度,结构,智能度
    21.软件质量:设计质量(设计的规格说明书符合用户的要求),程序质量(程序按照设计规
    格说明所规定的情况正确执行)
    22.设计质量评审内容:是否合乎用户要求,可靠性,保密措施实现情况,操作特性实施情况,性能实现情况,是否具有可修改性可扩充性、可互换性、可移植性、可测试性、复用性23.程序质量评审内容:功能结构,功能的通用性,模块的层次,模块结构,处理过程的结构
    24.软件实现容错的主要手段就是冗余
    25.冗余:结构冗余,信息冗余,时间冗余,冗余附加调用
    26.系统分析:对当前系统进行详细调查,收集数据;建立当前系统的逻辑模型;分析现状,
    提出意见和新目标;建立新系统的逻辑模型;编写系统方案说明书
    27.结构化分析方法(自顶向下逐层分解):数据流图,数据字典,小说明,补充材料
    28.数据流图(DFD:描述系统的分解):数据流,加工,数据存储,外部实体 P190
    29.DFD 信息流的类型:变换流(输入、变换、输出),事务流(输入到事务中心、选择执行)
    30.数据字典(DD:对图中各成分进行说明):数据流条目,数据存储条目,数据项条目,加工条目 P194
    31.加工逻辑描述方法:结构化语言,判定表,判定树
    32.系统分析报告作用:描述目标系统的逻辑模型,作为用户与开发人员之间的协议或合同,
    作为目标系统验收和评价的依据
    33.系统分析报告内容:组织情况概述,现行系统概述,系统逻辑模型,新系统在各个业务处理环节拟采用的管理方法、算法或模型,与新系统相配套的管理制度和运行体制的建立, 系统设计与实施的初步计划,用户领导审批意见
    34.系统设计:概要设计(设计软件系统总体结构、数据结构及数据库设计、编写概要设计文档、评审),详细设计(分模块进行详细的算法设计、对模块内的数据结构进行设计、对

    数据库进行物理设计、其他设计、编写详细设计说明书、评审)
    35.系统设计基本原理:抽象,模块化,信息隐蔽,模块独立(耦合:模块之间联系的紧密程度;内聚:模块内部各元素之间联系的紧密程度)
    36.系统结构设计原则:分解-协调,自顶向下,信息隐蔽、抽象,一致性,明确性,模块间耦合尽可能小、内聚尽可能高,模块的扇入、扇出系数要合理,模块的规划适当
    37.子系统划分的原则:要具有相对独立性,之间的数据依赖性要尽可能小,结果应使数据冗余较小,应考虑今后管理发展的需要,应便于系统分阶段实现,应考虑各类资源的利用38.模块(组成系统的基本单位)四要素:输入和输出,处理功能,内部数据,程序代码
    39.模块结构图:模块,调用,数据,控制,转接 P203
    40.变换分析(从变换流型的 DFD 导出程序结构图):确定输入流和输出流、分离出变换中
    心,第一级分解,第二级分解,事务分析 P205
    41.面向数据结构的设计方法(jackson 方法):分析确定输入输出数据的逻辑结构,找出输入与输出数据结构有对应关系的数据单元,从描述数据结构的 jackson 图导出描述程序结构的 jackson 图,列出所有操作并分配到程序结构图上,用伪码表示程序 P207
    42.Jackson 图:表达数据元素间的逻辑关系(顺序,选择,重复)或程序结构(顺序,选择, 重复)
    43.系统详细设计:代码设计(唯一性、合理性、可扩充性、简单性、适用性、规范性、系统性),输入设计(确定输入数据内容、输入方式设计、输入格式设计、校对方式设计),输出设计(确定输出内容、选择输出设备与介质、确定输出格式),处理过程设计(程序流程图、盒图:NS 图、形式语言、决策树、决策表),用户界面设计(菜单方式、会话管理方式、提示方式与权限管理),安全控制设计(环境性因素、数据处理因素)
    44.系统实施的任务:按总体设计方案购置和安装计算机网络系统,软件准备,培训,数据准备,投入转换和试运行
    45.系统实施的步骤:按总体设计方案购置和安装计算机网络系统,建立数据库系统,程序设计,收集有关数据并进行录入工作和系统测试,人员培训、系统转换和试运行
    46.程序设计方法:结构化方法(模块内部程序各部分要自顶向下地结构化划分、各程序部分应按功能组合、各程序部分的联系尽量使用调用子程序方式而不是 GOTO 方式),原型方法(将带有普遍性的功能模块集中、开发完成通用模块、生成程序模块原型),面向对象的方法(一个简单直接的映射过程)
    47.程序模块图
    在这里插入图片描述
    48.测试:以最少的人力和时间发现潜在的各种错误和缺陷
    49.测试过程:制定测试计划,编制测试大纲,设计生成测试用例,实施测试,生成测试报

    50.软件测试:单元测试(模块接口、局部数据结构、重要的执行路径、出错处理、边界条

    件),集成测试(把模块按系统设计说明书的要求组合起来进行测试),确认测试(有效性测试、软件配置审查、验收测试),系统测试(恢复测试、安全性测试、压力测试、性能测试、可靠性及可用性和可维护性测试、安装测试)
    51.测试方法:静态测试(人工检测、计算机辅助静态分析),动态测试(白盒测试:逻辑覆
    盖、循环覆盖、基本路径测试;黑盒测试:等价类划分、边值分析、错误猜测、因果图) P223
    52.调试(改正测试时发现的错误):试探法,回溯法,对分查找法,归纳法,演绎法
    53.系统文档:软件开发过程中的文档,硬件采购和网络设计中的文档,系统建设过程中的
    各种来往文件、会议纪要、会议单据等,程序资料和培训教程等
    54.系统转换(新系统试运行成功后与旧系统相互转换):直接转换,并行转换,分段转换
    55.系统可维护性的评价指标:可理解性,可测试性,可修改性
    56.系统维护:硬件维护,软件维护(正确性维护、适应性维护、完善性维护、预防性维护),
    数据维护
    57.系统维护的步骤:提出维护或修改要求,领导审查并做出答复,领导分配任务、维护人员执行修改,验收维护成果并登记修改信息
    58.系统评价:立项评价,中期评价,结项评价

    五、网络基础知识
    1.计算机网络(计算机技术+通信技术)的发展:具有通信功能的单机系统->具有通信功能的多机系统->以共享资源为目的的计算机网络->以局域网及因特网为支撑环境的分布式计算机系统
    2.计算机网络的功能:数据通信,资源共享,负载均衡,高可靠性
    3.计算机网络的分类:局域网(LAN:10m~1000m),城域网(MAN:10km),广域网(WAN:
    100km 以上)
    4.网络拓扑结构:总线型,星型,环型,树型,分布式(无严格的布线规定和形状,各节点有多条线路相连)
    5.OSI 七层参考模型:物理层(物理地传送比特流),数据链路层(负责两相邻节点间无差错传送以帧为单位的数据),网络层(提供端到端的交换网络数据传送功能),传输层(提供可靠的数据传输服务),会话层(提供会话管理服务),表示层(提供格式化的表示和转换数据服务),应用层(提供网络与用户应用软件之间的接口服务)
    6.网络互连设备:中继器(物理层上实现局域网网段互连,用于扩展局域网网段长度),集线器(特殊的多路中继器,有信号方法功能并便于网络维护);网桥(工作与数据链路层,用于连接两个局域网网段),交换机(按每一个包中的 MAC 地址相对简单地决策信息转发);路由器(网络层异构互连,连接多个逻辑上分开的网络),网关(在两个不同类型协议的网络系统之间进行通信)
    7.网络传输介质:有线介质(双绞线,同轴电缆:直接传输数字信号,光纤:传输光信号、需信号转换);无线介质(微波:利用无线电波传输,红外线:传输红外光信号,激光:传激光信号,卫星通信:传输电磁波信号)
    8.局域网组成部件:服务器(文件服务器、打印服务器、通信服务器),客户端(用户与网络应用接口设备),网络设备(网卡,收发器,中继器,集中器,网桥,路由器等),通信介质(数据的传输媒体),网络软件(底层协议软件、网络操作系统等)
    9.协议:规定通信时的数据格式、数据传送时序以及相应的控制信息和应答信号等内容
    10.网络的标准:电信标准,国际标准(IEEE 标准等),Internet 标准(自发标准非政府干预)

    11.决定局域网特性的主要技术:用以传输数据的传输介质,用以连接各种设备的拓扑结构, 用以共享资源的介质访问控制方法
    12.局域网协议:LAN 模型(物理层,数据链路层:逻辑链路控制子层、介质访问控制);以太网(CSMA/CD 技术:边发送边接收、时刻侦听信道);令牌环网(适用于环型网络结构的分布式介质访问控制:广播发送令牌、目标站进行处理);FDDI(类似令牌环网协议、光纤作为传输介质)
    13.广域网协议:点对点协议(PPP:主要用于拨号上网,建立点对点连接发送数据),数字用户线(xDSL:不对称数字用户线ADSL,甚高速数字用户线 VDSL),数字专线(电信数字数据网固定专线,电信铺设),帧中继(在用户网络接口之间提供用户信息流的双向传送, 并保持顺序不变),异步传输模式(ATM:面向分组的快速分组交换模式,使用异步时分复用技术),X.25 协议(在本地数据终端设备和远程数据终端设备之间提供一个全双工、同步的透明信道)
    14.TCP/IP 协议簇特性:逻辑编址,路由选择,域名解析,错误检测和流量控制
    15.TCP/IP 模型
    应用层	文件传输协议 FTP	远程登录协议Telnet	电子邮件协议 SMTP	网络文件服务协议NFS	网络管理协议SNMP	应用层表示层						会话层						传输层		TCP	UDP		传输层网络层	IP	ICMP	ARP (地址解析协议)	RARP	网际层数据链路层	Ethernet IEEE 802.3	FDDI	Token-Ring/ IEEE 802.5	ARCnet	PPP/SLIP	网络接口层物理层						硬件层
    16.Internet 地址格式:域名格式,IP 地址格式
    17.解决 IP 地址短缺问题:长期(使用 Ipv6),短期(使用网络地址翻译技术 NAT:在子网
    内部使用局部地址,外部使用少量的全局地址,通过路由器进行内部地址和外部地址的转换)
    18.Ipv6:40 个字节的首部长度,16 个字节的 IP 地址长度
    19.服务端口:公共端口(01023)注册登记端口(102465535)
    20.Internet 高层协议:域名服务(UDP 端口,53,通过 DNS 服务器将域名变换为 IP 地址);
    远程登录服务(TCP 端口,23,将用户计算机与远程主机连接起来);电子邮件服务(TCP端口,25:SMTP and 110:POP3,发送:SMTP,接收:SMTP+POP3);WWW 服务(TCP端口,80,基于客户端/服务器模式的信息发送技术和超文本技术的综合);文件传输服务
    (TCP 端口,20:数据连接 and 21:控制连接)
    21.网络安全的威胁:计算机存储着国家、机构、组织的秘密信息或个人的隐私成为某类人攻击的目标;软件规模的膨胀容易使系统存在缺陷;信息传输的安全性存在隐患;网络协议本身的漏洞也会引发安全问题
    22.网络安全:运行系统安全,信息系统的安全,信息传播的安全,信息内容的安全
    23.信息系统的需求:保密性,完整性,可用性,可控性,可核查性
    24.网络的安全威胁:物理威胁,网络攻击,身份鉴别,编程威胁,系统漏洞
    25.网络的信息安全:信息的存储安全(用户的标识与验证,用户存取权限限制,系统安全
    监控,计算机病毒防治,数据的加密,计算机网络安全);信息的传输安全(链路加密,节点加密,端到端加密)
    26.防火墙:建立在内外网络边界的过滤封锁机制,防止不良数据包进出被保护的内部网络
    27.防火墙的分类:包过滤型(直接转发报文,对用户透明),应用代理网关型(通过服务器
    建立连接),状态检测型(建立状态连接表,跟踪检测每一个会话状态)

    28.典型防火墙的体系结构:包过滤路由器(在网络层对进出内部网络所有信息进行分析限制),双宿主主机(代理服务器软件在双宿主主机上运行,每一个接口连接不同网段),被屏蔽主机(由过滤路由器和应用网管组成,包过滤+代理服务,内网和外网双重保障),被屏蔽子网(由两个包过滤路由器和一个应用网关组成,最安全的防火墙系统)

    六、多媒体基础知识
    1.媒体:感觉媒体(使人产生感觉的媒体),表示媒体(传输感觉媒体的中介媒体),表现媒体(进行信息输入和输出的媒体),存储媒体(用于存储表示媒体的物理介质),传输媒体(传输表示媒体的物理介质)
    2.多媒体的特性:多样性,集成性,交互性,非线性,实时性,信息使用的方便性,信息结
    构的动态性
    3.虚拟现实:运用计算机对现实世界进行全面仿真,创建与现实社会类似的环境,通过多种传感设备使用户“投入到该环境中”,实现用户与该环境直接进行自然交互
    4.虚拟现实技术的特征:多感知(听觉感知、力觉感知、触觉感知、运动感知、味觉感知、嗅觉感知),沉浸(用户感受到的模拟环境的真实程度),交互(用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度)
    5.虚拟现实的分类:桌面虚拟现实,完全沉浸的虚拟现实,增强现实性的虚拟现实,分布式虚拟现实
    6.声音感觉的三个指标:音量,音调,音色
    7.声音信号的数字化:采样,量化,编码 @̌
    8.数字语音的数据压缩方法:波形编码,参数编码,混合编码
    9.声音合成:语音合成(发音参数合成、声道模型参数合成、波形编辑合成),音乐合成
    10.MIDI(乐器数字接口):数字音乐的国际标准
    11.色彩三要素:亮度,色调,色饱和度
    12.彩色空间:RGB,CMY,YUV 等
    13.图形数据表示形式:矢量图形(用数学的方式描述图像),位图图像(用像素点来描述的
    图)
    14.图像的属性:分辨率,图像深度,真彩色和伪彩色
    15.图像的数据量:图像的总像素*图像深度/8
    16.数据压缩:有损压缩(压缩过程中损失一定信息),无损压缩(行程长度编码,增量调制
    编码,霍夫曼编码)
    17.多媒体数据压缩编码标准:JPEG,MPEG,H.261
    18.动画(本质是运动):实时动画(用各种算法来实现运动物体的运动控制),矢量动画(由
    矢量图衍生出的动画形式),二维动画(对传统动画的一个改进),三维动画(根据三维数据模型)
    19.彩色电视制式:NTSC 制,PAL 制,SECAM 制
    20.数字视频标准:采样频率,分辨率,数据量
    21.超文本(将文本中遇到的一些相关内容通过链接组织在一起)三要素:节点,链,网络
    22.超媒体:用超文本方式组织和处理多媒体信息
    23.流媒体:在网络中使用流式传输技术的连续时基载体。信息经过压缩之后放到专用流服
    务器上,让浏览者一边下载一边观看或收听
    24.多媒体计算机硬件系统:音频卡,视频卡,光盘驱动器,扫描仪,光学字符阅读器,触

    摸屏,数字化仪,操纵杆,绘图仪、投影仪和激光视盘播放器
    25.多媒体计算机软件系统:多媒体操作系统,多媒体应用软件的开发工具,多媒体应用软件

    七、数据库技术基础
    1.数据库系统:数据库,硬件,软件,人员
    2.DBMS(数据库管理系统)的功能:数据定义,数据库操作,数据库运行管理,数据组织、
    存储和管理,数据库的建立和维护,与其他软件系统的通信功能等
    3.DBMS 的特征:数据结构化且统一管理,有较高的数据独立性,数据控制功能(数据库的安全性保护、数据的完整性、并发控制、故障恢复)
    4.DBMS 分类:关系数据库系统(实体间的联系用关系表示),面向对象的数据库系统(以对象形式对数据建模),对象关系数据库系统(在关系数据模型基础上提供处理新的数据类型操作的能力)
    5 数据库系统体系结构:集中式(数据、数据管理、数据库功能等都集中在一起),分布式
    (物理上分布+逻辑上分布),C/S 模式(客户端负责数据表示服务、服务器负责数据库服务),并行结构(多个 CPU 物理上连在一起处理)
    6.数据库的三级模式:概念模式(数据库中全部数据的逻辑结构和特征的描述、只涉及型的
    描述而不涉及具体的值),外模式(用户与数据库系统的接口、用户用到那部分数据的描述),内模式(数据物理结构和存储方式的描述、数据在数据库内部的表示方式)
    7.数据库的两级映像:模式/内模式映像(实现概念模式与内模式的转换),外模式/模式映像
    (实现外模式与概念模式的转换)
    8.数据的独立性:物理独立性(数据库的内模式改变时数据的逻辑结构不变),逻辑独立性
    (用户的应用程序与数据库的逻辑结构相互独立)
    9.数据模型:概念数据模型(E-R 模型等),基本数据模型(层次模型:用树型结构表示数据间的联系、网状模型:用网络结构表示数据间的联系、关系模型:用表格结构表示实体间的联系、面向对象模型:对象标识+封装+对象的属性+类和类层次+继承)
    10.数据模型三要素:数据结构,数据操作,数据的约束条件
    11.E-R 图:实体(矩形),联系(菱形),属性(椭圆形)
    12.完整性约束:实体完整性,参照完整性,用户自定义完整性
    13.关系代数运算:并,交,差,笛卡尔积,投影,选择,连接,除
    14.SQL 语言的特点:综合统一,高度非过程化,面向集合的操作方式,两种使用方式(自
    含式、嵌入式),语言简洁易学易用
    15.SQL 语言的组成:数据定义语言,交互式数据操纵语言,事务控制,嵌入式 SQL 和动态SQL,完整性,权限管理
    16.SQL 数据定义:创建(create),修改(alter),删除(drop):表(table),视图(view[as select]),索引(index[on])
    17.SQL 数据查询:select…from…where…group by…having…order by… P375
    18.插入数据:insert into…values…
    19.修改数据:update…set…=…where…
    20.删除数据:delete from…where…
    21.授权:grant…on…to (with grant option)
    22.回收权限:revoke…on…from…

    23.函数依赖:反映属性间的联系(X→Y);完全函数依赖:(学生 ID,所修课程 ID)→成绩;部分函数依赖 :(学生 ID,所修课程 ID)→学生姓名;平凡函数依赖:X→Y 且 Y 包含于X;非平凡函数依赖:X→Y 且Y 不包含于X;传递函数依赖:X→Y,Y→Z
    24.规范化:1NF:每个分量都不可再分;2NF:消除非主属性对码的部分函数依赖;3NF:
    消除非主属性对码的传递函数依赖
    25.模式分解标准:无损连接,保持函数依赖
    26.事务的 ACID 性质:原子性,一致性,隔离性,持久性
    27.事务管理:事务开始(begin transaction),事务提交(commit),事务回滚(rollback) 28.数据库故障:事务内部故障,系统故障,介质故障,计算机病毒
    29.数据备份方法:静态转储和动态转储,海量转储和增量转储,日志文件
    30.数据恢复步骤:反向扫描文件日志,对事物的更新操作执行逆操作,继续反向扫描和更
    新,直到事务的开始标志
    31.并发控制的技术:封锁(写锁、读锁)
    32.数据不一致性:丢失修改,不可重复读,读脏数据

    八、数据结构
    1.数据结构:数据元素的集合及元素间的相互关系和构造方法
    2.线性表的存储结构:顺序存储,链式存储
    3.单链表节点:typedef struct node{ int data; struct node *link; }NODE,*LinkList; 4.双向链表:每个节点有两个指针,分别指出直接前驱和直接后继
    5.循环链表:尾节点指针指向第一个节点
    6.静态链表:借助数组来描述线性表的链式存储结构
    7.栈:后进先出;初始化栈:InitStack(S) 判栈空:StackEmpty(S) 入栈:Push(S,x) 出栈:
    Pop(S) 读取栈顶元素:Top(S) 顺序存储+链式存储
    8.队列:先进先出,尾入头出;初始化队:初始化队:InitQueue(Q) 判队空:Empty(Q) 入队:EnQueue(Q,x) 出队:DeQueue(Q) 读队头元素:FrontQue(Q) 顺序存储+链式存储
    9.串:仅由字符构成的有限序列,是取值范围受限的线性表 串的模式匹配
    10.数组:定长线性表在维数上的扩张,一般不做插入删除运算
    11.矩阵:特殊矩阵(元素分布有一定的规律:对称矩阵、三角矩阵、对角矩阵);稀疏矩阵
    (非零元素远少于零元素且肺部无规律:用三元组存储(行号,列号,值))
    12.广义表(表中有表):表头(表中第一个元素);表尾(表中除去表头剩下的部分)
    13.树:递归的,元素之间有明显的层次关系
    14.完全二叉树应采用顺序存储结构,一般二叉树则应采用链式存储结构
    15.二叉树的链式存储结构 :typedef struct BiTnode{ int data; struct BiTnode *lchild,
    *rchild; }BiTnode, *BiTree;
    16.二叉树的遍历:先序遍历(先访问根节点),中序遍历(第二访问根节点),后序遍历(最后访问根节点),层序遍历(利用队列、每次出同一层的节点时进他们的子节点层)
    17.线索二叉树:加上线索(直接前驱和直接后继)的二叉树
    18.最优二叉树(哈夫曼树):一类带权路径长度最短的树
    19.树的存储结构:双亲表示法(顺序存储);孩子表示法(链式存储);孩子兄弟表示法(链
    式存储,两个指针分别为第一个孩子和下一个兄弟)
    20.图:一个节点的前驱节点和后继节点数目没有任何限制
    21.图的表示:G=(V,E);V:顶点的集合;E:边的集合
    22.网:边带权值的图
    23.图的相关概念
    在这里插入图片描述
    24.图的存储结构:邻接矩阵表示法,邻接链表表示法
    25.图的遍历:深度优先搜索,广度优先搜索
    26.生成树:极小连通子图,针对连通图
    27.最小生成树(权值和最小的生成树)算法:普尼姆算法(在相邻边的基础上求最小,与
    边数无关,适于边稠密的网);克鲁斯科尔算法(在不构成环的基础上找最小边直至连通,与顶点数无关,适于边稀疏的网)
    28.AOV 网:有向图中顶点表示活动,有向边表示活动间的优先关系
    29.拓扑排序:将AOV 网中所有顶点按优先顺序排成一个线性序列的过程
    30.AOE 网:有向图中有向边表示活动,边上的权值表示该活动持续的时间
    31.关键路径:从源点到汇点的路径中长度最长的
    32.最短路径:从源点到其余各顶点的最短路径 迪杰斯克拉算法
    33.平均查找长度:关键字和给定值进行过比较的记录个数的平均值
    34.静态查找方法:顺序查找;折半查找;分块查找
    35.动态查找:表结构本身在查找过程中是动态生成的
    36.二叉排序树:左子树上所有节点的值小于根节点的值,右子树上所有节点的值大于根节
    点的值
    37.平衡二叉树(AVL 树):左子树和右子树高度之差的绝对值不超过 1
    38.B_树(m 阶):每个节点子树个数<=m,根节点子树个数=0 或>=2,其他节点子树个数=0
    或>=m/2
    39.哈希表:通过哈希函数(以记录的关键字为自变量)得到记录的存储地址;定长按一定函数规律存放数据;哈希地址+关键字
    40.哈希表的重点:构造哈希函数(直接定址法,数字分析法,平方取中法,折叠法,随机数法,除留余数法);解决冲突(开放定址法,链地址法,再哈希法)
    41.简单排序(时间复杂度O(n2),空间复杂度 O(1)):直接插入排序(插入第 i 个时前 i-1 个以排序好);冒泡排序(相邻两个比较排序,每次循环确定一个极值);简单选择排序(第 i个依次与后面每个元素比较排序,每次循环确定一个极值,不稳定)
    42.高端内部排序:希尔排序(先将整个序列分割成若干序列分别进行直接插入排序,再对

    整个序列进行一次直接插入排序,不稳定);快速排序(将整个记录分割成独立的两部分,两个指针分别指向对应部分的两端,往中间移动比较排序,递归,不稳定);堆排序(建立初始堆输出并删除堆顶关键字,再建立新堆得到新的关键字依次输出,不稳定);归并排序
    (将若干个有序序列合并为新的有序序列);基数排序(按组成关键字的各个数位的值进行排序)

    9、算法设计与分析
    1.算法的特性:有穷性,确定性,可行性,输入,输出
    2.算法的表示方法:自然语言,流程图,程序设计语言,伪代码
    3.递归算法求时间复杂度:展开法(将等式依次展开);代换法(用所猜测的值代替函数的
    解)
    4.分治法(将一个难以直接解决的大问题分解成一些规模较小的小问题各个击破):分解,求解,合并
    5.动态规划法(将待求解问题分解成若干子问题分别求解,再根据子问题的解得到原问题的解;分解得到的子问题往往不是独立的):找出最优解性质并刻画其结构特性;递归地定义最优解的值;以自底向上的方式求出最优值;根据最优值构造最优解
    6.贪心算法(仅根据当前已有信息做出选择,重点考虑局部最优以达到全局最优):最优子结构;贪心选择性质
    7.回溯法(以深度优先的方式系统地搜索问题):定义问题的解空间;确定解空间结构;深度优先的方式搜索解空间
    8.分支限界法(以广度优先或以最小耗费优先的方式搜索解空间):队列式分支限界法;优先队列式分支限界法
    9.概率算法(把随机性的选择加入到算法中,允许较小概率的错误来提高运行效率):数值概率算法;蒙特卡罗算法;拉斯维加斯算法;舍伍德算法
    10.近似算法(放弃求最优解,而用近似最优解代替)衡量标准:算法的时间复杂度;解的近似程度
    11.NP 完全性理论:研究计算问题难易以及一类特殊的难解问题的理论
    12.P 类问题:能够以O(nk)的时间运行一个确定性算法得到准确答案
    13.NP 类问题:能够以 O(nk)的时间运行一个不确定性算法得到准确答案
    14.NP 完全问题:能够证明用多项式时间的确定性算法得到准确答案

    10、面向对象技术
    1.面向对象技术:以客观世界的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结果与客观世界的实际比较接近,容易被人们所接受
    2.面向对象:对象(对象名、属性、操作),分类(所包含的方法和数据描述一组对象的共同行为和属性),继承(父类与子类之间共享数据和方法的机制),通过消息的通信(对象之间进行通信的一种构造)
    3.多态:不同的对象收到同意消息产生完全不同的结果(重载+重写+类属)
    4.绑定:把过程调用和响应调用所需要执行的代码加以结合的过程

    5.动态绑定:当一个对象发送消息请求服务时,根据接受对象的具体情况将请求的操作与实现的方法进行连接
    6.面向对象程序设计语言应支持:被封装的对象;类和实例概念;类间的继承性;多态
    7.程序设计范型:人们在程序设计时所采用的基本方式模型;(+类+继承性=面向对象程序设计范型)
    8.面向对象的好处:解决了产品质量与生产率之间的权衡;使系统具有很高的灵活性和易扩充性;能管理复杂性并增强伸缩性;把某一领域分割成各种对象分析设计更合理;从概念模型化到分析、设计、编码可以实现无缝传递;通过封装进行信息隐蔽有助于建立安全的系统9.典型的面向对象设计语言:Smalltalk,Eiffel,C++,JAVA
    10.类的特征:同一个类的不同实例具有相同的数据结构和规律相同的行为;同一个类的不同实例可以持有不同的值因而可以具有不同的状态;实例的初始状态可以在实例化时确定11.消息传递:使对象具有交互能力的主要模型
    12.对象自身引用(this):值使得方法体中引用的成员名与特定的对象相关;类型则决定了方法体被实际共享的范围
    13.虚拟函数:只给出方法的定义不给出实现过程,供其子类重置(overriding)
    14.类属:类的模版;参数多态机制;不限定成员的类型,具体对象再赋予具体类型
    15.类库:预先定义的程序库,以程序模块的形式按照类层次结构把一组类的定义和实现组织在一起
    16.抽象类:无实例的类,以供继承
    17.面向对象分析:认定对象;组织对象;描述对象间的相互作用;定义对象的操作;定义对象的内部信息
    18.面向对象设计:设计分析模型,实现相应源代码
    19.面向对象软件的测试:算法层,类层,模版层,系统层
    20.面向对象的方法:OOA 方法:主题层,对象类层,结构层,属性层,服务层;OOD 方法:问题域部件,人机交互部件,任务管理部件,数据管理部件;Booch 的 OOD 方法:标识类和对象,确定他们的含义,标识他们之间的关系,说明每一个类的界面和实现;OMT
    (面向对象建模技术):对象模型,动态模型,功能模型—分析,系统设计,对象设计,实现;UML(统一建模语言):事务(结构事务、行为事务、分组事务、注释事务),关系(依赖、关联、泛化、实现),图(类图、对象图、用例图、交互图、状态图、活动图、构建图、部署图)
    21.设计模式四要素:模式名称,问题,解决方案,效果
    22.设计模式分类:创建型(抽象了实例化过程,帮助系统独立于如何创建、组合和表示它的那些对象,如 Singleton 模式:保证类只能有一个实例),结构型(采用继承机制灵活地组合类和对象以获得更大的结构),行为型(使用继承机制在类间分派行为,描述对象或类的模式以及其通信模式,如 Observer 模式:一旦模型发生变化所有视图都会得到通知)
    ---------P550

    1 、标准化和软件知识产权基础
    1.标准:对重复性事务和概念所做的统一规定
    2.标准化对象:标准化的具体对象(需要指定标准的具体事务);标准化的总体对象(各种具体对象的全体所构成的整体)
    3.标准化活动过程:标准的制定,标准的实施,标准的更新

    4.标准的分类:根据适用范围(国际标准,国家标准,区域标准,行业标准,企业标准,项目规范);根据标准的性质(技术标准,管理标准,工作标准);根据标准化的对象和作用(基础标准,产品标准,方法标准,安全标准,卫生标准,环境保护标准,服务标准);根据法律的约束性(强制性标准,推荐性标准)
    5.信息技术标准化:信息编码标准化(如 ASCII 码);汉字编码标准化(如 gb2312);软件工程标准化(基础标准,开发标准,文档标准,管理标准)
    6.权威国际标准化组织:国际标准化组织(ISO);国际电工委员会(IEC)
    7.知识产权:人们基于自己的智力活动创造的成果和经营管理活动中的经验、知识而依法享有的权利
    8.知识产权的分类:工业产权(专利、实用新型、工业品外观设计、商标、服务标记、厂商名称、产地标记、原产品名称、制止不正当竞争等);著作权(版权)
    9.知识产权的特点:无形性,双重性,确认性,独占性,地域性,时间性
    10.计算机软件著作权受保护条件:独立创作,可被感知,逻辑合理
    11.计算机软件著作权的权利:人身权(发表权,署名权);著作财产权(使用权,复制权,修改权,发行权,翻译权,注释权,信息网络传播权,出租权,使用许可权,获得报酬权, 转让权)
    11.软件经济权利的许可使用:独占许可使用,独家许可使用,普通许可使用,法定许可使用,强制许可使用
    12.软件著作权:谁开发,谁享有
    13.计算机软件著作权特点:技术性,依赖性,多样性,运行性
    14.软件著作权侵权的法律责任:民事责任,行政责任,刑事责任
    15.商业秘密:部位公众所知的、能为权利人带来经济利益、具有实用性并经权利人采取保密措施的技术信息和经营信息;包括经营秘密和技术秘密
    16.商业秘密的构成条件:未公开性,实用性,保密性
    17.授予专利权的条件:新颖性,创造性,实用性
    18.软件企业应建立的合同规范:劳动合同关系,软件开发合同,软件许可使用(或转让) 合同

    12 软件系统分析与设计
    1.软件设计师应用性技术内容:结构化分析与设计;数据库分析与设计;面向对象分析与设计;算法分析与设计;面向过程的程序设计与实现;面向对象的程序设计与实现
    2.结构化分析与设计:确定系统边界,画出系统环境图;自顶向下,画出各层数据流图;定义数据字典;定义加工说明;将图、字典以及加工组成分析模型
    3.数据库分析与设计:数据库规划;需求描述与分析;数据库与应用程序设计;数据库系统实现;测试阶段;运行维护
    4.数据库设计的方法:用户需求分析(调查机构情况,熟悉业务活动,明确用户需求,确定系统边界,分析系统功能,分析系统数据,编写分析报告);概念设计(数据建模,E-R 方法);逻辑设计(数据模式设计:层次模型、网状模型、关系模型);物理设计(确定数据分布,确定数据的存储结构,确定数据的访问方式)
    5.面向对象分析与设计的步骤:建模系统功能(确定参与者,确定需求用例,构造用例模型, 记录需求用例描述);定义领域模型(定义概念、属性和重要的关联);定义交互、行为和状态(确定并分类用例设计类,确定类属性、行为和责任);定义设计类图(会议,用户,会议主题,稿件,审阅意见)
    6.算法设计过程:理解问题;确定相关因素(包括问题的输入与输出、用何种数据结构、用什么样的算法设计策略);设计算法;证明算法的正确性;分析算法的效率;实现算法
    7.算法问题类型:查找问题;排序问题;图问题;组合问题(最优化问题);几何问题(点、线、面、体)
    8.面向过程的程序设计与实现的核心:C 语言->指针
    9.面向对象的程序设计与实现的核心:设计模式

    展开全文
  • 软件中级考试——软件设计师笔记

    千次阅读 2019-05-16 09:12:05
    软件设计师复习笔记 编译与解释的区别 解释程序在语法、词法和与语义方面与编译程序的工作原理相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此解释程序不产生源程序的目标代码。 ...

    软件设计师复习笔记

    编译与解释的区别

    解释程序在语法、词法和与语义方面与编译程序的工作原理相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此解释程序不产生源程序的目标代码。

    有限自动机

    有限自动机是一种识别装置的抽象概念,他能准确的识别正规集,可分为两类:确定的有限自动机和不确定的有限自动机。所谓『确定的有限自动机』是指在当前状态下,输入一个符合,有限自动机转换到唯一的下一个状态,称为后继状态;而『非确定的有限自动机』是指在当前状态下输入一个符号,可能有两种以上可选择的后继状态,并且非确定的有限自动机所对应的状态转换图可以有标记为的边。

    正规式

    https://blog.csdn.net/jxch____/article/details/78909757

    操作系统的五大管理

    进程管理、存储管理、设备管理、文件管理、作业管理。

    银行家算法

    银行家算法视频

    页面置换算法

    页面置换算法

    磁盘调度算法

    磁盘调度算法

    虚拟技术和SPOOLING算法

    https://blog.csdn.net/weixin_42229896/article/details/80736517

    位示图

    https://blog.csdn.net/weixin_42229896/article/details/80736517

    常见的寄存器及各寄存器的作用

    AX累加寄存器:常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据.
    BX基址寄存器:常用于地址索引;
    CX计数寄存器:常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器
    DX数据寄存器:常用于数据传递。
    SP堆栈指针:与SS配合使用,可指向目前的堆栈位置;
    BP基址寄存器:可用作SS的一个相对基址位置;
    SI源变址寄存器:可用来存放相对于DS段之源变址指针;
    DI目的变址寄存器:可用来存放相对于 ES 段之目的变址指针。

    CS代码段寄存器(Code Segment Register),其值为代码段的段值;
    DS数据段寄存器(Data Segment Register),其值为数据段的段值;
    ES附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    SS堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
    FS附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    GS附加段寄存器(Extra Segment Register),其值为附加数据段的段值。

    网络协议

    第一层:物理层
    规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械 特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率 距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程。在这一层,数据的单位称为比特(bit)。属于物理层定义的包括:以太网、调制解调器、电力线通信(PLC)、SONET/SDH、G.709、光导纤维、同轴电缆、双绞线等。
    第二层:数据链路层
    在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧(Frame)。属于数据链路层的包括:Wi-Fi(IEEE 802.11)、WiMAX(IEEE 802.16)、ATM、DTM、令牌环、以太网、FDDI、帧中继、GPRS、EVDO、HSPA、HDLC、PPP、L2TP、PPTP、ISDN、STP等。
    第三层:网络层
    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息–源站点和目的站点地址的网络地址。如果你在谈论一个IP地址,那么你是在处理第三层的问题,这是“数据包”问题,而不是第二层的“帧”。IP是第三层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在这第三层处理。地址解析和路由是三层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。在这一层,数据的单位称为数据包(packet)。网络层的协议包括:IP(IPv4、IPv6)、ICMP、ICMPv6、IGMP、IS-IS、IPsec、ARP、RARP等。
    第四层:传输层
    第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段 (segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的 数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中 传输层对上层屏蔽了通信传输系统的具体细节。传输层的协议包括:TCP、UDP、TLS、DCCP、SCTP、RSVP、OSPF等。
    第五层:会话层
    这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。
    第六层:表示层
    这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。
    第七层:应用层
    应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层的协议包括:
    DHCP、DNS、FTP、Gopher、HTTP、IMAP4、IRC、NNTP、XMPP、POP3、SIP、SMTP、SNMP、SSH、TELNET、RPC、RTCP、RTP、RTSP、SDP、SOAP、GTP、STUN、NTP、SSDP、BGP、RIP等。

    展开全文
  • 按照下图完成拓扑结构设计: 1.按照下图完成拓扑结构设计: 2.将配置的相关数据填写在下面表格中。 PC:      IP地址 :          ...
    • 按照下图完成拓扑结构设计:

    在这里插入图片描述


    1.按照下图完成拓扑结构设计:
    在这里插入图片描述
    2.将配置的相关数据填写在下面表格中。
    PC:      IP地址 :           子网掩码:
    PC0    196.168.1.1    255.255.255.0
    PC1    196.168.1.2     255.255.255.0
    PC2    196.168.1.3     255.255.255.0
    PC3    196.168.1.4     255.255.255.0

    3.捕获数据包,进入模拟模式;添加简单PDU,PC1->PC2;
    在这里插入图片描述
    4.观察以太网帧的封装格式,打开捕获列表中第二个(P0->Switch0)的数据包;观察Inbound PDU中Ethernet的封装格式;注意观察前导码、源/目标MAC地址的取值,并记录;
    在这里插入图片描述

    前导码:101010…1011
    目的MAC: 000A.41CE.C129
    来源MAC: 0002.170A.CBBB

    5.观察交换机是否会修改以太网帧各字段值,打开捕获列表中第三个(Switch0->P2)的数据包;观察Inbound PDU中Ethernet的封装;注意观察前导码、源/目标MAC地址的取值,与步骤3的各字段取值进行对比;
    在这里插入图片描述

    前导码:101010…1011
    目的 MAC: 0000.0C10.352C
    来源 MAC: 0002.170A.CBBB

    展开全文
  • 软件设计概述

    万次阅读 2016-08-28 19:58:20
    软件设计是把需求转化为软件系统的最重要的环节,系统设计的优劣在根本上决定了软件系统的质量。 在此,主要阐述软件系统设计的5个核心内容:体系结构设计、用户界面设计、数据库设计、模块设计、数据结构和算法...

    from:http://blog.csdn.net/guoxiaoqian8028/article/details/24204273

    概述

    软件设计是把需求转化为软件系统的最重要的环节,系统设计的优劣在根本上决定了软件系统的质量。

    在此,主要阐述软件系统设计的5个核心内容:体系结构设计、用户界面设计、数据库设计、模块设计、数据结构和算法设计。旨在帮助开发人员搞清楚“设计什么”以及“如何设计”。

    一般把设计过程划分为两个阶段:概要设计阶段和详细设计阶段,如下所示:

    • 概要设计阶段的重点是体系结构设计。
    • 详细设计阶段的重点是用户界面设计、数据库设计、模块设计、数据结构与算法设计等。

    可根据项目的情况进行文档裁减和过程合并,如项目开发过程只有一个设计阶段和设计文档。

    体系结构

    体系结构如同人的骨架。如果某个家伙的骨架是猴子,那么无论怎样喂养和美容,这家伙始终都是猴子,不会成为人。

    由此可见,体系结构乃是系统设计的重中之重。

    目前业界比较流行的软件结构模式有C/S(客户/服务器)、B/S(BROWSE/SERVER)、层次结构(上下级层次结构、顺序相邻的层次结构、含中间件的层次结构)

    体系结构设计原则

     合适性

    即体系结构是否适合于软件的“功能性需求”和“非功能性需求”。高水平的设计师高就高在“设计出恰好满足客户需求的软件,并且使开发方和客户方获取最大的利益,而不是不惜代价设计出最先进的软件。

     结构稳定性

    详细设计阶段的工作如用户界面设计、数据库设计、模块设计、数据结构与算法设计等等,都是在体系结构确定之后开展的,而编程和测试则是更后面的工作,因此体系结构应在一定的时间内保持稳定。

    软件开发最怕的就是需求变化,但“需求会发生变化”是个无法逃避的现实。人们希望在需求发生变化时,最好只对软件做些皮皮毛毛的修改,可千万别改动软件的体系结构。如果当需求发生变化时,程序员不得不去修改软件的体系结构,那么这个软件的系统设计是失败的。

    高水平的设计师应当能够分析需求文档,判断出哪些需求是稳定不变的,哪些需求是可能变动的。于是根据那些稳定不变的需求设计体系结构,而根据那些可变的需求设计软件的“可扩展性”。

     可扩展性

    可扩展性是指软件扩展新功能的容易程度。可扩展性越好,表示软件适应“变化”的能力越强。

    可扩展性越来越重要,这是由现代软件的商业模式决定的:

    • 社会的商业越发达,需求变化就越快。需求变化必将导致修改(或者扩展)软件的功能,现代软件的规模和复杂性要比十年前的大得多(对比一下操作系统的变化就明白了),如果软件的可扩展性比较差的话,那么修改(或者扩展)功能的代价会很高。
    • 现代软件产品通常采用“增量开发模式”,开发商不断地推出软件产品的新版本,从而不断地获取增值利润。如果软件的可扩展性比较差的话,每次开发新版本的代价就会很高。虽然开发商抓住了商机,但却由于设计水平差而导致没有赚取多少利润,真是要活活气死。

     可复用性

    由经验可知,通常在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。

    可复用性是设计出来的,而不是偶然碰到的。要使体系结构具有良好的可复用性,设计师应当分析应用域的共性问题,然后设计出一种通用的体系结构模式,这样的体系结构才可以被复用。

    用 户 界 面 设 

    为了提高用户界面的易用性和美观程度,总结了十个设计原则。用于提高易用性的界面设计原则有8个:

    • 用户界面适合于软件的功能
    • 容易理解
    • 风格一致
    • 及时反馈信息
    • 出错处理
    • 适应各种用户
    • 国际化
    • 个性化

    用于提高美观程度的设计原则有:

    • 合理的布局
    • 和谐的色彩

     用户界面适合于软件的功能

    用户界面的合适性是指界面与软件功能相融洽的程度。软件的功能需要通过用户界面来展现,用户界面一定要适合于软件的功能,这是最基本的要求。界面的合适性既提倡外美内秀,又强调恰如其分。

     容易理解

    提高用户界面可理解性的一些规则如下:

    • 界面中的所有元素(如菜单、工具条等)没有错误,也不会让人误解。
    • 所有的界面元素应当提供充分而必要的提示,例如当鼠标移动到工具条上的某个图标按钮时,应当在该图标旁边出现功能提示。
    • 界面结构能够清晰地反映工作流程,以便用户按部就班地操作。
    • 对于复杂的用户界面而言,最好提供界面“向导”,及时让用户知道自己在界面结构中所处的位置。例如对于基于Web的应用软件,应该在界面上显示“当前位置”,否则用户很容易在众多的页面中迷失方向。

    ● 风格一致

    风格一致有两方面的含义:

    (1) 一个软件的用户界面中,同类的界面元素应当有相同的视感和相同的操作方式。例如命令按钮是最常见的界面元素,所有命令按钮的形状、色彩以及对鼠标的响应方式都是一致的。

    (2) 同一类型软件的用户界面应当有一定程度的相似性。例如Microsoft公司的Office家族里有Word、Excel、PowerPoint、Outlook等软件,这些软件提供的“复制、剪切、粘贴”功能的操作方式都是相同的。

     及时反馈信息

    用户进行某项操作后,如果过了一会儿(几秒钟)用户界面一点反应都没有,这将使用户感到迷茫和不安,因为他不知道是自己操作错了还是软件的原因导致死机了。所以及时反馈信息很重要,至少要让用户心里有数,知道该任务处理得怎么样了,有什么样的结果。

    例如下载一个文件,界面上应当显示“百分比”或相关数字来表示下载的进度,否则人们不知道要等待多少时间。如果某些事务处理不能提供进度等数据,那么至少要给出提示信息如“正在处理,请等待…”,最好是提供合适的动画,让用户明白软件正在干活、没有死机。

     出错处理

    在设计用户界面时必须考虑出错处理,目的是让用户不必为避免犯错误而提心吊胆、小心翼翼地操作。常见的错误处理方式有:

    • 提供对输入数据进行校验的功能。当用户输入错误的数据时,及时提醒用户改正数据。
    • 对于在某些情况下不应该使用的菜单项和命令按钮,将其“失效”(屏蔽)可以有效防止该项功能被错误地使用。例如:对于某些管理软件,不同的用户有不同的操作权限。如果低权限的用户登录到系统,那些只有高级权限用户才能使用的功能应当被屏蔽(如变成“灰色”不可操作)。
    • 提供Undo功能,用以撤销不期望的操作。
    • 执行破坏性的操作之前,应当获得用户的确认。例如用户删除一个文件时,应当弹出对话框:“真的要删除该文件吗”,当用户确认后才真正删除文件。

     合理的布局

    首先,界面的布局应当符合逻辑,最好能够与工作流程吻合。界面设计人员只有仔细地分析软件的需求,才能提取对界面布局有价值的信息。

    其次,界面的布局应当整洁(整齐清爽)。界面元素应当在水平或者垂直方向对齐,行、列的间距保持一致。窗体的尺寸要合适,各种控件不能过分拥挤也不能过分宽松。要善于利用窗体和控件的空白,以及分割用的线条。

     和谐的色彩

    用户界面是否美观,主要取决于该界面的布局和色彩搭配。实现“合理的布局”相对比较容易一些,设计和谐的色彩太困难了,因为色彩的组合千变万化,并且人们对颜色的喜好也极不相同。

    对于广大软件开发人员而言,虽然我们没有必要让普通软件的界面漂亮到Windows XP这种程度,但是掌握一些界面色彩的设计原则无疑是非常有益的。

    • 如果不是为了显示真实感的图形和图像,那么应当限制一帧屏幕的色彩数目,因为人们在观察屏幕的时候很难同时记住多种色彩。
    • 应当根据对象的重要性来选择颜色,重要的对象应当用醒目的色彩表示。
    • 使用颜色的时候应当保持一致性,例如错误提示信息用红色表示,正常信息用绿色表示,那么切勿篡用红色和绿色。
    • 在表达信息时,不要过分依赖颜色,因为有些用户是色盲或色弱。

    数据库设计

     开发与平台无关的数据库应用程序

    目前国际上应用最广泛的数据库系统有Oracle、DB2、Informix、Sybase和SQL Server。

    这些数据库系统之间的激烈竞争即有好处又有坏处。竞争的好处是使数据库系统不断发展和完善,并且避免价格垄断。竞争的最大坏处是逼迫数据库厂商不断开发出独特的功能以吸引更多的用户,所以各个数据库系统的独特功能无法形成统一标准,导致用户难以开发出与平台无关的数据库应用程序,因为用户很难抵御数据库系统独特功能的诱惑。

    读者也许会问:“结构化查询语言(SQL)难道不是数据库系统的标准吗?”

    是的,SQL是数据库系统的标准查询语言。可是数据库厂商提供了太多超出SQL标准的特色功能,使人们陷入了进退两难的境地:

    • 如果你想使程序与数据库平台无关,那么只能使用SQL,放弃各个数据库系统的独特功能。
    • 如果你超越SQL,使用了某个数据库系统的独特功能,那么这样的程序就是与平台相关的。
    • 类似问题也存在于操作系统、Web浏览器这些领域。理论上讲,只有绝对垄断才能形成绝对统一的标准,但是人们既希望打破垄断又希望有统一的标准,这种矛盾无法彻底解决,只能折衷、妥协。建议如下:
    • 如果你开发的是通用的数据库应用软件,不想让应用软件与特定的数据库系统捆绑在一起,那么你就老老实实地用SQL语言写程序。
    • 如果你开发的是行业专用的数据库应用软件,并且这个行业已经指定了数据库系统(这种局部垄断现象普遍存在),最近若干年都不会改变的话,那么你可以超越SQL使用该数据库系统的独特功能。

     数据库性能优化问题

    数据库设计的主要挑战是“高速处理大容量的数据”。如何优化数据库的性能是设计人员经常面临的问题。数据库性能优化主要有两种途径:

    • 优化表结构本身。例如对第三范式的表结构进行反规范化处理,允许表中存在冗余数据,从而减少多个表链接操作,达到提高性能的目的。
    • 优化数据库的环境参数。例如提高硬件设施,调整表的空间尽量减少数据碎片等。

    在表的物理设计阶段,设计人员应当按照第三范式设计表结构(即规范化处理)。这样做的好处是:表中没有冗余数据,表结构很清晰,将来修改或者扩充非常方便。但是按第三范式设计也存在一些缺点:产生了许多表,每个表有相对较少的列,并且这些列必须使用“主健/外健”关联起来,因此某个查询操作可能会产生复杂的表链接,导致性能降低。

    反规范化处理是指对第三范式的表进行修改,通过合并一些表,或者在表中创建冗余的列,从而减少表链接操作代价,达到提高性能的目的。要注意的是反规范化处理存在很大的负面影响:管理冗余数据很麻烦,如果冗余数据不同步的话,那么会发生数据错误这种严重的问题。

    所以,对表进行第三范式的规范化处理是第一重要的,而反规范化处理则需谨慎考虑、不宜过多使用。“规范化处理”以及“反规范化处理”不是自相矛盾之举,而是性能优化的策略。

    除了优化表结构之外,优化数据库的环境参数也能够提高数据库的性能。例如给服务器配置更快的CPU,增加内存。运行数据库是非常消耗内存的,内存对数据库性能影响比较大。由于现在市场上的内存条越来越便宜,所以为服务器配置足够多的内存恐怕是成本最低、难度最低、见效最快的性能优化方法。

    在安装数据库系统时,要为系统指定“块大小”(一次物理读写操作所设计的字节数)。在创建表时,也要为表指定一定的空间。如果“块大小”和“表空间”与实际的数据存储不匹配的话,那么会产生许多磁盘碎片,这将降低数据库物理操作的性能。

    能否有效地优化应用软件数据库的性能,主要取决于开发者对数据库系统的熟悉程度以及开发经验。

    ● 数据库安全问题

    提高软件系统的安全性应当从“管理”和“技术”两方面着手。这里仅考虑技术手段(因为安全管理超出了软件工程范畴),一般原则如下:

    • 用户只能用帐号登陆到应用软件,通过应用软件访问数据库,而没有其它途径可以操作数据库。
    • 对用户帐号的密码进行加密处理,确保在任何地方都不会出现密码的明文。

    确定每个角色对数据库表的操作权限,如创建、检索、更新、删除等。每个角色拥有刚好能够完成任务的权限,不多也不少。在应用时再为用户分配角色,则每个用户的权限等于他所兼角色的权限之和。

    模块设计

    在设计好软件的体系结构后,就已经在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位置。我们习惯地从功能上划分模块,保持“功能独立”是模块化设计的基本原则。因为,“功能独立”的模块可以降低开发、测试、维护等阶段的代价。但是“功能独立”并不意味着模块之间保持绝对的孤立。一个系统要完成某项任务,需要各个模块相互配合才能实现,此时模块之间就要进行信息交流。

    评价模块设计优劣的三个特征因素:“信息隐藏”、“内聚与耦合”和“封闭——开放性”。

     信息隐藏

    为了尽量避免某个模块的行为去干扰同一系统中的其它模块,在设计模块时就要注意信息隐藏。应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。

    模块的信息隐藏可以通过接口设计来实现。接口是模块的外部特征,应当公开;而数据结构、算法、实现体等则是模块的内部特征,应当隐藏。一个模块仅提供有限个接口(Interface),执行模块的功能或与模块交流信息必须且只须通过调用公有接口来实现。如果模块是一个C++对象,那么该模块的公有接口就对应于对象的公有函数。如果模块是一个COM对象,那么该模块的公有接口就是COM对象的接口。一个COM对象可以有多个接口,而每个接口实质上是一些函数的集合。

     高内聚

    内聚(Cohesion)是一个模块内部各成分之间相关联程度的度量。内聚程度从低到高大致划分为低端、中段和高端,如图3-15所示。模块设计者没有必要确定内聚的精确级别,重要的是尽量争取高内聚,避免低内聚。

    顺序性内聚 功能性内聚

    时序性内聚 过程性内聚 通讯性内聚

    偶然性内聚 逻辑性内聚

    低端… 中段… 高端…

    各种内聚类型的含义如下:

    • 偶然性内聚。如果一个模块的各成分之间的关系彼此松散(几乎无关),称为偶然性内聚。
    • 逻辑性内聚。几个逻辑上相关的功能被放在同一模块中,则称为逻辑性内聚。例如一个模块读取各种不同类型外设的输入。
    • 时序性内聚。如果一个模块内的几个功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间性内聚。
    • 过程性内聚。如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程性内聚。
    • 通信内聚。如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。
    • 顺序内聚。如果模块内的某个成分的输出作为另一个成分的输入,则称为顺序内聚。
    • 功能内聚。模块的所有成分对于完成单一的功能都是必须的,则称为功能内聚。

     低耦合

    耦合(Coupling)是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。

    耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的函数调用数量;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。

    耦合程度从低到高大致划分为低端、中段和高端,如图3-16所示。模块设计应当争取“高内聚、低耦合”,而避免“低内聚、高耦合”。

    印记耦合 控制耦合

    公共耦合 内容耦合

    非直接耦合 数据耦合

    低端… 中段… 高端…

    各种耦合类型的含义如下:

    • 非直接耦合。模块之间没有直接的信息传递,称为非直接耦合。
    • 数据耦合。模块之间通过接口传递参数(数据),称为数据耦合。
    • 标记耦合。模块间通过接口传递内部数据结构的一部分(而不是简单的参数),称为印记(Stamp)耦合。此数据结构的变化将使相关的模块发生变化。
    • 控制耦合。模块传递信号(如开关值、标志量等)给另一个模块,接收信号的模块根据信号值调整动作,称为控制耦合。
    • 公共耦合。两个以上的模块共同引用一个全局数据项,称为公共耦合。
    • 内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。

    数据结构与算法设计

    设计高效率的程序是基于良好的数据结构与算法,而不是基于编程小技巧。

    一般说来,数据结构与算法就是一类数据的表示及其相关的操作(这里算法不是指数值计算的算法)。从数据表示的观点来看,存储在数组中的一个有序整数表也是一种数据结构。算法是指对数据结构施加的一些操作,例如对一个线性表进行检索、插入、删除等操作。一个算法如果能在所要求的资源限制(Resource Constraints)范围内将问题解决好,则称这个算法是有效率(Efficient)的。例如一个资源限制可能是“用于存储数据的内存有限”,或者“允许执行每个子任务所需的时间有限”。一个算法如果比其它已知算法所需要的资源都少,这个算法也被称为是有效率的。算法的代价(Cost)是指消耗的资源量。一般说来,代价是由一个关键资源例如时间或空间来评估的。

    毋庸置疑,人们编写程序是为了解决问题。只有通过预先分析问题来确定必须达到的性能目标,才有希望挑选出正确的数据结构。有相当多的程序员忽视了这一分析过程,而直接选用某一个他们习惯使用的,但是与问题不相称的数据结构,结果设计出一个低效率的程序。如果使用简单的设计就能够达到性能目标时,选用复杂的数据结构也是没有道理的。

    人们对常用的数据结构与算法的研究已经相当透彻,可以归纳出一些设计原则:

    1) 一种数据结构与算法都有其时间、空间的开销和收益。当面临一个新的设计问题时,设计者要彻底地掌握怎样权衡时空开销和算法有效性的方法。这就需要懂得算法分析的原理,而且还需要了解所使用的物理介质的特性(例如,数据存储在磁盘上与存储在内存中,就有不同的考虑)。

    2) 开销和收益有关的是时间——空间的权衡。通常可以用更大的时间开销来换取空间的收益,反之亦然。时间——空间的权衡普遍地存在于软件开发的各个阶段中。

    3) 设计人员应该充分地了解一些常用的数据结构与算法,避免不必要的重复设计工作。

    4) 数据结构与算法为应用服务。我们必须先了解应用的需求,再寻找或设计与实际应用相匹配的数据结构。

    数据结构与算法设计的一般流程如下:

    (1)数据结构与算法有全局和局部之分,当然先设计全局的,后设计局部的(通常在模块设计时进行)。

    (2)根据问题的特征,先查找已经存在的数据结构与算法,挑选最合适的(并不一定是最先进的)。如果不存在现成的,那么自己设计。

    (3)设计并且编写代码之后,要进行测试。如果不满足性能要求,那么要进一步优化数据结构和算法。

    1  系统设计的关键

    软件设计活动的关键又是什么呢?还是让我们回到现实世界去寻找答案吧!

    在远古时期,人类只能通过徒步从一个地方到达另一个地方。后来发现马可以被驯服,通过马车能更快地从一处到达另一处。再后来,人类逐步发明了自行车、汽车和飞机,且每一次发明都使得交通效率得以大幅提高。在这里,马车、自行车、汽车和飞机都共同地为了解决交通效率问题。很显然,马车、自行车、汽车和飞机都是不同的概念,人类通过抽象发明这些概念,并通过相互学习的方式使得大家掌握其含义。如果将焦点放在交通工具上,我们会发现交通效率越高则其概念越抽象,复杂度也越高。或者说,越是抽象的概念,其所隐藏的复杂度就越高。

    从这个关于交通的例子中我们不难发现,现实世界中我们是通过转移复杂度的方式解决复杂问题的,且每一次不同的转移都伴随着抽象概念的建立,转移的复杂度越多所建立的概念就越抽象。由于复杂度被转移了后,使得一小部分人专注于被转移的复杂度(比如制造飞机),而其他绝大部分人在享用复杂度被转移所带来好处的同时不用关心被转移走的复杂度(乘飞机的人不用关心飞机的驾驶与制造)。同样的事情也发生在软件行业!不同的是软件行业“制造”的不是汽车和飞机,而是编程语言、数据库、平台和框架等。

    不难发现,软件设计的关键活动应是抽象,通过抽象建立新的概念并将部分复杂度转移到概念背后。尽管不断的抽象增加了新概念的复杂度,但也简化了所需解决问题的复杂度。显然,好的设计应是其简化的复杂度要大于因为抽象所创造的复杂度。

    2  系统设计的目标

    系统设计的目标是在保证实现用户功能和必要的性能的前提下,保证系统的质量特性达到规定的要求。

    系统的功能、性能和质量特性必须通过设计来体现,通过设计方案的选择来证明系统能够满足用户在系统功能、性能和质量特性方面的用户需求。

    3  系统设计的依据

    系统设计以需求规格说明书为输入,以产生满足功能需求和非功能需求的设计方案为输出。

    首先,待开发的软件系统必须满足功能需求。确切地讲,首先必须满足用户功能需求,即软件系统可以帮助用户(包括系统所属用户和直接使用系统的用户)解决用户希望解决的问题。

    其次,待开发的软件系统必须满足非功能需求。满足非功能需求意味着软件系统能够像用户所希望的那样解决问题,并且维护方便。这里,有三个方面的问题:

    1、对约束的满足。软件系统能够在用户给定的环境下有效运行。约束是多方面的,包括硬件环境、软件环境、社会环境(包括国家法律法规)、企业管理环境。当企业信息化进行到一定阶段时,约束对软件系统开发构成了不可逾越的障碍。

    2、软件的可用性。软件的可用性除了软件系统满足约束外,还有软件使用的方便性、可靠性、安全性等。--运行期质量

    3、软件的可维护性。软件的可维护性不仅仅是软件开发组织降低软件维护成本的要求,实际上也是用户的要求。当用户需求发生变化后,用户希望能够很快地修改软件系统而不影响对业务的处理。

    开发架构设计关注软件开发环境中软件模块的实际组织方式,即软件系统由那些程序包组成,以及它们之间的关系。程序包不仅包括要编写的源程序,而且包括直接使用的第三方SDK和现存的框架、类库,支持系统运行的操作系统或中间件。

    开发架构设计的重点考虑开发期质量,软件模块的组织有利于可扩展性、可重用性、可移植性、易理解性、易测试性等,设计中的关键技术主要体现软件开发期质量有关的设计,如设计模式的运用,框架的选择等。

    开发架构设计的主要工作是:

    确定要开发的程序包或直接利用的程序包(如函数库)之间的依赖关系。

    采用的技术,包之间采用什么技术实现连接,以保证必要的开发期质量,如有依赖关系的包之间的松耦合。

    确定采用的框架。如果实现连接的技术有对应的框架,采用框架是值得推荐的选择。

    分层模型开发架构设计的主要工具。三层架构模型把程序代码分成负责与用户交互的表现层(用户界面层)代码、负责业务处理的业务层代码、负责数据服务的数据层代码。表现层可以按用例分成若干个包,业务层可以可以按照业务逻辑独立性分成若干个包,数据层可以由若干实体对象组成。其中,业务层由领域模型细化得到。由于领域模型相对稳定,所以业务层也相对稳定。表现层受表现设备和表现方式影响,数据层受数据库系统影响,因此这两层必须满足可扩展性、可修改性等要求。

    分层架构模式为“把变化点封装起来”提供了手段。分层架构的最大优点是将整体问题局部化,把可能的变化封装到不同层中。最终将系统规划为单向依赖的分层体系,利于修改、扩展、替换。将代码分为层的好处是:层形成了开发小组的自然边界—分层的开发人员需要的技巧是不同的。表现层的开发小组要深入了解用户界面工具包的使用;数据层开发小组许傲熟悉相关的数据库、数据持久化工具或文件系统。

    采用分层和分区的描述方式能够反映直接使用的程序包或框架的用法,使开发架构更清晰


    附录美文:http://www.csdn.net/article/2015-08-18/2825486

    为了给企业提供稳定可靠且优质的服务,作为一名软件架构师,在应用的架构设计上也是费尽心思,本文作者来自“风语者客服+”的CTO黄耀华,他从自己多年的实践出发,总结了软件架构设计的一些经验,分享给大家。

    “风语者客服+”是针对中小型企业推出的客服SaaS,节约了企业自建客服系统所需的巨大成本。为了给企业提供稳定可靠且优质的服务,我们在整体架构上费尽心思。虽然不尽完美,希望借此抛砖引玉,互相切磋。

    前言

    ”Look deep into nature, and then you will understand everything better.“ -- Albert Einstein

    我国传统文化上,要做成一件事,讲究三个方面:明道,优术,取势。在软件架构设计方面而言,也是类似的道理:遵循自然规律以明确大的方向,使用优秀的实操战术,再根据实际情况落地。

    这是个快餐年代,几乎所有人都只做一件事 -“取势”。 几乎没有多少人会去理解一个Servlet的工作原理,去理解一次HTTP请求的完整流程,因为有超多框架帮你屏蔽了这里的细节。询问一个人会什么技术,回答也往往是我会Hibernate、Spring、Ibatis、会PullToRefresh组件、会使用SDWebimage。不过这些框架(Framework)其实并不是软件架构。软件架构是一所有生命力的房子,而这些框架只是大一点的板砖。

    因为笔者水平有限,这里只提一些普遍准则,也就是”正确的废话“,以飨视听。不会深入到实操战术上,比如怎么用Spring实施MVC架构,怎么使用Maven管理依赖,Redis的常用操作,怎么搭建一个负载均衡的集群,如何使用阿里巴巴的Dubbo框架进行服务化等等。如果大家有兴趣,可以自行搜索,有很多优秀的文章可供参考。

    不幸的“程序猿”和“程序媛”各有各的痛苦,幸福的程序员都是相似的。其实说幸福有点言过其实,下面就说说怎么让他们不那么痛苦。

    一. 很好的模块化支持

    “At the bottom of every person's dependency, there is always pain, Discovering the pain and healing it is an essential step in ending dependency.” --Chris Prentiss

    他们都在一个相对稳定的软件架构里编码,自己的代码不会依赖很多模块,不会因为自己微小的改动造成全局的失败。正如"1984"中的老大哥说的,Ignorance is strength(”对外界的“无知就是一种力量).  任何一个模块都不能有太强的存在感。

    曾经在一个大型互联网公司里面,任何人只要用到一个核心模块的功能,就必须依赖一个部署在某远程服务器的库,而且还有IP限制,只能把代码部署到指定网段才能运行起来。导致基本上没法在本地进行单元测试或者简单调试。这个核心库的存在感太强,就成了开发的瓶颈,严重的降低了生产力和码农的幸福程度。

    在“风语者客服+”的架构中,每个码农都可以很方便的在本地把服务启动起来,一分钟up and running,随便做一些改动就可以立竿见影的看到效果。这里要归功于几个东西:

    1. Git代码管理

    在团队作战中,每个程序员可以取下来完整的最新代码库,也可以在本地分支上尽情挥毫泼墨,而不担心影响别人的工作。也可以把本地修改先stash起来,review一下别人的代码,再unstash恢复回来。要想提高团队效率,代码仓库管理建议尽快迁移到Git上。

    2. Maven、Gradle、Cocopods等依赖管理

    Maven是一个管理依赖(Dependency)的工具,现在在Java社区应该是比较普及的,无法想象现在还有团队直接拷贝jar包来管理依赖。虽然早期没有Maven的时候,都是拷贝jar包这么过来的,碰到的问题也是显而易见的,依赖的jar包作者改了某个bug,没能及时传导到调用方。多个调用方使用不一致的jar包,导致各种奇异bug。对应的在安卓社区,使用gradle的比较多,iOS的Objective-C开发中,多采用CocoaPods。

    二. 高内聚,低耦合

    He should focus on his knitting, not trying to do everything. Do one thing well.-- Steve Jobs

    "Do one thing well"其实不算是老乔的专利,UNIX哲学和Google哲学都提倡这一点。这句话本身不完全对,比如对于一个商人,如果只会Do one thing well,那他无法在市场中存活,但是在工程师中却是万般推崇的哲学。

    我们可以期望一个人具备一百种技能,然而对一个工具只期望它把一个需求解决好解决彻底,对于实现工具的一个类,一个方法,更是如此。但是,实际经验中,我们经常看到一个5000行以上代码的类,活像一个巨人版的瑞士军刀,什么都能做,但是什么都做不好。这就是”Separation of Duty"没有做好的典范。

    在风语者”客服+“对外提供的SDK和API中,我们也提倡同样的思想,力争把App使用”客服+“SDK的门槛降到最低,每个API都能自言其一,而且API直接没有时序上的依赖关系。内部各个模块的开发,也秉承同样的责任分割原则。责任分割原则的落实,没有什么好的框架或者工具来支持。只能通过老鸟经常去做Code Review,找出存在的问题,提出重构方案,并督促菜鸟改进。

    个人一般采用的重构思路,仅作为参考,照搬后被老板批评乃至造成工伤概不负责:

    1. 把一个大的工具类,根据主题不同,拆分成若干个互不干扰的高内聚工具类;举个例子,一个万能的NetworkUtils可能可以拆成HttpUtils, FTPUtils,TelnetUtils等;
    2. 对于一个被频繁调用的类,仔细观察调用情况,如果有一些方法的被调用频率远远低于其他方法,那么需要考虑这个方法是不是应该放在这个类中;
    3. 存在A,B两个类之间的相互依赖,或者更多类的混乱依赖,那么就更要抽丝剥茧,通过合理安排类的功能来去除环形依赖;
    4. 尝试一句话说清楚一个类的功能,不要使用“和”,“以及”,“或者”等连接词;如果出现了这些连接词,就需要引起重视;

    三. 用进化拥抱变化

    “It is not the strongest or the most intelligent who will survive but those who can best manage change.” ― Leon C. Megginson

    前段时间,朋友圈疯传一篇文章 -——“架构腐化之谜”,大家都深表同感,纷纷表示对自己架构的未来的担忧。然而,说句不合时宜的话, 90%的担忧是杞人忧天,因为以现在产品更新换代的速度,90%的项目面市即意味着死亡,没等到架构腐朽,产品已经入土了。

    剩下10%里面,也许有9%会一直坚持活下去,但是不会蓬勃发展,也就是说,只要保证不出现内存泄露之类的问题,代码就会一直在几台小服务器上运行下去,哪怕后面没有人维护也没关系。只有1%的产品,会日新月异的更新迭代,最终成长为巨无霸,或者巨无霸的生态下的一个环节。这个言论看似悲观,却是对现实最好的妥协。

    谬用一下泰戈尔的名言:“不是槌的打击,而是水的载歌载舞,使鹅卵石臻于完美”, 不是闭门造车的架构,而是不断拥抱变化的需求,才使得架构臻于完美。

    假如在早期就纠结于架构的完美性,而延迟产品的交付,是非常得不偿失的。只有生存下来,才有机会。再根据市场变化,不断优化架构,从而延长软件的生命周期。那么,假如撞大运,真的成了这1%,怎样做才能算是拥抱变化?

    首先,请参考本文第一点和第二点。如果这两点基本功没有练好,那么谈架构的进化就和还没有通关十八罗汉的新手就想练成九阴真经是一个道理。

    在设计之初,初步考虑系统的Scalability(可伸缩性)

    下面在第四点会详细阐述。

    内部的各个模块尽量做到可插拔

    一方面是接口和实现的分离,可以随着需求的变化更换实现;另一方面,尽量把功能服务化,成为微服务,并且可以监控到服务的互相调用情况,当某个服务老化,可以逐步废弃或使用新的服务取代之。这一点上,阿里巴巴的Dubbo框架是一个不错的选择。

    尽量采用优秀的框架,站在巨人的肩膀上

    例如在Web层面,我们使用Twitter的Bootstrap前端框架来实现响应式Web编程,提高生产效率的同时减少了为解决各种设备适配问题的投入。当然,这就需要设计师配合,按照Bootstrap规范来设计页面,减少一些个性化设计。

    最后,考虑系统的Resilience(弹性,也叫耐受性)

    俗一点说,就是变成一只打不死的小强,代码中尽量提前预判可能遇到的各种情形。经常看到代码里面有一堆的if(){}判断语句,我就问作者,“你考虑过else{}吗?”一般回答都是,“这绝对只有if,不会有else的”,可如果真的遇到else怎么办?千年虫问题就是这么诞生的。可能很多新同学还不知道什么是千年虫问题,简单地说,就是当年的码农,为了省一点内存空间,只用了2位数来表达年份,比如int year = 98; 表达1998年。我猜码农当时的心态也是,“就我这代码,还能活到2000年,搞笑吧?”

    程序员们平时可以多扩大自己的脑洞,想想有哪些else情况自己没有处理,而且可以轻易处理的。比如服务器挂了,那么App端是不是也要跟着crash,还是给出友好一点的提示,或者更友好一点,使用本地缓存。

    四. 设计可扩展,但不要过度设计

    it's better to have infinite scalability and not need it, than to need infinite scalability and not have it--@littleidea 网友

    无限的扩展能力是一种奢望,但是起码不能让扩展能力成为0。试想一下,你辛辛苦苦为老板开发了一个网站,过了一个月,网站超负荷了,老板说,“小A啊,之前2台服务器花了我5万块,预计流量马上要翻倍了,再给你5万块,帮我扛过去啊。”结果你发现,问题不是线性增加服务器就能解决的,原来的程序没有做分层(Web,Business Logic, Data Access等),导致加服务器也只能把所有层的代码全搬到新的服务器,虽然只是Business Logic的计算有压力,却要浪费老板很多服务器。更糟糕的是,因为程序里面用到了文件系统和操作系统命令,不好做负载均衡。

    这里有一些准则供参考:

    1. 代码分层是必须的,层次明朗以后,当哪个层次的负载较重,想办法对该层次进行优化或者扩容即可;
    2. 保持核心服务是无状态的,所谓无状态就是没有和请求相关的数据依赖;
    3. 尽可能的选用已被验证的广泛采用的成熟基础架构;
    4. 充分利用Zookeeper等集群管理工具,来对服务进行管理;

    风语者“客服+”中,把业务相关的代码内部组装为风语者ServiceBox,使用阿里巴巴的Dubbo服务进行注册管理。当负载增加时,可以迅速在运维层面增加服务节点,以提供更高的服务能力,从而保证客户的优质体验。


    展开全文
  • 软件设计师复习资料

    千次阅读 2019-01-27 21:18:46
    Stross:无论是从软件标准、创造性、开发速度、还是设计思路或者解决问题的能力上来说,优秀程序员比差的程序员都何止好一点。  Bill Gates:一个优秀的机床工值一个一般机床工的好几倍,而一个优秀程序员值一个...
  • 软件设计师习题笔记-重点习题五

    千次阅读 2018-10-14 19:13:23
    逆向工程从源代码得到软件系统的规格说明和设计信息,属于软件维护阶段行为,因此逆向工程工具属于软件维护工具。 14.若用白盒测试方法测试以下代码,并满足条件覆盖,则至少需要(4)个测试用例。采用McCabe度量...
  • 这套软件平台就是针对这种多核平台设计的一套多通道视频应用方案,主要用于 DVR 、 NVR、IPNC 之类的产品。  这个软件框架结构允许用户创建不同的多路数据流来实现视频的采集、视频处理( DEI、Noise Filter...
  • 随着软件水平在国内的发展,中国程序员的水平也逐渐的在提高,从当年英雄式,到后来的软件作坊,现在越来越多的人开始关注软件架构设计软件架构师培训也越来越火了,,甚至也有国人自己编著软件架构设计方面的书籍...
  • Netra基于Rdk平台的软件框架设计

    千次阅读 2014-07-11 22:09:40
    Netra基于Rdk平台的软件框架设计
  • 软件设计师知识点梳理

    千次阅读 2011-05-16 19:32:00
    LAN 模型 :数据链路层细划为:逻辑链路控制 LLC 和介质访问控制层 MAC.MAC 功能:介质访问控制和对信道分配资源,实现寻址,识别和检测.LLC 功能 功能: 功能加强了:寻 址,排序,流控,差错控制,数据封装和拆除....
  • ☆2、类图( ) 3、顺序图:讲究的是消息的时间次序(交互图) 4、活动图:有控制流和数据流(动态图) 5、状态图:状态的转变(动态图) 6、通信图:对象之间的组织结构(交互图) 7、构件图:封装的类和它的接口 ...
  • 单片机软件设计架构(C语言)

    万次阅读 2008-11-25 14:28:00
    C语言嵌入式系统编程修炼之一:背景篇不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,归因于汇编语言开发...
  • 随着研究的深入,应用于运动物体跟踪的算法也越来越多:从最简单的“差法”,到“背景消减法”到“模板匹配法”,到带有预测功能的“卡尔曼滤波”和“粒子滤波”等算法,都在不断地提高对运动目标检测和跟踪的准确...
  • 游戏开发入门(二)游戏中的设计模式

    万次阅读 多人点赞 2018-01-17 22:02:52
    视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深刻的...
  • 一个简单的串行协议的封装

    千次阅读 2015-08-11 16:29:34
    所有的软件开发人员都会在他的职业历程中设计一个串行口收发单元。这里展示了一个 基于串行口的协议封装实现。大家可以对比一下自己的实现看看。首先需要对整个软件的结构进行拆分。理论上它应当至少分割为三个大的...
  • 2017嵌入式软件行业现状及概述

    万次阅读 多人点赞 2017-11-05 16:41:38
    本文章介绍了截止2017年为止的嵌入式软件行业现状,包括就业方向,行业产品类型,待遇等等。另外还简单概述了下嵌入式软件所需的知识技能以及未来可能的技能发展走向。本文章远不如专业的行业报告一般精准、专业,...
  • 关键蒙皮动画原理

    千次阅读 2017-08-09 23:27:36
    一、关键动画怎么插件的,还有...二、逐动画是每个都有图片,用一个图片序列,按照时间间隔来播放动画,用动画设计软件进行动画设计时候使用关键动画设计,但是输出为逐动画,2d动画很多采用这个模式。 三
  • 以太

    千次阅读 2011-05-08 22:49:00
    在以太网链路上的数据包称作以太。... 目录[隐藏]1结构1.1前导码和开始符1.2报头1.3校验码1.4间距2以太类型2.1Ethernet I2.2802.2 LLC2.3子网接入协议2.4Novell raw 802.33效率4矮5Notes6Refe
  • 第1章 音视频通信软件设计 1.1 音视频通信软件需求分析1.1.1 音视频通信软件需求说明从技术上而言,音视频通信技术,涉及到音视频设备操作、音视频流编解码、媒体流网络传输、流媒体接收处理等相关技术,门槛高,...
  • Android设计模式之——策略模式

    千次阅读 2017-10-24 22:09:57
    一、介绍在软件开发中也常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来完成该功能。例如,排序算法,可以使用插入排序、归并排序、冒泡排序等。针对这种情况...
  • 软件框架详解

    千次阅读 2015-05-29 18:22:43
    软件框架至少包含以下组成部分:   (1)一系列完成计算的模块,在此称为构件。   (2)构件之间的关系与交互机制。 (3)一系列可变点(也称热点,Hot-spots,或调整点)。 (4)可变点的行为调整机制。 开发...
  • Python PyQt5 Qt Designer (Qt设计师)

    万次阅读 多人点赞 2019-02-19 13:54:12
    PyQt5 Qt Designer (Qt设计师) 本文由 Luzhuo 编写,转发请保留该信息. 原文: `` PyQt5是对Qt所有类进行封装, Qt能开发的东西, PyQt都能开发. Qt是强大的GUI库之一, 用C++开发, 并且跨平台. PyQt双许可证, 要么...
  • 在这篇文章之前,我已经写了三篇相关的读书笔记,但感觉一次一种模式的介绍,节奏太慢,就用这篇总结式的文章来把19种设计模式一次介绍完。     文章的短版本:全书内容思维导图 以下是《游戏编程模式》一书的内容...
  • LoRa点对点系统2 软件模块划分

    千次阅读 2016-10-24 17:22:06
    分析LoRa点对点系统的软件模块设计,包括:2个进程和1个参数模块。
  • DM8168 DVRRDK软件框架研究

    千次阅读 2016-07-26 11:39:04
    Netra(DM8168)处理器是个多核处理器,每个核之间相互独立却又相互关联,如何高效简洁地利用每个核完成一套系统功能是非常关键的,RDK这套软件平台就是针对这种多核平台设计的一套多通道视频应用方案,主要用于DVR...
  • IEEE802.11数据在Linux上的抓取

    万次阅读 热门讨论 2012-07-15 20:57:36
    终于得到了梦寐的《802.11无线网络权威指南》,虽然是复印版本,看起来也一样舒服,光看书是不行的,关键还是自己练习,这就需要搭建一个舒服的实验环境,抓包是必不可少的了,因为只有详细分析802.11数据,才能...
  • 软件测试的理论基础

    千次阅读 2018-06-30 20:20:38
    测试基础1:计算机组成:硬件(输入输出);软件(系统软件、应用...负责建立一个可靠的端到端的链接网络层:负责路由寻址和广播数据链路层:负责将上层数据封装物理层:只负责传输0、1二进制bit流,不解释3:...
  • JS设计模式与开发实践

    千次阅读 2018-09-01 13:34:12
    设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。通俗一点说,设计模式是在某种场合下针对某个问题的一种解决方案,给面向对象软件开发中的一些好的设计取个名字。 从某些角度来看...
  • 软件工程测试题

    千次阅读 多人点赞 2020-07-07 10:48:57
    初识软件工程 软件工程方法是( )。 为了获得高质量软件而实施的一系列活动 为开发软件提供技术上的解决方法 为支持软件开发、维护、管理而研制的计算机程序系统 为了理解问题和确定需求而采取的一些技术和...
  • 多媒体文件封装格式

    千次阅读 2017-03-17 15:19:20
    多媒体文件封装格式[top] 常见的封装格式有:TS、AVI、MKV、TP、MOV、M2T等等...1992年初Microsoft公司推出了AVI技术及其应用软件VFW(Video forWindows)。在AVI文件中,运动图像和伴音数据是以交织的方式存储,并独

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,732
精华内容 8,692
关键字:

帧封装软件设计