Android Inter

 Java中的String類能夠被繼承麼?

答:不能,由於它是一個final類,一樣的還有Integer,Float,Boolean,Byte,Character,Long,Short等等,也就是說,全部基本類型的包裝類都是final類,沒法被繼承或修改html

如何安全的退出一個已經開啓多個activity的APP

答:在Application中持有一個全局的集合(List),進而在其onCreate()方法添加到這個集合,最終遍歷全部的activcity並finish。
ActivityCompat.finishAffinity(this);java

簡單的概敘下Handler?

答:andriod提供了Handler 和 Looper 來知足線程間的通訊。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換
1)Looper: 一個線程能夠產生一個Looper對象,由它來管理此線程裏的MessageQueue(消息隊列)。
2)Handler: 你能夠構造Handler對象來與Looper溝通,以便push新消息到MessageQueue裏;或者接收Looper從Message Queue取出)所送來的消息。mysql

  1. Message Queue(消息隊列):用來存放線程放入的消息。
    4)線程:UIthread 一般就是main thread,而Android啓動程序時會替它創建一個MessageQueue。

文件的上傳?

答:使用HttpURLConnection獲得輸入流,將文件的經過IO流的方式上傳到服務器。可以使用第三方Xutils框架。android

ListView的源碼和如何優化Listview?

答:根據ConvertView來判斷View的重用仍是新建,新建的話經過ViewHolder來存儲全部的控件並設置到View的Tag中有利於下次的複用。面試

AIDL原理?

答:AIDL是一個縮寫,全稱是Android Interface Definition Language,也就是Android接口定義語言。
實現進程間通訊,尤爲是在涉及多進程併發狀況下的進程間通訊,咱們能夠經過AIDL來制定一些規則,規定它們能進行哪些交流。
經過接口的方式建立AIDL文件的後綴是 .aidl,而不是 .java。
建立一個類實現剛纔那個aidl的接口,經過預先定義的接口達到兩個進程內部通訊進程的目的,在Service中Aidl返回一個Binder對象。算法

Binder機制

Binder是Android的系統進程通許方式之一簡稱IPC
Binder使用Clinet->Server通信方式,Binder框架定義的四個角色,Server,Client,ServiceManager,以及Binder驅動,其中Server,Client,ServiceManager運行於用戶空間,驅動運行於內核空間,Binder驅動程序提供Dev/binder與用戶空間交互,Server,Client,ServiceManager,經過open和ioctl文件操做函數和Binder交互。
深刻理解Binder機制sql

TCP和UDP的區別,tcp如何保證可靠的,丟包如何處理?

TCP面向鏈接,三次握手,發送須要肯定以連接狀態(如打電話),輯通訊信道是全雙工的可靠信道
UDP無鏈接,發送數據無需肯定是否鏈接(如郵差),則是不可靠信道
將文件分塊發送,接收端每收到一塊數據就發送一個收到確認給發送方(包括收到的數據長度)
發送方在收到接收方發送的「收到確認」後才接着發送下一塊數據。。。。
直到整個文件發送完畢。
每塊數據都加一個包頭,裏面能夠包含一些標誌信息,如:是否全部數據發送完畢(即最後一個包了)
三次握手簡單的說就是:(C:客戶端,S:服務端)
C:SYN到S 客戶端發送SYN(SEQ=1022)報文給服務器端,客戶端進入SYN_SEND狀態
S:如成功--返回給C(SYN+ACK),迴應一個SYN (SEQ=2032)ACK(ACK=1022+1)報文,服務器段進入SYN_RECV狀態。
C:如成功---返回給S(ACK) 客戶端收到服務器端的SYN報文,迴應一個ACK(ACK=2032+1)報文,進入Established狀態。數據庫

什麼是三級緩存?三級緩存原理

答:網絡加載,不優先加載,速度慢,浪費流量
本地緩存,次優先加載,速度快
內存緩存,優先加載,速度最快
首次加載 Android App 時,確定要經過網絡交互來獲取圖片,以後咱們能夠將圖片保存至本地SD卡和內存中
以後運行 App 時,優先訪問內存中的圖片緩存,若內存中沒有,則加載本地SD卡中的圖片,最後選擇訪問網絡。編程

Service的兩種啓動方法,有什麼區別 ?

