成功入職字節跳動,分享個人八面面經心得!

今天正式入職了字節跳動。辦公環境也很好,這邊一棟樓都是辦公區域。公司內部配備各類小零食、飲料,還有免費的咖啡。15樓還有健身房。並且公司包三餐來着。下午三點半左右還會有阿姨推着小車給你們送下午茶。據說入職之後很容易長胖來着。不過若是想要保持身材的話,公司二樓還提供專門的健身餐。週二週四還能夠預定專業的按摩服務,有效調理頸椎和腰椎。生活服務得這麼貼心,感受在這裏就只須要好好工做就行了吧,哈哈python

爲何想去字節跳動

實際上,此次的工做變更並不在我計劃中。只是在四月份的時候偶然得知字節跳動上海要搬到合川路地鐵站附近,我就突然心動了。爲何呢,由於我家距離合川路地鐵站步行只要十分鐘。自己宇宙條待遇高名聲在外,也就是說,只要我能來這裏的話,人生最美滿的錢多事少離家近的不可能三角我能拿倆。因此在五月份的時候我就開始悄摸摸地準備面試頭條了。爲的就是之後能夠過上早上八點半起牀,而後慢慢悠悠走到公司還不遲到(可能仍是很早來的人之一)的生活。面試

固然,這是我爲何想去字節跳動的緣由。換算到大家本身的時候,大家也要想想是由於什麼想要換一份工做、想要去某個公司。爲了薪資?環境?平臺?仍是大公司的名頭?記住,無論是爲了哪個,都OK的。談錢不傷感情,目標明確,心智堅決之後,纔好圍繞着這個目標作一系列的準備。面試的過程當中每次面試官問我爲何想來字節跳動,我都是直截了當地說離家近,還說假如此次面不上,準備準備,過段時間再面試好了。反正大家公司就在我家旁邊,三年五載的可能都跑不掉,哈哈。算法

由於這種面上OK,面不上也沒事的心態,因此感受面試的時候個人發揮也好一些。自己就是一個互相選擇的過程,並且這個過程當中,公司方相對來講固定一些,由於他的招人標準不太可能會有太大的變化。拿我常常用來懟人的一個例子來打比方:我經常和別人說,搞技術開發,英語很重要。你須要英語來看最新的技術文檔,而且有些翻譯並不許確,你可能須要看原文才能理解什麼意思。有的人當時就會和我說,哎,惋惜我英語不太好。這個時候我會回,沒事,你如今英語很差不是你的錯,可是若是我一年之後,甚至兩年三年之後再來問你英語怎麼樣,要是你還和我說你英文很差的話,那你就得查一下本身的問題了。你根本就不想着學英語,英語怎麼可能會好?數據庫

類比下來,若是你根本不想去這個公司,那你怎麼可能來到這個公司?若是你真的想去一個公司,可能如今這個時候你暫時不知足要求,可是沒事,只要咱知作別人是啥要求,咱認真學習,好好準備,一年之後再面試,兩年之後再面試,甚至三年、五年之後再來試試,均可以的。人最怕的不是沒有達成目標,而是沒有一個真正的目標。因此,換工做以前,你要想清楚爲何,而且提早開始準備。編程

我準備了些啥?

其實我有好長一段時間沒有正規地面試過了。三年前從數雲換到GIO的時候,由於簡歷上的相關技術太過於匹配,因此基本上就和CTO聊了聊就肯定過去了;後來再回數雲的時候,也就和總監喝了一下咖啡就回來了。也就是大約5年的時間裏面,我沒有正規地接受過面試。因此在準備投字節跳動以前,我投了幾個公司作了一下熱身活動。記住,這個時候其實不須要有啥心理包袱。由於自己候選人面試成功的可能性比較低,一個合適的能夠面試的人選他們也很樂意看看,並且萬一你確實想換工做,可是心儀的公司面不上,而熱身活動的公司拿到了offer,你也能夠考慮考慮去看下。而且這個時候你沒有任何的心理包袱,由於反正你也就是來面試看看的,因此面試時候的發揮可能也會更好點,所以說不定最終拿的offer會比最後想去的那家更好呢?設計模式

