软件设计师学习笔记

  • 计算机系统知识
  • 程序语言设计
  • 数据结构
  • 操作系统
  • 软件工程基础知识
  • 结构化开发方法
    • 创建型设计模式
    • 行为型设计模式
    • 结构型设计模式;
  • 算法设计与分析
  • 数据库技术基础
  • 网络与信息安全基础知识
  • 法律法规
  • 其他

计算机系统知识

  • 在程序执行的过程中,cache与主存的地址映射是由硬件自动完成的;
  • 在计算机系统中采用总线结构,便于实现系统的积木化构造,同时可以减少信息传输线的数量。
  • SCSI不属于系统总线;
  • 指令中用时最长的指令的执行时间为流水线的周期;
  • 计算机系统的主存主要是由==DRAM(dynamic random access memory)==构成;SRAM不需要刷新电路既能保存内部存储的数据,用来做cache;EEPROM一般用于即插即用,常用在接口卡中存放硬件设置数据。
  • DRAM使用电容存储信息且需要周期性刷新;
  • 海明码是奇偶校验的一种扩充,利用奇偶性进行检错和纠错。
  • 在微机系统中,BIOS(基本输入输出系统)保存在主板上的ROM中;
  • 主存与cache的地址映射方式中,全相联方式可以实现主存的任意一块装入cache中任意位置,只有装满才会替换,发生块冲突的次数最小(直接映像最高,组相连映像居中);
  • 相联存储器是指按照内容访问的存储器;
  • CPU是在一个总线周期结束时响应DMA请求的;
  • DMA方式传送数据时,每传送一个数据需要占用一个存储周期;
  • 计算机运行过程中,CPU需要与外设进行数据交换,采用中断方式和DMA方式控制技术时,CPU与外设可并行工作;
  • 当用户通过键盘或鼠标进入某应用系统时,通常最先获得键盘或鼠标输入信息的是中断处理程序;
  • 为了便于实现多级中断嵌套,使用堆栈来保护断电和现场最有效。
  • 按照是否可以被屏蔽将中断分为不可屏蔽中断和可屏蔽中断;不可屏蔽中断一旦提出请求CPU必须无条件响应(eg:电源掉电),面对可屏蔽中断请求,CPU可以响应也可以不响应(I/O设备提出的中断请求)。
  • 实现计算机与外部设备之间数据交换经常使用的方式有1.无条件传送、2.程序查询、3.中断、4.直接存储器存取DMA。无条件传送、程序查询、中断通过CPU执行某一段程序,实现计算机内存与外设的数据交换,只有DMA方式下,CPU交出计算机系统总线的控制权,不参与内存与外设之间的数据交换。DMA方式工作时,在DMA控制器硬件的控制下实现内存与外设间数据的直接传送,并不需要CPU参与工作,这种方式传送的速度最快。
  • CPU依据指令周期的不同阶段区分在内存中以二进制编码形式存放的数据和指令;
  • CPU的中断响应时间指的是从发出中断请求到开始进入终端处理程序;
  • 三层总线结构由数据总线、地址总线和控制总线组成;
  • 计算机采用分级存储体系主要目的是为了解决存储容量、成本和速度之间的矛盾;
  • Flynn分类法基于信息流特征将计算机分成四类,其中多指令流单数据流MISD只有理论意义而无实例;
  • 浮点数中阶码决定浮点数所能表示的数值范围,尾数决定浮点数所能表示的数值精度;
  • 工业标准IEEE754浮点数规格化指的是阶码采用移码,尾数采用原码;
  • 两个浮点数相加时,需要先对阶,即将小阶向大阶对其,同时将尾数右移n位;
  • 累加器AC暂时存放算术逻辑运算部件ALU运算的结果信息;
  • 程序计数器PC存放下一条指令所在单元的位置,当执行一条指令时,处理器首先需要从PC中取出指令在内存中的地址,通过地址总线寻址获取;
  • 指令寄存器IR保存当前正在执行的一条指令;指令寄存器完全透明
  • 地址寄存器AR用来保存当前CPU所要访问的内存单元的地址;
  • 计算机指令一般包括操作码和地址码两部分,为分析执行一条指令,操作码和地址码都应该存入指令寄存器;
  • 编写汇编语言程序时,程序员可访问的是程序计数器PC;
  • 在机器指令的地址字段中,直接指出操作数本身的寻址方式称为立即寻址方式;指出操作数所在的内存地址叫直接寻址方式;当操作数放在CPU的通用寄存器中时,采用寄存器寻址方式;在指令中隐含着操作数地址的叫隐含地址;
  • 甲乙通信,甲对发送的消息附加了数字签名,乙收到消息后利用甲的公钥验证该消息真实性;
  • MIME与电子邮箱安全性无关;SSL和HTTPS涉及到邮件传输过程的安全,PGP优良保密协议是一套用于信息加密、验证的应用程序,可用于加密电子邮件内容。
  • 冗余技术通常分为四类:结构冗余:按其工作方式可分为静态、动态和混合;信息冗余:指的是为了检测或纠正信息在运算或传输中的错误另外加的一部分信息;时间冗余:是指重复执行指令或程序来消除瞬时错误带来的影响;冗余附加技术:是指为实现上述冗余技术所需的资源和技术;
  • 冗余附加技术构成= 不包括关键程序和数据的冗余存储及调用;
  • 计算机系统的可用性可以用MTBF/(1+MTBF)来度量;MTBF为平均失效间隔时间,可靠性是MTTF/(1+MTTF),MTTF为平均无故障时间;
  • I/O软件隐藏了I/O操作实现的细节,方便用户使用I/O设备;
  • PCI总线是并行内总线,SCSI并行外总线;

