凜冬已至,一個android碼農面進了騰訊,終於到達2020的春日

前言

由於衆所周知的原因,原生android開發如今已經日漸凋敝,

作爲一個Android程序員,不僅要會Java,Kotlin,JavaScript,Css,Html,還要會Flutter,C++,FFmpeg,Linux等相關知識。

我有個朋友面試了n家公司,終於面上了騰訊
前前後後面試了快二十家公司,既有外包,也有中小型企業,也有準備D輪甚至上市的C輪企業,更有BAT等知名企業。
接下來就一一說一下他去面試各家公司的面試題。
也建議各位面試的時候不要上來就直奔BAT等,大廠面試官的技術廣度與深度也不是剛出來面試的你,能搞定的。
最好先去一些小公司看看他們問的哪些東西,自己回去在查漏補缺一下,最後去大廠。
最後祝各位能進入自己心儀的公司。

按照面試的時間順序來一一羅列他記住的面試題

image

武漢佰鈞成(外包OPPO,自家面試官)

兩輪面試

  • Activity的啓動流程
  • Activity的啓動模式,應用場景
  • 如何減少對第三方框架的耦合
  • hashmap的基本原理

image

博彥科技(外包OPPO,OPPO面試官)

兩輪面試

  • Handler機制
  • Binder機制
  • 寫一個單例模式,DCL爲什麼要加V關鍵字
  • 直接在Activity Sleep 5000ms,再post一個runable會不會ANR。
  • 如何監聽ANR
  • View的繪製流程,每個都是幹什麼的
  • 事件傳遞機制

image

Insta360 (C輪公司)

三輪面試

  • 組件化如何實現組件通信
  • HashMap基本原理 如何減少hash衝突 如何增大hash衝突
  • 安裝包怎麼優化的
  • 如果有A,B,C,D,E五個步驟,每個步驟都需要操作對應請求,用哪種設計模式。

image

華爲外包

兩輪技術面試

  • 安裝包優化做了哪些工作
  • 對加班怎麼看的

本來一面完了就讓等着二面的,等了十分鐘後跟說二面面試官暫時不在,等下次再約時間,

出門等了10分鐘的公交,離家還有20分鐘的時候,又給他打電話讓他回去參加第二面,

然後就沒去了,太折騰人。

image

綠網科技

三輪技術面

  • hashmap原理
  • MVP,MVVM,MVC的區別是什麼
  • Java Memory Model的內存模型
  • 如果讓你設計一個app,打算怎麼設計
  • JVM垃圾回收有哪幾種算法,有哪幾種垃圾回收處理器
  • Serial使用的哪一種回收算法
  • JVM的內存模型
  • Android主線程是怎麼啓動的
  • dex是如何轉爲機器碼的
  • llvm編譯是如何優化代碼的
  • 說一個你自己的缺點。

image

同洲電子

四輪技術面

  • Activity的啓動流程
  • 靜態類的靜態方法能不能被子類重寫(不能,走的invoke-static指令,只有走invoke-virtual指令的纔可能實現多態)
  • Linux的啓動流程
  • 對Native層有沒有興趣
  • 對做智能家居有沒有興趣
  • 招一個應屆生進來做app也是做,招你也是做,爲什麼要招你

image

順豐科技

一輪技術面 總共三輪面試

  • handler機制
  • looper的喚醒是在Java還是Native層,怎麼做到的
  • HashMap,ConcurrentHashMap,HashTable有什麼異同
  • Binder通信機制
  • 跨平臺開發熟不熟悉
  • 如何提高海外用戶的訪問速度,假設服務器在深圳。
  • 如何學習一個新東西,有哪些執行步驟

image

百度

  • 紅包隨機算法 是怎麼做到的
  • 寫一個二叉樹的深度優先遍歷,遞歸 非遞歸
  • Android中LocalServerSocket是幹什麼用的
  • binder的Native層代碼看過嗎
  • Linux有哪些RPC機制
  • 爲什麼android使用了Binder機制沒采用共享內存
  • 如果讓你設計一套進程間通信的機制,你會怎麼設計
  • Linux的模塊動態加載機制是怎麼實現的
  • 一個物理屏劃分爲三個邏輯屏,是靠誰來分發事件的。
  • ConcurrentHashMap是不是絕對的線程安全。(final,絕對線程安全,相對線程安全,線程不安全)
  • 線程池是如何管理線程狀態的