固然這裏面不包括我。我第一次面試的時候就被血虐了T-T。參加中間件比賽的時候,我用的netty作的實現。我的感受對netty還算有所瞭解的,結果面試官讓我直接寫出netty的源碼結構,包括哪幾個主要的類以及名稱還有互相之間的關係……工做的項目裏面我使用了kafka來作消息隊列,來緩衝流量,保護系統,結果直接讓我描述kafka的存儲結構……比賽的時候我經過各類手段讓程序無GC,結果直接就要我說出各類GC算法的原理和應用場景……PolarDB比賽咱們本身寫了KV,對標的是RocksDB,結果讓我描述RocksDB的索引結構……緩存

固然,雖然基本上他問的東西我都有所瞭解,而且清楚應用場景在哪裏,可是到了細節裏面的時候,就稍微有點蒙圈了。雖然每一個細節我確認我稍微看一下就能搞定的,可是架不住面試的時候沒法張口就來呀。這個時候,感受彷彿我變成了年輕時候的楊過,突然身邊出現了一個金輪法王對我說:"楊兄弟,你的武功花樣甚多,不過我倚老賣老說一句,博採衆家當然甚妙,但也難免駁而不純。你最擅長的究竟是哪一門功夫?要用什麼武功去對付郭靖夫婦?"。對呀,個人知識面很廣,各類應用框架新技術可能都有所耳聞,可是我最擅長的是哪個呢?雖然我深深地知道我最擅長的是Scala和Akka、Play、Lagom等,可是架不住沒有人會問呀T-T。數據結構

事已至此,雖然我帥如楊過,可是此時也不得不考慮一下整理一下生平所學,找出強點和弱點,而後在面試的時候有的放矢。因此第一次熱身面試以後的一個星期,我基本就在整理個人知識結構了。我大體按照以下結構作了一份思惟導圖:架構

一、JVM相關

運行時結構 GC算法 JVM調優併發

二、編程語言

Scala Java

三、數據結構與算法

表、棧、隊列 樹 散列 優先隊列 排序 高級數據結構

四、併發編程

Java內存模型 基本工具 無鎖併發 反應式工具

五、微服務

微服務設計 服務治理

六、中間件

分佈式緩存 消息隊列 RPC

七、數據庫

關係型數據庫 NoSQL NewSQL

八、機器學習算法

推薦算法

其中JVM、Scala相關、併發編程、消息隊列什麼的,我都仔細寫了一下;Java語言太簡單就沒弄,數據結構稍微看了一下感受腦海裏面塵封好久的記憶突然就被喚醒了,因此也沒咋作筆記,微服務相關的太熟沒弄,推薦算法太難了也沒有弄;數據庫相關的內容太多了,也沒弄。可是大致來講索引結構在這裏,拿到xmind以後,你能夠按照本身的知識結構體系將其補全或者修改,而後學而時習之,甚至在面試以前也能夠稍微看看加深一下記憶。

這以後我就進行了第二次面試。第二次面試技術相關的問題其實就沒啥太大的問題了,主要考驗個人是說話技巧相關的事情。我這人有點毛病,想的太多,想要作的事情太多。這些其實沒啥大問題,可是我不肯定的事情我也喜歡和人說,還不分場合地就和人說了。好比,我面的是中間件團隊,可是我終面面試的時候卻說我由於以前搞推薦算法對深度學習產生了興趣,想要今年考個在職研究生學一下深度學習。可其實,這個時候我說這個幹嗎呢?腦殼有點抽抽的嗎?而且他問了我一個手寫代碼的題,我想了半天沒有想出來。問題是如何去算根號2的值。個人第一反應很快,牛頓迭代法嘛!可是他說讓我在紙上把代碼寫出來的時候,我就一直在想辦法回憶牛頓迭代法是個什麼鬼,應該怎麼用來算根號2。而後一直在紙上推演導數啊什麼鬼的……直到他提示我這個不是一個數學問題,二分查找就能算出來的時候,我才心不甘情不肯地開始弄二分查找的寫法(心裏OS:牛頓迭代法確定比二分查找好的呀!爲何不給我時間回憶一下牛頓迭代!)。這個時候又暴露了我一個問題,我很久沒有手寫代碼了。沒有IDE的時候,我基本上啥都不是……寫了半天勉勉強強地弄了個版本出來,估計也不是bug free的。因此,最終這個公司的offer也沒拿到。辛苦爲我推薦的普架了。

