腾讯招聘笔试题目

2013腾讯实习生笔试题 
一、 单项选择题
1) 给定3个int类型的正整数x,y,z,对如下4组表达式判断正确的选项()
Int a1=x+y-z; int b1=x*y/z;
Int a2=x-z+y; int b2=x/z*y;
Int c1=x<>z; int d1=x&y|z;
Int c2=x>>z< 
A) a1一定等于a2
B) b1一定定于b2
C) c1一定等于c2
D) d1一定等于d2
2) 程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的说法中不正确的是()
A)死代码删除指的是编译过程直接抛弃掉被注释的代码;
B) 函数内联可以避免函数调用中压栈和退栈的开销
C) For循环的循环控制变量通常很适合调度到寄存器访问
D)强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令
3) 如下关于进程的面熟不正确的是()
A)进程在退出时会自动关闭自己打开的所有文件
B) 进程在退出时会自动关闭自己打开的网络链接
C) 进程在退出时会自动销毁自己创建的所有线程
D)进程在退出时会自动销毁自己打开的共享内存
4) 计算表达式x6+4x4+2x3+x+1最少需要做()次乘法
A)3
B)4
C)5
D)6
5) 在如下8*6的矩阵中,请计算从A移动到B一共有多少种走法?要求每次只能向上挥着向右移动一格,并且不能经过P;

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

  A)492
B)494
C)496
D)498
6) SQL语言中删除一个表的指令是()
A)DROP TABLE
B) DELETE TABLE
C) DESTROY TABLE
D)REMOVE TABLE
7)某产品团队由美术组、产品组、client程序组和server程序组4个小组构成,每次构建一套完整的版本时,需要各个组发布如下资源。美术组想客户端提供图像资源(需要10分钟),产品组向client组合server提供文字内容资源(同时进行,10分钟),server和client源代码放置在不同工作站上,其完整编译时间均为10分钟切编译过程不依赖于任何资源,client程序(不包含任何资源)在编译完毕后还需要完成对程序的统一加密过程(10分钟)。可以请问,从要完成一次版本构建(client与server的版本代码与资源齐备),至少需要多少时间()
A)60分钟
B)40分钟
C)30分钟
D)20分钟
8)如下关于编译链接的说法错误的是()
A)编译优化会使得编译速度变慢
B) 预编译头文件可以优化程序的性能
C) 静态链接会使得可执行文件偏大
D)动态链接库会使进程启动速度偏慢
9)如下关于链接的说法错误的是()
A)一个静态库中不能包含两个同名全局函数的定义
B)一个动态库中不能包含两个同名全局函数的定义
C)如果两个静态库都包含一个同名全局函数,他们不能同时被链接
D)如果两个动态库都包含一个同名全局函数,他们不能同时被链接
10)某火车站要通过一条栈道(先进后出)来调换进入车站的列车顺序,若进站的列车顺序为A、B、C,则下列哪个出站顺序不可能?()
A)ABC
B)ACB
C)CAB
D)CBA
11)栈是一种智能在某一端插入和删除的特殊线性表,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,若6元素为A、B、C、D、E、F出栈顺序为B、D、C、F、E、A,则S栈的最小容量为()
A)3
B)4
C)5
D)6
12)找工作的季节马上就到了,很多同学去图书馆借阅《面试宝典》这本书,现在图书馆外有6名同学排队,其中3名同学要将手中的《面试宝典》还至图书馆,有3名同学希望从图书馆中可以借到《面试宝典》,若当前图书馆内已无库存《面试宝典》,要保证借书的3名同学可以借到书,请问这6位同学有多少种排队方式()
A)60
B)120
C)180
D)360
13)若完全二叉树的节点个数为2N-1,则叶节点个数为()
A)N-1
B)2×N
C)2N-1
D)2N
14)排序算法的稳定是指,关键码相同的记录排序前后相对位置不发生改变,下面哪种排序算法是不稳定的()
A)插入排序
B)冒泡排序
C)快速排序
D)归并排序
15)下列说法中错误的是:()
A)插入排序某些情况下复杂度为O(n)
B)排序二叉树元素查找的复杂度可能为O(n)
C)对于有序列表的排序最快的是快速排序
D)在有序列表中通过二分查找的复杂度一定是O(n log2n)
16)在程序设计中,要对两个16K×16K的多精度浮点数二维数组进行矩阵求和时,行优先读取和列优先读取的区别是()
A)没区别
B)行优先快
C)列优先快
D)2种读取方式速度为随机值,无法判断
17)在下图的多边形ABCDE中从哪一点出发,可以遍历图上的每条边一次,而且仅遍历一次

