Android工程師面試準備知識點

Android工程師面試準備知識點

據說,把下面的全弄懂,面試必過,因此試着去把全部題目補充了一下,各位能耐的網友們,若是有吐槽或者補充的儘管留言,在這裏謝過你們了。java

 

1.   android的多線程如何通訊android

答:Android提供了Handler和Looper來知足線程間的通訊。web

Handler是消息的處理者,能夠發佈或者處理或者操做一個Runnable, handler接受消息後調用handleMessage進行處理。面試

Looper是Handler與消息隊列之間通信橋樑,程序組件經過Handler把消息傳遞給Looper,Looper把消息放入隊列。sql

 

2.   android的多進程通訊原理數據庫

答:Android實現跨進程通訊的方式是採用的是AIDL方式apache

AIDL(Android 接口描述語言)是一種接口口描述語言; 編譯器能夠經過aidl 文件生成一段代碼,經過預先定義的接口達到兩個進程內部通訊進程的目的.  若是須要在一個Activity 中, 訪問另外一個Service 中的某個對象, 須要先將對象轉化成AIDL 可識別的參數(多是多個參數), 而後使用AIDL 來傳遞這些參 數, 在消息的接收端, 使用這些參數組裝成本身須要的對象.設計模式

原理:進程之間的通訊信息,首先會被轉換成AIDL協議消息,而後發送給對方,對方收到AIDL協議消息後再轉換成相應的對象。因爲進程之間的通訊信息須要雙向轉換,因此android採用代理類在背後實現了信息的雙向轉換,代理類由android編譯器生成,對開發人員來講是透明的。數組

 

3.   Android五大組件 怎麼使用瀏覽器

答:Activity、Intent、Service、Content Provider,Broadcast Receiver

Activity:字面意思爲「活動」,簡單來講就是一個屏幕,經過調用setContentView()來設置要顯示的界面。

Intent:表示「意圖」,能夠實現Activity與Activity之間的交互,傳遞數據。

Service:表示服務,與Activity同樣默認運行於主線程,可是它沒有可視化界面,是運行在後臺。經過調用startService或bindService方法來啓動來啓動服務。

Content Provider:爲解決應用程序間數據通訊、共享的問題而引入的。

Broadcast Receiver: 廣播接收器,Android的廣播要麼來自系統,要麼來自普通程序。

能夠在AndroidMenifest.xml註冊廣播接收器或在代碼中註冊。

 

4.   service啓動默認是什麼線程

答:默認啓動的是主線程

5.  使用過哪些設計模式進行開發

答:單例模式、工廠模式、觀察者模式

6.   線程池有什麼優勢缺點

答:優勢就是減小建立線程的消耗,每次建立線程都從線程池中拿。

缺點是一直佔用內存。

7. 多種佈局方式的特色,怎麼使用

答:

線性佈局-LinearLayout

orientation-容器內元素的排列方式。

vertical:子元素們垂直排列

horizontal:子元素水平排列

這是用得最多的一種佈局,經過設置orientation來決定子元素是按照什麼方式排列。

絕對佈局-AboluteLayout

layout_x:x座標。以左上角爲頂點。

layout_y:y座標。以作上角爲頂點。

這個佈局被摒棄了,不夠靈活

相對佈局-RelativeLayout

layout_centerInParent – 將當前元素放置到其容器內的水平方向和垂直方向的中央位置(相似的屬性有:layout_centerHorizontal,layout_alignParentLeft等)

layout_marginLeft – 設置當前元素相對於其容器的左側邊緣的距離

layout_below – 放置當前元素到指定的元素的下面

layout_alignRight – 當前元素與指定的元素右對齊

這個佈局也是常常用的,通常想要複雜的佈局,它少不了,由於它能夠很好的定位。

表格佈局-TableLayout

表格佈局主要以行列的方式來管理子控件,其中每一行即一個TableRow對象,每一個TableRow對象能夠添加子控件,而且每假如一個控件即至關於添加了一列。

幀佈局-FrameLayout