程序语言设计

  • 数据必须有类型是便于为数据合理分配存储单元;便于对参与表达式计算的数据对象进行检查;便于规定数据对象的取值范围及能够进行的运算(不包括定义动态数据结构);
  • 编译程序不参与用户程序的运行控制,而解释程序则参与;
  • 编译过程中变量分配的存储单元所用地址是逻辑地址,程序运行时再映射为物理地址;
  • 声明语句——符号表;
  • 可执行语句——中间代码或目标代码;
  • 解释程序和编译程序主要区别是解释程序不产生目标程序;
  • 在解释器上运行程序比直接运行编译过的代码要慢,因为解释器每次都必须去分析并转译他所运行的程序行;
  • 解释方式不包含目标代码生成阶段;
  • 脚本用语言主要采用解释方式实现;
  • 某高级语言源程序A经编译后得倒机器C上的目标程序B,对B进行反编译,不能还原出源程序A;
  • 后缀式、三地址码、树等是常用的中间代码,生成中间代码时可以不考虑机器的特性,由于中间代码与具体的机器无关,能够生成中间代码的编译程序方便易知道其他机器上,只需要为中间代码开发一个解释器或将其翻译成目标指令;
  • 词法分析是检查单词是否正确;(有限自动机)
  • 语法分析主要是分析程序语句的结构是否合法,判断语句的形式是否正确;语法分析的输入是记号流;
  • 语法分析可确定变量是否定义(或声明);
  • 语义分析是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查;
  • 递归下降分析是一种自上而下的语法分析;
  • 移进——归约分析是一种自底向上的分析方法;
  • 逆波兰式(后缀式)利用栈进行求值(数字或变量入栈,符号两元素运算并弹出);
  • 关键字和注释不能作为标识符给对象命名;
  • 传值调用最显著的特征就是被调用的函数内部对形参的修改不影响实参的值,引用调用是将实参的地址传递给形参,使得形参的地址就是实参的地址;
  • 由于程序设计语言的语法基本上都是上下文无关文法,因此可用上下文无关文法描述(2型);
  • C程序中全局变量的存储空间在静态数据区分配;
  • PHP更适合用来进行动态网页处理,HTML是静态网页;
  • c=b/a,a=0,运行时发生异常,编译时不会报错;
  • Lisp是一种函数式编程语言;
  • 非确定有限状态自动机对每一个可能的输入有多个状态转移;
  • 链表中结点的空间需要程序员根据需要申请和释放,因此数据空间必须采用堆存储分配策略;
  • 语法制导翻译是一种静态语义分析方法;
  • HTML
  • vlink属性用于定义超链接被鼠标点击后显示的颜色;
  • Tr用于行;
  • col用于列;
  • Td用于单元格;
  • Hr分割线;
  • I斜体;
  • <a href=“mailto:test@test.vom”> test@test.com创建指向邮箱的电子地址;
  • XML标记之间不可以交叉嵌套;

数据结构

  • 互异的非平凡子串是指非空且不等于其本身的子串;
  • 先序遍历先根后左后右(根左右);中序遍历先左后根后右(左根右);后序遍历先左后右后根(左右根);
  • 树的高度即深度,为其最大层次数;
  • 平衡二叉树左子树与右子树高度差绝对值不超过1;
  • 图的遍历是指从图中某一顶点出发,对图中所有顶点访问一次且只访问一次;
  • 图的遍历分为深度优先算法和广度优先算法,使用队列对图进行广度优先遍历,广度优先遍历的特点是尽可能进行横向搜索;
  • 插入排序适合基本有序时使用,计数排序适合小范围集合的排序。
  • 选择排序:从待排序序列中找到关键字最小的元素与第一个元素互换位置,剩余同理,是不稳定排序方法;
  • 快排最佳基准元素是待划分数组的中位数;算法中选择第一个;
  • 线性表采用顺序存储结构时,访问标中任意一个指定序号元素的时间复杂度为常量级;
  • 将一组关键字映射到一个有限的连续的地址集上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表称为哈希表;由于冲突的产生,哈希表的查找过程仍然是个比较的过程;H(key)=key mod p时,p的值一般为不大于n且最接近n的质数;
  • 构造哈希函数时应尽量使关键字的所有组成部分都能起作用;
  • 链表存储的缺点是数据元素之间的关系需要占用存储空间,导致存储密度不高;
  • 循环单链表表示队列,入队和出队都不需要遍历链表;最后一个阶段指向第一个结点;

操作系统

  • 在有限的资源下,要保证不发生死锁,给每个进程分配所需资源数-1,然后整体系统还有一个剩余资源既不会产生死锁;
  • 在进行地址变换时,利用逻辑地址的段内页号来对应其物理块号,再利用物理块号和页内地址构成物理地址;
  • 实时系统对于来自外部的事件必须在被控对象规定的时间内做出及时响应并对其处理;
  • 当通过键盘或鼠标进入某应用时,通常最先获得键盘鼠标输入信息的是中断处理程序;
  • P、v操作,p减v加,互斥1,同步0;
  • 在多线程运行环境中,线程使用程序计数器、寄存器和栈时不可共享;
  • 系统初始化过程自底向上,从硬件到软件的次序为片级初始化、板级初始化、系统级初始化;系统级初始化以软件初始化为主,主要进行操作系统的初始化;
  • 文件的全文件名应该从根目录开始;
  • 若IO接口与主存采用统一编址,则输入输出操作是通过访存指令完成的;
  • CPU采用中断方式和DMA方式,CPU与外设并行工作;(程序查询方式是顺序执行);
  • XP可以选择FAT、FAT32或NTFS文件系统格式化卷;
  • 系统采用信箱通信方式,当原语为“等信箱”状态,原因是指定信箱中存满了信件;
  • 进程创建了若干个线程,该进程中的某线程的栈指针不能被线程共享;
  • 在移臂调度算法中,先来先服务和最短寻找时间优先算法可能会随时改变移动臂的运动方向;
  • 文件存储
  • 直接存储:物理块可存放=磁盘块大小/块号;
  • 一级索引存储:物理块可存放*磁盘块大小/1024;
  • 一级索引存储:物理块可存放磁盘块大小磁盘块大小/1024;
  • IP管理层次从上往下为用户IO、设备无关系统软件、设备驱动程序、中断处理程序、硬件;
  • Linux中只有一个根目录,用/表示;
  • Linux中更改文件权限用chmod;
  • 若磁盘转速提高一倍,则旋转等待时间减半;
  • 强行撤下p1,让更高优先级p2运行——可剥夺方式;