A)A点
B) B点
C) C点
D)D点
18)字符串www.qq.com所有非空子串(两个子串如果内容相同则只算一个)个数是()
A)1024
B)1018
C)55
D)50
19)TCP的关闭过程,说法正确的是()
A)TIME_WAIT状态称为MSL(Maximum Segment Lifetime)等待状态
B)对一个established状态的TCP连接,在调用shutdown函数之前调用close接口,可以让主动调用的一方进入半关闭状态
C)主动发送FIN消息的连接端,收到对方回应ack之前不能发只能收,在收到对方回复ack之后不能发也不能收,进入CLOSING状态
D)在已经成功建立连接的TCP连接上,如果一端收到RST消息可以让TCP的连洁端绕过半关闭状态并允许丢失数据。
20)操作系统的一些特别端口要为特定的服务做预留,必须要root权限才能打开的端口描述正确的是()
A)端口号在64512-65535之间的端口
B)所有小于1024的每个端口
C)RFC标准文档中已经声明特定服务的相关端口,例如http服务的80端口,8080端口等
D)所有端口都可以不受权限限制打开
二、填空题
21)除了10进制、2进制之外,16进制表达式在计算机领域中也经常使用(例如各种字符集的定义描述),下式:(2012)10+(AF1)16的结果是( )(请用10进制表示)。
22)仔细阅读以下一段递归的函数定义:
in tack(int m,int n)
{
if(m==0)
{
return n+1;
}
Else if(n==0)
{
return ack(m-1,1);
}
else
{
retrun ack(m-1,ack(m,n-1));
}
}
请问ack(3,3)的返回值是( )。
23)某互联网产品(例如,一款网络游戏)同时在线曲线(Average Concurrency Users,ACU)24小时数据如下图所示。现已知全天平均在线人数为5000人,玩家每次登陆后平均在线时长为2小时。请你估计一下,平均下来每分钟约有( )个玩家登录。
24)如下SQL语句是需要列出一个论坛版面第一页(每页显示20个)的帖子(post)标题(title),并按照发布(create_time)降序排列:
SELECT title FROM post( )create_time DESC( )0,20
25、为了某项目需要,我们准备构造了一种面向对象的脚本语言,例如,对所有的整数,我们都通过Integer类型的对象来描述。在计算“1+2”时,这里的“1”,“2”和结果“3”分别为一个Integer对象。为了降低设计复杂度,我们决定让Integer对象都是只读对象,也即在计算a=a+b后,对象a引用的是一个新的对象,而非改a所指对象的值。考虑到性能问题,我们又引入两种优化方案:(1)对于数值相等的Integer对象,我们不会重复创建。例如,计算“1+1”,这里两个“1”的引用的是同一个对象——这种设计模式叫做( );(2)脚本语言解析器启动时,默认创建数值范围[1,32]的32个Integer对象。现在,假设我们要计算表达式“1+2+3+…+40”,在计算过程需要创建的Integer对象个数是( )。
26)A、B两人玩猜字游戏,游戏规则如下:
A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;
如果B猜的偏小,A会提示B这次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。
请问:B至少要猜( )次才能保证猜对?在这种策略下,B第一次猜测的数字是( )。
27)仔细阅读以下函数
Int fuc(int m,int n)
{
if(m%n)==0
{
return n;
}
else
{
return fuc(n,m%n)
}
}
请问func(2012,2102)的结果是( )。
三 、加分题
28)给定一耳光数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:
要求O(1)空间复杂度和O(n)的时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);
青铜程序(主流编程语言任选)实现并简单描述。
29)20世纪60年代,美国心理学家米尔格兰姆设计了一个连锁信件实验。米尔格兰姆把信随即发送给住在美国各城市的一部分居民,信中写有一个波士顿股票经纪人的名字,并要求每名收信人把这封信寄给自己认为是比较接近这名股票经纪人的朋友。这位朋友收到信后再把信寄给他认为更接近这名股票经纪人的朋友。最终,大部分信件都寄到了这名股票经纪人手中,每封信平均经受6.2词到达。于是,米尔格兰姆提出六度分割理论,认为世界上任意两个人之间建立联系最多只需要6个人。
假设QQ号大概有10亿个注册用户,存储在一千台机器上的关系数据库中,每台机器存储一百万个用户及其的好友信息,假设用户的平均好友个数大约为25人左右。
第一问:请你设计一个方案,尽可能快的计算存储任意两个QQ号之间是否六度(好友是1度)可达,并得出这两位用户六度可达的话,最短是几度可达。
第二问:我们希望得到平均每个用户的n度好友个数,以增加对用户更多的了解,现在如果每台机器一秒钟可以返回一千条查询结果,那么在10天的时间内,利用给出的硬件条件,可以统计出用户的最多几度好友个数?如果希望得到更高的平均n度好友个数,可以怎样改进方案?

 