也叫層疊佈局。以左上角爲起點,將FrameLayout內的元素一層覆蓋一層地顯示,在幀佈局中,先添加的圖片被後添加的圖片覆蓋。

8.android的數據庫使用是否熟悉

答:SQLite是Android內嵌的一個輕量級數據庫,說實在我用得並很少,不太熟悉。

 

9.android的xml解析有哪些 有什麼區別

答:在Android平臺上可使用SAX(Simple API for XML)、Document Object Model(DOM)和Android附帶的Pull解析器解析XML文件。

DOM解析:處理大型文件時其性能降低的很是厲害。這個問題是由DOM的樹結構所形成的,這種結構佔用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存,適合對XML的隨機訪問

解析過程:

1.      獲取factory

DocumentBuilderFactory  builderFactory =DocumentBuilderFactory.newInstance();

2.      獲取builder

builder =builderFactory.newDocumentBuilder();

3.      解析爲Document對象

Document document  = builder.parse(xmlFile);

4.      獲取根元素

Element root = document.getDocumentElement();

5.      獲取根元素下的子節點

NodeList childNodes =root.getChildNodes();

SAX解析:不像DOM,SAX是事件驅動型的XML解析方式。它順序讀取XML文件,不須要一次所有裝載整個文件。當遇到像文件開頭,文檔結束,或者標籤開頭與標籤結束時,它會觸發一個事件,用戶經過在其回調事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問。

1.      獲取factory

SAXParserFactory factory =SAXParserFactory.newInstance();

2.      獲取Parser

SAXParser parser =factory.newSAXParser();

3.      開始解析

parser.parser(xmlFile, newMySAXListener());

PULL解析: 除了可使用 SAX和DOM解析XML文件,你們也可使用Android內置的Pull解析器解析XML文件。 Pull解析器的運行方式與 SAX 解析器類似。它提供了相似的事件,如:開始元素和結束元素事件,使用parser.next()能夠進入下一個元素並觸發相應事件。事件將做爲數值代碼被髮送,所以可使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法能夠獲取下一個Text類型元素的值。

1.      獲取parser

XmlPullParserparser = Xml.newPullParser();

2.      設置輸入

parser.setInput(instream, 「UTF-8」);

3.      獲取事件類型

int eventType = parser.getEventType();

4.      開始解析

 

10.android的基礎類庫有哪些 例如 List 、Set、 HashSet有什麼區別,如何排除重複的數據

答:

android.app :提供高層的程序模型、提供基本的運行環境

android.content :包含各類的對設備上的數據進行訪問和發佈的類

android.database :經過內容提供者瀏覽和操做數據庫

android.graphics :底層的圖形庫,包含畫布,顏色過濾,點,矩形,能夠將他們直接繪製到屏幕上.

android.location :定位和相關服務的類

android.media :提供一些類管理多種音頻、視頻的媒體接口

android.net :提供幫助網絡訪問的類,超過一般的 java.net.* 接口

android.os :提供了系統服務、消息傳輸、 IPC 機制

android.opengl :提供 OpenGL 的工具

android.provider :提供類訪問 Android 的內容提供者

android.telephony :提供與撥打電話相關的 API 交互

android.view :提供基礎的用戶界面接口框架

android.util :涉及工具性的方法,例如時間日期的操做

android.webkit :默認瀏覽器操做接口

android.widget :包含各類 UI 元素(大部分是可見的)在應用程序的屏幕中使用

 

 

List按對象進入的順序保存對象,不作排序或編輯操做。Set對每一個對象只接受一次,並使用本身內部的排序方法(一般,你只關心某個元素是否屬於Set,而不關心它的順序--不然應該使用List)。

具體查看http://blog.csdn.net/wwj_748/article/details/7883988

11.作過什麼東西,介紹一下。

答:我作過一個新聞客戶端,還有一個音樂播放器,實習正在作的是一個語音郵箱客戶端,正在開發當中的一個新浪微博客戶端。

