Fork me on GitHub

designer

计算机网络

二级 IP 地址

IP地址的格式是 (32bit) = net-id + host-id

IP地址一般分为三类:

  • A类: IP(32bit)= net-id(8bit) + host-id(24bit)
  • B类: IP(32bit)= net-id(16bit) + host-id(16bit)
  • C类: IP(32bit)= net-id(24bit) + host-id(8bit)

子网划分

子网划分是为了解决网络IP不够用的情况,它的实质其实就是,在A,B,或者C类中把原先分配给它的主机号位数拿出若干个位来作网络号.这样就可以缓解网络IP不够用的情况了.

比如我们拿一个B类IP来划分:X.X.0.0 里面host-id位数有16位,这时可以根据具体需要(具体需要几位后面会讲)拿出若干位来作net-id,剩下的作host-id. (这时你可能会问,把 主机号位数拿去分了,那可以连的主机数不是少了?确实是这样,划分子网就是以牺牲主机数来增加网络数。事实也如此,很多企业单位本来没有那么多主机,但他就是要了个大的网络ID,IP地址不够用也是这种原因引起的)

好了,知道划分子网的实质就是把host-id分出若干位数来作net-id,这时外界是怎样和划分好了的子网内的主机联系的呢?

在没有子网掩码的情况下,外界要和子网内的主机联系必须通过先前没划分的总的网络路由器,然后由路由器查找网内的各主机,这样效率就很低下。可不可以让各个子网独自通过自己的路由和外界通信呢?掩码正是为了解决这个问题。

各个子网要和外界独自通信,必须让外界知道你是划分了的子网,你的具体网络ID。但路由表并没有划分子网的具体信息,所以外界也无法通过你的路由器和你联系。掩码就是在你划分了的子网IP地址中,net-id相对应的地方标上1, host-id相对应的地方标上0.再在路由表中添加掩码这一项,这样外界就很容易知道你的具体网络ID了。这就是掩码的作用。

接下来我们来看例题。200.200.200.0是一个C类地址。要求划分一个子网100主机,另外四个子网20主机,我们可以先把该网络划分成两个子网。一个给100主机的子网,一个给另外20主机的四子网。

C类地址有8bit的主机号,划分子网就是把主机号拿出若干位来作网络ID。

具体要拿出多少位这里有一个公式:子网内主机数=2的x次方-2(x是主机号的位数)

现在主机数是100,我们取2的x次方-2略大于100。即x=7。

也就是说主机号位数是7位,这个子网才能够连100台主机。本来有8位的,剩下的一位拿去当网络号。(也实在是巧,这一位刚好可以标识两个子网(0或者1)下面的红色部分!)

image-20210531164408192

image-20210531164431904

image-20210531164445216

三级IP地址

image-20210531164455537

202.17.192.0/20 /20的意思是,对于这个ip,前20位表示网络号

应用: 考题1

IP地址与子网掩码相与,得出的就是网络地址;

image-20210531164508158

应用: 考题2

image-20210531164517572

应用: 考题3

image-20210531164527543

应用: 考题4

image-20210531164542120

image-20210531164608677

协议

image-20210531164621852

TCP/IP协议

image-20210531164636515

image-20210531164646741

ARP

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议

URL

image-20210531164701683

DNS

image-20210531164726608

安全防范体系

  • 物理环境的安全性: 通信线路、物理设备、机房安全等;

    • 物理层的安全,主要体现在通信路线的可靠性(线路备份、网管软件、传输介质)、软硬件设备的安全性(替换设备、拆卸设备、增加设备)、设备的备份、防灾害能力、防干扰能力、设备的运行环境(温度、湿度、烟尘)、不间断电源保障等;
  • 操作系统的安全性:

    • 操作系统本身的权限带来的不安全因素,包括身份认证、访问控制、系统漏洞等;

    • 对操作系统的安全配置问题;

    • 病毒对操作系统的威胁;

  • 网络的安全性:主要体现在计算机网络方面的安全性,包括网络层身份认证、网络资源的访问控制、数据传输的保密和完整性、远程接入的安全、域名系统的安全、路由系统的安全、入侵检测的手段和网络设施防病毒等;
  • 应用的安全性: 提供服务所采用的的应用软件和数据的安全性产生,包括Web服务、电子邮件系统、DNS等,此外还包括病毒对系统的威胁;
  • 管理的安全性: 包括安全技术和设备的管理、安全管理制度、部门与人员的组织规划等。管理的制度化极大程度地影响着整个计算机网络的安全,严格的安全管理制度、明确的部门安全职责划分与合理的人员角色配置,都可以在很大程度上降低其他层次的安全漏洞;

