2017年最全的30個Android面試題,你將如何回答?

來源:互聯網
上載者:User

標籤:建議   最全   nlog   data   anon   商務邏輯層   清空   讀取   應用   

百度首頁登入2017年最全的30個Android面試題,你將如何回答?

機翼技術

百家號 03-10 02:32

“三金四銀”又是一年一度的跳槽季,相信有不少Android程式員開始摩拳擦掌蠢蠢欲動了。然而,面對面試官的問題,你將如何回答?

一、如何理解Activity,View,Window三者之間的關係?

這個問題真的很不好回答。所以先比較恰當的比喻來形容下它們的關係,Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater像剪刀,Xml配置像窗花圖紙。

1:Activity構造的時候會初始化一個Window,準確的說是PhoneWindow。

2:這個PhoneWindow有一個“ViewRoot”,這個“ViewRoot”是一個View或者說ViewGroup,是最初始的根視圖。

3:“ViewRoot”通過addView方法來一個個的添加View。比如TextView,Button等

4:這些View的事件監聽,是由WindowManagerService來接受訊息,並且回調Activity函數。比如onClickListener,onKeyDown等。

二、Activity的幾種LaunchMode及使用情境

1、standard 模式

這是預設模式,每次啟用Activity時都會建立Activity執行個體,並放入任務棧中。使用情境:大多數Activity。

2、singleTop 模式

如果在任務的棧頂正好存在該Activity的執行個體,就重用該執行個體( 會調用執行個體的 onNewIntent() ),否則就會建立新的執行個體並放入棧頂,即使棧中已經存在該Activity的執行個體,只要不在棧頂,都會建立新的執行個體。使用情境如新聞類或者閱讀類App的內容頁面。

3、singleTask 模式

如果在棧中已經有該Activity的執行個體,就重用該執行個體(會調用執行個體的 onNewIntent() )。重用時,會讓該執行個體回到棧頂,因此在它上面的執行個體將會被移出棧。如果棧中不存在該執行個體,將會建立新的執行個體放入棧中。使用情境如瀏覽器的主介面。不管從多少個應用啟動瀏覽器,只會啟動主介面一次,其餘情況都會走onNewIntent,並且會清空主介面上面的其他頁面。

4、singleInstance 模式

在一個新棧中建立該Activity的執行個體,並讓多個應用共用該棧中的該Activity執行個體。一旦該模式的Activity執行個體已經存在於某個棧中,任何應用再啟用該Activity時都會重用該棧中的執行個體( 會調用執行個體的 onNewIntent() )。其效果相當於多個應用共用一個應用,不管誰啟用該 Activity 都會進入同一個應用中。使用情境如鬧鈴提醒,將鬧鈴提醒與鬧鈴設定分離。singleInstance不要用於中間頁面,如果用於中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出後,在此啟動,首先開啟的是B。

三、Android中的動畫有哪幾類

Android3.0之前有2種,3.0後有3種。

FrameAnimation(逐幀動畫):將多張圖片組合起來進行播放,類似於早期電影的工作原理,很多App的loading是採用這種方式。

TweenAnimation(補間動畫):是對某個View進行一系列的動畫的操作,包括淡入淡出(Alpha),縮放(Scale),平移(Translate),旋轉(Rotate)四種模式。

PropertyAnimation(屬性動畫):屬性動畫不再僅僅是一種視覺效果了,而是一種不斷地對值進行操作的機制,並將值賦到指定對象的指定屬性上,可以是任意對象的任意屬性。

http://blog.csdn.net/yanbober/article/details/46481171

四、請描述下Activity的生命週期

這個問題關鍵是理解。有人曾遇到這個問題的變種問題,問onStart(),與onResume()有什麼區別?如果面試官拋出這個問題,是不是有點措手不及。最近又有人遭遇了更變態的問題:什麼情況下Activity走了onCreat(),而不走onStart()。

五、請介紹下service生命週期

這裡要注意service有兩種啟動方式,startService()和bindService()

六、View的繪製流程

measure過程、layout過程、draw過程

http://blog.csdn.net/yanbober/article/details/46128379/

七、Android的四大組件是哪些,各自都有什麼作用?

Activity:Activity是Android程式與使用者互動的視窗,是Android構造塊中最基本的一種,它需要為保持各介面的狀態,做很多持久化的事情,妥善管理生命週期以及一些跳轉邏輯。

