今日头条一面

今日头条一面

1.介绍自己,10min

2.介绍项目(大约10min)

3.提问:

1)滑动窗口:

当发送窗口和接收窗口的大小固定为1时,滑动窗口协议退化为停等协议(stop-and-wait)。
该协议规定发送方每发送一帧后就要停下来,
等待接收方已正确接收的确认(acknowledgement)返回后才能继续发送下一帧。
由于接收方需要判断接收到的帧是新发的帧还是重新发送的帧,
因此发送方要为每一个帧加一个序号。
由于停等协议规定只有一帧完全发送成功后才能发送新的帧,
因而只用一比特来编号就够了。
后退n协议
由于停等协议要为每一个帧进行确认后才继续发送下一帧,大大降低了信道利用率,
因此又提出了后退n协议。后退n协议中,发送方在发完一个数据帧后,不停下来等待应答帧,
而是连续发送若干个数据帧,即使在连续发送过程中收到了接收方发来的应答帧,也可以继续发送。
且发送方在每发送完一个数据帧时都要设置超时定时器。只要在所设置的超时时间内仍未收到确认帧,
就要重发相应的数据帧。如:当发送方发送了N个帧后,
若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,
此时发送方就不得不重新发送出错帧及其后的N帧。
从这里不难看出,后退n协议一方面因连续发送数据帧而提高了效率,
但另一方面,在重传时又必须把原来已正确传送过的数据帧进行重传(仅因这些数据帧之前有一个数据帧出了错),
这种做法又使传送效率降低。由此可见,若传输信道的传输质量很差因而误码率较大时,
连续测协议不一定优于停止等待协议。此协议中的发送窗口的大小为k,接收窗口仍是1。
选择重传协议
在后退n协议中,接收方若发现错误帧就不再接收后续的帧,即使是正确到达的帧,这显然是一种浪费。另一种效率更高的策略是当接收方发现某帧出错后,其后继续送来的正确的帧虽然不能立即递交给接收方的高层,但接收方仍可收下来,存放在一个缓冲区中,同时要求发送方重新传送出错的那一帧。一旦收到重新传来的帧后,就可以原已存于缓冲区中的其余帧一并按正确的顺序递交高层。这种方法称为选择重发(SELECTICE REPEAT)显然,选择重发减少了浪费,但要求接收方有足够大的缓冲区空间。
滑动窗口功能:确认、差错控制、流量控制。

2)死锁
3)慢启动,快启动

最初的TCP的实现方式是,在连接建立成功后便会向网络中发送大尺寸的数据包,假如网络出现问题,很多这样的大包会积攒在路由器上,很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此现在的TCP协议规定了,新建立的连接不能够一开始就发送大尺寸的数据包,而只能从一个小尺寸的包开始发送,在发送和数据被对方确认的过程中去计算对方的接收速度,来逐步增加每次发送的数据量(最后到达一个稳定的值,进入高速传输阶段。相应的,慢启动过程中,TCP通道处在低速传输阶段),以避免上述现象的发生。这个策略就是慢启动。
TFO的的流程如下:网址:https://blog.csdn.net/u014023993/article/details/85928026
用户向Server发送SYN包并请求TFO Cookie;
Server根据用户的IP加密生成Cookie,随SYN-ACK发给用户
用户储存TFO Cookie
当连接断掉,重连后的流程如下:
用户向Server发送SYN包(携带TCP Cookie),同时附带请求;
Server校验Cookie(解密Cookie以及比对IP地址或者重新加密IP地址以和接收到的Cookie进行对比)。
如果验证成功,向用户发送SYN+ACK,在用户回复ACK之前,便可以向用户传输数据;
如果验证失败,则丢弃此TFO请求携带的数据,回复SYN-ACK确认SYN Seq,完成正常的三次握手。如果Cookie在网络传输的过程中被丢弃,Client在RTO后,发起普通的TCP连接,

4)线程和进程的区别
5)软间隔(这个我连是个啥都不知道,http有软间隔这种东西吗???)
6)实现线程池的思路
7)什么时候会用到线程池
8)http 的 get和post的区别,什么时候用http

这个 我根本没看,事后发现根据经验猜对了。。。
POST方法向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。
Get是最常用的方法,通常用于请求服务器发送某个资源,而且应该是安全的和幂等的。
(1). 所谓安全是指该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改和增加数据,不会影响资源的状态。 
注意:这里安全的含义仅仅是指是非修改信息。
GET和POST的区别:
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母或数字,则原样发送;如果是空格,转换为+;如果是中文或其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII码值。而与之对应的,POST把提交的数据放置在HTTP包的包体中,
POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为:(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击(CSRF,跨站请求伪造,也被称为:one click attack/session riding)。

9)http和https的区别

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

4.考察算法:

1)给20个数字,大小介于0-100,找出全部的两两相加的和为30的数字。
**答案**:我写的,思路很简单,结果正确
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[20];
    int b[20];
    int dealed[20];
    int i=0;
    for(; i<20; i++)
    {
        a[i]=rand()%30;
        printf("%d ",a[i]);
        if(a[i]>30)
        {
            b[i]=-1;
        }
        else
        {
            b[i]=a[i];
        }
        dealed[i]=-1;
    }
    printf("\n");

    int j=0;
    for(i=0; i<20; i++)
    {
        printf("%d ",b[i]);
        if(b[i]!=-1)
        {
            for(j=0; j<20; j++)
            {
                if(b[i]+b[j]==30&&i!=j&&dealed[i]!=0&&dealed[j]!=0){
                    dealed[i]=0;
                    dealed[j]=0;
                    printf("%d+%d\n",b[i],b[j]);
                }
            }
        }

    }


    printf("Hello world!\n");
    return 0;
}

发布了140 篇原创文章 · 获赞 114 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qinglingLS/article/details/100109641