前言
先說明一下, 樓主是二本雙非學校, 且非科班生, 有三個App上架, 大三在讀,4月1號投了位元組的簡歷, 4月中旬參加了筆試, 4月底收到位元組面試邀請,5月初參加了第一輪面試, 5月中旬參加了二面, 5月27日參加了三面,6月8日 offer mail

話不多說,直接進入主題
一面(60分鐘)
前15分鐘
- 個人介紹, 什么時候接觸的安卓開發, 實習能實習多久, 介紹一下專案
- 你說你的軟體出現了OOM, 你怎么解決的? 線上crash你是用了什么來分析的?
- 這些專案都是怎么來的? 軟體中這些內容都怎么來的? 你知道后端怎么來的嗎? 后端是不是爬下來的? 每天有多少上傳量呢?
接下來15分鐘
- 行程和執行緒有啥區別呢? 為什么要定義出這樣的概念來? 有什么用呢?
- 哈希表是一個怎樣的資料結構? 怎么避免hash碰撞? 容量有什么樣的特點?
- 資料庫有了解嗎? 索引了解嗎? 怎么實作的快速查找? 快速查找的是什么東西?
- TCP協議如何確保穩定傳輸?
- 說一下Activity的啟動模式
- Handler有了解嗎? 說一下原理? 你剛才說到Looper是個死回圈, 那么messageQueue 沒訊息的時候那它不還是會回圈占用CPU資源嗎?
- 我看你用過一些開源庫比如說okhttp, 你能說一下原理嗎? 分析一下 okhttp 自帶的這些 InterceptorChain 是干啥的? 這些 Interceptor 的用途呢?
然后12分鐘
你覺得有什么你擅長的但是我還沒問的??
- 那我講一下螢屏怎么繪制view的吧
- 為什么多次測量性能差了呢? Compose是怎么解決這些的?
- onMeasure里面有個東西叫MeasureSpec, 你說一下這是一個什么樣的資料
最后一道演算法: 劍指 Offer 38. 字串的排列 - 力扣(LeetCode) (leetcode-cn.com)
可能當時沒答上來的只有個 HashMap 如何盡可能避免碰撞了
二面(45分鐘)
- 你主要用的 Java 還是 Kotlin?(我: Kotlin, 面試官:那我問你點 Java 的東西吧)
- 怎么創建一個執行緒? start 和 run 的區別? 執行緒和行程的區別? 行程可以沒有執行緒嗎?
- Android 里面, 主執行緒的作用是什么? 重繪UI能放到其他執行緒里面嗎? 你說的可以放到其他執行緒的特殊情況是什么呢? 怎么在子執行緒彈一個 toast?(提前 Looper.prepare 就行了)
Looper.prepare做了什么事情呢? 能介紹一下ThreadLocal的含義嗎, 內部實作原理呢?- Java里我們要訪問本地一個檔案, 我們應該怎么辦? FileInputStream讀取的是二進制流資料, 怎么讀取文本呢? 怎么判斷讀到檔案末尾了呢?
- 你有沒有遇到什么比較難的問題呢? (我: OOM 我專案經常出現(這里想讓面試官問我專案, 淦 他不問)) 什么場景會產生OOM呢? 什么原因呢? 怎么解決的呢?
- 假設一個圖片很大, 應該怎么處理呢? (我: Glide/BitmapFactory(這里想讓面試官問Glide 淦 他不問)), 具體是怎么縮放的呢? 假設 BitmapFactory 的 inSampleSize 設定為2的話, 圖片記憶體占用縮小為多少? ARGB_8888和RGB_565的區別?
- HTTP請求常用的header說一下? 常見的狀態碼說一下? 206是什么? 你用過斷點續傳嗎?
- 介紹一下Jetpack組件的
ViewModel和LiveData怎么用的, 為什么ViewModel可以跟隨Activity的生命周期而在旋屏時候保留資料呢? (這里說到ViewModel我提到了MVVM架構, 我想讓他問, 淦 他沒問) - 堆記憶體和堆疊記憶體有啥區別呢? (我這里說堆記憶體是gc的主要區域, 我想讓他問我gc, 淦 他沒問) 分別存啥?
- Java里面
ClassLoder加載機制是什么? 是先去parentClassLoder里面加載還是我自己的里面加載呢? 這樣做的目的是什么呢? - Java反射了解嗎? 這么去訪問一些私有的方法和變數呢?
演算法題: 230. 二叉搜索樹中第K小的元素 - 力扣(LeetCode) (leetcode-cn.com)
剛開始遞回遍歷子節點個數, 面試官說你這樣還會多次遍歷啊, 能降低一下復雜度嗎? 然后我用了中序遍歷
你這個演算法多執行緒訪問可能會出問題啊, 你怎么辦, 你不能限制訪問者怎么用, 訪問者想在多執行緒去跑這個演算法怎么辦呢?
一些可能當時沒答上來, 答得不太好:
-
執行緒之間共享記憶體機制呢?
執行緒之間是共享記憶體的, 但是執行緒之間為什么會出現不同步呢?(多執行緒可見性) 因為除了記憶體, 資料還會被快取到CPU暫存器和各級快取中, 當修改一個變數的時候, 可能會先寫到快取, 稍后再更新到記憶體
-
ThreadLocal實作原理?內部維護了一個簡易的
hashmap, hahsmap的hashcode是根據當前執行緒的獲取threadLocal的順序,hashcode是使用nextHashCode方法操作一個atomicInteger, 每次都會遞增一個指定的值, 然后每一個執行緒都會維護一個ThreadLocalHashMap, ThreadLocal的get和set方法實際上就是操作當前執行緒的ThreadLocalHashMap 物件
三面(40分鐘)
- 介紹一下專案
- 介紹一下LaunchMode
- Manifest里面activity的process什么用途, 為什么要多行程呢?
- 一直在介紹專案...
- 反問: 團隊對Kotlin支持態度? 對Jetpack的態度呢? 對新人培養呢?
然后呢三面就過了, 沒啥難的, 問專案那可太簡單了, 只要對自己的專案有足夠的自信應該都沒問題

最后樓主想說,其實大廠的面試沒想的那么難,要輕松掌握很簡單,要點就兩個:
-
找到一套好的視頻資料,緊跟大牛梳理好的知識框架進行學習,
-
多練, (視頻優勢是互動感強,容易集中注意力)
你不需要是天才,也不需要具備強悍的天賦,只要做到這兩點,短期內成功的概率是非常高的,
對于很多初中級Android工程師而言,想要提升技能,往往是自己摸索成長,不成體系的學習效果低效漫長且無助,下面資料部分截圖是我花費幾個月時間整理的,誠意滿滿:特別適合有3-5年開發經驗的Android程式員們學習,
自行下載直達領取鏈接:【點擊我即可獲得!】
以上進階BATJ大廠學習資料可以免費分享給大家,需要完整版的朋友,【點這里可以看到全部內容】,

還有一件事,別忘記點贊關注!

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/287185.html
標籤:其他
