第一次面試字節跳動

做者:Nu11Pointer 出處:https://www.nowcoder.com/discuss/155740java

============================================================================= 本人南京某985渣渣研究生一枚,平生第一次面試。。。說出來大家可能不信 雖然基本上是GG的節奏,仍是寫下這個帖子來記錄一下吧,你們也能夠參考一下。

真心喜歡「字節跳動」這個名字。。以爲好。。Q? 樓主前幾天投了字節後臺的實習崗位,次日HR就打電話說安排面試了,視頻面試約定在了下午五點,是真的準時,說5點就五點😂😂 在網上看了看你們的面經以後準備了一天就開始了第一輪面試;mysql

一面:

三次面試的小哥哥都是挺友好的,這也是我能平靜下來的緣由(一開始的時候是真的緊張呀) 一上來就自我介紹,而後介紹本身的項目。bulabulabula 我作了XXX系統!!我完成了xxx功能!程序員

介紹完開始問問題:面試

  • 問:你以前作的安卓,安卓和Java有什麼區別或者相同的地方嗎?你的SDK多少版本?JDK呢? 答:安卓開發用的是SDK,就像Java的JDK同樣,能夠本身編寫,相互調用實現。
  • 問:JVM內存模型瞭解過嗎?介紹一下? 答:java內存模型分爲堆內存和棧內存,棧內存的話保存一些方法傳遞的參數和一些局部變量。堆內存的話分爲新生代和老年代,新生代又分爲eden區和兩個survivor區 bulabulabula。。
  • 問:新生代和老年代能夠轉換嗎? 答:能夠轉換,通常來講new一個變量的話都是進入新生代的eden區,可是會有動態對象年齡斷定 和長期存活的對象就會進入老年代。繼續bulabulabula
  • 問:這些內存裏面的垃圾怎麼回收? 答:有引用計數和可達性分析法。回收算法的話就有垃圾收集算法:標記-清除、複製、標記-整理、分代收集
  • 問:怎麼判斷是垃圾?GCroot能夠爲哪些? 答:a. java虛擬機棧(棧幀中的本地變量表)中的引用的對象。 b.方法區中的類靜態屬性引用的對象。 c.方法區中的常量引用的對象。 d.本地方法棧中JNI本地方法的引用對象。 問:垃圾回收器瞭解過嗎?介紹一下G1? 答:全部的回收算法都會存在STW問題,G1的話就是對這個問題進行優化,並行回收,用戶很難感知。bulabulabula
  • 問:數據結構瞭解過嗎?hashmap底層是怎麼實現的? 答:hashmap的話是數組+鏈表實現的,經過hash散列化來決定進哪個數組,若是有的話就「掛」在鏈表的最後面。bulabulabula
  • 問:hashcode同樣怎麼辦?hashcode和equals的區別? 答:經過equals方法判斷真正的內容。 hashcode和equals的關係以下: 一、若是兩個對象相等(equals),那麼他們必定有相同的哈希值(hash code)。 二、若是兩個對象的哈希值相等,那麼這兩個對象有可能相等也有可能不相等。(須要再經過equals來判斷)
  • 問:equals和==的區別?我要比較內容呢? 答:equals:是用來比較兩個對象內部的內容是否相等的。 ==:是用來判斷兩個對象的地址是否相同,便是否是指相同一個對象。 若是沒有重寫equals時,是直接用==判斷的 若是是基本類型和基本型封裝,則仍然爲比較內容。
  • 問:下面咱們來作幾道題目吧? 答:(心裏OS 來了來了來了!!!!)好。 題目一:給定一個排序鏈表,刪除全部重複的元素,使得每一個元素只出現一次。 當時我真的是很慌張!腦子裏想的是我會作我會作!但是倒是一片空白。深呼吸一下。用遞歸作了出來。 又問我除了遞歸怎麼作?「那就遍歷,每次都比較就行」 「那爲何不用遍歷用遞歸呢?」「遞歸寫起來簡單啊!」 題目二 給定一個二叉樹,原地將它展開爲鏈表。 leetcode原題。 題目三 給定一棵二叉樹,想象本身站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。 秒了。 一面結束,說叫我別退,還有一我的。 「好」 ====================================================================================

二面:

