很榮幸收到的oppo的面試通知,對此在網上查閱一些以往面oppo的題目,整體如下,參考題目來自
OppoAndroid面試小記
看準網oppo的android面試
android基礎
- Activity啟動模式及應用場景?
- standard: 普通的啟動
- singleTask: 棧内複用,主activity一般用這個
- singleTop: 棧頂複用,消息、通知頁面
- singleInstance:呼叫來電、鬧鐘
- service
- bindService和startService,如果需要和activity綁定使用bindService,不需要則使用startService
- 廣播,靜态廣播和動态廣播的差別?
- 注冊方式:靜态是清單檔案注冊,動态是代碼注冊
- 生命周期:即使應用不在了,仍能收到靜态廣播;對應activity銷毀,動态廣播便不會收到了
- 哪些場景會出現記憶體洩漏,解決使用弱引用
- 單例造成的記憶體洩漏
- 非靜态内部類建立靜态執行個體造成的記憶體洩漏
- Handler造成的記憶體洩漏
- 資源對象未關閉:File、Bitmap等
- 線程造成的記憶體洩漏
- 集合容器中的記憶體洩漏
- 使用ListView時造成的記憶體洩漏
- WebView造成的洩漏
- 事件分發機制
- RecyclerView和ListView的差別?
- 布局效果、常用功能與API等
- 緩存機制的不同,lv需要自己寫viewhoder,rv不需要,複用機制也不一樣
- 局部重新整理,lv隻能全部重新整理,rv可以局部重新整理
- 動畫,lv本身不支援動畫,rv支援動畫
- Activity+Fragment
- 開發中的常用的布局控件?什麼情況下線性布局,什麼情況下用相對布局?如何減少布局層級?
- 用過哪些事件總線?EventBus的優缺點是啥?
- WebView互動原理?
- 資料庫,如何進行資料庫遷移?
- 大資料加載
- 自定義View
- handler源碼分析
- 如何分析記憶體洩漏及如何處理
- 如何分析ANR及如何處理
- 性能優化
- 記憶體優化你做過沒有?一張十萬乘以十萬的圖檔,如何加載才不會記憶體溢出?
- 記憶體溢出,記憶體抖動,記憶體洩漏你都碰到過嗎?怎麼解決的?如何區分這幾種情況?怎麼解決由記憶體洩漏而導緻的記憶體溢出?
- 程序間通信,binder原理
- okhttp源碼
- 熱修複原理及幾種方案對比
- apk加強
- Glide,RxJava原理和性能優化
- 有沒有優化在弱網時候的通信?
- Android App優化之網絡優化
- 壓縮/減少資料傳輸量
- 利用緩存減少網絡傳輸
- 針對弱網(移動網絡), 不自動加載圖檔
- 界面先回報, 請求延遲送出
Java
- 多線程
- Thread直接調用run會怎樣?start的作用是什麼?
- 直接run會去執行run中邏輯,但不會建立線程
- start時,會C層先建立一個線程,然後線上程中執行run中邏輯
- tcp udp差別,TCP和http的主要差別?
- tcp是面向連接配接的,udp是面向非連接配接的,tcp三次握手保證可靠通信
- tcp和ucp是傳輸層的協定,http是應用層的協定
- http封包結構,https加密
- 請求行(http版本、請求方式)
- 請求頭(host、content-type、content-length)
- 請求體
- http本身存在竊聽、篡改和冒充的風險,在http基礎上增加ssl層便為https
- jvm
- 有幾種常見的單例模式?對于這幾種單例模式synchronized具體鎖的是什麼東西?
- 即時通信原理?
- osi 7層和4層模型
- 心跳機制需要考慮哪些因素?
- 心跳發送和業務邏輯在同一個線程
- 心跳發送和業務邏輯共享網絡連接配接
- 心跳的發送間隔和檢查間隔的确定,一般30s