這以後我又知道了我出來面試的幾個缺點。首先就是要合適地說話,與面試無關的話題不要扯;其次就是我得練習一下手寫代碼了。不至於要刷題,可是問到什麼必須能至少寫出個大概吧

字節跳動面試體驗

字節其實我面試了兩個職位。第一個職位的一面感受挺好的,面試官很親和,問的問題也蠻到位的,而後留給個人發揮空間也蠻大的,因此順利過了。二面的時候就有點聊不來了,並且越聊越感受職位不合適。因此後來朋友幫我從新推了一個職位,就是我如今所在的數據平臺部門。一面的面試官又年輕又高大又帥氣,並且基本上是針對個人簡歷問的問題。固然,第一個問題讓我講Akka的時候,我是真的呆了。徹底不按套路出牌呀!我歷來沒有遇到過有人會問我Akka的!!!怎麼會有人問我Akka!!!心裏一陣狂喜和激動以後,我先收拾了一下心情,慢慢整理了一下本身腦海中一直在跳着舉手喊着"講我講我"的Akka特性。因而先從線程模型開始講起,講了它的M:N實質,Actor模型依賴的消息傳遞模式,層級結構劃分的監督職責,讓它垮的失敗處理,Akka集羣支撐起的橫向擴展,等等等等。而後圍繞着Akka又問了一些小問題,基本很順利的過去了。後來又問了一下緩存相關的內容,其中講了一個緩存雪崩的問題我一時半會兒沒有反應過來。問題其實很簡單,就是突然有一堆請求訪問同一個key,而這個key在緩存中不存在。如此全部請求就會同時去訪問數據庫而後又同時去更新緩存。這樣的緩存雪崩效應應該如何解決?這個問題聽起來其實很熟很熟很熟的,可是當時我腦殼短路了沒有想起來。後來想起來原來Akka-Http-Caching(之前的Spray-Caching)就是專門爲這種狀況服務的。老外給的說法是這種問題叫作驚羣效應,講的是不少請求在第一個請求完成以前,一塊兒訪問同一個鍵(This approach has the advantage of taking care of the thundering herds problem where many requests to a particular cache key (e.g. a resource URI) arrive before the first one could be completed.)。文檔上說的This approach指的是緩存的時候,不要緩存一個值,而是一個Future[T]。這樣,第一個請求獲取值的過程也被緩存下了。後續的請求就會訪問到這個Future,而後能夠向其註冊回調,等待緩存動做完成再完成回調。固然,這個沒有答得特別好也沒事,後續又問了我一下關於JVM相關的一些東西,最後手寫了一個算法題。而後一面順利地就過了。

以後二面的話基本也是圍繞個人簡從來問的,講了一下當時作的推薦算法的原理,講了一下Spark的基本原理,而後最後作了一個算法題,而後也順利過了(其實還有一些其餘問題,可是我忘了問的是什麼了……)。固然這個算法題的實現並非最好的。題目內容是26進制的加法,其實要涉及單個字符的加減和進位的處理的,這樣實現下來細節就要處理好多東西,還頗有可能出錯。因此我取了個巧,我先把字符數字都轉化成了整型,而後整型加減獲得結果,而後再把結果轉化成了26進制字符。雖然結果不是最優的,由於數字大了確定會溢出的嘛。可是起碼仍是作出來了,因此二面也順利過了。

