導航:首頁 > 操作系統 > android常見的面試題

android常見的面試題

發布時間:2022-09-10 18:01:59

① 2018年—android面試

2018.6.21深圳酷比通信設備有限公司

1、簡述下自己的過往項目經驗

2、簡述指紋工作流程

3、指紋方面的優化方案

4、簡要概述下指紋解鎖過程

5、指紋碰到問題及解決

6、進程間的通信方式

7、平常調試問題的方法

8、Android studio的內存分析工具

9、Android hierarchyviewr和ddms是否使用過

10、是否具備分析GMS的問題的經驗

11、是否具有android O項目的開發經驗

2018.6.28 TCL

1、VIEW的渲染機制

2、自定義VIEW

3、handler機制

4、簡單闡述binder機制

5、如何優化開機速度

6、指紋工作流程

7、指紋方面的是否有做過哪些優化

8、如何優化apk的解析速度

2018.7.17深圳銀澎雲計算有限公司(好視通)

1、排序演算法

2、設計模式

3、handler機制

4、事件分發

5、Toast

6、Activity生命周期

7、Fragment的理解

8、廣播類型和區別

9、Activity的啟動類型

10、JNI的調用方式

11、反射

12、Service的啟動方式和區別

13、ANR的理解

14、還有一堆筆試的題目0.0

2018.7.20比亞迪面試:

1、四大組件

2、廣播類型,靜態和動態注冊的區別

3、handler機制

4、binder機制

5、anr類型

6、三級緩存

7、android啟動線程的方式

8、顯式和隱式INTENT的區別

9、activity的啟動類型,flag

10、android組件化開發

11、自定義布局

12、動畫類

13、service的啟動類型,差異

14、mvc和mvp架構

15、recycleview和listview的差別

16、第三方開源框架的認識

17、內存泄露問題

18、HANDLER內存泄漏如何處理

19、布局優化方式

20、Settings的頁面跳轉

21、fragment的理解

22、序列化

23、INTENTSERVICE

24、service保活

25、圖片載入過程

26、事件分發機制

27、Handler通過post啟動一個線程和sendEmptyMessage的區別

28、aidl的使用

29、強引用和弱引用

2018.7.23捷視飛通

1、handler機制

2、兩個子線程之間的通信方式

3、鎖

4、overload和override

5、arrylist和linklist

6、四大組件和五大布局

7、fragment和activity的通信

8、surfaceview和GLsurfaceview的差別

9、廣播的注冊方式,差別

10、activity的launchmode模式

2018.7.24聯發科

1、介紹一下過往經歷;

2、介紹下BackTouch功能;

3、指紋項目碰到的哪些問題,如何克服;

4、上對客戶,下對供應商,碰到問題,如何協調;

5、簡要概述下tee環境

6、碰到過哪些感覺比較難的問題,如何處理;

2018.7.25 VIVO(外包)

1、簡單介紹一下自己

2、講講指紋方面的實現流程

3、之後開始講工作業務和性質

2018.7.26聞泰

1、Android的系統架構

2、往SD卡push文件,MTP模式下,電腦端能否能實時同步

3、如何往上層傳遞一個keyEvent的值

4、談談指紋的工作流程

5、有么有解決過什麼比較難的問題

6、進程間的通信方式

7、private、public、protect的差異

8、同步和非同步

9、對Handler的理解

10、抽象類和介面的區別

11、子類和父類,方法的調用關系

12、Hashmap和Hashtable的區別

13、各個數據類型的位數

14、寫一段程序,統計一個字元串,可能出現的字元片段,及其出現的次數

2018.7.27努比亞

1、for 和 foreach,處理大數據時候,哪個效率比較高?為什麼?

2、使用變數時,會有哪些層面的考慮?

3、hashmap的數據是不是有序的?

4、如何優化MediaScanner掃描速度?

5、android的App的sharedid有幾類?分別是什麼意思?

6、簡要概述下MTP?

7、在MTP下,如何對電腦端數據進行分類顯示?

8、是否有在看一些什麼書?設計模式的6個特點?

9、內存優化、功耗等經驗?

② [轉]移動端常見面試題一:移動端兼容解決方案

因為手機解析度太小,如果按照解析度來顯示網頁,字會非常小,安卓手機devicePixoRadio比較亂,有1.5的,有2的也有3的。想讓圖片在手機里顯示更為清晰,必須使用2x的背景圖來代替img標簽(一般情況下都是2倍的),或者指定background-size:contain;都可以

用-webkit-min-device-pixel-ratio可以做到不同倍數不同尺寸的圖片:

Android3+和iOSi5+支持CSS3的新屬性為overflow-scrolling

設置alpha值為0就可以去除本透明灰色遮罩,備註:transparent的屬性值在android下無效。

方法一:body添加ontouchstart

方法二:js給document綁定touchstart或touchend事件

在移動端中,如果給元素設置一個像素的邊框的話,那麼在手機上看起來是會比一個像素粗的。

解決方法:使用偽類元素模擬邊框,使用transform縮放

某些低端手機不支持css3mask,可以選擇性的進降級處理
比如可以使用js判斷來引用不同class:

pc端字體正常顯示,但ios真機就出現,h1、span等標簽字體比較大。

某些Android手機圓角失效 background-clip:padding-box;

在移動端中,click事件是生效的,但是,點擊之後會有300ms的延遲響應

原因:safari是最早做出這個機制的,因為在移動端里,瀏覽器需要等待一段時間來判斷此次用戶操作是單擊還是雙擊,所以就有click300ms的延遲機制,Android也很快就有了

不用click,用自定義事件tap

tap是需要自定義的:如果用戶執行了touchstart在很短的時間又觸發了touchend,且兩次的距離很小,而且不能

引入fastclick庫來解決

在移動端中,圖片的處理應該是很謹慎的,假設有一張圖片本身的尺寸是X寬,設置和包裹它的div一樣寬,如果是div寬度小於圖片寬度沒有問題,但是如果div寬度大於圖片的寬度,圖片被拉伸失真

解決方法:讓圖片最大隻能是自己的寬度

img{

max-width: 100%;

display: block;

margin: 0 auto;

}

例如:

div是絕對定位的蒙層,並且z-index高於a。而a標簽是頁面中的一個鏈接,我們給div綁定tap事件:

我們點擊蒙層時div正常消失,但是當我們在a標簽上點擊蒙層時,發現a鏈接被觸發,這就是所謂的點透事件。

原因:
touchstart早於touchend早於click。即click的觸發是由延遲的,這個時間大概在300ms左右,也就是說我們tap觸發之後蒙層隱藏。此時click還沒有觸發,300ms之後由於蒙層隱藏,我們的click觸發到了下面的a鏈接。

解決:
1.盡量都使用touch事件來替換click事件。例如用touchend事件(推薦)
2.用fastclick
3.用preventDefault阻止a標簽的click

③ android工程師面試一般會問哪些問題

1. Android經驗
如果不是校招,Android經驗是必須的,我比較喜歡問一些基礎概念與技術原理,比如Activity、View、Window的理解,各LaunchMode的使用場景,View的繪制流程,Touch事件機制,Android動畫的原理,Handler, Looper的理解,Android跨進程通訊的方式,Binder的理解,Android Mashup設計的理解等等。
2. java水平
基本上就是Effective Java那本書里提到的東西,如果你背完那本書里的問題,並且對答如流,沒問題,就要你這樣的。其實也會考察關於final用法,反射原理,註解原理,java編譯過程,GC等一些常見問題。
3. IT基礎知識
其實就是計算機科班學生學校里學到的一些東西,在校招時這塊是重點,社招會放寬,但一些基本的常識是要有的,比如不少人都不知道http的get post有啥區別,https的那個s是什麼意思,講不清進程與線程的概念,不知道二分演算法是個啥東西。這些簡單問題的篩選,可以過濾一些所謂野路子的程序員,是不是科班出身不重要,搞這行就得對一些基本常識有概念,不然以後怎麼愉快的交流呢?
4. 代碼質量的認識
我們需要的是一個對代碼味道有感覺的人,關於這點,看下《Clean Code》就夠了,面試中這點其實不好考察,可以讓他聊一聊對代碼質量的認識,雖然不能排除對方誇誇其談,至少想法不多,只能提到命名風格這一點的人是不符合要求的,也可以在寫Code的環節中觀察。
5. 技術視野
比如對Android開發新技術的了解與學習,對其它流行技術領域的了解,這其實與我剛才提到的技術廣度的考察有關,就我面試過程中,發現很多非互聯網行業的從業人員,因為公司各種操蛋規定與公司技術氛圍的原因,技術視野相當狹窄。
我個人對這點深有體會,2011年我還在傳統行業從事軟體研發,當時的公司因為擔心技術信息泄露,不讓上網,相當封閉,我個人雖然自認為已在那個行業內做到業內專家的級別,但總感覺哪裡不對,有一天我很興奮的打算跟身邊同事聊一聊Android的時候,發現他們居然都不知Android為何物?2011年啊同志們,當時的震驚無法言表,深切感覺到需要作出改變了,毅然放棄多年行業積累,轉戰移動互聯網,直到現在。時至今日,多年前的小夥伴也有很多混出了名黨,開始走向人生巔峰,我也從來沒有後悔當初做出的選擇。
6. 技術想像力
一個優秀的技術人,如果知識的深度與廣度足夠,知識已成體系,那麼他對於一些從未接觸過的領域,也是可以做出足夠合理的想像與判斷,面試過程中如果問到一些領域候選人沒有涉獵,這時候一般不用過多糾纏,但如果你想借這個問題考察下他的技術想像力,可以深入下去,比如問他:「你覺得這個東西應該是什麼原理呢?」,「這個酷炫的控制項,如果要你來做,你會怎麼實現?」。在這方面表現出色的同學無疑是有深厚基礎與足夠廣度的人。

④ android 面試,演算法題。

final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}

不知道你是不是這個意思。

⑤ Android面試:位元組飛書5輪面試Android Framework層的源碼就問了4輪!

說起位元組跳動的這次面試經歷,真的是現在都讓我感覺背脊發涼,簡直被面試官折磨的太難受了。雖然已經工作了三年,但是也只是純粹的在寫業務,對底層並沒有一個很深的認識,這次面試經歷直接的讓我感受到我和那些一線大廠開發之間的差距,說句實話,是真的很難受。

也不多說什麼了吧,我們還是來回顧一下我在位元組跳動的這次面試經歷。 一共是面了5輪,至於為什麼面了5輪的原因,可能是面試官還是想試試我的技術水平吧

雖然說最終還是沒能拿到offer,但是這次的面試經歷讓我更加直觀的了解了我和大廠Android開發之間的差距,算是收益頗豐吧

總體來講,一面還是答得不錯的,或許是面試官覺得小瞧了我,接下來的四輪面試我彷彿遭到了嚴打

最後嘮叨幾句,希望各位沒拿到offer的真的不要灰心,可能你之前所有的失敗都是你成功的墊腳石,我面掛的時候也曾經自閉過,但更多的是反思,如何調整自己的復習計劃。在復習的時候一定要有自己的強項,能把這個知識點理解的很透徹並且把相關的知識點拓展出去。另一方面就是讓面試官看到你對這個崗位的熱情,能夠自發性地去學習與崗位相關的東西,下面給大家分享一份我珍藏的《2022最新Android中高級面試題合集》質量非常搞,希望能對你有幫助!

內容概要 :包括 Handler、Activity相關、Fragment、service、布局優化、AsyncTask相關、Android 事件分發機制、 Binder、Android 高級必備 :AMS,WMS,PMS、Glide、 Android 組件化與插件化等面試題和技術棧!內容特點:條理清晰,含圖像化表示更加易懂。

Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以。目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。

⑥ android 面試題

1、前言 
  6 月  26  日,  Google Android  發布了  NDK  ,引起了很多發人員的興趣。  NDK  全
稱:   Native  Development  Kit  。下載地址為: 
http://developer.android.com/sdk/ndk/1.5_r1/index.html  。 
2、誤解 
  新出生的事物,除了驚喜外,也會給我們帶來一定的迷惑、誤解。 
2.1、誤解一:  NDK  發布之前,  Android  不支持進行  C  開發 
  在 Google  中搜索  「NDK」  ,很多  「Android  終於可以使用  C++  開發  」  之類
