字節跳動上千道精選面試題還不刷起來!2019-2020大廠高級面試題集合(Handler,性能優化,自定義View等)

前言

本想今年辭掉工做大幹一場,沒想到碰到疫情,家裏蹲了3個月...,還好字節能給一次機會。前陣子字節跳動的提早批開始了,看宣傳是說有海量HC,機會多多,本着漲漲面經的心理,而後就投遞了一下杭州那邊的部門,首先在這裏還要很是感謝內推個人小哥哥,很是熱心的幫我跟蹤進度,由於中間還出了一些小插曲(我投錯部門了。。。),仍是熱心的小哥哥幫我聯繫HR,最後把我轉到想要投遞的部門了,我投的是Android開發工程師~面試項目大部分問題是圍繞個人開源項目 蘑菇博客 展開的,還有就是我以前準備面試的一些 筆記(大佬請輕噴..)
git

面試時間

或者能夠查看個人【Github】裏能夠查看github

  • HR面完後,等了一個禮拜多,覺得涼涼了,沒想到收到驚喜,許願成功~
  • 第一天:第一面 + 第二面
  • 等了兩天:第三面 + HR面
  • 過了一週後:等來了意向書

第一面

**面試官看起來很年輕,感受是一個剛畢業不久的小夥汁,聲音很青澀哈哈哈哈
開始面試的時候把我給問懵了,當時剛午覺睡醒,還沒緩過神**

計算機網絡部分:面試

1.http的一套流程是什麼?算法

2.https發起鏈接的流程是什麼?數據庫

3.http請求的請求頭中包含哪些字段?(這裏忘了很多字段,只說了三四個,嗚嗚嗚)設計模式

4.一次http請求的結構是什麼樣的?(這裏由於網絡的問題,聽了三遍,終於弄懂了面試官的意思,嗚嗚嗚)安全

操做系統:性能優化

1.能簡單說說線程和進程間的區別嗎?網絡

2.進程間通信的方式你知道有哪些嗎?框架

3.據說過Messenger嗎?(知道,可是底層仍是使用的AIDL+Handler的形式,AIDL底層仍是使用的Binder驅動)

數據庫:

1.能簡單說一下數據庫如何修改一張表中的數據嗎?

2.給一張表增長一個字段該用什麼關鍵字?

Java:

1.能簡單說說Lock,synchronize,CAS之間的關係,以及具體實用的場景嗎?

2.能詳細說一下CAS是什麼嗎?AtomicInteger是怎麼實現線程安全的?

3.具體的鎖升級機制能簡單講講嗎?

4.能簡單說說代理模式嗎?動態代理和靜態代理有什麼區別?

Android:

1.能簡單說一下事件分發機制嗎?

2.MeasureSpec.UNSPECIFIED是什麼意思?若是外層的ViewGroup的模式是AT_MOST,內層是match_parent,那麼最終傳遞到內層的模式是什麼?(AT_MOST) ps:這個問題沒啥意義

(聽你說了View中有scrollTo,scrollBy,那麼咱們分析一個場景題)

3.場景題:首先有一個FrameLayout,其中嵌套着兩層View,咱們在進行重寫onTouchEvent的時候,如何讓上層View滑動而且暴露出下層的View?(這裏有一個坑,面試官說的scrollTo、scrollBy,我就在這倆上面思考怎麼暴露出下層的View,最後忽然想到能夠經過事件來調整整個View的佈局位置)

源碼:

1.看過那些優秀的開源框架源碼嗎?

2.知道那些源碼相關的設計模式呢?

3.HashMap簡單說一下原理吧

二面:

二面是一個女面試官,年齡可能在40歲左右

設計模式:

1.熟悉那些設計模式呢?

2.動態代理底層是如何實現的?

3.講講Retrofit的動態代理吧

Java:

1.能簡單說說JVM內存模型的目的以及在內存中區分爲哪些區域嗎?

2.內存回收機制大體講講唄?

3.類加載機制完整細緻的描述一下把

4.類加載器的雙親委派原則說一下吧?(這裏有一個疑問,我說父子類加載器不是繼承關係,而後面試官說不太對,這裏我有一點點疑問,還請你們告知一下)

5.能說一下Java .class文件的結構嗎?

6.線程池的基本機制有了解嗎?非核心線程如何保證延遲結束?

7.爲何內部類會默認持有外部類的引用?

