记ThoughtWorks失败之旅
2012年3月3日面试归来,在一次IT求职交流群讨论的时候,无意说了自己去ThoughtWorks面试失败了,顿时引来大批群众围观,问的问题实在太多了,看来大家都对TW很感兴趣啊,当时也没怎么回答那些哥们的问题,所以现在就把整个过程记录一下吧,也让自己怀念一下这次面试吧,也给那些好奇的哥们一个安慰,也给后来者一个借鉴。
总的说来,这次面试也让我见识了国外的大公司面试的特别之处(TW是特例,很少公司是这样面试的),好了,废话少说,进入正题。
投递简历之后就是苦苦的等待,大约一周之内会打电话来进行电话面试,这个很简单,就是很普通的人力资源面试而已,不是英文的,这个放心。因为今年TW正好准备在成都设立公司,所以我也是赶巧,而电话联系是北京打来的。而我正好又遇到一个感觉比较好的HR,因为我是在重庆,而要到成都去参加技术面试和能力测试之类的,所以这个HR就把所有的流程都给我安排在一天,还说会给我报交通费,当时还非常兴奋了一阵,因为一个很好的朋友也接到笔试通知,但是负责他的那个HR没给他说要报车费,这就是传说中的人品。
正常的流程是:1.电话面试;2.能力测试(非技术题);3.Homework;4.结对编程(技术面试)。而我的流程是:电话面试--Homework--去成都进行能力测试和技术面试;至于Homework和结对编程可能对于大多数人来说还有点疑惑,别慌,我会解释的。
能力测试(非技术题,全英文),其实说这个是非技术题目也是不够准确的,题目总共11道,分为3种类型,1个半小时完成;这个测试题其实不是太难,难就难在是全英文,题目全是流程图,各种循环推导;上面所提到的那个很好的朋友,因为一个单词不知道是什么意思,而几乎每句业务描述里面都有那个单词,所以他在这里就悲剧了;我可能也是因为人品的原因,因为我的技术面试时间已经安排好了,所以不管能力测试做得怎么样,你不可能不要我参加技术面试吧,呵呵,绝对的人品。
Homework是通过能力测试之后,TW会发给你3个题目,你从中选择一个进行编程,3天时间(据说可以申请延长时间),当然3个题目都是全英文的,求金山词霸帮忙吧(牛人除外),题目主要是考察你对面向对象的一个理解,其实对于应届毕业生来说,他们不会要求你的代码质量有多高,重用性有多强,偶然的一次机会在网上看见一个有8年工作经验的牛人去面试TW,在Homework中引用了大量的设计模式,但是他还是失败了;所以作为一个应届生来说那样做没必要,可能也没有多少人能够做到(牛人除外)。Homework中的3个题总的来说难度不是特别大,就看你需要多少时间理解整个业务逻辑了,主要是因为题目是全英文的,当时我还是和我老师(感谢一下我的老师:优哥)一起阅读题目,算下来花了40分钟左右的时间才搞懂整个题目,所以能够求助千万不要一个人死憋。在我看来Homework中有难度的地方应该是你怎么设计整个结构,怎样设计类,怎样封装才能尽可能简单的进行数据传递等问题吧。Homework做完之后按照要求提交就行了,技术面试的时候会用。
技术面试,这也是最牛B的环节,最蛋疼的环节。因为今年成都分公司还在装修,所以技术面试官都是从北京和西安飞到成都来进行面试的,面试地点就是在天府广场旁边的一个酒店。下午一点,进入技术面试环节。一进门,一位带眼镜的大叔(四十来岁吧,身穿短袖,短裤,赤脚)(天啊,这是3月份,你这个穿着真牛B,当然酒店里面是开了暖气的)立即起身问好和我握手;一位小哥(二十多岁吧,穿着很正常,皮鞋,衬衣)也和我问好握手,真热情,有点紧张;还有一位大妈(身着连衣裙)(啊,TW的人都这样吗,真牛);我还注意到一个特点就是他们的笔记本全是Apple(有钱人啊,是公司有钱还是你有钱,无所谓);小哥拿出我的源码,叫我引入到编译工具里面,首先是这3位牛人把我团团围住,叫我讲讲整个系统的设计与实现的思想,balabala说了一大堆。小哥拿出两张A4纸对我说:“其实你之前做的是题目的Part1,其实这道题还有Part2,这里是Part2,我们要你在一个半小时内完成第二部分”,我一看,又是全英文,满满的一张A4纸啊,全是鸟语啊,我假装淡定的给予他肯定的问答。首先给十分钟时间让我读题,读完之后给他们讲讲整个Part2的业务流程。读吧,箭在弦上,不得不发啊!迷迷糊糊的读完了,感觉很虚幻,这他妈想让我实现什么功能啊,然后开始给他们讲整个业务流程,期间小哥不停的对我所表达的业务进行梳理、指点,太感谢了,最后几乎是在小哥和大叔的帮助下把整个业务流程搞清楚了,但是时间已经过了一半了,可能在此时大叔对我的表现已经开始减分了;看得出来,这3位面试官中大叔应该是起决定话语权的人。大叔可能也感觉时间不太够了,就对我说“时间已经不够了,我们就不做整个功能了,就做···这一小块功能吧,我们采用TDD的方式进行,也就是测试驱动的方式”;我操,我只听说过数据驱动的方式,从来没搞过测试驱动,再次蛋疼了,在整个系统中我也写了几个测试,那也是恶补之后写的,根本不能够灵活的应用啊;“对不起,我不太懂测试驱动,基本上没使用过”,小哥对我笑了笑,开始在电脑上演示起来·····“懂了吗?如果还是不懂的话,你就只写实现这个功能的方法,然后再调用测试就行了”,好吧,我认输,硬着头皮上吧,大叔又问了一句“先给我说说你想怎样实现这个功能,好吗?”“balabala···说了自己的一个实现思路”,“好吧,你开始写吧”,····写啊,写啊,大叔又来一句“你学过Regular Expression吗?”,“懂一点”,“那就用Regular Expression吧,别用字符串来弄”,没办法,改呗,小哥帮我把网弄起了,说我如果遇到问题就上网找文档、资料,时间过得太快了,把方法写好之后,小哥就对我说“如果不太确定正确与否,你可以调用一下,调试一下嘛”,我根本就不懂你这个测试驱动,连调试都不会,怎么搞嘛,这确实是自己的原因,学的东西还很多;小哥可能看出了我心事,又主动的帮我写了两句调用代码,第一个测试通过了,返回true了,第二个测试就通不过了,大叔叫我赶紧改,时间只剩下3分钟了,我操,3分钟,怎么改。大叔可能有点不耐烦了,算了,我们不写了,结队编程环节就这样吧,我们再聊一聊吧。然后就是问我对这次结对编程的过程有什么收获等等的问题,然后又叫我给他们讲一个自己感觉学得还不错的知识点,给我一支笔,一面镜子,就在镜子上面给他们讲,我操,真犀利;期间肯定会提出各种为难的问题,反正我基本上是回答不上来,还是自己学得不够深入吧,学了一点毛皮就以为自己学得深入了,谁知道被别人一问就无言以对了(透露一下,我讲的是“事务”,因为这个知识点老师讲得比较深,所以我就拿来照搬了,但是因为一些细小的知识点根本就没考虑过,所以吃亏了),讲完之后又是吹牛,吹TW这个公司的一些情况,并且叫我对整个面试过程作一个presentation,说得我已经失望了,大叔说话的特点就是一句话里面夹杂着一个单词。
TW的整个笔试、面试就这样了。各位满意不,写得有点乱,将就看吧,别骂我就行。