1.      新聞客戶端是我在大學參加軟件開發大賽的一個做品,它是一款手機應用,用來顯示新聞信息,可供用戶查看和評論新聞。

2.      簡、美音樂播放器是我自主研發的一個音樂播放器,本着想作一款簡單、漂亮的音樂播放器給本身用。

3.      語言郵箱是我本身在實習公司參與開發的一款產品,是咱們公司的一款產品。

4.      新浪微博客戶端是個人一個進階項目,想熟悉新浪微博開發平臺API的使用,爲本身開發其餘開放平臺作一個鋪墊,如今還在開發當中。

 

12.觸屏處理流程

答:事件傳遞順序爲ViewGroup::onInterceptTouchEvent()–>ViewGroup或View的onTouchEvent() –> Activity::onTouchEvent()

1.      當ViewGroup::onInterceptTouchEvent()返回值爲false,事件(按下、移動、擡起等)都傳遞給目標View。若是在ViewGroup觸發,就調用ViewGroup::OnTouchEvent(),若是在View觸發,則調用View::OnTouchEvent();

2.      當ViewGroup::onInterceptTouchEvent()返回值爲true,事件會直接傳遞到ViewGroup::onTouchEvent()處理。也就是說,事件後面的移動、擡起動做不會通過onInterceptTouchEvent(),而是直接傳到onTouchEvent()。

3.      當ViewGroup::OnTouchEvent()/View::OnTouchEvent()返回值爲true,表示按下動做事件被處理,意味着事件的移動、擡起等後續動做將會傳到此方法。若是是View處理的話,則ViewGroup::OnTouchEvent()將不會得到該事件; 若是是ViewGroup處理,則Activity::OnTouchEvent()將不會活動該事件。

4.      當ViewGroup::OnTouchEvent()/View::OnTouchEvent返回值爲false,表示不處理事件,系統將把事件傳遞給其父級處理。

5.      Activity::OnTouchEvent()這個是最後被處理的地方,若是不處理,系統將拋棄這個事件。

 

小結:onInterceptTouchEvent()是用來分發事件,OnTouchEvent()是用來處理事件的,誰不處理就交給上一級處理,層層傳遞。

13.activity流程

答:建立onCreate-  啓動onStart – 開始onResume – 暫停 onPause – 結束onStop – 銷燬onDestroy

在一個Activity正常啓動的過程當中,他們被調用的順序是 onCreate ->onStart -> onResume, 在Activity被幹掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命週期

詳細介紹一下這幾個方法中系統在作什麼以及咱們應該作什麼:

  onCreate: 在這裏建立界面 ,作一些數據 的初始化工做

  onStart: 到這一步變成用戶可見不可交互 的

  onResume: 變成和用戶可交互 的,(在activity 棧系統經過棧的方式管理這些個

  Activity的最上面,運行完彈出棧,則回到上一個Activity)

  onPause: 到這一步是可見但不可交互 的,系統會中止動畫 等消耗CPU 的事情

  從上文的描述已經知道,應該在這裏保存你的一些數據,由於這個時候

  你的程序的優先級下降,有可能被系統收回。在這裏保存的數據,應該在

  onResume裏讀出來,注意:這個方法裏作的事情時間要短,由於下一

  個activity不會等到這個方法完成才啓動

  onstop: 變得不可見 ,被下一個activity覆蓋了

  onDestroy: 這是activity被幹掉前最後一個被調用方法了,多是外面類調用finish方

  法或者是系統爲了節省空間將它暫時性的幹掉,能夠用isFinishing()來判

  斷它,若是你有一個ProgressDialog在線程中轉動,請在onDestroy裏

  把他cancel掉,否則等線程結束的時候,調用Dialog的cancel方法會拋

  異常的。

  onPause,onStop, onDestroy,三種狀態 下 activity都有可能被系統幹掉

爲了保證程序的正確性,你要在onPause()裏寫上持久層操做的代碼,將用戶編輯的內容都保存到存儲介質上(通常都是數據庫 )。實際工做中由於生命週期的變化而帶來的問題也不少,好比你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停仍是殺掉仍是數據回滾,是吧?由於Activity可能被殺掉,因此線程中使用的變量和一些界面元素就千萬要注意了,通常都是採用Android的消息機制 [Handler ,Message]來處理多線程和界面交互的問題。