安全控制技术

image-20210531164748566

常用攻击方法

image-20210531164758660

MITM攻击 (中间人攻击)

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”,如SMB会话劫持DNS欺骗等攻击都是典型的MITM攻击。简而言之,所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。

DDoS攻击(分布式拒绝服务攻击)

分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个

MAC攻击

MAC(Message Authentication Code)是一种确认完整性并进行认证的技术,取三个单词的首字母,简称MAC。它是一种与密钥相关联的函数。

Dos攻击

image-20210531164808228

海明码

海明码具有检错和纠错双功能,它基于奇偶校验原理,只能检查出某一位错码的位置。当有多位错码时,它就不适用了。

image-20210531164821863

I/O设备与主机间交换数据

I/O设备与主机间进行数据输入输出主要有直接程序控制方式、中断方式、DMA方式和通道控制方式;

image-20210531164830239

直接程序控制方式

CPU直接通过I/O指令对I/O接口进行访问操作,主机与外设之间交换信息的每个步骤均在程序中表示出来,整个输入输出过程由CPU执行程序来完成的;

中断方式

当I/O接A准备好接收数据或向CPU传送数据时,就发出中断信号通知CPU,对中断信号进行确认后,CPU保存正在执行的程序的现场,转而执行提前设置好的I/O中断服务程序,完成一次数据传送的处理。这样,CPU就不需要主动查询外设的状态,在等待数据期间可以执行其他程序,从而提高了CPU利用率,采用中断方式管理I/O设备,CPU和外设可以并行工作。虽然中断方式可以提高CPU利用率,能处理随机事件和实时任务,但一次中断处理过程需要经历保存现场、中断处理和恢复现场等阶段,需要执行若干条指令才能处理一次中断事件,因此这种方式无法满足高速的批量数据传送要求

直接内存存储(DMA)

通过硬件控制和实现主存与I/O设备间的直接数据传送,数据的传送过程由DMA控制器(DMAC)进行控制,不需要CPU的干预,在DMA方式下,需要CPU启动传送过程,即向设备发出“传送一块数据”的命令,在传送过程结束时,DMAC通过中断方式通知CPU进行一些后续处理工作
DMA方式简化了CPU对数据传送的控制提高了主机与外设并行工作的程度,实现了快速外设与主存之间成批的数据传送,使系统的效率明显提高;

DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。

image-20210531164838560

通道

通道是一种专用控制器,它通过执行通道程序进行I/O操作的管理,为主机与I/O设备提供一种数据传输通道,用通道指令编制的程序存放在存储器中,当需要进行I/O操作时,CPU只要按照约定格式准备好命令和数据,然后启动通道即可,通道则执行相应的通道程序,完成所要去的操作,用通道程序也可完成较复杂的I/O管理和预处理,从而很大程度上将主机从繁重的I/O管理工作中解脱出来,提高了系统的效率;

数字签名

image-20210531164848790

image-20210531164915042

image-20210531164931337

防火墙

image-20210531164941257

病毒

病毒具有隐秘性、传染性、潜伏性、触发性、破坏性

image-20210531164950917

引导区病毒

引导型病毒,指寄生在磁盘引导区主引导区的计算机病毒。

此种病毒利用系统引导时,不对主引导区的内容正确与否进行判别的缺点,在引导系统的过程中侵入系统,驻留内存,监视系统运行,待机传染和破坏。按照引导型病毒在硬盘上的寄生位置又可细分为主引导记录病毒和分区引导记录病毒。

病毒感染硬盘的主引导区,如大麻病毒、2708病毒、火炬病毒等;

分区引导记录病毒感染硬盘的活动分区引导记录,如小球病毒、Girl病毒等。

宏病毒

宏病毒是一种寄存在文档模板的宏中的计算机病毒。一旦打开这样的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染病毒的文档,宏病毒又会转移到他的计算机上。

木马病毒

木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。

