2015年腾讯阿里实习生招聘面试经历

每年毕业生找工作都是一个问题,对于个人来说,无非就是笔试和面试的问题。对于应届生来说,最头疼的或许不是笔试而是面试。对于笔试,只要自身实力过硬,一般都没有问题(退一步讲,万一笔试没过,还可以在面试的时候霸面);对于面试,就不一样了,应届生没有接触过面试,所以对于面试可能有些害怕,面试之前会在网上搜一些面试注意事项之类的,而这些都是对所有面试的一般概括,没有什么针对性,无非就是提醒面试者注意着装、礼貌、准备一些各种版本的自我介绍之类的,不得不说这些还是有很大帮助的。但在我看来,这些都没有自己实打实的来一次真正的面试有帮助。所以,我鼓励那些想要找工作的同学,可以尝试着真的去准备一场面试,运气好的话,说不定就被录取了呢。下面,我分享一下我的今年(2015年)的面试经历和感想,希望对一些同学有所帮助。

对于面试的着装,技术类的面试,穿平常的便装就行,不用穿的特别正式,穿的正式反而显得不自然,而且在面试官看来也多少会有几分怪异。非技术类的,具体应该也没有什么特别的标准,如果自己之前有正式的西装之类的衣服,可以穿上去面试,如果没有,感觉也没有必要去准备一下,穿自己平常的衣服应该也不会有多大的问题。这纯属个人见解,可以根据实际的情况,询问学长之类的,应该都会得到满意的解答。

一般来说,公司会通知你在特定的时间地点面试,我们最好提前15到30分钟到达指定的地点(有的会明确要求你提前15分钟到达)。之前在网上看到有说让提前5到10分钟左右,如果提前半个小时去,可能会被公司视为没有时间观念,根据我个人的面试经历,这完全就是扯淡,去公司面试的人那么多,根本不会有人注意到你的,更别说什么看出来一个人的时间观念了;况且,面试官面试时间会在某个范围内波动,遇到你前面的人没来面试,你提前被面试的可能性不是没有;另外,如果太赶的话,很容易造成紧张情绪,面试的时候发挥不好,提前去的话,还可以和其他人交流一下,缓解一下紧张情绪,如果是多个人一块儿去,边等边聊天,基本上也不会有什么紧张的情绪。

另外需要注意的就是个人礼仪等方面的问题,不过,对于一个有基本素质的人,这应该都不是问题,只要稍微注意下就ok了。

最后,面试的时候一定要带上自己的简历,一般来说面试都是三面(不排除更多次面试的可能,貌似这些都是大牛,是要给他们加工资的),带上三份或者更多的简历保证万无一失,如果不带,可以想象面试官要求你给他一份简历你却没有的尴尬情景;最好还有带上纸和笔,技术面试,少不了要在纸上写程序之类的,如果面试官没提供纸,或者提供的纸用完了,那么我们自己带的就派上用场了。

以上这些,个人感觉只要面试的时候稍稍注意一些,都不是问题,毕竟一个公司招聘人才,主要考察的是个人的专业能力,其他方面,只要不是做的太差,都不会有什么问题。

下面,我先来说一下腾讯的面试经历。腾讯我总共面试了三次,一面和二面是技术面,三面是HR面。可能是我个人简历和自我介绍的问题,一面和二面都是面试官在一张纸上指出一些题让写代码或者说思路,没有问我项目或者其他具体的技术问题;HR面基本就是聊天,了解一下你的个人情况之类的,一般来说,技术类的HR是不会刷人的,但也不排除后边的人比你优秀之类的,然后,你就被悲催的刷掉了。

先说一面,一面大学持续了40分钟,刚开始先是自我介绍,我大概说了有三分钟,主要说了ACM的经历,学过linux,写过后台小程序,重点介绍的是ACM的经历,可能是这个原因,面试官上来就让我写程序,问了两个题目。

