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 。这个可执行文件中包含了执行该用户程序所需要的所有机器代码,其过程大体如下所示:
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; }
输出结果是什么?