腾讯实习面经(offer)
腾讯的实习招聘也算是告一段落了。从内推到正式实习生招聘,总结一下。看了这么多面经,也把自己的经历写一下,有需要的朋友可以参考一下。毕竟互帮互助嘛。
内推
腾讯内推的经历比较惨淡,面了三个部门,都跪在一面了。讲真,有点心塞。
1.WXG
- 生平第一次的电话面试交给了WXG,一上来给了18道题让做,一共给了40分钟左右,能做多少算多少。当时做了8道出来。把这些题列出来吧,供大佬们参考。
//1. 反转字符串,在原串上反转 char * reverse( char * s ) //2. 给定一个整数,按10进制来看,计算里面包含多少个0。不能用snprint f转成字符串。 int count( int value ) //3. 从一个双向链表中删除一个节点。head是链表头节点,toDelete是已经找出来要删除的节点。 struct LinkNode { struct LinkNode * prev, * next; }; struct LinkNode * head; void remove( struct LinkNode * todelete ) //4. 两个有序(从小到大)单链表,合并为一个有序的单链表 struct LinkNode { int value; struct LinkNode * next; }; struct LinkNode * merge( struct LinkNode * firstLink, struct LinkNode * secondLink ) //5. 倒转单链表(在原链表上倒转) struct LinkNode { int value; struct LinkNode * next; }; struct LinkNode * reverseList( struct LinkNode * head ) //6. 有一个二叉树,每个节点的值是一个整数。写一个函数,判断这颗树中是否存在从根到叶子节点的一个路径,这个路径上所有节点之和为某一个值。存在返回1,否则返回0。 struct TreeNode { int value; struct TreeNode * left, * right; }; int haspath( struct TreeNode * root, int value ) //7. 给定一个递增循环整数数组,从里面找出最小的元素,使用的算法越快越好。特别地,最小的元素可能出现在数组中间。比如:50, 52, 63, 90, 3, 8, 15, 44。 int findmin( int array[], int count ) //8. 在有序列表中插入一个节点 struct LinkNode { int val; struct LinkNode * next; }; struct LinkNode * insert( LinkNode * head, LinkNode * node ) //9. 二叉树的深度 struct TreeNode { int val; struct TreeNode * left, * right; }; int depth( TreeNode * root ) //10. 给定两个字符串 s1 和 s2 ,从 s1 中删除在 s2 中出现过的字符。 char * remove( char * s1, const char * s2 ) //11. 从有序链表中去除重复的元素 (1, 1, 3, 3, 3, 5, 5, 5, 9, 9, 9, 9) -> (1, 3, 5, 9). struct LinkNode { int val; struct LinkNode * next; }; void remove( LinkNode * head ) //12. 有一个字符串列表,从中找出按字典序最大和最小的串。 char * strlist[ N ] = { "abc", "123", .... "def" }; void find( char * strlist[], char ** strmin, char ** strmax ) //13. 设定如下的对应关系( A=1,B=2,C=3,...,Z=26,AA=27,AB=28,...,AAA=xxx,... ),编写一个转换函数,根据上面的规则把一个字符串转换为数字 int StrToInt ( const char * str ); //14. 在二叉排序树上面找出第3大的节点。注意:不能把二叉树全量存储到另外的存储空间,比如存储到数组中,然后取出数组的第三个元素。 struct TreeNode { int value; struct TreeNode * left, * right; }; struct TreeNode * find( struct TreeNode * root ); //15. 从一个整数数组中,找出递增的最长序列。 struct Result { int offset; // 序列的开始位置 int count; // 序列的长度 }; int findCont( int array[], int count, struct Result * result ); //16. 从单链表中找出中间的节点。 struct LinkNode { int val; struct LinkNode * next; }; struct LinkNode * find( LinkNode * head ); //17. 两个有序(从小到大)单链表,构造一条新链表,包含同时出现在两个链表的节点 struct LinkNode { int value; struct LinkNode * next; }; struct LinkNode * int ersect( struct LinkNode * firstLink, struct LinkNode * secondLink ); //18. 判断一个单链表是否出现环,空间复杂度不能是O(N) struct LinkNode { struct LinkNode * next; }; //返回 1:有环,0:无环 int iscycle( struct LinkNode * head )
- 40分钟后,然后把做了的题和面试官一起过一遍,看是否有错,是否可以优化等等
- 最后聊了一下线程池的问题。让我准确计算出一个系统中的线程池的数量设置多少个合理。(这个一脸懵逼,没做出来,要是有大佬懂的话,还请不吝赐教)
- 这一面快两个小时了吧,至此, WXG 挂
2.TEG
- TEG的小哥哥还是比较温柔,问了特别多的STL,vector,list
- map,hashtable的区别,怎么实现的,适用场景
- epoll的使用
- 线程池的设计
- 项目中可以改进的地方
- 。。。。。时间太久,记不住了
- 感觉这次还不错的,但是,至此,TEG挂
3.IEG
- 内推里面最不温柔的就是IEG了
- 项目中mysql是怎么用的
- 1.算法题。一个数组中的数都出现两次,只有一个出现一次,找出来
- 2.算法题。一个数组中的数都出现三次,只有一个出现一次,找出来
- 3.算法题。假设有一个随机函数可以随机生成[0,7900],然后现在有3000人,设计一个函数从3000人中等概率选取一个人
- 至此,第二个和第三个算法题都不太符合小哥哥的预期,IEG挂
正式校招
笔试
- 腾讯笔试选择题都是不定项,而且不能倒回。中间手一抖,多点了几下,结果直接跳过1-2两个题,至此,笔试崩
一面
-
原以为笔试过不了,都已经准备去霸面了。结果收到了面试通知
-
写程序。实现int 转 const char* ,函数原型如下:
const char * ToString(int val);
-
写程序的时候,本来不允许用malloc,我用了,又让改。改成了全局变量,结果又指出了另一个错误:
printf("%s %s\n", ToString(123), ToString(456));
让猜结果是多少,然后又引发了一段血案,反正最后也不自信,也不敢肯定结果。。。
-
聊了一下项目
-
完
二面
- 二面一共15分钟不到,全程和面试官闲聊,没有一个技术问题。
- 自我介绍
- 兴趣爱好
- 能不能实习
- 。。。。忘了
- 最后,没忍住,问了一下,为什么不问技术问题,是不是挂了。答曰:前面已经有同事考验过你的技术了。。
- 完
hr面
- hr面半个小时
- 自我介绍
- 科研情况
- 实验室情况
- 家庭情况
- 未来规划
- 有没有什么问题
- 没了
总结
- 今天拿到TEG实习offer
- 腾讯是个好公司,我很想去,但是老板不让。
- 还是有很多不足,校招再战!