14.如何提升程序的優先級,避免系統內存不足的時候被殺掉

答:爲了提升咱們的Activity中的線程的線程優先級(Thread-Priority),咱們能夠在AndroidManifest.xml使用uses-permission標籤。能夠這麼作:

  <uses-permissionid="android.permission.RAISED_THREAD_PRIORITY"/>

而後在Activity代碼中設置線程優先級

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);//設置線程優先爲後臺,這樣當多個線程併發後不少可有可無的線程分配的CPU時間將會減小,有利於主線程的處理,相關的Thread優先級定義羅列有如下幾種:

 

int THREAD_PRIORITY_AUDIO //標準音樂播放使用的線程優先級

int THREAD_PRIORITY_BACKGROUND //標準後臺程序

int THREAD_PRIORITY_DEFAULT // 默認應用的優先級

int THREAD_PRIORITY_DISPLAY //標準顯示系統優先級,主要是改善UI的刷新

int THREAD_PRIORITY_FOREGROUND //標準前臺線程優先級

int THREAD_PRIORITY_LESS_FAVORABLE //低於favorable

int THREAD_PRIORITY_LOWEST //有效的線程最低的優先級

int THREAD_PRIORITY_MORE_FAVORABLE //高於favorable

int THREAD_PRIORITY_URGENT_AUDIO //標準較重要音頻播放優先級

