本文内容

  • 面试流程
    • HomeWork
    • Pair Programming
    • Face-to-face Interviews
  • 面试心得

年前朋友问我,要不要试试 ThoughtWorks 澳洲线的岗位。对于这家号称“ 世界上面试最难”的公司,多少还是有一点畏惧,直到朋友安慰我说,它们这次有中级的岗位,还是可以试一试的,梦想还是要有的,万一实现了呢?自此,我凑齐了西安. NET圈子里的四大“天花板”公司的面试: 葡萄城活跃网络奥博杰天ThoughtWorks ,而对于我来说,亦有幸见识到世界上最难的面试,虽然后来事实证明,这个世界上没有太多的逆袭,可我还是想分享一下我的这次面试经历,因为它让我知道,在过去的两年里,我在哪些方面取得进步,在哪些方面存在不足。当我写下这篇博客的时候,我即将在今年夏天迎来我的29岁,果然我还是希望自己能再努力一点,因为不想让平行世界里的某个人失望。

面试流程

关于ThoughtWorks 的社招流程,大体上由HomeWorkPair ProgrammingFace-to-face Interviews 3个部分组成,其中,HomeWork,即家庭作业,原则上给3天时间来完成,不过据说可以向 HR 申请更多的时间来完成。Pair ProgrammingFace-to-face Interviews 通常是安排到同一天来进行的,前者时间为1.5小时,即传说中的结对编程,面试时会有一左一右两名面试官看着你现场写代码。后者时间为1小时,即传说中的技术文化面试,考察技术的深度、广度以及对 Thought Works 敏捷文化的认同感。

HomeWork

2月18日,下班以后接到HR小姐姐的电话,在明确了我投简历的意向以后,我收到了HR小姐姐的邮件,基本上就是一个家庭作业,三选一提交,需要在三天内完成。我选择了Conference Track Management 这道题目,因为白天要上班,所以,我为此而连续肝了三个晚上。

坦白说,不同的阶段对这道题目的理解是不同的,在做家庭作业的阶段,你以为这道题考察的是职责分离和设计模式;而等到结对编程的阶段,你终于意识到,这其实是个背包问题。当然,这并不是说我会错了意,考虑到面试官有上帝视角,他们更容易看清楚问题的全貌。或许,面试官想最想看到的,恰恰就是你从冰山一角到目窥全牛这一瞬间的反应。

当我接到HR小姐姐的通知,这份作业Review通过时,我内心是非常激动的,因为这意味着我获得了去ThoughtWorks面试的“入场券”。可当我事后再以上帝视角去看待这个题目,我内心又变得非常难过,因为无论怎么看这份作业,都会觉得它设计得并不好,尤其是当它引入弹性时间这个因素以后,我一直深陷于如何从Part 1 到 Part 2,是不是按 Part 2 重新设计会更好一点?此时此刻,终于能理解面试官反馈的,关于扩展性方面的问题。

关于这部分,我个人建议多多关注:

  • 编程风格:编码规范、项目结构、代码坏味道等。
  • 语言特性:澳洲线岗位需要熟悉 .NET Core,所以,我使用 .NET Core 完成整个项目的编写。
  • 设计模式:选择合适的设计模式,遵循 SOLID 原则。
  • TDD:一定要有单元测试代码,这一点TW最为看中。如果写的好,一定是加分项。建议遵循AAA原则来编写用例。
  • 程序满足要求:程序一定满足题目要求,可执行,运行结果满足题意,这是最基本的要求。

Pair Programming

提交作业后,等了一周多的时间,1月29日,HR 小姐姐终于联系我了,正如我上文所述,当时听到这个消息非常激动,因为终于有机会去 ThoughtWorks 这家世界上面试最难的公司去看看,ThoughtWorks 西安办公室位于环普产业园,这个地方相信大家都非常熟悉啦!当时算上周末,我给了自己 5 天时间去准备面试,因为我觉得面对 ThoughtWorks 的面试还是要重视一点,虽然后来好多问题都没有被问到。

