文档内容
2016 腾讯笔试题
2016腾讯笔试题
试卷类型:软件开发A1
考试时长:12分钟
一 不定项选择题(共25题,每题4分,共1分,少选、错选、多选均不得分)
1 已知一棵二叉树,如果先序遍历的节点顺序是:ADCEFGHB,中序遍历是:CDFEGHAB,
则后序遍历结果为:(D)
A.CFHGEBDA B.CDFEGHBA C.FGHCDEBA D.CFHGEDBA
2 下列哪两个数据结构,同时具有较高的查找和删除性能?(CD)
A.有序数组 B.有序链表 C.AVL树 D.Hash表
3 下列排序算法中,哪些时间复杂度不会超过nlogn?(BC)
A.快速排序 B.堆排序 C.归并排序 D.冒泡排序
4 初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对
应的二叉树中序遍历序列为:(A)
A.8 3 2 5 1 6 4 7
B.3 2 8 5 1 4 6 7
C.3 8 2 5 1 6 7 4
D.8 2 3 5 1 4 7 6
5 当n=5时,下列函数的返回值是:(A)
[cpp] view plaincopy
int foo(int n)
if(n<2)return n;
return foo(n-1)+foo(n-2);A.5 B.7 C.8 D.1
6S市A,B共有两个区,人口比例为3:5,据历史统计A的犯罪率为.1%,B区为.15%,
现有一起新案件发生在S市,那么案件发生在A区的可能性有多大?(C)
A.37.5% B.32.5% C.28.6% D.(面试题目:什么样的工作环境适合你)26.1%
7Unix系统中,哪些可以用于进程间的通信?(BCD)
A.Socket B.共享内存 C.消息队列 D.信号量
8 静态变量通常存储在进程哪个区?(C)
A.栈区 B.堆区 C.全局区 D.代码区
9 查询性能(B)
A. 在Name字段上添加主键
B. 在Name字段上添加索引
C. 在Age字段上添加主键
D. 在Age字段上添加索引
1IP地址131.153.12.71是一个(B)类IP地址。
A.A B.B C.C D.D
11 下推自动识别机的语言是:(C)
A. 型语言 B.1型语言 C.2型语言 D.3型语言
12 下列程序的输出是:(D)
[cpp] view plaincopy
#define add(a+b) a+b
int main()
printf("%d\n",5*add(3+4));return ;
A.23 B.35 C.16 D.19
13 浏览器访问某页面,HTTP协议返回状态码为43时表示:(B)
A 找不到该页面
B 禁止访问
C 内部服务器访问
D 服务器繁忙
14 如果某系统15*4=112成立,则系统采用的是(A)进制。
A.6 B.7 C.8 D.9
15 某段文本中各个字母出现的频率分别是{a:4,b:3,o:12,h:7,i:1},使用哈夫曼
编码,则哪种是可能的编码:(A)
Aa()b(1)h(1)i(1)o(11)
Ba()b(1)h(1)o(1)i(1)
Ca()b(1)h(1)i(1)o()
Da()b(1)h(1)o()i(1)
16TCP和IP分别对应了OSI中的哪几层?(CD)
AApplication layer
BPresentation layer
CTransport layer
DNetwork layer
17 一个栈的入栈序列是A,B,C,D,E,则栈的不可能的输出序列是?(C)
A.EDCBA B.DECBA C.DCEAB D.ABCDE18 同一进程下的线程可以共享以下?(BD)
A. stack B.data section C.register set D.file fd
19 对于派生类的构造函数,在定义对象时构造函数的执行顺序为?(D)
1:成员对象的构造函数
2:基类的构造函数
3:派生类本身的构造函数
A.123 B.231 C.321 D.213
2 如何减少换页错误?(BC)
A进程倾向于占用CPU
B访问局部性(locality of reference)满足进程要求
C进程倾向于占用I/O
D使用基于最短剩余时间(shortest remaining time)的调度机制
21 递归函数最终会结束,那么这个函数一定?(B)
A 使用了局部变量
B 有一个分支不调用自身
C 使用了全局变量或者使用了一个或多个参数
D 没有循环调用
22 编译过程中,语法分析器的任务是(B)
A分析单词是怎样构成的
B 分析单词串是如何构成语言和说明的
C 分析语句和说明是如何构成程序的D 分析程序的结构
23 同步机制应该遵循哪些基本准则?(ABCD)
A.空闲让进 B.忙则等待 C.有限等待 D.让权等待
24 进程进入等待状态有哪几种方式?(D)
A CPU调度给优先级更高的线程
B 阻塞的线程获得资源或者信号
C 在时间片轮转的情况下,如果时间片到了
D 获得spinlock未果
25 设计模式中,属于结构型模式的有哪些?(BC)
A状态模式 B装饰模式 C 代理模式 D 观察者模式
二、填空题(共4题1个空,每空2分,共2 分)
1 设有字母序列{Q,D,F,X,A,P,N,B,Y,M,C,W},请写出按二路归并方法对该
序列进行一趟扫描后的结果为DQFXAPBNMYCW。
2 关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),要按照关键码值递增的次序进
行排序,若采用初始步长为4的Shell的排序法,则一趟扫描的结果是QACSQDFXRHMY;
若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX。
3 二进制地址为111111,大小为(4)1和(16)1块的伙伴地址分别为:_,_。
4 设t是给定的一棵二叉树,下面的递归程序count(t)用于求得:二叉树t中具有非空
的左、右两个儿子的结点个数N2;只有非空左儿子的个数NL;只有非空右儿子的结点
个数NR和叶子结点个数N。N2,NL,NR、N都是全局量,且在调用count(t)之前都置为。
[cpp] view plaincopy
typedef struct node
int data;
struct node *lchild,*rchild;}node;
int N2,NL,NR,N;
void count(node *t)
if (t-lchild!=NULL)
if (t-rchild!=NULL) N2++;
else NL++;
else if (t-rchild!=NULL) NR++;
else N++;
if(t-lchild!=NULL) count(t-lchild);
if(t-rchild!=NULL) count(t-rchild);
}/* call form :if(t!=NULL) count(t);*/
三、Web前端方向简单题(略)
四、其他方向简答题(共2题,每题2分),选作题,不计入总分)
1 请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置
和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时
反馈到用户。
2 A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
2016腾讯笔试题
一. 单选题(每题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
class CBase
public:
CBase{cout《《"constructing CBase class"《
~CBase{cout《《"destructing CBase class"《
class CSub : public CBase
public:
CSub{cout《《"constructing CSub class"《
~CSub{cout《《"destructing CSub class"《
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 classdestructing 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(pB);
B.void* pVoid=static_cast(pB);
pA2=static_cast(pVoid);
C.pA2=pB;
D.pA2=static_cast(static_cast(pB));
7.参照1.5的代码,下面那一个语句是不安全的:
A. pA B. pB C. pC
8.下列程序的运行结果为:
#include
void main
int a=2;
int b=++a;
cout《
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
B.template
C.template
D.template
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读入一篇英文短文,统计该短文中不同单词和它的出现次数,
并
程序用一棵有序二叉树存储#from 2016腾讯笔试题来自 end#这些单词及其出现的次数,
一边读入一边建立.然后中序遍历
该二叉树,将遍历经过的二叉树上的节点的内容输出.
程序中的外部函数
int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);
从与pFile所对应的文件中读取单词置入pszWordBuffer,并返回1;若单词遇文件尾,已
无
单词可读时,则返回0.
#include
#include#include
#include
#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-
》nCountif(!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)
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
#include
#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
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. 假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机
制来安全有效的中止所有的线程?请描述其具体流程.腾讯笔试题(二)
考试时间60分钟,整张试卷分四大部分。
第一部分数据分析,整个部分分为三个大题,每个大题5个小题,不难,图表计算。
第二部分逻辑推理,普通的行测题,一共有10道选择。难易程度跟公务员的差不多。
2016腾讯笔试题2016腾讯笔试题。
第三部分阅读理解,15道选择。也是行测类型的,读一段话,做选择。
前三个部分都是单选,一共40题。
第四部分论述题,最后论述2道大题。(这部分不算分数,对面试有好处)
论述题:
广州腾讯产品实习笔试
第一题是如果微信添加一个功能删除一个功能,你会怎么做?(可见腾讯论述题很注重腾
讯产品的考察)
第二题是现在电子商务创业很流行,如果有以下电商创业,你会选哪一种:服装,虚拟
产品,生活服务类。
第三道题,如果你是一个乳制品的公关经理,315曝光你们产品有问题,设计一个24
小时公关方案,以挽回公司损失。(这个题目我在之前笔试看到过,是宝洁SKII事件,
写新闻发言稿,所以大家可以注意一下公关知识)
第四道题,腾讯给你5000元公益资金帮扶特殊群体,设计一个校园公益项目方案。
北京站产品笔试
附加题一:是用互联网思维改造传统行业,写一个策划方案什么的,举了嘀嘀打车的例
子。
附加题二是:题目背景是国务院批复了一个文件《前海深港现代服务业合作区总体发展
XXX》,然后问你采取何种措施吸引优秀人才的加入,以便支撑入驻企业的发展
2016腾讯笔试题
首先娱乐一下,看看这道学龄前儿童智力题,学龄前哦~真心伤不起! 反正我看完之后
是直接泪奔了,这道题目不是文艺儿童都做不出啊......好,进入主题,今天的主题是:没有蛀牙!呃,开个玩笑!
首先看第一道题目:有1个一模一样的瓶子,其中有999瓶是普通的水,有一瓶是毒药。
任何喝下毒药的生物都会在一个星期后死亡。现在,你只有1只小白鼠和一个星期的时
间,如何检验出哪个瓶子里有毒药?
其实一般出给面试者的时候,为了题目的开放性,并不会去固定小白鼠的数量,而是问,
至少需要多少只小白鼠?(当然是越少越好咯,小白鼠也是生命啊)。这是一个涉及计
算机基础科学的智力类题目。主要是考面试者的发散思维能力,因此并不要求面试者能
第一时间内完全做正确。2016腾讯笔试题文章2016腾讯笔试题出自,此链接!。
首先可以简单想到的是,需要999只,一只喝一瓶,然后等结果,哪个死了就是对应的
瓶子里面的水有毒,都没死,那就是唯一的那一瓶没有喂给小白鼠的水有毒,但是这种
方法用的小白鼠太多了。但是也不是完全没好处,是实验中平均死亡小白鼠最少的办法。
再发散一下,用二分法迅速逼近结果,第一步,把1瓶水分成A,B两堆,每堆5瓶,
然后混合A堆5瓶的水,给一只小白鼠喝,小白鼠没死,则把B堆再分成C,D两堆(如
果小白鼠死了,则把A堆再分成C,D两堆),把C堆25瓶的水混合一下给一只小白鼠
喝,然后等结果......以此类推,你们懂的,一直这样二分下去,确定最终的结果,需
要1只小白鼠。但是这样解答有个问题,就是等的时间太长了,不符合题目要求。而且
如果运气不好,1只小白鼠可能全死了,小白鼠真惨。
看来需要再次发散,根据题意,我们只能喂一次小白鼠(一次可以喂多只)。我们首先
可以先把这个问题的规模减小,如果是2瓶水,那1只小白鼠就够了,如果是4瓶水呢?
假设是A、B、C、D、四瓶水,我们可以这样做A+B混合喂给一个小白鼠1号,A+C喂给
一个小白鼠2号,如果1号和2号都死了,那么就是A有毒,如果都没死,那是D有毒,
如果只有1号死了,那么是B有毒,如果只有2号死了,那么是C有毒。嗯,有点意思
了。给一只小白鼠喂水后最终的结果是生或者死两种状态,也就是说2只小白鼠最多可
以表示的状态是4种(根据排列组合原理)。那么要表示1种状态需要多少只小白鼠?1
只,因为2的1次方是1241,剩下的问题是怎么组合这些瓶子来给小白鼠喂水了。
首先,把1瓶水从到999编号,然后用1位二进制来表示这些瓶子,1只小白鼠从1-1
编号
号水瓶
1 1号水瓶
1 2号水瓶
1 1 3号水瓶1 4号水瓶
1 1 5号水瓶
1 1 6号水瓶
1 1 1 1 1 1 1 1 999号水瓶
1 2 3 4 5 6 7 8 9 1 小白鼠
然后把1-1号小白鼠按上面的1个二进制位对好,每只小白鼠喂水规则是:如果某个瓶
子的对应2进制位为1则喂给该小白鼠,如果对应的2进制为则不喂,譬如1号小白鼠,
则会喝到1号水瓶,3号水瓶,5号水瓶,......和999号水瓶的混合水。喂完之后就
是等结果了。
死了的小白鼠标记1,没死的标记。如果只有1号小白鼠死了,那么就是 1,结果是1
号水瓶有毒。如果是8,9号小白鼠死了那么就是 11 ,结果是6号水瓶有毒,如果都
没死,那就是号水瓶有毒了,显然上面的混合方法里面号水瓶的水没有喂给任何一只小
白鼠。为什么这样?其实很容易想明白,有毒的水喂了的小白鼠都死了,其它的都没有
死,就这么简单。2016腾讯笔试题礼仪大全。一般在面试的时候没搞这么大的数据,一
般是4只老鼠,16瓶水(真心是考思维过程)。
其实这个方法有一个理论算法支撑:Bloom Filter算法。有兴趣的可以查查资料。
附带说再多说一句,小白鼠真惨。
第二道题目,是一个C++基础题目。我常常拿这个题目考那种简历上面写着精通C++的
面试者(当然,一般是应届生)。首先准备一页白纸,在它的A面写上这样一段代码:
class A
public:
void function(){printf('Hello World');}
A* p1 = NULL;
p1-function();
在它的B面写上同样一段代码,只有一点点差异:
class Apublic:
virtualvoid function(){printf('Hello World');}
A* p1 = NULL;
p1-function();
然后这样开始问,首先拿着A面的程序给面试者,问它程序会怎么样,面试者可能的答
案是:一种是程序直接crash,二种是程序输出Hello World,运行正常,三种是程序
输出Hello World,然后crash;然后把纸翻过来,再问面试者,程序会怎么样。如果
面试者能把这个问题回答正确,并且解释清楚(关键是解释清楚),说明面试者的C++
基础还是不错的。
这个题目的真实答案,就不公布了,知道原因了,很简单,可以看下下面这段程序的汇
编代码(一目了然):
#include <stdio.h
class A
{
public:
void function(){printf('Hello World');}
};
class B
{
public:
virtual void function(){printf('Hello World');}
};
int _tmain(int argc, _TCHAR* argv[])
{A* p1 = NULL;
p1-function();
B* p2 = NULL;
p2-function();
};复制代码 A* p1 = NULL;
4113FCmov dword ptr [p1],
p1-function();
41143mov ecx,dword ptr [p1]
41146call A::function (411E6h) B* p2 = NULL;
4114Bmov dword ptr [p2],
p2-function();
411412mov eax,dword ptr [p2]
411415mov edx,dword ptr [eax]
411417mov esi,esp
411419mov ecx,dword ptr [p2]
41141Cmov eax,dword ptr [edx]
41141Ecall eax
'''