腾讯面试总结:
一面:
我觉得一面之所以很轻松过就是当面试官问一个问题的时候可能我不单单只是对他提的问题的回答,另外我会自己把详细的知道的哪些过程详细的讲,面试官一开始问了一两个简单的基础,但我回答到我回答的还没回答完他都不想听了,可能他看基础问了几个都难不倒你。再后来就提高难度问一些开放性的题,考你考虑问题的全面性以及对于数据结构在不同场景下的运用。这个貌似是他们很看重的。具体开放性的问题底下详细阐述。面试当中我觉得首先表达能力特别重要,但最重要的“秘籍是自信”。(这个是一个阿里的学长给我的面试秘籍哈)。当时面试的时候我不知道怎么了异常自信,就是一点都不紧张。所以自信很重要!面试二面的时候就是问的特别深,感觉被虐的很惨,面了一个多小时。但是在快面完的时候面试直接给我说他让我过了,然后又简单问了一些在学校的情况(奖学金以及参加的比赛以及做班委什么的)。等了不到十分钟就HR面,也是没等状态出来HR也直接说她让我过了,然后给我看了好多视频,有关腾讯的介绍的。HR面也面了一个多小时。
刚开始一面的时候因为投的是微信事业部,所以基本都有一个笔试,少部分人没有。我的是三个笔试题限时30分钟。我没有全写出来,最后一个题没写。但是我把我的思路和想法都给面试官详细描述了。
笔试题:
1、16进制转十进制
2、编写一个扑克牌的随机发牌程序,要求将52张牌均等发给4个选手,用1,2,3······13代表13张牌,结果放到四个数组中就可以了。
3、求出100000以内符合下面条件的数字:它是可以分解的整数,且所有数位上的数字和等于其全部质数因子的数字总和。例如:9975=3*5*5*7*19,9+9+7+5=30,3+5+5+7+1+9=30
(下面的是其他人的笔试题)
4、写一段C/C++代码,将有序数组(每个数组内部没有重复元素,但是两个数组之间可以重复元素)合并成一个有序数组(要求重复元素在结果中只出现一次)
5、C/C++函数,把字符串里面的空格全部去掉(不允许额外申请存储空间)
6、将一个32位整数中的数字进行反转,若反转后的整数溢出时,返回0.例如:给定x=123,返回321;给定x=-123,返回-321
7、给定一个字符串和一个偏移量,根据偏移量旋转字符串(从左向右旋转)abcdefg—->1 gabcdef
8、倒转单链表(在源链表上倒转)
9、检查两棵二叉树是否等价。等价的意思是说首先两棵二叉树必须拥有相同的结构,并且每个相应位置上的节点的数都相等。
10、给定一个N*N的二维矩阵表示图像,90度顺时针旋转图像。例如:给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]
11、字符串中插入(注意越界)
问答题:
1.一个不规则的硬币,丢到正面的概率为p,在不知道丢到p的情况下怎么设计一个算法才能让硬币扔到正面和反面的概率相同?
2.libevent的框架
3.libevent底层的实现机制
4.muduo库的框架
5.muduo库里的线程池调用机制,然后接着又问了是否了解过生产者消费者模式,应该是跟线程池的调用机制有关。
6.队列里push和pop的底层实现机制
7.STL容器vector list deque的区别
8、Select、poll、epoll之间的区别(底层的区别)
9、大数据排序(40亿个无符号整形数据,规定内存大小是1G,设计好数据结构,解决方法后会问你时间复杂度)
10、设计一个管理10W个任务管理器,当你的任务执行完成之后你要将任务从任务管理器中删除。让你设计这个任务管理器的具体的数据结构以及如何删除插入。(希望是有多个方案,在你给出方案后还是要求你更高效,另外我提到用STL中的数据结构,但他要求不能用。要自己具体设计)
11、协议:ARP、RARP、HTTP、HTTPS
12、进程调度的理解
13、现在linux版本
14、32位系统和64位系统的区别,64位下指针的大小是多少
15、项目的分工,linux下的gdb调试,最项目的时候最大的问题
16、了解现在最流行的技术是什么
17、最近常浏览什么网站
18、TCP和UDP的区别
19、STL中的几种容器之间的区别(set/mulitset、map/mulitmap、list、vector、deque)
20、UDP的丢包率如何测
21、Ping的底层实现
22、Netstat命令(具体就是这个命令的四大要素是什么)
23、C++虚函数实现机制的实现,虚函数表有多大,内存会付出哪些代价以及我写过多少行代码
24、assert是否用过,用过那么底层实现是什么?如果assert失败了会不会释放内存。如果是共享内存呢?
25、GDB调试。(如果调试进不去或者调试的时候奔溃了,但是我想查看详细的信息(这个我查到了有一个工具coredump gdb可以解决这个问题,它会将奔溃时候的信息存入一个文件中,然后你可以查看那个文件))
二面:
1、epoll和libevent的区别
2、Epoll处理各种事件的底层实现
3、设计一个WEB服务器(写出具体设计流程使用到的各种API,以及你设计的一个框架)
4、设计一个缓存cache(首先描述一下你对缓存的理解,设计一个缓存首先要考虑一些什么,缓存最重要的是哪些?然后需要对你说出的重要的点进行排序,就是排出最重要的,然后不太重要的等等。。。。然后根据你的排序设计相应的数据结构。)
5、Map和哈希的区别是什么(为什么redis中不用map用hash)
6、TCP、UDP的区别
7、如何实现UDP可靠(不能改变UDP报文结构)
8、项目文件传输(首先是问框架然后就是具体细节实现)
9、进程间通信(具体有哪几种,具体都怎么用,什么场景下用)
10、进程调度和线程调度(在设计缓存的时候提到的,我需要用到它的思想)
11、排序(具体是设计题中用到)
12、红黑树和二叉平衡树的区别
13、如何实现过滤网络中的敏感词(我说了实现英文的T树结构,后来他说中文怎么办?具体需要效率的高效)
另一个同学的二面:
14、项目进行询问(还让画项目图,我觉得他对项目注重的不是多么难,而是为什么要写这个,你的设计框架,你负责的部分)
15、给了一张题(只有三个题关于c的,主要是关于指针的,就让我做了两个)
16、又给了一张题(算法,智利题等)
算法是:两个文件个有500G那个里面每行有唯一的qq号,
1:找出两个文件中重复的,
2:快速对文件排序,
17、针对简历上写的各项技能问了一下
(主要问我的是linux源码,负载均衡的理解)
18、说一下自己的擅长的
19、有什么问他的……
三面:
三面hr面就是了解你的性格兴趣爱好什么的以及家庭情况。我感觉只要真实,真诚问题都不大。而且据说HR是不刷人的。刷人的决定权在二面那个总监的手上,HR是根据技术面试官的评价对你进行进一步的评价。有个朋友HR面被刷了,说是HR觉得她问的问题和你回答的不再一个点上。所以HR还是需要一些技巧吧。但是最重要的还是技术吧!
我觉得面试中注意的点就是:
1、自信(最重要)
2、表达能力(会但是讲不出来是硬伤)
3、你的基础特别重要(之前问过面试官,面试官说他们很注重基础,在基础过关的基础上再考察你的潜力。有些同学遇到就是感觉很奇葩的问题,其实是在基础的地方你回答的不够好,面试官已经没有兴趣再了解了。所以刚开始的问题,别看简单,但你还是要回答的有条理,能深入最好深入,不要等面试官来提问你。知道多详细就将多详细。讲到面试官都不想听了。)
4、临场的反应能力以及解决问题的能力(我感觉我被问到最多的就是解决问题的题目,就是一些场景题,涉及到具体的设计数据结构。)
5、运气(面试中运气其实也很重要,这个多努力运气就好,面试官问你的问题你知道的就越多,解决方案也越多)
(附一点小注意:不要自负,在面试官问你有什么需要问他的时候,不要拿一些他难题考面试官,据了解有一个同学这样做了,结果惹怒了面试官。术业有专攻,不一定人家回答不上来就是技术不好。你可以简单的问面试官给你一些今后学习上的建议,从这其实就可以看出面试对你的评价以及会不会让你过。不要想着考倒面试官你就很厉害。看到别人有这个经历,所以做个小建议吧。)