第一道题目是将字符串”I am student”变成”student am I”,要求尽量节省内存。当时我看道题目后,大致看了一下,就开始写了,也没仔细看题,就写了一个字符串翻转的函数,给面试官看了,面试官明确说错了,我当时就懵了,心想这下完了,但是,我还是静下心来看哪里错了,我看了一遍程序,感觉是没错的,就又再看了一遍题目,立刻就明白了,md,原来题目看错了,当时就给我自己跪了。然后,我就又开始写,写的时候,询问了下面试官,分割单词的空格是不是只有一个,他和我说你可以只考虑一个的情况,然后问我,如果有多个空格怎么处理,我就说可以先做一次预处理,将多个空格变成一个空格。然后,我就开始写了,这次的思路是从字符串的后边往前找空格,找到空格后,将空格替换成’\0’,用printf函数打印空格后紧邻的那个字符串,一直处理到字符串开头;面试官看的过程中,我开始说思路,说好后,面试官说,不是让打印出来,是让在原来字符串的基础上将字符串改变成这个样子;说完之后,我就开始不淡定了,但是还得想呀,想了一会儿,我感觉写程序时间可能不够用,我就和面试官说,可不可以说思路,他说可以,我就说可以使用循环移位,我想的时候,想的是循环左移,说的时候突然想到循环右移的效率更高一点,这时面试官可能不太理解,就让我画了一个示意图,标明循环右移后额结果,面试官大概明白后,就和我说,你这个想法的时间复杂度有点高呀,我说是的,复杂度是O(n^2),然后,他让我想想有没有时间复杂度低而且还节省内存的方法,我想的过程中,面试官上了个厕所,回来就问我想出来了没,我说没有,然后,就又指了一道题目让我想;其实,当时我差点就问他,有没有既快又省内存的方法,不过,我是忍着没问,后来,面试完后,我查了一下,还真有,方法真是巧妙,先将字符串中的单词(以空格为分隔符)翻转一次,然后,再以整个字符串为单位翻转一次,就得到了结果;当时就被这种方法惊呆了,太特么妙了。这里附带说下,前几天做360的笔试题目,最后写代码的题目就是这个题,不过是以’.’为分隔符。代码贴到下面:

#include <string.h>
#include <stdio.h>

// 实现字符串相应范围翻转
void reverse(char *begin, char *end)
{
    while (begin < end) {
        char c = *begin;
        *begin = *end;
        *end = c;
        ++begin;
        --end;
    }
}

// 翻转两次,第一次以整个字符串为单位翻转,第二次以点分割的单词为单位翻转
char *str_rev(char *str)
{
    char *begin = str;
    int len = strlen(str);
    char *p;
    reverse(begin, begin + len - 1);
    while (*p != '\0') {
        while (*p != '\0' && *p != '.') {
            ++p;
        }
        if (*p == '\0') {
            break;
        } else {
            reverse(begin, p - 1);
            begin = p + 1;
        }
    }
    return str;
}

int main(void)
{
    char str[] = "www.soso.com";
    printf("%s\n", str_rev(str));
    return 0;
}

面试官让我看第二道题目的时候说,你说下思路,时间不多了,只能给你5分钟的时间考虑;看过题目后,还算好,是一道字典树的题目,说的是有好多电话区号,每一个数字代表一级的地址,比如8213代表A市B区C街道D号等;要求给一个区号,在给定的列表中尽可能快的找到这个区号对应的地址,当时看到后就想到是字典树,面试官让写个数据结构,写好后,让面试官看了下,面试官问的过程中意识到结构体中还得有一个记录地址的字符数组,然后就问我这个数组存什么东西,我说存这个数字对应的地址,没有想到找的过程中将字符串连接起来也得浪费时间,面试官就指出了这一点;另外,还问了一个其他的问题,我也支支吾吾没说清楚。说完之后,面试官就表示面试就到这里,让我问问题,我就问了一些面试结果什么时候出来之类的问题。当时出来后,心里感觉,这下肯定特么要挂了,表现这么不好,当时心里感觉就挺蛋疼的,但也没办法,回到住的地方后,就进入了焦急的等待过程,到了晚上七点左右吧(我是下午两点的一面),在微信里查询状态变成了复试环节,当时就很高兴,没想到竟然过了一面;晚上就点左右,给我发了短信,让第二天早上十点去二面。后边,我就开始大概准备了下,早早的睡下了。