image

大宇無限(C輪公司 前身是豌豆莢)

他第二心儀的一家公司,辦公環境,氛圍,福利都特別好 總共七輪面試 五輪技術面

  • Kotlin的訪問權限
  • Koltin爲什麼比Java更安全
  • Koltin比Java好在哪
  • JVM的內存模型
  • JMM的內存模型
  • 爲什麼操作數棧是Thread-Private
  • 計算二叉樹的深度
  • ArrayList跟LinkeList區別
  • ArrayList如何擴容的,如何提高ArrayList的效率
  • 動態代理靜態代理區別
  • 啓動優化怎麼做的。
  • 如果給你個IOS APP,你打算怎麼優化。
  • http有哪幾種版本,版本間有什麼區別。https跟http有什麼區別。
  • apk爲什麼要簽名,v1跟v2簽名的區別
  • apk從編譯打包都安裝的流程
  • dex到odex爲什麼不能在編譯期優化
  • 熱修復原理
  • 你的優勢是什麼

image

平安

三輪面試

  • http2.0 1.1 1.0的區別
  • http如何保證安全性
  • 安裝包優化有哪幾種方式
  • 啓動優化有哪幾種方式
  • View的繪製流程,每個方法幹什麼的,如果要獲取View的寬高,在哪個方法裏獲取
  • 如何應對弱網環境
  • android數據存儲方式
  • 如果一個app無法訪問網絡,你怎麼做數據存儲。
  • DVM跟JVM的區別
  • React Native跟原生開發的優劣

image

騰訊

三輪面試 一面

  • 算法題 通電小球
  • Android 沉浸式狀態欄 怎麼實現的
  • 事件處理函數有哪幾個,父View 子View 監聽同一個事件,重寫哪些方法。在哪個View重寫?
  • ViewRootImpl接受事件嗎?
  • apk編譯打包流程 V1,V2 簽名區別
  • 利用logging監聽方法耗時,會不會讓app增大延遲。
  • eventbus爲什麼要用CopyOnWriteList?
  • 插件化怎麼加載資源的?
  • JVM怎麼保證gc效率跟線程運行效率的 ?
  • 如果android沒用對應的view,flutter能運行嗎? 手寫單例模式,volatile 跟 synchronized區別?
  • 接口暴露,但是不讓別人調用,有哪些辦法?

二面

  • 爲什麼採用flatbuffer? 比Json好在哪裏?
  • 如何處理Crash,NativeCrash呢?Google是怎麼做到的?如果上報過程中再次產生Crash能不能捕捉到?
  • uncaughtException是被誰調用的,如果再次崩潰能不能捕獲到?
  • Linux是怎麼知道app崩潰的,如果想要在被kill前 做一些耗時操作,該怎麼做?
  • 考慮設計一個crash捕捉模塊。
  • 100萬個數字求100個最大值。
  • 手寫快速排序算法。

三面 (GM面)

  • kotlin比Java好在哪裏,是函數式編程嗎?
  • 如何防止DNS劫持?
  • 如果讓你實現一個調試器,你會怎麼設計?靜態調試?動態調試呢?

總結

大廠基本上不太看重具體的技術,無論你是Java還是C++,比較看重思路與抽象的解決方案

如果看到這裏的同學,想在技術上有精進的話,推薦幾本書跟專欄

強烈推薦《深入理解JVM(周志明)》《Android開發藝術探索》《Android內核剖析》

推薦 《Linux鳥哥私房菜》《unix環境高級編程》

image

image

這幾本有PDF版,需要可以私信我【書籍】贈送

強烈推薦 極客時間專欄: 《張紹文-Android開發高手課》

這篇專欄非常非常吊 不過要求要有C++跟Linux基礎 而且張紹文自己也在後面講了,如果把他的文章裏講的內容全部摸透,熟悉過了之後,再刷點算法題,基本上沒有進不去的大廠

還有更多的面試題和算法題,可以關注我

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