记一次西安thoughtworks的面试经历


作者:xcbeyond
疯狂源自梦想,技术成就辉煌!微信公众号:《程序猿技术大咖》号主,专注后端开发多年,拥有丰富的研发经验,乐于技术输出、分享,现阶段从事微服务架构项目的研发工作,涉及架构设计、技术选型、业务研发等工作。对于Java、微服务、数据库、Docker有深入了解,并有大量的调优经验。 






  

好久没有更新简历了,于是更新了下个人简历,算是自我总结吧,这也是多年来养成的一种习惯,定期维护更新。简历更新后,很快就接到了很多电话(虽然简历设置了不对外公开),目前我还没有换工作的打算,除非有非常合适的机会,哈哈!所以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,可供大家参考。






摘抄邮件部分原文如下:

Below are three programming problems. Please read all three descriptions thoroughly then create a program to solve ONE of the problems. If you submit more than one solution, we will review only one.

Note:
For the solution, we request that you use Java, Ruby, C#, Python, Clojure, Scala or JavaScript.
There must be a way to supply the application with the input data via text file
The application must run
You should provide sufficient evidence that your solution is complete by indicating that it works correctly against the supplied test data

 

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的面试,真的是非常棒的面试指导,从中你会学到很多东西,如果有机会的话,不妨一试。