腾讯历年笔试题

1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。

2、两个数相乘,小数点后位数没有限制,请写一个高精度算法。

3、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?

4、有12个小球,外形相同,其中一个小球的质量与其他11个不同,给一个天平,问如何用3次把这个小球找出来,并且求出这个小球是比其他的轻还是重。

5、在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可。

6、一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数。

7、腾讯服务器每秒有2w个QQ号同时上线,找出5min内重新登入的qq号并打印出来。

8、在一篇英文文章中查找指定的人名,人名使用二十六个英文字母(可以是大写或小写)、空格以及两个通配符组成(、?),通配符“”表示零个或多个任意字母,通配符“?”表示一个任意字母。
如:“J* Smi??” 可以匹配“John Smith” .
请用C语言实现如下函数:
void scan(const char* pszText, const char* pszName);
注:pszText为整个文章字符,pszName为要求匹配的英文名。
请完成些函数实现输出所有匹配的英文名,除了printf外,不能用第三方的库函数等。

9、服务器内存1G,有一个2G的文件,里面每行存着一个QQ号(5-10位数),怎么最快找出出现过最多次的QQ号。

10、如何求根号2的值,并且按照我的需要列出指定小数位,比如根号2是1.141 我要列出1位小数就是1.1 2位就是1.14, 1000位就是1.141...... 等。。

11、如果用一个循环数组q[0..m-1]表示队列时,该队列只有一个队列头指针front,不设队列尾指针rear,求这个队列中从队列投到队列尾的元素个数(包含队列头、队列尾)。

12、两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]a[1]a[2]...a[N-1]/a[i];
要求:
1). 不准用除法运算
2). 除了循环计数值,a[N],b[N]外,不准再用其他任何变量(包括局部变量,全局变量等)
3). 满足时间复杂度O(n),空间复杂度O(1)。
说白了,你要我求b=a[0]
a...a[i-1]aa[i+1]..a[N-1]/a ,就是求:a[0]a[1]...a[i-1]a[i+1]..a[N-1]。只是我把a[i]左边部分标示为left[i],b[i]右边部分标示为right[i],而实际上完全不申请left[i],与right[i]变量,之所以那样标示,无非就是为了说明:除掉当前元素a[i],其他所有元素(a[i]左边部分,和a[i]右边部分)的积。读者你明白了么?
下面是此TX笔试题的两段参考代码,如下:
//ncicc
b[0] = 1;
for (int i = 1; i < N; i++)
{
b[0] *= a[i - 1];
b[i] = b[0];
}
b[0] = 1;
for (i = N - 2; i > 0; i--)
{
b[0] *= a[i + 1];
b[i] *= b[0];
}
b[0] *= a[1];

from wasd6081058上面第二段代码最后一行的意义是:我们看第二个循环,从N-2到 1;再看for循环中b[0]的赋值,从N-1到2,而根据题目要求b[i] = a[0]a[1]a[2]...a[N-1]/a[i],b[0]应等于a[1]a[2]* ....a[N-1],所以这里手动添加a[1]。

13、有不同的手机终端,如iphone,安卓,Symbian,不同的终端处理不一样,设计一种服务器和算法实现对不同的终端的处理。

14、设计一种内存管理算法。

15、A向B发邮件,B收到后读取并发送收到,但是中间可能丢失了该邮件,怎么设计一种最节省的方法,来处理丢失问题。

16、设计一种算法求出算法复杂度 。

17、给你5个球,每个球被抽到的可能性为30、50、20、40、10,设计一个随机算法,该算法的输出结果为本次执行的结果。输出A,B,C,D,E即可。

18、五笔的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把五笔的编码按字典序排序,形成一个数组如下:
a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy
其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。
1).编写一个函数,输入是任意一个编码,比如baca,输出这个编码对应的Index;
2).编写一个函数,输入是任意一个Index,比如12345,输出这个Index对应的编码。

19、有N+2个数,N个数出现了偶数次,2个数出现了奇数次(这两个数不相等),问用O(1)的空间复杂度,找出这两个数,不需要知道具体位置,只需要知道这两个值。(@Rojay:xor一次,得到2个奇数次的数之和x。第二步,以x(展开成二进制)中有1的某位(假设第i位为1)作为划分,第二次只xor第i位为1的那些数,得到y。然后x xor y以及y便是那两个数。 )

20、例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。
已有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了,那么n就变为了n-1,那么ServerIPIndex[QQNUM%n]与ServerIPIndex[QQNUM%(n-1)]基本上都不一样了,所以大多数用户的请求都会转到其他服务器,这样会发生大量访问错误。
问: 如何改进或者换一种方法,使得:
1). 一台服务器死掉后,不会造成大面积的访问错误,
2). 原有的访问基本还是停留在同一台服务器上;
3). 尽量考虑负载均衡。

