腾讯实习生笔试题 软件开发-后台开发方向2014.4.20

原址:http://blog.csdn.net/xhu_eternalcc/article/details/24191233

高亮部分是自己的,搜到去年的题,练习一下


今天的实习生笔试题有选择题,填空题,附加题,选择题是多选、少选、不选均不得分,里面有图的遍历、树的遍历、线索二叉树、C语言宏、C++程序内存分配、数据库索引、Linux命令、Linux系统调用,题目记不清楚了,下面是回忆的填空题。

填空题


1.写出mysql返回第10-20条记录的查询语句

select * from test limit 9,11

mysql的记录索引从0开始,所以limit 后面是9(唉,我写成10了,本科写分页的时候经常用到,居然给写错了),10-20有11条记录。


2.信号量初始值为9,经过15次p操作,14次v操作后,信号量的值为: 8   = 9-15+14


3.有4个物理页面,统计下面页面访问次序的缺页次数,4321435432154 ,开始内存中没有页面:9次


4.给出了图的邻接表,写广度优先遍历结果,这个记不到图了。


5.一个魔方是20×20×20的小立方体组成,去掉最外层的小立方体,还剩多少个小立方体:

18×18×18=5832

或者用减法验证一下:20×20×20-8×2(8个角块多算了2遍) - 18×12×1(18×12(12条棱)棱块多算了一遍) =5832


6.A、B两个人玩抛硬币游戏,直到出现一次正面向上位置,当第n次出现的是正面的话,B需要给A 2^(n-1)美元,比如第一次就是正面向上那么B就得给A 1美元,如果第一次反面向上,那么继续抛,如果第二次是正面向上那么B就得给A 2美元,依次....,问A提前给B多少钱,才能使最后AB不输不赢?

前n-1次出现反面,第n次出现正面的概率是:p(1-q)(n-1) = 0.5^(n)  所以:

我的做法:B给A的钱数=1/2×1+...+ 0.5^(n)  *   2^(n-1)=0.5N,现在只要求得抛硬币次数的期望E

E=1 * 1/2 + 2 * (1/2)^2+...+ n* (1/2)^n

1/2*E=         1 * (1/2)^2+...+ (n-1)* (1/2)^n +n* (1/2)^(n+1)

上减下 ===>>     1/2*E=1/2 +(1/2)^2+...+ (1/2)^n -n* (1/2)^(n+1)=1

所以E=2,B给A的钱数2美元,所以A得提前给B 2美元


7.左轮手枪问题,一把左轮手枪,轮上有6个子弹位,现在其中两个连续的位置放2颗子弹,作者先朝他自己的头开了一枪,他没没挂,现在在你不想死的前提下要你选择:

1)转动一下轮子,再朝自己头开一枪;

2)直接朝自己头开一枪;

答案选2),如下图,子弹位于0,1


1)转动一下轮子,再朝自己头开一枪;

若转动一下指的是随机转到一个位置,则与之前的一枪无关,不死的概率是 4/6

2)直接朝自己头开一枪;

B表示第一次开枪没死,A表示第二次接着直接朝自己头开一枪死了

AB同时发生的情况只能是B是5,所以P(AB)= 1/6

条件概率 P(A|B)= P(AB)/P(B)= (1/6)/(4/6) = 1/4

所以不死的概率1-P(A|B)= 3/4


附加题

1.图示mapreduce

Map操作通过把输入数据进行分区(partition)(比如分为M块),就可以分布到不同的机器上执行了。输入块的拆成多块,可以并行在不同机器上执行。Reduce操作是通过对中间产生的key的分布来进行分布的,中间产生的key可以根据某种分区函数进行分布(比如hash(key)mod R),分布成为R块。分区(R)的数量和分区函数都是由用户指定的。


图1是我们实现的MapReduce操作的整体数据流。当用户程序调用MapReduce函数,就会引起如下的操作(图一中的数字标示和下表的数字标示相同)。

 

1. 用户程序中的MapReduce函数库首先把输入文件分成M块,每块大概16M到64M(可以通过参数决定)。接着在cluster的机器上执行处理程序。

2. 这些分排的执行程序中有一个程序比较特别,它是主控程序master。剩下的执行程序都是作为master分排工作的worker。总共有M个map任务和R个reduce任务需要分排。master选择空闲的worker并且分配这些map任务或者reduce任务

3. 一个分配了map任务的worker读取并处理相关的输入小块。他处理输入的数据,并且将分析出的key/value对传递给用户定义的map函数。map函数产生的中间结果key/value对暂时缓冲到内存。

4. 这些缓冲到内存的中间结果将被定时刷写到本地硬盘,这些数据通过分区函数分成R个区。这些中间结果在本地硬盘的位置信息将被发送回master,然后这个master负责把这些位置信息传送给reduce的worker。

5. 当master通知reduce的worker关于中间key/value对的位置时,他调用remote procedure来从map worker的本地硬盘上读取缓冲的中间数据。当reduce的worker读到了所有的中间数据,他就使用中间key进行排序,这样可以使得相同key的值都在一起。因为有许多不同key的map都对应相同的reduce任务,所以,排序是必须的。如果中间结果集太大了,那么就需要使用外排序。

6. reduce worker根据每一个唯一中间key来遍历所有的排序后的中间数据,并且把key和相关的中间结果值集合传递给用户定义的reduce函数。reduce函数的对于本reduce区块的输出到一个最终的输出文件。

7. 当所有的map任务和reduce任务都已经完成了的时候,master激活用户程序。在这时候MapReduce返回用户程序的调用点。

 

当这些成功结束以后,mapreduce的执行数据存放在总计R个输出文件中(每个都是由reduce任务产生的,这些文件名是用户指定的)。通常,用户不需要合并这R个输出文件到一个文件,他们通常把这些文件作为输入传递到另一个MapReduce调用,或者用另一个分布式应用来处理这些文件,并且这些分布式应用把这些文件看成为输入文件由于分区(partition)成为的多个块文件。


 


2.数据库表设计

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值