完美世界研发工程师笔试题-2016年

一、单项选择题

1、以下哪个协议属于传输层协议()

 A、FTP

 B、UDP

 C、IP

 D、HTTP

2、以下哪个算法不是对称加密算法()

 A、DES

 B、RC5

 C、AES

 D、RSA

3、在多线程系统中,线程在它的生命周期中会处于不同的状态,其中不是线程状态的是:()

 A、Ready

 B、Busied

 C、Blocked

 D、Running

4、设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为()

 A、front=front+1

 B、front=(front+1)%(m-1)

 C、front=(front-1)%m

 D、front=(front+1)%m

5、下列关于管道(Pipe)通信的叙述中,正确的是()

 A、一个管道可以实现双向数据传输

 B、管道的容量仅受磁盘容量大小限制

 C、进程对管道进行读操作和写操作都可能被阻塞

 D、一个管道只能有一个读进程或一个写进程对其操作

6、已知数组元素基本有序的情况下,下面采用那个算法对数组排序时间复杂度最低()

 A、直接选择排序

 B、堆排序

 C、快速排序

 D、插入排序

7、下面关于B和B+树的描述中,不正确的是()

 A、B树和B+树都是平衡的多叉树

 B、B树和B+树都可用于文件的索引结构

 C、B树和B+树都能有效的支持顺序检索

 D、B树和B+树都能有效的支持随机检索

8、关于依赖注入,下列选项中说法错误的是()

 A、依赖注入能够独立开发各组件,然后根据组件间关系进行组装

 B、依赖注入使组件之间相互依赖,相互制约

 C、依赖注入提供使用接口编程

 D、依赖注入指对象在使用时动态注入

9、下列哪个地址不可能是子网掩码()

 A、255.224.0.0

 B、255.255.240.0

 C、255.255.255.248

 D、255.255.255.250

10、若一颗二叉树具有10个度为2的节点,5个度为1的节点,度为0的节点个数为()

 A、9

 B、11

 C、15

 D、不确定

11、在Java中,以下关于方法重载和方法重写描述正确的是()

 A、方法重载和方法的重写实现的功能相同

 B、方法重载出现在父子关系中,方法重写是在同一类中

 C、方法重载的返回值类型必须一致,参数项必须不同

 D、方法重写的返回值类型必须相同或相容。

12、下面有关JVM内存,说法错误的是()

 A、程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的

 B、Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的

 C、方法区用于存储JVM加载的类信息、常量、静态变量、即使编译器编译后的代码等数据,是线程隔离的

 D、原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的

13、C++中,下面四个表达式中错误的一项是()

 A、a+=(a++)

 B、a+=(++a)

 C、(a++)+=a

 D、(++a)+=(a++)

14、多线程中栈与堆是公有的还是私有的()

 A、栈公有,堆私有

 B、栈公有,堆公有

 C、栈私有,堆公有

 D、栈私有,堆私有

15、有如下4条语句:

Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);

以下输出结果为false的是()

 A、System.out.println(i01==i02);

 B、System.out.println(i01==i03);

 C、System.out.println(i03==i04);

 D、System.out.println(i02==i04);

16、设有5000个待排序的记录的关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列哪个方法可以达到此目的()

 A、快速排序

 B、堆排序

 C、归并排序

 D、插入排序

17、三个程序a,b,c,它们使用同一个设备进行I/O操作,并按a,b,c的优先级执行(a优先级最高,c最低).这三个程序的计算和I/O时间如下图所示。假设调度的时间可忽略。则在单道程序环境和多道程序环境下(假设内存中可同时装入这三个程序,系统采用不可抢占的调度策略).运行总时间分别为() 

计算 I/O 计算

a   30   40  10
b   60   30  10
c   20   40  20

 A、260,180

 B、240,180

 C、260,190

 D、240,190

18、6支笔,其笔身和笔帽颜色相同:但6支笔颜色各不相同,求全部笔身都戴错笔帽的可能性有多少种()

 A、265

 B、266

 C、267

 D、268

 E、19

19、已知有序序列b c d e f g q r s t,则在二分查找关键字b的过程中,先后进行比较的关键字依次是多少?()

 A、f d b

 B、f c b

 C、g c b

 D、g d b