service:後台服務於Activity,封裝有一個完整的功能邏輯實現,接受上層指令,完成相關的事物,定義好需要接受的Intent提供同步和非同步介面。

Content Provider:是Android提供的第三方應用資料的訪問方案,可以派生Content Provider類,對外提供資料,可以像資料庫一樣進行選擇排序,屏蔽內部資料的儲存細節,向外提供統一的借口模型,大大簡化上層應用,對資料的整合提供了更方便的途徑。

BroadCast Receiver:接受一種或者多種Intent作觸發事件,接受相關訊息,做一些簡單處理,轉換成一條Notification,統一了Android的事件廣播模型。

八、ListView的最佳化方案

1、如果自訂配接器,那麼在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就建立contentView並返回,如果不為null則直接使用。在這個方法中儘可能少建立view。

2、給contentView設定tag(setTag()),傳入一個viewHolder對象,用於緩衝要顯示的資料,可以達到映像資料非同步載入的效果。

3、如果listview需要顯示的item很多,就要考慮分頁載入。

九、請問Android中跨進程通訊有幾種方式

1:訪問其他應用程式的Activity,如調用系統通話應用IntentcallIntent=newIntent(Intent.ACTION_CALL,Uri.parse("tel:12345678");startActivity(callIntent);

2:Content Provider,如訪問系統相簿

3:廣播(Broadcast),如顯示系統時間

4:AIDL服務

十、說說mvc模式的原理,它在android中的運用,android的官方建議應用程式的開發採用mvc模式。

mvc是model,view,controller的縮寫,mvc包含三個部分:

1)模型(model)對象:是應用程式的主體部分,所有的商務邏輯都應該寫在該層。

2)視圖(view)對象:是應用程式中負責產生使用者介面的部分。也是在整個mvc架構中使用者唯一可以看到的一層,接收使用者的輸入,顯示處理結果。

3)控制器(control)對象:是根據使用者的輸入,控制使用者介面資料顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,響應使用者出發的相關事件,交給m層處理。

android鼓勵弱耦合和組件的重用,在android中mvc的具體體現如下:

1)視圖層(view):一般採用xml檔案進行介面的描述,使用的時候可以非常方便的引入,當然,如果你對android瞭解的比較的多了話,就一定可以想到在android中也可以使用JavaScript+html等的方式作為view層,當然這裡需要進行java和javascript之間的通訊,幸運的是,android提供了它們之間非常方便的通訊實現。

2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model商務邏輯層處理,這樣做的另外一個原因是android中的acitivity的回應時間是5s,如果耗時的操作放在這裡,程式就很容易被回收掉。

3)模型層(model):對資料庫的操作、對網路等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。

十一、什麼情況會導致Force Close ?如何避免?能否捕獲導致其的異常?

程式出現異常,比如nullpointer。如何避免:編寫程式時邏輯連貫,思維縝密。能捕獲異常,在logcat中能看到異常資訊

十二、Touch事件的傳遞機制publicbooleandispatchTouchEvent(MotionEventev); //用來指派eventpublicbooleanonInterceptTouchEvent(MotionEventev);//用來攔截eventpublicbooleanonTouchEvent(MotionEventev);//用來處理event

其中Activity和View控制項(TextView)擁有指派和處理事件方法,View容器(LinearLayout)具有指派,攔截,處理事件方法。這裡也有個比喻:領導都會把任務向下指派,一旦下面的人把事情做不好,就不會再把後續的任務交給下面的人來做了,只能自己親自做,如果自己也做不了,就只能告訴上級不能完成任務,上級又會重複他的過程。另外,領導都有權利攔截任務,對下級隱瞞該任務,而直接自己去做,如果做不成,也只能向上級報告不能完成任務。

http://gold.xitu.io/entry/56af0ba0c24aa800547b60ea

http://blog.csdn.net/morgan_xww/article/details/9372285

十三、請說一下Android UI適配問題

hongyang大神的方案:http://blog.csdn.net/lmj623565791/article/details/45460089

十四、請介紹一下JAVA註解反射原理是什麼

參考:http://www.jianshu.com/p/3968ffabdf9d

十五、請說下資料庫最佳化問題

參考:http://www.jianshu.com/p/3b4452fc1bbd

十六、請介紹下ContentProvider是如何?資料共用的