答:1.在Context中經過public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法來進行Service與Context的關聯並啓動,而且Service的生命週期依附於Context(不求同時同分同秒生!但求同時同分同秒屎!!)。
2.經過public ComponentName startService(Intent service)方法去啓動一個Service,此時Service的生命週期與啓動它的Context無關。json

View和SurfaceView的區別?

答:SurfaceView中採用了雙緩存技術,在單獨的線程中更新界面
View在UI線程中更新界面
當程序須要更新View上的圖像時,程序必須重繪View上顯示的整張圖片
新線程沒法直接更新View組件

Android的進程優先級

答:android的系統進程分爲五個等級, Foreground Process(前臺進程), Visible Process(可見進程), Service Process(服務進程), Background Process(後臺進程), Empty Process(空進程)

自定義View相關知識,下拉刷新的實現原理?

答:【1】Header 一般有下拉箭頭,文字,進度條等元素,根據下拉的距離來改變它的狀態,從而顯示不一樣的樣式
【2】Content 這部分是內容區域,網上有不少例子都是直接在ListView裏面添加Header,但這就有侷限性,由於好多狀況下並不必定是用ListView來顯示數據。把要顯示內容的View放置在一個容器中,若是想實現一個用ListView顯示數據的下拉刷新,須要建立一個ListView旋轉到容器中。處理這個容器的事件(down,move,up),若是向下拉,則把整個佈局向下滑動,從而把header顯示出來。
【3】Footer能夠用來顯示向上拉的箭頭,自動加載更多的進度條等。
亦可使用開源PullToRefreshView

在你項目中所用到的第三方?

Volley xUtils okHttp(支持圖片上傳) ImageLoader RxJava Retrofix dataBing
Google推薦的圖片加載庫Glide介紹
目前Android在使用的Json解析框架主要有Jackson、Gson、FastJson、org.json;
源碼解析
使用 picasso 加載圖片;使用 EventBus 同步不一樣頁面間對象狀態
UI框架優化,增長RefreshFragment基類抽取
經過LeakCanary、TraceView等工具進行內存檢測,優化內存的使用,構建一套服務業務需求的線程池
熟練掌握okhttp,glide,greenDao等主流框架;

Android中原生HttpClient和HttpUrlConnection來處理網絡操做比較複雜,須要咱們處理不少操做:若是圖片的緩存和請求的調度。

簡單的說下Retrofit的使用流程?

Retrofit2在項目中的完整使用流程:建立Bean類 --> 建立接口形式的http請求方法 --> 經過Retrofit.builder()建立接口對象並調用http方法請求網絡數據 --> 在RxJava的Observable(被觀察者)中異步處理請求結果!

項目中有沒有見過內存泄漏以及OOM?爲何會產生?怎麼解決的?

內存泄漏它是形成應用程序OOM的主要緣由之一
在android應用開發中,當一個對象已經不須要再使用了,本該被回收時,而另一個正在使用的對象持有它的引用從而致使它不能被回收,這就致使本該被回收的對象不能被回收而停留在堆內存中,內存泄漏就產生了。
全局變量的濫使用,加載對象過大,相應資源過多,來不及釋放,資源未關閉形成的內存泄漏。
在內存引用上作些處理,經常使用的有軟引用、強化引用、弱引用
在內存中加載圖片時直接在內存中做處理,如邊界壓縮
及時回收不用的對象如Bitmap,IO流。

Android系統的有哪些安全機制?

應用程序簽名機制,權限申明機制,訪問控制機制,進程通信機制,內存管理機制。

Android-Service和Thread的區別?

service是android四大組件之一,沒有任何界面,它不是一個線程,通常在後臺默默運行。有本身的生命週期。有本地service和遠程service,本地service通常有2中啓動方式,startService和bindservice. 遠程service就是所謂的AIDL,實現跨進程調用.
thread是java裏的一個線程概念,跟service是徹底不一樣的。1中說的service特色,thread在android中大多沒有。尤爲是生命週期和跨進程調用,thread是沒有的。

Android圖片緩存之初識Glide

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android開源組件加載網絡圖片的優缺點比較

Asset目錄與res目錄的區別

ANR問題,force close問題,activity,service,broadcast各自超過多少秒報ANR

Activity啓動模式,intent匹配規則

Android反編譯

JNI和native方法

Android系統的有哪些安全機制

Dalvik和ART區別

Android屏幕適配有哪些方法

View事件體系,滑動衝突