21、A.txt和B.txt两个文件,A.txt有1亿个QQ号 , B.txt 100W个QQ号, 用代码实现交、并、差。

22、50个台阶,一次可一阶或两阶,共有几种走法?

23、一个大小为N的数组,里面是N个整数,怎样去除重复,要求时间复杂度为O(n),空间复杂度为O(1)。
(此题答案请见@作者hawksoft:http://blog.csdn.net/hawksoft/ ... 67493)。

24、比如A认识B,B认识C,但是A不认识C, 那么称C是A的二度好友。找出某个人的所有十度好友. 数据量为10万。

25、 M*M的方格矩阵,其中有一部分为障碍,八个方向均可以走,现假设矩阵上有Q+1节点,从(X0,Y0)出发到其他Q个节点的最短路径。
其中,1<=M<=1000,1<=Q<=100。

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

27、给定一个字符串,求出其最长的重复子串。
思路:使用后缀数组,对一个字符串生成相应的后缀数组后,然后再排序,排完序依次检测相邻的两个字符串的开头公共部分。
这样的时间复杂度为:
生成后缀数组 O(N)
排序 O(NlogNN) 最后面的 N 是因为字符串比较也是 O(N)
依次检测相邻的两个字符串 O(N * N)
总的时间复杂度是 O(N^2
logN),

28、假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,
比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,
所以这两个字符串是匹配的。要求高效!
思路:http://blog.csdn.net/v_JULY_v/ ... 47454。

29、微博广告投放是腾讯收入来源之一。为了保证投放的广告对用户更有帮助,必须分享用户对什么感兴趣。用户的每条微博都可以拆分成几个关键词,腾讯微博每个月都会收集到上T(Terabyte)的关键词,请你分析出其中出现次数最多的十个关键词。

30、腾讯新闻首页改版之后,为了精确掌握改版效果,需要准实时统计访问每篇文章的IP数量,即从文章发表之后,有多少个不同IP的用户读过这篇文章。每个用户访问请求都会被web服务器解析,并实时传输到后台统计系统,请你设计该“后台统计系统”,以完成统计。

31、写一个函数对字符串数组进行排序,排序的规则是根据每个字符串重复出现次数最多的字符出现的次数,在次数相同的亲情况下根据出现次数第二多的字符排序。
比如:”abcaba”中重复出现次数最多的字符是a,次数是3,第二多的字符是b,次数是2,第三是c,次数是1。因此mySort([“abcaba”,”asdfasdf”,”asdfasdfasdf”])的结果是:[“asdfasdfasdf”,”abcaba”,”asdfasdf”]。

32、有一个log文件,里面记录的格式为:
QQ号: 时间: flag:
如123456 14:00:00 0
123457 14:00:01 1
其中flag=0表示登录 flag=1表示退出
问:统计一天平均在线的QQ数。
点评:类似于此文中:http://blog.csdn.net/hackbutee ... 48968,读者可以参看之。

33、有一亿个数,输入一个数,找出与它编辑距离在3以内的书,比如输入6(0110),找出0010等数,数是32位的。

34、每个城市的IP段是固定的,新来一个IP,找出它是哪个城市的,设计一个后台系统。

35、N个数组,每个数组中的元素都是递增的顺序,现在要找出这N个数组中的公共元素部分,如何做? 注:不能用额外辅助空间。

36、http服务器会在用户访问某一个文件的时候,记录下该文件被访问的日志,网 站管理员都会去统计每天每文件被访问的次数。写一个小程序,来遍历整个日志 文件,计算出每个文件被访问的访问次数
1).请问这个管理员设计这个算法
2).该网站管理员后来加入腾讯从事运维工作,在腾讯,单台http服务器不够用的 ,同样的内容,会分布在全国各地上百台服务器上。每台服务器上的日志数量, 都是之前的10倍之多,每天服务器的性能更好,之前他用的是单核cpu,现在用的 是8核的,管理员发现在这种的海量的分布式服务器,基本没法使用了,请重新设计一个算法。

37、腾讯的qq游戏当中,最多人玩的游戏就是斗地主了,每一句游戏开始时,服务 器端都要洗牌,以保证发牌的时每个人拿的牌都是随机的,假设用1-54来表示54 张不同的拍,请你写一个洗牌算法,保证54张牌能随机打散!

38、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户。

39、A,B两个整数集合,设计一个算法求它们的交集,尽可能的高效。

