深信服科技校园招聘笔试题.docx
- 文档编号:26294510
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:14
- 大小:20.46KB
深信服科技校园招聘笔试题.docx
《深信服科技校园招聘笔试题.docx》由会员分享,可在线阅读,更多相关《深信服科技校园招聘笔试题.docx(14页珍藏版)》请在冰豆网上搜索。
深信服科技校园招聘笔试题
深信服科技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->val { 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深信 科技 校园 招聘 笔试