2020年的大廠末班車!啃完這些資料,我拿到了字節跳動Android高級開發工程師的offer!

簡述

博主是20屆碩士畢業,投的字節Android高級開發工程師,面試準備了兩個月,啃透了一堆資料。前後歷時兩個月,最後拿到了offer。

面試感想:

整體面得比較累,基礎面、交叉面、Boss面,前前後後對接了 6 個面試官
(離當初普遍說法中說的3面+HR面 貌似差距有點大¬_¬)
算法到 Boss 面都還在寫,不過慶幸的是面試官沒有爲難我
(老實交代了算法沒怎麼準備,哎…)算法都不太難。

整體項目比基礎問得多。

面試建議:

算法、基礎是敲門磚,項目是試金石,良好的面試形象是加分項。
(形象還是要的,起碼要整潔不邋遢)

簡歷上列舉的項目多想想,爲什麼做這個項目?做這個項目的目標是什麼?我的方案是什麼?相對其他方案我的方案優勢是什麼?項目的收益是什麼?項目的架構圖是否能畫出來?項目中使用的主要框架原理是否前前後後都清楚?
(我大概就是項目拯救了自己,基礎準備有點倉促T^T)。

如果是現場或視頻面試,良好的面試形象還是比較有必要的。在部門 TL面的時候,就提到我相對很多其他面試者比較好的一點就是,整個人的形象狀態比較好,沒有讓人覺得很疲憊。

下面,我會把自己的面試經歷分享出來,希望對大家的學習和麪試有所幫助

一面

  • 你們 Android 開發的時候,對於 UI 稿的 px 是如何適配的?

  • Android 目前穩定高效的UI適配方案、今日頭條屏幕適配方案 AndroidAutoSize、今日頭條-通過反射修正系統的density 值(這個感覺還是比較簡單的)

  • 寬高限定符適配

  • 兩個值相等的 Integer 對象,== 比較,判斷是否相等?

  • Handler機制整體流程;

  • Looper.loop()爲什麼不會阻塞主線程;

  • 使用Handler需要注意什麼問題,怎麼解決的?

  • Native、H5、RN頁面混合跳轉時,頁面清棧的橋如何實現的?

  • 自己做的一個項目,原理講清楚就行,講不清就畫圖

  • 怎麼計算一個View在屏幕可見部分的百分比?

  • ClassLoader 的雙親委派機制

  • 簡單介紹下 Https 的原理

  • 什麼情況會導致內存泄漏,如何修復?

  • 下載一張很大的圖,如何保證不 oom?

  • 有沒有做過UI方面的優化,做過哪些?

  • 其他項目相關問題
    算法:二叉樹輸出第 k 層節點元素

二面

  • Native、H5、RN頁面混合跳轉時,頁面清棧的橋實現
  • 頁面混編框架的設計與難點
  • RN 通用容器的設計
  • 用戶行爲監控方案設計
  • JS 錯誤治理方案
  • IdHandler(閒時機制);
  • postDelay()的具體實現;
  • post()與sendMessage()區別;
  • RN 頁面對用戶行爲的監控與JS錯誤治理,在問題發現有什麼收穫、優化點
  • WebView 與 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥區別
  • Flutter、Kotlin接觸使用過沒有

三面

  • 你們公司 Picasso 有使用過沒,介紹下
  • Picasso 單引擎,在多 Bundle 的情況下怎麼保證數據隔離的?
  • 美團 RN 與 Picasso 的區別
  • 省略若干項目相關問題…
  • RN 的頁面追蹤埋點如何實現的
  • 美團首頁是否是 RN 頁面,MTFlexBox 原理
  • synchronized 修飾 static 方法、普通方法、類、方法塊區別
  • synchronized 底層實現原理
  • volatile 的作用和原理
  • 一個 int 變量用 volatile 修飾,多線程去操作 i++,是否線程安全?
  • 如何保證 i++ 線程安全?
  • AtomicInteger 的底層實現原理?
  • 使用 AtomicInteger 可以使 i++ 線程安全
  • 說下對線程池的理解,以及創建線程池的幾個關鍵參數
  • Handler 機制又問了一遍…
  • 介紹下 Binder 機制,與內存共享機制有什麼區別?
  • Java 集合,介紹下ArrayList 和 HashMap 的使用場景,底層實現原理
  • ArrayList 與 LinkedList 的區別
  • 算法:兩個有序的鏈表的合併
  • 算法:輸入一個字符串(不含和.)、正則(字母、和.任意組合),判斷字符串是否合法
  • 簡單介紹下,項目中遇到的一些技術難點

四面

  • 下面的代碼, str 值最終爲多少?
  • 換成 Integer 值又爲多少,是否會被改變?
  • 考點:Java 值傳遞 (第 2 題相同)。編寫代碼測試,在 changeValue() 方法中修改入參,並不會改變之前的值;原理 :Java 程序設計語言總是採用按值調用,方法得到的是所有參數值的一個拷貝,即方法不能修改傳遞給它的任何參數變量的內容。基本類型參數傳遞的是參數副本,對象類型參數傳遞的是對象地址的副本;
  • 題解:在 changeValue() 中,對於對象類型參數,直接修改的是對象地址副本的值,所以之前變量的地址並未被修改!若修改的是對象實例裏面的某個值,之前變量則會被修改
public void test() {
      String str = "123";
      changeValue(str);       
      System.out.println("str值爲: " + str);  // str未被改變,str = "123"  
}  
public changeValue(String str) {
       str = "abc";  
}
  • 下面的代碼,再次使用對象 student 是否需要判空?

  • Java 中方法參數的使用情況總結:
    一個方法不能修改一個基本數據類型的參數(即數值型或布爾型);一個方法可以改變一個對象參數的狀態;一個方法不能讓對象參數引用一個新的對象

