美团面经
这段面试经历发生于9月16日。面试结束后当天,心中有不少感慨,本来想当天就写的,但因为实在太累了,又要忙学校实训的网站,拖到了3天以后。
那天是周六,翻了下日历,也就是9月12日,一周前。那天中午,我跪着考完了美团的在线笔试,题目实在是太难了!一堆的数学题和概率题直接把我打趴下。最后勉强做完了笔试,就不再想了,因为觉得没有任何理由让我进面试。
然而,第二天下午两点左右,我接到了“010”开头的电话号码。我预感到是美团打来的,就接了电话,很礼貌地说了句“喂,您好!”。果然,对面叫出了我的名字,是美团的HR打来的。我心想,这肯定是来做考后调查的,检测这些笔试题是不是自己做的,因为之前好像有看过一个防作弊的协议。可是事实并非如此,那边接着说,“恭喜你通过了美团的笔试”。我当时就惊呆了,一是没想到他们一天就批完了试卷,二是因为我超过半数的题不会,竟然拿到了面试资格,甚至事后我严重怀疑他们有没有好好批试卷。
HR打电话来是跟我约面试的时间的,看我那天有没有时间。因为我们实训可以随便请假,当然哪天面试都行。时间就定在了16号,3天以后。
拿到面试的邀请让我既兴奋又紧张,兴奋的是我一个非985非211的渣一本学生,竟然收到了面试通知,而且还是HR亲自打电话来的,相对于之前阿里巴巴发个邮件让我网上自己预约面试,我顿时对美团这个企业心生好感。紧张的当然就是面试内容了,之前我复习计算机各种基础、编程语言机制,也刷过算法题,专门针对面试,但是因为实在提不起兴趣,就坚持不下去了。而且美团毕竟是名企,薪水比BAT还高,那就意味着我要跟985、211最顶尖的毕业生竞争了。那就意味着,面试基本没有成功的希望,尤其是问到算法题,只能是gg的节奏。
就这样,紧张地度过了周一和周二,我对即将到来的人生当中的第一次面试忧心忡忡。我复习了一下网络、操作系统、数据库的内容,但是没啥进展。面试前一天,即周二晚上,我赶紧做了一份简历,然后很早就睡觉了。
就这样,熬到了第三天早上,我不到7点就起床了。正好一个室友跟我同时去医院,赶上了第一班校车出去,乘地铁去南大。
到南大以后,问了3个人,才找到面试地点,但因为我出发得早,到等待面试的教室才9点,而面试要到10点半。进去登记的时候,10点半一栏的人还是空的。
找个位置坐下后,我紧张地关注着周围的动态,连玩手机的心思都没有了。让我吃惊的是,黑板上写着几个霸面的名字,更让我觉得自己过笔试过得莫名其妙。
同时我注意到,周围很多人都在互相交谈,应该都是同学,更让我觉得自己一个渣渣学校的格格不入。教室里来来往往,都是9点钟那一批的人。还有人在准备3面。
等了一个半小时多,总算轮到我了。我把自己的简历带上去,hr说不用了,她那边有我网投时的简历。但我觉得那只是统一格式的通用简历,没写到我的特长,还是把自己的拿了过去,事实证明这真是一个明智的选择。
一个穿着绿色的印着“美团”的衬衫的人把我带到了面试的教室。那边已经有好几组人正在面试。再次让我惊讶的是,那个带我来的人就是我的面试官!他跟我并排坐下,像同桌那样面朝一个方向,不像网上那样是面对面的那种。面试官也跟我想象的不一样,不像一个多么资深的技术主管,更像一个没毕业的大学生,看上去还很有学生气。
一上来,跟我想象的一样,先让我作自我介绍。由于我早已准备好了,便从我初中毕业接触编程开始,到大一学习actionscript游戏开发,再到大一末开始学习Java和Android,直到大三的学习经历都说了一遍。面试官说了一句“看来你的开发经历很丰富啊”。接着,他说,“你来写一段程序吧”,便一边解释一边在纸上画了一棵二叉树,让我遍历第三层的结点。我一开始没有思路,就在纸上试着写常规的递归遍历的算法,写着写着就找到了思路,发现在递归过程中加入一个结点高度的参数,一旦高度等于3便输出。第一题过关。接着,又出了一个在字符串中找子串的题目,我用常规的遍历方法写了出来,因为也想不到更高效的方法,像KMP之类的早就不会写了。然后就是随意提问的时间,问到了Java里面的各种语言机制,问到了计算机网络里面的三次四次握手,UDP和TCP区别,get和post区别等等,都没有深问。因为问的很杂很多,面试官不时地会停下来想接下来问什么。最后他让我旁边教室等一下,一面过了。
才坐了没几分钟,我又被叫去了。这次的面试官看上去还是很有学生气,不过资历好像更老一点。他上来先问我一面感觉怎么样,接着出了一道编程题,给一个十进制数,输出转化为二进制后的最后8位。我没想到题目还是这么简单,提笔就写。写完后,面试官仔细地验证了一遍,我突然发现自己最后居然输出的是前面8位,便说了声不好意思,改了一下。但因为想不到更好的方法,还用了一个ArrayList,先顺序存到ArrayList里面,再逆序转移到数组。但还没完,面试官提示我,要是本身结果不足8位,要在前面补0呢?我只好又加了一个if。我写完后,他检查代码仔细得让我紧张,还打草稿一句句验算过去。接着,他出了第二个问题,自己写一个Stack类,要实现push、pop操作。我说,我看过Stack的源码,是用List实现的,他说,用系统自带的没意思,用自己方法实现。于是,我仿照ArrayList的实现方法,内部用一个数组和一个int型的size成员变量实现。面试的最后,他在简历上面划了两个功能,问我当时是怎么实现的,我大体地说了一下。他让我去旁边教室等一下,没想到这么容易就进3面了。
面完已经是12点左右了,教室后面开始传来饭香,好几个穿着工作服的美团的工作人员开始吃快餐。餐盒跟我平时点的外卖一样,严重怀疑他们就是点的美团外卖2333……我当然开始当然不敢吃饭,谁知道什么时候又被突然叫去面试。教室前面也有几个同学紧张地坐着,等着下一场面试通知。到了1点左右,我怕饿着面试影响表现,便开始啃带来的面包,啃了一半又怕太饱,便又收起来。不知又过了多久,1点半那一场都开始了以后,才轮到我。
我和两三个同学被同时领到一间教室前。等待过程中,我问了下旁边那个同学的面试方向,接着他便跟我攀谈起来。我得知他是研究生,面的后台开发。他感慨了一下最近找工作的不容易,也说了阿里等其他大公司招聘状况。我其实很想跟他多聊聊的,但因为是最后一面了,心里只想着待会儿可能的面试内容,也只是随便回应了一下。这时,他一个同学过来了,跟他讲了下三面问的东西。我也顺便问了下他,最后一面是不是技术面,他回答说三面都是技术面啊。这时我预感到了不测,既然三面也是技术面,那就意味着还存在被刷的可能,而且考虑到前两面都这么简单,我心里更慌了。教室里人也不少,估计是进3面的人本来就很多。
等了非常多的时间,我被叫进去了,坐在靠门的位置。面试官明显是个30多岁的主管,脸色也很严肃。他什么都没说,直接指着纸上一道题,让我做一下。我问他有没有笔,他说,你没带笔啊,但也只能把他自己的笔给我。我看了一下题目,是在数组中取一个位置,让这个位置之前的树的和与之后的和的差绝对值最小。我第一个想法便是遍历,就问了下能不能先用最直观的算法写出来。但他答道,你不用高效的算法怎么跟别人竞争啊。我只好埋头继续想,然而脑子里一片空白,无计可施。想了很久没有结果,我只好问面试官能不能给点思路。他什么都没说,翻到另一道题。题目很长,是一道情景题,说的是美团的酒店统筹安排问题,看了很久我才知道这想问我什么。然而要得出结果,算法太复杂了。加上旁边的面试官一言不发,自己写着什么东西,我感受到了一种深深的绝望,知道这场面试已经夭折了。我只能对面试官说,不好意思我做不出来。他让我说一下思路,我在纸上画了几条线段,只是讲了下题目是什么意思,坦白地对他说算法实在是写不出来。接着他又翻到下一道题,偏偏是我最不擅长的概率题,还是高中时学的几何方面的概率问题。我早就把概率忘得一干二净了,放在高中我肯定立马得出答案,但是现在却惨不忍睹。连续3题做不出来,我知道自己即将被赶走了,偏偏又给我一道题,只用一架天平,在12个小球里面找重量最轻的那个。这个小学奥数就做过,我轻松给出了答案。接下来,面试官先是问我Java看过什么书,在纸上写了几个Java主要的内容让我简单回答。然后他指着我的专业说,你是计算机科学与技术专业的,我说是的。接着问我数据库的左外连接和右外链接有什么区别,这个我知道,但是回答的时候语言组织很乱。接着又问,能说一下数据库里面的范式吗。这下我懵了,我们教材里面教的内容很少,根本没讲到,加上我平时对数据库关注少,只能回答我们没教范式。这下我感觉彻底被鄙视了,面试官很惊讶,“什么?你们第一范式第二范式都没教过?”接着又问我操作系统教过吗,计算机网络教过吗,我说都教过,他也没选这两门课里面什么内容问一下,估计也没问下去的必要了。最后他说,你的情况我都了解了,你可以回去了。我看别人的面经,最后一面通常都有“你还有什么想问的”或者聊聊非技术方面的问题,但都没有。我就主动问了一下,大概多久会收到面试结果通知。这时面试官笑一下,指着外面说,你得问他们人事部门啊。