知乎上一個關於Android面試的問題答案

因爲連接出錯,這裏附上原文連接:Touch Mejava



前段時間面試,本身以及小夥伴們簡要的彙總的一些面試問題,能夠對照的參考一下吧~android

建議就是在面一家公司以前瞭解好這個公司的app是以什麼爲驅動的,例如電商的話確定要了解hybrid 開發的一些知識點,圖像處理的公司要好好複習下bitmap canvas相關的知識點,祝好運!面試



UI:算法

1.View的繪製sql

Android視圖繪製流程徹底解析,帶你一步步深刻了解View(二)數據庫

2) Android自定義View的實現方法編程

3)canvasjson

Andriod中繪(畫)圖----Canvas的使用詳解canvas

Activity:緩存

1.onPause和onStop的區別 // 這裏有錯誤須要修改,修改在下方

onPause:能夠看到這個activity (好比dialog) onStop:看不見這個activity


2.Activit用的啓動方式

  • standard: 標準模式,一調用startActivity()方法就會產生一個新的實例。

  • singleTop: 若是已經有一個實例位於Activity棧的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。若是不位於棧頂,會產生一個新的實例。

  • singleTask: 會在一個新的task中產生這個實例,之後每次調用都會使用這個,不會去產生新的實例了。

  • singleInstance: 這個跟singleTask基本上是同樣,只有一個區別:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其餘的實例。

3.ActivityManagerService

第6章 深刻理解ActivityManagerService

4.activity的啓動過程:

深刻理解Activity啓動流程(一)

5.Activity之間的協做當一個activity A啓動了另一個activity B,它們的生命週期是有交叉的;

  • 首先A的onPause()被調用;

  • e以後B的onCrate(), onStart()及onResume() 方法會被調用(此時B擁有用戶焦點);

  • 最後,若是A在屏幕上不可見,onStop()方法被調用;

  • 所以,咱們在兩個activities中傳遞數據,或者共享資源時(如數據庫鏈接),須要在前一個activity的onPause()方法而不是onStop()方法中進行;

Service

1)service解析

Android 中的 Service 全面總結


2)兩種啓動方式

Service 兩種啓動方式


Fragment

1)生命週期:

[整] Android Fragment 生命週期圖


數據存儲:

1)contentprovider

12、ContentProvider和Uri詳解

2)sqlite

Android SQLite數據庫操做實例

內存泄露:


Android中使用Handler形成內存泄露的分析和解決


android開發中,可能會致使內存泄露的問題

1,不要讓生命週期長於Activity的對象持有到Activity的引用

2,儘可能使用Application的Context而不是Activity的Context

3,儘可能不要在Activity中使用非靜態內部類,由於非靜態內部類會隱式持有外部類實例的引用(具體能夠查看細話Java:」失效」的private修飾符瞭解)。若是使用靜態內部類,將外部實例引用做爲弱引用持有。

4,垃圾回收不能解決內存泄露,瞭解Android中垃圾回收機制

網絡

1)volley

Android庫Volley的使用介紹

Android Volley徹底解析(四),帶你從源碼的角度理解Volley

2)如何控制TCP鏈接時的擁塞

TCP的流量控制和擁塞控制

3)三次握手

TCP協議中的三次握手和四次揮手(圖解)

4)Android客戶端和服務端如何使用Token和Session

Android客戶端和服務端如何使用Token和Session

5) 移動端獲取網絡數據優化的幾個點

0. 鏈接複用 :

節省鏈接創建時間,如開啓 keep-alive。

對於 Android 來講默認狀況下 HttpURLConnection 和 HttpClient 都開啓了 keep-alive。只是 2.2 以前 HttpURLConnection 存在影響鏈接池的 Bug,具體可見:Android HttpURLConnection 及 HttpClient 選擇

  1. 請求合併:

即將多個請求合併爲一個進行請求,比較常見的就是網頁中的 CSS Image Sprites。若是某個頁面內請求過多,也能夠考慮作必定的請求合併。

2. 減小請求數據的大小:

對於post請求,body能夠作gzip壓縮的,header也能夠做數據壓縮(不過只支持http 2.0)。

3. 返回的數據的body也能夠做gzip壓縮,body數據體積能夠縮小到原來的30%左右。(也能夠考慮壓縮返回的json數據的key數據的體積,尤爲是針對返回數據格式變化不大的狀況,支付寶聊天返回的數據用到了)

4. 根據用戶的當前的網絡質量來判斷下載什麼質量的圖片(電商用的比較多)

圖像處理:

1.裁剪

2.Fresco:

Fresco | Fresco 中文說明

android緩存

1.LRUCache

GC:

1.GC過程:

JVM垃圾回收(GC)原理

內存:

1)內存分配:

JVM內存管理------JAVA語言的內存管理概述

多線程

1)線程池:

Java併發編程:線程池的使用

事件分發機制

1)Touch

Android 編程下 Touch 事件的分發和消費機制

算法:

1.TopK堆解決

Java最小堆解決TopK問題

優化

1)Listview的優化

listview - Android

2)convertView是如何傳遞到adapter的getView方法的

ListView性能優化系列之三

Hybrid

1)java和JS的交互

Android中Java和JavaScript交互

Android中JavaScript和Native之間的Bridge

  • WebView開啓JavaScript腳本執行

  • WebView設置供JavaScript調用的交互接口。

  • 客戶端和網頁端編寫調用對方的代碼。
-----------------------------------------------------------------------------------------------
感謝@ Jaeger 的修正,以前一直覺得一個dialog彈出會觸發當前的activity的onPause函數,其實並無,onPause()觸發的條件爲當前的actiivty即將要退出activityStack的top,然而dialog並非一個activity因此沒法讓activity退出的。寫了個demo的確是沒有彈出來onPause裏面的toast,詳細解釋stackoverflow也有一個比較好的答案,上連接你們更正一下,不要影響到面試最重要!
Android: Under what circumstances would a Dialog appearing cause onPause() to be called? 做者:張蝦昂 連接:https://www.zhihu.com/question/36654270/answer/70041187 來源:知乎 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
相關文章
相關標籤/搜索