考研复试问答题(五)

在复试群蹲来的(答案仅供参考):

2、滑动窗口的机制是怎样的?滑动窗口的大小如何设置?

TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议就需要对数据进行确认。TCP协议里窗口机制有2种:一种是固定的窗口大小;一种是滑动的窗口。这个窗口大小就是我们一次传输几个数据。对所有数据帧按顺序赋予编号,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧才允许被发送;同时接收方也维持着一个接收窗口,只有落在接收窗口内的帧才允许接收。这样通过调整发送方窗口和接收方窗口的大小可以实现流量控制。  TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输。每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据,另一个用于发送数据。

三种滑动窗口协议:停止-等待协议协议、GBN协议、SR协议。
停止-等待协议协议:发送窗口大小 = 接收窗口大小=1
SR协议中,窗口大小默认满足如下两个基本条件:
发送窗口大小 = 接收窗口大小
发送窗口大小 + 接收窗口大小 <= 2^n
GBN协议中,接收窗口大小固定为1,发送窗口大小 + 接收窗口大小 <= 2^n,所以发送(或接收)窗口大小 <= 2^n-1

3、红黑树有什么用?红黑树怎么计算高度?

红黑树是一种含有红黑结点并能自平衡的二叉查找树。它必须满足下面性质:

  • 性质1:每个节点要么是黑色,要么是红色。
  • 性质2:根节点是黑色。
  • 性质3:每个叶子节点(NIL)是黑色。
  • 性质4:每个红色结点的两个子结点一定都是黑色。
  • 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点

红黑树能自平衡,它靠三种操作:左旋、右旋和变色。
红黑树是一颗二叉平衡树,并且查找不会破坏树的平衡,所以查找跟二叉平衡树的查找无异
红黑树查找一个元素所需要的时间最坏是2lgN,插入一个元素最坏情况所需要的时间是2lgN,查找命中所需要的平均时间是lgN,插入一个元素所需要的平均时间也是lgN。
红黑树的高度是O(logN)
证明过程:
https://blog.csdn.net/gottawangzi/article/details/81674606

4、你认为cache最重要的技术是什么?

5、差错检测的方法有哪些?

在网络传输中,由于噪音和信号衰减等,经常会在链路中发生比特翻转、丢失等·。为此在信息接收方常常需要对接收到的信息进行检错和纠错。常用的几种检错和纠错方法有

奇偶校验,校验和,循环冗余编码等。

6、不用中间变量怎么交换两个数?

/第一种方法,数学运算  

/*  

a = a + b;  

b = a - b;  

a = a - b;  

*/  

//第二种方法,位异或运算  

原理:异或即是相同为0,不同为1(二进制表达),其中一个数与任意一个给定的值连续异或两次,值不变,这就是位运算的原理。 
例如: a = a^b^a;

/*  

a = a^b;  

b = a^b;  

a = a^b;  

*/  

//第三种方法,使用指针  

int *pa = &a;  

int *pb = &b;  

*pa = b;  

*pb = a;  

NSLog(@"after,a = %d",a);  

NSLog(@"after,b = %d",b);  

}  

return 0;

}

7、拥塞控制和流量控制的区别?

流量控制和拥塞控制是有区别的。

  • 流量控制:控制双方的传送速率在双方可以接受的范围内。流量控制是通过滑动窗口来实现的。滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。

  • 拥塞控制:描述的是整个网络的状态,通过是否重传以及传输速率的大小去感知网络的拥塞情况,进而进行调整,达到恢复网络的目的。(感知整体网络,通过控制每一个个体去fix网络状况)。

    拥塞控制是对网络整体的检测。防止过多的数据同时堆积在网络中,这样大家都无法传输数据。拥塞控制的方法主要有:慢开始( slow-start )、拥塞避免( congestion avoidance )、快重传( fast retransmit )和快恢复( fast recovery )

快重传和快恢复
快重传要求接收方在收到了一个失序的报文就发送重复确认。(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快恢复算法:
当发送方连续收到三个重复确认时,就执行“乘法减小”算法把ssthresh门限减半。但是接下去并不执行慢开始算法。考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小然后执行拥塞避免算法
 

8、网络有连接和无连接的区别?

答:主要的区别有两条。 
其一:面向连接分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接。而面向无连接没有这么多阶段,它直接进行数据传输。 
其二:面向连接的通信具有数据的保序性, 而面向无连接的通信不能保证接收数据的顺序与发送数据的顺序一致。

9、斐波那契序列是怎样的?

斐波那契数列(Fibonacci sequence),又称黄金分割数列。数学上,斐波那契数列以递归的形式进行定义 :

时间复杂度:O(log2​ N),空间复杂度:O(1)

10、讲一下递归的使用

递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。

定义一个过程或函数时,出现直接或间接调用自己的成分,称之为递归

  • 直接调用自己称为直接递归
  • 间接调用自己称为间接递归

递归模型的构成

  • 递归出口—确定递归结束情况
  • 递归体—确定大小问题的求解情况

递归算法解决问题的特点:   
             1)递归就是方法里调用自身。   
             2)在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。    
             3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
             4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