软件工程基础知识

  • 软件工程的基本要素包括方法、工具和过程;
  • 系统开发的目的是把现有系统的物理模型转化为目标系统的物理模型;系统分析的结果是得到目标系统的逻辑模型;
  • 软件配置管理的内容不包括质量控制;包括版本控制、变更管理、系统建立、配置审核和配置状态报告;不包括风险管理;
  • 配置管理贯穿软件开发的整个过程,版本控制、变更管理、配置状态报告属于配置管理,风险管理不属于配置管理;
  • 在设计软件的模块结构时,将具有相似功能的模块合并不能改进设计质量;
  • 基于构件的软件开发,强调使用可复用的软件“构件”来设计和构建软件系统,对所需的构建进行合格性检验、适应性修改,并将它们集成到新系统中;
  • 螺旋模型的最大特点是引入了其他模型不具备的风险分析;更适合大型、昂贵、系统级的软件应用;
  • 瀑布模型——已有过开发经验使用;
  • 原型模型不适宜大规模软件的开发;
  • 增量模型可以快速构造核心产品;很容易将客户需求划分为多个增量不是增量式开发的优势;一开始用户需求不清晰,对开发进度和质量有影响;
  • 演化(迭代)模型——尽快使用,需求明确;
  • 喷泉开发过程模型以用户需求为动力,以对象为驱动,适合于面向对象的开发方法(各开发活动之间不存在明显的边界试题);
  • 敏捷开发中,重构是一种重新组织技术,可以简化构件的设计而无需改变其功能;
  • 敏捷开发scrum步骤不包括refactoring重构;
  • 极限编程XP四个价值观:沟通、简单性、反馈、勇气;五个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作;十二个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结队对编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准;
  • 极限编程XP主要目的降低需求变化的成本,解决代码质量低的问题,编码速度无法改变;
  • 水晶法认为每一个不同的项目都需要一套不同的策略、约定和方法论;
  • 并列争球法:把每段时间一次的迭代称为一个冲刺;由一个开发过程、几种角色以及一套规范的实施方法组成;
  • 自适应软件开发(ASD)方法是一种基于自适应理论的软件开发方法,适应用户需求变化为动机,开发具有一定适应能力软件的有力方法;
  • 敏捷统一过程AUP不正确的是每一个不同的系统都需要一套不同的策略,约定和方法;
  • 管道过滤器体系结构:软件构件具有良好的高内聚、低耦合特点,支持重用,支持并行操作,不能提高性能;
  • 概要设计设计软件的结构,在概要设计阶段选择适当的解决方案,将系统分解为若干个子系统,建立整个系统的体系结构;
  • 数据处理领域若系统规模不大且不太复杂,需求变化也不大,最适宜采用结构化开发方法;
  • 耦合种类:内容耦合、公共耦合、重复耦合、控制耦合、标记耦合、数据耦合、非直接耦合;
  • 内容耦合:一个模块直接访问另一个模块的内部数据等;
  • 公共耦合:一组模块访问同一个公共数据环境;访问相同的全局变量和数据结构;
  • 重复耦合:两个模块含有同样逻辑的重复代码;
  • 控制耦合:调用模块向被调用模块传递的信息,控制了被调用模块的内部逻辑;
  • 标记耦合:被调用模块用了数据结构的一部分信息;
  • 数据耦合:一个模块访问另一个模块,彼此之间通过数据参数;
  • 非直接耦合,两模块间没有直接关系,他们之间联系通过主模块控制和调用来实现;
  • 耦合程度不取决于模块提供的功能数;
  • 某模块内涉及了多个功能,这些功能必须以特定的次序执行,则该模块的内聚类型为过程内聚;
  • 系统交付用户使用后,为了改进系统的图形输出而对系统进行修改的维护行为属于改善性维护;
  • 在采用结构化开发方法进行软件开发时,设计阶段接口设计主要依据需求分析阶段的数据流图,接口设计的主要任务是描述软件与外部环境之间的交互关系,软件内模块之间的调用关系;
  • 在一个项目中实践最长的活动序列决定着项目的最短工期;
  • 结构化方法自顶向下、逐层分解,适用于数据处理领域的问题,不适合大规模、特别负责的项目,难以适应需求变化;
  • Jackson方法是以数据结构为驱动的,适合小规模项目,适用于时序特点较强的系统;
  • 原型化方法适合于需求不清、经常变化的情况;
  • 面向对象方法尽可能按照人类认识世界的方法和思维方式来分析和解决问题,用于需求经常变化、规模复杂的项目;
  • 结构化开发中,体系结构设计定义软件的主要结构元素及其关系;数据设计基于实体联系图确定软件涉及的文件系统结构及数据库表结构;接口设计描述用户界面、软件和其他硬件设备、其他软件系统及使用人员的外部接口,以及各种构件之间的内部接口;过程设计确定软件各个组成部分内的算法及内部数据结构,并选定某种过程的表达形式来描述各种算法;
  • 成本估算时,COCOMO II方法以规模作为成本的主要因素,考虑多个成本驱动因子。该方法包括三个阶段性模型,即应用组装模型、早起设计阶段模型和体系结构阶段模型;
  • McCabe:v(G)=闭合区域+1;
  • 可靠性——平均无故障时间;可用性——平均失效间隔时间;
  • 软件测试的目的是发现更多的错误,而不是证明软件的正确性;
  • 偶然内聚:指一个模块内各处理元素之间没有任何联系;会导致模块间耦合度增加;
  • 逻辑内聚:模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能;
  • 时间内聚:把需要同时执行的动作组合在一起形成的模块;
  • 过程内聚:指一个模块完成多个任务,这些任务按指定的过程执行;
  • 通信内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或产生相同的输出数据;
  • 顺序内聚:指一个模块中的各个处理元素都密切相关于同一个功能且必须顺序执行,前一个功能元素的输出就是下一个功能元素的输入;
  • 功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可;
  • 在ISO/IEC软件质量模型中,易使用的子特性包括易理解性、易学性、易操作性;(不包括易分析);
  • 系统的可维护性包括可理解性、可测试性、可修改性、维护工具(不包括可移植性);
  • 易测试性指与为确认经修改软件所需努力有关的软件属性;
  • 可靠性包括成熟性、容错性、易恢复和兼容性(不包括可移植性,不包括安全性);
  • 软件维护工具主要有版本控制工具、文档分析工具、开发信息库工具、逆向工程工具和再工程工具(不包括配置管理);
  • 软件维护相比开发更复杂;
  • 软件配置管理的内容包括版本控制(Version Control)、变更控制(Change Control)和过程支持(Process Support);
  • 正式技术评审的目标是发现软件中的错误;
  • 功能与模块之间的对应关系不属于软件设计质量评审;
  • 在对程序质量进行评审时,模块结构评审中不包括数据结构;
  • 代码行数是度量软件复杂性的一个主要参数;
  • CMM能力成熟度模型分为5个等级,初始级、可重复级、已定义级、定量管理级、优化级;1级成熟度最低,5级成熟度最高;
  • 初始级:无序、混乱、无章法;
  • 可重复级的核心是建立基本的项目管理和实践来跟踪项目费用、进度和功能特性;
  • 已定义级的核心是使用标准化开发过程(或方法论)构建(或集成)系统;
  • 管理级的核心是寻求更主动应对系统的开发问题;软件过程和产品质量有详细的质量标准;
  • 优化级的核心是连续地监督和改进标准化的系统开发过程;
  • 过程改进中错误的是:CMMI成熟度模型是一种过程改进模型,仅支持阶段性过程改进而不支持连续性过程改进;
  • CMMI六个能力等级,未完成、已执行、已管理、已定义、量化管理、优先级;
  • 基本COCOMO软件成本估算模型是一种静态变量模型,用于对整个软件系统进行估算;
  • COCOMO II方法以规模作为成本的主要因素,包括三个阶段性模型,应用组装、早起设计阶段、体系结构阶段;估算工作量不包括用例数;
  • 项目估算方法很难得到精确的估算结果;
  • 软件产品必须能够3秒内对用户请求作出响应属于非功能需求;
  • 软件风险一般包含不确定性和损失两个特性;
  • 风险预测从两个方面评估风险,即风险发生的可能性以及风险所产生的后果;
  • 风险控制活动的目的是辅助项目组建立处理风险的策略,有效的策略应考虑风险避免、风险监控、风险管理及意外事件计划;
  • 若软件项目组对风险采用主动的控制方法,则风险避免是最好的风险控制策略;
  • 风险的优先级通常是根据==风险暴露(Risk Exposure)==设定;
  • 配置数据库包括开发库、受控库和产品库(不包括信息库);
  • 关于统一过程UP定义了五个阶段,起始、精化、构建、移交和产生(不是四个阶段);
  • 精化阶段关注需求分析和架构演进;
  • 精化阶段的里程碑是生命周期架构;
  • 软件复杂性度量的参数不包括开发小组的规模;
  • 在对程序质量进行评审时,模块的结构是一个重要的评审项,评审内容不包括数据结构;
  • 设计质量的评审内容不包括模块层次;
  • 设计质量——设计规格说明书符合用户要求;
  • 程序质量——程序按照设计规格说明所规定的正确执行;
  • 用于系统开发人员与项目管理人员沟通的主要文档是系统开发计划;
  • 系统开发计划包括PERT图和预算分配表;