的標題,這是一種對  Android  平台編程方式的誤解。其實,  Android  平台從誕生起,就已
經支持  C  、   C++  開發。眾所周知,   Android  的  SDK  基於  Java  實現, 這意味著基於  Android 
SDK  進行開發的第三方應用都必須使用  Java  語言。但這並不等同於 「  第三方應用只能使
用  Java」  。在  Android  SDK  首次發布時,  Google  就宣稱其虛擬機  Dalvik  支持  JNI  編程
方式,也就是第三方應用完全可以通過  JNI  調用自己的  C  動態庫,即在  Android  平台上,  
「Java+C」  的編程方式是一直都可以實現的。 
  當然這種誤解的產生是有根源的:在 Android SDK  文檔里,找不到任何  JNI  方面的
幫助。即使第三方應用開發者使用  JNI  完成了自己的  C  動態鏈接庫(  so  )開發,但是  so 
如何和應用程序一起打包成  apk  並發布?這裡面也存在技術障礙。我曾經花了不少時間,
安裝交叉編譯器創建  so  ,並通過  asset (資源)方式,實現捆綁  so  發布。但這種方式只
能屬於取巧的方式,並非官方支持。所以,在  NDK  出來之前,我們將  「Java+C」  的開發
模式稱之為灰色模式,即官方既不聲明 「  支持這種方式  」  ,也不聲明 「  不支持這種方
式  」  。 
2.2、誤解二:有了  NDK  ,我們可以使用純  C  開發  Android  應用 
  Android SDK 採用  Java  語言發布,把眾多的  C  開發人員排除在第三方應用開發外
(  注意:我們所有討論都是基於「  第三方應用開發  」  ,  Android  系統基於  linux  ,系
統級別的開發肯定是支持  C  語言的。   )。 NDK  的發布,許多人會誤以為,類似於  Symbian  、 
WM  ,在  Android  平台上終於可以使用純  C  、  C++  開發第三方應用了!其實不然,  NDK 
文檔明確說明:  it is not a good way  。因為  NDK  並沒有提供各種系統事件處理支持,也沒
有提供應用程序生命周期維護。此外,在本次發布的  NDK  中,應用程序  UI  方面的  API  也
沒有提供。至少目前來說,使用純  C  、  C++  開發一個完整應用的條件還不完備。 
 
3、NDK  是什麼 
 
對 NDK  進行了粗略的研究後,我對  「NDK  是什麼  」  的理解如下: 
 
1、NDK  是一系列工具的集合。 
 
NDK 提供了一系列的工具,幫助開發者快速開發  C  (或  C++  )的動態庫,並能自動
將  so  和  java  應用一起打包成  apk  。這些工具對開發者的幫助是巨大的。 
NDK 集成了交叉編譯器,並提供了相應的  mk  文件隔離  CPU  、平台、  ABI  等差異,
開發人員只需要簡單修改  mk  文件(指出 「  哪些文件需要編譯  」  、 「  編譯特性要求  」 
等),就可以創建出  so  。 
NDK 可以自動地將  so  和  Java  應用一起打包,極大地減輕了開發人員的打包工作。 
2、NDK  提供了一份穩定、功能有限的  API  頭文件聲明。
 
  oogle 明確聲明該  API  是穩定的,在後續所有版本中都穩定支持當前發布的  API  。
從該版本的  NDK  中看出,這些  API  支持的功能非常有限,包含有:  C  標准庫(  libc  )、
標准數學庫(  libm  )、壓縮庫(  libz  )、  Log  庫(  liblog  )。 
G
 
4、NDK  帶來什麼 
 
1、NDK  的發布,使  「Java+C」  的開發方式終於轉正,成為官方支持的開發方式。 
使用 NDK  ,我們可以將要求高性能的應用邏輯使用  C  開發,從而提高應用程序的執
行效率。 
使用 NDK  ,我們可以將需要保密的應用邏輯使用  C  開發。畢竟,  Java  包都是可以反
編譯的。 
NDK 促使專業  so  組件商的出現。(樂觀猜想,要視乎  Android  用戶的數量) 
2、NDK  將是  Android  平台支持  C  開發的開端。 
  NDK 提供了的開發工具集合,使開發人員可以便捷地開發、發布  C  組件。同時,  
Google 承諾在  NDK  後續版本中提高  「  可調式  」  能力,即提供遠程的  gdb  工具,使我
們可以便捷地調試  C  源碼。在支持  Android  平台  C  開發,我們能感覺到  Google  花費了
很大精力,我們有理由憧憬 「C  組件支持  」  只是  Google Android  平台上 C  開發的開端。
畢竟,   C  程序員仍然是碼農陣營中的絕對主力,將這部分人排除在  Android  應用開發之外,
顯然是不利於  Android  平台繁榮昌盛的。

⑦ android面試題及答案

android面試題及答案

本文是我精心整理的android面試題及答案,歡迎大家參考。

1. 下列哪些語句關於內存回收的說明是正確的? (b ) A、 程序員必須創建一個線程來釋放內存

B、 內存回收程序負責釋放無用內存

C、 內存回收程序允許程序員直接釋放內存

D、 內存回收程序可以在指定的時間釋放內存對象

2. 下面異常是屬於Runtime Exception 的是(abcd)(多選) A、ArithmeticException

B、IllegalArgumentException

C、NullPointerException

D、BufferUnderflowException

3. Math.round(11.5)等於多少(). Math.round(-11.5)等於多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-12

4. 下列程序段的輸出結果是:(b )

void complicatedexpression_r(){

int x=20, y=30;

boolean b;

b=x>50&&y>60||x>50&&y<-60||x<-50&&y>60||x<-50&&y<-60;

System.out.println(b);

}

A、true B、false C、1 D、011.activity

5. 對一些資源以及狀態的操作保存,最好是保存在生命周期的哪個函數中進行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()

6. Intent傳遞數據時,下列的數據類型哪些可以被傳遞(abcd)(多選) A、Serializable B、charsequence C、Parcelable D、Bundle

7. android 中下列屬於Intent的作用的是(c) A、實現應用程序間的數據共享

B、是一段長的生命周期,沒有用戶界面的程序,可以保持應用在後台運行,而不會因為切換頁面而消失

C、可以實現界面間的切換,可以包含動作和動作數據,連接四大組件的紐帶

D、處理一個應用程序整體性的工作

8. 下列屬於SAX解析xml文件的優點的是(b) A、將整個文檔樹在內存中,便於操作,支持刪除,修改,重新排列等多種功能

B、不用事先調入整個文檔,佔用資源少

C、整個文檔調入內存,浪費時間和空間

