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

输出结果是什么?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值