结对编程是基本上就是,两个面试官一左一右地坐在你旁边,采用聊天和探讨的方式一起写代码,刚开始本来是用电视投屏“直播”的方式,后来因为 HDMI 接口接触不良的缘故,两位面试官干脆就直接看我电脑屏幕啦!在这个环节,个人感觉解释编码思路花时间太多,重构完有一个用例没有通过。最重要的是,家庭作业阶段的设计不利于现场新需求的开展,所以,这些因素综合起来,导致我结对变成这个部分表现得不好,希望大家引以为戒啊。

整个结对编程时长为一个半小时(1.5h),在这段时间,你需要讲解编码思路完成代码重构完成现场作业,时间上还是非常紧凑的,回想起那天下午的两个半小时,有种像参加高考的感觉:你以为时间会很长,结果发现时间完全不够用。看起来轻松的氛围下,其实在不经意间考察你的沟通能力、工程能力和学习能力,ThoughtWorks 的面试,往往就是这样的朴实无华且“有趣”……

对于这部分,我个人建议多多关注:

  • 工程能力:语言特性、调试能力、设计能力等。像TW非常重视快捷键的使用,频繁使用鼠标会拉低印象分。
  • 沟通能力:善于倾听和表达、以及理解需求的能力,需要你在面试官的引导下完成需求确认,这个阶段一样可以展示你技术的深/广度,但建议最好长话短说。
  • 学习能力:要求你对TDD、敏捷开发等有一定的好奇心,面试官教给你的新东西/思路,能否举一反三、学以致用,我是在重构的过程中得到了面试官的指导,对此我表示感谢。
  • 适应能力:能否以开放的态度接受面试官的重构意见,当意见不一致时,能否有理有据地、自信地表达你的观点,我遇到的问题是,面试官认为我混淆了职责分离和组件依赖。

Face-to-face Interviews

结对编程环节结束以后,正当我还在关注那个失败用例的时候,两位新的面试官就走了进来,就这样,我迎来了那天下午的“技术文化面试”,考虑到天气的原因,我那天穿了一件鬼灭之刃的卫衣就去参加面试了,可那个小房间的闷热还是让人焦躁不安,一杯放凉的白开水,完全不足以缓解那种闷热的感觉。ThoughtWorks 的办公室和大多数外包公司的办公室没有什么区别,不同的是,它的办公室摆满了各种 O’Reilly 的动物书,至少在氛围上确实像它对外所展示的那样重视技术。

在这个环节,我遇到了很多的开放型问题,譬如你经历过的、印象最深刻的项目是什么你在项目中遇到问题以后都是怎么样去解决的你所在项目的人员配置、研发流程是什么样的……等等,虽然一开始还是经典的“自我介绍”,可我感觉我在回答这些开放型问题的时候,缺乏一种系统性思考或者某种方法论,它和回答技术问题不同,有时候我们需要层层展开、关注细节,可是在这样的问题上,它需要的是简洁而准确的答案。面试期间,面试官不止一次提示我听清楚她的问题,难道真的是我的沟通能力出了问题吗?

坦白来讲,这次我准备的很多面试题都没有被问到,我以为至少会问一下.NET Core、微服务 和 DDD 这些东西的。我同样不太明白的,是关于项目经历方面的,为什么面试官会认为,工作中主要负责的内容就是由我一个人单打独斗来的呢?我承认我这几年,性格上收敛了许多,没有了攻击性和对抗性,变成了一个非常随和的人,可我本质上并不是一个喜欢兜售或者推销的人,我并不觉得无法口若悬河是缺乏自信的表现。后来,面试官就考察了一下我的口语,本来就是口干舌燥,说到为什么选择 ThoughtWorks 的时候,大脑有一点卡壳,一边在组织中文,一边在想怎么翻译成英文,还有什么比结结巴巴地说完一段英语更让人难过的呢?