木马病毒其实是计算机黑客用于远程控制计算机的程序,将控制程序寄生于被控制的计算机系统中,里应外合,对被感染木马病毒的计算机实施操作

。一般的木马病毒程序主要是寻找计算机后门,伺机窃取被控计算机中的密码和重要文件等。可以对被控计算机实施监控、资料修改等非法操作。

木马病毒具有很强的隐蔽性,可以根据黑客意图突然发起攻击。

蠕虫病毒

病毒是一种常见的计算机病毒,是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。

计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据和恶意篡改系统.影响计算机使用并且能够自我复制的一组计算机指令或者程序代码。

网络规划与设计

image-20210531165000734

常用命令

Linux chmod(英文全拼:change mode)命令是控制用户对文件的权限的命令

Linux chgrp(英文全拼:change group)命令用于变更文件或目录的所属群组。

Ctrl+Alt+Tab 使用箭头键在打开的项目之间切换

Alt+Tab 在打开的项目之间切换

Alt+Esc 以项目打开的顺序循环切换项目

Alt+Delete 显示当前窗口的系统菜单

image-20210531165017150

image-20210531165026302


帧中继

image-20210531165035973

计算机组成与系统结构

CPU

image-20210531165044123

软件特点

软件可靠性

系统在给定时间间隔内和条件下无失效运行的概率;

image-20210531165107754

软件可用性

在特定使用环境下为特定用户用于特定用途时所具备的有效性;

image-20210531165117453

软件可维护性

与软件维护的难易程度相关的一组软件属性;

软件可伸缩性

是否可以通过运行更多的实例或者采用分布式处理支持更多的用户;

健壮性(鲁棒性)

鲁棒是Robust的音译,也就是健壮和强壮的意思。它也是在异常和危险情况下系统生存的能力。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。

软件过程改进(SPI)

image-20210531165126864

SEI能力成熟度模型(SEICMM)

image-20210531165211864

软件维护

image-20210531165227216

软件质量保证

image-20210531165245461

image-20210531165256582

层次化存储体系

虚拟存储器(Virtual Memory)

在具有层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。

高速缓冲存储器(Cache)

其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。

image-20210531165309976

存储

image-20210531165319832

直接相联映射方式

主存中每一块只能映射到Cache的一个特定的块

全相联映射方式

主存中任一块都可以映射到Cache中任一块的方式

组相联映射方式

主存编址计算

image-20210531165336674

总线系统

image-20210531165347899

硬件基础知识

image-20210531165404659

程序计数器

用来存放下一条指令所在的单元的地址的地方

地址寄存器

一般用来保存当前CPU所访问的内存单元的地址,以方便对内存的读写操作

数据寄存器

主要用来保存操作数和运算结果等信息的,其目的是为了节省读取操作数所需占用总线和访问存储器的时间

指令寄存器

一般用来保存当前正在执行的一条指令

CRC计算冗余码

image-20210531165526810


操作系统

信号量-PV操作

互斥信号量的初值为1;

PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。

image-20210531165540350

磁盘

image-20210531165618500

文件

image-20210531165638583

页式存储

image-20210531165650029

浮点计算

image-20210531165714831

寻址

image-20210531165749929

系统可靠性

image-20210531165814916

进程

image-20210531165830005

嵌入式操作系统

image-20210531165839499

设备管理

image-20210531165853256


软件工程

内聚性

image-20210531165906890

UP(统一过程)

image-20210531165925058

UML(统一建模语言)

类图

展现了一组对象、接口、协作和它们之间的关系。在面对对象系统的建模中所建立的最常见的图就是类图。类图给出系统的静态设计视图,包含主动类的类图给出了系统的静态进程视图;

从弱到强 依赖 关联 聚合 组合 继承

泛化(类与 继承关系) = 实现(类与接口关系) > 组合(整体与部分的关系) > 聚合(整体与部分的关系) > 关联(拥有的关系) > 依赖(使用的关系)

依赖

是一种使用的关系,即一个类的实现需要另一个类的协助

【箭头及指向】:带箭头的虚线,指向被使用者

image-20210531165934443

关联

是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生

【箭头及指向】:带普通箭头的实心线,指向被拥有者

image-20210531165951436

image-20210531165943594

聚合

是整体与部分的关系,且部分可以离开整体而单独存在

“部分”对象可以在不同的“整体”对象之间共享,并且“部分”对象的生命周期可以与“整体”对象不同,甚至“部分”对象可以脱离“整体”对象而单独存在;