腾讯2012年校园招聘笔试

一. 单选题(每题4分,15题,共60分)
1.考虑函数原型void hello(int a,int b=7,char* pszC="*"),下面的函数调用钟,属于
不合法调用的是:
A hello(5) B.hello(5,8) C.hello(6,"#") D.hello(0,0,"#")
2.下面有关重载函数的说法中正确的是:
A.重载函数必须具有不同的返回值类型 B.重载函数形参个数必须不同
C.重载函数必须有不同的形参列表 D.重载函数名可以不同
3.分析一下程序的运行结果:
#include<iostream.h>
class CBase
{
public:
CBase(){cout<<”constructing CBase class”<<endl;}
~CBase(){cout<<”destructing CBase class”<<endl;}
};
class CSub : public CBase
{
public:
CSub(){cout<<”constructing CSub class”<<endl;}
~CSub(){cout<<”destructing CSub class”<<endl;}
};
void main()
{
CSub obj;
}
A. constructing CSub class B. constructing CBase class
constructing CBase class constructing CSub class
destructing CSub class destructing CBase class
destructing CBase class destructing CSub class
C. constructing CBase class 
constructing CSub class 
destructing CSub class 
destructing CBase class 
D. constructing CSub class
constructing CBase class
destructing CBase class
destructing CSub class
4.在一个cpp文件里面,定义了一个static类型的全局变量,下面一个正确的描述是:
A.只能在该cpp所在的编译模块中使用该变量
B.该变量的值是不可改变的
C.该变量不能在类的成员函数中引用
D.这种变量只能是基本类型(如int,char)不能是C++类型
5.观察下面一段代码:
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA(){};
};
class ClassB
{
public:
virtual void FunctionB(){};
};
class ClassC : public ClassA,public ClassB
{
public:
};

ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
关于pA,pB,pC的取值,下面的描述中正确的是:
A.pA,pB,pC的取值相同. B.pC=pA+pB
C.pA和pB不相同 D.pC不等于pA也不等于pB
6.参照1.5的代码,假设定义了ClassA* pA2,下面正确的代码是:
A.pA2=static_cast<ClassA*>(pB);
B.void* pVoid=static_cast<void*>(pB);
pA2=static_cast<ClassA*>(pVoid);
C.pA2=pB;
D.pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB));
7.参照1.5的代码,下面那一个语句是不安全的:
A.delete pA B.delete pB C.delete pC
8.下列程序的运行结果为:
#include<iostream.h>
void main()
{
int a=2;
int b=++a;
cout<<a/6<<endl;
}
A.0.5 B.0 C0.7 D.0.6666666-
9.有如下一段代码:
#define ADD(x,y) x+y
int m=3;
m+=m*ADD(m,m);
则m的值为:
A.15 B.12 C.18 D.58
10.如下是一个带权的图,图中结点A到结点D的关键路径的长度是:
A.13 B.15 C.28 D.58

11.下面的模板声明中,正确的是:
A.template<typename T1,T2>
B.template<class T1,T2>
C.template<class T1,class T2>
D.template<typename T1;typename T2>
12.在Windows编程中下面的说法正确的是:
A.两个窗口,他们的窗口句柄可以是相同的 B.两个窗口,他们的处理函数可以是相同

