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
声明:上面是个人做的答案,可能存在错误,希望大家一起指出来,谢谢~