【箭头及指向】:带空心菱形的实心线,菱形指向整体

image-20210531165959547

组合

是整体与部分的关系,但部分不能离开整体而单独存在,组合关系中,整体与部分的生命周期一致。

是一种很强的“拥有”关系,“部分”和“整体”的生命周期通常一样,整体对象完全支配其组成部分,包括它们的创建和销毁等;

【箭头及指向】:带实心菱形的实线,菱形指向整体

image-20210531170007402

继承

是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为

箭头指向】:带三角箭头的实线,箭头指向父类

image-20210531170016420

实现

是一种类与接口的关系,表示类是接口所有特征和行为的实现.

【箭头指向】:带三角箭头的虚线,箭头指向接口

image-20210531170028470

对象图

展现了一组对象以及它们之间的关系。对象图描述了在类图中所建立的事务实例的静态快照;

用例图

展现了一组用例、参与者以及它们之间的关系。给出系统的静态用例对象,对系统的行为进行组织和建模非常重要;

image-20210531170046945

image-20210531170059793

序列图

是场景的图形化表示,描述了时间顺序组织的对象之间的交互活动;

协作图

强调收发消息的对象的结构组织;

序列图和协作图都是交互图: 交互图展现了一种交互,它由一组对象和它们之间的关系组成,包括它们之间可能发送的消息。交互图关注系统的动态图,序列图和协助图是同构的,它们之间可以相互转换;

状态图

展示了一个状态机,它由状态、转换、事件和活动组成。

活动图

展示了系统内一个活动到另一个活动的流程,对系统的功能建模特别重要,并强调对象间的控制流程;

构(组)件图

展示了一组构建之间的组织和依赖,它与类图相关,通常把构件映射为一个或多个类、接口或协作;

部署图

展示了运行处理节点以及其中的构件的配置。它与构件图相关,通常一个节点包含一个或多个构件;

通信图

描述的是对象和对象之间的关系,即一个类操作的实现。简而言之,就是对象和对象之间的调用关系,体现的是一种组织关系。其中一个框中的名称中带有:,说明这表示的是一个对象,:前的部分是对象名,:后面的部分是类名,而对象之间连线上面的箭头所标识的是对象之间通信的消息

image-20210531170133283

image-20210531170146994

image-20210531170221059

image-20210531170233465

image-20210531170249298

image-20210531170302717

image-20210531170348684

image-20210531170404802

image-20210531170421445

image-20210531170451621

设计模式

观察模式(发布-订阅Subscribe模式、模型-视图View)

观察者模式(发布-订阅Subscribe模式、模型-视图View): 一个目标物件管理所有相依鱼她的观察者物件,并且在它的本身的状态改变时主动发出通知

image-20210531170520703

适配器模式

适配器模式(包装): 将一个类的接口适配成用户所期待的。

状态模式

状态模式: 当一个对象的内在状态改变是允许改变其行为,这个对象看起来像是改变了其类。

Bridge(桥接)模式

Bridge(桥接)模式: 接口与其实现分离,使得接口和实现的变化不产生相互的影像;

Singleton (单件、单例) 模式

Singleton (单件、单例) 模式:确保一个类只有一个实例,并提供一个全局访问点。

Composition (组合) 模式

Composition (组合) 模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

image-20210531170538522

Facade (外观) 模式

Facade (外观) 模式:定义一个高层接口,它包含了对各个子系统的引用,客户端可以通过它访问各个子系统的功能。包含以下主要角色。

  • 外观(Facade)角色:为多个子系统对外提供一个共同的接口。

  • 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。

  • 客户(Client)角色:通过一个外观角色访问各个子系统的功能。

image-20210531170547309

抽象工厂模式

抽象工厂模式: 提供一个接口,可以创建一系列相关或相互以来的对象,而无需指定它们具体的类;

image-20210531170601239

亨元模式

亨元模式: 提供支持大量细粒度对象共享的有效方法;

装饰模式

装饰模式:动态地给一个对象添加一些额外的职责,它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活;

代理(Proxy)模式

为其他对象提供一种代理以控制这个对象的访问

生成器(Builder)模式

将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示

image-20210531170623673

image-20210531170640396

image-20210531170650872

image-20210531170701144