11、讲一下现在的网络体系

目前使用的是TCP/IP网络体系结构。

12、文件区缓冲算法是什么?

文件缓存区:

缓冲文件系统是系统自动在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。
从内存向磁盘输出的数据会先送到内存的缓冲区,等装满缓冲区后一起送到磁盘上
从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区,然后再从缓冲区中将数据送到程序数据区
。文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。磁盘的访问速度是远小于内存的。所以引入缓冲区技术提高访问效率

14、说一下嵌入式,最常用的嵌入式操作系统是什么?

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
常见的嵌入式操作系统: 
μClinux:
μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。
μC/OS-II   :μC/OS-II是在μC/OS的基础上发展起来的,是用C语言编写的一个结构小巧、抢占式的多任务实时内核。μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。
eCos:即嵌入式可配置操作系统。它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活,采用模块化设计,核心部分由小同的组件构成,包括内核、C语言库和底层运行包等。

16、怎样让程序执行更有效率?

1、减少程序在核心态和用户态之间的切换
2、使用线程代替进程以减少系统资源的开销
3、减少线程场景切换的开销
4、减少内存的跨边界(页)访问
5、分析速度瓶颈;
6、减少调用次数;(避免重复调用等)
7、优化函数实现;(涉及到 SSE 等)
8、使用 inline,避免函数调用的开销;
9、自己管理内存,避免内存分配的开销;

17、大数据算法和普通算法的区别?

18、怎么用代码实现图的邻接矩阵?

邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵。设G=(V,E)是一个图,其中V={v1,v2,…,vn}[1]  。G的邻接矩阵是一个具有下列性质的n阶方阵:
①对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零(在此仅讨论无向简单图),副对角线不一定为0,有向图则不一定如此。
②在无向图中,任一顶点i的度为第i列(或第i行)所有非零元素的个数,在有向图中顶点i的出度为第i行所有非零元素的个数,而入度为第i列所有非零元素的个数。
③用邻接矩阵法表示图共需要n^2个空间,由于无向图的邻接矩阵一定具有对称关系,所以扣除对角线为零外,仅需要存储上三角形或下三角形的数据即可,因此仅需要n(n-1)/2个空间。

#include<stdio.h>  
#define infinity 1000 
#define MAX_VERTEX_NUM 100  
typedef enum{DG,DN,UDG,UDN} GraphKind;  
typedef struct {  
    int vexs[MAX_VERTEX_NUM];  
    int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];  
    int vexnum,arcnum;  
    GraphKind kind;  
}MGraph;  
int LocateVex(MGraph G,int v){  
    for(int i=0;i<G.vexnum;i++){  
        if(G.vexs[i]==v)return i;  
    }  
}  
void CreateUDN(MGraph &G){  
    int i,j,k;  
    G.kind=UDN;//图的类型为无向网   
    printf("输入顶点个数和弧的个数:\n");  
    scanf("%d%d",&G.vexnum,&G.arcnum);//输入顶点个数,弧额条数,以及是否有关于弧的相关信息   
    printf("输入各个顶点的名称(数字):\n");   
    for(i=0;i<G.vexnum;i++)  
    scanf("%d",&G.vexs[i]);//输入各个顶点,这里顶点的数据类型默认为int类型  
    for(i=0;i<G.vexnum;i++)  
       for(j=0;j<G.vexnum;j++)  
       G.arcs[i][j]=0;//初始化图  
    printf("输入各条弧的两个顶点和权值:\n");     
    for(k=0;k<G.arcnum;k++){  
        int v1,v2,weight;  
        scanf("%d %d %d",&v1,&v2,&weight);//输入弧的两个顶点   
        i=LocateVex(G,v1);j=LocateVex(G,v2);//寻找两个顶点在矩阵中的位置   
        G.arcs[i][j]=weight;  
        G.arcs[j][i]=G.arcs[i][j];//置<v1,v2>的对称弧<v2,v1>   
    }      
}  
void Print(MGraph G){  
    for(int i=0;i<G.vexnum;i++){  
        for(int j=0;j<G.vexnum;j++)  
        printf("%d ",G.arcs[i][j]);  
        printf("\n");  
    }  
}  
int main(){  
    MGraph G;  
    CreateUDN(G);  
    Print(G);  
    return 0;  
} 

