作者:老王
開篇
先說明一下, 樓主是二本雙非學校, 且非科班生, 有三個App上架, 大三在讀
9月1號投了位元組的簡歷, 9月中旬參加了筆試, 9月底收到位元組面試邀請
10月初參加了第一輪面試, 10月中旬參加了二面, 10月27日參加了三面
10月28日 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的態度呢? 對新人培養呢?
然后三面就過了, 沒啥難的, 問專案那可太簡單了, 只要對自己的專案有足夠的自信應該都沒問題
總結
這次面試的感受一就是要對自己做個的專案要比較深的了解,不管優點還是缺點,該怎么優化會達到更好的效果,這樣才會在面試中能夠更好的回答面試官提的問題,從中給自己加分,二是在面試前要做好提前的預習一下之前學到和用到的一些技術知識點,這個防止面試官問道一些其他技術點問題答不上來,導致面試失敗,這就虧大了,
最后
小編在這將自己收錄整理的一些Andriod學習檔案和面試檔案,還有Android 高工的學習成長路線圖分享給大家,希望能對大家有所幫助,大家可以點擊下方小卡片進行訪問查閱,
喜歡本文的話,不妨順手給我點個小贊、評論區留言或者轉發支持一下唄~


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