深信服科技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) < DBL_EPSILON
C. fabs(a-b) <= FLT_EPSILON
D. fabs(a-b) <= DBL_EPSILON
E. fabs(a-b) < FLT_EPSILON
3. 下列哪些是可能引起错误的代码? (  )
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  EAX
B. CMP  EAX  EAX
C. MOV  EAX  0H
D. TEST  EAX  EAX
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 ,原型为:void Base::fool(),  Derived有个成员函数foo2,原型为:void Derived::foo2(). 请问下述哪些代码是可以正常编译通过的?(  )
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足够长): (  )
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. 下列程序的运行结果是:_________
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;
}
输出结果
a:2
b:3
a:2
2
new创建的对象必须要用delete 才销毁请写出至少5个字符串函数 不然不会调用对象析构函数
若改程序:
void fun(int *p)
{
        Foo a(“a”, p);
        Foo *b=new Foo(“b”, p);
    Delete b
   
}
则程序输出为:
a:2
b:3
b:2
a1
1
7. 下列程序的运行结果是______
int main()
{
    int a[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字节对齐,下列代码的执行结果是:______
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) (__________________________________)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。