編輯:關於Android編程
1. XML的解析方式都有哪些? 每一種解析方式的執行流程?
設XML為:abc
Dom SAX Pull
2.abc
根節點 在上面
子節點和文本在下面
3. 設現有3個Activity,A1, A2, A3,如何實現 A1 啟動 A2, A2啟動A3後,由A3進行返回操作,直接可以返回到 A1? 舉出兩種方式?
Inflate
1 A1 – 》 A2-》 A3 A2 finish()
2 A2 不進回退站?(如何) A2 啟動 A3
3.2. 設現有3個Activity, A1, A2, A3,現由A1啟動A2,並且由A2返回復雜數據給A1, A1接收到數據後,啟動A3,並且傳遞相應的數據進行操作,應該如何實現?
startACTIVITYForRessult()
OnActivity Result() ->> A3 Intent Bundle 傳值
4. 設現有應用程序 App1, App2, 其中App2是圖書資源應用,App1是讀者應用,App1要獲取App2的圖書數據,應該采用什麼方式?能否通過App1刪除App2種的圖書數據?
A2 實現ContentProvider , 提供增刪改查,delete()
5. Android GCM的推送原理是什麼?
客戶端後台有消息接受的Service . Google 提供推送的服務器。
客戶單與服務器保持長連接的關系。來接受推送的msg! 同時google的服務器,
提供後台管理接口。給特定的設備發送信息。
------------------------------------------------------------------------------------------------------------------------------------------------
使用GCM服務(Google Cloud Messaging)
簡介:Google推出的雲消息服務,即第二代的C2DM。
優點:Google提供的服務、原生、簡單,無需實現和部署服務端。
缺點:Android版本限制(必須大於2.2版本),該服務在國內不夠穩定、需要用戶綁定Google帳號,受限於Google。
6. 現有應用程序App2,使用數據庫進行數據存儲,新發布版本App1.1那麼數據庫應該如何處理?如何保存已有數據?
SqlLite: onCreateonUpdate() update 用於升級,可以進行數據和表的操作。
在 onUpgrade() 采用調整表結構不修改數據的方式來完成數據的升級?
7. 現需要實現一鬧鈴軟件,其鬧鈴定時功能需要如何實現?
1自定義: 後台啟動 service 驗證當前的時間,從數據庫中獲取鬧鐘的設定時間, 進行時間匹配,
OK 播放一段聲音。
2Android: 系統提供的AlermManager 可以通過相關API的進行操作。
8. FrameLayout與RelativeLayout的區別是什麼?都適應於哪些場景?
FrameLayout 層的概念: 起重工所有的子控件都是層疊的。
默認的情況下都是在左上角。
RelativeLayout 相對布局:
其中的所有子空間默認情況下都是在一層。
相對:控件之間有相對的關系進項控制。
默認的情況下都是在左上角。
適應場景:
FrameLayout:多個控件層疊在一起。例如圖片上面加一個贊踩。
RelativeLayout: 主要用於快速的對其控件的情況:例如: 一般的登陸界面。
RelativeLayout相對布局,就是裡面的控件位置都可以用相對於誰在什麼地方來指定;
Framelayout幀布局
就是先定義的控件會再後定義的控件下面;FrameLayout主要是在多層之間的布局,RelativeLayout則是在同層之間不同位置之間的布局。
9. Fragment的作用是什麼?如何使用?
作用:
界面內容的復用
如何:
當軟件中,多個界面或者一個界面中有多個部分相同是可以采用這個Fragment 封裝。
當前,使用Fragment 提高了代碼的重用性。
http://blog.csdn.net/yangdeli888/article/details/7842029
Fragment 用來描述一些行為或一部分用戶界面在一個Activity中,你可以合並多個fragment在一個單獨的activity中建立多個UI面板,同時重用 fragment在多個activity中.你可以認為fragment作為一個activity中的一節模塊,fragment有自己的生命周期,接收自己的輸入事件,你可以添加或移除從運行中的activity.
一個fragment必須總是嵌入在一個activity中,同時fragment的生命周期受activity而影響。
Fragment存在於Activity的ViewGroup中
onCreate()
當fragment創建時被調用,你應該初始化一些實用的組件,比如在fragment暫停或停止時需要恢復的
onCreateView()
當系統調用fragment在首次繪制用戶界面時,如果畫一個UI在你的fragment你必須返回一個View當然了你可以返回null代表這個fragment沒有UI.
9. HTTP協議中Cookie標准是什麼?有什麼作用?
作用:
Cookie: 是客戶端與服務器之間的會話維持以及 數據的傳遞(保存數據)。
Cookie: 客戶端就收服務器傳遞過來的Http 頭字段 Set-Cookie 來獲取 服務器傳遞的信息。
客戶端發送Http 請求的時候,傳遞自身存儲的 服務器傳遞的Cookie info。
內容的格式:
Name = value Path=/xxx domain=.Baidu.com
Cookies是一種能夠讓網站服務器把少量數據儲存到客戶端的硬盤或內存,或是從客戶端的硬盤讀取數據的一種技術。Cookies是當你浏覽某網站時,由Web服務器置於你硬盤上的一個非常小的文本文件,它可以記錄你的用戶ID、密碼、浏覽過的網頁、停留的時間等信息。當你再次來到該網站時,網站通過讀取Cookies,得知你的相關信息,就可以做出相應的動作,如在頁面顯示歡迎你的標語,或者讓你不用輸入ID、密碼就直接登錄等等。 從本質上講,它可以看作是你的身份證。但Cookies不能作為代碼執行,也不會傳送病毒,且為你所專有,並只能由提供它的服務器來讀取。保存的信息片斷以“名/值”對(name-value pairs)的形式儲存,一個“名/值”對僅僅是一條命名的數據。一個網站只能取得它放在你的電腦中的信息,它無法從其它的Cookies文件中取得信息,也無法得到你的電腦上的其它任何東西。 Cookies中的內容大多數經過了加密處理,因此一般用戶看來只是一些毫無意義的字母數字組合,只有服務器的CGI處理程序才知道它們真正的含義。 由於Cookies是我們浏覽的網站傳輸到用戶計算機硬盤中的文本文件或內存中的數據,因此它在硬盤中存放的位置與使用的操作系統和浏覽器密切相關。在Windows 9X系統計算機中,Cookies文件的存放位置為C:WindowsCookies,在Windows NT/2000/XP的計算機中,Cookies文件的存放位置為C:Documents and Settings用戶名Cookies。 硬盤中的Cookies文件可以被Web浏覽器讀取,它的命令格式為:用戶名@網站地址[數字].txt。如筆者計算機中的一個Cookies文件名為:ch@163[1].txt。要注意的是:硬盤中的Cookies屬於文本文件,不是程序。 特別想說明的是,還有一個和cookie相似的文件,那就是session,它和cookie的作用幾乎是相同的,最大的區別是session是放在服務器端的,而cookie是在客戶端的。所有知道cookie就應該知道session。你可以再網上在搜索一下session的相關內容。
10. 如何處理服務器返回的302, 307, 304 狀態碼?
302 307: 重定向:
302: 臨時性(重定向) 網絡請求的地址發生跳轉。需要獲取Http 頭的Location 字段來進行重新連接。
307: 同上需要進行 Loaction字段的重新連接。
主要是針對 網絡數據 緩存,服務器會為每一個資源定義一個ID標志。
以及上一次修改的時間標志。 客戶端保存緩存是回保存這些字段。 當客戶端發送請求時,
客戶端發送信息。服務端 檢查信息是否改變。服務器返回 304 錯誤。
初始的請求已經接受,客戶應當繼續發送請求的其余部分
服務器將遵從客戶的請求轉換到另外一種協議
一切正常,對GET和POST請求的應答文檔跟在後面
服務器已經創建了文檔,Location頭給出了它的URL。
已經接受請求,但處理尚未完成。
文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝
沒有新文檔,浏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的
沒有新的內容,但浏覽器應該重置它所顯示的內容。用來強制浏覽器清除表單輸入內容
客戶發送了一個帶有Range頭的GET請求,服務器完成了它
客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。
客戶請求的文檔在其他地方,新的URL在Location頭中給出,浏覽器應該自動地訪問新的URL。
類似於301,但新的URL應該被視為臨時性的替代,而不是永久性的。
類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取
客戶端有緩沖的文檔並發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
客戶請求的文檔應該通過Location頭所指明的代理服務器提取
和302(Found)相同。許多浏覽器會錯誤地響應302應答進行重定向,即使原來的請求是 POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼: 當出現303應答時,浏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則浏覽器只能跟隨對GET請求的重定向。
請求出現語法錯誤。
客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,浏覽器據此顯示用戶名字/密碼對話框,然後在填寫合適的Authorization頭後再次發出請求。
資源不可用。
無法找到指定位置的資源
請求方法(GET、POST、HEAD、Delete、PUT、TRACE等)對指定的資源不適用。
指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容
類似於401,表示客戶必須先經過代理服務器的授權。
在服務器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以後重復同一請求。
通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功。
所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在於,返回410表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用。
服務器不能處理請求,除非客戶發送一個Content-Length頭。
請求頭中指定的一些前提條件失敗
目標文檔的大小超過服務器當前願意處理的大小。如果服務器認為自己能夠稍後再處理該請求,則應該提供一個Retry-After頭
URI太長
服務器不能滿足客戶在請求中指定的Range頭
服務器遇到了意料不到的情況,不能完成客戶的請求
服務器不支持實現請求所需要的功能。例如,客戶發出了一個服務器不支持的PUT請求
服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答
服務器由於維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個Retry-After頭
由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答
服務器不支持請求中所指明的HTTP版本
11. 對於ListView中每一個Item包含圖片的情況,如何從網絡進行加載?
1 Adaptert GetView()
2 先判斷緩存中是否存在,沒有的話開啟線程,異步任務,Volley 進行圖片數據的下載。
3 更新UI HandLerMessage AsyncTask() ViewHolder()
對list的圖片單獨開一個隊列進行下載,在activity中回調刷新adapter。adapter從本地取圖片。
12. AsyncTask支持的范型參數代表什麼意思?
AsyncTask<傳進的參數類型,進度類型,返回數據的類型>
1. AsyncTask的三個泛型參數說明(三個參數可以是任何類型)
2. 第一個參數:傳入doInBackground()方法的參數類型
3. 第二個參數:傳入onProgressUpdate()方法的參數類型
4. 第三個參數:傳入onPostExecute()方法的參數類型,也是doInBackground()方法返回的類型
13. AsyncTask 哪些部分運行於主線程?如何通過AsyncTask更新UI信息?能否通過代碼控制AsyncTask的停止?
主線程:
onPostExecute()
onPreExecute()
,
onProgressUpdate(Progress...)
,
子線程:
doInBackground()
___________________________________________________________________________________s
能否通過代碼控制AsyncTask的停止:
final boolean
cancel(boolean mayInterruptIfRunning)
-------------------------------------------------------------------------------------------------------------------------------------------------
AsyncTask的執行分為四個步驟,每一步都對應一個回調方法,開發者需要實現這些方法。
* 1) 繼承AsyncTask
* 2) 實現AsyncTask中定義的下面一個或幾個方法
* onPreExecute(), 該方法將在執行實際的後台操作前被UI
線程調用。可以在該方法中做一些准備工作,如在界面上顯示一個進度條,或者一些控件的實例化,這個方法可以不用實現。
* doInBackground(Params...), 將在onPreExecute
方法執行後馬上執行,該方法運行在後台線程中。這裡將主要負責執行那些很耗時的後台處理工作。可以調用 publishProgress方法來更新實時的任務進度。該方法是抽象方法,子類必須實現。
* onProgressUpdate(Progress...),在publishProgress方法被調用後,UI
線程將調用這個方法從而在界面上展示任務的進展情況,例如通過一個進度條進行展示。
* onPostExecute(Result), 在doInBackground
執行完成後,onPostExecute
方法將被UI
線程調用,後台的計算結果將通過該方法傳遞到UI
線程,並且在界面上展示給用戶.
* onCancelled(),在用戶取消線程操作的時候調用。在主線程中調用onCancelled()的時候調用。
14.Handler, Message 的作用是什麼?舉例使用場景?
主要用於先線程之間通信。子線程使用Handler 發送message 給主線程,進行數據的更新。
子線程完成數據的更新,使用Handler + Message 來更新UI。
Handler的使用主要是android中無法在主線程(即UI線程)中訪問網絡、無法在子線程中訪問UI線程元素。 一般是在子線程中訪問網絡,然後使用Handler發送message通知主線程處理UI更新操作
15. 說明Android支持i18n的原理。
I18n 叫做國際化。軟件在res/vales 以及 其他帶有語言修飾符的文件夾。如: values-zh 這些文件夾中 提供
語言,樣式,尺寸 xml 資源。
Android 手機在啟動軟件的時候或者在顯示layout 界面的時候會根據當前手機設置的語言進行資源的匹配。
進行最佳的匹配。
例如:Android 設置的中文,那麼 android 啟動軟件的時候加載資源就是以 –zh 結尾的、
文件夾,優先加載。 如果沒有,就會加載默認的Values 文件。手機的適配性。
國際化。android 對i18n和L10n提供了非常好的支持。android沒有專門的API來提供國際化,而是通過對不同resource的命名來達到國際化,
同時這種命名方法還可用於對硬件的區分,如不同的新視屏用不同的圖片。
17. Java語言中 final, finally 的區別?
final— 修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
17.2. Hashtable的存儲原理是什麼?假設有 Book類與Person類,並且一一對應,那麼如果需要存儲Key(Book)-Value(Person)的形式,Book類需要做什麼處理?Person需要做什麼處理。
JavaAPI 的理解:
HashTable HashMap 都是采用Hash算法。
針對 key 的對象進行 HashCode()方法的計算。算出一個HashCode 。利用 hashCOde來定位對象的存儲位置。
可以根據位置進行存儲和查找。當需要調用 put get remove 方法的時候,還需要進行 Key 是否相同判斷。 Key 的對象,
必須要重寫 Boolean equals(Object o);
步驟:根據HashCode 進行定位,再判定位的對象和傳遞的參數是否相等?相等的話,才進行操作。
Book 必須重寫 hashCode() equals()兩個方法。
Person 對象添加是不能為空。 HashTable
-------------------------------------------------------------------------------------------------------------------------
哈希表之所以能夠實現根據關鍵字 (典型的例子是一個字符串鍵值) 來獲取記錄, 是因為她在內部建立了記錄存儲位置 - 即內部數組中的索引號和關鍵字的一套對應關系 f, 因而在查找時, 只需根據這個映射關系 f 找到給定鍵值 K 對應的數 f(K), 就可直接從數組中取得目的數據 Hashtable[K] = Hashtable.InternalArray[f(K)], 而不必對數組進行遍歷和比較. 這個對應關系 f 我們稱為哈希函數
18. 工廠模式與單例模式的描述與區別?
單例模式:整個程序運行期間,只能創建一個對象實例。
主要用於內容的共享,共享數據。
工廠模式:根據傳遞的參數 配置。 創建實例。
在工廠模式中,最重要的是滿足面向對象設計中的多態原則,在應用程序中只需要創建一個工廠類的接口,然後調用該接口的生產產品的方法,但具體的實現卻不用應用程序去考慮,他只要知道的是他使用的那個接口的方法一定可用就可以了!
再說說單例模式,也叫單件模式。其實這個模式我覺得是最簡單的,只要滿足兩個基本條件就可以了:一是提供而且只提供一個全局的訪問節點,二是保證不能產生多於一個的實例,即要進行實例控制,也就是對構造函數要進行控制。
單例模式是建立在簡單工廠模式的基礎之上的,而且他們都需要工廠方法有特殊的邏輯,以便實現循環使用產品的實例。
19. 適配器模式與監聽者模式的區別?
適配器: 數據與 UI界面的橋梁。
可以利用適配器進行數據到Ui的轉換。
監聽者模式:UI 控件的事件處理過程中為外部代碼提供一種可以監聽事件發生的一種設計模式。一直在監聽。例如數據抓包。
(1)類適配器:
當客戶在接口中定義了他期望的行為時,我們就可以應用適配器模式,提供一個實現該接口的類,並且擴展已有的類,通過創建子類來實現適配。
下面是類適配器的UML圖:
(2)對象適配器:
對象適配器”通過組合除了滿足“用戶期待接口”還降低了代碼間的不良耦合。在工作中推薦使用“對象適配”。下面是對象適配器的UML圖:
(3)缺省適配器模式:
缺省適配器模式是一種特殊的適配器模式,但這個適配器是由一個抽象類實現的,並且在抽象類中要實現目標接口中所規定的所有方法,但很多方法的實現都是“平庸”的實現,也就是說,這些方法都是空方法。而具體的子類都要繼承此抽象類。
監聽者模式,即觀察者模式。有時被稱作發布/訂閱模式,觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。
20. Java中的序列化方式是什麼?實現類 Book [title, author, price] 的多記錄序列化?(說明兩種方式,要求全部采用二進制格式存儲為文件)。
Book 類實現:必須實現java.io.Serializable 然後采用ObjectOutputStream進行數據序列化操作,保存存數據。
DataOutputStream 存數據。 自定義數據結構即可。
在序列化一個對象的時候,這個對象必須實現java.io.Serializable 接口, Serializable 接口中不含任何方法,這個可以理解為聲明該對象是可以序列化的方法吧。當我們在序列化一個對象時,有些屬性我們不想序列化(可以減少數據量),那麼我們可以聲明該屬性為瞬間態(用transient 關鍵字聲明)。另外,靜態字段也是不會被序列化的。
一,shiro授權 授權流程:跟用戶的認證流程類似,shrio在用戶授權的時候,最後還是去Realm獲取信息。 shiro的三種授權方式:
一般來說,Android自身就包含了常用於嵌入式系統的SQLite,這樣就免去了開發者自己移植安裝的功夫。SQLite 支持多數SQL92標准,很多常用的SQL命令都能在
由於gif圖太大的原因,我將圖放在了github,如果博客中顯示不出來圖,傳送門 由於我是事先寫在md上的,導致代碼的可讀性差,大家將就著看吧。 1. 前言 在
熟悉了基礎動畫的實現後,便可以試著去實現常見APP中出現過的那些精美的動畫。今天我主要給大家引入一個APP的ListView的動畫效果: 當展示ListView時,Lis