我是如何准备ThoughtWorks面试的

本文分享了作者在准备和参加ThoughtWorks面试的经历,包括电话面试、编程题目准备、逻辑测试、代码审查、技能面试和企业文化交流等环节。通过详细描述面试流程和准备策略,展示了如何在紧张的面试环境中展现个人能力和优势。

    毕业之后的创业阶段算是告一段落了, 没有得到任何物质上的汇报, 但是经验教训得到了不少. 公司解散之后得到了两个面试机会,一个是创业公司的,另外一个是ThoughtWorks的. 第一个创业公司的面试是公司原来的老板推荐的, 这个创业公司的创人都比较牛x, 面试过程也非常的诡异, 面试结果被pass掉了. 第二个面试机会是朋友的推荐ThoughtWorks的面试机会, 这个面试拿到了offer. 第一个面试机会没有怎么准备, 而且后续公司面试过程中的印象也不佳,所以没有什么好总结的. 第二个TW的面试机会, 一方面不能给朋友抹黑, 另一方面scala圈子里几个人都在TW, 所以一直印象还ok. 索性花了三天的时间稍微准备了一下. 下面记录一下我是如何准备TW的面试的.

    TW的面试流程基本上是这样的: 电话面试 --> 笔试题[编程题目] --> 面试[logic test + code review + 技术面试 + 公司文化交流] --> 等待宣判. 整个流程从面试开始(2014年9月17号)到拿到offer(2014年9月28号)一共经历了10天左右的时间. 之前在网上看到过关于TW的风声:最难面试的IT公司. 看到这个帖子之后心里不免有一些发憷. 不过既来之则安之, 好好准备一下吧. 不论面试结果怎么样, 至少经历了这个面试咱也是经历过了最难的面试, 也算是"没有吃过猪肉,也见过猪跑" 的人了.  反正面试就这样紧锣密鼓的开始了. 

    我是9月17号下午接到的电话面试, 电面的hr姐姐声音甜美, 接到电话后感觉陌生感消失了一大截. 电话面试大概经历了40来分钟左右, 内容也是老生常谈的内容: 自我介绍, 工作经历, 职业规划等等.这应该是比较大的三个主题. 其中hr姐姐中途会展开对每个话题进行一些详细的讨论. 比较具体和详细的问题都已经忘却, 但是这个环节整体是比较轻松的, 有啥说啥就行了, 不需要任何准备. 但是前提是自己说的话是要负责人的, 言外之意不能说假话, 要如实的描述自己的经历. 这个环节完成之后一般会拿到编程题目, 编程题目是三道题你自己选择一个自己想做的就行了, 三天之内提交上去.编程题目的具体内容是不能透漏的, 总的来说都不是什么特别刁端的题目, 如果有过一些编程经验都可以完成. 

    我在编程环节有点小题大做了, 三天的时间我是这样分配的: 第一天全力的思考这个题, 揣测考官的出题意图, 琢磨题里边的陷阱, 思考应对方案; 第二天设计实现方式+编码, 总的来说能拿来装逼的就用一下; 第三天测试+设计文档. 提前透漏一下这个题目是下一个环节code review的素材. 当我经历到了code review环节我才发现, 之前基本上所有的concern都是不必要的, 整个题目过度设计. 所以, 拿到这个目, 只需要把它当成平时你见到的一个日常问题就好了, 最自然的实现方式才是最优的实现方式. 

    接下来的面试环节才是重头戏,也是我准备比较充分的一个环节. 这个环节的面试思考过程比较有意思, 分享一下. 总的来说就是: 知己知彼. 搞清楚自己的能力, 然后站在对方的角度去像一些合理的问题. 

提纲


* 首先第一个环节: Logic Test. 

    因为之前有两个朋友到TW面试过, 所以可以大概问一下这个环节的测试大概是什么样子的. (注: 不是咨询考试题的内容, 而是交流一下考试的过程. 在做logic test之前是要签署保密协议的.)


* Code Review

   这个环节需要自由发挥的空间比较大. 不过基础是清楚的表达自己的设计思路, 意图. 


* 技能面试

   完全不可测. 需要做的是: 回顾简历中自己所列举的技能list, 把每个点说清楚. 


* 企业文化交流

   完全不可测. 需要做的是: 认真的听对方说话. 


* 自我介绍 [必不可少]

你好,我叫XX,XX大学2012届毕业生。毕业后呆过两家创业公司,XX和YY。2012年4月-2013年7月,在XX担任开发工程师,主要做java web相关的一些开发工作;2013年7月-2014年9月,在YY担任技术负责人,主要工作是搭建IM工具的后端服务,团队管理,开发流程管理等工作。这两年的收获:接触一些新技术:scala相关的、node.js;了解到一些nosql技术(mongodb,dynamodb),分布式系统,软件架构,以及敏捷管理。通过我对tw,twer的了解,我可以感觉到三个品质:思考,践行,改变。我很看重这些品质。很幸运有这次面试的机会。