结构化开发方法

  • 结构化分析的输出不包括结构图;
  • 数据流图描述数据在系统中如何被传送或变换,以及如何对数据流进行变换的功能或自功能,用于对功能建模;
  • 数据流图中某个加工的一组动作依赖于多个逻辑条件的取值,则用决策树能够清楚地表示复杂的条件组合与应做的动作之间的对应关系;
  • 设计阶段接口设计主要依据需求分析阶段的数据流图;
  • 详细设计阶段的主要任务不包括模块之间的接口设计;
  • 软件设计阶段,一个模块的作用范围应该在其控制范围之内;
  • 需求分析的任务是确定软件系统功能,通常用数据流图、E-R图(实体联系图)、状态转换图、数据字典描述系统的逻辑模型;(不包括软件体系结构图);
  • 在设计软件的模块结构时,模块的功能要尽可能单一,而不是单纯;
  • 逆向工程从源代码或目标代码中提取信息,通常在原软件生命周期的需求分析阶段;
  • 仓库风格支持可更改性可维护性,具有可复用的知识源、支持容错性和健壮性、具有解决问题的多方法性,测试不简单;包括数据库系统、黑板系统、超文本系统等,不包括编译器;
  • 进行子系统结构设计时,不需要考虑每个子系统采用何种数据结构和算法;
  • 自底向上的集成方式策略的优点包括不需要写桩程序;缺点:驱动开发工作量大,对高层验证被延迟,设计上的错误不能被及时发现;需要进行回归测试;
  • 文档是软件可维护性的决定因素;
  • 系统测试的测试目标来自于需求分析阶段;
  • 三明治的优点不包括较少的驱动模块和桩模块的编写工作量;
  • 模块的控制范围包括该模块本身及所有的下属模块的集合,模块范围完全取决于系统结构,当影响范围超出控制范围时,通常采用向上移动判断点的位置,将受判定影响的模块下移到控制范围内;(将父模块下移使该判定处于将高层次不是适当的处理方法);
  • 全局数据结构不是单元测试主要检查的内容(单元测试包括边界测试、错误处理测试、路径测试、局部数据结构测试、模块结构测试);
  • 软件需求中对软件产品的响应时间、吞吐量、价格等属性要求属于非功能需求;
  • 对于每个加工,既要有输入也要有输出,且输入输出流不相同;实体和数据存储之间不存在数据流;
  • 结构化开发中
  • 体系结构设计:定义软件的主要结构元素及其关系;
  • 数据设计:基于实体联系图确定软件设计的文件系统的结构及数据库的表结构;
  • 接口设计:用户界面,软件和其他硬件设备,软件使用的外部接口及构件内部接口;
  • 过程设计:包含数据结构和算法的设计;
  • 运行维护阶段:
  • 正确性维护:为了识别和纠正软件错误,改正软件性能上缺陷,排除实施的误使用,应进行的诊断和改正错误的过程;
  • 适应性维护:信息飞速发展,外部环境或数据环境发生变化适应这种变化修改软件的过程;
  • 完善性维护:提出新的功能与性能要求,需要修改或再开发扩充功能,增强性能,改进加工效率等;
  • 预防性维护:提高软件的可维护性和可靠性,为以后进一步改进软件打下基础而进行的维护工作;
  • 白盒测试中,覆盖技术从弱到强是语句覆盖、判定覆盖、条件覆盖和路径覆盖;
  • 单元测试中,检查模块接口时,不需要考虑输入参数是否使用了尚未赋值或者尚未初始化的变量;
  • 全局数据结构不是单元测试主要检查的内容;

    面向对象技术
  • 面向对象执行顺序:认定对象、组织对象、描述对象间相互作用,确定对象的属性;
  • Jackson不属于面向对象方法,是面向数据结构;
  • 分析阶段,架构师主要关注系统的行为;
  • 面向对象分析的过程中,从给定需求描述中选择名词短语来识别对象;名词短语暗示类及其属性,动词和动词短语暗示职责或操作;
  • 面向对象分析的第一步是确定问题域;
  • 面向对象设计要关注实现层面的细节!!!;
  • 实体类是应用领域中的核心类,用于保存系统中的信息以及提供针对这些信息的相关处理行为;
  • 控制类用于负责实体类和界面类的交互;
  • 边界类负责和用户进行交互;
  • 高层模块不应该依赖于底层模块,抽象不应该依赖于细节,细节可以依赖于抽象(错误的是高层模块无法不依赖于底层模块);
  • 类的静态数据成员的值可以修改;
  • 一个类是一组对象的抽象定义;
  • 一个对象通常由对象名、属性和方法三部分组成;一个对象把属性和行为封装为一个整体,一个类所包含的方法和数据描述了一组对象的共同行为和属性;
  • 对象具有1清晰的边界,2良好定义的行为,4可扩展性;(1、2、4);
  • 领域类模型中不包含领域对象;(包括属性、操作、关联);
  • 泛化是一个类与他的一个或多个细化类之间的关系,即一般与特殊关系;
  • 多重继承指一个类有多个父类,子类中可能会存在二义性的成员;
  • 动态绑定是实现多态的基础;
  • 子类在原有父类的接口基础上,用适合于自己要求的实现去置换父类相应实现称为覆盖;
  • 采用面向对象方法进行软件开发,在分析阶段,架构师主要关注系统的行为;
  • 聚合对象是指一个对象包含其他对象;
  • 在面向对象方法中,多态是指客户类无需知道所调用方法的特定子类的实现;都用统一方式来调用;不同对象收到统一消息可以产生不同的结果;动态绑定是实现多态的基础;
  • 包含多态在许多语言中都存在,子类泛型化;
  • 里氏代换:任何基类对象可以出现的地方,子类对象一定可以代替基类对象;

