腾讯面试:2014年腾讯面试题整理及经验技巧(转)
本人IT***丝一枚,毕业4年,5年经验(大四在腾讯实习一年,实习生工资,工作内容同正式员工一样)。非常幸运,先后收到过腾讯、百度和阿里的offer,在这里跟大家分享下腾讯面试经验,同诸君共勉。
本人职业生涯的起点开始于腾讯,能入职腾讯其实非常偶然。09年腾讯校招的时候,在本人的学校(学校是2本就不说名字了)开宣讲会,学院很多同学都去了,因为当时对腾讯兴趣不大所以没去,当时希望去中软金蝶这样的传统软件公司。一个宿舍的兄弟要去参加腾讯校招的笔试,我作为亲友团陪他一起去。腾讯的hr很nice给了我一张笔试题和意愿表让我填。本来我想从学校北门直接坐车回家,既然来了反正也没什么事就写了,算是为以后找工作热身。腾讯面试笔试内容主要是编程基础和排序查找算法之类的题,还有用程序实现递归这样的,具体的忘记了。
笔试题感觉很简单,附加题也答上了(本人专业课学霸、其他科学渣)。答完也没检查就坐车回家了,吃饭的时候收到腾讯叫我第二天去一面的短信,刚好我爸爸妈妈在南山的同学去我家做客,就乘阿姨的顺风车回学校准备第二天的面试。
腾讯一面的面试官非常的nice也是我后来的组长,非常有人格魅力的一个人,我去的时候还特意给我倒了一杯水。腾讯面试官员主要问我了解的技术,我就介绍了下在大学期间做的C++、.Net和J2EE项目,规则引擎、财务系统、学业预警系统、爬虫引擎这些。因为完全没准备所以回忆起来有点吃力,还好面试官没有刁难,发挥还可以。问了Java的内存机制,会不会导致内存泄漏,这个答的不太好;问了下hibernate的机制和作用都回答上了,让写了下爬虫程序的核心代码和正则表达式。
一面整整面了30分钟感觉有戏,就回去好好准备2面的内容,把当年工程代码翻出来复习以免再出现忘记的尴尬。很快第二天就通知去进行技术二面。技术二面就是传说中的压力面,被好一顿虐待。项目中的问题一个没问,问的全是操作系统、数据结构的问题。还好专业都是A+,大多数题都回答上了。问了下我树转二叉树,这个小意思。还问了Java内存机制和是否会有内存泄漏什么情况下会泄漏,good这个在一面回去之后就看了,回答的完美。最后一题是问的查找QQ号。小case,写了个二分查找;他说你认为我会满意吗,我想了想又写了一个哈希查找,他说还是不满意。这个时候我已经有点小不爽了,就说不知道。在有点尴尬的气氛中结束了面试。当时觉得没戏了,有点失落。回家看了下算法导论,原来有一个极为高效的算法是二叉查找,腾讯面试,唉,人家已经提示了,但是还没想到,有点小遗憾。
过了一周收到腾讯的hr面试邀请的时候,说实话非常的意外。听说我们学校本科生全军覆没,就我一个过了2面,研究生只有3个过了2面。hr面没问什么特别的,此处不表。一周后收到腾讯的正式offer,还是有点小激动的。薪水方面超过了我的预期,但最主要的是一面的面试官看起来很厉害的样子,感觉腾讯也是一家很厉害的公司。
在腾讯干了四年,正式三年,实习一年。后来开始负责招聘,我们部门在选择求职者的时候主要看聪明程度、视野、大局观、气场等软实力。当时我负责面了一个孩子,各方面挺不错的,组长觉得也还行,但是被总监毙掉了,原因是太软不够霸气。还有一个哥们技术和基础感觉都还行,但是被组长毙掉了,原因是视野和聪明度不够。
所以准备面试腾讯的同学,建议多留意近期的互联网的最新动态,多练练表达。如果能在面试中批判一下近期腾讯的决策失误和产品缺陷,无论对错都会认为这个孩子不错,那么一定会加分的;但是也不能过了,完全说的不对还侃侃而谈会让人觉得你这个人很浮夸也是会被毙掉的。尺度的拿捏很重要。还有一点,语速快而且语气坚决目光坚毅自信的比语速慢表达不流畅的同学成功几率高。我面过一个哥们,后来他顶替了我领域负责人的位置,这是后话。他在面试的时候就非常的自信,如果问一些“弱智”问题会被他反讽,当时大家就觉得这个人很厉害,面试也很顺利,1天连续面了5面,当天就发了offer。腾讯面试,腾讯社招是电话面、技术一面、组长面、平台总监面、部门经理面、hr面。总共6面,面谈是5面。
面试的时候首先要自信,如果能做到不卑不亢其实就已经成功了一半。我感觉大多数程序员都不太自信,给人感觉有点文弱,如果你自己都对自己不自信,怎么能奢求公司对你自信呢。但是也不能太自信,自信心爆棚就是自大,面过一个2年开发经验的问他技术都不知道,就谈项目。腾讯面试,问他项目中做了什么就谈项目是什么。在我这就被毙掉了还问你们能不能开到30w,我只能让他回家等消息了。
2014年腾讯面试题整理——并附有网友的解答,感兴趣的同学参考下
一 不定项选择题(共25
题,每题
4
分,共
100
分,少选、错选、多选均不得分)
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
.冒泡排序
快排和冒泡排序在最坏情况下的时间复杂度是O(n^2);
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
)
int foo(int n){
if(n<2){
return n;
}
else
return foo(n-1)+foo(n-2);
}
A. 5 B . 7 C . 8 D .10
6 S市
A
,
B
共有两个区,人口比例为
3
:
5
,据历史统计
A
的犯罪率为
0.01%
,
B
区为
0.015%
,现有一起新案件发生在
S
市,那么案件发生在
A
区的可能性有多大?(
C
)
A.
37.5% B
.
32.5% C
.
28.6% D
.
26.1%
3*0.01% /( 3*0.01%+5*0.015%)=28.6%
7 Unix系统中,哪些可以用于进程间的通信?(
ABCD
)
进程间通信主要包括管道, 系统IPC(包括消息队列,信号量,共享存储), SOCKET.
A.Socket B.共享内存
C
.消息队列
D
.信号量
8 静态变量通常存储在进程哪个区?(
C
)
A.栈区 B
.堆区
C
.全局区
D
.代码区
栈区一般用于存储比较小的临时变量;
堆区一般用于存储比较大的临时变量;
代码区用于存储代码;
全局区用于存储全局变量,静态变量等。
9 查询性能(
B
)
A. 在
Name
字段上添加主键
B. 在
Name
字段上添加索引
C. 在
Age
字段上添加主键
D. 在
Age
字段上添加索引
如果经常依据特定的字段搜索表或对表的记录进行排序,则可以通过创建该字段的索引来加快执行这些操作的
10 IP地址
131.153.12.71
是一个(
B
)类
IP
地址。
A.
A B
.
B C
.
C D
.
D
A类:0打头
B类:10打头
C类:110打头
D类:1110打头
11 下推自动识别机的语言是:(
C
)
A.
0
型语言
B
.
1
型语言
C
.
2
型语言
D
.
3
型语言
参考:维基百科
12 下列程序的输出是:(
D
)
#define add(a+b) a+b
int main()
{
printf("%d\n",5*add(3+4));
return 0;
}
5*3+4=19
A.
23 B
.
35 C
.
16 D
.
19
13 浏览器访问某页面,
HTTP
协议返回状态码为
403
时表示:(
B
)
A 找不到该页面
B 禁止访问
C 内部服务器访问
D 服务器繁忙
14 如果某系统
15*4=112
成立,则系统采用的是(
A
)进制。
A.
6 B
.
7 C
.
8 D
.
9
逐个带入即可:
对于6进制而言:15的十进制就是11;112的十进制就是44,11*4=44。
15 某段文本中各个字母出现的频率分别是
{a:4
,
b:3
,
o:12
,
h:7
,
i:10}
,使用哈夫曼编码,则哪种是可能的编码:(
A
)
A a(000) b(001) h(01) i(10) o(11)
B a(0000) b(0001) h(001) o(01) i(1)
C a(000) b(001) h(01) i(10) o(00)
D a(0000) b(0001) h(001) o(000) i(1)
16 TCP和
IP
分别对应了
OSI
中的哪几层?(
CD
)
A Application layer
B Presentation layer
C Transport layer
D Network layer
TCP是传输层协议
IP是网络层协议
17 一个栈的入栈序列是
A,B,C,D,E
,则栈的不可能的输出序列是?(
C
)
A.
EDCBA B
.
DECBA C
.
DCEAB D
.
ABCDE
A:全部入栈后出战
B:ABC入栈,D入栈然后出栈,E入栈然后出栈
C:不可能,
D:A入栈然后出栈,B入栈然后出栈,...
18 同一进程下的线程可以共享以下?(
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
20 如何减少换页错误?(
BC
)
A 进程倾向于占用
CPU
B 访问局部性(
locality of reference
)满足进程要求
C 进程倾向于占用
I/O
D 使用基于最短剩余时间(
shortest remaining time
)的调度机制
SRT算法(SPN算法的抢占式版本):总是选择剩余时间最短的进程运行。
因为时间短的结束运行快,不需要频繁切换进程(导致刷新内存),所以换页错误发生的概率就减少了
21 递归函数最终会结束,那么这个函数一定?(
B
)
A 使用了局部变量
B 有一个分支不调用自身
C 使用了全局变量或者使用了一个或多个参数
D 没有循环调用
22 编译过程中,语法分析器的任务是(
B
)
A分析单词是怎样构成的
B 分析单词串是如何构成语言和说明的
C 分析语句和说明是如何构成程序的
D 分析程序的结构
23 同步机制应该遵循哪些基本准则?(
ABCD
)
A.空闲让进
B
.忙则等待
C
.有限等待
D
.让权等待
24 进程进入等待状态有哪几种方式?(AB
CD
)
A CPU调度给优先级更高的线程(运行态转为就绪态)
B 阻塞的线程获得资源或者信号(阻塞态转为就绪态)
C 在时间片轮转的情况下,如果时间片到了(运行态转为就绪态)
D 获得
spinlock
未果(运行态转为就绪态)
25 设计模式中,属于结构型模式的有哪些?(
BC
)
A 状态模式
B
装饰模式
C
***模式
D
观察者模式
26、根据以下代码?
int ack(int m,int n)
{if(m == 0)
return n + 1;
else if(n == 0)
return ack(m-1,1);
else
return ack(m – 1 , ack(m , n-1));}
如果ack(3,3),。结果为多少
27、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在队列中所处的位置和变化,队伍可能随时有人加入和退出;当有人退出影响到用户的位置排名时需要及时反馈到用户。
28、A,B两个整数集合,设计一个算法求他们的交集,尽可能的高效。
我的回答的:如果对于数据较小(10W以下)我会采取哈希的方法去求数集较小的那个集合的hash值存在hash表中,然后对另一个表中每一个数进行hash,如果在hash表中找到则这个数是交集的数,输出。这个算法时间效率是O(n+m),空间效率O(3n+m);(因为hash几乎浪费掉一半空间)
对于大数据,我则先把数据hash%100的样子分到许多个小文件中,然后对这些hash值的次数建立一颗二叉查找树,遍历另一个集合的数来找,找到一个就输出一个,最后得到集合数。算法效率是O(n/100*m*log(n/100)),空间效率O(n+m)
29、怎么在linux下查找一个文件中有多少个给定的字符串
答:这题本来想考察我的shell编程的能力吧,不过我说这个不会,然后他问我如果写程序实现呢
我答我会用trie树去记录字符串出现的次数
然后有被问道更深入一点的,如果文件过大呢?
我答,那就把文件内容hash取模分成多个足够小的文件,然后每个小文件trie记录结果,输出一个小文件,最后把所有结果文件合并就可以得到最终结果
30、写二叉查找树的查找算法,答案就不写了,简单。
写完之后,面试官又问我由这里到一个什么地方的,要求最短时间,怎么求
这个就是问最短路算法,我就答了这个,然后他又问我怎么知道去的路径通不通,我答用传递闭包去计算,
他问我如何传递闭包,然后我就画图演示了一下这个过程
31、进程与线程的区别
这题我答得非常不好,我只答了进程有资源,线程没资源,进程个数有限,而线程的个数几乎不限,进程的调度慢,线程的调度快这些基础点
但是被问到为什么进程调度比线程慢时,我答不出,我答是因为用户态和内核态的转换造成的,但是百度一下,答案应该是因为线程调度是在进程中进行,在同一存储区内操作,而进程则在不同存储区操作,所以进程调度数度比线程慢
32、问我TCP/IP有多少层
我答OSI标准有7层,但是目前工业大多使用5层的标准,然后回答了一下这些标准,我只会答5层标准的那一个。。。
接着又问我IP层(网络层)的作用,
我答了很多,又说了什么TCP、UDP的,然后在面试官的知道下,我才答出,网络层的作用是映射作用,主要是IP和MAC地址、端口的映射(我不知道对不对。。)
接着又问我TCP和UDP的区别
我就答,TCP是有连接的,UDP是无连接的,TCP通过三次握手保证数据的可靠性,UDP则没有
最后还问我滑动窗口的东西,我就答了滑动窗口是为了保证数据被客户端正确接收了,他又问我为什么能保证,然后我就画图演示滑动窗口的发送、接收、移动过程
33、写一个函数,计算给定的一个整数中有多少个0