接下来是二面。二面面试官也是开始先让自我介绍,我的介绍和一面大概一样,然后面试官就拿出一张纸,让我做题,中间也没问我其他的问题。这次总做了六道题目。

第一道是类数学题。说是一瓶汽水1元,每两个空瓶可以换一瓶汽水,你现在有20元,问最多可以喝多少瓶汽水?当时,我在纸上大概写了下,算了个39。大概是这样:20+10+5+2+1+1=39,最后一个1是5个空瓶中4瓶换了2瓶汽水,剩了一个空瓶加上最后的一个空瓶。这样最后还剩下一个空瓶,当时没想那么多,就说了个39,然后面试官问我的思路,我大概说了下,然后就让我做下一道题了。面试完后,在网上查了下,还真查到了,发现大部分说的是39,还有一些说的是40,因为可以先和老板借一瓶汽水,喝完后,就有两个瓶子了,把瓶子给老板就ok了。感觉还是40个是最好的答案。其实网上还可以找到其他类似的题目,也十分有趣,就是稍微坑一点儿,看完绝对感觉智商被碾压。

第二道也是道有趣的题目。有10个箱子,每个箱子里有10个苹果,其中,9个箱子里的苹果1斤1个,另外的1个箱子中的苹果9两1个,现在有一个电子秤,要求只称一次(只能得到一个读数,苹果可以拿出来称),区分出来装9两1个苹果的那个箱子。大家可以想一下这道题目怎么做。

当时,看完题目后,也是看错题了,以为是天平,说了一下思路,然后,面试官就说不是天平,是电子秤,可以得到斤两数的。然后,我就开始想,想了好久好久,中间也提出了些疑问,面试官说,只称一次就是只能得到一个读数。想了好久之后,面试官说,从每个箱子里边拿出苹果来称试试,当时,我就傻了,之前我一直在想苹果是以箱子为单位的,只能以一个箱子为单位来称,我就将我之前的误区说了出来,然后,就在纸上开始画,我先写下了1到10十个数字,作为箱子的标号,然后突然想到,可以从1号箱子里边拿出1个苹果,一次类推,然后将拿出来的苹果称一次,得到一个斤两数,根据斤两数是可以区分出来那个箱子装了9两1个的苹果的。当时,只是有这个想法,没有具体的做法,然后面试官问我,怎么区分,我说的比较模糊,他就问我少1两是那个箱子,我就说是1号箱子,一次类推,然后这道题目就算过了,让我做下一道题(这里,我想说的是在面试过程中,有什么疑问,一定要询问面试官,要不然坑的就是自己)。
剩下的题目忘记顺序了,就按照我的记忆来标记题号吧。

第三道是说,有5个人ABCDE,写程序输出5个人的排队的所有可能顺序。面试官拿出纸和笔让写,因为这比较基础,就开始写了。写了一会儿,可能嫌我写的慢了或者是时间快到了,就让我说思路,我就说用dfs枚举,大概说了下,就开始下一道题了。

第四道是一个栈的题目,让判定一个给定的括号序列是否匹配,这个序列由{,},(,)四中符号组成。当时看了下,就说出思路了。

第五道是让实现一个atoi函数,就是把一个字符串转换成一个整数,我问了下用不用考虑非法情况,面试官说不用,然后,我就开始写了,很快就写完了。

第六道题目是:有100个乒乓球,两个人轮流拿乒乓球,每个人最多拿5个球,最少拿1个球,拿到最后一个球的人获胜,你先拿,拿几个球才能保证获胜,策略是什么?了解博弈论的人都知道这是nim博弈的一种特殊情况,100%(5+1)为0时,先手输,否则,先手一定有赢的策略,先手先拿4个,假如后手拿x个,那么先手就拿6-x个,这样就能保证先手获胜。不懂博弈论的人可以采用另一种思路,想拿到第100个球,就必须拿到第94个球才能保证获胜;想拿到第94个球,就必须拿到第88个球才能保证获胜;。。。;依次类推,就得到先手必须拿走4个球。