D、不是長久駐留在內存,數據不是持久的,事件過後,若沒有保存數據,數據就會

消失

9. 下面的對自定style的方式正確的是

A、

B、

C、

fill_parent

D、

fill_parent

10. 在android中使用Menu時可能需要重寫的方法有(ac)。(多選) A、onCreateOptionsMenu()

B、onCreateMenu()

C、onOptionsItemSelected()

D、onItemSelected()

11. 在SQL Server Management Studio 中運行下列T-SQL語句,其輸出值(c)。 SELECT @@IDENTITY

A、 可能為0.1

B、 可能為3

C、 不可能為-100

D、 肯定為0

12. 在SQL Server 2005中運行如下T-SQL語句,假定SALES表中有多行數據,執行查詢之 後的結果是(d)。 BEGIN TRANSACTION A

Update SALES Set qty=30 WHERE qty<30

BEGIN TRANSACTION B

Update SALES Set qty=40 WHEREqty<40

Update SALES Set qty=50 WHEREqty<50

Update SALES Set qty=60 WHEREqty<60

COMMITTRANSACTION B

COMMIT TRANSACTION A

A、SALES表中qty列最小值大於等於30

B、SALES表中qty列最小值大於等於40

C、SALES表中qty列的數據全部為50

D、SALES表中qty列最小值大於等於60

13. 在android中使用SQLiteOpenHelper這個輔助類時,可以生成一個資料庫,並可以對資料庫版本進行管理的方法可以是(ab) A、getWriteableDatabase()

B、getReadableDatabase()

C、getDatabase()

D、getAbleDatabase()

14. android 關於service生命周期的onCreate()和onStart()說法正確的是(ad)(多選題) A、當第一次啟動的時候先後調用onCreate()和onStart()方法

B、當第一次啟動的時候只會調用onCreate()方法

C、如果service已經啟動,將先後調用onCreate()和onStart()方法

D、如果service已經啟動,只會執行onStart()方法,不在執行onCreate()方法

15. 下面是屬於GLSurFaceView特性的是(abc)(多選) A、管理一個surface,這個surface就是一塊特殊的內存,能直接排版到android的視圖

view上。

B、管理一個EGL display,它能讓opengl把內容渲染到上述的surface上。

C、讓渲染器在獨立的線程里運作,和UI線程分離。

D、可以直接從內存或者DMA等硬體介面取得圖像數據

16. 下面在AndroidManifest.xml文件中注冊BroadcastReceiver方式正確的

A、

android:name="android.provider.action.NewBroad"/>

B、

android:name="android.provider.action.NewBroad"/>

C、

android:name="android.provider.action.NewBroad"/>

D、

android:name="android.provider.action.NewBroad"/>

17. 關於ContenValues類說法正確的是(a) A、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

名是String類型,而值都是基本類型

B、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

名是任意類型,而值都是基本類型

C、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中的

名,可以為空,而值都是String類型

D、他和Hashtable比較類似,也是負責存儲一些名值對,但是他存儲的名值對當中

的名是String類型,而值也是String類型

18. 我們都知道Hanlder是線程與Activity通信的橋梁,如果線程處理不當,你的機器就會變得越慢,那麼線程銷毀的方法是(a) A、onDestroy()

B、onClear()

C、onFinish()

D、onStop()

19. 下面退出Activity錯誤的方法是(c) A、finish()

B、拋異常強制退出

C、System.exit()

D、onStop()

20. 下面屬於android的動畫分類的有(ab)(多項) A、Tween B、Frame C、Draw D、Animation

21. 下面關於Android dvm的進程和Linux的進程,應用程序的進程說法正確的是(d) A、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認為是同一個概念.

B、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,不一定擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程,所以說不是一個概念.

C、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例.而每一個DVM不一定都是在Linux中的一個進程,所以說不是一個概念.

D、DVM指dalivk的虛擬機.每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的 Dalvik虛擬機實例.而每一個DVM都是在Linux中的一個進程,所以說可以認為是同一個概念.

22. Android項目工程下面的assets目錄的作用是什麼bA、放置應用到的圖片資源。

B、主要放置多媒體等數據文件

C、放置字元串,顏色,數組等常量數據

D、放置一些與UI相應的布局文件,都是xml文件

23. 關於res/raw目錄說法正確的是(a)A、 這里的文件是原封不動的存儲到設備上不會轉換為二進制的格式

B、這里的'文件是原封不動的存儲到設備上會轉換為二進制的格式

C、 這里的文件最終以二進制的格式存儲到指定的包中

D、這里的文件最終不會以二進制的格式存儲到指定的包中

24. 下列對android NDK的理解正確的是(abcd )A、 NDK是一系列工具的集合

B、 NDK 提供了一份穩定、功能有限的 API 頭文件聲明。

C、 使 「Java+C」 的開發方式終於轉正,成為官方支持的開發方式

D、 NDK 將是 Android 平台支持 C 開發的開端

二.文件存儲方式

三.SQLite資料庫方式

四.內容提供器(Content provider)方式

二、Android面試填空題

25. android中常用的四個布局是framlayout,linenarlayout,relativelayout和tablelayout。26. android 的四大組件是activiey,service,broadcast和contentprovide。27. java.io包中的objectinputstream和objectoutputstream類主要用於對對象(Object)的讀寫。28. android 中service的實現方法是:startservice和bindservice。29. activity一般會重載7個方法用來維護其生命周期,除了onCreate(),onStart(),onDestory() 外還有onrestart,onresume,onpause,onstop。30. android的數據存儲的方式sharedpreference,文件,SQlite,contentprovider,網路。31. 當啟動一個Activity並且新的Activity執行完後需要返回到啟動它的Activity來執行 的回調函數是startActivityResult()。32. 請使用命令行的方式創建一個名字為myAvd,sdk版本為2.2,sd卡是在d盤的根目錄下,名字為scard.img, 並指定屏幕大小HVGA.____________________________________。33. 程序運行的結果是:_____good and gbc__________。 public classExample{

String str=new String("good");

char[]ch={'a','b','c'};

public static void main(String args[]){

Example ex=new Example();

ex.change(ex.str,ex.ch);

System.out.print(ex.str+" and ");

Sytem.out.print(ex.ch);

}

public void change(String str,char ch[]){

str="test ok";

ch[0]='g';

}

}