image-20210531170716098

image-20210531170726117

开发模型

image-20210531170735756

image-20210531170743568

McCabe度量法

McCabe度量法:在程序控制流程图中,节点是程序中代码的最小单元,边代表节点间的程序流。一个有e条边和n个节点的流程图F,可以用下述3种方法中的任何一种来计算环形复杂度。

  1. 流图中的区域数等于环形复杂度。
  2. 流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
  3. 流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。

image-20210531170753739

需求分析

image-20210531170802751

数据流图(DFD)

数据流图主要由实体、数据存储、处理过程和数据流四部分组成

建模遵循:自顶向下、抽象到具体

顶层数据流图只含有一个加工表示整个系统;输出数据流和输入数据流为系统的输入数据和输出数据,表明系统的范围,以及与外部环境的数据交换关系。

中层数据流图是对父层数据流图中某个加工进行细化,而它的某个加工也可以再次细化,形成子图;中间层次的多少,一般视系统的复杂程度而定。

底层数据流图是指其加工不能再分解的数据流图,其加工称为“原子加工”。

image-20210531170827417

image-20210531170845196

image-20210531170855220

数据字典

image-20210531170907055

软件开发方法

image-20210531170917619

软件测试

image-20210531170930388

image-20210531170950890

image-20210531171002348

image-20210531171012844


数据结构

排序

image-20210531171025872

  • 计数排序: 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 [1] 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)
  • 桶排序:桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θn))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。
  • image-20210531171046378

B树B+树

B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。

二叉树

二叉链表存储结构每个节点有2个指针。每个结点有0个、1个或者2个空指针对应有2个、1个、0个非空指针。

二叉树中边的个数等于非空指针的个数

假设二叉树中 节点的总个数为:N 边的个数为: M 度为0、1、2 的结点的个数为 n0、n1、 n2

n0 + n1 + n2 = N (1)

除了根节点,都有一条进入到此节点的边,所以 M = N -1 (2)

M = n1 + 2*n2 (3)

因此(1)(2)(3)得: n0 = n2 + 1 (4)

设空节点的个数为K,则 K = 2*n0 + n1 (5)

因此(1)(4)(5)得: K = N + 1

因此(2)得: M = N -1

因此(4)得: 度为0的结点的个数(叶子结点的个数)= 度为2的结点的个数 + 1(n0 = n2 + 1)

image-20210531171108258

image-20210531171129205

哈夫曼树

image-20210531171138657

关键路径

  • 关键路径: 从起点到终点长度最长的那条路径;
  • 活动的松弛时间: 要求出活动的最早开始时间和最晚开始时间,其最晚开始时间减去最早开始时间就是活动松弛时间;

无向图

image-20210531171158391

image-20210531171207737

沟通途径相当于无向图, 为 n *(n-1)/ 2

编码

image-20210531171227386

Huffman编码

  • 定长编码: 2x
  • Huffman编码:是一种最优的不定长编码,可以有效地压缩数据。要是用Huffman编码,除了知道文件中出现的字符之外,还需要知道每个字符出现的频率。每一步取两个最小权值作为左右子树构造一个新树

算法

image-20210531171245161

image-20210531171254342

0-1 背包问题

image-20210531171326224

image-20210531171348037

动态规划

image-20210531171400280

动态规划是一种自底向上的求解方式,将子问题的解存储在表中,当出现重复子问题时,进行查表操作,避免重复的计算,极大提高算法的效率。

是一种以空间换时间的方式,最典型个人感觉为斐波那契数列求解。

在求解问题中,对于每一步决策,列出各种可能的局部解,再依据某种判定条件,舍弃那些肯定不能得到的最优解的局部解,再每一步都经过筛选,以每一步都是最优解来保证全局都是最优解。

贪心算法

image-20210531171413023

在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解

贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)

贪心算法是一种自顶向下的解决方案,通过当前阶段的评价准则,得到局部最优解,不断减小问题规模,得到最终解。是一种局部最优解组合替代整体最优解的方案。但有些时候计算得到的最终解并非整体最优解

所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。

回溯

是一种选优搜索法,按优选条件向前搜索,以达到目标。但当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回再走的技术就是回溯法。

分治

特征: 对于一个规模为n的问题,若该问题可以容易的解决(比如说规模n比较小)则直接解决;否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各个子问题的解合并得到原问题的解;

