最近面試了不少公司, 近期告一段落, 整理一下各家的面試問題, 打算陸續發布出來, 供有緣人參考。今天給大家帶來的是QQ音樂Android一面涼經。
- 面試崗位: QQ音樂Android開發工程師
- 面試時長: 50min(提問40min + 反問10min)
- 代碼考核: 無
面試問題(40min)
- 自我介紹
- 工作經歷, 重點講能突出自己優勢的經歷或項目
- 換工作的原因
- 聊項目A(RN頁面打開速度優化)
- 簡單說一下RN的實現,和客戶端的交互原理和流程。
- RN頁面啟動耗時久?主要的原因是什么?
- 網絡請求前置,前置的請求參數是怎么獲得?
- 僅網絡請求前置的話, 啟動速度還是會比native慢。還有其他優化嗎?
- 進入頁面前進行預熱可能造成不必要的資源消耗, 有沒有統計過多少人會進入這個RN頁? 有些用戶可能不會點。
- 工程內用RN的頁面多不多?
- 公司內RN的基建是否參與建設
- 聊項目B(業務組件化)
- xx業務的組件化講一下, 具體做了什么?
- 從主工程里抽出來的子倉庫如何保留git記錄?
- 說下組件化模塊化的優點。常說的就是“代碼清晰,業務隔離”。面試官認為這兩點是比較虛幻的。怎么個清晰法,怎么個解耦法其實是不好量化的。實際對業務上的幫助或其他方面的優點說說你的理解。
- 聊項目C
- 展開講講
- 聊聊你擅長的領域(內存、頁面打開耗時、App安裝、so、線程、內存、網絡、UI卡頓、ANR、Web等挑一個自己擅長的或有研究的講講)
- 內存
- 內存線程監控怎么做?線上問題排查思路。內存監控工具有哪些?檢查內存泄漏的原理, 如何設定內存閾值。
- LeakCanary的原理。它是怎么做到檢測內存泄漏。如何實現?
- LeakCanary過一段會去檢測內存中的對象, 這個時機是怎么定的?
- 內存中常用的幾種引用?四大引用。軟引用和弱引用的區別說一下
- 線程
- 在Activity/Fragment頁面執行異步任務, 在任務執行前退出頁面。那么這個過程中, 線程的執行過程以及內存的情況, 描述一下。比如內存泄漏, 這個線程會不會執行。會有什么樣的問題。
- 這種情況在業務中很容易出現, 你們在工程中是怎么規避的?比如有些任務我們是使用handler, 有些任務要我們做一些后臺的處理。這樣的情況又該怎么樣處理呢?
- 大多數開發者都會退出頁面的時候去移除異步任務。但是每個地方都需要手寫的話, 相對來說還是比較繁瑣的。要是給你一個需求, 讓你實現一個任務框架。要求不用手動地去移除, 但是退出頁面的時候也不會去執行。你可以結合感知生命周期的組件去想想怎么實現這個東西。比如說我在用的時候我就知道什么時候該移除, 自動移除。我就只用管它怎么用就好了,我根本就不用考慮使用它會有什么問題。怎么實現?
- kotlin協程
- kotlin協程的原理大概說一下。它怎么做到寫起來是同步的, 實際上是異步的。它是怎么做到的?
- 協程出現問題不好排查, 不像線程鏈路比較簡單, 協程包裝的層級比較多。針對協程問題排查, 你們有什么提效手段?
- 內存
- 你們工程中kotlin的版本升級到多少?kotlin版本升級過程中遇到過什么問題, 怎么解決的?
反問問題(10min)
當前招聘的Android崗位之后會負責什么內容?
缺的業務比較多, 并不明確, 看候選人個人偏好和團隊配置情況。目前有以下方向: 游戲化, RN相關、歌單等。
為什么沒有問Java/Android基礎、操作系統、計算機網絡相關的, 也沒有代碼考核(算法題), 為什么只問項目經歷?
1 基礎是可以背的, 并不能體現出候選人的優勢
2 其實我們面的方式也不一定能體現出一個人真實的能力, 有可能有些人就發揮不出來
3 我們這邊還有一些面試官喜歡面算法, 不同的傾向吧
4 我這邊更希望能體現出候選人擅長的地方
面試會有幾輪? 每一輪面試實際考察的內容應該不一樣吧?
至少4-5輪。
我們對社招同學, 看重經驗會多一些。有經驗就面經驗。沒有經驗就面一些基礎能力。能力是可以遷移的。即使你在一個地方深入做了很多東西, 換了一個地方, 它可能是沒什么用的。很多業務其實是沒法直接復用的。即使說是性能優化, 換了一個項目它有些東西可能就完全用不到了。但是你在做這個東西中的一些思考, 是可以遷移的。 “做這個東西怎么做, 怎么去思考做好”這個是可以遷移的。
招聘的崗位是需要一個什么職級的?
7、8、9都可