问完后,看我是本科生就问了我考不考研,我说不考,问我什么原因,我说了下。然后,我问了下结果什么时候出来之类的就出来了。这次感觉比一面好多了,除了第一道题目,其他的都答的不错。果然,在中午12点左右,我查微信状态的时候,状态已将变成了HR面试环节了。然后就是漫长的等待了,也一直没有发通知,到了官网上说的面试的最后一天,我坐不住了,去现场问了下情况,说是第二天还有面试,我就又回来继续等待了,等了一天左右吧,面试的前一天晚上给我发了短信,让我去面试,到了才发现,我应该是这个HR的倒数第三个面试者,我之前有一个人正在面试,我就站在门口听(感觉好无耻),听的过程中,也想了下自己的回答。

HR面试,其实就是了解下你自己的性格,价值观之类的,不会问你技术的问题的。面我的HR刚开始也是让自我介绍,这次,我想了另外一个版本的。自我介绍完后,就开始问我家庭情况,父母对自己的态度,自己最成功和最失败的事是什么,感觉大学和高中的区别是什么,上大学后收获最大的是什么,自己对自己的评价,工作城市,录取后要去的部门,为什么想进这个部门,还有没有其他的实习机会,如果都得到了offer,怎么选择,最后,让我问问题,我问了些转正,面试结果等方面的问题,然后就结束了,总共聊了大概45分钟左右,感觉还不错。

面完HR后,虽然说不怎么刷人,但是也是很担心,在T派上找到了一个西安等offer的群,加了进去,也关注着其他人的情况,发现基本都是这个状况,我也就不那么担心了,后来,还有个人把西安HR领队的拉进群里了,解答了好多问题。等了3天吧,收到了签约的短信,过了几个小时,收到了深圳打来的电话,就是确认下信息啥的。到这里总算结束了。

等腾讯offer的过程中,还去阿里面了一下,刚好腾讯和阿里面试的地点只隔了一条马路,很近。可能是腾讯的面试太过顺利,把rp都用完了,阿里的面试就有点坑了。阿里一面就跪了。下面大致介绍一下阿里的面试经历。

面试的基本流程也差不多,不过,阿里的组织感觉没有腾讯做的好,有人说,阿里面试的地方就像一个菜市场,阿里面试的地方是一个大厅,里边摆了好多桌子,距离差不多刚刚好,而且,说话基本上是可以听见的;而腾讯是在面试官住的房间里边面试的,感觉要好一点吧。

面试的时候,也是先让做自我介绍(和之前面腾讯的版本差不多),然后,就开始问我问题,看我简历上说了用过linux,就开始问我关于linux的问题,问我linux程序加载进内存后,有哪些区域,我大概说了下有代码区,静态存储区,栈区,为进程私有,地址向下生长,大小一般为1M左右,堆区,为进程共享,地址向上生长,可分配的内存理论上要无限大,取决于物理内存的大小(这里我说错了,当时面试官指出,每个进程要有一个虚拟的地址空间,这个地址空间要和字长对应,堆的大小要取决于字长),还说了局部变量在进入作用域自动在栈区分配,超出作用域自动回收,而堆区需要使用malloc等函数手动申请,使用free函数手动释放。然后,问我了一下关于计算机存储结构的问题,说CPU速度很快,而硬盘读写很慢,问我在存储方面,CPU读取数据的访问顺序是什么,我表示顺序为:寄存器->缓存->内存->硬盘;关于缓存,没有说明缓存的分级,经过提醒才想到有一级缓存,二级缓存,三级缓存,还问我这些存储器的访问时间的差距大概有多大,我就大概说了下,他问我是了解过具体的数字,还是只有这个概念,不能定量确定,我说是只有概念,不能确定准确的差距;最后问我知道哪些外存的形式,我说普通硬盘7200转,5400转的,还有SSD,光盘,U盘等;然后,问我有没有了解过多核系统的问题,我说没有了解过,这个阶段基本就结束了。

接下来问我做过什么项目没有,我说在linux下用c语言写过用curl抓取网页的东西,解析html,存到数据库里;还写过用curl库模拟http登陆,提交表单之类的程序。我说其中用到了一些linux系统调用。问了项目中一些具体的细节,我说是用linux系统调用实现的。