image-20210531171422242

广义表

image-20210531171432844


时间复杂度、空间复杂度

image-20210531171441391

数据库

代数关系

image-20210531171507911

image-20210531171521332

image-20210531171543639

image-20210531171625042

image-20210531171634904

\一、关系代数的9种操作:**

关系代数中包括了:并、交、差、乘、选择、投影、联接、除、自然联接等操作。

五个基本操作:

并(∪)、差(-)、笛卡尔积(×)、投影(π)、选择(σ)

各种机制

image-20210531171646676

数据库系统的安全措施: 权限机制、视图机制、数据加密

权限机制

限定用户对数据的操作权限,把数据的操作限定在具体指定权限的用户范围内,使用GRANT语句实现权限管理

视图机制

保密数据对无权存取的用户隐藏,对数据提供安全保护

数据加密

数据加密是防止数据库中的数据在存储和传输过程中被窃取的有效手段

安全性控制

是指系统防止非法用户对系统进行操作所采取的机制。

视图可以将表中视图之外的数据屏蔽从而保证其安全,密码验证和用户授予权都是对用户合法性的管理,而完整性是对合法用户非法输入的限制,不属于安全控制

范式

image-20210531171657931

image-20210531171705429

第一范式(1NF)

符合1NF的关系中的每个属性都不可再分

字段是最小的的单元不可再分

第二范式(2NF)

2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。

满足1NF,表中的字段必须完全依赖于全部主键而非部分主键

第三范式 (3NF)

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说, 如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。

满足2NF,非主键外的所有字段必须互不依赖

第四范式(4NF)

满足3NF,消除表中的多值依赖


规范化理论

image-20210531171717932

关系模式

image-20210531171731583

image-20210531171744611

程序设计语言

面向对象

针对接口的编程

基本概念

image-20210531171800218

面向对象分析

为了获取对应用问题的理解,其主要任务是抽取和整理用户需求并建立问题域精确模型

面向对象设计

采用协作的对象、对象的属性和方法说明软件解决方案的一种方式,强调的是定义软件对象和这些软件对象如何协作来满足需求,延续了面向对象分析

面向对象实现

主要强调采用面向对象程序设计语言系统实现

面向对象测试

根据规范说明来验证系统设计的正确性

ADSL 采用频分多路技术在普通电话线上划分上行、下行和话音等不同的信道,从而实现上网和通话同时传输

基本原则

单一职责原则

对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而大大损伤其内聚性和耦合度。通常意义下的单一职责,就是指只有一种单一功能,不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因。

专注,是一个人优良的品质;同样的,单一也是一个类的优良设计。交杂不清的职责将使得代码看起来特别别扭牵一发而动全身,有失美感和必然导致丑陋的系统错误风险。

开放封闭原则

对于开放封闭原则,它是面向对象所有原则的核心,软件设计说到底追求的目标就是封装变化、降低耦合,而开放封闭原则就是这一目标的最直接体现。

开放封闭原则,其核心思想是:软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

因此,开放封闭原则主要体现在两个方面:1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。

实现开开放封闭原则的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以修改就是封闭的;而通过面向对象的继承和多态机制,又可以实现对抽象类的继承,通过覆写其方法来改变固有行为,实现新的拓展方法,所以就是开放的。

“需求总是变化”没有不变的软件,所以就需要用封闭开放原则来封闭变化满足需求,同时还能保持软件内部的封装体系稳定,不被需求的变化影响。

依赖倒置原则

对于依赖倒置原则,其核心思想是:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象

我们知道,依赖一定会存在于类与类、模块与模块之间。当两个模块之间存在紧密的耦合关系时,最好的方法就是分离接口和实现:在依赖之间定义一个抽象的接口使得高层模块调用接口,而底层模块实现接口的定义,以此来有效控制耦合关系,达到依赖于抽象的设计目标。

抽象的稳定性决定了系统的稳定性,因为抽象是不变的,依赖于抽象是面向对象设计的精髓,也是依赖倒置原则的核心。

依赖于抽象是一个通用的原则,而某些时候依赖于细节则是在所难免的,必须权衡在抽象和具体之间的取舍,方法不是一层不变的。依赖于抽象,就是对接口编程,不要对实现编程。

接口隔离原则