40、一个数组 var arr = ['abc','ddadbc','adbdcd','abcqew'.......] 长度一万, 用最有效率的方法计算出包含被元素出现最多的。

41、有100W个关键字,长度小于等于50字节。用高效的算法找出top10的热词,并对内存的占用不超过1MB。
点评:老题,与caopengcs讨论后,得出具体思路为:
①先把100W个关键字hash映射到小文件,根据题意,100W50B = 5010^6B = 50M,而内存只有1M,故干脆搞一个hash函数 % 50,分解成50个小文件;
②针对对每个小文件依次运用hashmap(key,value)完成每个key的value次数统计,后用堆找出每个小文件中value次数最大的top 10;
③最后依次对每两小文件的top 10归并,得到最终的top 10。
注:很多细节需要注意下,举个例子,如若hash映射后导致分布不均的话,有的小文件可能会超过1M,故为保险起见,你可能会说根据数据范围分解成50~500或更多的小文件,但到底是多少呢?我觉得这不重要,勿纠结答案,虽准备在平时,但关键还是看临场发挥,保持思路清晰关注细节即可。OK,更多类似题目参见此文:http://blog.csdn.net/v_july_v/ ... 82693。

42、求二叉树的任意两个节点的最近公共祖先。
点评:何谓最低公共祖先,如下图所示:节点1和节点7的最低公共祖先便是5
22.jpg

43、给40亿个不重复的unsigned int的数,没排序,然后再给一个数,如何快速间断这个数是否在那40亿个数中?

44、假设两个字符串中所含有的字符和个数都相同我们就叫这两个字符串匹配,
比如:abcda和adabc,由于出现的字符个数都是相同,只是顺序不同,
所以这两个字符串是匹配的。要求高效。

45、一个大小为N的数组,里面是N个整数,怎样去除重复。
RT
要求时间复杂度为O(n),空间复杂度为O(1)。

46、如何对1亿个QQ号进行排序

47、C++编译器有哪些优化?

48、C++比C快在哪里?

49、编写高效服务器程序,需考虑的因素?

50、设计一个抽卡程序,策划人员填写物品出现概率,程序按照概率随机抽出物品。

10
50

51、给定一个驼峰样式的字符串 例如“AaABbBcBbcvQv........”->“bc”
两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。

52、12个工厂分布在一条东西向高速公路的两侧,工厂距离公路最西端的距离分别是0、4、5、10、12、18、27、30、31、38、39、47.在这12个工厂中选取3个原料供应厂,使得剩余工厂到最近的原料供应厂距离之和最短,问应该选哪三个厂 ?

53、待更新。

54、以windows对文件的复制粘帖功能为例,尽可能多地写出测试思路。

55、已知String convert(String page)作用是将WEB页转码为方便移动设备查看的页面,为了确保转码的正确性,请设计相应测试策略。

56、请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。

57、用javascript实现用户登录验证的代码。

58、调用动态连接库的函数有哪几种方法?

59、WM_QUIT消息的用途是什么?一个普通的Windows窗口能收到的最后一条消息是什么?

60、待更新。

61、有1000亿条记录,每条记录由url,ip,时间组成,设计一个系统能够快速查询以下内容
1).给定url和时间段(精确到分钟)统计url的访问次数;
2).给定ip和时间段(精确到分钟)统计ip的访问次数。

62、实现一个简化的搜索提示系统。给定一个包含了用户query的日志文件,对于输入的任意一个字符串s,输出以s为前缀的在日志中出现频率最高的前10条query。
由于是分布式系统,假设至少有26台机器,每个机器存储以26个字母开头的query日志文件(如机器1存的是a字母开头的,机器2存的是以b字母开头的……)
每个机器上维护着一张哈希表,对于每条query, 在哈希表表中存放其地址(哈希地址为链式的),并对其进行排序,按频率由高到低进行排序。
当用户进行搜索时,可以很快定位到某台机器,并根据哈希表,返回出现频率最高的前10条query。
提示:
1).可以预处理日志
2).假设query不超过10亿条,每个query不超过50字节。
3).考虑在大查询量的情况下如何实现分布式服务

63、待更新。

64、Android中Looper的实现原理,为什么调用Looper.prepare()就在当前线程关联了一个Looper对象,它是如何实现的。

65、简述Andriod如何处理UI与耗时操作的通信,有哪些方式及各自的优缺点。

66、用Object-C定义并实现一个基于数组的循环队列类,当队列放满需支持动态的扩展队列长度。

posted @ 2016-03-13 19:20  逍遥客33  阅读(2719)  评论(0编辑  收藏  举报