毕业以后的创业阶段算是告一段落了, 没有获得任何物质上的汇报, 可是经验教训获得了很多. 公司解散以后获得了两个面试机会,一个是创业公司的,另一个是ThoughtWorks的. 第一个创业公司的面试是公司原来的老板推荐的, 这个创业公司的创始人都比较牛x, 面试过程也很是的诡异, 面试结果被pass掉了. 第二个面试机会是朋友的推荐ThoughtWorks的面试机会, 这个面试拿到了offer. 第一个面试机会没有怎么准备, 并且后续公司面试过程当中的印象也不佳,因此没有什么好总结的. 第二个TW的面试机会, 一方面不能给朋友抹黑, 另外一方面scala圈子里几我的都在TW, 因此一直印象还ok. 索性花了三天的时间稍微准备了一下. 下面记录一下我是如何准备TW的面试的. html
TW的面试流程基本上是这样的: 电话面试 --> 笔试题[编程题目] --> 面试[logic test + code review + 技术面试 + 公司文化交流] --> 等待宣判. 整个流程从面试开始(2014年9月17号)到拿到offer(2014年9月28号)一共经历了10天左右的时间. 以前在网上看到过关于TW的风声:最难面试的IT公司. 看到这个帖子以后内心难免有一些发憷. 不过既来之则安之, 好好准备一下吧. 不论面试结果怎么样, 至少经历了这个面试咱也是经历过了最难的面试, 也算是"没有吃过猪肉,也见过猪跑" 的人了. 反正面试就这样紧锣密鼓的开始了. java
我是9月17号下午接到的电话面试, 电面的hr姐姐声音甜美, 接到电话后感受陌生感消失了一大截. 电话面试大概经历了40来分钟左右, 内容也是老生常谈的内容: 自我介绍, 工做经历, 职业规划等等.这应该是比较大的三个主题. 其中hr姐姐中途会展开对每一个话题进行一些详细的讨论. 比较具体和详细的问题都已经忘却, 可是这个环节总体是比较轻松的, 有啥说啥就好了, 不须要任何准备. 可是前提是本身说的话是要负责人的, 言外之意不能说假话, 要如实的描述本身的经历. 这个环节完成以后通常会拿到编程题目, 编程题目是三道题你本身选择一个本身想作的就好了, 三天以内提交上去.编程题目的具体内容是不能透漏的, 总的来讲都不是什么特别刁端的题目, 若是有过一些编程经验均可以完成. node
我在编程环节有点小题大作了, 三天的时间我是这样分配的: 第一天全力的思考这个题, 揣测考官的出题意图, 琢磨题里边的陷阱, 思考应对方案; 次日设计实现方式+编码, 总的来讲能拿来装逼的就用一下; 第三天测试+设计文档. 提早透漏一下这个题目是下一个环节code review的素材. 当我经历到了code review环节我才发现, 以前基本上全部的concern都是没必要要的, 整个题目过分设计. 因此, 拿到这个目, 只须要把它当成平时你见到的一个平常问题就行了, 最天然的实现方式才是最优的实现方式. web
接下来的面试环节才是重头戏,也是我准备比较充分的一个环节. 这个环节的面试思考过程比较有意思, 分享一下. 总的来讲就是: 知己知彼. 搞清楚本身的能力, 而后站在对方的角度去像一些合理的问题. 面试
提纲 sql * 首先第一个环节: Logic Test. mongodb 由于以前有两个朋友到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. 软件架构的经验?怎么理解软件架构?他具体的工做是什么?你会怎么作? 软件架构=业务建模+技术解决方案。首先一个软件的出现必定是旨在解决用户某种需求,因此首先弄清用户的需求,而后构思统1、规范的解决问题的流程,这是业务建模阶段。 对于技术解决方案则是如何用技术更好的支持这种业务模型。 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首先会总结一下你整场面试的表现, 那些地方表现比较好, 那些地方不是太好, 须要提高的. 仍是蛮负责的, 由于不论面试结果如何, 对于一个面试者来讲经过面试找到本身的长处和不足才是最重要的.