对于接口隔离原则,其核心思想是:使用多个小的专门的接口,而不要使用一个大的总接口。

具体而言,接口隔离原则体现在:接口应该是内聚的,应该避免“胖”接口。一个类对另外一个类的依赖应该建立在最小的接口上,不要强迫依赖不用的方法,这是一种接口污染。

接口有效地将细节和抽象隔离,体现了对抽象编程的一切好处,接口隔离强调接口的单一性。而胖接口存在明显的弊端,会导致实现的类型必须完全实现接口的所有方法、属性等;而某些时候,实现类型并非需要所有的接口定义,在设计上这是“浪费”,而且在实施上这会带来潜在的问题,对胖接口的修改将导致一连串的客户端程序需要修改,有时候这是一种灾难。在这种情况下,将胖接口分解为多个特点的定制化方法,使得客户端仅仅依赖于它们的实际调用的方法,从而解除了客户端不会依赖于它们不用的方法。

分离的手段主要有以下两种:1、委托分离,通过增加一个新的类型来委托客户的请求,隔离客户和接口的直接依赖,但是会增加系统的开销。2、多重继承分离,通过接口多继承来实现客户的需求,这种方式是较好的。

Liskov替换原则

对于Liskov替换原则,其核心思想是:子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。在父类和子类的具体行为中,必须严格把握继承层次中的关系和特征,将基类替换为子类,程序的行为不会发生任何变化。同时,这一约束反过来则是不成立的,子类可以替换基类,但是基类不一定能替换子类。

Liskov替换原则,主要着眼于对抽象和多态建立在继承的基础上,因此只有遵循了Liskov替换原则,才能保证继承复用是可靠地。实现的方法是面向接口编程:将公共部分抽象为基类接口或抽象类,通过Extract Abstract Class,在子类中通过覆写父类的方法实现新的方式支持同样的职责。

Liskov替换原则是关于继承机制的设计原则,违反了Liskov替换原则就必然导致违反开放封闭原则。

Liskov替换原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余,避免运行期的类型判别。

image-20210531171815854

各种对象的职责

image-20210531171828065

边界对象

边界对象: 系统与参与者之间的接口,该对象从参与者处收集信息,并将之转化为一种被实体对象和控制对象使用的形式;

image-20210531171837303

可视化对象
抽象对象
实体对象
基本概念
继承
多态

多态分为两种: 通用的多态、特定的多态;

​ 动态绑定是实现多态的基础

  • 两者的区别: 前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;
    后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码;
  • 通用的多态:参数多态、包含多态;

    • 参数多态:采用参数化模板,通过不同的类型参数,是的一个结构有多种类型;

    • 包含多态:同样的操作可用于一个类型以及其值类型(注意不是子类),一般需要进行运行时的类型检查;

  • 特定的多态: 过载多态、强制多态;

    • 强制多态: 编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或者操作符的要求;
    • 过载多态:同一个名(操作符、函数名)在不同的上下文中有不同的类型;

image-20210531171847433

image-20210531171902810

image-20210531171914019

image-20210531171932535

XP(极限编程)

  • 简单设计: 只处理当前的需求,使设计保持简单;
  • 测试先行: 先写测试代码,在编写程序;
  • 持续集成: 可以按照甚至按照小时为客户提供可运行的版本;
  • 现场客户: 系统最终用户代表应该全程配合XP团队;
  • 其他:
    • 计划游戏: 快速制定计划,随着细节不断变化而完善;
    • 小型发布: 系统的设计要能够尽可能早的交付;
    • 隐喻:找到合适的比喻传达信息;
    • 重构: 重新审视需求和设计,重新明确地描述他们以符合新的和现有的需求;
    • 结对编程;
    • 集体代码所有制;
    • 每周工作40小时;
    • 编码标准;

image-20210531171943148

RISC、CISC

CISC计算机:复杂指令集计算机

  • 趋于多用途、强功能化,指令系统的复杂化使得设计周期变长,正确性难以保证,不易维护,需要大量硬件支持的复杂指令利用率却很低

RISC计算机:精简指令计算机

  • 只包含使用频率较高但不复杂的指令

  • 指令长度固定,格式少,寻址方式少

  • 只能存取数指令访问主存,其他指令都在寄存器之间运算

  • 大部分指令在一个机器周期内完成,采用流水技术

  • cpu中增加了通用寄存器的数量

  • 硬联逻辑控制,不用微程序控制技术

  • 采用优化的编译,以有效地支持高技语言