一個程式可以通過實現一個Content provider的抽象介面將自己的資料完全暴露出去,而且Content providers是以類似資料庫中表的方式將資料暴露。Content providers儲存和檢索資料,通過它可以讓所有的應用程式訪問到,這也是應用程式之間唯一共用資料的方法。

要想使應用程式的資料公開化,可通過2種方法:建立一個屬於你自己的Content provider或者將你的資料添加到一個已經存在的Content provider中,前提是有相同資料類型並且有寫入Content provider的許可權。

如何通過一套標準及統一的介面擷取其他應用程式暴露的資料?

Android提供了ContentResolver,外界的程式可以通過ContentResolver介面訪問ContentProvider提供的資料。

十七、HybridJAVA 與JS互動

參考:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/

十八、請介紹下Java GC原理

參考:http://www.jianshu.com/p/d75a32ac5bed?

十九、如何將一個Activity設定成視窗的樣式。

中配置:android :theme="@android:style/Theme.Dialog"

另外android:theme="@android:style/Theme.Translucent" 是設定透明

二十、JAVA註解反射原理問題

二十一、什麼是ANR 如何避免它?

ANR:Application Not Responding。在Android中,Active Manager和視窗管理器這兩個系統服務負責監視應用程式的響應,當使用者操作的在5s內應用程式沒能做出反應,BroadcastReceiver在10秒內沒有執行完畢,就會出現應用程式無響應對話方塊,這既是ANR。

避免方法:Activity應該在它的關鍵生命週期方法(如onCreate()和onResume())裡儘可能少的去做建立操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變位元影像尺寸,應該在子線程裡(或者非同步方式)來完成。主線程應該為子線程提供一個Handler,以便完成時能夠提交給主線程。

二十二、設計模式

參考:http://gold.xitu.io/entry/56ebb4ad5bbb50004c440972

二十三、Android本身的api並未聲明會拋出異常,則其在運行時有無可能拋出runtime異常,你遇到過嗎?諾有的話會導致什麼問題?是如何解決的?

會,比如nullpointerException。我遇到過,比如textview.setText()時,textview沒有初始化。會導致程式無法正常運行出現forceclose。開啟控制台查看logcat資訊找出異常資訊並修改程式。

二十四、RxJava

http://gank.io/post/560e15be2dca930e00da1083?from=timeline&isappinstalled=0#toc_1

二十五、Http Https

http://www.jianshu.com/p/93fdebe5fef1

二十六、java中如何引用本地語言

可以用JNI(java native interface java 本地介面)介面 。

二十七、Android記憶體泄露及管理

http://gold.xitu.io/entry/56d64b9e816dfa005943a55c

二十八、設計一套圖片非同步載入緩衝方案

http://www.cnblogs.com/zyw-205520/p/4997863.html

http://blog.csdn.net/boyupeng/article/details/47127605

二十九、Android 中有哪幾種解析xml的類?官方推薦的是哪種?它們的原理是什麼,區別在哪?

答:XML解析主要有三種方式,SAX、DOM、PULL。常規在PC上開發我們使用Dom相對輕鬆些,但一些效能敏感的資料庫或手機上還是主要採用SAX方式,SAX讀取是單向的,優點:不佔記憶體空間、解析屬性方便,但缺點就是對於套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML檔案載入到記憶體中去,這裡Android開發網提醒大家該方法在尋找方面可以和XPath很好的結合如果資料量不是很大推薦使用,而PULL常常用在J2ME對於節點處理比較好,類似SAX方式,同樣很節省記憶體,在J2ME中我們經常使用的KXML庫來解析。

三十、熱修複的原理

1:JavaSisst

2:AspectJ

3:Xposef

http://mp.weixin.qq.com/s?__biz=MzA3Mjk1MjA4Nw==&mid=400452659&idx=1&sn=841b49b875ec3b307f261ed52a7d9c4e&scene=23&srcid=1119JWRt0adNwGxTHiyok460#rd

約聘網,垂直於互連網行業的O2O求職招聘平台。專註於運營、推廣、營銷、SEO、SEM、BD、產品經理、技術開發等職位招聘。關注約聘網公眾號yuepin51 擷取最新最全面求職招聘資訊,發布只屬於您的微簡曆、微招聘。

2017年最全的30個Android面試題,你將如何回答?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.