下面就问我用什么编程工具,我说在linux用vim,gcc,gdb,makefile等,就问我关于gdb的命令,我大概说了下,说完后,就问我有没有想过gdb是怎么实现的,我当时说了半天也没说清楚,然后他给提示说操作系统有什么东西可以使程序停下来,暗示了好久,我才意识到时中断。接下来问我有没有看过linux内核源代码,我说没有。然后,他就问我有没有学过目前比较流行的技术之类的,也没明确说什么技术,自己也确实没学过,就说没有,然后说感觉要先打好基础,然后再去接触一些比较高级的技术。前面关于技术的差不多就问到这里了,下来想想感觉真是被虐成狗,不过当时面试官也挺和气的,感觉也没怎么糟。

问完技术就让我写代码了。第一题是写一个宏,求一个结构体类型中指定的成员在这个结构体中的偏移量。当时想了一会,没有思路,面试官说,这是linux内核中的一个宏,给定一个结构体类型,和一个这个结构体中的成员名,返回偏移量,还解释说,linux内核中的结构体是很大的,有时候只知道结构体中成员的地址,想要知道整个结构体的地址,就要使用这个宏。下面是我根据面试官的说法写的,还真是这样。具体思路是,将0强制转换成这个结构体的指针,来访问这个结构体中的成员,然后,取这个成员的地址,得到的就是成员相对结构体起始的偏移量,不过,按照这个宏,貌似是访问了地址为0的空间,但起始编译器是聪明的,不会真的去访问,而是根据结构体在内存中的内存布局直接得到偏移量就ok了,OFFSET宏定义如下,注意运算符的优先级:

#include <stdio.h>

#define OFFSET(type, field) (&((type *)0)->field)

struct Node {
    int a;
    char b;
    short c;
    char *d;
}; 

int main(int argc, char *argv[])
{
    printf("%p\n", OFFSET(struct Node, a));
    printf("%p\n", OFFSET(struct Node, b));
    printf("%p\n", OFFSET(struct Node, c));
    printf("%p\n", OFFSET(struct Node, d));
    return 0;
}

第二个题目是给定一个二叉树,判断给定的二叉树是不是一个二叉搜索树(BST),当时脑抽了,认为BST就是一个节点的左子节点小于这个节点,右子节点大于这个节点就行了,然而,其实是一个节点的左子树的所有节点都小于这个节点,右子树的所有结点都大于这个节点。我是按照第一种方法写的,当然是错的,后来经过提示,意识到错了,纠正了之后,问我有一个BST要得到一个升序序列,是什么遍历,我说了好几次,才说是中序遍历,其实一个判定一个二叉树是不是BST,就只需要中序遍历,记录前一个节点的值就行了,和现在访问的比较,只要全部小于就是一个BST。真是对二叉树的理解还是不够深入。不过感觉leetcode里应该会用很多这样的题目。

第三个题是一个函数指针的题。相对来说比较简单,让写一个函数指针,这个函数指针指向一个有两个int参数,返回一个char指针的函数。写函数指针有一种技巧,就是先写这样一个函数f,最后将函数名替换为(*pf)就行了,这个方法是在C primer中提到的。这个答案如下:

char *(*pf)(int a, int b);

做完题目,就结束了,让我问问题,我就问面试结果什么时候出来,他说在外边等着。然后我就在外边等通知,等了差不多30分钟,还没见消息,这时看到了面试指引,上边说如果面试完10分钟没有消息,就到签到处询问,我去问了,然后就说,今天的面试已经结束,你可以走了,当时就知道是被刷掉了,走后,过了2个小时左右,收到了短信,说面试已经结束,在网站上查的状态是待回绝,就知道是挂了。不过阿里比腾讯好的一点是当时就可以知道结果,不用等那么长时间,反正感觉等消息最蛋疼了。

经过这两次面试,大致也知道了自己在哪些方面的不足,从总也学习到了不少的面试经验,感觉也是不错的。

最后,就是说,去面试一定要有自信,要抱着挑战自我,挑战offer的心态去面试。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值