View繪製原理,性能問題(view繪製間隔16ms,60fps),measure,layout,draw三大過程

如何避免overdraw

Android動畫分類和各自特色

View和SurfaceView的區別

APK瘦身的辦法

Android如何獲取Crash信息

ANR日誌分析

Android動態加載,如何解決方法數越界

Android怎麼加速啓動Activity

Android內存泄漏問題,內存泄漏分析工具

Android內存溢出問題,圖片的三級緩存

Zygote和System進程的啓動過程

Activity的啓動過程

Android的消息機制,Handler原理

HandlerThread和IntentService的原理和特色

Binder機制原理

一個如何維持一個長鏈接

如何實現進程保活

Binder底層爲何用紅黑樹,紅黑樹的原理知道嗎

爲何選用Glide,原理?

LruCache的原理

Fragment好處,碰到過什麼bug,怎麼解決的

如何設計一個網絡加載框架

Android四大組件的理解

ContentProvider的啓動過程

Activity的四種啓動模式,用過哪種,爲何要用

Service和InentService的區別

View的事件分發和繪製原理

如何解決滑動衝突

多進程通訊的方式

廣播的使用

廣播的種類

如何解決app卡頓的問題,用到哪些工具

view的繪製流

Android的啓動流程、四大組件、listview的運用於優化、MVP、兩個activity怎麼傳輸數據,intent是怎麼實現傳輸數據的,鬧鐘怎麼實現

fragment,該怎麼用,好比實現相似微信的那種滑動,講了一下fragment的滑動以及底部狀態的切換。以後又問了怎麼保存view的數據,當時覺得就是回調生命週期的方法時保存數據,面試官就給我講了一下如今經常使用了的將頂層的view做爲變量而後傳遞引用,以後切換回來的時候直接在oncreateview裏面進行判斷便可。

Activity與Fragment的生命週期。

Acitivty的四中啓動模式與特色。

Service的生命週期,兩種啓動方法,有什麼區別。

怎麼保證service不被殺死。

廣播的兩種註冊方法,有什麼區別。

Intent的使用方法,能夠傳遞哪些數據類型。

Thread、IntentService的使用場景與特色。

五種佈局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout、TableLayout各自特色及繪製效率對比。

Android的數據存儲形式。

Merge、ViewStub的做用。

Json有什麼優劣勢。

Handler、Loop消息隊列模型,各部分的做用。

怎樣退出終止App。

Asset目錄與res目錄的區別。

Android怎麼加速啓動Activity。

Android中弱引用與軟引用的應用場景。

Bitmap的四中屬性,與每種屬性隊形的大小。

Touch事件分發機制。

Android長鏈接,怎麼處理心跳機制。

Zygote的啓動過程。

looper是線程級別仍是進程級別

zygote和systemservice的關係

activity四種啓動模式

打開一個activity的過程

項目點爲何要用view不用fragment?一樣fragment能夠解決緩存(用了view,而且設了map做爲緩存,爲了模擬activity棧重製了新的棧來實現相同的回退功能,須要處理連續點擊和屢次點擊的問題,還須要解決連續點view,緩存增大而oom)

用了什麼設計模式?爲何要這麼用?(舉例了觀察者+工廠)

談一下Collection包:hashmap底層實現,用了什麼方法解決hash衝突(基於jdk版本),具體是如何實現(jdk1.5鏈表頭插仍是尾插),爲何不安全?如何變得安全(concurrent包下集合類),concurrentHashmap實現原理是?

Executor框架說說你的理解?

結束一條Thread有什麼方法?interrupt底層實現有看過嗎?線程的狀態是怎麼樣的?若是給你實現會怎麼樣作?

Io和nio有沒有了解?

緩存算法除了lru還認識哪一種?

Java中有內存泄露嗎?是怎麼樣的情景?爲何不用循環計數?

ANR產生緣由?怎麼定位?

ContextImpl的源碼使用的設計模式?爲何你認爲其中有外觀?

在一個app中,只有在一張activity,全部功能業務邏輯在裏面實現,如今報ANR,你會怎麼作?(代碼層面:耗時操做(UI、網絡、數據庫),工具層面:trace和crashHandle)

Android中ClassLoader和java中有什麼關係和區別

Activity生命週期?情景:如今在一張act1點了新的act2,週期如何?