34. 在android中,請簡述jni的調用過程。(8分)1)安裝和下載Cygwin,下載 Android NDK

2)在ndk項目中JNI介面的設計

3)使用C/C++實現本地方法

4)JNI生成動態鏈接庫.so文件

5)將動態鏈接庫復制到java工程,在java工程中調用,運行java工程即可

35. 簡述Android應用程序結構是哪些?(7分)Android應用程序結構是:

Linux Kernel(Linux內核)、Libraries(系統運行庫或者是c/c++核心庫)、Application

Framework(開發框架包)、Applications (核心應用程序)

36. 請繼承SQLiteOpenHelper實現:(10分) 1).創建一個版本為1的「diaryOpenHelper.db」的資料庫,

2).同時創建一個 「diary」 表(包含一個_id主鍵並自增長,topic字元型100

長度, content字元型1000長度)

3).在資料庫版本變化時請刪除diary表,並重新創建出diary表。

publicclass DBHelper extends SQLiteOpenHelper{

public final static String DATABASENAME ="diaryOpenHelper.db";

public final static int DATABASEVERSION =1;

//創建資料庫

public DBHelper(Context context,Stringname,CursorFactory factory,int version)

{

super(context, name, factory,version);

}

//創建表等機構性文件

public void onCreate(SQLiteDatabase db)

{

String sql ="create tablediary"+

"("+

"_idinteger primary key autoincrement,"+

"topicvar100),"+

"contentvar1000)"+

")";

db.execSQL(sql);

}

//若資料庫版本有更新,則調用此方法

public void onUpgrade(SQLiteDatabasedb,int oldVersion,int newVersion)

{

String sql = " ifexists diary";

db.execSQL(sql);

this.onCreate(db);

}

}

37. 頁面上現有ProgressBar控制項progressBar,請用書寫線程以10秒的的時間完成其進度顯示工作。(10分)答案

publicclass ProgressBarStu extends Activity {

private ProgressBar progressBar = null;

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.progressbar);

//從這到下是關鍵

progressBar = (ProgressBar)findViewById(R.id.progressBar);

Thread thread = new Thread(newRunnable() {

@Override

public void run() {

int progressBarMax =progressBar.getMax();

try {

while(progressBarMax!=progressBar.getProgress())

{

intstepProgress = progressBarMax/10;

intcurrentprogress = progressBar.getProgress();

progressBar.setProgress(currentprogress+stepProgress);

Thread.sleep(1000);

}

} catch(InterruptedException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

});

thread.start();

//關鍵結束

}

}

38. 請描述下Activity的生命周期。 必調用的三個方法:onCreate() --> onStart() --> onResume(),用AAA表示

(1)父Activity啟動子Activity,子Actvity退出,父Activity調用順序如下

AAA --> onFreeze() --> onPause() --> onStop() --> onRestart()--> onStart(),onResume() …

(2)用戶點擊Home,Actvity調用順序如下

AAA --> onFreeze() --> onPause() --> onStop() -- Maybe -->onDestroy() – Maybe

(3)調用finish(), Activity調用順序如下

AAA --> onPause() --> onStop() --> onDestroy()

(4)在Activity上顯示dialog,Activity調用順序如下

AAA

(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序如下

AAA --> onFreeze() --> onPause()

(6)設備進入睡眠狀態,Activity調用順序如下

AAA --> onFreeze() --> onPause()

39. 如果後台的Activity由於某原因被系統回收了,如何在被系統回收之前保存當前狀態? onSaveInstanceState()

當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成以後又會來找A,這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同於直接啟動的是這回onCreate()里是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。

40. 如何將一個Activity設置成窗口的樣式。 在AndroidManifest.xml 中定義Activity的地方一句話android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就變成半透明的

41. 如何退出Activity?如何安全退出已調用多個Activity的Application?對於單一Activity的應用來說,退出很簡單,直接finish()即可。

當然,也可以用killProcess()和System.exit()這樣的方法。

但是,對於多Activity的應用來說,在打開多個Activity後,如果想在最後打開的Activity直接退出,上邊的方法都是沒有用的,因為上邊的方法都是結束一個Activity而已。

當然,網上也有人說可以。

就好像有人問,在應用里如何捕獲Home鍵,有人就會說用keyCode比較KEYCODE_HOME即可,而事實上如果不修改framework,根本不可能做到這一點一樣。

所以,最好還是自己親自試一下。

那麼,有沒有辦法直接退出整個應用呢?

在2.1之前,可以使用ActivityManager的restartPackage方法。

它可以直接結束整個應用。在使用時需要許可權android.permission.RESTART_PACKAGES。

注意不要被它的名字迷惑。

可是,在2.2,這個方法失效了。

在2.2添加了一個新的方法,killBackgroundProcesses(),需要許可權android.permission.KILL_BACKGROUND_PROCESSES。

可惜的是,它和2.2的restartPackage一樣,根本起不到應有的效果。

另外還有一個方法,就是系統自帶的應用程序管理里,強制結束程序的方法,forceStopPackage()。

它需要許可權android.permission.FORCE_STOP_PACKAGES。

並且需要添加android:sharedUserId="android.uid.system"屬性

同樣可惜的是,該方法是非公開的,他只能運行在系統進程,第三方程序無法調用。

因為需要在Android.mk中添加LOCAL_CERTIFICATE := platform。

而Android.mk是用於在Android源碼下編譯程序用的。

從以上可以看出,在2.2,沒有辦法直接結束一個應用,而只能用自己的辦法間接辦到。

現提供幾個方法,供參考:

1、拋異常強制退出:

該方法通過拋異常,使程序ForceClose。

驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。

2、記錄打開的Activity:

每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。

3、發送特定廣播:

在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後,關閉即可。

4、遞歸退出

在打開新的Activity時使用startActivityForResult,然後自己加標志,在onActivityResult中處理,遞歸關閉。

除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。

但是這樣做同樣不完美。

你會發現,如果自己的應用程序對每一個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。

但至少,我們的目的達到了,而且沒有影響用戶使用。

為了編程方便,最好定義一個Activity基類,處理這些共通問題。

42. 請介紹下Android中常用的五種布局。FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)


;

⑧ Android大廠面試經驗分享(OPPO,位元組,華為,阿里)

