我是如何準備ThoughtWorks面試的

    畢業以後的創業階段算是告一段落了, 沒有獲得任何物質上的彙報, 可是經驗教訓獲得了很多. 公司解散以後獲得了兩個面試機會,一個是創業公司的,另一個是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首先會總結一下你整場面試的表現, 那些地方表現比較好, 那些地方不是太好, 須要提高的. 仍是蠻負責的, 由於不論面試結果如何, 對於一個面試者來講經過面試找到本身的長處和不足纔是最重要的. 

相關文章
相關標籤/搜索