深信服科技2011校园招聘笔试题
- 格式:doc
- 大小:78.00 KB
- 文档页数:8
深信服科技2011校园招聘笔试题一、选择题(单选多选都有,每题2分,时间:120分钟)1. 正则表达式(a | b) + [0 - 9]*c 可匹配下列哪些字符串?()A. abacB. 90cC. aba10cD. ac2. 已知a, b 都是double类型,下列哪些判断a, b相等的方法是正确的?(A )A. a == bB. fabs(a-b) < DBL_EPSILONC. fabs(a-b) <= FLT_EPSILOND. fabs(a-b) <= DBL_EPSILONE. fabs(a-b) < FLT_EPSILON3. 下列哪些是可能引起错误的代码?(A )A. char c = 233; tables[c] = c;B. #define equal(a, b) a==b; int a = 3, b=7; printf(“a&3 %s b&3\n”, equal(a&3, b&3)? “==” : “!=”);C. 已知Derived 是Base的派生类Base *p = new Derived; delete (Derived *)p;D. std::string str1(“hello”), str2; memcpy(&str2, &str1, sizeof(str1));4. 下列哪些指令执行之后,标志寄存器的ZF一定会置位为1? ()A. XOR EAX EAXB. CMP EAX EAXC. MOV EAX 0HD. TEST EAX EAX5. 下列哪些数据结构最适合医疗仪器设备中的大型数据量插入、查找?( B )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 ,原型为:void Base::fool(), Derived有个成员函数foo2,原型为:void Derived::foo2(). 请问下述哪些代码是可以正常编译通过的?(BC )A. Derived *p = new Base;B. Base *p = new Derived;C. void (Derived::*pfn)() = &Base::foo1;D. void (Base::*pfn)() == &Derived::foo2;9. 下列哪些函数调用之后,buf一定是以‟\0‟结束(假设src是字符串,buf足够长): (D )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.下列程序的运行结果是:____5 5 3_____void fun(int* pa, int& b, int c){*pa = 5;b = 5;c = 5;}int main(){int a = 1;int b = 2;int c = 3;fun(&a, b, c);printf(“%d %d %d\n”, a, b, c);return 0;}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.请挑出下述代码执行过程中会发生的事件,并按顺序排列______struct Base{int val;Base() : val(0){}~Base();};struct Derived : public Base{Derived() {}~ Derived(){}};Base *p = new Derived;delete p;6.下列代码的运行结果是:______struct Foo{Foo(const char* name, int *p) : m_name(name), m_p(p){printf(“%s:%d”, name, ++*p);}~Foo(){printf(“%s:%d”, m_name, --*p);}const char* m_name;int* m_p;};void fun(int *p){Foo a(“a”, p);new Foo(“b”, p);}int main(){int a = 1;fun(&a);printf(“%d\n”, a);return 0;}7.下列程序的运行结果是______int main(){int a[5][2] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int* p = a[];int (*p2)[2] = &a[1];++p;++p2;printf(“%d”, *p);printf(“%d”, **p2):printf(“%d”, p2[1][2]);return 0;}8.32位X86平台,4字节对齐,下列代码的执行结果是:______union uni{struct {char* p1;int n2;char c;}s1;struct {int n3;char* p4;}s2;};int main(){union uni u;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):return 0;}9.将C语言表达式a*(b-c) / d+e 转成后缀表达式是______10.已知某二叉树的后序遍历是DFBEGCA,中序遍历的顺序是DBFACEG,其前序遍历顺序是______三、代码补全题(每空1分,共15分)1.下述函数的作用是:消除字符串首尾空白符(仅指跳格符和空格符),中间出现的连续空白符合并为一个空格,请补充其中缺失的行。
#define ISWHITE(x) (__________________________________)void trim(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.下列代码将两个有序链表接合为一个,链表中的元素的排列顺序为从大到小。
请补充其中的空缺。
struct node{struct node* pnext;Int val;};struct node* splice(struct node* plhs, struct node* prhs){if(_____________)return prhs ? prhs : plhs;struct node* phead, *plast;if(_____________){phead = plast = plhs;plhs = plhs->pnext;}else{phead = plast = prhs;prhs = prhs->pnext;}while(_____________){if(plhs->val < prhs->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+1 7 = 1+1+1+1+1+1+14 = 1+1+2 7 = 1+1+1+1+1+24 = 2+2 7 = 1+1+1+2+24 = 4 7 = 1+1+1+47 = 1+2+2+27 = 1+2+4因此,正整数4、7可以得到的表达式个数分别是4个和6个,下列程序可以计算给定正整数n(0 < n < 10000) 的和式个数,请补充其中空缺。
__int64 calc(int n){int i;int size = ________________;__int64* w = (__int64*)malloc(size);if(!w)abort():__int64 ret = 0;___________;___________;for(i=3; i<=n; i++){if(i%2)w[i] = _________;elsew[i] = _________;}ret = w[n];free(w);return ret;}四、问答题(每题5分,共25分)1.下列代码期望输出结果是1111,请找出fun1….fun4中存在的问题,并简单说明原因:1)int* fun1(int a){2)int ret = a;3)}4)int* fun2(int a){5)int* p = (int*)malloc(sizeof(int));6)*p = a;7)return p;8)}9)int* fun3(int a){10)static int ret;11)ret = a;12)return &ret;13)}14)int* fun4(int a){15)return &a;16)}17)int main()18){19)printf(“%d”, *fun1(2)-*fun1(1));20)printf(“%d”, *fun2(2)-*fun2(1));21)printf(“%d”, *fun3(2)-*fun3(1));22)printf(“%d”, *fun4(2)-*fun4(1));23)return 0;24)}2.怎么查找产生内存泄漏的代码位置,请至少写出三种不同类型的方法:3.C语言中的main函数的返回值有什么作用?如何通过C代码取得该返回值?4.汉诺塔问题:有A、B、C三个台子,每个台子上面可放若干个盘子,要求每个盘子下面的盘子都比自己大。