我是從小公司跳出來的,最終入職OPPO,說實話這段時間的經歷讓我深深地感受到,我們為跳槽做的一些臨時抱佛腳的提升跟那些大佬的沉澱比起來太渺小了。我們都知道找資料學習、刷面試題,但也許只能應付這一次的面試,後面還是會技術發愁,那些短時間背下來的東西遲早會忘掉, 大家還是做好長期提升自己的准備,好好沉澱的東西最後才是屬於自己的。

說說當時的面試過程,我是內推獲得的面試機會,很感謝當時幫我內推的兄弟,總共三輪面試,兩輪技術,一輪HR面,當天面試結束。

我10:10分到的公司,10:30開始面試,第一輪面試將近一個小時,聊的點我基本上都答得上來,自我感覺良好。然後面試官讓我等一下,他去叫他們老大來給我二面,我等了有二十幾分鍾吧,二面有一個多小時,這次問的比較深,有些地方答的有些嗑吧,總體來說我自己是滿意的。HR面約到下午了,整個流程下來每輪面試官都讓人感覺很不錯,我自己做的准備也讓我面試感覺下來很爽。

我把面試遇到過的以及自己學慣用到過相關內容都整理到一起了,方便自己進行復盤和後續的查漏補缺:

一、 Java基礎

1.1 靜態內部類和非靜態內部類的比較

1.2 多態的理解與應用

1.3 java方法的多態性理解

1.4 java中介面和繼承的區別

1.5 線程池的好處,詳解,單例(絕對好記)

1.6 線程池的優點及其原理

1.7 線程池的優點(重點)

1.8 為什麼不推薦通過Executors直接創建線程池

1.9 不怕難之BlockingQueue及其實現

1.10 深入理解ReentrantLock與Condition

1.11 Java多線程:線程間通信之Lock

1.12 Synchronized 關鍵字原理

1.13 ReentrantLock原理

1.14 HashMap中的Hash沖突解決和擴容機制

1.14 Java並發

1.15 Java虛擬機

1.16 JVM常見面試題

1.17 JVM內存結構

1.18 類載入機制/雙親委託

二、 Android基礎

2.1 Activity知識點(必問)

2.2 Fragment知識點

2.3 Service知識點

2.4 Intent知識點

2.5 數據存儲

三、UI控制項篇

3.1 屏幕適配

3.2 主要控制項優化

3.3 事件分發與嵌套滾動

3.4 動態化頁面構建方案

四、網路通信篇

4.1 網路協議

五、架構設計篇

5.1 MVP架構設計

5.2 組件化架構

六、性能優化篇

6.1 啟動優化

6.2 內存優化

6.3 繪制優化

6.4 安裝包優化

七、源碼流程篇

7.1 開源庫源碼分析

7.2 Glide源碼分析

7.3 day 20 面試題:Glide面試題

7.4 聊一聊關於Glide在面試中的那些事

7.5 面試官:簡歷上如果寫Glide,請注意以下幾點…

7.6 Glide OOM問題解決方法匯總

7.7 LeakCanary源碼分析

7.8 OkHttp源碼分析

7.9 okhttp連接池復用機制

7.10 okhttp 流程和優化的實現

7.11 一篇讓你受用的okhttp分析

7.12 OkHttp面試之–OkHttp的整個非同步請求流程

7.13 OkHttp面試之–HttpEngine中的sendRequest方法詳解

7.14 OkHttp解析大總結

7.15 Okhttp任務隊列工作原理

7.16 Android高頻面試專題 - 架構篇(二)okhttp面試必知必會

7.17 Android 網路優化,使用 HTTPDNS 優化 DNS,從原理到 OkHttp 集成

7.18 Retrofit源碼分析

7.19 RxJava源碼分析

7.20 RxJava原理與源碼分析

7.21 RxJava如何進行線程切換的?

7.22 Rxjava內存泄漏防止方案——RxLifecycle,AutoDispose,RxLife框架

7.23 Tinker源碼分析

7.24 ARouter源碼分析

7.25 Android框架層源碼解析

7.26 演算法設計

八、新技術篇

8.1 實戰問題篇

九、面試篇

9.1 開源文檔

9.2 面試文獻

以上就是我的學習和面試積累,有自己面試經歷過的,也有整理的一些大廠面試題,篇幅有限,具體內容就不展示了,我已經整理成文檔了。

還是開頭說的,僅靠面試期間臨時抱佛腳和刷題對自身發展不是長久之計,做好長期提升的規劃,好好沉澱每一次的學習和面試經歷,把這些最終都轉化成屬於自己的東西才是實質上對自己最有用的。

⑨ android面試題會出現什麼內容

