记一次西安 thoughtworks 的面试经历
好久没有更新简历了,于是更新了下个人简历,算是自我总结吧,这也是多年来养成的一种习惯,定期维护更新。简历更新后,很快就接到了很多电话(虽然简历设置了不对外公开),目前我还没有换工作的打算,除非有非常合适的机会,哈哈!所以 90%的面试机会我还是不由分说的拒绝了。
某天接到了一位猎头的电话,被告知是 thoughtworks 的岗位,问及是否有兴趣考虑。对这家公司之前还是有些了解的,以技术、咨询为驱动,敏捷开发而闻名,于是相互加了微信,了解一下总归没有坏处。于是,就有了接下来的经历,在此与大家分享一下,记录如下。(Homework、Pair Program、Face-to-face Interviews 真的是非常棒的面试指导,值得仔细阅读)
1、猎头初聊
猎头加了微信后,发来了 thoughtworks 介绍及岗位 JD,我主要看了下岗位 JD,岗位还是偏于技术为导向的,相对吻合,就答应可以考虑,先看看。
随后,猎头与我约定时间进行了电话沟通,沟通的主要内容:
thoughtworks 公司介绍
岗位 JD 介绍
个人情况了解
电话聊了将近一个小时,首先进行了简单的自我介绍,近期工作内容、所用技术栈、团队人员组成情况、平时遇到问题是如何解决的、自己的未来职业规划等等这些问题,反正关于个人情况问的特别细,不输于一场技术面试。
接下来,就是猎头介绍了岗位 JD 情况、TW 情况、以及 TW 面试流程的特殊性等。
电话聊完,猎头说接下来会把我的简历推送给 TW,有消息第一时间同步我。
第二天下午,就收到来自猎头的反馈,约定第一个环节“homework”的时间。
TW 面试流程:
1)homework: 自己私下三选一完成一个编程题目。
2)Pair Program(结队编程):现场与 2 个面试官,针对你 homework 提交的程序,一起结队编程,目的是从中考察你的实际编程能力。
3)Face-to-face interviews:现场与其他几个面试官,针对技术深度、广度方面进行纯技术的面试。
2、homework
就是一个 Home Test,TW 通过邮件给我发了一封邮件,里面有 3 道题,进行三选一,在 3 天的时间里完成,并按要求提交程序。
要求通过程序来解决对应题目的问题,编程语言不限,可以使用 Java, Ruby, c#, Python, Clojure, Scala 或 JavaScript,提供的程序是可运行、可测试的。
我选择的是第二道题目:Conference Track Management,程序已提交至 github 上(https://github.com/xcbeyond/ConferenceTrackManagement,可供大家参考。
摘抄邮件部分原文如下:
homework 提交后,大约过了一周多,给出了反馈,通过了,针对提交的程序给出了一些建议,其中包括一些优点、缺点(优化点)。
本环节考察点:
1)编程风格:代码规范、代码结构、命名、代码冗余度等。
2)语言特性:Java8 新特性、恰当的 API(如:String、StringBuffer)等。。
3)设计模式:最好能够引入一种设计模式。
4)TDD:一定要有单元测试代码,这一点 TW 最为看中。如果写的好,一定是加分项。
5)程序满足要求:程序一定满足题目要求,可执行,运行结果满足题意。
提醒:
该环节的程序,一定要完全理解题意,认真完成,虽说网上能够找到对应的题目及程序。如果发现抄袭,可能就直接 Over 了,更可况下一个环节还会问到更具体详细的东西。
3、Pair Program
Pair Program、Face-to-face Interviews 这两个环节都是同一天现场面试的,Pair Program 大约是 1.5 小时的时间。
由 2 个面试官和你一起针对 homework 环节提交的程序,进行结队编程。一边坐一个面试官(一定不要紧张哦),聊天式、技术探讨的方式和你交流具体代码写法、优化点,让你动手来写,偶尔面试官也会自己来写。
主要包括以下内容:
1)程序的设计思路:回忆下当时做的思路、最好提前顺理下表述。
2)程序重构:根据您的这个作业和您一起去重构(局部重构),重构的过程中,面试官会教你一些新的东西,比如 Java8 新特性、快捷键等。
3)现场需求解决:最后,面试官针对你的程序会给你一个新的问题,让你来实现。(给你的是一张纸,上面打印的对应问题,也是多选一,并且是全英文的)
本环节考察点:
1)代码能力:语言特性、debug 能力、设计能力。
2)沟通能力:善于倾听,体现出主动性。
3)学习能力:好奇心(TDD、快捷键、最近学习的东西)、学以致用的能力、举一反三的能力(面试官教给你的新东西,看你能否应用到你程序中)。
4)需求理解能力:在面试官的引导下,正确的理解现场需求,可主动现场确认。
5)灵活性:开放的态度、接受反馈的态度(先听面试官的意见,接受面试官的反馈、虚心接受)、意见不一致时,可以有理有据的表达自己的意见,也能考察你自己的自信。愿意尝试新的方法或者工具,主动写面试官之前教的一些东西。
最后,面试官会问有没有什么问题,可以问与结队编程编程相关的问题,如:重构相关的问题等,如果没有问题,就说没有问题(最好还是问一个问题吧,也能体现出你是个有想法的人)。
提醒:
1)一定要提前回顾程序的设计思路,需要清晰的表述自己的思路。
2)带上自己的电脑,确保程序是可以跑起来的,毕竟自己的电脑用起来更顺手。
4、Face-to-face Interviews
大约 1 小时。
主要包括以下内容:
1)自我介绍
2)介绍准备的项目例子:需要事先单独准备另外一个项目例子。
3)技术点考察:面试官会考察自己的技术深度、广度,包括对哪些技术的热情、团队管理等这些东西。
本环节考察点:
1)技术专长:根据之前的工作经验、项目例子去聊,可能像架构方向、敏捷开发的思想,包括一些跨语言的编程,然后是一些细节点,如:代理、缓存。技术热情,会问你近期有没有学习新的东西,然后为什么去学习,学习之后有没有实践,这块可能会问的比较细。
2)自信:很重要,一定要分清楚自信和自大的点。会就会,正常交流,不会的话,就虚心接受,表现出后期会去学习。
3)发展他人的能力:体现出团队的管理、一起成长、分享。
4)沟通管理能力:很看重,和客户的沟通、和团队的协作。
5)动机(motivation):对 TW 的意愿性,为什么会考虑 TW 等这些问题。
最后,面试官会问有没有什么问题,可以问,比如团队情况、用的是什么技术这类问题,一定不要问薪资、福利这些敏感问题。
上述就是关于我在 TW 的面试经历,记录了面试流程、面试内容、考察点,希望对你有用。TW 的面试,真的是非常棒的面试指导,从中你会学到很多东西,如果有机会的话,不妨一试。
版权声明: 本文为 InfoQ 作者【xcbeyond】的原创文章。
原文链接:【http://xie.infoq.cn/article/2e4da1a942a81f6526aa30de3】。文章转载请联系作者。
评论 (2 条评论)