20、如果待排序的数组已经近似递增排序,则此时快排算法的时间复杂度为()

 A、O(n)

 B、O(n^2)

 C、O(nlogn)

 D、O((n^2)*logn)

21、1000以内与105互质的偶数有多少个?

 A、227

 B、228

 C、229

 D、230

 E、22

22、函数x的定义如下,问x(x(8))需要调用几次函数x(int n)()

int x(int n){
    cnt++;
    if (n<=3)
    {
        return 1;
    }
    else
    {
        return x(n-2)+x(n-4)+1;
    }
}

 A、16

 B、18

 C、20

 D、22

 E、23

23、2015!后面有几个0()

 A、500

 B、501

 C、502

 D、503

二、编程题

24、输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"

25、编写一个程序,将小于n的所有质数找出来。

26 、在一次活动中,我们需要按可控的比例来随机发放我们的奖品,,假设需要随机的物品id和概率都在给定的Map<String,Double>prizeMap中,请实现如下这个函数: String getRandomPrize(Map<String,Double>prizeMap){}使得返回的结果为参与者 即将得到的一个随机物品id。

prizeMap中的数据为:
物品id     投放概率
    1             0.5
    2             0.3
    3             0.1
    4             0.95
    5             0.05      


参考答案

1、B    2、D    3、B    4、D    5、C    6、D    7、C    8、B    9、D    10、B    11、D    

12、C    13、C    14、C    15、C    16、B    17、A    18、A    19、B    20、B     21、C    22、B    23、C    

24、参考代码:

// 利用stl快速得到枚举排列
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
 
int main() {
    string s;
    while (cin >> s) {
        sort(s.begin(), s.end());
        do {
            cout << s << ' ';
        } while (next_permutation(s.begin(), s.end()));
        cout << endl;
    }
    return 0;
}

25、参考代码:

#include <iostream>
#include <cmath>
#include <vector>
 
using namespace std;
 
bool isprime(int x)
{
    if (x <= 1) return false;
    else if (x == 2) return true;
 
    for (int i = 2; i <= sqrt(x); ++i)
    {
        if (x % i == 0) return false;
    }
 
    return true;
}
 
vector<int> getAllPrimes(int n)
{
    vector<int> res;
    if (n < 2) return res;
 
    for (int i = 2; i < n; ++i)
    {
        if (isprime(i))
            res.push_back(i);
    }
 
    return res;
}
int main(void)
{
    int n;
    cin >> n;
    vector<int> prms = getAllPrimes(n);
     
    for (auto p : prms)
        cout << p << " ";
    cout << endl;
 
    return 0;
}

26、参考代码:

#include <iostream>
#include <map>
#include <string>
#include <ctime>
 
using namespace std;
 
string getRandomPrize(map<string, double> hm)
{
    double all = 0.0;
 
    map<double, string> mp;
    map<string, double>::iterator it = hm.begin();
    while (it != hm.end())
    {
        all += (*it).second;
        mp.insert(pair<double, string>(all, (*it).first));
        ++it;
    }
 
    srand((unsigned)time(NULL));
    double total = rand() / double(RAND_MAX) * all;
 
    map<double, string>::iterator mpit = mp.begin();
    while (mpit != mp.end())
    {
        if (total < (*mpit).first)
            return (*mpit).second;
        ++mpit;
    }
 
    return "";
}
 
int main(void)
{
    map<string, double> hm;
    hm.insert(pair<string, double>("1", 0.5));
    hm.insert(pair<string, double>("2", 0.3));
    hm.insert(pair<string, double>("3", 0.1));
    hm.insert(pair<string, double>("4", 0.95));
    hm.insert(pair<string, double>("5", 0.05));
 
    while (1)
        cout << getRandomPrize(hm);
 
    return 0;
}
个人资料
Bingo
等级:9
文章:694篇
访问:38.9w
排名: 1
上一篇: 完美世界实习生笔试题-2016年
下一篇:完美世界校园招聘笔试题-2013年
猜你感兴趣的圈子:
完美世界笔试面试圈
标签: hm、double、front、mpit、include、面试题
隐藏