腾讯笔试题

腾讯笔试题:const的含义及实现机制 算法

   

const的含义及实现机制,好比:const int i,是怎么作到i只可读的? 数组

   

const用来讲明所定义的变量是只读的。 服务器

   

这些在编译期间完成编译器可能使用常数直接替换掉对此变量的引用 tcp

   

更多阅读: 函数

   

http://www.92ask.net/Archive/?action=show&id=18 spa

   

初探编译器staticconst之实现原理 .net

   

腾讯笔试题:买200100优惠券,实际上折扣是多少? 日志

   

到商店里买200的商品返还100优惠券(能够在本商店代替现金)。请问实际上折扣是多少? htm

   

因为优惠券能够代替现金,因此可使用200元优惠券买东西,而后还能够得到100元的优惠券。 排序

   

假设开始时花了x元,那么能够买到 x + x/2 + x/4 + ...的东西。因此实际上折扣是50%.(固然,大部分时候很难一直兑换下去,因此50%是折扣的上限)

   

若是使用优惠券买东西不能得到新的优惠券,那么

   

总过花去了200元,能够买到200+100元的商品,因此实际折扣为 200/300 = 67%.

   

腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪一个阶段?

   

accept发生在三次握手以后

   

第一次握手:客户端发送syn(syn=j)到服务器。

   

第二次握手:服务器收到syn包,必须确认客户的SYNack=j+1,同时本身也发送一个ASK包(ask=k

   

第三次握手:客户端收到服务器SYNACK,向服务器发送确认包ACK(ack=k+1)

   

三次握手完成后,客户端和服务器就创建了tcp链接。这时能够调用accept函数得到此链接。

   

腾讯笔试题:用UDP协议通信时怎样得知目标机是否得到了数据包

   

UDP协议通信时怎样得知目标机是否得到了数据包?

   

能够在每一个数据包中插入一个惟一的ID好比timestamp或者递增的int

   

发送方在发送数据时将此ID和发送时间记录在本地。

   

接收方在收到数据后将ID再发给发送方做为回应

   

发送方若是收到回应,则知道接收方已经收到相应的数据包;若是在指定时间内没有收到回应,则数据包可能丢失,须要重复上面的过程从新发送一次,直到肯定对方收到。

   

关于UDP协议的简单介绍,能够参考

   

http://baike.baidu.com/view/30509.htm

   

腾讯笔试题:统计论坛在线人数分布

   

求一个论坛的在线人数,假设有一个论坛,其注册ID有两亿个,每一个ID从登录到退出会向一个日志文件中记下登录时间和退出时间,要求写一个算法统计一天中论坛的用户在线分布,取样粒度为秒。

   

一天总共有 3600*24 = 86400秒。

   

定义一个长度为86400的整数数组int delta[86400],每一个整数对应这一秒的人数变化值,可能为正也可能为负。开始时将数组元素都初始化为0

   

而后依次读入每一个用户的登陆时间和退出时间,将与登陆时间对应的整数值加1,将与退出时间对应的整数值减1

   

这样处理一遍后数组中存储了每秒中的人数变化状况。

   

定义另一个长度为86400的整数数组int online_num[86400],每一个整数对应这一秒的论坛在线人数。

   

假设一天开始时论坛在线人数为0,则第1秒的人数online_num[0] = delta[0]。第n+1秒的人数online_num[n] = online_num[n-1] + delta[n]

   

这样咱们就得到了一天中任意时间的在线人数。

   

腾讯笔试题:从10G个数中找到中数

   

在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G

   

不妨假设10G个整数是64bit的。

   

2G内存能够存放256M64bit整数。

   

咱们能够将64bit的整数空间平均分红256M个取值范围,用2G的内存对每一个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,咱们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。

   

若是中数所在范围出现的整数比较少,咱们就能够对这个范围内的整数进行排序,找到中数。若是这个范围内出现的整数比较多,咱们还能够采用一样的方法将此范围再次分红多个更小的范围(256M=2^28,因此最多须要3次就能够将此范围缩小到1,也就找到了中数)。

   

腾讯笔试题:两个整数集合AB,求其交集

   

两个整数集合AB,求其交集。

   

1. 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1

   

2. 读取整数集合B中的整数,若是该整数在map中而且值为1,则将此数加入到交集当中,并将在map中的对应值改成2

   

经过更改map中的值,避免了将一样的值输出两次。

   

腾讯笔试题:找出110w中没有出现的两个数字

   

110w10w个数,去除2个并打乱次序,如何找出那两个数?

   

申请10wbit的空间,每一个bit表明一个数字是否出现过。

   

开始时将这10wbit都初始化为0,表示全部数字都没有出现过。

   

而后依次读入已经打乱循序的数字,并将对应的bit设为1

   

当处理完全部数字后,根据为0bit得出没有出现的数字。

   

首先计算110w的和,平方和。

   

而后计算给定数字的和,平方和。

   

两次的到的数字相减,能够获得这两个数字的和,平方和。

   

因此咱们有

   

x + y = n

   

x^2 + y^2 = m

   

解方程能够获得xy的值。

   

腾讯笔试题:须要多少只小白鼠才能在24小时内找到毒药

   

1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?

   

最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。

   

既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?

   

首先让咱们换种问法,若是有x只小白鼠,那么24小时内能够从多少瓶水中找出那瓶有毒的?

   

因为每只小白鼠都只有死或者活这两种结果,因此x只小白鼠最大能够表示2^x种结果。若是让每种结果都对应到某瓶水有毒,那么也就能够从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?

   

第一只小白鼠喝第12^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)....以此类推。

   

回到此题,总过1000瓶水,因此须要最少10只小白鼠。

   

腾讯笔试题:根据上排的数填写下排的数,并知足要求。

   

根据上排给出十个数,在其下排填出对应的十个数, 要求下排每一个数都是上排对应位置的数在下排出现的次数。上排的数:0123456789

   

腾讯笔试题:判断数字是否出如今40亿个数中?

   

40亿个不重复的unsigned int的整数,没排过序的,而后再给几个数,如何快速判断这几个数是否在那40亿个数当中?

   

答案:

   

unsigned int 的取值范围是02^32-1。咱们能够申请连续的2^32/8=512M的内存,用每个bit对应一个unsigned int数字。首先将512M内存都初始化为0,而后每处理一个数字就将其对应的bit设置为1。当须要查询时,直接找到对应bit,看其值是0仍是1便可。

相关文章
相关标签/搜索