腾讯2015暑期实习电话面试总结

本文分享了一次算法面试的经历,涉及在线玩家数量统计、大规模整数处理、交集查找、TCP与UDP区别等算法问题,以及对数据库操作和编程语言的理解。面试官还询问了开源项目经验和写技术博客的习惯。

过去有好长时间了,还是4月份的事情,现在才来总结。看还能记得多少吧。
前后一个小时,全是算法题。
上来HR让简单自我介绍下,包括现在的项目。
算法部分:

  1. 有一个游戏,每一次玩家退出的时候,系统会记录一份日志,包括玩家本次登陆时间、退出时间。请设计一种算法,给出每个时间点当前在线玩家数量。
    这题当时不知道怎么回答,函数入参是时间点,输出是在线玩家数量。这么答的:可以通过一次读取所有日志文件,判断时间点是否在对应登陆、退出时间之间,是则在线玩家数加1,遍历完成得到在线玩家数,但是时间复杂度为O(n),不知道是否符合要求。也可以用数据库,每次玩家退出,在数据库中记录玩家的登陆,退出时间,那么可以通过数据库操作,选出符合条件的记录,统计数量,得到对应时间点的在线玩家数。
    HR没有再问,应该没有得到他想要的答案。

  2. 有100亿个整数,设计算法求出最大的1万个数。
    (假设是无符号整型) 这题与编程珠玑中的位文件的使用类似。100亿~10*2^30,一个整数一般为4byte,因此100亿个整数占用超过40G,故必然是以文件的形式存在。
    定义一个数组A,将其初始化为全0;
    遍历这100亿个整数,每次读取一个整数,将A中对应bit置1;
    从A的高位开始遍历,判断对应位是否为1,是则取对应位的下标,直至出现1万次1,得到1万个下标,这1万个下标就是所求。
    整数一般32bit,共有2^32个,因此A的大小为2^32/8 = 512Mbyte,因此数组A用文件替代更合适。

  3. 有两个整型数的集合A和B,设计算法求A和B的交集。
    这题思路类似第二题。
    初始化新的数组C为全0;
    遍历A中所有整数,将出现的整数作为C的下标,将对应下标的值加1;
    同理遍历B中所有整数,将出现的整数作为C的下标,将对应下标的值加1;
    遍历C,找到值为2的下标,即为A和B的交集。
    面试官问是用字节还是用位来记录的?这里就该醒悟过来是不是用字节来记录。
    正确的方法应该是:
    初始化一个新的数组C为全0;
    遍历A中所有整数,找到这个整数对应在C中的位,将对应位置1;
    遍历B中所有整数,找到这个整数对应在C中的位,若该位是1,则该整数属于A和B的交集。

  4. TCP和UDP的区别是什么?
    连接的,可靠性。

  5. TCP是如何保证数据的正确性的?
    seq field,ACK field

  6. 有没有开源项目经验?
    没有。

  7. 有没有写技术博客的习惯?
    我看得多,写得少。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值