深信服科技校园招聘笔试题.docx

上传人:b****9 文档编号:26294510 上传时间:2023-06-17 格式:DOCX 页数:14 大小:20.46KB
下载 相关 举报
深信服科技校园招聘笔试题.docx_第1页
第1页 / 共14页
深信服科技校园招聘笔试题.docx_第2页
第2页 / 共14页
深信服科技校园招聘笔试题.docx_第3页
第3页 / 共14页
深信服科技校园招聘笔试题.docx_第4页
第4页 / 共14页
深信服科技校园招聘笔试题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

深信服科技校园招聘笔试题.docx

《深信服科技校园招聘笔试题.docx》由会员分享,可在线阅读,更多相关《深信服科技校园招聘笔试题.docx(14页珍藏版)》请在冰豆网上搜索。

深信服科技校园招聘笔试题.docx

深信服科技校园招聘笔试题

深信服科技2011校园招聘笔试题

一、选择题(单选多选都有,每题2分,时间:

120分钟)

1.正则表达式(a|b)+[0-9]*c可匹配下列哪些字符串?

()

A.abac

B.90c

C.aba10c

D.ac

2.已知a,b都是double类型,下列哪些判断a,b相等的方法是正确的?

()

A.a==b

B.fabs(a-b)

C.fabs(a-b)<=FLT_EPSILON

D.fabs(a-b)<=DBL_EPSILON

E.fabs(a-b)

3.下列哪些是可能引起错误的代码?

()

A.charc=233;tables[c]=c;

B.#defineequal(a,b)a==b;inta=3,b=7;printf(“a&3%sb&3\n”,equal(a&3,b&3)?

“==”:

“!

=”);

C.已知Derived是Base的派生类Base*p=newDerived;delete(Derived*)p;

D.std:

:

stringstr1(“hello”),str2;memcpy(&str2,&str1,sizeof(str1));

4.下列哪些指令执行之后,标志寄存器的ZF一定会置位为1?

()

A.XOREAXEAX

B.CMPEAXEAX

C.MOVEAX0H

D.TESTEAXEAX

5.下列哪些数据结构最适合医疗仪器设备中的大型数据量插入、查找?

()

A.数组

B.哈希表

C.红黑树/二叉平衡树

D.链表

6.下列哪些排序算法的平均时间复杂度是O(Nlog2N)(),哪些是稳定排序()

A.冒泡排序

B.希尔排序

C.快速排序

D.插入排序

E.堆排序

7.下列哪些说法是正确的:

()

A.二分查找法在一个长度为1000的有序整数数组查找一个整数,比较次数不超过100次

B.在二叉树中查找元素的时间复杂度为O(log2N);

C.对单向链表,可以使用冒泡法排序;

D.对双向链表,可以使用快速排序.

8.已知Derived是Base的派生类,且Base、Derived都有缺省构造函数,Base有个成员函数fool,原型为:

voidBase:

:

fool(),Derived有个成员函数foo2,原型为:

voidDerived:

:

foo2().请问下述哪些代码是可以正常编译通过的?

()

A.Derived*p=newBase;

B.Base*p=newDerived;

C.void(Derived:

:

*pfn)()=&Base:

:

foo1;

D.void(Base:

:

*pfn)()==&Derived:

:

foo2;

9.下列哪些函数调用之后,buf一定是以’\0’结束(假设src是字符串,buf足够长):

()

A.memcpy(buf,src,strlen(src));

B.strcpy(buf,src);

C.strncpy(buf,src,strlen(src));

D.strcat(buf,src);

10.X86平台,下列哪几种情况下需要对全局变量I的访问进行加锁:

()

A.A线程:

if(I++)return;B线程:

if(I++)return;

B.A线程:

if(I)return;B线程if(I)return;

C.A线程:

if(I++)return;B线程:

if(I)return;

D.A线程:

I=1;B线程:

I=0;

二、填空题(每题2分,共20分)

1.下列程序的运行结果是:

_________

voidfun(int*pa,int&b,intc)

{

*pa=5;

b=5;

c=5;

}

intmain()

{

inta=1;

intb=2;

intc=3;

fun(&a,b,c);

printf(“%d%d%d\n”,a,b,c);

return0;

}

2.数值转换:

十进制123转成十六进制_______

十六进制F3转成十进制______

八进制456转成十六进制______

3.位运算(32位X86平台)

1)0x321&0x2f=______

2)0x321^0x3f=______

3)~0x321=______

4.调用printf函数可以分解为九个过程,请写出它们的排列顺序_________

