「面经:面试 ThoughtWorks | 掘金技术征文」

11,382 阅读9分钟

前言

我是一名web前端程序员,说真的TW的面试真的很有意思,也很有心意,让我在整个面试过程中不仅仅了解到自己的优势,并且看到了自己的不足之处,先不说面不面得上,面试的过程都是一次很不错的经历。

一个想法的开端

早在大学里,就对于TW有了解,技术大牛,极客思想,扁平化管理,出国经历。非常的吸引我这样一个憧憬未来的大学生,于是当时校招的时候我便投递了这家公司,可是很不幸的是,简历并未通过,与之无缘。可是那深深的执念,一直存于心中,在一直憧憬着,这是一个想法的开端。

在毕业半年中,一直在成都知道创宇内工作学习,创宇氛围也很不错,人也不错,本想着在这个地方学习一段时间之后,再去想想去别处学习。可是在过年之前得知有机会能够进入TW,我就开始坐不住了。

提前的准备

在过年期间,大概一周时间,除去陪伴家人的时间,大部分时间我都在补充之前的一些遗漏知识点,大概补充如下

  1. css,less
  2. html5,语义化
  3. 浏览器适配,响应式设计
  4. JavaScript设计模式(工厂模式、适配器模式、发布订阅模式)
  5. react 生命周期
  6. redux 思想
  7. react-router4

在查漏补缺的间隙,我也在阅读一本可视化的书籍《不只是美:信息图表设计原理与经典案例》,推荐一下这本书,对于可视化的理论知识描述的还不错,运用了大量图表例子来进行理论知识的论证。

在整个过程中,我发现,思考给我带来的不止是知识层面的增长,还会给我带来一些宁静,安抚躁动不安的心,因为心里想的TW的面试是很难得,我这样准备能否通过,后来总结出了一个我觉得能够适用于大家的一句话:不论结果如何,我只需要在过程中尽情的展示自己,让别人多了解我,能够让别人记住有我这么一个人,那我就是值的了。

电话面试

过完年不久,我就将自己的简历发送给了TW的员工(内推),在一周之后便接到一个来电,是HR的电话面试,HR是一个大哥哥,很热情,问了我很多,当然我也是很热情的回答了问题,电话面试过程一定要让别人觉得你是一个交流正常,并且谈吐都很到位的人,这样给人第一映像才会很棒,问得最能够引起我关注的问题就是问我一般写文章怎么样,能否描述一下最近写的一篇文章的内容,很巧的是我那几天正好写了一篇读书笔记,也就是上面提到那本书的一个读书笔记,我便与他讲了讲我对书中的理论的看法。整个电面过程很nice,电话面试完了之后就告诉我将会发送一套编程题给我去做。

从电话面试中可以看出,主要考察的是与人交流的能力,还有就是平时没事儿的时候,也可以码码字,记录一下自己的所学与所得,分享与他人,在论坛上面建立一定的影响力这是提高自我价值的一个很棒的方法,这个观点在进入TW之后,更加的深入我心,因为在这里不是suggest去建立社区影响力,而是demand或者说是force大家要去建立自己的社区影响力,这或许也是TW吸引我的一个点吧。

两次做题

面试题很简单,要求如下:

  1. 按照发过来的设计图完美制作,也就是高保真百分百还原
  2. 制作一个类似todolist的功能
  3. 适配浏览器 ie9+ 以及市面上流行浏览器
  4. 响应式设计 至少保证1024分辨率

第一次作业,我想了很久,那时候没想到可以使用框架,于是在搭建完dom与调整完样式之后,我便使用原生js进行todolist的边写,想到运用react的state的方式来进行一次模拟。

在写代码中发现很多问题,比如之前很少使用原生js,不知道原生js获取的dom数组并不是真的数组,而是类数组,需要转换,还有一些浏览器兼容的问题,也是在做的过程中才遇到的问题,查了很多资料,最难的还是模拟react的state的存储模式,但是由于不是虚拟dom,每次数据更换之后,都需要重刷整个页面,这样才能够绑定上相应的函数,这样子做非常的浪费资源,但是由于交作业的时间快到了,也只有硬着头皮提交了。