int THREAD_PRIORITY_URGENT_DISPLAY //標準較重要顯示優先級,對於輸入事件一樣適用。

 

 

 

 

 

 

  1. 什麼是Activity?
  2. 請描述一下Activity生命週期。
  3. 兩個Activity之間跳轉時必然會執行的是哪幾個方法。
  4. 橫豎屏切換時候Activity的生命週期。
  5. 如何將一個Activity設置成窗口的樣式。
  6. 你後臺的Activity被系統 回收怎麼辦?
  7. 如何退出Activity?如何安全退出已調用多個Activity的Application?
  8. 若是後臺的Activity因爲某緣由被系統回收了,如何在被系統回收以前保存當前狀態?
  9. 兩個Activity之間怎麼傳遞數據?
  10. 怎麼讓在啓動一個Activity是就啓動一個service?
  11. 同一個程序,但不一樣的Activity是否能夠放在不一樣的Task任務棧中?
  12. Activity怎麼和service綁定,怎麼在activity中啓動本身對應的service?
  13. 什麼是Service以及描述下它的生命週期。
  14. Service有哪些啓動方法,有什麼區別,怎樣停用Service?
  15. 不用service,B頁面爲音樂播放,從A跳轉到B,再返回,如何使音樂繼續播放?
  16. 什麼是IntentService?有何優勢?
  17. 何時使用Service?
  18. 請描述一下Intent 和 Intent Filter。
  19. Intent傳遞數據時,能夠傳遞哪些類型數據?
  20. 說說Activity,Intent,Service是什麼關係 。
  21. 請描述一下Broadcast Receiver。
  22. 在manifest和代碼中如何註冊和使 用 broadcast receiver 。
  23. 請介紹下ContentProvider是如何實現數據共享的。
  24. 請介紹下Android的數據存儲方式。
  25. 爲何要用ContentProvider?它和sql的實現上有什麼差異?
  26. 請介紹下Android中經常使用的五種佈局。
  27. 談談UI中, Padding和Margin有什麼區別?
  28. widget相對位置的完成在antivity的哪一個生命週期階段實現。
  29. 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關係。
  30. AIDL的全稱是什麼?如何工做?能處理哪些類型的數據?
  31. 請解釋下Android程序運行時權限與文件系統權限的區別。
  32. 系統上安裝了多種瀏覽器,可否指定某瀏覽器訪問指定頁面?
  33. 對多線程的運用和理解,及多線程之間handle的傳值。
  34. 對android虛擬機的理解,包括內存管理機制垃圾回收機制。
  35. Framework工做方式及原理,Activity是如何生成一個view的,機制是什麼。
  36.  android自己的一些限制,好比apk包大小限制,讀取大文件時的時間限。
  37. 如何加載的音樂信息,如何改善其效率。
  38. ListView如何提升其效率?
  39. 啓動應用後,改變系統語言,應用的語言會改變麼?
  40. 啓動一個程序,能夠主界面點擊圖標進入,也能夠從一個程序中跳轉過去,兩者有什麼區別?
  41. Android程序與Java程序的區別?
  42. Android中Task任務棧的分配。
  43. 在Android中,怎麼節省內存的使用,怎麼主動回收內存?
  44. 不一樣工程中的方法是否能夠相互調用?
  45. 在Android中是如何實現判斷區分通話記錄中的電話狀態,去電,來電、未接來電?
  46. dvm的進程和Linux的進程, 應用程序的進程是否爲同一個概念
  47. sim卡的EF 文件有何做用
  48. 如何判斷是否有SD卡?
  49. 嵌入式操做系統內存管理有哪幾種, 各有何特性。
  50. 什麼是嵌入式實時操做系統, Android 操做系統屬於實時操做系統嗎?
  51. 一條最長的短信息約佔多少byte? 
  52. Linux中跨進程通訊的幾種方式 。
  53. 談談對Android NDK的理解。
  54. 談談Android的優勢和不足之處。
  55. Android系統中GC什麼狀況下會出現內存泄露呢?
  56. Android UI中的View如何刷新。
  57. 簡單描述下Android 數字簽名。
  58. 什麼是ANR 如何避免它?
  59. android中的動畫有哪幾類,它們的特色和區別是什麼?
  60. handler機制的原理。
  61. android中線程與線程,進程與進程之間如何通訊。
  62. 說說mvc模式的原理,它在android中的運用。
  63. android中有哪幾種解析xml的類,官方推薦哪一種?以及它們的原理和區別。
  64. DDMS與TraceView的區別? 
  65. res目錄有默認幾項resource。
  66. android的哪一個版本是一次重大的升級?

 

  • 12點的小鬼

    【解3】 startActivity(Intent intent) ;   startActivityForResult (Intent intent, int requestCode) ; onActivityResult (int requestCode, int resultCode, Intent data);  setResult(int resultCode);

    2011-4-1  14:10回覆(0)

  • 12點的小鬼

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

    2011-4-5  16:42回覆(0)

  • 12點的小鬼

    【解26】FrameLayout(框架佈局),LinearLayout (線性佈局),AbsoluteLayout(絕對佈局),RelativeLayout(相對佈局),TableLayout(表格佈局)

    2011-4-5  16:46回覆(0)

  • 12點的小鬼

     介紹下Android的數據存儲方式。           一.SharedPreferences方式           二.文件存儲方式           三.SQLite數據庫方式           四.內容提供器(Content provider)方式           五.網絡存儲方式

    2011-4-5  16:48回覆(0)

  • 12點的小鬼

    【解55】  (一) 查詢數據庫沒有關閉遊標 描述:程序中常常會進行查詢數據庫的操做,可是常常會有使用完畢Cursor後沒有關閉的狀況。若是咱們的查詢結果集比較小,對內存的消耗不容易被發現,只有在常時間大量操做的狀況下才會復現內存問題,這樣就會給之後的測試和問題排查帶來困難和風險。 (二) 構造Adapter時,沒有使用緩存的 convertView (三)Bitmap對象不在使用時調用recycle()釋放內存 (四) 釋放對象的引用

 

【Java核心】
1) What is the purpose of serialization?
爲了傳輸,將java對象串行化之後變成01串方便傳輸或者保存,能夠很容易的反串行變回原來的java對象。其中@tranxx的一個什麼註解可讓java忽略某個屬性不作串行化,好比某個巨大的字符串,有效減少串行化後的數據量。
 