這是一篇介紹android面試題的文章,下面就讓我們一起來了解一下吧!
1.android dvm 的進程和Linux的進程,應用程序的進程是否為同一個概念:
答:dvm是dalivk虛擬機。每一個android應用程序都在自己的進程中運行,都擁有一個dalivk虛擬機實例。而每一個dvm都是在linux的一個進程。所以說可以認為是同一個概念。
2.android的動畫有哪幾種?他們的特點和區別是什麼?
答:兩種,一種是tween動畫,一種是frame動畫。tween動畫,這種實現方式可以使視圖組件移動,放大或縮小以及產生透明度的變化。frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
3.handler進制的原理:
答:android提供了handler和looper來滿足線程間的通信。Handler先進先出原則。looper用來管理特定線程內對象之間的消息交換(message Exchange).
1)looper:一個線程可以產生一個looper對象,由它來管理此線程里的message queue(消息隊列)
2)handler:你可以構造一個handler對象來與looper溝通,以便push新消息到messagequeue里;或者接收looper(從messagequeue里取出)所送來的消息。
3)messagequeue:用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而android啟動程序時會為它建立一個message queue.
4.android view的刷新:
答:Android中對View的更新有很多種方式,使用時要區分不同的應用場合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1).不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發生改變時對UI進行重繪。你只需在Activity中顯式地調用View對象中的invalidate()方法即可。系統會自動調用 View的onDraw()方法。
2).使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報:android.view.ViewRoot$:Only the originalthread that created a view hierarchy can touch its views.
這時候你需要創建一個繼承了android.os.Handler的子類,並重寫handleMessage(Messagemsg)方法。android.os.Handler是能發送和處理消息的,你需要在Activity中發出更新UI的消息,然後再你的Handler(可以使用匿名內部類)中處理消息(因為匿名內部類可以訪問父類變數,你可以直接調用View對象中的invalidate()方法 )。也就是說:在新線程創建並發送一個Message,然後再主線程中捕獲、處理該消息。
3).使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時也實現了雙緩沖。你可以定義一個她的子類並實現SurfaceHolder.Callback介面。由於實現SurfaceHolder.Callback介面,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪制玩新的圖像後調用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
5.說說mvc模式的原理,它在android中的運用:
答:android的官方建議應用程序的開發採用mvc模式。何謂mvc?
mvc是model,view,controller的縮寫,mvc包含三個部分:
l模型(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裡面處理,當然對業務計算等操作也是必須放在的該層的。
6.Activity的生命周期:
答:onCreate: 在這里創建界面,做一些數據 的初始化工作
onStart: 到這一步變成用戶可見不可交互的
onResume:變成和用戶可交互 的,(在activity 棧系統通過棧的方式管理這些個Activity的最上面,運行完彈出棧,則回到上一個Activity)
onPause: 到這一步是可見但不可交互的,系統會停止動畫 等消耗CPU 的事情從上文的描述已經知道,應該在這里保存你的一些數據,因為這個時候你的程序的優先順序降低,有可能被系統收回。在這里保存的數據,應該在
onstop: 變得不可見,被下一個activity覆蓋了
onDestroy: 這是activity被幹掉前最後一個被調用方法了,可能是外面類調用finish方法或者是系統為了節省空間將它暫時性的幹掉
7.讓Activity變成一個窗口:
答:Activity屬性設定:有時候會做個應用程序是漂浮在手機主界面的。這個只需要在設置下Activity的主題theme,即在Manifest.xml定義Activity的地方加一句:
android :theme="@android:style/Theme.Dialog"
如果是作半透明的效果:
android:theme="@android:style/Theme.Translucent"
8.Android中常用的五種布局:
答:LinearLayout線性布局;AbsoluteLayout絕對布局;TableLayout表格布局;RelativeLayout相對布局;FrameLayout幀布局;
9.Android的五種數據存儲方式:
答:sharedPreferences;文件;SQLite;contentProvider;網路
10.請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系:
答:Handler獲取當前線程中的looper對象,looper用來從存有Message的Message Queue里取出message,再由Handler進行message的分發和處理。
11.AIDL的全稱是什麼?如何工作?能處理哪些類型的數據?
答:AIDL(AndroidInterface Definition Language)android介面描述語言
12.系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由:
答:通過直接發送Uri把參數帶過去,或者通過manifest里的intentfilter里的data屬性。代碼如下:
Intent intent = new Intent();
Intent.setAction(「android.intent.action.View」);
Uri uriBrowsers = Uri.parse(「http://www.sina.com.cn」);
Intent.setData(uriBrowsers);
//包名、要打開的activity
intent.setClassName(「com.android.browser」,」com.android.browser.BrowserActivity」);
startActivity(intent);
13.什麼是ANR,如何避免?
答:ANR的定義:
在android上,如果你的應用程序有一段時間響應不移靈敏,系統會向用戶提示「應用程序無響應」(ANR:application Not Responding)對話框。因此,在程序里對響應性能的設計很重要,這樣,系統不會顯示ANR給用戶。
如何避免:
首先來研究下為什麼它會在android的應用程序里發生和如何最佳構建應用程序來避免ANR.
android應用程序通常是運行在一個單獨的線程(例如:main)里,這就意味你的應用程序所做的事情如果在主線程里佔用了大長時間的話,就會引發ANR對話框,因為你的應用程序並沒有給自己機會來處理輸入事件或者Intent廣播。
因此,運行在主線程里的任何訪求都盡可能少做事情。特別是,activity應該在它的關鍵生命周期方法(onCreate()和onResume())里盡可能少的去作創建操作。潛在的耗時操作,例如網路或資料庫操作,或者高耗時的計算如改變點陣圖尺寸,應該在子線程里(或者以資料庫操作為例,通過非同步請求的方式)來完成。然而,不是說你的主線程阻塞在那裡等待子線程的完成---也不是調用Thread.wait()或者Thread.sleep()。替代的方法是:主線程應該為子線程提供一個Handler,以便完成時能夠提交給主線程。以這種方式設計你的應用程序,將能保證你的主線程保持對輸入的響應性並能避免由5秒輸入事件的超時引發的ANR對話框。這種做法應該在其它顯示UI的線程里效仿,因為它們都受相同的超時影響。
IntentReceiver執行時間的特殊限制意味著它應該做:在後台里做小的、瑣碎的工作,如保存設定或注冊一個Notification。和在主線程里調用的其它方法一樣,應用程序應該避免在BroadcastReceiver里做耗時的操作或計算,但也不是在子線程里做這些任務(因為BroadcastReceiver的生命周期短),替代的是,如果響應Intent廣播需要執行一個耗時的動作的話,應用程序應該啟動一個Service。順便提及一句,你也應該避免在Intent Receiver里啟動一個Activity,因為它會創建一個新的畫面,並從當前用戶正在運行的程序上搶奪焦點。如果你的應用程序在響應Intent廣播時需要向用戶展示什麼,你應該使用Notification Manager來實現。
一般來說,在應用程序里,100到200ms是用戶能感知阻滯的時間閾值,下面總結了一些技巧來避免ANR,並有助於讓你的應用程序看起來有響應性。
如果你的應用程序為響應用戶輸入正在後台工作的話,可以顯示工作的進度(ProgressBar和ProgressDialog對這種情況來說很有用)。特別是游戲,在子線程里做移動的計算。如果你的程序有一個耗時的初始化過程的話,考慮可以顯示一個Splash Screen或者快速顯示主畫面並非同步來填充這些信息。在這兩種情況下,你都應該顯示正在進行的進度,以免用戶認為程序被凍結了。
14.什麼情況會導致Force Close?如何避免?能否捕獲導致其的異常?
答:如空指針等可以導致ForceClose;可以看Logcat,然後找到對應的程序代碼來解決錯誤。
15.橫豎屏切換時候的activity的生命周期:
答:
1) 新建一個activity,並把各個生命周期列印出來
2) 運行activity,得到如下信息:
onCreate()à
onStart()à
onResume()à
3) 按ctrl+F12切換成橫屏時
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
4) 再按ctrl+f12切換成豎屏時,發現列印了兩次相同的Log
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
5) 修改AndroidManifest.xml,把該Activity添加android:configChanges=「orientation」,執行步驟3
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
6) 修改AndroidManifest.xml,把該Activity添加android:configChanges=「orientation」,執行步驟4,發現不會再列印相同信息,但多列印了一行onConfigChanged
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onConfigurationChanged()à
7) 把步驟5的android:configChanges=「orientation」改成
android:configChanges=「orientation|keyboradHidden」,執行步驟3,就只列印onConfigChanged
onConfigurationChanged()à
8) 把步驟5的android:configChanges=「orientation」改成
android:configChanges=「orientation|keyboradHidden」,執行步驟4
onConfigurationChanged()à
onConfigurationChanged()à
總結:
1) 不設置activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次。
2) 設置activity的android:configChanges=「orientation」時, 切屏會重新調用各個生命周期,切橫屏、豎屏時都只會執行一次,但是豎屏最後多列印一條onConfigurationChanged()
3) 設置activity的android:configChanges=「orientation|keyboardHidden」時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged(),橫屏一次,豎屏兩次
再總結下整個activity的生命周期:
1) 當前activity產生事件彈出Toast和AlertDialog的時候Activity的生命周期不會有改變
2) Activity運行時按下HOME鍵(跟被完全覆蓋一樣的)
onSavaInstanceStateà
onPauseà
onStopà
onRestartà
onStartà
onResumeà
3) 未被完全覆蓋,只是失去焦點:
onPauseà
onResumeà
16.如何將SQLite資料庫(.db文件)與apk文件一起發布?
答:可以將.db文件復制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。可以將.db文件復制到res aw目錄中
17.如何將打開res aw目錄中的資料庫文件?
答:在Android中不能直接打開res aw目錄中的資料庫文件,而需要在程序第一次啟動時將該文件復制到手機內存或SD卡的某個目錄中,然後再打開該資料庫文件。復制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然後將該InputStream對象中的數據寫入其他的目錄中相應文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite資料庫文件。
18.android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區別:
答:XML解析主要有三種方式,SAX、DOM、PULL。常規在PC上開發我們使用Dom相對輕鬆些,但一些性能敏感的資料庫或手機上還是主要採用SAX方 式,SAX讀取是單向的,優點:不佔內存空間、解析屬性方便,但缺點就是對於套嵌多個分支來說處理不是很方便。而DOM方式會把整個XML文件載入到內存 中去,這里Android開發網提醒大家該方法在查找方面可以和XPath很好的結合如果數據量不是很大推薦使用,而PULL常常用在J2ME對於節點處 理比較好,類似SAX方式,同樣很節省內存,在J2ME中我們經常使用的KXML庫來解析。
19.DDMS和TraceView的區別?
答:DDMS是一個程序執行查看器,在裡面可以看見線程和堆棧等信息,TraceView是程序性能分析器
20.談談Android的IPC機制:
答:IPC是內部進程通信的簡稱,是共享"命名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間可以隨時的進行交互,故在Android中該機制,只適用於Activity和Service之間的通信,類似於遠程方法調用,類似於C/S模式的訪問。通過定義AIDL介面文件來定義IPC介面。Servier端實現IPC介面,Client端調用IPC介面本地代理。
21.NDK是什麼:
答:NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java應用打成apk包
NDK集成了交叉編譯器,並提供了相應的mk文件和隔離cpu,平台等的差異,開發人員只需簡單的修改mk文件就可以創建出so
22.描述一下android的系統架構:
答:android系統架構分從下往上為Linux內核層、運行庫、應用程序框架層和應用程序層。
Linux內核層:負責硬體的驅動程序、網路、電源、系統安全以及內存管理等功能。
運行庫和androidruntion:運行庫:即c/c++函數庫部分,大多數都是開放源代碼的函數庫,例如webkit,該函數庫負責android網頁瀏覽器的運行;例如標準的c函數庫libc、openssl、sqlite等,當然也包括支持游戲開發的2dsgl和3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體文件格式。Androidruntion負責解釋和執行生成的dalvik格式的位元組碼
應用軟體架構:java應用程序開發人員主要是使用該層封裝好的api進行快速開發的。
應用程序層:該層是java的應用程序層,android內置的googlemaps、email、IM、瀏覽器等,都處於該層,java開發人員工發的程序也處於該層,而且和內置的應用程序具有平等的地位,可以調用內置的應用程序,也可以替換內置的應用程序

