2011网易校园招聘笔试题

时间:2022-05-12 15:24:09

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;
}

输出结果是什么?