2) What is the difference between JDK and JRE?
JDK是有開發功能的,好比javac什麼的,javap什麼的;JRE就是一個runtime environment,跑java字節碼的
 
3) What is the difference between equals and ==?
==是比較引用,equals是Object類的一個方法,能夠經過重寫equals方法達到比較內容的目的
 
4) When will you use Comparator and Comparable interfaces?
比較大小有的很容易,好比說2>1, "abc">"aba", 這種能夠經過天然特性比較的容易理解,可是若是比較兩個對象的時候怎麼比呢,好比說比較兩我的,是比年齡?身高?仍是體重?
因此能夠經過實現Comparable來實現比較大小的功能,仍是用人來講,就比較年齡,A的年齡比B大,就認爲A>B
這樣的好處有不少,好比說實現了Comparable的之後,就能夠用Collections.sort方法來排序。
問題是並非每次都以年齡比較的,若是下次要比較體重怎麼辦?那麼就要寫一個實現了Comparator的比較器來比較傳入的兩個對象的大小。因此用 Collections.sort方法排序的時候傳入一個List和一個Comparator
 
5) What is the wait/notify mechanism?
wait和notify的機制。。我沒深刻研究過,不過我想應該是經過共享鎖的方法,好比說將某個對象設爲鎖(用那個synchronized關鍵字),某個線程佔用了該鎖之後,其它線程沒法得到該鎖就等着,知道那個佔用線程釋放鎖,喚醒等待線程。
這個瞎掰的,按照對操做系統的的瞭解吹吹。。。
 
6) What is the difference between checked and unchecked exceptions?
我不知道什麼叫checked 和unchecked exception,我只知道有check exception 和runtime exception,前者必須用try catch來處理的,後者不須要,好比數組越界之類和除以0這樣的異常就是runtime exception。
 
7) What is the difference between final, finally and finalize?
這個太普通了,要寫起來也太多了,只說一下finally的時候也能夠沒有catch,可是必須有try
finalize方法在對象被回收時調用,可是被調用的時候不表明必定立刻就被回收,且他只會執行一次,好比說本身手動調用一次之後,等他被回收的時候也不會被執行了。

【Java企業版】
8) What is the difference between web server and app server?
web server: 就是提供一個網站的,好比apache,IIS等,處理一個http 請求,將靜態網頁或者圖片什麼的發回去
app server:能夠執行程序的,好比說tomcat什麼的。
這也是我瞎掰的。。。以爲本身說的不夠清楚。。
 
9) Explain the Struts1/Struts2/MVC application architecture?
這個要寫就太多了,就是模型-視圖-控制三層架構,好比Struts2中,FilterAction對應着Control,Action返回的那些result對應着視圖,strut2支持的視圖層就多了,好比jsp,甚至是pdf等。。。模型就對應着後來的業務邏輯吧
 
10) What is the difference between forward and sendredirect?
sendredirect從新開一個request

【通常問題】
11) How does a 3 tier application differ from a 2 tier one?
三層模型和兩層模型的區別?什麼業務邏輯和展現層分離等等,有效分工,有利於後期維護等等。。。
 
12) How does the version control process works?
版本控制,目前有兩大類吧,CVS,SVN等屬於集中式的,Git屬於分佈式的,目前Git很火啊。
process就是check out > update > modify > check in, 若是發現衝突那麼 merge > check in.
 
13) What is the difference between JAR and WAR files?
jar和war都是zip格式壓縮,war是web項目壓縮的意思,裏面有WEB-INF文件夾,下面有web.xml配置文件

【數據庫】
14) What is a Left outer join?
左外鏈接,就是將左表對應於右表中沒有關聯的數據也列出來,好比
表 A
a b
c d
e f
表 B
b 1
d 2
c 3
A left outer join B的結果爲:
a b 1
c d 2
e f
很久沒有寫SQL語句了,不記得是否是這樣了。。
15) What is the difference between UNION and UNION ALL?
前者去除重複記錄,後者不去除
相關文章
相關標籤/搜索