三面的時候也是先圍繞着個人項目問了一些相關的問題,因此答得蠻平淡的,可是也還行。而後他問了一下我如何作流量控制。問我流量控制哎!!!而後,我又強行按捺下了心裏的喜悅,將《反應式設計模式》的第十六章流量控制的內容大體講了一遍。也許就是給了這樣一個我發揮的空間,因此我第三面也很順利地過了。沒多久就是HR面試大體談了一些技術以外的問題。

HR面我就中規中矩了。當時面完感受就穩了,可是等了很久很久尚未跟我溝通offer的事情,等的我有點難受了……以後HR聯繫我說,還要給我加面試,說團隊老大要面我一下。本來字節面試通常3+1就OK了,而後突如其來地加面試讓我感受有點忐忑,因此後面的面試發揮沒有前面好了。其實後來回想一下,我多是覺得前面面試表現很差,不能給我肯定offer,纔會有後來多的面試的。因此當時心態很差,答的感受也沒有以前果斷。後來第五面完了之後,團隊老大仍是不肯定,還要加一面交叉面試,這個時候我就豁出去了。無所謂,面上面不上不要緊,反正字節跳動在我家旁邊,只要廟不搬,我就進得去。因此最後一面跟隔壁leader聊的時候相對來講還好一些。問題沒有問啥特別的,就是仔細問了下我最近作的一個項目,優勢在哪裏,缺點在哪裏,難點在哪裏。而後順着難點來進行擴展,爲何是難點,怎麼解決,有哪些方案,這些方案有哪些優缺點。幸虧我平時工做仍是有思考的,因此最終答的還不錯。因而終於到了6月10號左右,HR和我肯定要發offer了。

經驗總結

整個面試過程,若是加上以前不合適的職位的話,總共8面,先後跨度一個多月。而後到了今天的時候,最終入職成功。提及來仍是有點漫長的。若是再加上前面的兩次熱身面試,可能跨度就有接近兩個月的時間了。說實話我並非那種別人一看就很喜歡的工程師,由於一直在小公司作個小架構,並且主力編程語言比較偏門,因此適合個人職位範圍相對來講很窄。實際上我今天看了一下和我工做相關的兩個項目,一個go,一個python,個人scala技能可能在後面至關長一段時間要荒廢了……不過不要緊,離家近就行,並且跳出溫馨區看一下其餘風景,我感受對我來講也是一件好事。

最終總結爲何能成功面上字節跳動,首先個人基礎實際上還能夠的,雖然第二次面試的面試官以爲我基礎很差,可是其實不少內容在我深刻的時候我就把思路、結構、前因後果整的明明白白的,因此就算忘了,回憶起來也能很快塞進體系裏從新理解透徹;其次我有本身的拳頭產品,面試不問就罷了,一旦問到Scala、Akka、Play、Lagom或者能扯上反應式架構的時候,只要嘉和和品神不在這條街,我就是這條街最靚滴仔!!!最後,我知道我爲何想去這家公司,而且就算不去也沒啥大的損失,因此面試的時候能夠不卑不亢,心平氣和,因而發揮的就也還行。並且,反正公司就在我家旁邊,此次沒面上沒事,過段時間再面唄。

這些經驗換算到你這邊:若是你說你如今基礎很差,我會說不要緊;可是若是一年、兩年、三年之後你還和我說你基礎很差,那是否是要自我反思一下呢?若是你說你如今沒有拳頭產品,我會說不要緊;若是一年、兩年、三年之後,你仍是沒有拳頭產品,那你看我這篇文章有啥用呢?而後心態的問題可能就須要本身調整了。只要有基礎,有拔高,而後心平氣和地來面試,我相信你確定能面試成功的。

相關文章
相關標籤/搜索