对于这个部分,我个人建议多多关注:

  • 系统思考:结合工作经验,不断去提炼类似架构方向、敏捷开发、项目管理方面的内容,不要永远局限在一个点上看待问题,不管是表达还是编程,都采用系统性、结构化的思路来梳理,要做到清晰、准确、完整。
  • 自信:ThoughtWorks 是一家咨询服务公司,所以,很多研发都是顶着咨询师的头衔,个人觉得还是自信一点,会就是会,正常交流,不会的话,就虚心接受,表现出后期愿意去学习的状态。
  • 协作能力:能否影响和带动团队中的人一起学习、成长,ThoughtWorks 盛行学习和分享的文化,你一定听说过它们的技术雷达、洞见。
  • 沟通能力:这体现在你能否和客户正常地沟通、能否和团队成员达成有效的协作,虽然程序员都不大喜欢说话,但你至少应该能传达出正确的声音、能理解来自别人的观点。
  • 动机:对 ThoughtWorks 的意愿性/认同度,为什么会考虑 ThoughtWorks 等这些问题。

面试心得

其实,当天面试一结束,我就知道这次面试大概率是凉了。回去的路上,我和老大哥说了我面试的过程,老大哥说,“让我冷静,要对自己有信心”。果然,第二天下午,收到HR小姐姐的回复,说面试没有通过,看了下面试官反馈的意见,主要是在结对编程过程中重构做得不好,对重构的意义不太明确;其次是面试官觉得我在沟通方面还不够大胆,希望我可以在发展他人方面做出改变

听到这话,怎么突然就有种传销的感觉呢?说到影响别人,从12年开始写博客至今,我自认为我的博客还是帮助到了很多人,可能面试官一直觉得我在单打独斗吧,都2021年了,早就不是求伯君、雷军这些前辈们单打独斗写软件的时代啦,所以,果然还是我的表达出现了问题吗?我的朋友们经常批评说我沉迷于技术无法自拔,可我同样见过30多岁怕别人问原理的“中年”程序员,原本这个行业因为门槛低而越来越内卷,而这个圈子里的人又不以技术为重,有太多单纯为了钱而进入这个行业的人。可当整个行业都越来越“体力”劳动的时候,有很多浮躁的人跑来你面前说,技术并不重要类似的话,这个世界到底怎么了呢?

我想说什么呢?我认为技术因素和非技术因素都很重要,其实写作一直是我练习表达的一种方式。也许,在那些能言善辩的人眼中,我们这些“闷葫芦”都是些内向的、不太会沟通的人吧!这次面试结束以后,我打算找点系统性思考方面的书来看看,继续背单词增加词汇量,利用空闲时间来练习口语我从来不认为,一个技术人员努力钻研技术有什么不对,因为这是一个技术人员的基本功。沟通能力能做到妙语生花是一种艺术,而我,追求的目标非常简单,即有条理的、清晰的、结构化的表达,我不追求所谓“高情商”的话术,人类时常因为这些模棱两可的字眼而相互误会,因为信息失真,因为信息冗余。当然,此刻我的首要目标是,完成那个家庭作业的重构,因为它写得实在是太糟糕啦!

