第一次面試字節跳動

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

=============================================================================
本人南京某985渣渣研究生一枚,平生第一次面試。。。說出來大家可能不信mysql

雖然基本上是GG的節奏,仍是寫下這個帖子來記錄一下吧,你們也能夠參考一下。

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

一面:

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

介紹完開始問問題:面試

  • 問:你以前作的安卓,安卓和Java有什麼區別或者相同的地方嗎?你的SDK多少版本?JDK呢?

答:安卓開發用的是SDK,就像Java的JDK同樣,能夠本身編寫,相互調用實現。算法

  • 問:JVM內存模型瞭解過嗎?介紹一下?

答:java內存模型分爲堆內存和棧內存,棧內存的話保存一些方法傳遞的參數和一些局部變量。堆內存的話分爲新生代和老年代,新生代又分爲eden區和兩個survivor區 bulabulabula。。sql

  • 問:新生代和老年代能夠轉換嗎?

答:能夠轉換,通常來講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啊(懷疑本身腦殘。章口就萊??

  • 問: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啊
相關文章
相關標籤/搜索