提交完了这一次作业之后,自己点了一首《凉凉》,后面几天都一直没有反馈,后面实在忍不住,问了一下HR,HR说我没通过,但是他们觉得我有潜力,想再给我一次机会,让我重做一次作业,我的心里乐开了花。

接着我拿到作业反馈,思考了很久,想着要展示我的强项,于是开工,搭建react开发框架,最开始还是想着使用state,可是觉得state维护起来比较麻烦,毕竟有很多小组件,索性改成redux,维护store方便一些,而且这是我的强项,写起来轻车熟路,但是美中不足的是模态框我想的太死了,导致后面面试出了一些难堪的地方,稍后会讲到。完成这个只用了之前时间的一半。

提交了第二次作业之后,也还是惴惴不安的等待着。第三天,就有了反馈,恭喜,获得面试资格。

在笔试阶段,这个发题给人做的想法很不错,不仅仅考察了基础知识,还考察了学习能力,解决问题的能力,因为在解决实际业务中,难免遇到问题,如何解决问题的,这是很关键的,而且在做题之间一定要使用自己强项进行完成,不然会很痛苦。

两轮面试

到了面试的时间点,早早的来到公司等待着,当天面试的人只有我一个人,所以很快便被带进了会议室面试。面试一共两轮:

  1. 结对编程???

    首先进来的两位面试官,一个比较年轻,一个比较年长,然后面试的第一个流程就是 结对编程 ,编程的题就是接着之前写的那个作业,继续添加一个功能,这里就要重复用到之前的作业中的模态框,然而我之前写模态框以为它的业务场景就只有那一个,所以写死了,在这里很尴尬的把那个组建复制了一个出来重新修改。很快半小时左右我完成了任务,在这个编码过程中,两位面试官都很认真,会帮我指出不合理的地方,及时纠正,在结束之后还会讨论功能实现上的一下见解,而且两位的见解还会不一直,就是对于模态框的打开和关闭的状态是由谁去决定的这一个点,和他们讨论了一些,收获很大,而且在编码过程中,不会做过多的干扰,让我按照自己的思路去编写代码,很棒的一次结对编程体验。

  2. 问问题

    第二轮面试紧接着上一轮面试,等待了十分钟左右,第二轮面试官进来,拿着简历,按照简历上面我所写的一些东西进行询问,这里我尽量的展示了我在平时工作上的一些行为和见解,把平时怎么和团队之间工作协作详细的描述给了面试官,并且在询问到我专业知识的时候,由于之前的准备,回答我自己觉得还是满意的。不过有一个点,我觉得是我失策了,可能是因为回答得很顺利,在回答面试官问我最近看过什么书的时候,我脑袋抽了一下说的是一本设计模式的书,然后面试官让我说一下我印象最深刻的一个设计模式,这里我说了适配器模式,但是说的很烂。。。让我觉得很丢脸,而且我最近读的书是关于可视化的,我应该讲这本书的,脑袋抽风了,接下来就是让我用英文介绍一下自己,我整个人也是懵的,平时工作环境中根本没有使用英文对话,虽说平时看英文文档很顺畅,听英文还不错,但是就是口语这一块缺失锻炼,张口就是一口高中生英语水平,说完第一句,我就想挖个洞钻到低下去了,后来我下定狠心,一定要好好的练习口语。

总的来说,面试过程张弛有度,结对编程很新颖,英文介绍自己也很考验人,准备充分,然后尽情展示自己,把最好的自己展示给面试官看,让他们觉得你有潜力,觉得你身上有闪光点,我觉得这应该是面试最重要的了。

总结

可能对于每个人都不一样,对于TW,从简历投递,到笔试,再到面试,我觉得都是比较顺利的,中间没有出现不好的事情,可能我是真的运气不错吧,对于整个面试的经验总结我在上文中的每一个点得最后都做了相关的总结,这里就不再废话了。

进入TW已经4天了,感觉大家氛围都很帮,有免费早饭吃,很幸福,有提供高配mac电脑,任意翻墙,经常有大牛在一起讨论各种听不懂的神奇的技术,上下班不打卡很自由,团队人员分工齐全(PM,BA,DEV,UX...),各司其职,完成整个项目,很专业,这也许就是这个公司很专业的地方吧,接下来就是我探索TW的旅程,start the happy journey

掘金技术征文链接

juejin.cn/post/1