2014迅雷校园招聘笔试题(C++)

2014迅雷校园招聘笔试题(C++)

    这是迅雷在深圳那边招聘的笔试题!!也快到我们武汉来面试笔试了吧~~

时间:2013-9-7
地点:北京大学深圳研究生院
技术类别:C++开发


说明:图片是按照顺序来的,最后两张是附加题。
  

 

 

 

 

 

 

 

 

 

 


解答:
一 .单选题
1. B
2. A
3. D
4. D
5. C
6. A
7. B
8. B
9. C
10. D
11. A
12. D
13. A
14. D  memset直接将s中的vptr给置为0了,调用虚函数需要通过vptr找到vtable,然后再vtable中找到函数调用之,这里无法定位vtable.
15. D static int a;//这是在进程的数据段分配的内存。int a //这是在进程的栈上分配的。int *p=new int(1); //这是在进程的堆上分配的。
16. D map是基于红黑树的。
17. D
18. C
19. B (699-2的n次方,此时n应该为9.)。
20. B

二. 多选题
1.  ACD 
2.  AD   移位(<< 和 >>)和逻辑与(&)、或(|)、异或(^)运算操作数只能是整数.
3.  BC
4.  无答案
5.  BD
6.  ABC   首先根据域名查找对应IP(DNS),再通过TCP建立连接,最后传输完数据通过HTTP解析HTML文本
7.  ABCD
8.  BD
9.  CD
10. ABC

三. 填空题
填空题看不太清楚,而且给出了程序,就是填空,应该不难。如果下次看清了再补充~~

四. 编程题1
这道题出自剑指offer上的。
思路为:首先查找数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

int check(int *array,int m,int n,int key)
{
   if(array!=NULL && m>0&&n>0)
  {
     int row=0;
     int col=n-1;
     while(row<m && col>=0)
    {
        if(array[row*n+col]==number)
        {
             return 1;
             break;
        }
        else if(array[row*n+col]>numbe)
             --col;
         else 
             ++row;
    }
  }
  return 0;
}

五. 编程题2
     
这道题仔细看完题目其实不难,核心代码为:
int calc_utf8_count(unsigned char *data_ptr, unsigned int data_len)  
{  
    int count = 0; //计算字符数  
    unsigned int pos = 0;  //偏移位置
    while (pos < data_len)  
    {  
        if ((unsigned char)0 == (*(data_ptr+pos) & 0x80))  
        {  
            pos++;  
            count++;  
            continue;  
        }  
        else if ((unsigned char)192 == (*(data_ptr+pos) & 0xd0))  
        {  
            if (pos+1<data_len && ((*(data_ptr+pos+1)&0x80)==(unsigned char)128))  
            {  
                pos+=2;  
                count++;  
                continue;  
            }  
            else  
                return -1;  
        }  
        else if ((unsigned char)224 == (*(data_ptr+pos) & 0xe0))  
        {  
            if (pos+1<data_len && ((*(data_ptr+pos+1)&0x80)==(unsigned char)128))  
            {  
                if (pos+2<data_len && ((*(data_ptr+pos+2)&0x80)==(unsigned char)128))  
                {  
                    pos+=3;  
                    count++;  
                    continue;  
                }  
                else  
                    return -1;  
                  
            }  
            else  
                return -1;  
        }  
        else  
            return -1;  
    }  
  
    return count;  
  
}  

后面的均为附加题:
一. 多选题
微笑
1.  ABCD
2.  ACD
3.  BC   同步模式返回的是就绪IO事件,而异步模式下返回的是完成IO事件。
4.  ABC  
5.  A

主观题:
1.
all: mySrv
mySrv: mySrv.o main.o
           cc -o mySrv mySrv.o main.o
mySrv.o: mySrv.cpp mySrv.h Common.h
           cc -shared -o mySrv.o -c mySrv.cpp libCommon.so
main.o: main.cpp mySrv.h
           cc -o main.o -c main.cpp

2. 
分别打印出:
16,12, 10, 20, 30


声明:上面是个人做的答案,可能存在错误,希望大家一起指出来,谢谢~微笑微笑

你可能感兴趣的:(2014迅雷校园招聘笔试题(C++))