编程的知识
-
形参和实参的区别
形参名实际上是实参的别名;形参不能向实参传递信息形参出现在函数定义的地方,多个形参之间以逗号分隔,形参规定了一个函数所接受数据的类型和数量。
实参出现在函数调用的地方,实参的数量与类型与形参一样,实参用于初始化形参。
如果方法的参数是基本数据类型,则形参的改变不影响实际参数
如果方法的参数是引用数据类型,形式参数的改变会影响实参
- 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
public class Test {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
();
// 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
();
}
}
}
-
抽象
当父类知道子类应该包含什么样的方法,但无法确定子类如何实现这些方法;在分析事物时,会发现事物的共性,将共性抽取出,实现的时候,就会有这样的情况:方法功能声明相同,但方法功能主体不同,这时,将方法声明抽取出,那么,此方法就是一个抽象方法。
- 抽象的定义格式
- 抽象方法的定义格式:public abstract 返回值类型 方法名(参数);
- 抽象类的定义格式:abstract class 类名{}
- 抽象的特点
- 抽象类和抽象方法都需要被 abstract 修饰,抽象方法一定要定义在抽象类中
- 抽象不能直接创建对象,因为调用抽象方法没有意义
- 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象,否则该子类还是一个抽象类
- 之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单
- 抽象的定义格式
C++
- 继承
class D{......}; class B: public D{......}; class A: public D{......}; class C: public B, public A{.....};
这个继承会使D创建两个对象,要解决上面问题就要用虚拟继承格式
格式:class 类名: virtual 继承方式 父类名
class D{......}; class B: virtual public D{......}; class A: virtual public D{......}; class C: public B, public A{.....};
-
~ 类名的是类的析构函数
与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。析构函数名也应与类名相同,只是在函数名前面加一个位取反符,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。
-
C++中的::
1.在类外部声明成员函数。void Point::Area(){}?作用域符号 :: 的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分)
2.调用全局函数;表示引用成员函数变量及作用域,作用域成员运算符 例:System::Math::Sqrt() 相当于()。
3.调用类的静态方法: 如:CDisplay::display()。 把域看作是一个可视窗口全局域的对象在它被定义的整个文件里,一直到文件末尾都是可见的。在一个函数内被定义的对象是局域的(local scope), 它只在定义其的函数体内可见。每个类维持一个域,在这个域之外 ,它的成员是不可见的。类域操作符告诉编译器后面的标识符可在该类的范围内被找到。
-
c++中 ->
->是指针的指向运算符,通常与结构体一起使用。
#include<stdio.h> struct stu // 定义一个结构体 { char name[10]; // 姓名 int num; // 学号 int age; // 年龄 }; void main() { struct stu *s; // 定义一个结构体指针 char str[]="ZhangLi"; s->name = str; // 对结构体中的成员变量name进行赋值 s->num = 2015120; // 对结构体中的成员变量num进行赋值 s->age = 18; // 对结构体中的成员变量age进行赋值 }
第一章 计算机系统知识
几个器
- 程序计数器(PC):存放指令的地方,寄存信息和计数两种功能;总是将要执行的下一条指令。
- 累加器(AC):暂时存放算术逻辑运算的结果。
- 指令寄存器(IR):保存正在执行的指令。
- 地址寄存器(AR):保存当前cpu访问的内存单元地址。
可靠性
并联:1-(1-R1)*(1-R2)*(1-R3)
串联:R1*R2*R3
海明码
几个算法
P41
共享密钥加密(对称加密算法):用同一个密钥去加密和解密数据。常用算法DES,3DES,IDEA,AES
摘要算法:(由于输出的密文是提取原数据经过处理的定长值,所以它已经不能还原为原数据,即消息摘要算法是“不可逆”的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用bai做数据完整性验证,)MD5,SHA
- RSA:非堆成加密算法(主要用于数字签名和验签)
- IDEA:对称加密算法,用来数据加密
- RC5:非对称加密算法,用来数据加密
- MD5:消息摘要算法,不能用来加密数据
存储系统
主存采用动态随机存储器DRAM,Cache采用静态随机存储器SRAM。
第二章 程序设计语言基础知识
和follow集合
https://www.cnblogs.com/henuliulei/p/10666498.html
2. 编译过程概述
- 词法分析:输入源程序之后,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误。输出单词序列
- 语法分析:在词法分析的基础上分析单词序列是否形成符合语法规则的语法单位。按照语法股则分析检查每条语句是否有正确的逻辑结构。检查你说话的“主谓宾”结构
- 语义分析:检查语义错误,比如表达式的除数是不是为0,赋值语句的右端和左端类型匹配否,检查你说话的意思。
- 中间代码生成:中间代码是一种简单而且含义明确的记号系统,可以有多种形式,特征是和机器无关,常见的中间代码三地址码。
3.DFA NFA
DFA,NFA:词法分析的工具,DFA(确定的有限自动机),NFA(不确定的有限自动机)。并且每一个NFA都有与其等价的DFA。注意必须到达终态才可以噢,正规式和有限自动机之间的转换。
第三章 数据结构
第四章 操作系统知识
段页
逻辑地址= 页号+页内地址
物理地址=物理块号+页内地址
PV操作
S代表资源可用数,P申请操作S-,V释放操作S+。S从1开始噢
实现进程的同步和互斥
- 互斥,先p后v
- 同步:用一个信号量与消息联系起来,当信号量的值为0时表示希望的消息未产生,非0时表示希望的消息已经存在。假定用信号量S表示某条信息,则进程通过调用P操作测试信息是否到达,调用V操作通知信息已经准备好。
p223旋转调度算法
位示图
每一位对应一个块,某系统的字长为32位则表示一个字32块。物理块从0开始编号,因此4096号物理块是第4097块。
第五章 软件工程基础知识
环路复杂度
V(G)=E-N+2,E是流图中边的条数,N是结点数
注意一点是自环弧线要忽略掉
V(G)=E-N+2 = 9 -7 +2 =4 注意是9不是10
皮特图
需要注意的是
FJ开始的前提是ABCEF和ABF都完成了才可以。
几个模型
- 瀑布模型:将各个活动规定为依照线性顺序连接的若干阶段模型。规定了次序。
- 螺旋模型:结合了瀑布模型和演化模型,弥补了不足之处。适用于大型开发。
- 增量模型:融合了瀑布模型的基本成分和原型实现的迭代特征。
- 演化(迭代)模型:适应变化的需求,尽快投入使用,后续不断改善
敏捷方法
- 极限编程:主要解决代码质量底的问题。
- 并列争求法:30天一个冲刺
成本估算
- COCOMOII模型:COCOMO的改进版本,包括三个阶段性模型。
软件质量特性:
功能性,可靠性,易用性,效率性,维护性,可移植性。其中可移植性包括:适应性,易安装性,共存性,易替换性,依存性。
可靠性可以用MTBF/(1+MTBF)来度量.MTBF(平均故障间隔时间)
白盒测试
语句覆盖:最弱的覆盖,只需要覆盖代码中的执行语句,不用考虑各种分支
判定覆盖:(每个分支至少一次),每个分支至少被执行一次
条件覆盖:不仅每个语句至少一次,而且每个判定都要取到。
路径覆盖:最高的覆盖,覆盖程序中所有可能的路径。
边-节点+2(忽略自环)
第六章 结构化开发方法
耦合(高内聚,低耦合,提高模块独立性)
耦合性从上向下长高。
内聚
内聚性从上向下长高。
注意偶然内聚噢。
数据流图
数据流图也叫数据流程图(DFD),在逻辑上描述系统的功能,输入,输出和数据存储等。一个加工至少要有一个输入数据流和一个输出数据流。接口的设计依据就是数据流图。
父图和子图要在数据流数量和流量上保持一致。
首先是上下文数据流图(顶层图),只有一个加工,顶层图经过分解后的图叫0层图。
第七章 面向对象技术(抽象、继承、多态)
- 面向对象分析包括五个活动:认定对象,组织对象,描述对象之间的相互作用,定义对象的操作,定义对象的内部信息。(没有面向对象程序设计噢)
- 架构师关注什么,关注系统的行为,即是系统要做什么。
创建型设计模式
- 生成器:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。
结构型设计模式:
- 装饰:动态地给对象添加额外的类。
- 外观:定义一个高层接口,使子系统中的一组接口更容易使用。
行为设计模式
p379
UML
UML强调的是一个系统中对象的特征和行为的定义。
-
事物:结构事物,行为事物,分组事物,注释事物。
结构事物:类,接口,协作,用例,主动类,构建,制品,结点
行为事物:交互,状态机,活动
分组事物:包
注释事物:注解
- 关系:依赖,关联,泛化,实现
依赖:一个事物发生会影响另一个事物
关联:聚集是一种特殊的关联(描述了整体和部分的关系)
泛化:子元素的对象可以替代一般元素
实现:
- 用例图
用例之间的关系:包含(include),扩展(extend):把可选行为从必须的行为中抽离出来。
扩展指向的是必须的行为。
泛化关系(多个用例共同拥有一种类似的结构和行为的时候。把他们的共性抽象为父用例。)
第九章 数据库技术基础
- 数据库的规范化,函数依赖 函数依赖,
数据库语句
单行函数:就是使用函数查询返回一条结果如(等于,时间转换,转换函数等)
聚合函数:就是使用函数查询返回多调数据的如(大于,小于,不等于)
- “Where” 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。
- “Having”是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
升序ADC,降序DSC。
第十章 网络与信息安全基础知识
-
TCP和UDP基于IP协议,HTTP基于TCP协议。
ARP:IP转为物理地址。
url地址
- 一般的url地址:协议://主机名.域名.域名后缀或IP地址(:端口号)/目录/文件名
子网掩码
如何理解子网掩码? - 纪言的回答 - 知乎
它是用来划分子网的网段和遮掩部分IP地址。它的二进制中的0和1必须是连续的。
子网掩码怎么用呢?转化为二进制之后和原IP地址做与运算,除了两个1的,其他全部都是0,例如
IP地址: 二进制:1100 0000.1010 1000.0000 0001.1000 0001
子网掩码: 二进制:1111 1111.1111 1111.1111 1111.0000 0000
1100 0000.1010 1000.0000 0001.1000 0001
1111 1111.1111 1111.1111 1111.0000 0000
————————————————————
1100 0000.1010 1000.0000 0001.0000 0000 =>十进制:
计算后的这段二进制代码相比于原来的IP地址,后面8位被用0遮掩了。也就是说从到都是同一个子网网段,里面的0—255号可以分配给不同的机器还要减去2,除去一个全是0的网络号和一个全是1的广播号。就是所谓的网络号,也可以写作或者\24(24指的是IP地址中有24位未被遮掩)
路由
- 静态路由:手工配置的路由信息,网络的拓扑改变时,需要手工修改静态路由信息。
- 随机路由:
- 洪泛路由:收到的封包往所有可能连接路劲上送,直到封包到达。
- 动态路由:自适应路由。路由器能够自动的简历自己的路由表,并且能够根据实际情况的变化适时的调整。