腾讯是国内数一数二的it企业了。那么每年想要进入腾讯公司的应聘者也是络绎不绝。那么一个好的笔试答卷绝对是脱颖而出的亮点。现在就来看看腾讯笔试题都有哪些内容吧。
腾讯笔试题:const的含义及实现机制。
const的含义及实现机制,比如:const int i,是怎么做到i只可读的?
const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
更多阅读:初探编译器static、const之实现原理。
腾讯笔试题:买200返100优惠券,实际上折扣是多少?
到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?
由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。
假设开始时花了x元,那么可以买到 x + x/2 + x/4 + 的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是折扣的上限)
如果使用优惠券买东西不能获得新的优惠券,那么。
总过花去了200元,可以买到200+100元的商品,所以实际折扣为 200/300 = 67%.
腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?
accept发生在三次握手之后。
第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的syn(ack=j+1),同时自己也发送一个ask包(ask=k)。
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
腾讯笔试题:用udp协议通讯时怎样得知目标机是否获得了数据包。
用udp协议通讯时怎样得知目标机是否获得了数据包?
可以在每个数据包中插入一个唯一的id,比如timestamp或者递增的int。
发送方在发送数据时将此id和发送时间记录在本地。
接收方在收到数据后将id再发给发送方作为回应。
发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。
关于udp协议的简单介绍,可以参考。
腾讯笔试题:统计论坛**人数分布。
求一个论坛的**人数,假设有一个论坛,其注册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内存可以存放256m个64bit整数。
我们可以将64bit的整数空间平均分成256m个取值范围,用2g的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10g整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256m=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。
两个整数集合a和b,求其交集。
1. 读取整数集合a中的整数,将读到的整数插入到map中,并将对应的值设为1。
2. 读取整数集合b中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。
通过更改map中的值,避免了将同样的值输出两次。
腾讯笔试题:找出1到10w中没有出现的两个数字。
有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数?
申请10w个bit的空间,每个bit代表一个数字是否出现过。
开始时将这10w个bit都初始化为0,表示所有数字都没有出现过。
然后依次读入已经打乱循序的数字,并将对应的bit设为1。
当处理完所有数字后,根据为0的bit得出没有出现的数字。
首先计算1到10w的和,平方和。
然后计算给定数字的和,平方和。
两次的到的数字相减,可以得到这两个数字的和,平方和。
所以我们有。
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
腾讯笔试题:需要多少只小白鼠才能在24小时内找到毒药。
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
最容易想到的就是用1000只小白鼠,每只喝一瓶。但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?
首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的那瓶水。那如何来实现这种对应关系呢?
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) +2^(x-2)瓶。以此类推。
回到此题,总过1000瓶水,所以需要最少10只小白鼠。
腾讯笔试题:根据上排的数填写下排的数,并满足要求。
根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。
腾讯笔试题:判断数字是否出现在40亿个数中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
答案:unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512m的内存,用每一个bit对应一个unsigned int数字。
首先将512m内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。
假设待判断的数字是 n。
方法1:遍历从1到n的数字,求取平方并和n进行比较。
如果平方小于n,则继续遍历;如果等于n,则成功退出;如果大于n,则失败退出。
复杂度为o(n^0.5)。
方法2:使用二分查找法,对1到n之间的数字进行判断。
复杂度为o(log n)。
方法3:由于。
n+1)^2
n^2 + 2n + 1, .
1 + 2*1 + 1) +2*2 + 12*n + 1)
注意到这些项构成了等差数列(每项之间相差2)。
所以我们可以比较 n-1, n - 1 - 3, n - 1 - 3 - 5 ..和0的关系。
如果大于0,则继续减;如果等于0,则成功退出;如果小于 0,则失败退出。
复杂度为o(n^0.5)。不过方法3中利用加减法替换掉了方法1中的乘法,所以速度会更快些。
谷歌笔试题:如何随机选取1000个关键字。
给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?
定义长度为1000的数组。
对于数据流中的前1000个关键字,显然都要放到数组中。
对于数据流中的的第n(n>1000)个关键字,我们知道这个关键字被随机选中的概率为 1000/n。所以我们以 1000/n 的概率用这个关键字去替换数组中的随机一个。这样就可以保证所有关键字都以 1000/n的概率被选中。
对于后面的关键字都进行这样的处理,这样我们就可以保证数组中总是保存着1000个随机关键字。
谷歌笔试题:将下列表达式按照复杂度排序。
将下列表达式按照复杂度排序。
2^nn^googol (其中 googol = 10^100)n!n^n
按照复杂度从低到高为。
n^googol2^nn!
n^n谷歌笔试题:在半径为1的圆中随机选取一点。
假设圆心所在位置为坐标元点(0, 0)。
方法1.在x轴[-1, 1],y轴[-1, 1]的正方形内随机选取一点。然后判断此点是否在圆内(通过计算此点到圆心的距离)。
如果在圆内,则此点即为所求;如果不在,则重新选取直到找到为止。
正方形的面积为4,圆的面积为pi,所以正方形内的随机点在圆内的概率是 pi / 4。
方法2.从[0, 2*pi)中随机选一个角度,对应于圆中的一条半径,然后在此半径上选一个点。但半径上的点不能均匀选取,选取的概率应该和距圆心的长度成正比,这样才能保证随机点在圆内是均匀分布的。
谷歌笔试题:给定一个未知长度的整数流,如何随机选取一个数。
方法1.将整个整数流保存到一个数组中,然后再随机选取。
如果整数流很长,无法保存下来,则此方法不能使用。
方法2.如果整数流在第一个数后结束,则我们必定会选第一个数作为随机数。
如果整数流在第二个数后结束,我们选第二个数的概率为1/2。我们以1/2的概率用第2个数替换前面选的随机数,得到满足条件的新随机数。
腾讯笔试题目
1.1 20的两个数把和告诉a,积告诉b,a说不知道是多少,b也说不知道,这时a说我知道了,b接着说我也知道了,问这两个数是多少?答案 2和3 2 爸爸,妈妈,妹妹,小强,至少两个人同一生肖的概率是多少?3,计算 a b 2 答案 运算符优先级 括号,下标,和。成员 最高 单目的比双目的高 算术双目...
2019腾讯笔试题目
简答题 1 请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户。2 a b两个整数集合,设计一个算法求他们的交集,尽可能的高效。博主能力有限,不是所有题目都会求解,第1题不是我的擅长,这里贴出来...
腾讯笔试题目汇总
一 网上收集资料 1 有a卷b卷,各六十分,a卷基本是软件测试的知识和一点点计算机网络一点点智力题。tcp的三次握手 b卷基本是c 和数据结构,其实并不难,但是出来才发现有不少地方没有考虑周全,2 笔试时间为2个小时,开发和测试的题目是一样的。考查的知识点主要是c 数据结构和算法,题型包括选择题 填...