• 今年的笔试试题有点坑爹啊(记13年企鹅开发试题)!!


    今年的企鹅程序开发的题目有点坑爹,没有算法编程,坑得俺各种惨啊!一直对自己的编程能力不是很自信,所以在开学之初就一直狂撸算法、POJ上的题目。结果今年……嘛都不说了,都是泪啊!!更坑爹的是今年的题目就只有选择、填空两大题目类型(不加附加题),选择题却出人意料的变成了不定项选择题!

    2.有如下定义:

    int i;

    char a[10];

    string f();

    string g(string &str);

    则下列语句中,不会产生编译错误的是()

    A.if ( !! i){f();}   B.g(f())   C.a = a + 1   D.g("abc")

    C、D两项毫无疑问的排除了,对于B项,一直很不确定,所以最后果断给补上的!!现在看来是悲剧了!因为在f()返回string对象后,是生产的一个临时对象,将这个临时对象作为g()的参数传递,然而g中的形参是作为引用声明的,而引用是不能对一个临时变量进行引用的!!

    14.在有n个整数的序列中找出最大值和最小值,最少需要的比较次数是()

    A.  2n - 2    B.  3n/2    C.   n - 1    D.  4n/3

    其实,我是没理解这个题目的意思,对于这个题目我自己的理解是求最少的比较次数,而最小的比较次数就是该组数为有序的。所以其比较次数为n - 1;但听同学说是编程之美的一题目,答案为3n/2;这是又悲剧了么??

    个人的算法如下:

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void findMaxMin(int arr[],int length,int &min,int &max )
    {
        min = arr[0];
        max = arr[0];
        
        int i;
        
        int cnt = 0;
        
        //当前值若小于min,则一定会小于max,就不用再与max比较了。 
        for (i = 1; i < length; i++)
        {
            if ( cnt++ && min > arr[i])
            {
                min = arr[i];
            }
            else if ( cnt++ && max < arr[i] )
            {
                max = arr[i];
            }
        }
        cout << "cnt = " << cnt << endl;
        
    }
    
    
    int main()
    {
        int arr[] = {
            10,9,8,7,6,5,4,3,2,1
        };
        
        int len;
        len = sizeof(arr) / sizeof(arr[0]);
        int max,min;
        
        findMaxMin(arr,len,min,max);
        
        
        cout << "min = " << min << endl;
        cout << "max = " << max << endl;
        
        return 0;
    }

    其运行结果为:

     

    最好的情况就是降序的有序数组,所比较的次数为n - 1最相近。
     
    选择题的18.19.20都是我拿不定的题,主要是这方面的知识点好久没看过了。
    18、以下定时器有哪些属于TCP协议栈定时器()
    A.重传定时器   B.time_wait定时器   C.syn-ack定时器  D.零窗口探测定时器
    网上找了些相关的资料,解释如下:
    解析:
    定时器在TCP可靠传输的过程中起着举足轻重的作用。TCP在建立连接之后可能(保活
    keep-alive定时器是可选的)会 启动四个定时器,分别是:
    重传定时器:为了防止报文丢失或者损坏,TCP在发送一个报文以后启动重传定时器,
    如果定时器溢出之前该报文的ACK还未到达,则重传该报文。重传定时器超时时间
    (Retransmision Timeout)依赖于往返时间RTT,而RTT在传输的过程中是动态变化的,
    而且变化范围较大,精准的计算RTT较困难,TCP有时间戳选项,为准确的计算RTT提供
    了方便
    坚持定时器:TCP报文段可能是不携带任何数据的ACK分节,接收端对此分节无确认必要。
    假设有如下场景,A是发送端,B为接收端,B的通告窗口win大小为100字节,这时A发送
    100字节到B,由于A的ACK告知B A.win=0,所以,A暂停发送数据等待A.win变大,稍后A的
    接受缓存中的数据被上层应用处理,于是A.win增大,接着A发送ACK窗口更新通知B,如果这
    个不携带任何数据的分节丢失,则A,B就会处于一种死锁状态(A等待B通知窗口更新,B等待A
    发送数据)。为了解决这一问题,TCP发送方使用一个坚持定时器来周期性的向接收方查询,
    以便发现窗口是否已经增大。这些从发送方发出的报文段称为窗口探查(window probe)
     
    2MSL定时器:MSL是报文段做大生存时间(Maximum Segment Lifetime),设置这个定时器
    有两个目的其一是为了测量连接处于TIME_WAIT状态的时间.这样可以让TCP再次发送最后
    的ACK以防止这个ACK丢失(如果丢失,另一端会重传FIN)。
    其二,为允许老的重复分节在网络中消逝。具体可以解释为,如果一个TCP连接在断开之前
    有迷途分节尚未消逝,在断开该TCP连接之后立刻重启一个同样的连接(双方的IP地址和端口
    port相同),这时之前的迷途的老分节可能对新的新的TCP连接接收,从而造成未定义的错误。
    为了避免这种情况,TCP规定在TIME_WAIT状态,不能启动一个连接的化身。既然TIME_WAIT
    状态维持2MSL,这就保证了一个连接上的分组及其应该在2MSL内都会消失。
     
    保活定时器:这个定时器在选项中设置,默认是关闭的。如果开启这个选项,那么如果一个连
    接闲置了一定时间以后,服务端会发送探寻分节给客户端判断客户端是否有响应。这个时间在
    TCP的各种实现中不尽相同,但通常都在一小时以上。由于这个保活时间间隔太长,所以很多
    需要频繁检测对端是否存活的应用都是在应用层自行开发心跳机制。
     
    其他很多选择题各种没把握,今年考操作系统的知识点过多了,企鹅你妹的!!!
  • 相关阅读:
    git版本回退:git reset --hard 版本号
    cheerio中文文档
    疫情实时大数据报告(利用nodejs)
    Package.json 属性说明
    11 个Chrome骚技巧让你为所欲为
    vue刷新页面空白分两种情况
    修改i输入框中placeholder的样式
    input输入框显示不全是用省略号...代替
    PC端适应屏幕分辨率
    CSS设置滚动条样式
  • 原文地址:https://www.cnblogs.com/wickedboy237/p/3018532.html
Copyright © 2020-2023  润新知