19、算盘与计算器的区别?

算盘计算的特点:

  • ·手动输入
  • ·手动控制算珠,执行计算
  • ·靠外界记住中间结果和最终结果
  • ·算盘得出最终结果,人脑根据经验读数

所以,算盘应该由三部分组成:输入+运算器+输出;这种机器设计理念深入人心——先靠人输入,再利用机器内部进行计算,最终输出;当需要再一次计算时,只需再操作一遍即可。

如今的计算机设计结构便被称为“冯·诺依曼体系结构”,包括5个部分:运算器+控制器+存储器+输入设备+输出设备。这5个部分不是独立工作的,是互相通信的,来共同完成计算任务。

计算机与算盘的区别就在于——算盘没有控制器和存储器。

20、有线TCP和无线TCP的区别?

在有线网络环境下,数据的传输成功率较髙,此时报文的丢失主要是由于网络拥塞引起的,由TCP报文的丢失就可以断定网络中发生了拥塞。而在无线链路的环境中,传输介质的可靠性相比有线电缆而言大大降低,链路的误码取代网络拥塞成为数据包丢失的主要原因明。由于此时TCP协议仍旧会将网络的丢包归结为网络拥塞的产生,从而会错误的降低发送端的拥塞窗口,并由此带来无线链路中有效吞吐率和带宽利用率的降低。

无线TCP所面临的主要问题是发送方无法对拥塞丢包和误码丢包进行区分,从而无法正确的调整数据的发送速率。究其原因,在于传输层无法获得无线链路上的传输信息,当前的链路状况从而只能依靠估算的方式获得,并由此引发了调整策略上的误差。

22、中断的缺点?

用中断方式来传送数据,只适合低速设备的数据传送,不适合高速设备。如果传送数据频率太高,中断次数过于频繁,会降低CPU的工作效率,也会降低数据的传送效率。中断方式比起DMA方式就是在执行检查中断的周期比较固定,都是在每条指令执行完检查中断,而DMA在每个机器周期结束后都可以执行。

23、汇编语言和高级语言的区别?

汇编语言是面向机器的程序设计语言。在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。


高级语言:由于汇编语言依赖于硬件体系,且助记符量大难记,于是人们又发明了更加易用的所谓高级语言。在这种语言下,其语法和结构更类似普通英文,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以编程。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。

24、C语言有哪些程序结构?

顺序结构:从头到尾一句接着一句的执行下来,直到执行完最后一句;
选择结构:到某个节点后,会根据一次判断的结果来决定之后向哪一个分支方向执行;
循环结构:循环结构有一个循环体,循环体里是一段代码。对于循环结构来说,关键在于根据判断的结果,来决定循环体执行多少次;

25、软件工程概要设计如何画图?

26、讲一下软件工程的生命周期

  “软件生命周期”是指从软件定义、开发、使用、维护到报废为止的整个过程,一般包括问题定义、可行性分析、需求分析、总体设计、详细设计、编码、测试和维护。 

27、数据库设计的流程是怎样的?

(1)需求分析阶段:需求收集和分析,得到数据字典和数据流图。 
(2)概念结构设计阶段:对用户需求综合、归纳与抽象,形成概念模型,用E-R图表示。
(3)逻辑结构设计阶段:将概念结构转换为某个DBMS所支持的数据模型。
(4)数据库物理设计阶段:为逻辑数据模型选取一个最适合应用环境的物理结构。
(5)数据库实施阶段:建立数据库,编制与调试应用程序,组织数据入库,程序试运行。
(6)数据库运行和维护阶段:对数据库系统进行评价、调整与修改。

28、TCP如何保障它的可靠性?

校验和

       发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 

确认应答+序列号

       TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 

超时重传

       当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 

流量控制

       TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。

        接收方有即时窗口(滑动窗口),随ACK报文发送

拥塞控制

       当网络拥塞时,减少数据的发送。

       发送方有拥塞窗口,发送数据前比对接收方发过来的即使窗口,取小的那个

       慢启动、拥塞避免、快重传、快恢复

应用数据被分割成TCP认为最适合发送的数据块。 TCP的接收端会丢弃重复的数据。 
 

原创文章 30 获赞 34 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41950078/article/details/105256632