创建型设计模式

抽象工厂abstract factory 创建一系列相关或相互依赖对象的接口,无须指定他们具体的类;
生成器builder 将一个复杂对象的构建与其表示分离,使得同样构建的过程可以创建不同的表示;适合该模式有抽象复杂对象的构建步骤,基于构建过程的具体实现构建复杂对象的不同表示;
工厂方法(Factory Method) 定义一个创建对象的结构,但由子类决定需要实例化哪一个类;
原型prototype 用原型实例指定创建的对象种类,并且通过复制这些原型创建新的对象;
单例singleton 保证一个类仅有一个实例,并提供一个访问他的全局访问点;
  • 为图形用户界面组件定义不同平台的并行类层次结构,适合采用抽象工厂模式;
  • 当构造过程必须允许被构造的对象有不同的表示时用生成器;

行为型设计模式

责任链chain of responsibility 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系;可处理一个请求的对象,集合应被动态指定;
命令command 将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,支持可撤销的操作;
解释器interpreter 给定一个语言,定义他的文法的一种表示,这个解释器使用该表示解释语言中的句子
迭代器iterator 提供一种方法顺序访问一个聚合对象中各个元素且不需要暴露对象的内部表示;
备忘录memento 在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存该状态;
状态state 允许一个对象在其内部状态改变他的行为;一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,是这个对象看起来如同修改了他的类;
策略strategy 定义一系列算法,把他们封装起来并可以相互替换;让算法独立于使用他的客户而独立变化;
模板方法template method 定义一个操作中的算法骨架,将一些步骤延迟到子类中;
访问者visitor 表示一个作用于某对象结构中的各元素的操作;Visitor对象是一个多态的accept方法的参数;一个对象结构包含很多item,而系统要求这些对象实施一些依赖于某具体类的操作,使用访问者模式;
中介者mediator 用一个中介对象来封装一系列对象的交互;使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互;中介者与观察者是相互竞争的关系;
观察者observer 定义对象间的一种一对多关系,一个对象状态发生改变时,所有依赖于他的对象自动更新;最主要特征是使所要交互的对象尽量松耦合;Subject(被观察者)知道自己的观察者;
  • concreteSubject在其状态发生改变时向他的各个观察者发出通知;
  • 后端数据模型能够被多个前端用户连接,使用中介者最合适;
  • 责任链适用于可处理一个请求的对象,集合应被动态指定;

结构型设计模式;