Android:

1.Handler消息機制簡單說一下吧(延時的消息是如何發送的?以及經過Looper.loop()是如何處理延時消息的?)

2.爲何Handler會出現內存泄漏?

3.View中的post和handler的post有什麼區別?(我說view中的handler是通過重寫的,會處理關於View的相關繪製事件,而後面試官說只回答對了一部分,我有些疑問,還有其餘的區別嗎?)

4.有用到什麼內存泄漏檢測的框架嗎?知道原理嗎?(就是上面所說的JVM內存回收機制)

5.知道關於性能優化相關的嗎?能簡單講一下嗎?(佈局,異步,過渡繪製)

6.能講一下Activity的啓動流程嗎?

7.聽你講到了進程間通信,PackageManagerService和ActivityManagerService進行通訊的方式是什麼?

8.Binder驅動底層原理了解嗎?(mmap的內存地址映射)

9.Serializable和Parcable有什麼區別?如何使用?

10.聽你說到了sp(SharedPreference),你知道sp能跨進程通信嗎?

三面:

1. 聊項目

2. 下面的代碼會發生什麼?


<font color=`"#ffffff"`>

<font color=`"#bbbbbb"`>

class Foo {

<font color=`"#bbbbbb"`>

public`:`

<font color=`"#bbbbbb"`>

void A() {}

<font color=`"#bbbbbb"`>

<font color=`"#bbbbbb"`>

virtual`<font color="#bbbbbb"> void<font color="#bbbbbb"> B<font color="#bbbbbb">()<font color="#e06c75"> {}<font color="#bbbbbb"`>

<font color=`"#bbbbbb"`>

void C() { std::cout << this << std::endl; }

<font color=`"#bbbbbb"`>

};

<font color=`"#bbbbbb"`>

Foo* temp = nullptr;

<font color=`"#bbbbbb"`>

temp->A();

<font color=`"#bbbbbb"`>

temp->B();

<font color=`"#bbbbbb"`>

temp->C();

<font color=`"#bbbbbb"`>

<font color=`"#ffffff"`>

</font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font></font>


1)函數A,什麼都不會發生;

2)函數B,crash

3)函數C,打印地址0

C++的成員函數,若是使用了this相關的,那麼編譯器在編譯時會給函數入參加入this指針做爲入參。A不須要,所以沒有this指針做爲入參;B和C須要,其中B是虛函數,須要找到虛表,即須要解引用,空指針解引用直接就會崩潰,C不須要解引用,只會打印空指針的地址0。

3. 算法題xml解析 有一點相似leetcode 385/591 能夠看看xml解析相關的實現

HR面

花10來分鐘作個簡單的溝通

1.自我介紹
2.考研的時候爲何選擇的是這個學校呢?
3.回顧一下,上大學到如今這段時間內,讓本身最有挫敗感的事情是什麼呢?
4.有哪些方面須要在改進的麼?
5.對於之後參加的工做,你主要會看重哪些方面呢?
6.同窗這塊,你們都有在投遞字節這邊的崗位麼?
7.反問環節:關於面試結果,告知,這邊只是作簡單的瞭解,面試結果大約會在一週左右出來,到時候會有郵件或者電話通知。關於面試的結果,須要綜合前面的幾個面試官進行綜合評測,才能決定是否錄取。

總結+面試前的準備(供你們參考學習)

給你們個建議,面試官若是願意和你聊組裏業務,必定要把握機會好好聊,最好能提出讓面試官眼前一亮的問題,直指業務核心。代碼誰都會寫,基礎知識網上都能查到,可是對產品的理解和新的想法不是誰都有的.

首先

這份資料,一共有1312頁,230775個字涵蓋了Android全部高級知識,面試題都是各個大廠的面試者提供的。咱們創建了一個【學習交流羣】,你們會在一塊兒學習交流,解決問題。若是最近有面試的都會把本身最近面試的題目分享出來,還有一些面試遇到的坑,有時候還開開車感受還挺愉快!在這裏感謝全部羣裏提供面試題的夥伴,話很少說來看看大廠都喜歡問哪些高級壓軸題目吧!



羣文件夾裏的知識集合

因爲文章篇幅問題複製連接查看詳細面試答案解析以及學習筆記連接:https://shimo.im/docs/QVGDhCj...
或者能夠查看個人【Github】裏能夠查看
相關文章
相關標籤/搜索