2011网易校园招聘笔试题

1、写出输出:char array[] = “abcde”; char* s = array;
cout<<sizeof(array)<<strlen(array)<<sizeof(s)<<strlen(s);

答案:6545

2、什么是用户级线程和内核级线程?区别。

内核线程:线程切换由内核控制,切换的时候,要从用户态进入内核态,切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。
用户级线程:用户态程序自己调度线程切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用smp。目前linux pthread大体是这么做的。

3、从C++文件到生成exe文件经过哪三个步骤?

1)用户点击编译程序时,编译程序将C++源代码转换成目标代码,目标代码通常由 机器指令和记录如何将程序加载到内存的信息组成。其后缀通常为.obj或.o;

2)目标文件中存储的只是用户所编写的代码的转换结果,并不包括底层的操作指令,不能直接运行。例如程序包 iostream 实现了所有有关输入和输出的操作,并且其所有实现操作的机器代码都放在一个库中,库是对已实现的程序经编译后所产生的代码集合,用户可以在程序中直接使用库。

3)一个被称为链接程序的特殊程序将用户程序的目标文件和iostream库中必要代码链接起来生成一个可执行文件,其后缀通常为.exe 。这个可执行文件中包含了执行该用户程序所需要的所有机器代码,其过程大体如下所示:

 2011网易校园招聘笔试题

4、有个二维数组A(6*8),每个元素占6字节,起始地址为1000,请问最后一个元素A[5][7]的起始地址为??? 数组A占内存大小为??? 假设以行优先,则A[1][4]起始地址为???

答:A[5][7]起始地址:1000+(6*8-1)*6=1282

数组A占用内存:6*8*6=288字节

A[1][4]起始地址:(1*8+4)*6+1000=1072

5、用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。

Struct Node

{

    Node *prev;

    Node *next;

}

Void exchange(Node *node1,Node *node2)

{

}
void exchange(LinkedList p) {

    //交换p结点与其前驱结点的位置。

    q=p->llink; //q是p的前驱结点;

    q->llink->rlink=p;

    p->llink=q->llink;

    q->rlink=p->rlink;

    q->llink=p;

    p->rlink->llink=q;

    p->rlink=q;

}

 

6、*.dll,*.lib,*.exe文件分别是什么,有什么区别?

见:http://www.cnblogs.com/no7dw/archive/2010/11/23/1885890.html

用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。
7、如右图所示,一个n*m的矩阵M中,标记0为白色区域,标记1为黑色区域,白色区域代表可以行走的区域,黑色区域代表阻挡,可以看到,如果在这个矩阵中只向上,下,左,右移动,那么有某些白色区域是不能到达的,我们称为这样的矩阵不是全相通的。
(1) 如何验证一个矩阵是不是全相通?请给出算法思路。
(2) 计算出你的算法的空间复杂度和时间复杂度
(3) 用C/C++编写出代码,并在适当地方加上注释。

 

附加题(20):使用八叉树算法把24位真彩色转化成256色。24位真彩色包括R,G,B颜色,每种颜色8位。

有11盆花,围成一圈,要求每次组合时,每盆花相邻的两盆花与上次不同,请问有多少排列方法?

貌似是组合数学问题。。复习一下组合数学吧。。男士和女士跳舞的变形。。

集合问题,一个村有70人,进行PVP比赛,共有4个职业:骑士,牧师,法师,刺客。
已知有34人报名骑士,
24人报名牧师,
13人报名法师,
32人报名刺客,
12人既报名骑士又报名牧师,
13人既报名牧师又报名法师,
……
3人报名骑士,牧师和法师,
……
请问有多少人没有报名?以上数字为捏造。

 

Void foo(int source* src,int *dest, int N)

{

    Int count[256],index[256],i;

    For(I = 0;i<256;i++) count[i] = 0;

    For(I = 0;i<N;i++) count[source[i]] = count[source[i]]+1;

    Index[0] = 0;

    For(I = 1;i<256;i++) index[i] = index[ i-1] + count[i-1];

    For(I = 0;i<N;i++)

    {

        Dest[index[source[i]]] = source[i];

        Index[source[i]] = index[source[i]]+1;

    }

}

Int main()

{

    Int src[] = {3,5,3,6,10,8};

    Int dest[] = {0,0,0,0,0,0}

    Int N = 6;

    Foo(source,dest,N);

}

输出结果是什么?

 

改错题:

Char values[] = “NetEase”;

Int main()

{

    Char *buf;

    Int d = -1;

    Unsigned int ss = sizeof(values)/sizeof(value[0]);

    If(d<=ss)

    {

        Scanf(“%s %d”,buf,d);

        Printf(“%s,%s(%d)\n”,values,buf,d);

        If(d = 666)

            Printf(“you are lucky!”);

    }

    Return 0;

}

 

 

2只宠物合成,1只有5技能,1只有4技能,每个技能有a%概率遗传,请问刚好有7个技能遗传成功的概率是?

 

Public class A

{

    A(){cout<<”1”;}

    A(A &a){cout <<”2”;}

    ~A() {cout<<”3”;}

}

Public class B

{

    B(){cout <<”4”;}

    B(B &b){cout<<”5”;}

    ~B(){cout<<”6”;}

}

Int main()

{

    A* pa = B(A());

    Delete pa;

    Return 0;

}

输出结果是什么?

 

你可能感兴趣的:(笔试题)