1、腾讯笔试题:const的含义及实现机制
const的含义及实现机制,比如:const int i,是怎么做到i只可读的?
答:const用来说明所定义的变量是只读的。
这些在编译期间完成,编译器可能使用常数直接替换掉对此变量的引用。
2、腾讯笔试题:买200返100优惠券,实际上折扣是多少?
到商店里买200的商品返还100优惠券(可以在本商店代替现金)。请问实际上折扣是多少?
答:由于优惠券可以代替现金,所以可以使用200元优惠券买东西,然后还可以获得100元的优惠券。
假设开始时花了x元,那么可以买到 x + x/2 + x/4 + ...的东西。所以实际上折扣是50%.(当然,大部分时候很难一直兑换下去,所以50%是折扣的上限)
如果使用优惠券买东西不能获得新的优惠券,那么
总过花去了200元,可以买到200+100元的商品,所以实际折扣为 200/300 = 67%.
腾讯笔试题:tcp三次握手的过程,accept发生在三次握手哪个阶段?
3、accept发生在三次握手之后。
答:第一次握手:客户端发送syn包(syn=j)到服务器。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k)。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)。
三次握手完成后,客户端和服务器就建立了tcp连接。这时可以调用accept函数获得此连接。
4、腾讯笔试题:用UDP协议通讯时怎样得知目标机是否获得了数据包
用UDP协议通讯时怎样得知目标机是否获得了数据包?
答:可以在每个数据包中插入一个唯一的ID,比如timestamp或者递增的int。
发送方在发送数据时将此ID和发送时间记录在本地。
接收方在收到数据后将ID再发给发送方作为回应
发送方如果收到回应,则知道接收方已经收到相应的数据包;如果在指定时间内没有收到回应,则数据包可能丢失,需要重复上面的过程重新发送一次,直到确定对方收到。
5、腾讯笔试题:统计论坛在线人数分布
求一个论坛的在线人数,假设有一个论坛,其注册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]。
这样我们就获得了一天中任意时间的在线人数。
6、腾讯笔试题:从10G个数中到中数
在一个文件中有 10G 个整数,乱序排列,要求出中位数。内存限制为 2G。
答:不妨假设10G个整数是64bit的。
2G内存可以存放256M个64bit整数。
我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就到了中数)。
7、腾讯笔试题:两个整数集合A和B,求其交集
两个整数集合A和B,求其交集。
答:(1) 读取整数集合A中的整数,将读到的整数插入到map中,并将对应的值设为1。
(2)读取整数集合B中的整数,如果该整数在map中并且值为1,则将此数加入到交集当中,并将在map中的对应值改为2。
通过更改map中的值,避免了将同样的值输出两次。
8、腾讯笔试题:出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的值。
9、腾讯笔试题:需要多少只小白鼠才能在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只小白鼠。
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即可。
腾讯笔试题大放送
1 计算 a^b << 2 (运算符优先级问题)
2 根据先序中序求后序
3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4) 4 for(int i..)
for(int j..)
printf(i,j);
printf(j)
会出现什么问题
5 for(i=0;i<10;++i,sum+=i);的运行结果
6 10个数顺序插入查二叉树,元素62的比较次数
7 10个数放入模10hash链表,最大长度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9 希尔 冒泡 快速 插入 哪个平均速度最快
10 二分查是 顺序存储 链存储 按value有序中的哪些
11 顺序查的平均时间
12 *p=NULL *p=new char[100] sizeof(p)各为多少
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组
14 enum的声明方式
其他1个选择暂时想不起来了
大题: 1 把字符串转换为小写,不成功返回NULL,成功返回新串
char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( -1_)
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_2_];
if(*sDest == NULL)
return NULL;
sDest[sLen] = '\0';
while(3_)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2 把字符串转换为整数 例如:"-123" -> -123
main()
{
...
if( *string == '-' )
n = _1__;
else
n = num(string);
..
}
int num(char* string)
{
for(;!(*string==0);string++)
{
int k;
k = _2_;
j = --sLen;
while(_3__)
k = k * 10;
num =
num + k;
}
return num;
}
1.请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。
int const shift = sizeof(int)*8-1;
unsigned mask = (0x1<<shift);
if ( (a-b)&mask )
max_num = b;
else
max_num = a;
#define Max(a,b) ( a/b)?a:b
2.如何输出源文件的标题和目前执行行的行数
int line= __LINE__;
char *file = __FILE__;
cout<<"file name is "<<(file)<<",line is "<<line<<endl;
3.两个数相乘,小数点后位数没有限制,请写一个高精度算法
与大数相乘原理一样,只是调整小数点位置,即有效小数个数
算法提示:
输入 string a, string b;计算string c=a*b; 返回 c;
1, 纪录小数点在a,b中的位置l1,l2,则需要小数点后移动位置数为l=length(a)+length(b)-l1-l2-2;
2, 去掉a,b中的小数点,(a,b小数点后移,使a,b变为整数)
3, 计算c=a*b; (要么用java的BigInterger搞, 要么自己用C++写高精度数乘法,超过百万位,用FFT,我就不细说,这都预先写过就别做了)
4, 输出c,(注意在输出倒数第l个数时,输出一个小数点。若是输出的数少于l个,就补0)
4.写一个病毒
while (1)
{
int *p = new int[10000000];
}
上面这个不对,没有传染性,寄生性……
5.不使用额外空间,将 A,B两链表的元素交叉归并将树序列化转存在数组或 链表中
struct st{
int i;
short s;
char c;
};
sizeof(struct st);
8
char * p1;
void * p2;
int p3;
char p4[10];
p4) =?
4,4,4,10
5.让你在100000000个浮点数中出最大的10000个,要求时间复杂度优。
最小堆
二分查
快速排序
双向链表的删除结点
有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟
,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内
这四个人都过桥?
基础题有15道选择和2道读程序填空。选择题的确是很基础,主要考数据结构,还有一些体系结构、数据库的题目;读程序题跟我们平时考试的差不多,一道是两个升序链合并成一个升序链+递归,一道是四着方案
附加题有几道没有看清楚。有一道是unix防僵死算法,最后一道是sql查询,还有几道忘了,其中一个是很长的程序题。。
发信人: charly (查理一世), 板面: Work
标 题: 腾讯笔试题
发信站: 飘渺水云间 (Sat Nov 11 10:55:33 2006), 转信
15个选择题,60分
一个程序填空,40分
三道附加题60分
附加题考的是
不用第三个变量实现两个整形变量的交换
linux的子进程
操作
系统资源抢占管理,两个进程要对文件
进行独占访问,采用共享变量,判断可行否
书写strcpy()
时间两个小时,选择题 15*4
然后是程序填空题 10 (2*5), 30 (10*3)
附加题用c++ 实现一个链地址hash。
程序填空题我就不说了,比较easy的说,值得一提的是选择题。
绝大部分考的是C++,我大致说下主要部分吧:
涉及程序执行压栈的:1道
涉及容器和迭代器的:4道
涉及虚拟函数以及dynamic_cast的 3道
涉及参数传递的 1道
简单的程序段落判断 2道
涉及类的静态成员赋值的 1道
剩下的是杂七杂八的。
不管怎么说,假如你把c++ primer 仔细阅读了一遍,基本上没问题。
考的有些细,没有涉及算法和编译等知识,所以我同屋一个兄弟很郁
闷,因为他linux底层比较好,本来报的是后台开发,哪知道结果考这
种类型的题目。
程序填空的考了文件操作,以及数组移动等。
附加题比较简单的说,只要把数据结构的hash部分好好看,然后用class
组装一下就ok了。
最后祝大家好运,今年腾讯计划50%的是校园招聘,感觉很不多
腾讯的流程是一笔和四面。前三次面试都是技术面,hr面基本不刷人。笔试成绩决定面试顺序。技术面可能要写代码,做智力题目。
主要是c/c++、数据结构、操作系统等方面的基础知识。好像有sizeof、树等选择题。填空题是补充完整程序。附加题有写算法的、编程的、数据库sql语句查询的。还有一张开放性问题。
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
2005年腾讯招聘
选择题(60)
c/c++ os linux 方面的基础知识 c的Sizeof函数有好几个!
程序填空(40)
1.(20) 4空x5
不使用额外空间,将 A,B两链表的元素交叉归并
2.(20) 4空x5
MFC 将树序列化 转存在数组或 链表中!
////////////////////////////////////////////////////
基本都是基础题目,看来腾讯不准备放弃那些有思想但是
还没有开始苦练基本功的人,只涉及到语言问题和简单的
数据结构,其他的操作系统,编译原理,离散数学,软件
工程,计算机原理,体系结构等等无一涉及,题目很多,
有1个选择题想不来起来是什么了,题号不与原试题相符
希望师弟师妹可以探讨探讨答案,从中学到笔试的经验
声明:以下问题仅
供本校园网校内师弟师妹为了考察自己学习的参考,不要传播
1 计算 a^b << 2 (运算符优先级问题)
2 根据先序中序求后序
3 a[3][4]哪个不能表示 a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1) *(&a[0][0]+4)
4 for()
for()
printf(i,j);
printf(j)
会出现什么问题
5 for(i=0;i<10;++i,sum+=i);的运行结果
6 10个数顺序插入查二叉树,元素62的比较次数
7 10个数放入模10hash链表,最大长度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有几个实参
9 希尔 冒泡 快速 插入 哪个平均速度最快
10 二分查是 顺序存储 链存储 按value有序中的哪些
11 顺序查的平均时间
12 *p=NULL *p=new char[100] sizeof(p)各为多少
13 频繁的插入删除操作使用什么结构比较合适,链表还是数组
14 enum的声明方式
其他1个选择暂时想不起来了
大题:
1 把字符串转换为小写,不成功返回NULL,成功返回新串
char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( __1___)
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_______2_____];
if(*sDest == NULL)
return NULL;
sDest[sLen] = '\0';
while(_____3____)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2 把字符串转换为整数 例如:"-123" -> -123
main()
{
.....
if( *string == '-' )
n = ____1______;
else
n = num(string);
.....
}
int num(char* string)
c++中字符串数组怎么定义
{
for(;!(*string==0);string++)
{
int k;
k = __2_____;
j = --sLen;
while( __3__)
k = k * 10;
num = num + k;
}
return num;
}
附加题:
1 linux下调试core的命令,察看堆栈状态命令
2 写出socks套接字 服务端 客户端 通讯程序
3 填空补全程序,按照我的理解是添入:win32调入dll的函数名 查函数入口的函数名 到函数的调用形式 把formView加到singledoc的声明 将singledoc加到app的声明
4 有关系 s(sno,sname) c(cno,cname) sc(sno,cno,grade)
1 问上课程 "db"的学生no
2 成绩最高的学生号
3 每科大于90分的人数
////////////////////////////////////////////////////////////////////
试一共60分钟,分发试卷和收回试卷费时5分钟,实际考试时间55分钟。
选择题36道(都是5个选项的),计算题14道(一道题会有好几个问),题量比较大,我还有最后两个空没填写,实在是没时间了~~
1、请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
2、如何输出源文件的标题和目前执行行的行数
3、两个数相乘,小数点后位数没有限制,请写一个高精度算法
4、写一个病毒
5、有A、B、C、D四个人,要在夜里过一座桥。他们通过这座桥分别需要耗时1、2、5、10分钟,只有一支手电,并且同时最多只能两个人一起过桥。请问,如何安排,能够在17分钟内这四个人都过桥?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论