组合模式(Composite) 将对象组合成树形结构以表示整体一部分的层次结构,使得用户对单个对象和组合对象的使用具有一致性;当对象结构中存在父子关系;
享元模式flyweight 主要用于减少创建对象的数量,以减少内存占用和提高性能;运用共享技术,有效地支持大量细粒度对象;
装饰器模式(Decorator) 用于将一个对象加以包装以提供一些额外的行为;又称为发布/订阅模式;
外观模式(Facade) 将一系列对象加以包装以简化其接口;定义一个高层结构,为子系统中的一组结构提供一个一致的外观,从而简化了该子系统;
桥接模式 将对象的抽象和其实现分离,从而可以独立的改变他们;
适配器adapter 既是类结构模式,有事对象结构模式,与桥接模式有类似特征 将一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的类能一起工作
代理proxy 为其他对象提供一种代理以控制对这个对象的访问;
  • Web创建主题——桥接模式;
  • 统一的驱动接口屏蔽不同的驱动方法——适配器;
  • UML状态图中转换的五要素:源状态、目标状态、触发事件、监护条件、动作;
  • UML中类图描述的是类与类之间的关系;对象图描述的是某个具体的对象;
    -在UML用例图中,参与者表示人、硬件或其他系统可以扮演的角色;
  • 部署图:组件和硬件之间的物理关系;部署组件之间的依赖关系类似于包依赖;
  • 部署图是用来显示系统中软件和硬件的物理架构;组件之间的依赖关系类似于包图;
  • 部署图通常在实施阶段使用;
  • 接口用于声明对象类所需要的服务;
  • 规划什么功能或测试用例——用例图;
  • 组件之间的组织和依赖——组件图;
  • UML类图不用对对象快照进行建模;
  • UML中关联是一个结构关系,两个类之间可以有多个由不同角色标识的关联;
  • UML活动图表示分支、合并、分岔和汇合;
  • 活动图——从一个活动到另一个活动的流程;
  • 构件图专注于系统的静态实现视图;
  • 对一个复杂用例中的业务处理流程可用活动图建模;
  • 父类中方法为斜体,表示此类为抽象类,在子类中需要重置该方法;
  • UML中有四种关系;
  • 依赖:两事务之间的语义关系,其中一个事物发生变化会影响另一个事物的语义;
  • 关联:关联描述一组对象之间连接的结构关系,对象之间的连接成为链;关联的多重度指的是一个类的实例能够与另一个类的多少个实例相关联;
  • 泛化:是一般化和特殊化的关系,特殊元素(子元素)的对象可以替换一般元素(父元素)的对象,使子元素共享了父元素的结构和行为;
  • 实现:是类之间的语义关系,其中一个类指定了由另一个类保证执行的契约;
  • 关于UML中错误的是:若事件触发一个没有特定监护条件的迁移,则对象离开当前状态;(不一定离开)
  • 关于状态图错误的是:一个转换可以有事件触发器、监护条件和一个状态;
  • 对象是封装数据和行为的整体;
    特殊多态
  • 强制多态:一种类型的变量在作为参数传递时隐式转换成另一种类型;
  • 过载多态:同名在不同上下文中有不同类型;
  • 业务用例和参与者一起描述组织支持的业务过程;业务对象模型描述业务结构以及结构元素如何完成业务用例;
  • 按照不同采取不同行为——判断表描述该加工的规格说明;

算法设计与分析

  • 三元组顺序链表,行逻辑连接的顺序表和十字链表是对稀疏矩阵进行压缩存储的方式;
  • Java:即时编译,对象在堆空间分配;
  • 用C/C++语言为某个应用编写程序,经过预处理、编译、汇编、链接后形成可执行程序;
  • 动态规划算法通常用于求解具有某种最优性质的问题;
  • 分治法对设计思想是将一个难以直接解决的大问题分解成一些规模较小的相同问题;
  • 贪心法是一旦做出选择就不会改变,只能做到局部最优;
  • 回溯法是将问题的候选解按照某种顺序逐一枚举和检验;
  • 分支限界——广度优先的问题探索解空间;
  • 二叉树先序遍历和后序遍历无法构造中序遍历;
  • 对于二叉排序树,从左到右排列同层次的结点,其关键字呈现有序排列的特点;
  • 对于N个数排序,最坏情况下时间复杂度归并为nlog2n;
  • 优先队列通常采用堆实现;
  • 采用邻接矩阵表示图时,查找所有顶点的邻接点的时间复杂度为n^2;
  • N个权值构造哈夫曼树,结点数为2n-1;
  • 完全二叉树中,左右子树高度之差绝对值不超过1;高度与其节点数之间存在确定的关系;
  • 哈希表中冲突是指关键字不同的元素被映射到相同存储位置;
  • 实现函数或过程的递归调用及返回时必须用栈;
  • 完全图适合采用邻接矩阵存储;
  • M阶B-树,每个节点至多有M棵子树;错误的是:叶子结点通过指针连接为有序表;叶子结点本身依关键码的大小自小而大的顺序链接;
  • 贪心算法——分数背包问题;霍夫曼编码构造最优编码树时时基于贪心策略;
    -分治一般由三个步骤组成:问题划分、递归求解、合并解;
  • 动态规划——最优;
  • 回溯——深度优先;
  • 构造哈希函数时应尽量使关键字的所有组成部分都能起作用;
  • 若网较稠密,Prim算法比Kruscal算法好;
  • 当基准元素为中位数时,快排的时间复杂度最坏都是o(n);
  • 通过元素在存储空间中的相对位置来表示数据元素之间的逻辑关系,是顺序存储的特点;
    -解决哈希冲突,与多个关键字进行了比较,这些关键字的第一个可以不是e的同义词;
  • 归并无论如何都是nlgn;
  • 大顶堆——父节点比孩子节点都大;按层次往下;eg84723561;

