2019秋招面經(字節跳動Java崗):JVM虛擬機+Spring框架+算法

個人情況:

某師範類大學網絡工程專業本科畢業,這次秋招面試的是頭條母公司字節跳動。接到面試通知以後,很早就到字節跳動總部了,整個園區的環境還是非常不錯的,雖然面積不如BAT大廠,但設施還是非常齊全的,員工福利也很不錯,食堂免費。廢話不多說,特分享一下自己的面經。

一面(50分鐘左右)

一面面試官看起來還是挺和藹的,先讓我做自我介紹然後他一邊看我的簡歷。

問題列表

  • 我看你簡歷上寫到了熟悉JVM虛擬機運行機制,你能給我介紹一下Java虛擬機運行時數據區域嗎?

於是我就向他要了張草稿紙,把運行時區域畫了下來比較全面地講了一遍,並且把Java虛擬機中的一些東西和底層操作系統中的東西作了以下對比,後來面試官點了點頭,就問下一個問題了。

其實我對Java虛擬機還是蠻熟的,看了很多關於這方面的知識。平時在學習的過程中也寫了不少關於這個的博客。

  • 我看你對虛擬機挺了解的啊,垃圾回收你瞭解嗎?給我講講

我先講了下內存佈局中的新生代、Survivor區域以及老年代的劃分,然後講了下對象動態年齡判斷、分配空間擔保等。接着從引用計數法開始講,後來我說虛擬機中一般都不會用這個垃圾回收算法了,然後面試官打斷了我讓我直接從可達性分析開始介紹。我又把GC Roots的判定,哪些對象可以作爲GC Roots、G1垃圾收集器的回收過程等講了一遍。面試官看起來比較滿意,就沒繼續深入地問虛擬機相關知識了。

在這裏要強烈安利一本關於垃圾回收算法的書,是一個日本作家寫的——《垃圾回收的算法與實現》。

  • 你說你閱讀過某些主流WEB框架的源碼(Spring IoC和AOP),那麼你告訴我IoC中會有AOP嗎?

額...之前還這沒想過這個問題,因爲這兩部分我當時都是分開來看的,並沒有總結它倆之間的聯繫。後來我說AOP中要生成代理對象,而由於控制反轉的存在,代理對象的生成以及其生命週期的管理工作肯定是需要IoC容器來完成的,所以我覺得它倆之間有一衣帶水,緊密相連的關係。

  • 那好吧,你說說看BeanFactory和FactoryBean有什麼區別?

我說BeanFactory定義了IoC容器最基本的形式,相當於在Java語言中的Object一樣,是所有IoC容器的基類。我們在實際進行框架開發的過程中不會直接拓展BeanFactory,而是用它的子類DefaultListableBeanFactory。然後我在描述FactoryBean的時候不知道怎麼組織語言,說了一堆之後面試官說:你這說了等於沒說嘛。後來還被吐槽到底有沒有認真看過源碼。我暈...後來面試結束之後我覺得應該把FactoryBean描述爲類似於一個工廠方法中生成對象的一個東西。

  • AOP中動態代理的實現機制你瞭解嗎?給我說說原理。

一開始我以爲面試官直接讓我說底層實現機制,稍微講了下JDK動態代碼實現方式我就開始講它的源碼了,後來面試官說沒讓我說源碼,只是看下我知不知道怎麼用。然後我就把JDK動態代理以及CGLIB動態代理講了一下。

  • 你說你熟悉Mysql,講一講吧

這裏講了一些很基本的東西,包括ACID、隔離等級、Myisam和Innodb兩種引擎、Innodb索引的底層實現(b+樹)、b+樹的原理、然後拓展地講了下b樹和b*樹,說了它們的優勢劣勢。在我後面講項目的時候還提到了封鎖協議以及封鎖等級等等。

  • 你這個秒殺系統還挺有意思的,我們來說說這個吧

網購模擬秒殺系統是我之前學習了大型網站架構以及系統優化相關知識之後動手實現的一個小Demo。面試的時候談了很多關於系統優化、併發削峯以及流量控制、數據冷熱備份的問題,這裏不詳細講了。感興趣的同學可以買下面這兩本書來看看。

後來面試官就說可以了,然後讓我過十分鐘去前臺問有沒有面試。因爲感覺一面表現蠻好,我就找了個地方又把項目代碼看了一遍,因爲怕二面深入地問項目。

二面(20多分鐘)

二面真的是非常迷.....因爲全程都在問算法題......

  • 你做個自我介紹吧,我先看下一面面試官對你的評價。
  • 一個鏈表,求中間結點

第一題還挺簡單的,leetcode上很多和鏈表有關的題目都會用到這個,很快就寫出來了。

  • 有兩個int類型的數a和b,你能寫出幾種交換它們值的辦法?越多越好

中間變量、異或、用兩數和加減運算(這裏可能會發生整形溢出)

  • 一個1TB的文件,你有什麼最快的辦法能夠求出重複次數最多的TOP5行數據?

這題答得不好。。

  • 給你1到100萬的連續整數,我從中取出一個數然後打亂數組,你給我求出被取出的是什麼數。這題真的很迷。。我一開始說排序之後遍歷,他說達不到他的要求,於是我就知道想要時間複雜度爲O(n)的答案。我就一直在往二進制異或之類的方面靠,後來還是沒答出來。結果今天早上突然想到一個用高中知識完全可以解決的辦法:用等差數列求和公式求出1到100萬的和,然後再一一減去數組中的數字,就可以求出被取出的數了。

二面之後心裏十分的忐忑,心想肯定得GG了,結果去前臺問了下說還有hr面。

HR面

hr面就比較輕鬆了,就像聊天一樣。

  • 做個自我介紹吧(主要是校內生活、競賽經歷、獎學金、學生幹部、辯論隊、專業學習等)
  • 你是網絡工程專業的學生,其實培養方案不太側重軟件開發吧?說說你平時都是怎麼進行自學的啊?
  • 爲什麼不考研?
  • 之前投過其他公司嗎?
  • 這幾個項目中你主要承擔什麼角色?
  • 如果拿到了offer什麼時候可以來實習?

以上就是字節跳動的整個面試過程,另外我還將其他一線大廠的面試真題整理成文檔的形式,還包括自己蒐集到的一些專題面試真題,如果有需要的可以加QQ羣: 219-571-750,免費領取

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