字節跳動面試總結(2019年8月)

個人簡介

本人座標南京,16年畢業,在某一傳統行業從事JavaWeb後端開發,三年工作經驗。出於技術焦慮、能力成長陷入瓶頸、對體制內的文化和氛圍無法適應等原因,決心換個環境和工作,進入互聯網行業,繼續自己的技術追求之路。19年8月應聘字節跳動公司的後端研發工程師崗位,現對經歷的4輪技術面和1輪HR面做個總結。

面試經歷

每輪技術面時長40min~1h不等,可能一次一輪面試,也可能兩輪連續進行。每輪先以簡單的自我介紹開場,然後面試官根據個人的工作經歷和技術能力進行提問,最後預留20min~30min時間對一道算法題進行Coding。根據草稿和回憶,整理出不完全的四輪技術面題目如下。

面試題目

第一輪&第二輪

  1. Spring事務傳播機制
  2. Spring的註解、IoC、AOP相關問題,包括:私有方法能否進行AOP增強
  3. Redis的內存失效/回收策略
  4. MQ是否存在消息重複的問題
    兩道算法題目:
    1)根據用戶上線、下線日誌,統計最大同時在線人數
    2)根據前序和中序序列構建二叉樹

第三輪

  1. 詢問是否瞭解Big Data(由於本人以往工作內容與此完全沒有交集,故據實告知沒有了解,面試官便作罷轉而詢問其它方面問題)
  2. OS的內存碎片、內存管理策略
  3. OS的文件系統、文件訪問機制
  4. 分佈式緩存相關問題,包括Key分佈/影射策略、Key不存在時的處理措施
  5. 布隆過濾器的原理
  6. HTTP的典型請求流程
  7. API網關(代理服務器)的功能
    算法題目:
    快速從幾十億個數中判斷某個數是否存在;並討論算法性能優化相關內容。
    備註:在最後向面試官提問環節,面試官給我一個建議,學習和了解大數據相關知識,做後端開發不能對主流/熱點技術方向完全不瞭解,即使這些技術與工作不相關。

第四輪

  1. 談談Spring的優勢之處
  2. 在工作項目中遇到的技術痛點和應對之策
  3. 談談對BlockingQueue的認識,然後實現一個簡單的BlockingQueue
  4. 如何一場比賽我的勝率爲0.6,那麼5局3勝和3局2勝該選哪一種比賽方式?如果5局3勝的勝率爲P3,3局2勝的勝率爲P2那麼推導出7局4勝的勝率P4
  5. 工作中是如何進行學習和技術積累的

HR面

HR面持續30min左右,主要詢問了更換工作的原因和想法、目前的薪資狀況等問題。

技術面總結

字節跳動的技術面試使用牛客網在線面試平臺(面試鏈接示例:https://people.toutiaocloud.com/recruitment/interview/interviewee/27d0d9c0-aeb5-11e9-a933-98039ba25b3e) ,通過視頻與面試官面對面交流,代碼在面試平臺的開發環境中編寫,向面試官實時共享編輯的內容。
經歷四輪技術技術面試,感覺字節跳動對候選人的技術要求是比較高的,候選人首先需要熟練掌握與工作經歷相關的編程語言、Web框架等個人技術棧,其次對算法、數據結構、操作系統、網絡原理等專業知識要有個紮實的基礎,尤其是要保持對算法題動手Coding的能力。

經驗總結

首先聊聊手寫代碼。已有幾年工作經驗的程序員而言往往對算法與數據結構相關基礎知識日漸生疏,更何況平時工作內容大都與業務相關,如果不經過刻意的訓練很難在20min左右時間快速解答和實現面試中的算法題。另外面試中的算法題以LeetCode上中等難度的算法題爲基礎和標準,領釦網上有字節跳動算法題庫 ,當前335道題目中,111道簡單級題目,中等難度的題目170道,困難題目54道。

本人利用一個月左右的工作之餘時間,採用在領釦網上刷題(60道左右中等難度題目)和學習《數據結構與算法經典問題解析》(Java語言描述)一書相結合的方式,重新撿起數據結構和算法的知識,訓練針對面試算法題的Coding能力並熟悉此過程。個人感覺刷題僅在於熟悉考試時的狀態和節奏,關鍵還是在於紮實掌握數據結構與算法的知識,當然前提條件是平時工作中經常寫代碼、對手寫代碼不生疏,否則就需要更多的練習,可以做完領釦網上170道左右中等難度的算法題。
關於基礎知識的學習和積累,如果爲了準備面試,進行功利性學習,那麼對於JavaWeb後端開發技術棧的應聘者,至少要學習和掌握以下書籍中的內容,包括Java語言基礎進階和標準庫、Java8新特性、併發多線程編程、Spring框架、Redis緩存組件、Java虛擬機GC相關等知識點。
字節跳動面試總結(2019年8月)

關於知識和技能的積累,還是應該進行長期學習,最好養成終生學習的習慣。以上書籍,本人是無法做到在短短幾個月的時間裏利用工作之外的時間全部學習和掌握的;得益於三年前從工作開始之初持續不斷的學習和點滴積累,以上書籍基本至少讀過兩遍,還有照片上未能列舉的書目。

除了刻意學習和編碼練習,個人平時習慣於結合工作內容進行技術學習,不斷嘗試將學到的新工具、新技術引入到工作項目中去,比如引入Lambda表達式和流處理、追求編寫整潔優雅的代碼、制定Java編程規範、持續進行代碼重構和軟件迭代、採用Redis組件等等。只有學習致用,才能積累實踐經驗,至少在面試時能夠從容應答,有理論知識有實踐經驗。存在的缺陷便是,由於與工作內容無關,當面試官問到是否瞭解大數據相關知識時,只能尷尬地回答完全不瞭解,所幸字節跳動對此還是相當包容的。

附:阿里兩輪技術面

字節跳動的面試前後持續了3周左右,期間還經歷了阿里巴巴飛豬旅行業務部門的兩輪電話技術面。
第一輪面試歷時40min,遇到的問題有:

  1. 數據庫的樂觀鎖和悲觀鎖
  2. JVM的垃圾回收器,實際應用中採用的類型
  3. 多線程併發,volatile關鍵字
  4. 一致性哈希算法
  5. Redis,集羣部署
  6. JDK8相比以前版本作出的改進
  7. 如何在項目組內推動落實編碼規範
  8. 平時使用哪些Java診斷工具排查問題

第二輪電話面試歷時30min,問題包括消息隊列;以秒殺爲背景結合實際的線上問題進行提問,包括百萬級的併發量、緩存服務擴容等;Linux服務器上,給定一個10G的訪問日誌文件,統計出訪問量最大的10個IP。由於平時工作中不涉及高併發等場景,採用Windows Server部署服務,面試官最後給我的總結是由於身處傳統行業與互聯網一線實戰脫節比較嚴重,故第二輪面試順利地掛掉了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章