C.两个窗口,他们的窗口句柄和窗口处理函数都不可以相同.
13.下面哪种情况下,B不能隐式转换为A?
A.class B:public A{} B.class A:public B{}
C.class B{operator A();} D.class A{A(const B&);}
14.某公司使用包过滤防火墙控制进出公司局域网的数据,在不考虑使用代理服务器的情
况下,下面描述错误的是”该防火墙能够( )”.
A.使公司员工只能访问Internet上与其业务联系的公司的IP地址.
B.仅允许HTTP协议通过,不允许其他协议通过,例如TCP/UDP.
C.使员工不能直接访问FTP服务器端口号为21的FTP地址.
D.仅允许公司中具有某些特定IP地址的计算机可以访问外部网络
15.数字字符0的ASCII值为48,若有以下程序:
main()
{
char a=’1’,b=’2’;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
}
程序运行之后的输出结果是:
A.3,2 B.50,2 C.2,2 D.2,50

二. 填空题(共40分)
本程序从正文文件text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并
按词典编辑顺序将单词及它的出现次数输出到正文文件word.out中.
程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历
该二叉树,将遍历经过的二叉树上的节点的内容输出.
程序中的外部函数
int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);
从与pFile所对应的文件中读取单词置入pszWordBuffer,并返回1;若单词遇文件尾,已无
单词可读时,则返回0.
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#include <string.h>

#define SOURCE_FILE "text.in"
#define OUTPUT_FILE "word.out"
#define MAX_WORD_LEN 128

typedef struct treenode
{
char szWord[MAX_WORD_LEN];
int nCount;
struct treenode* pLeft;
struct treenode* pRight;
}BNODE;

int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen);

void binary_tree(BNODE** ppNode,char* pszWord)
{
if(ppNode != NULL && pszWord != NULL)
{
BNODE* pCurrentNode = NULL;
BNODE* pMemoNode = NULL;
int nStrCmpRes=0;

____(1)_____;pCurrentNode=*ppNode

while(pCurrentNode)
{
/*寻找插入位置*/
nStrCmpRes = strcmp(pszWord, ___(2)___ );pCurrentNode-
>nCount

if(!nStrCmpRes)
{
___(3)___; pCurrentNode->nCount++

return;
}
else
{
___(4)___; pMemoNode=pCurrentNode
pCurrentNode = nStrCmpRes>0? pCurrentNode-
>pRight : pCurrentNode->pLeft;
}
}
}

pCurrent=new BNODE;

if(pCurrentNode != NULL)
{
memset(pCurrentNode,0,sizeof(BNODE));
strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);
pCurrentNode->nCount=1;
}

if(pMemoNode==NULL)
{
___(5)___; *ppNode= pCurrentNode
}
else if(nStrCmpRes>0)
{
pMemoNode->pRight=pCurrentNode;
}
else
{
pMemoNode->pLeft=pCurrentNode;
}
}

void midorder(FILE* pFile,BNODE* pNode)
{
if(___(6)___) return;!pNode||!pFile

midorder(pFile,pNode->pLeft);
fprintf(pFile,"%s %d\n",pNode->szWord,pNode->nCount);
midorder(pFile,pNode->pRight);
}

void main()
{
FILE* pFile=NULL;
BNODE* pRootNode=NULL;
char szWord[MAX_WORD_LEN]={0};

pFile=fopen(SOURCE_FILE,"r");

if(pFile==NULL)
{
printf("Can't open file %s\n",SOURCE_FILE);
return;
}

while(getword(pFile,szWord,MAX_WORD_LEN)==1)
{
binary_tree(___(7)___);// pRootNode,szWord
}

fclose(pFile);

pFile=fopen(OUTPUT_FILE,"w");
midorder(pFile,pRootNode);
fclose(pFile);
}

三. 附加题(每题30分,2题,共60分)
1.从程序健壮性进行分析,下面的FillUserInfo函数和Main函数分别存在什么问
题?
#include <iostream>
#include <string>

#define MAX_NAME_LEN 20

struct USERINFO
{
int nAge;
char szName[MAX_NAME_LEN];
};

void FillUserInfo(USERINFO* parUserInfo)
{
stu::cout<<"请输入用户的个数:";

int nCount=0;
std::cin>>nCount;

for(int i=0;i<nCount;i++)
{
std::cout<<"请输入年龄:";
std::cin>>parUserInfo[i]->nAge;

std::string strName;
std::cout<<"请输入姓名:";
std::cin>>strName;
strcpy(parUserInfo[i].szName,strName.c_str());
}
}

int main(int argc,char* argv[])
{
USERINFO arUserInfos[100]={0};
FillUserInfo(arUserInfos);

printf("The first name is:");
printf(arUserInfos[0].szName);
printf("\n");

return 0;
}
2. 假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机

制来安全有效的中止所有的线程?请描述其具体流程
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页