笔试训练第三次知识点汇总

66 篇文章 1 订阅
6 篇文章 0 订阅

选择:

1.静态链表

定义:用 数组 描述的链表,即称为 静态链表。

就是用一个二维数组存储线形,数组第1列用于存放数据元素本身,第2列存放该数据元素在线形表中的位序。

所以 静态链表中指针表示 数组下标

2.进程、线程
进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
    注意,进程一般有三个状态:就绪状态、执行状态和等待状态【或称阻塞状态】;进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系;挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进程发出。

线程:线程是进程中的一个实体,作为系统调度和分派的基本单位

线程是进程的一部分

使用线程用利于提高程序执行效率

线程切换开销比进程切换开销低

线程间共享全局变量

 

(附加:)进程可以开多少线程?2048(实际值比这个小)

默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小1G = 1024M

 

3.TCP的服务特点 
1.可靠的面向连接的协议 

2.基于字节流  TCP协议将应用层的字节流分成多个字节段,然后将其传送到互联层。

3.可将原主机的字节无差错传送到目的主机

4.具有流量的控制功能

4.进栈出栈操作,先进后出,(做题时入栈之后的数值只能按顺序出来,其余没有入栈的暂时不入栈)

 

5.数组和指针的区别:

5.1.数组是开辟一块连续的内存空间,数组本身的标示符代表整个数组,可以用sizeof取得真实的大小;指针则是只分配一个指针大小的内存,并把它的值指向某个有效的内存空间。

 

52.数组或是在静态存储区被创建(全局数组),或是在栈上被创建。数组名对应着,注意不是指向,一块内存,其地址与容量在生命期内保持不变(当然,使用了realloc()的不算),只有数组的内容可以改变。

指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。

 

5.3.当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。

典型的情况是

 

void func(intA[])

{

//sizeof(A)得到的是4bytes

}

int main()

{

inta[10];//sizeof(a)得到的结果是40bytes

funct(a);

}

 

6.const

const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

Constdefine的区别如下:

(1)编译器处理的方式不同。

  define是在预处理阶段展开;

  const是在编译运行阶段展开,在编译的时候确定其值;

(2)类型和安全检查不同。

  define没有类型,不进行类型检查,也不进行安全检查,这样在进行替换的时候有可能发生意想不到的错误;

  const常量有具体的类型,在编译阶段会进行类型检查;

(3)存储方式不同。

  define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;

  const定义的只读变量在程序运行过程中只有一份备份,所以const可以节省空间,避免不必要的内存分配,同时提高效率。

(4)效率不同。

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高,提高了程序的健壮性。

 

(注:)Gcc的编译流程分为了四个步骤:

1.预处理,生成预编译文件(.i文件):对源代码文件中的文件包含(include)、预编译语句(如宏定义define)进行分析

何时需要预编译:

1.1总是使用不经常改动的大型代码体。

1.2程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个“预编译头”

 

        Gcc –E hello.c –o hello.i
    2.编译,生成汇编代码(.s文件):

        Gcc –S hello.i –o hello.s
    3.汇编,生成目标文件(.o文件):
        Gcc –c hello.s –o hello.o
    4.链接,生成可执行文件:
        Gcc hello.o –o hello

 

7.C++ 调用c编译的程序,为何要加extern c

 

 

程序阅读:

1.

void main()

{

int a[5] = {1,2,3,4,5};

int *ptr = (int *)(&a + 1);

printf(%d %d\n, *(a + 1), *(ptr - 1));

}

 

输出的结果为2,5.由于a是数组的地址,如果是a + 1,那么步长就是数组一个元素的长度;但是如果是&a + 1,那么步长就是一个数组的长度,此题就是20个字节长度,那么在最后ptr - 1的结果就是数组a的最后一个元素5.

 

对于二维数组a[3][4],哪个不能表示a[1][1]?

*(a[1] + 1); 2.*(&a[1][1]); 3.(*(a + 1)[1]); 4.*(a + 5)

本题选择4号,因为最后一个的步长是一行,即它代表了数组a[5][0];

其实主要就是看步长,如果是&a + 5那就是二维数组为一个单位,后移5个二维数组的长度。

第一个就是以列为一个单位去移动,正好得到a[1][1]

 

 

 

1OSI七层模型

OSI中的层 功能 TCP/IP协议族 
应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTPHTTPSNMPFTPSMTPDNSTelnet 
表示层 数据格式化,代码转换,数据加密 没有协议 
会话层 解除或建立与别的接点的联系 没有协议 
传输层 提供端对端的接口 TCPUDP 
网络层 为数据包选择路由 IPICMPRIPOSPFBGPIGMP 
数据链路层 传输有地址的帧以及错误检测功能 SLIPCSLIPPPPARPRARPMTU 
物理层 以二进制数据形式在物理媒体上传输数据 ISO2110IEEE802IEEE802.2

 

2TCP/IP五层模型的协议

应用层 
传输层 
网络层 
数据链路层 
物理层 

 

 

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种表示:

SYN(synchronous建立连接)

ACK(acknowledgement 表示响应、确认)

PSH(push表示有DATA数据传输)

FIN(finish关闭连接)

RST(reset表示连接重置)

URG(urgent紧急指针字段值有效)

 

三次握手:

 

第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

      握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

      确认号:其数值等于发送方的发送序号+1(即接收方期望接收的下一个序列号)。

四次挥手:

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。

第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。

第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

 

TCP的四次挥手过程(简言之):主动关闭方向被动关闭方发送不会再给你发数据了的信息;被动关闭方对收到的主动关闭方的报文段进行确认;被动关闭方向主动关闭方发送我也不会再给你发数据了的信息;主动关闭方再次对被动关闭方的确认进行确认。

七层 有哪些重要协议

 

BIOS是一组固化到计算机主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值