public void test()  {
      Student student = new Student("Bobo", 15);      
      changeValue1(student);   // student值未改變,不爲null! 輸出結果 student值爲 name:Bobo、age:15      
      // changeValue2(student);  // student值被改變,輸出結果 student值爲 name:Lily、age:20      
      System.out.println("student值爲 name: " + student.name + "、age:" + student.age); 
}  
public changeValue1(Student student) {
      student = null;  
}  
public static void changeValue2(Student student)  {    
    student.name = "Lily";           
    student.age = 20;  
}
  • Java 的幾種引用類型,弱引用的使用場景?
  • 線程池分類,解釋下幾個核心參數?
  • APK 的打包過程是什麼?
  • APK 爲什麼要簽名?
  • 是否瞭解過具體的簽名機制?
  • 爲什麼要分 dex ?
  • SDK 21 不分 dex,直接全部加載會不會有什麼問題?
  • 常見的設計模式有哪些?
  • 你提供的 JS 錯誤治理方案,用了哪些設計模式?
  • 算法:二叉樹層序遍歷,奇數層逆序遍歷節點,偶數層正序遍歷
  • 未來 3~5 年的規劃是什麼?
  • 你覺得你的優點是什麼?
  • 缺點是什麼?
  • 現在的職級,近期的績效如何

五面

  • 商業化部門相關的業務介紹 (核心大概是商業化部門壁壘高,培養一個人成本高,比做其他業務更有含金量,可以積累很多業務策略知識),然後讓問他問題
  • 未來幾年的規劃?
  • 生活上有什麼規劃?
  • 你覺得你的優點是什麼?
  • 缺點是什麼?
  • 現在的職級,近期的績效如何
  • 爲什麼給你這麼好的績效?
  • 有沒有看其他機會?
  • 阿里面試的情況

六面

  • 算法:數組插入,考慮擴容
  • 在項目的遇到的比較有挑戰的事是什麼?
  • 你在美團負責的業務有哪些?
  • 未來幾年的規劃是什麼?
  • 你覺得你的優點是什麼?
  • 缺點是什麼?
  • 現在的職級,近期的績效如何

HR 面

  • 本科和研究生專業都是偏硬件的,是否有相關的軟件經歷?
  • 研究生是保研的還是自己考的?
  • 去美團之前有沒有 Android 開發經歷?
  • 當時爲什麼要選擇去美團?
  • 爲什麼要選擇來北京?
  • 爲什麼要換工作?
  • 期望以後的工作是怎樣的?
    金句:現在自己的技術成長有點碰到瓶頸,加上一直對您公司欽慕有加
  • 現在的職級,近期的績效如何?
  • 這麼好的績效,爲什麼不選擇美團內換部門看看機會?
  • 幾次晉升中,業績亮點是什麼?
  • 家是哪裏的,有回家那邊發展的打算沒有?
  • 有打算再去看看快手之類的工作機會沒有?
  • 問一些阿里現在的面試進展和情況
  • 期望的薪資

總結

面試是一個不斷學習、不斷自我提升的過程,有機會還是出去面面,至少能起到查漏補缺效果,而且有些知識點,可能你自以爲知道,但讓你說,並不一定能說得很好。
有些東西有壓力纔有動力,而學到的知識點,都是錢(因爲技術人員大部分情況是根據你的能力來定級、來發薪水的),技多不壓身。

  • 在面試大廠前,我給三十多家企業投遞過簡歷,但都沒有迴音。這場疫情影響了太多太多的企業,這對於基礎不太紮實的同學來說是一個非常大的負面因素。大廠標準高, 小廠又不招。建議基礎不太好的同學再考慮考慮考研。
  • 面試的問題大多是基礎的,有些問題即使不會也沒關係,也是可以利用你的思考方式去猜,面試官非常在意你是如何進行思考問題。字節面試中,有很多的問題我都不會,但是通過自己已學知識進行合理推斷,同樣給面試官留下非常好的印象。
  • 春招也靠運氣,有時候遇到的面試官不太好,就算什麼都會,也有可能沒通過。大家在春招時, 心態一定要及時調整,不然會越來越不自信。
  • 死摳項目細節,針對項目的問題一般佔比不會太大,面試官一般會對你的項目中某個細節進行提問。如果基礎不紮實,只是面向百編程,很有可能會被問懵。

最後

在本文最後,我把這一套文檔pdf分享給大家,覺得有用的麻煩點贊關注走一波,謝謝!!!面經中有我整理的知識點的答案,如下圖示例,非常詳細!!!

安卓進階必備資料包;收集了目前最主流的技術選型。通常也是各大公司面試最常問到的。比如說自定義view,架構設計,NDK技術OpenCV。跨平臺技術目前成熟投入使用的公司很少,但是是一個必然的方向

本文記錄我整個面試經歷,全文很長,時間有限的朋友可以直接在文末獲取資料文末免費分享****在本文最後部分會把這一套文檔pdf分享給大家,覺得有用的麻煩點贊關注走一波,謝謝!!!面經中有我整理的知識點的答案,如下圖示例,非常詳細!!!

點擊這裏的藍色字體可以獲取:https://github.com/xieyuliang/ByteDance-Android

安卓進階必備資料包;收集了目前最主流的技術選型。通常也是各大公司面試最常問到的。比如說自定義view,架構設計,NDK技術OpenCV。跨平臺技術目前成熟投入使用的公司很少,但是是一個必然的方向

我這篇文章並不是簡單的描述一些面試中的題,或者總結一些Android的知識,而是想記錄我整個的想法和準備的過程,以及一些心得體會,讓大家更加全面的去看待工作、跳槽和生活

點擊這裏的藍色字體可以獲取:https://github.com/xieyuliang/ByteDance-Android

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