Act的launchMode,有沒有結合項目用過(本身的程序鎖和微信的PC端登錄對比,不過我如今又發現,應該大約估計多是動態加載的一個缺陷,若是有找到相關信息,請務必跟我說。具體問題就是,當在PC端登陸時,Android終端的微信會跳出,即便wechat的task不是在fore,當按下確認,返回的是wechat,而不是本身先前的app)

View的繪製原理,有沒有用canvas本身畫過ui?

動態加載主要問題

Assetmanager獲取資源原理和資源獲取原理

項目Oom異常解決方案+用戶體驗優化方案

Touch傳遞機制+listview滑動衝突

項目如何解決oom?響應速度是怎麼優化?電量消耗如何優化?

屏幕適配使用的方案?有沒有輔助的工具幫助?(hyviewer)

如何分析內存泄露?(代碼+工具traceview+mat)

View樹繪製?如何優化佈局?

事件傳遞原理?

屏幕適配接觸到什麼方法?

java內存泄露是怎麼樣的?(本質+handler例子)

情景題,把handler設static,裏面須要對一個view更新,會不會內存泄露?(可達性分析)

UI接觸得多嗎?有沒有用過canvas畫過圖?

在項目中爲何要用動態加載?最大的問題是什麼?怎麼解決資源管理問題

描述下Aidl?以爲aidl有什麼缺陷

兩個應用能使用同一個任務棧麼?

大圖加載

Http && Https

經常使用的加密算法,對稱加密和非對稱加密

Android裏的序列化

兩個應用間Binder通訊的原理

OkHttp如何對連接進行復用

如何設計鎖

內存泄漏如何發現(用什麼工具)

在紙上寫了個Activity,而後在類裏面定義了一個Handler,問我這個會有警告,怎麼解決?--static、軟引用

Handler機制,Handler除了線程通訊還有什麼做用,這個我說通知吧,由於Android是消息驅動的,不是特別明白麪試官要問哪點,難道是延時?

實現一個文件夾列表,面試官要求5000個文件的時候才從ViewGroup轉到ListView

ART和Dalvik的區別

批量插入50條聯繫人,比較高效的方法,ContentProvider是否瞭解原理

broadcast機制

thread.wait()與thread.sleep()區別

okhttp原理

線程池機制

onSaveInstanceState和onRestoreInstanceState調用的過程和時機,onNewIntent方法

fragment的生命週期,和Activity如何進行通訊

Android的事件分發機制,ACTION_DOWN和後續事件如何消耗

View的繪製流程,MeasureSpec如何工做,父的MeasureSpec和本身的LayoutParams

Handler Looper的使用方式,實現機制,設計的緣由

HandlerThread有沒有了解

ThreadLocal是幹嗎的,使用的地方

Service與Thread區別,這個問題應該是必問的了

SQLite可否併發讀取或者寫入,本身只記得不能併發寫,能夠併發讀

Activity與Service的通訊問題,這裏要對Binder機制和AIDL比較瞭解,由於本身沒在項目中用過,因此回答的不是很好。這個還能夠通Broadcast進行通訊。

ViewPager如何判斷左滑右滑

android7.0的虛擬機的優化(什麼即時編譯)

sqlite如何批量插入大量數據,如何提升效率(放到一個事務裏)

fragment 和activity之間如何選擇(說出本身的理解)

說說推送 ,扯到長鏈接,心跳包,直接被面試官打斷,這個咱們都知道,說說保持一個長鏈接很簡單,爲何長鏈接會帶來不少麻煩,還提示從耗電量,微信分析

從listview優化談到recyclerview,深刻分析一下recyclerview特色 ,而後引伸到瀑布流如何實現,不使用recyclerview如何實現瀑布流。

屬性動畫

Android中的幾種Context什麼區別?這個問題我回答的很差,簡單說了一下生命週期和Context的繼承關係,以及注意事項彈對話框不能使用applicatuion的上下文

接着問我bitmap可否複用?也是3.0之後的有個Option的inbitmap字段能夠複用

平時遇到過OOM沒?遇到過,主要是圖片加載很常見,我講了BitmapFactory的解析Options的in...bound參數先讀取圖片信息進行必要的縮放,還有緩存,講了DiskLruCache、LruCache緩存策略,以及能夠加入軟引用,講了底層的LinkedHashMap實現。