A.call指令

B.EBP出栈

C.函数参数压栈

D.收回局部变量空间

E.在栈上保留局部变量空间

F.EBP压栈

G.函数参数出栈

H.ret指令

I.打印输出字符串

5.请挑出下述代码执行过程中会发生的事件,并按顺序排列______

structBase{

intval;

Base():

val(0){}

~Base();

};

structDerived:

publicBase{

Derived(){}

~Derived(){}

};

Base*p=newDerived;

deletep;

6.下列代码的运行结果是:

______

structFoo{

Foo(constchar*name,int*p):

m_name(name),m_p(p)

{

printf(“%s:

%d”,name,++*p);

}

~Foo()

{

printf(“%s:

%d”,m_name,--*p);

}

constchar*m_name;

int*m_p;

};

voidfun(int*p)

{

Fooa(“a”,p);

newFoo(“b”,p);

}

intmain()

{

inta=1;

fun(&a);

printf(“%d\n”,a);

return0;

}

输出结果

a:

2

b:

3

a:

2

2

用new创建的对象必须要用delete才销毁不然不会调用对象析构函数

若改程序:

voidfun(int*p)

{

Fooa(“a”,p);

Foo*b=newFoo(“b”,p);

Deleteb;

}

则程序输出为:

a:

2

b:

3

b:

2

a:

1

1

 

7.下列程序的运行结果是______

intmain()

{

inta[5][2]={

0,1,2,3,4,5,6,7,8,9

};

int*p=a[0];

int(*p2)[2]=&a[1];

++p;

++p2;

printf("%d",*p);1

printf("%d",**p2);4

printf("%d",p2[1][2]);8

8.32位X86平台,4字节对齐,下列代码的执行结果是:

______

unionuni{

struct{

char*p1;

intn2;

charc;

}s1;

struct{

intn3;

char*p4;

}s2;

};

intmain()

{

unionuniu;

printf(“%d%d%d%d\n”,sizeof(u),sizeof(&u),(int*)&u.s2.p4-(int*)&u.s1.p1,

(char*)&u.s2.n3–(char*)&u.s1.p1):

return0;

}

9.将C语言表达式a*(b-c)/d+e转成后缀表达式是______

10.已知某二叉树的后序遍历是DFBEGCA,中序遍历的顺序是DBFACEG,其前序遍历顺序是______

三、代码补全题(每空1分,共15分)

1.下述函数的作用是:

消除字符串首尾空白符(仅指跳格符和空格符),中间出现的连续空白符合并为一个空格,请补充其中缺失的行。

#defineISWHITE(x)(__________________________________)

voidtrim(char*pStr)

{

char*pR=pStr;

char*pW=pStr;

while(ISWHITE(*pR))

{

++pR;

}

for(;;)

{

while(________________)

{

*pW++=*pR++;

If(*pR==‘\0’)

break;

}

while(________________)

{

++pR;

If(*pR==‘\0’)

break;

}

__________________;

}

____________________;

}

2.下列代码将两个有序链表接合为一个,链表中的元素的排列顺序为从大到小。

请补充其中的空缺。

structnode{

structnode*pnext;

Intval;

};

structnode*splice(structnode*plhs,structnode*prhs){

if(_____________)

returnprhs?

prhs:

plhs;

structnode*phead,*plast;

if(_____________){

phead=plast=plhs;

plhs=plhs->pnext;

}

else{

phead=plast=prhs;

prhs=prhs->pnext;

}

while(_____________){

if(plhs->valval)

{

plast->pnext=plhs;

plast=plhs;

plhs=plhs->pnext;

}

else{

plast->pnext=prhs;

plast=prhs;

prhs=prhs->pnext;

}

}

plast->pnext=_______________;

return___________________;

}

3.一个正整数n,可以分解为多个小于等于n的正整数的和,表达式右部的各个正整数要求都是2的幂,例如给定正整数4、7,它们可以分解得到如下表达式:

4=1+1+1+17=1+1+1+1+1+1+1

4=1+1+27=1+1+1+1+1+2

4=2+27=1+1+1+2+2

4=47=1+1+1+4

7=1+2+2+2

7=1+2+4

因此,正整数4、7可以得到的表达式个数分别是4个和6个,下列程序可以计算给定正整数n(0

__int64calc(intn)

{

inti;

intsize=________________;

__int64*w=(__int64*)malloc(size);

if(!

w)

abort():

__int64ret=0;

___________;

___________;

for(i=3;i<=n;i++)

{

if(i%2)

w[i]=_________;

else

w[i]=_________;

}

ret=w[n];

free(w);

returnret;

}

四、问答题(每题5分,共25分)

1.下列代码期望输出结果是1111,请找出fun1….fun4中存在的问题,并简单说明原因:

1)int*fun1(inta){问题1:

返回局部变量的地址问题2第二次调用时将覆盖第一次的结果所以等到的是0

2)intret=a;

3)Return&ret;