二面的小哥哥不懂Java 瘋狂在問操做系統和底層的實現。。。算法

  • 問:java導包的過程是怎麼樣的? 答:import啊(懷疑本身腦殘。章口就萊??sql

  • 問:java的jar包是源代碼嗎? 答:jar包就是一堆.class文件數據庫

  • 問:那別人的包你導入,大家的字節碼會怎麼樣?互相影響嗎? 答:不!知!道!(哭了,饒了我這個小菜雞吧)編程

  • 問:java的編譯是怎麼一個過程呢? 答:java編譯器的話通過四個步驟,詞義分析,語義分析,語法分析和代碼生成。數組

  • 問:java 的虛函數是怎麼樣的? 答:java裏面是抽象函數和接口,而後bulabulabula介紹異同;服務器

  • 問:java內存模型是怎麼樣的? 答:上同。

  • 問:java內存空間是怎麼分配的? 答: 一, 對象優先在新生代Eden區分配 二, 大對象直接進入老年代 三, 長期存活對象將進入老年代(虛擬機設計了一個對象年齡計數器,該閥值默認爲15) 四, 動態對象年齡斷定 若是Survivor區中相同年齡全部對象大小的總和大於Survivor區空間的一半,年齡大於或等於該年齡的對象在Minor GC時將複製至老年代 五, 空間分配擔保 當Minor GC時若是存活對象過多,沒法徹底放入Survivor區,就會向老年代借用內存存放對象,以完成Minor GC

  • 問:我看你數據庫用的比較多,介紹一下mysql的底層實現? 答:底層的話是用b+樹實現的,它的優勢是可以定位到數據點和範圍查詢。修改key與子樹的組織邏輯,將索引訪問都落到葉子節點並 按順序將葉子節點串起來(方便範圍查詢) 等等。。。

  • 問:TCP和UDP有什麼區別? 答:  TCP協議是有鏈接的,有鏈接的意思是開始傳輸實際數據以前TCP的客戶端和服務器端必須經過三次握手創建鏈接,會話結束以後也要結束鏈接。而UDP是無鏈接的  TCP協議保證數據按序發送,按序到達,提供超時重傳來保證可靠性,可是UDP不保證按序到達,甚至不保證到達,只是努力交付,即使是按序發送的序列,也不保證按序送到。  TCP協議所需資源多,TCP首部需20個字節(不算可選項),UDP首部字段只需8個字節。  TCP有流量控制和擁塞控制,UDP沒有,網絡擁堵不會影響發送端的發送速率  TCP是一對一的鏈接,而UDP則能夠支持一對一,多對多,一對多的通訊。  TCP面向的是字節流的服務,UDP面向的是報文的服務。

  • 問:咱們作題吧? 答:(心裏OS 來了來了來了!!!!)好。

二面的話就作了一道題目,多是小哥哥比較急着吃飯吧。QAQ

  • 問:合併兩個有序鏈表。遞歸和非遞歸的實現。 答:(還好還好)秒了。

而後問了我一些基本狀況,江蘇的吧?問我有沒有什麼問他的?我:「emmmm 我都忘了我問的啥了」 老哥聽完來了句「那就來吧」 心裏溫暖度maxXXXXXXXXX

問了下上司,要不要三面,上司在吃晚飯,決定晚上八點繼續

三面

三面的話就聊人生、聊項目

  • 讓我寫了一下以前作的socket傳輸功能服務器端和客戶端大概的方法、代碼。
  • 而後問了一個架構題目,好像是微博熱門怎麼查之類的。
  • 沒怎麼聽懂他的意思,Q_Q應該就是一個TopK問題吧。

而後就讓我等HR通知了。 5555 整體感受的話仍是要學的東西還挺多的,要否則之後心態仍是會崩,會作的題差點由於緊張而得不到正常發揮。 感謝字節跳動給我面試的機會吧,不論最後有沒有成,我仍是要說,「字節跳動」這個名字真的好Q啊 以爲文章不錯的歡迎關注個人WX公衆號:程序員喬戈裏
我是百度後臺開發工程師,哈工大計算機本碩,專一分享技術乾貨/編程資源/求職面試/成長感悟等,關注送3000G編程資源,免費下載CSDN資源。

相關文章
相關標籤/搜索