数据库技术基础

  • ==JDBC(Java Database Connectivity)==是基于Web的电子商务应用中,访问存储与数据库中业务对象常用的方式之一;
  • 共享锁(S锁):若事务T对数据对象A加上了S锁,则只允许T读取A,但不能修改A,其他事务只能再对A加上S锁,直到T释放S锁;
    -排他锁(X锁):若事务T对数据对象A加上了X锁,则只允许T读取和修改A,其他事务都不能对A加任何类型的锁,知道T释放X锁;
    -配置数据库一般包括开发库,受控库和产品库。(不包括信息库)
    事务:
  • 原子性:要么做,要么不做;
  • 一致性:事务执行的结果必须保证数据库从一个一致性状态变到另一个一致性状态;
  • 隔离性:事物相互隔离。
  • 持久性:一旦事务成功提交,即使数据库崩溃,对数据库的更新操作也永久有效;
  • 确定系统边界和关系规范化分别在数据库设计的需求分析和逻辑分析阶段;
  • 系统边界——需求分析;
    -关系规范化——逻辑分析;
  • 对数据库一张表创建聚簇索引,改变的是数据库的内模式;
  • 视图是从一个或几个基本表或视图导出的虚拟表;
    -4NF:多值属性的ER转关系模型时,将实体的码分别和每个多值属性独立构成一个关系模式;
  • 关系中都有编号不属于命名冲突;命名冲突是在ER模型中提出,合并ER图产生冲突是因为同样对象不同局部有不同定义,不同对象则不存在命名冲突;
  • returns integer/dclare d_count integer;
    -OLAP工具是针对特定问题的联机数据访问与分析,通过多维的方式对数据进行分析、查询和报表;
    -分布式数据库可用性——某一场地故障,系统使用其他场地副本而不至于整个系统瘫痪;
  • 不同分ER图有同一属性——结构冲突;

网络与信息安全基础知识

  • HTTPS协议需要CA申请证书,http是超文本传输协议;HTTPS是具有安全性的SSL加密传输协议;http默认端口为80,https默认端口为443;
  • HTTPS使用SSL协议对报文进行封装;
    -SSH是应用层上的安全协议,利用SSH有效防止远程管理中信息泄露问题;
  • 用于读取一个网页的操作——GET;
  • 用于获取头部——HEAD;
  • 用于提交表单——POST;
    -被动攻击中攻击者不对数据信息做任何修改,是在未经用户同意或认可的情况下非法获得相关信息或数据,通常包括窃听,流量分析,破解若加密的数据流,会话拦截等攻击方式;
    -漏洞扫描不属于入侵检测技术;
  • 相比TCP,UDP开销较小;
    -SMTP端口25,POP3端口110;
  • WWW端口80;
  • FTP端口21传输命令和参数,20传送文件;
  • Telnet端口23;
    -DNS用的是UDP端口53;
  • 数据库容灾属于系统安全和应用安全;
  • 数据链路层:网桥、交换机;
  • ARP攻击造成网络无法跨网段通信的原因是伪造网关ARP使得数据包无法发送到网关;
  • ARP属于网络层协议;
    -ICMP属于网络层协议,封装在IP数据报中传送;
  • 在IE中,安全级别最高的是受限站点;
  • 使用Web方式收发电子邮件时,必须设置账号密码登录;
  • MIC收到的信号是音频模拟信号;
  • 表示媒体——传输感觉媒体的中介媒体;eg:图像编码;
  • CIF——352*288;
  • 网络中交换设备错误的是三层交换机只能根据第三层协议进行交换;
  • 集线器连接的主机构成一个冲突域,交换机每个端口属于一个冲突域,路由器连接的部分为广播域;
  • 集线器不能起到自动寻址的作用;
  • PPP中安全认证协议是CHAP;
  • 浏览器输入正确地址,本地主机首先在本机hosts文件查询该网址对应IP地址;
  • 主域名服务器在接收到域名请求后,首先查询本地缓存;
  • ADSL协议接入Internet,用户端需要安装PPPOE协议;
  • 在windows中设置默认路由是当没有其他路由可选时最后选择的路由;
    -SMTP传输邮件报文采用ASCII格式表示;
    -SNMP属于应用层协议,封装在UDP中;
    -在ASP的内置对象中,response对象可以修改cookie 的值;
  • 使两个IPv6可以通过现有的IPv4通信采用隧道技术;
  • 纯IPv6和纯IPv4通信使用翻译技术;
  • VLAN的优点允许逻辑地划分网段;
  • Netstat不能用用于诊断DNS故障,使监控TCP/IP网络的工具;
  • 网络的可用性是指用户可利用网络时间的占比;
  • www.abc.com和abc.com打开的不一定是同一页面,abc.com要高一级;
  • TCP使用的流量控制协议是可变大小的滑动窗口协议;
  • Ping按照由近及远,首先执行的是127.0.0.1,其次本地,然后默认网关,最后是远程主机;
  • TCP和UDP均提供了端口寻址;
    -关于帧中继错误的是:帧中继比异步传输模式能提供更高的数据数率;
  • 三网:电信,广播,互联网;
  • UDP协议上通常应用VolP;
  • DHCP客户端可以从DHCP服务器获得DNS服务器地址和DHCP服务器的地址;
  • DHCP用于自动分配IP地址;
  • 主机路由的子网掩码是255.255.255.255;
  • DNS服务器中通过启用循环,添加每个Web服务器的主机记录操作可以确保域名解析并实现负载均衡;
  • 中国自主研发的3G通信标准是TD-SCDMA;
  • 层次化局域网模型中核心层将分组从一个区域高速转发到另一个区域;
  • 自适应路由依据网络信息经常更新路由;
  • MIME协议扩展了电子邮件标准,使其能够支持多媒体特性;
  • 哈夫曼属于熵编码(无损);
  • 通常把web服务器置于DMZ区;
  • 冰河不是蠕虫病毒;
  • BGP——属于外部网关协议;
  • 无效IP地址169.254.x.x(Windows);0.0.0.0(Linux);
  • 尽量让优先级较高目标达到最优;
  • RSA——X.5-9数字证书;
  • ECC——SM2数字证书;
    -ARP request采用广播,response采用单播;
  • VLANtag在数据链路层;

