腾讯的实习招聘也算是告一段落了。从内推到正式实习生招聘,总结一下。看了这么多面经,也把本身的经历写一下,有须要的朋友能够参考一下。毕竟互帮互助嘛。node
腾讯内推的经历比较惨淡,面了三个部门,都跪在一面了。讲真,有点心塞。mysql
平生第一次的电话面试交给了WXG,一上来给了18道题让作,一共给了40分钟左右,能作多少算多少。当时作了8道出来。把这些题列出来吧,供大佬们参考。
```cpp
//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 )sql
//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 )spa
//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 );
这一面快两个小时了吧,至此, WXG 挂
cpp const char * ToString(int val);
写程序的时候,原本不容许用malloc,我用了,又让改。改为了全局变量,结果又指出了另外一个错误:
cpp printf("%s %s\n", ToString(123), ToString(456));
让猜结果是多少,而后又引起了一段血案,反正最后也不自信,也不敢确定结果。。。
完