记一次失败的 ThoughtWorks 面试经历相关推荐

  1. 换工作记(五) --------- 华为社招2008面试经历

    =================== 特此声明:本文仅代表个人观点,不涉及商业意图和利益 ================== 这一次的面试经历准备采用倒序的方式来讲述. Result: 笔试,技术 ...

  2. 记一次蚂蚁金服面试经历

    蚂蚁金服大数据数仓岗位的面试经历 一.前言 本人一直在外企做传统数仓也差不多十年了,技术栈都是以关系型数据库和商业工具为主.看着日新月异的大数据技术的发展和数仓架构的不断迭代,想跳到互联网企业看看去接 ...

  3. 【面经】记一次字节跳动前端面试经历

    文章来自公号粉丝,本文转载自他的博客. 博主找我修改简历,给他提了一些建议,不久他就收到了字节跳动面试.(不知道是不是提的建议有效果--) PS:文中加了一些我的注释. 正文如下: 太长不看版 对于实 ...

  4. 设置好网络协议了为何网络还是不通_记一次菜鸟网络的面试经历

    我是一个不太爱折腾的人,因此在一个公司待久了,就不太会轻易跳槽.正因为如此,我在上家公司待了整整三年,在这里,认识了一群可爱的人,便更不舍得离去. 但因为公司属于传统企业,技术上并没有太大挑战,个人也 ...

  5. 【面经】记一次字节跳动后端面试经历

    太长不看版 对于实习招聘(甚至校招)来说,项目经历可能是获得面试的敲门砖,但是基础绝对是赢得面试的通天索. 即使是实习招聘,白板写代码也很可能逐渐成为主流面试的标配,平时要有意识地锻炼这方面能力,要不 ...

  6. 记一次失败的夏令营面试

    首先介绍一下本人情况 西北某211信通相关专业 排名:1/40(实验班) 四六级:600+ 奖项:几个高数类奖项.国家奖学金.美赛H.一些校级奖项. 科研:0. 总的来说个人还是比较水的,获得的竞赛奖 ...

  7. 记一次失败的HCIE-RS面试记录

    今年注定是个不平凡的年份,从去年听说HCIE-RS要改版后,就开始急急忙忙的准备着HCIE了.4月份出的LAB成绩,预约的7月份面试考位.结果5月份左右一则消息发出,说改版了.没面试了!彻底是让人心态 ...

  8. 记一次难忘的大厂面试经历

    我有一个做软件测试的同事,今年已经工作了3年的他,有一天跟我讲起作为一个计算机科班出身的测试猿,能够成功杀入这个行业的故事,我觉得他的分享还蛮有料的,对各位同学很具有借鉴意义,所以今天以他的口吻,对你 ...

  9. Java程序员考研失败后的面试经历,oppo、VIVO、等面经

    温馨提示:有些可能会遗漏个别问题,都是最近一周的面试,有点忘了. 浪潮(一面挂) 你是网络工程的?对网络很了解? 解释一下什么是广播域 怎么划分子网 说一下CSS的几种分类器 数据库中有哪些聚集函数 ...

  10. 记一次失败的小米面试

    直接上面试题吧,一面面试官很nice,有不会的会耐心引导,可惜自己太菜,二面面试官很快结束战斗,让我拍屁股走人了,自己水平太菜,以后继续努力吧! 一面: 1.介绍项目 2.说下索引的优点,自己谈的建立 ...

最新文章

  1. Spring的常用下载地址
  2. 基于windows 2012部署oracle 12.1.0.2 rac历险记
  3. QTP的那些事--通过WMI获取session中的用户信息的验证码
  4. python详细安装教程环境配置-python环境安装详细步骤
  5. 苹果电脑显示500服务器错误,VS For Mac 运行项目出现 HTTP 500错误
  6. 非整数倍数数据位宽转换8to12
  7. 2-05 使用固态存储SSD或PCIe卡
  8. oracle job定时报错,Oracle Job定时任务的使用详解
  9. chrome下老是弹出网页显示 true
  10. 安装deepin_deepin使用笔记,安装steam客户端
  11. 图像色彩空间之RGB与HSI
  12. 微信小程序 css边框阴影,微信小程序|CSS的内边距和圆框
  13. iOS开发之开源项目链接
  14. 20.UNIX 环境高级编程--数据库函数库
  15. 【转】用C#获取浏览文件夹对话框
  16. Golang + Qt5 桌面开发终极解决方案
  17. 全套Java基础视频教程,2020最全的java自学路线图
  18. 奥维互动地图谷歌图源,通过自建Cloudflare Workers反代实现墙内访问 - DaPeng‘s Blog
  19. 转载:为某燃气公司做的一部卡通角色广告动画
  20. C++ 重载操作符 <<实现模拟输出语句: cout << endl;

热门文章

  1. 手把手教你做出数据可视化项目(一)页面布局
  2. 问题:加入导航条后webView的UIWebBrowserView位置偏移
  3. 球体积公式推导(积分)
  4. 计算机考研专业课靠什么,2021计算机考研:这4个科目 各科该如何备考?
  5. 微型计算机是嵌入式吗,什么是嵌入式计算机
  6. 51nod 1459 1212
  7. linux 删除开机密码,6种清除开机密码方法,总有一个适合你
  8. php 数据透视表,无法打开数据透视表源文件怎么解决
  9. jQuery创建表格
  10. 两步解决:PDF旋转后怎么保存?