法律法规

  • 软件著作权产生时期:自作品完成之日起;
    -智力成果能取得专利的是——用于控制测试过程的程序;
  • GB国家标准,行业标准,地方标准DB,企业标准Q/;
  • 署名权、修改权和保护作品完整权的保护期不受限制;
  • 商标权可延长;有可能无限期拥有;
  • 合理使用指可以不经著作权人许可,不需支付报酬使用其作品;
  • 学术论文中不可引用未发表作品;
  • 提供复制品侵犯了著作权;
  • 开发类似软件侵犯了著作权;
    -翻译权:一种自然语言文字转换成另一种自然语言文字;

其他

  • python3中try catch不是合法的异常处理结构;
  • x=input(),从键盘输入123,x的值为‘123’

【软考中级】软件设计师学习笔记相关推荐

  1. 全国软考中级软件设计师 学习笔记-软件工程部分

    想要电子版本的同学可以留言或者私信我获取,辛苦整理资料,欢迎点赞.收藏和评论! 1. 开发模型 1.1 瀑布模型(SDLC) 缺点:在开发初期,需求不明确,导致软件项目失败 适用于需求明确,或二次开发 ...

  2. 全国软考中级软件设计师 学习笔记-法律法规部分

    想要电子版本的同学可以留言或者私信我获取,辛苦整理资料,欢迎点赞.收藏和评论 这部分没有太多难点,记忆为主 分值也不高 不建议花过多精力!! 1. 知识产权 包括:著作权及领接权.专利权.工业品外观设 ...

  3. 全国软考中级软件设计师 学习笔记-数据结构部分

    想要电子版本的同学可以留言或者私信我获取,辛苦整理资料,欢迎点赞.收藏和评论 数据结构 1. 数组 数组地址的计算 例题: 答案:根据公式a+(i*n+j)*len,即存储地址=0+(2*5+3)*2 ...

  4. 2022下半年软考-中级-软件设计师-过关经验

    目录 1.重要内容 2.考情分析 3.视频笔记 1.重要内容 软考官网:中国计算机技术职业资格网 刷题:软考通app.软考真题app.软考刷题王(微信小程序).希赛网app. zst_2001软考中级 ...

  5. 全国软考中级软件设计师 复习大纲概览

    本专栏记录学习复习软考中级软件设计师的内容,官方网站上有中级设计师的考试大纲和指导用书,官网链接:https://www.ruankao.org.cn 考试的难度总体来讲不是很大,但是设计的知识面非常 ...

  6. 软考中级软件设计师难不难_为什么这么难处理设计师

    软考中级软件设计师难不难 重点 (Top highlight) I have a confession to make. As a young Design 'pioneer' in many tec ...

  7. 软考中级(软件设计师)——面向对象程序设计(C++Java二选一的题15分-目标3分)

    软考中级(软件设计师)--面向对象程序设计(C++&Java二选一的题15分-目标3分) 目录 软考中级(软件设计师)--面向对象程序设计(C++&Java二选一的题15分-目标3分) ...

  8. 软考中级软件设计师 2009-2022年真题

    ** 整理了2009年到2022年 软考中级软件设计师的题目与参考答案 百度网盘分享 链接:https://pan.baidu.com/s/1f4Hfuw7lzgM4IZa-g1Wepg?pwd=50 ...

  9. 软考中级--软件设计师

    软考中级–软件设计师 数据库系统复习总结

  10. 软考中级(软件设计师)——计算机网络(5分)与信息安全(3分)

    软考中级(软件设计师)--计算机网络(5分)与信息安全(3分) 目录 软考中级(软件设计师)--计算机网络(5分)与信息安全(3分) 计算机网络(5分) 开放系统互连参考模型(★★) TCP/IP协议 ...

最新文章

  1. 【TX2】TX2开发板系统默认串口有ttyS0(调试口)、ttyTHS1、ttyTHS2、ttyTHS3,通过修改设备树文件,可以新增三个串口
  2. 在linux将一些程序放到后台运行的方法(nohup/screen/daemonize)
  3. matlab求系统稳定时k的范围,Matlab大作业
  4. 高一被清华姚班录取,高三委拒谷歌offer,一个重度网瘾少年到理论计算机科学家的蜕变...
  5. PHP中文乱码解决办法
  6. MySQL优化常见Extra分析——慢查询优化
  7. java连接打印机访问被拒绝_java – 尝试访问spring security中的登录页面时访问被拒绝的异常...
  8. Times33算法与最快的Hash表
  9. 5绘制收银台程序_透视Matplotlib核心功能和工具包 - 高级特征绘制
  10. react 项目实战(二)创建 用户添加 页面 及 fetch请求 json-server db.json -w -p 8000...
  11. linux备份数据库软件有哪些内容,Linux网络备份MySQL数据库的应用方法
  12. wdcp如何修改phpmyadmin导入 最大限制2048 KB
  13. 怎么学计算机制作ppt,电脑ppt怎么做
  14. 重写和重载的区别是什么
  15. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training 详解
  16. 程序员都在读的实战书,你看懂封面了吗?
  17. Python—reverse()和reversed()方法介绍
  18. 人工智能处理的几大基础任务、元宇宙和人工智能
  19. 9.6 去中心化的自治组织
  20. 市面上较流行的第三方支付平台(不完全统计)

热门文章

  1. Mybatis的批量插入数据库的两种方法及代码自动生成工具的使用方法
  2. 2020身高体重标准表儿童_2020儿童标准身高表出炉,对照下!
  3. 深度学习中的IoU概念理解
  4. 使用 Ruby 开发代码生成器
  5. 突然集体涨价的背后 共享充电宝未来会走向何方?
  6. 一键就可像素化的神器 # Pixelator
  7. Windows开源Web服务器性能和压力测试工具
  8. Spark SQL操作Hive表
  9. 详解Unity中的粒子系统Particle System (二)
  10. 基于simulink的风力机房温度控制系统仿真