我可能会被问到的一些问题:

   1. 怎么理解敏捷?

   我认为敏捷要做的事情就是:优化流程和应对变化。优化流程主要解决沟通问题,时间管理问题。之前在我经常遇到开发出来的功能和需求不一致;一个功能承诺一个礼拜搞定,拖拖拉拉几个礼拜也不能交付。敏捷流程里不论是提出需求的方式,还是各种会议首先都要确保每个人员对需求理解是一致的;对于任务的拆分做到足够细粒度,保证时间可控。对于应对变化这块我目前没有什么太多的想法。


   2. 软件架构的经验?怎么理解软件架构?他具体的工作是什么?你会怎么做?

   软件架构=业务建模+技术解决方案。首先一个软件的出现一定是旨在解决用户某种需求,所以首先弄清用户的需求,然后构思统一、规范的解决问题的流程,这是业务建模阶段。

对于技术解决方案则是如何用技术更好的支持这种业务模型。


   3. 分布式系统中常见的问题?如何设计分布式系统?

   刚刚接触,理解不深。下边是我的理解:分布式系统就是对CAP三个指标做的一个这种考虑。

   分布式系统还要尽可能做到状态无关,状态相关以为着和某一台server的绑定


   4. scala和node.js怎么样?

   面向对象,同时scala提供了trait方便实现mixin。

   函数式编程让语法富有表达力

   方便的调用一些java生态圈里边的库。

   提供了akka这样的构建高并发系统的类库。


   对于nodejs的特性我想可能有两个:事件驱动+无阻塞IO。nodejs本身是单进程单线程的,通过事件驱动的方式实现异步编程,即单线程高效率地维护事件循环队列来实现。异步io机制则采用os层的异步io机制。做法就是向内核发送io请求,然后即可执行后续任务,当内核io操作完毕后通过信号或者回调将数据返回应用程序。


   5. 怎么看待NoSQL这个技术?

   NoSQL本身是专门用来存储数据的分布式系统,对比传统的关系型数据库:没有事务,没有Schema,高性能读写,集群能力。所以如果用nosql产品就意味着事务控制,scheme组合更多的放到应用系统中去控制。对于业务单一,事务要求较低的场景,可以选择尝试。

大概准备的就是这样的一张list, 整场面试下来准备的80%都是有用的. 自己发挥的空间也是蛮大的, 应该可以占到40%, 所以面试中心态也是非常重要的. 

    我是9月26号去tw公司面试, 拿到offer是28号, 那会我还在香山玩儿. 接到电话hr首先会总结一下你整场面试的表现, 那些地方表现比较好, 那些地方不是太好, 需要提升的. 还是蛮负责的, 因为不论面试结果如何, 对于一个面试者来说通过面试找到自己的长处和不足才是最重要的. 

转载于:https://my.oschina.net/u/217548/blog/324060

Thoughtworks公司面试题——MARS ROVERS问题火星探测器 C# 实现 VS2010工程,带界面展示! 一小队机器人探测器将由NASA送上火星高原,探测器将在这个奇的矩形高原上行驶。 用它们携带的照相机将周围的全景地势图发回到地球。每个探测器的方向和位置将由一个x,y系坐标图和一个表示地理方向的字母表示出来。为了方便导航,平原将被划分为网格状。位置坐标示例:0,0,N,表示探测器在坐标图的左下角,且面朝北方。为控制探测器,NASA会传送一串简单的字母。可能传送的字母为: 'L ', 'R '和 'M '。 'L ',和 'R '分别表示使探测器向左、向右旋转90度,但不离开他所在地点。 'M ' 表示向前开进一个网格的距离,且保持方向不变。假设以广场(高原)的直北方向为y轴的指向。 输入:首先输入的line是坐标图的右上方,假定左下方顶点的坐标为0,0。剩下的要输入的是被分布好的探测器的信息。每个探测器需要输入wo lines。第一条line 提供探测器的位置,第二条是关于这个探测器怎样进行高原探测的一系列说明。位置是由两个整数和一个区分方向的字母组成,对应了探测器的(x,y)坐标和方向。每个探测器的移动将按序完成,即后一个探测器不能在前一个探测器完成移动之前开始移动。 输出:每个探测器的输出应该为它行进到的最终位置坐标和方向。输入和输出 测试如下: 期待的输入: 5 5 1 2 N LMLMLMLMM 3 3 E MMRMMRMRRM 期待的输出 1 3 N 5 1 E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值