引用、值传递

image-20210531172013708

image-20210531172026770

image-20210531172036129

文法

image-20210531172050723

image-20210531172105905

编译与解释

image-20210531172127905

编译器分析过程

image-20210531172141022

词法分析

从左到右逐个扫描源程序中的字符, 识别其中如关键字(或称保留字)、识别符、常数、运算符以及分隔符(标点符号和括号)等

语法分析

根据语法规则将单词符号分解成各类语法单位,并分析程序是否存在语法上的错误,包括语言结构出错、if…end if不匹配, 缺少分号、括号不匹配、表达式缺少操作数等

语义分析

进行类型分析和检查,主要检测源程序是否存在静态语义错误,包括:运算符和运算类型不符合,如取余时用浮点数

正规式

image-20210531172149583


其他

法律法规与标准化

image-20210531172204040

知识产权

image-20210531172240691

项目管理

配置管理

版本控制、变更管理、配置状态报告、配置审计

image-20210531172254770

风险识别

风险识别,是指风险管理的第一步,也是风险管理的基础。只有在正确识别出自身所面临的风险的基础上,人们才能够主动选择适当有效的方法进行的处理。

风险识别是指在风险事故发生之前,人们运用各种方法系统的、连续的认识所面临的各种风险以及分析风险事故发生的潜在原因。风险识别过程包含感知风险和分析风险两个环节。

感知风险:即了解客观存在的各种风险,是风险识别的基础,只有通过感知风险,才能进一步在此基础上进行分析,寻找导致风险事故发生的条件因素,为拟定风险处理方案,进行风险管理决策服务。

分析风险:即分析引起风险事故的各种因素,它是风险识别的关键。

风险预测

风险预测是指在工作之前对工作过程中以及工作结果可能出现的事物异常进行预测制订对策从而预防事故发生的一种措施.

风险预测是风险管理的重要组成部分,它是风险规避即控制的基础。任何风险事件的发生,都是在外界各种因素的综合作用下进行的。因此,需要在对风险事件进行预测中,需要综合考虑考虑到这些不确定的、随机的因素可能造成的破坏性影响。

风险评估

风险评估(Risk Assessment) 是指,在风险事件发生之前或之后(但还没有结束),该事件给人们的生活、生命、财产等各个方面造成的影响和损失的可能性进行量化评估的工作。即,风险评估就是量化测评某一事件或事物带来的影响或损失的可能程度。

信息安全的角度来讲,风险评估是对信息资产(即某事件或事物所具有的信息集)所面临的威胁、存在的弱点、造成的影响,以及三者综合作用所带来风险的可能性的评估。作为风险管理的基础,风险评估是组织确定信息安全需求的一个重要途径,属于组织信息安全管理体系策划的过程。

风险控制

风险控制是指风险管理者采取各种措施和方法,消灭或减少风险事件发生的各种可能性,或风险控制者减少风险事件发生时造成的损失。

总会有些事情是不能控制的,风险总是存在的。作为管理者会采取各种措施减小风险事件发生的可能性,或者把可能的损失控制在一定的范围内,以避免在风险事件发生时带来的难以承担的损失。风险控制的四种基本方法是:风险回避、损失控制、风险转移和风险保留。

Gant图与Pert图

image-20210531172308399

image-20210531172318142

人机界面设计

黄金三原则: 用户操纵控制、减少用户的记忆负担、保持界面的一致性

有限自动机

image-20210531172328536

image-20210531172338332

image-20210531172347432

正规式中: * 表示 重复若干次(包括0次) | 表示 或

确定有限自动机 :对每一个可能的输入只有一个状态的转移

多媒体

image-20210531172404281

1B = 8b 1KB = 1024B 1MB = 1024KB 1GB = 12024MB

表示媒体

为了传输感觉媒体而人为研究出来的媒体,借助于此种媒体,能够有效地存储感觉媒体或将感觉媒体从一个地方传送到另一个地方,如 语言编码、电报码、条形码等

表现媒体

用于通信中使电信号和感觉媒体之间产生转换用的媒体,如输入、输出设备,包括键盘、鼠标、显示器、打印机等;

信号数字化

image-20210531172423841

其他

image-20210531172434955