4)}

5)int*fun2(inta){

6)int*p=(int*)malloc(sizeof(int));可以得到1但是没有释放在堆中分配的内存

7)*p=a;

8)returnp;

9)}

10)int*fun3(inta){等到的是0因为静态局部变量只在第一次调用时分配空间初始化一次,以后调用孔用此空间

11)staticintret;staticinta=5;这个是初始化a=6这个是赋值

12)ret=a;

13)return&ret;

14)}

15)int*fun4(inta){

16)return&a;

17)}

18)intmain()

19){

20)printf(“%d”,*fun1

(2)-*fun1

(1));

21)printf(“%d”,*fun2

(2)-*fun2

(1));

22)printf(“%d”,*fun3

(2)-*fun3

(1));

23)printf(“%d”,*fun4

(2)-*fun4

(1));

24)return0;

25)}

2.怎么查找产生内存泄漏的代码位置,请至少写出三种不同类型的方法:

3.C语言中的main函数的返回值有什么作用?

如何通过C代码取得该返回值?

main函数的返回值类型必须是int,这样返回值才能传递给操作系统。

如果main函数的最后没有写return语句的话,C99规定编译器要自动在生成的目标文件中(如exe文件)加入return0,表示程序正常退出。

不过,我还是建议你最好在main函数的最后加上return语句,虽然没有这个必要,但这是一个好的习惯。

注意,vc6不会在生成的目标文件中加入return0,大概是因为vc6是98年的产品,所以才不支持这个特性。

现在明白我为什么建议你最好加上intmain()返回整数(通常和return0)连用,返回0,告诉系统程序正常终止,返回非零值告诉系统程序异常关闭.

打开附件里的“命令提示符”,在命令行里运行刚才编译好的可执行文件,然后输入“echo%ERRORLEVEL%”,回车,就可以看到程序的返回值为0。

假设刚才编译好的文件是a.exe,如果输入“a&&dir”,则会列出当前目录下的文件夹和文件。

但是如果改成“return-1”,或者别的非0值,重新编译后输入“a&&dir”,则dir不会执行。

因为&&的含义是:

如果&&前面的程序正常退出,则继续执行&&后面的程序,否则不执行。

也就是说,利用程序的返回值,我们可以控制要不要执行下一个程序。

这就是intmain的好处。

如果你有兴趣,也可以把main函数的返回值类型改成非int类型(如float),重新编译后执行“a&&dir”,看看会出现什么情况,想想为什么会出现那样的情况。

顺便提一下,如果输入a||dir的话,则表示如果a异常退出,则执行dir

4.汉诺塔问题:

有A、B、C三个台子,每个台子上面可放若干个盘子,要求每个盘子下面的盘子都比自己大。

现在要从A台移10个盘子到B台,每次只能移动一个盘子,可以借助C台,问:

一共要移动几次盘子,请写出计算过程。

5.近来有人声称发明了一类神奇的直角三角形,其每一条边的长度都是互不相等的Fibonacci数,聪明的你能找到这样的三角形吗?

 如果能,请写出符合条件的三个数值,如果不能,请写出分析过程,Fibonacci数:

满足:

f

(1)=1,f

(2)=1,f(n)=f(n-1)+f(n-2)。

五、编程题(20分)

1.编写函数align_n,将size的低n位(即:

0到n-1位)清零,如果size的低n位不为函数原型:

unsignedintalign_n(unsignedintsize,intn)

2.计算a的n次方是许多加密算法的基本操作,蛮力计算方法的复杂度是O(n),请设计一个时间复杂度小于O(n)的算法,(假设计算结果可以使用long型存储)。

(6分)

 

3.不调用库函数实现split_ext,该函数作用是从WINDOWS格式路径中提取文件的后缀名,函数原型:

char*split_ext(constchar*pszPath,char*ext)

需要正确处理以下格式路径:

C:

\DlanFindmeclient\xxxx

C:

\DlanFindmeclient\hello.jpg.doc

C:

\DlanFindmeclient\test.test\hello

C:

\DlanFindmeclient\test.test\hello.c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1