⑩ 請教有經驗者,一般android面試會問些什麼問題

其實,不管是什麼樣的面試形,問的問題都差不多,萬變不離其宗,都有規律可尋。其實對所有的面試官而言,只有一個目的:在最短的時間里了解到你最多的信息。想高效率的准備面試,先從這七個大方面著手吧!
一、基本情況
1、請用最簡潔的語言描述您從前的工作經歷和工作成果。
二、專業背景
您認為此工作崗位應當具備哪些素質?
三、工作模式
您平時習慣於單獨工作還是團隊工作?
四、價值取向
您對原來的單位和上司的看法如何?
五、資質特性
您如何描述自己的個性?
六、薪資待遇
是否方便告訴我您目前的待遇是多少?
七、背景調查
您是否介意我們通過您原來的單位迚行一些調查?
95%的面試基本上都離不開這些問題,當然還有可能問一些專業問題,我想如果你做過的話應該都不是什麼難事,一般面試官都不會過多的問專業方面的問題的。

閱讀全文

與android常見的面試題相關的資料

熱點內容
操作系統代碼編譯 瀏覽:481
程序員東北大學 瀏覽:426
編譯忽略空字元 瀏覽:117
多店鋪阿里雲伺服器教程 瀏覽:378
單片機求初值 瀏覽:420
安卓機如何在電腦備份圖片 瀏覽:925
ca證書加密機價格 瀏覽:798
天乾地支年份演算法 瀏覽:796
程序員打造的視頻 瀏覽:7
java和php通信 瀏覽:680
為什麼黑程序員 瀏覽:163
程序員男生 瀏覽:456
戴爾文件夾內文件怎麼置頂 瀏覽:582
雲伺服器6m網速 瀏覽:722
vivo手機中國聯通伺服器地址 瀏覽:862
工程總控編譯失敗 瀏覽:707
燕趙紅楓app如何下載 瀏覽:867
php查殺軟體 瀏覽:878
教育管理學pdf 瀏覽:547
伺服器均衡怎麼使用 瀏覽:626