自定義控件作過哪些,須要注意什麼?處理wrap_content的狀況,ondraw不能耗時,刷新率16ms等,而後讓我講了一下圓角矩形的圖片控件怎麼作,降到了畫筆的xferm...方法進行圖面交疊。

view和viewGroup區別

內存溢出處理

Activity能運行在別的進程中嗎?

Bitmap的recycle方法執行後會當即回收內存嗎?

Activity中如何調用另外一個進程Service裏的方法?

AIDL的方式能訪問另外一個進程Service裏靜態變量嗎?

View的事件衝突的解決辦法 ps:重寫dispatchEvent()或者touch()方法

講一下RecycleView與listview的區別

如何解析json數據和xml

RecycleView的優化

幾種context的區別

activity關閉後還沒有運行完畢的thread會怎麼樣 ps:會變成空進程線程,優先級最低 很容易被終止回收

圖片三級緩存 內存緩存滿了怎麼辦 ps:優先級隊列 滿了後根據優先級主動刪除一部分圖片 根據LRU算法肯定優先級

CotentProvider的權限問題,就是怎麼樣使得數據對外有選擇性的提供和使用

Android的存儲方式

onTouch事件的處理機制

說一下OOM以及你怎麼解決的

viewpager裏面只能嵌套view嗎 可不能夠嵌套Activity

假如viewpager裏面的每一頁都有有很大數據量的內容,那麼在快速的左右滑動時,若是出現了內存被回收的狀況,如何處理 假如出現了OOM,怎麼處理

同上狀況,使用Fragment,又當如何?與viewpager有什麼區別ExpandableListView的Adapter怎麼寫

在ListView的每一個item中若是可能出現的view都不同,如何處理?動態獲取view種類數量的話是否是就不能使用viewHolder進行優化?固定顯示view若是不存在該種view就不顯示的方法是否太耗內存

ListView的Adapter的getView具體是什麼機制?

在全屏顯示高清大圖的時候,網速慢的狀況下如何顯示?漸進式顯示是怎麼作到的?若是想顯示下載進度圈圈,該如何實現?

說一下HandlerThread

假如你要記錄ListView滾動到的位置,要記錄什麼信息,view怎樣得到座標信息

說一下canvas

dialog和popupwindow的應用場景 若是popupwindow在沒有dismiss的時候Activity finish了,會出現什麼狀況?

Service和推送通知,通知有沒有可能出現有推送可是通知欄收不到通知?service被kill掉會如何?如何保證service不被kill掉

Scrollview和ListView有什麼類似點 有什麼不一樣 那若是這兩個是繼承關係 那應該是誰繼承誰?

dp sp px各自的應用場景是什麼 換算關係是什麼 使用sp的時候若是調整系統字體,顯示字體會跟着調整嗎?

handler.postAtTime不是延時post麼 那handler怎麼延時處理Message

一個activity只能有一個進程麼【對進程的理解】

夜間主題的實現方式

動態加載原理,classloader理解

listview實現item左滑須要考慮的問題

listview原理,adapter與view是如何綁定的,如何本身設計一個相似listview的自定義view,子item複用,管理以及getView的實現

推送服務原理,心跳機制

ssl協議,握手交換密鑰過程,加密算法,對稱非對稱加密原理

socket編程實現http請求,手寫代碼實現

處理listview圖片錯位方式

Java線程 run與start區別,原理實現

打包混淆原理

反編譯方式工具及其原理

對稱加密與非對稱加密

sharepreference原理

動態加載,dex分包,熱修復

如何減少apk體積

性能優化從哪幾方面考慮(內存,cpu,fps,ddms靈活dump)

加載圖片請求的超時時間設置,多少秒合適,緣由,大圖如何加載。

應用簽名是爲了什麼,簽名原理是什麼

root以後有什麼重大的變化,開發者能夠操做什麼

Binder的一次拷貝發生在哪裏。

AMS的做用?

Serializable和Parcelable。

canvas畫了個線,怎麼撤銷?

bitmap加載一個100張圖片的優化處理

lrucache和disklrucache

隱式啓動和顯示啓動

Service兩種啓動方式

佈局優化相關

一個app可否是多進程

線程池內線程的數量如何肯定

說說OKHTTP的實現

socket

surfaceView

如何進行界面優化

哪些android進程不能被殺死的?

圖片壓縮方式

cookie和session的區別

虛擬機相關知識

斷點續傳原理

三級緩存的理解

相關文章
相關標籤/搜索