常見安卓面試題2018(能夠幫助到你很欣慰)


1.怎么實現(xiàn)通知欄到聊天界面的跳轉(zhuǎn) 3
2.聊天界面左右分隔怎么實現(xiàn),怎么實現(xiàn)優(yōu)化使其不出現(xiàn)錯位 3
3.視頻,音頻的上傳 3
4.http協(xié)議和soap協(xié)議的區(qū)別 3
5.http和https的區(qū)別 4
6.listview的逐行顯示 5
7.edittext中文字的下劃線效果 5
8.activity以及service的生命周期 5
9.安卓系統(tǒng)的理解,優(yōu)缺點 5
10.sim卡EF文件是什么 6
11.四大組件哪些能動態(tài)注冊 6
12.安卓文件存儲方式 6
13.intent的功能,如何定義顯示intent,隱式intent? 6
14.內(nèi)存泄露遇見過哪些問題,解決辦法,回收的算法 7
15.接口和抽象類的區(qū)別? 7
16.string和stringbuffer和stringbuilder區(qū)別? 7
17.html5? 7
18.自定義一個不帶系統(tǒng)邊框的Dialog? 7
19.定義一個跑馬燈效果的textview? 7
20.圖片的異步加載的方法? 8

  1. 瀑布流實現(xiàn)方式? 8
  2. 把一張?zhí)貏e大的圖片,分成幾十張小的圖片,在最短的時間內(nèi)給處理? 8
  3. Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個概念? 8
  4. 嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性 ? 9
  5. 什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎? 9
    26.一條最長的短信息約占多少byte? 9
  6. android中的動畫有哪幾類,它們的特點和區(qū)別是什么? 9
    28.handler機(jī)制的原理,looper通過什么方法開始的? 9
    29.說說mvc模式的原理,在android中的運(yùn)用? 10
    30.如何讓Activity變成一個窗口? 10
    31.后臺的Activity被系統(tǒng)回收怎么辦? 10
    32.ListView優(yōu)化? 10
    33.IPC及其原理? 10
    34.View如何刷新? 11
    35.DDMS與TraceView的區(qū)別? 11
    36.在Java中如何引入C語言? 11
    37.鏈表和數(shù)組的區(qū)別? 11
  7. Hash表是什么?有什么用? 12
  8. 什么是鎖?有什么用?有哪些鎖?為什么需要鎖? 12
    41.MVC作用? 12
    42.px,dp,sp區(qū)別? 13
    43.android 系統(tǒng)架構(gòu),按順序? 13
    44.android有幾種布局,有什么特點? 13
    45.常用的設(shè)計模式? 14
    46.常用的排序法? 14
    47.寫一個快速排序法? 14
    48.synchronized 是什么?有什么用? 15
    49.線程的狀態(tài)? 16
    50.onSaveInstanceState() 和 onRestoreInstanceState(); 16
    51.了解版本控制的工具嗎? 16
    52.github git都是啥? 16
    53.git svn 區(qū)別? 16
    54.舉個簡單的socket編程 16
    55.怎樣用數(shù)據(jù)庫語句實現(xiàn)分頁 18
    56.怎樣實現(xiàn)自定義View 18
    57.json的上限是多少(大小) 18
    58.afinal框架和xUtils框架的區(qū)別 18
    59.listView上拉加載監(jiān)聽 18
    60.JSON/XML的區(qū)別 19
    61.JNI怎樣用 19
    62.廣播的兩種注冊方式 19
    63.android中Serializable和Parcelable的聯(lián)系? 19
    64.一個應(yīng)用中有多少個Context? 20
    65.AsyncTask與使用線程處理耗時操作的優(yōu)劣是? 20
    66.談?wù)勀銓ndroid事件分發(fā)機(jī)制的理解? 20
    67.談?wù)勀銓YGOTE進(jìn)程的理解和認(rèn)識? 20
    68.第三方注冊及登陸怎么實現(xiàn)的? 21
    69.Fragment怎么實現(xiàn)的? 22
    70.緩存怎么實現(xiàn)的? 22
    71.解析XML PULL解析? 22
    72.分享用的什么平臺? 22
    73.橫豎屏切換 22
  9. 高并發(fā)業(yè)務(wù)請求處理方法 23
    75.Android中如何設(shè)置兩個應(yīng)用程序為同一個進(jìn)程? 23
    76.手機(jī)適配怎么做? 24
  10. 手機(jī)測試包括哪些? 24
    78.Http中g(shù)et和post的區(qū)別? 25
    79.側(cè)滑怎么實現(xiàn)的? 25
    80.UDP和TCP的區(qū)別? 25
    81.雙緩存怎么實現(xiàn)的? 25
    82.垃圾收集算法的核心思想 26
    83.觸發(fā)主GC(Garbage Collector)的條件 26
    84.減少GC開銷的措施 26
    85.gc與finalize方法 26
    86.ViewPager如何實現(xiàn)? 26
    87.請說出使用equal和==比較對象時的區(qū)別? 26
    88.什么是Java序列化和反序列話,如何實現(xiàn)Java序列化? 27
    89.請解釋下android程序運(yùn)行時權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別? 27
    90.講一講overload和override的區(qū)別,overloaded的方法是否可以改變返回值的類型? 27
    91.如何使用socket實現(xiàn)TCP點對點通信? 27
    92.請簡述service可能被kill的場景,kill之后如何自啟? 27
    93.請使用遞歸方式來遍歷盤下的所有文件,并計算出所有圖片文件的數(shù)量? 27
    94.現(xiàn)有兩個單向鏈表,我想知道這兩個鏈表的相交情況税手。(可以不寫實現(xiàn),但思路必須寫清)? 28
    95.使用javac/c++寫一段程序,找出數(shù)組中出現(xiàn)次數(shù)最多數(shù)字,并輸出出現(xiàn)次數(shù),請標(biāo)明算法的時間復(fù)雜值? 29
    96.什么是OAuth,Oauth,的角色,Qauth驗證流程? 30
    97.使用javac/c++寫一段程序,找出數(shù)組中第K大小的數(shù),輸出數(shù)所在的位置,請標(biāo)明算法的時間復(fù)雜度? 30
    98.進(jìn)程通信和線程同步的方法? 31
    99.面向?qū)ο蟮奶卣饔心男┓矫? 31
    100.Context里面主要包括什么具體的東西? 32
    101.簡述條形碼的掃描設(shè)計思路? 32
  11. ListView異步加載圖片實現(xiàn)思路(優(yōu)化篇) 32
  12. android下大文件分割上傳 39
  13. android listview 異步加載圖片并防止錯位 42

1.怎么實現(xiàn)通知欄到聊天界面的跳轉(zhuǎn)
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); //這樣可以清掉所有歷史activity
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
new一個新的Intent然后用上述方法即可實現(xiàn)跳轉(zhuǎn)。

2.聊天界面左右分隔怎么實現(xiàn),怎么實現(xiàn)優(yōu)化使其不出現(xiàn)錯位
我們可以在adapter里對消息的發(fā)放者進(jìn)行判斷,如果不是本人發(fā)送的那就設(shè)置靠左,否則設(shè)置靠右,具體實現(xiàn)如下:
封裝消息實體類時,將消息的發(fā)送者類型作為Boolean類型存入。在適配數(shù)據(jù)時,準(zhǔn)備兩種item_layout布局文件,一種用于別人的信息展示,另一種用于自己的信息吉殃。getView方法加載布局文件之前對消息的發(fā)放者進(jìn)行判斷,如果是本人發(fā)送,則加載靠右的布局,否則則使用靠左的布局文件,從而實現(xiàn)動態(tài)的位置改變

3.視頻,音頻的上傳
Android的視頻音頻上傳主要就是通過java的socket來進(jìn)行與服務(wù)器的交流,socket通信可以指定一個服務(wù)器的地址,然后可以通過io流實現(xiàn)視頻音頻的上傳仓犬。

4.http協(xié)議和soap協(xié)議的區(qū)別
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議修噪∏K兀客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務(wù)器,Web服務(wù)器發(fā)送被請求的信息給客戶端劫乱。

SOAP(Simple Object Access Protocal,簡單對象訪問協(xié)議) 技術(shù)有助于實現(xiàn)大量異構(gòu)程序和平臺之間的互操作性,根據(jù)我有限的了解,SOAP是把成熟的基于HTTP的WEB技術(shù)與XML的靈活性和可擴(kuò)展性組合在了一起膊畴。比如我們.NET中的WEB服務(wù),就是基于SOAP掘猿。

簡單對象訪問協(xié)議(SOAP)是W3C組織的一個Note, 它描述了一種在分散的或分布式的環(huán)境中如何交換信息的輕量級協(xié)議。SOAP是一個基于XML的協(xié)議,它包括三個部分:SOAP封裝(Envelop),封裝定義了一個描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(Encoding Rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實例;SOAP RPC表示(RPC Representation),表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;SOAP可以和多種傳輸協(xié)議綁定(Binding),使用底層協(xié)議交換信息唇跨。在這個文檔中,目前只定義了SOAP如何和HTTP以及HTTP擴(kuò)展進(jìn)行綁定的框架稠通。

SOAP是個通信協(xié)議, SOAP在HTTP協(xié)議的基礎(chǔ)上,把編寫成XML的REQUEST參數(shù), 放在HTTP BODY上提交個WEB SERVICE服務(wù)器(SERVLET,ASP什么的) 處理完成后,結(jié)果也寫成XML作為RESPONSE送回用戶端, 為了使用戶端和WEB SERVICE可以相互對應(yīng),可以使用WSDL作為這種通信方式的描述文件,利用WSDL工具可以自動生成WS和用戶端的框架文件,SOAP具備把復(fù)雜對象序列化捆綁到XML里去的能力衬衬。

SOAP的前身是RPC, 就是遠(yuǎn)程呼叫處理的協(xié)議,這個協(xié)議安全性不是很好,多數(shù)防火墻都會阻擋RPC的通信包,而SOAP則使用HTTP協(xié)議作為基本的協(xié)議,使用端口80使得SOAP可以透過防火墻,完成RPC的功能。

SOAP協(xié)議和HTTP協(xié)議一樣,都是底層的通信協(xié)議,只是請求包的格式不同而已,SOAP包是XML格式的,現(xiàn)在我們編寫WEB SERVICE不需要深入理解SOAP也沒關(guān)系改橘。如果SERVICE和CLIENT在同樣的環(huán)境下使用SOAP,由于一般情況下都有自動生成SOAP程序框架的工具,因此不知道細(xì)節(jié)也沒關(guān)系. 可是, 如果CLIENT和SERVICE的環(huán)境不同,比如說JAVA的Client和.NET的SERVICE進(jìn)行通信,或者是VB CLIENT和TOMCAT下的JAVA SERVICE通信,還是要知道一點細(xì)節(jié)為好. 特別是, WSDL或者UDDI都不是標(biāo)準(zhǔn),如果不讓用就只好手工配制SOAP MESSAGE啦滋尉。

5.http和https的區(qū)別
在URL前加https://前綴表明是用SSL加密的。你的電腦與服務(wù)器之間收發(fā)的信息傳輸將更加安全飞主。 Web服務(wù)器啟用SSL需要獲得一個服務(wù)器證書并將該證書與要使用SSL的服務(wù)器綁定狮惜。 http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸碌识、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議
要比http協(xié)議安全

HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協(xié)議
它是一個安全通信通道,它基于HTTP開發(fā),用于在客戶計算機(jī)和服務(wù)器之間交換信息碾篡。它使用安全套接字層(SSL)進(jìn)行信息交換,簡單來說它是HTTP的安全版。
它是由Netscape開發(fā)并內(nèi)置于其瀏覽器中,用于對數(shù)據(jù)進(jìn)行壓縮和解壓操作,并返回網(wǎng)絡(luò)上傳送回的結(jié)果筏餐。HTTPS實際上應(yīng)用了Netscape的安全全套接字層(SSL)作為HTTP應(yīng)用層的子層开泽。(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進(jìn)行通信。)SSL使用40 位關(guān)鍵字作為RC4流加密算法,這對于商業(yè)信息的加密是合適的魁瞪。HTTPS和SSL支持使用X.509數(shù)字認(rèn)證,如果需要的話用戶可以確認(rèn)發(fā)送者是誰眼姐。
HTTPS和HTTP的區(qū)別:
https協(xié)議需要到ca申請證書,一般免費(fèi)證書很少,需要交費(fèi)。
http是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協(xié)議
http和https使用的是完全不同的連接方式用的端口也不一樣,前者是80,后者是443佩番。
http的連接很簡單,是無狀態(tài)的
HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸众旗、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議 要比http協(xié)議安全
HTTPS解決的問題:
1 . 信任主機(jī)的問題. 采用https 的server 必須從CA 申請一個用于證明服務(wù)器用途類型的證書. 改證書只有用于對應(yīng)的server 的時候,客戶度才信任次主機(jī). 所以目前所有的銀行系統(tǒng)網(wǎng)站,關(guān)鍵部分應(yīng)用都是https 的. 客戶通過信任該證書,從而信任了該主機(jī). 其實這樣做效率很低,但是銀行更側(cè)重安全. 這一點對我們沒有任何意義,我們的server ,采用的證書不管自己issue 還是從公眾的地方issue, 客戶端都是自己人,所以我們也就肯定信任該server.
2 . 通訊過程中的數(shù)據(jù)的泄密和被竄改

  1. 一般意義上的https, 就是 server 有一個證書.
    a) 主要目的是保證server 就是他聲稱的server. 這個跟第一點一樣.
    b) 服務(wù)端和客戶端之間的所有通訊,都是加密的.
    i. 具體講,是客戶端產(chǎn)生一個對稱的密鑰,通過server 的證書來交換密鑰. 一般意義上的握手過程.
    ii. 加下來所有的信息往來就都是加密的. 第三方即使截獲,也沒有任何意義.因為他沒有密鑰. 當(dāng)然竄改也就沒有什么意義了.
  2. 少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.
    a) 這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼, 還有一個CA 認(rèn)證過的身份. 應(yīng)為個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認(rèn)自己的身份.
    b) 目前少數(shù)個人銀行的專業(yè)版是這種做法,具體證書可能是拿U盤作為一個備份的載體.
    HTTPS 一定是繁瑣的.
    a) 本來簡單的http協(xié)議,一個get一個response. 由于https 要還密鑰和確認(rèn)加密算法的需要.單握手就需要6/7 個往返.
    i. 任何應(yīng)用中,過多的round trip 肯定影響性能.
    b) 接下來才是具體的http協(xié)議,每一次響應(yīng)或者請求, 都要求客戶端和服務(wù)端對會話的內(nèi)容做加密/解密.
    i. 盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL 芯片. 如果CPU 信能比較低的話,肯定會降低性能,從而不能serve 更多的請求.
    ii. 加密后數(shù)據(jù)量的影響. 所以,才會出現(xiàn)那么多的安全認(rèn)證提示

6.listview的逐行顯示
可以將每一條數(shù)據(jù)先加載到list集合中,然后通過適配器將每一條數(shù)據(jù)加載到listview中實現(xiàn)listview對數(shù)據(jù)的逐行顯示。

7.edittext中文字的下劃線效果
自定義一個·EditText的派生類,LineEditText,在LineEditText類的OnDraw函數(shù)中實現(xiàn)畫一條下劃線的功能

8.activity以及service的生命周期
activity
onCreate(Bundle savedInstanceState) 第一次創(chuàng)建時調(diào)用
onStart() 被用戶可見時調(diào)用
onRestart() 當(dāng)Activity處于stop狀態(tài)又被重新啟動時調(diào)用
onResume() 當(dāng)獲得焦點即可與用戶交互時調(diào)用
onPause() 當(dāng)失去焦點時調(diào)用
onStop() 當(dāng)不可見時調(diào)用
onDestroy() 當(dāng)銷毀時調(diào)用

service
startService:onCreate()- >onStartCommand()->startService()->onDestroy()
BindService:onCreate()->onBind()->onUnbind()->onDestroy()

9.安卓系統(tǒng)的理解,優(yōu)缺點
Android一詞的本義指“機(jī)器人”,同時也是Google于2007年11月5日 宣布的基于Linux平臺的開源手機(jī)操作系統(tǒng)的名稱,該平臺由操作系統(tǒng)趟畏、中間件
贡歧、用戶界面和應(yīng)用軟件組成。

版本:每個版本代表的甜點的尺寸越變越大,然后按照26個字母數(shù)序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松餅(Android 2.0/2.1),凍酸奶(Android 2.2),姜餅(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2)赋秀。

Android分為四個層,從高層到低層分別是應(yīng)用程序?qū)永洹?yīng)用程序框架層、系統(tǒng)運(yùn)行庫層和Linux內(nèi)核層猎莲。

Android開發(fā)四大組件分別是:活動(Activity): 用于表現(xiàn)功能绍弟。服務(wù)(Service): 后臺運(yùn)行服務(wù),不提供界面呈現(xiàn)。廣播接收器(BroadcastReceiver):用于接收廣播著洼。內(nèi)容提供商(Content Provider): 支持在多個應(yīng)用中存儲和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫樟遣。
優(yōu)點:開放性,掙脫束縛,豐富硬件,Google應(yīng)用
缺點:版本過多,升級過快
用戶體驗不一致
10.sim卡EF文件是什么
SIM卡里的所有文件按樹來組織:
1>主文件MF(Master File)——每一塊SIM卡只有一個唯一的主文件, 其他所有文件都是它的子孫, 主文件只有文件頭,里面存放著整個SIM卡的控制和管理信息
2>專用文件DF(Dedicated File)——也是只有一個文件頭, 里面存放著整個目錄的管理控制信息, 專用文件相當(dāng)于一個目錄的根.
3>基本文件EF(Elementary File)——既有文件頭,也有文件體, 文件頭存放該文件的位置和控制信息, 文件體存放真正的數(shù)據(jù), 整個SIM卡中只有基本文件有文件體, 也只有基本文件才用來存放數(shù)據(jù).

11.四大組件哪些能動態(tài)注冊
廣播

12.安卓文件存儲方式
文件的操作模式:
Context.MODE_PRIVATE 為默認(rèn)的操作模式,代表該文件私有,只能被應(yīng)用本身使用,覆蓋源文件
Context.APPEND 為追加模式,私有的。存在就往文件追加內(nèi)容
Context.MODE_WORLD_READABLE:表示當(dāng)前文件可以被其他應(yīng)用讀取
Context.MODE_WORLD_WRITEABLE:表示當(dāng)前文件可以被其他應(yīng)用寫入
如果希望文件被其他應(yīng)用讀和寫,可以傳入:
openFileOutput(“zhgang.txt”,Context.MODE_WORLD_READABLE+
Context.MODE_WORLD_WRITEABLE);
android有一套自己的安全模型,當(dāng)應(yīng)用程序(.apk)在安裝時系統(tǒng)就會分配給他一個userid,當(dāng)該應(yīng)用要去訪問其他資源比如文件的時候
就需要userid匹配身笤。默認(rèn)情況下,任何應(yīng)用創(chuàng)建文件,sharedprefernces,數(shù)據(jù)庫都應(yīng)該是私有的(位于/data/data//files),
其他程序無法訪問,除非在創(chuàng)建時指定了Context.MODE_WORLD_READABLE,Context.MODE_WORLD_WRITEABLE,只有這樣其他程序才能正確訪問

13.intent的功能,如何定義顯示intent,隱式intent?
在一個Android應(yīng)用中,主要是由一些組件組成,(Activity,Service,ContentProvider,etc.)在這些組件之間的通訊中,由Intent協(xié)助完成豹悬。
Intent傳遞過程中,要找到目標(biāo)消費(fèi)者(另一個Activity,IntentReceiver或Service),也就是Intent的響應(yīng)者,有兩種方法來匹配:
顯示intent:代碼簡潔明了,執(zhí)行了函數(shù),就會馬上跳轉(zhuǎn)到指定的Activity中( Intent i = new Intent(Test.this, TestB.class);
this.startActivity(i);)。
隱式intent:隱式匹配,首先要匹配Intent的幾項值:Action(要執(zhí)行的動作), Category(要執(zhí)行動作的目標(biāo)所具有的特質(zhì)或行為歸類), Data/extras(即執(zhí)行動作要操作的數(shù)據(jù)和傳遞到目的的附加信息),type(要執(zhí)行的目標(biāo)Activity所能處理的MIME數(shù)據(jù)類型)Component
如果填寫了Componet就是上例中的Test.class)這就形成了顯示匹配液荸。

14.內(nèi)存泄露遇見過哪些問題,解決辦法,回收的算法
問題:運(yùn)行兩次后的輸出結(jié)果,程序退出了,后臺仍然有兩個線程在跑,無法被釋放,如果是大程序,就會導(dǎo)致:一瞻佛、耗電;二、內(nèi)存泄露娇钱。
解決方法:
在程序銷毀的時候,要通過Handler的removeCallbacks(Runnable r)方法來手動釋放掉該線程,當(dāng)然要把Runnable單獨提出來寫伤柄。使用完后,程序必須負(fù)責(zé)相應(yīng)的調(diào)用free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了绊困。??

回收算法:tracing算法(Tracing Collector),compacting算法(Compacting Collector),copying算法(Coping Collector),generation算法(Generational Collector),adaptive算法(Adaptive Collector)

15.接口和抽象類的區(qū)別?
abstract可以修飾抽象方法,而一個類只要有一個抽象方法,就必須用abstract定義該類,即抽象類。
用interface修飾的類,里面的方法都是抽象方法,因此在定義接口的時候,可以直接不加那些修飾,系統(tǒng)會默認(rèn)的添上去适刀。接口里面的字段都是公有常量,即public static final修飾的字段秤朗。

16.string和stringbuffer和stringbuilder區(qū)別?
STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法蔗彤。
stringbuilder類被設(shè)計用作 StringBuffer 的一個簡易替換,用在字符串緩沖區(qū)被單個線程使用的時候(這種情況很普遍)。如果可能,建議優(yōu)先采用該類,因為在大多數(shù)實現(xiàn)中,它比 StringBuffer 要快疯兼。兩者的方法基本相同然遏。

17.html5?
HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 標(biāo)準(zhǔn)的 HTML 1標(biāo)準(zhǔn)版本;現(xiàn)在仍處于發(fā)展階段,但大部分瀏覽器已經(jīng)支持某些 HTML5 技術(shù)。HTML 5有兩大特點:首先,強(qiáng)化了 Web 網(wǎng)頁的表現(xiàn)性能吧彪。其次,追加了本地數(shù)據(jù)庫等 Web 應(yīng)用的功能待侵。廣義論及HTML5時,實際指的是包括HTML、CSS和JavaScript在內(nèi)的一套技術(shù)組合姨裸。它希望能夠減少瀏覽器對于需要插件的豐富性網(wǎng)絡(luò)應(yīng)用服務(wù)(plug-in-based rich internet application,RIA),如Adobe Flash秧倾、Microsoft Silverlight,與Oracle JavaFX的需求,并且提供更多能有效增強(qiáng)網(wǎng)絡(luò)應(yīng)用的標(biāo)準(zhǔn)集。
是一種標(biāo)記語言傀缩。

18.自定義一個不帶系統(tǒng)邊框的Dialog?
首先定義樣式文件style.xml,邊框設(shè)計windowframe屬性為@null,將背景設(shè)置為自己想要的背景,將自定義dialog繼承Dialog,將布局文件載入,創(chuàng)建dialog,并將自己設(shè)置的樣式文件加載進(jìn)去,最終實現(xiàn)自定義的Dialog.

19.定義一個跑馬燈效果的textview?
顯示跑馬燈效果的前提條件就是你的文本內(nèi)容要比顯示文本的外部組件長,即外部組件無法完整的顯示那先。
內(nèi)部的文本內(nèi)容。
1赡艰、layout_width=””設(shè)置為成比文本內(nèi)容短的固定值,最好不要寫成wrap_content或者fill_parent售淡。
2,android:singleLine=”true” 表示使用單行文字
android:ellipsize=”marquee”
設(shè)置了文字過長時如何切斷文字,可以有none,start,middle, end, 如果使用走馬燈效果則設(shè)為marquee。
android:focusableInTouchMode=”true”
android:focusable=”true”
android:marqueeRepeatLimit=”marquee_forever”
Android的缺省行為是在控件獲得 Focus時才會顯示走馬燈效果慷垮。

20.圖片的異步加載的方法?
1.利用軟引用來緩存圖片Bitmap,用圖片的URL作為緩存查找的Key;
2.設(shè)兩級緩存,一級是SoftReference,二級是本地SD卡;
3.如果兩級緩存都沒取到圖片,則從服務(wù)器獲取,并加入緩存;
4.加載完后通過回調(diào)接口通知UI更新;

21.瀑布流實現(xiàn)方式?
1)自定義scrollView,動態(tài)代碼添加LinearLayout及ImageView
a.自定義scrollView,并且使用監(jiān)聽器模式,對其滾動到最頂部揖闸、及最底部進(jìn)行監(jiān)聽操作。
b.在Activity里對scrollView的橫向的LinearLayout動態(tài)添加列數(shù),每一列是一個豎向的linearLayout.
c.根據(jù)列數(shù)以及l(fā)ist.size()對每一列的linearLayout添加ImageView.
d.根據(jù)監(jiān)聽器對其滾動到頂部(不做操作)料身、滾到最底部(加載更多數(shù)據(jù))汤纸、正在滾動進(jìn)行操作(滾動超過兩屏,回收兩屏之前圖片回收及回滾到之前屏幕圖片重載)。

22.把一張?zhí)貏e大的圖片,分成幾十張小的圖片,在最短的時間內(nèi)給處理?
http://www.linuxidc.com/Linux/2012-11/73939p2.htm
方法1:如果你將return-data設(shè)置為“true”,你將會獲得一個與內(nèi)部數(shù)據(jù)關(guān)聯(lián)的Action,并且bitmap以此方式返回:(Bitmap)extras.getParcelable(“data”)芹血。注意:如果你最終要獲取的圖片非常大,那么此方法會給你帶來麻煩,所以你要控制outputX和outputY保持在較小的尺寸贮泞。鑒于此原因,在我的代碼中沒有使用此方法((Bitmap)extras.getParcelable(“data”))。
方法2: 如果你將return-data設(shè)置為“false”,那么在onActivityResult的Intent數(shù)據(jù)中你將不會接收到任何Bitmap,相反,你需要將MediaStore.EXTRA_OUTPUT關(guān)聯(lián)到一個Uri,此Uri是用來存放Bitmap的幔烛。但是還有一些條件,首先你需要有一個短暫的與此Uri相關(guān)聯(lián)的文件地址,當(dāng)然這不是個大問題(除非是那些沒有sdcard的設(shè)備)隙畜。
23.Android dvm的進(jìn)程和Linux的進(jìn)程, 應(yīng)用程序的進(jìn)程是否為同一個概念?
DVM指dalivk的虛擬機(jī)。每一個Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個獨立的Dalvik虛擬機(jī)實例说贝。而每一個DVM進(jìn)程都是在Linux系統(tǒng)中的一個進(jìn)程,所以可以認(rèn)為是同一個概念议惰。
Dalvik和Java運(yùn)行環(huán)境的區(qū)別 [
1:Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
2:Dalvik負(fù)責(zé)進(jìn)程隔離和線程管理,每一個Android應(yīng)用在底層都會對應(yīng)一個獨立的Dalvik虛擬機(jī)實例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行乡恕。
3:不同于Java虛擬機(jī)運(yùn)行java字節(jié)碼,Dalvik虛擬機(jī)運(yùn)行的是其專有的文件格式Dex 4:dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度言询。
5:odex是為了在運(yùn)行過程中進(jìn)一步提高性能,對dex文件的進(jìn)一步優(yōu)化俯萎。
6:所有的Android應(yīng)用的線程都對應(yīng)一個Linux線程,虛擬機(jī)因而可以更多的依賴操作系統(tǒng)的線程調(diào)度和管理機(jī)制
7:有一個特殊的虛擬機(jī)進(jìn)程Zygote,他是虛擬機(jī)實例的孵化器。它在系統(tǒng)啟動的時候就會產(chǎn)生,它會完成虛擬機(jī)的初始化,庫的加載,預(yù)制類庫和初始化的操作运杭。如果系統(tǒng)需要一個新的虛擬機(jī)實例,它會迅速復(fù)制自身,以最快的數(shù)據(jù)提供給系統(tǒng)夫啊。對于一些只讀的系統(tǒng)庫,所有虛擬機(jī)實例都和Zygote共享一塊內(nèi)存區(qū)域。
24.嵌入式操作系統(tǒng)內(nèi)存管理有哪幾種,各有何特性 ?
1辆憔、虛擬內(nèi)存管理機(jī)制: 有一些嵌入式處理器提供了MMU,在MMU具備內(nèi)存地址映射和尋址功能,它使操作系統(tǒng)的內(nèi)存管理更加方便撇眯。如果存在MMU ,操作系統(tǒng)會使用它完成從虛擬地址到物理地址的轉(zhuǎn)換, 所有的應(yīng)用程序只需要使用虛擬地址尋址數(shù)據(jù)。 這種使用虛擬地址尋址整個系統(tǒng)的主存和輔存的方式在現(xiàn)代操作系統(tǒng)中被稱為虛擬內(nèi)存虱咧。MMU 便是實現(xiàn)虛擬內(nèi)存的必要條件熊榛。 虛擬內(nèi)存的管理方法使系統(tǒng)既可以運(yùn)行體積比物理內(nèi)存還要大的應(yīng)用程序,也可以實現(xiàn)“按需調(diào)頁”策略,既滿足了程序的運(yùn)行速度,又節(jié)約了物理內(nèi)存空間。 在L inux系統(tǒng)中,虛擬內(nèi)存機(jī)制的實現(xiàn)實現(xiàn)為我們提供了一個典型的例子:在不同的體系結(jié)構(gòu)下, 使用了三級或者兩級頁式管理,利用MMU 完成從虛擬地址到物理地址之間的轉(zhuǎn)換腕巡⌒梗基于虛擬內(nèi)存管理的內(nèi)存最大好處是:由于不同進(jìn)程有自己單獨的進(jìn)程空間,十分有效的提高了系統(tǒng)可靠性和安全性。 2绘沉、非虛擬內(nèi)存管理機(jī)制: 在實時性要求比較高的情況下,很多嵌入式系統(tǒng)并不需要虛擬內(nèi)存機(jī)制:因為虛擬內(nèi)存機(jī)制會導(dǎo)致不確定性的 I/O阻塞時間, 使得程序運(yùn)行時間不可預(yù)期,這是實時嵌入式系統(tǒng)的致命缺陷;另外,從嵌入式處理器的成本考慮,大多采用不裝配MMU 的嵌入式微處理器煎楣。所以大多嵌入式系統(tǒng)采用的是實存儲器管理策略。因而對于內(nèi)存的訪問是直接的,它對地址的訪問不需要經(jīng)過MMU,而是直接送到地址線上輸出,所有程序中訪問的地址都是實際的物理地址;而且,大多數(shù)嵌入式操作系統(tǒng)對內(nèi)存空間沒有保護(hù),各個進(jìn)程實際上共享一個運(yùn)行空間车伞。一個進(jìn)程在執(zhí)行前,系統(tǒng)必須為它分配足夠的連續(xù)地址空間,然后全部載入主存儲器的連續(xù)空間择懂。

25.什么是嵌入式實時操作系統(tǒng), Android 操作系統(tǒng)屬于實時操作系統(tǒng)嗎?
嵌入式實時操作系統(tǒng)是指當(dāng)外界事件或數(shù)據(jù)產(chǎn)生時,能夠接受并以足夠快的速度予以處理,其處理的結(jié)果又能在規(guī)定的時間之內(nèi)來控制生產(chǎn)過程或?qū)μ幚硐到y(tǒng)作出快速響應(yīng),并控制所有實時任務(wù)協(xié)調(diào)一致運(yùn)行的嵌入式操作系統(tǒng)。
嵌入式操作系統(tǒng)主要用于工業(yè)控制另玖、軍事設(shè)備休蟹、航空航天等領(lǐng)域?qū)ο到y(tǒng)的響應(yīng)時間有苛刻的要求,這就需要使用實時系統(tǒng)。又可分為軟實時和硬實時兩種,而 android 是基于 linux 內(nèi)核的,因此屬于軟實時日矫。
26.一條最長的短信息約占多少byte?
一條最長的短信息約占140byte

27.android中的動畫有哪幾類,它們的特點和區(qū)別是什么?
答:Android中動畫可以分為兩大類:幀動畫赂弓、補(bǔ)間動畫
1)補(bǔ)間動畫:(你定義一個開始和結(jié)束,中間的部分由程序運(yùn)算得到。就是對場景里的對象不斷的進(jìn)行圖像變化來產(chǎn)生動畫效果(旋轉(zhuǎn)哪轿、平移盈魁、放縮和漸變))AlphaAnimation(漸變型動畫)、scaleAnimation(縮放型動畫)窃诉、 TranslateAnimation(平移型動畫)杨耙、 RotateAnimation(旋轉(zhuǎn)型動畫)、
2)逐幀動畫:Frame(把一連串的圖片進(jìn)行系列化連續(xù)播放,如同放電影的效果),它是通過播放一張一張圖片來達(dá)到動畫的效果;
28.handler機(jī)制的原理,looper通過什么方法開始的?
一個Handler允許你發(fā)送和處理Message和Runable對象,每個線程都有自己的Looper,每個Looper中封裝著MessageQueue飘痛。Looper負(fù)責(zé)不斷的從自己的消息隊列里取出隊頭的任務(wù)或消息執(zhí)行珊膜。每個handler也和線程關(guān)聯(lián),Handler負(fù)責(zé)把Message和Runable對象傳遞給MessageQueue(用到post ,sendMessage等方法),而且在這些對象離開MessageQueue時,Handler負(fù)責(zé)執(zhí)行他們(用到handleMessage方法)。
其中Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數(shù)據(jù)對象,這個信息被用來傳遞給Handler.Message對象提供額外的兩個int域和一個Object域宣脉。
默認(rèn)情況下一個線程是不存在消息循環(huán)(message loop)的,需要調(diào)用Looper.prepare()來給線程創(chuàng)建一個消息循環(huán),調(diào)用Looper.loop()來使消息循環(huán)起作用,從消息隊列里取消息,處理消息车柠。調(diào)用Looper.loop()之后循環(huán)已經(jīng)開始,下一個由handler發(fā)的message將會被這個handler的handleMessage方法處理,這是一個—-循環(huán)。
Looper從MessageQueue中取出Message之后,交由Handler的handleMessage進(jìn)行處理。處理完成后,調(diào)用Message.recycle()將其放入Message Pool中竹祷。
29.說說mvc模式的原理,在android中的運(yùn)用?
答:mvc是model,view,controller的縮寫,mvc包含三個部分:
模型(model)對象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層谈跛。
視圖(view)對象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果塑陵。
控制器(control)對象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,響應(yīng)用戶出發(fā)的相關(guān)事件,交給m層處理感憾。
android鼓勵弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:
1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時候可以非常方便的引入,當(dāng)然,如果你對android了解的比較的多了話,就一定可以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通信,幸運(yùn)的是,android提供了它們之間非常方便的通信實現(xiàn)。
2)控制層(controller):android的控制層的重任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理,這樣做的另外一個原因是android中的acitivity的響應(yīng)時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉令花。
3)模型層(model):對數(shù)據(jù)庫的操作阻桅、對網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對業(yè)務(wù)計算等操作也是必須放在的該層的。

30.如何讓Activity變成一個窗口?
答:在清單文件AndroidManifest.xml中相應(yīng)的標(biāo)簽內(nèi)設(shè)置屬性android:theme=”@android:style/Theme.Dialog”

31.后臺的Activity被系統(tǒng)回收怎么辦?
除了在棧頂?shù)腁ctivity,其他的Activity都有可能在內(nèi)存不足的時候被系統(tǒng)回收,一個Activity越處于棧底,被回收的可能性就越大兼都。如果我們沒有覆寫onSaveInstanceState()方法,此方法的默認(rèn)實現(xiàn)會自動保存Activity中的某些狀態(tài)數(shù)據(jù),比如Activity中各種UI空間的狀態(tài)嫂沉。Android應(yīng)用框架中定義的幾乎所有的UI控件都恰當(dāng)?shù)膶崿F(xiàn)了onSaveInstanceState()方法,因此當(dāng)Activity被摧毀和重建時,這些UI控件會自動保存和恢復(fù)狀態(tài)數(shù)據(jù)。比如EditText控件會自動保存和恢復(fù)輸入的數(shù)據(jù),而CheckBox控件會自動保存和恢復(fù)選中狀態(tài)俯抖。開發(fā)者只需要為這些控件指定一個唯一的ID(通過設(shè)置android:id屬性即可),剩余的事情就可以自動完成了输瓜。如果沒有為控件指定ID,則這個控件就不會進(jìn)行自動的數(shù)據(jù)保存和恢復(fù)操作瓦胎。
由上所述,如果我們需要覆寫onSaveInstanceState()方法,一般會在第一行代碼中調(diào)用該方法的默認(rèn)實現(xiàn):super.onSaveInstanceState(outState)芬萍。
32.ListView優(yōu)化?
答:1)、對convetView進(jìn)行判空,是當(dāng)convertView不為空的時候直接重新使用convertView
從而減少了很多不必要的View的創(chuàng)建
2)定義一個ViewHolder,將convetView的tag設(shè)置為ViewHolder,不為空時重新使用即可
3)搔啊、當(dāng)ListView加載數(shù)據(jù)量較大時可以采用分頁加載和圖片異步加載

33.IPC及其原理?

1).Binder通信是如何實現(xiàn)的?
1.Binder通信是通過linux的binder driver來實現(xiàn)的,
2.Binder通信操作類似線程遷移(thread migration),兩個進(jìn)程間IPC看起來就象是一個進(jìn)程進(jìn)入另一個進(jìn)程執(zhí)行代碼然后帶著執(zhí)行的結(jié)果返回;
1)IPC(Inter-Process Communication,進(jìn)程間通信),
aidl是 Android Interface definition language的縮寫,它是一種android內(nèi)部進(jìn)程通信接口的描述語言,通過它我們可以定義進(jìn)程間的通信接口.編譯器可以通過擴(kuò)展名為aidl的文件生成一段代碼,通過預(yù)先定義的接口達(dá)到兩個進(jìn)程內(nèi)部通信進(jìn)程的目的.
BroadcastReceiver也可以實現(xiàn)進(jìn)程間通信
ContentProvider 提供進(jìn)程間數(shù)據(jù)共享
2).Android的 Service工作流程
1.Android虛擬機(jī)啟動之前系統(tǒng)會先啟動service Manager進(jìn)程;
2.service Manager打開binder驅(qū)動,并通知binder kernel驅(qū)動程序這個進(jìn)程將作為System Service Manager;
3.然后該進(jìn)程將進(jìn)入一個循環(huán),等待處理來自其他進(jìn)程的數(shù)據(jù)柬祠。
4.用戶創(chuàng)建一個System service后,通過defaultServiceManager得到一個遠(yuǎn)程ServiceManager的接口,通過這個接口我們可以調(diào)用addService函數(shù)將System service添加到Service Manager進(jìn)程中;
5.然后client可以通過getService獲取到需要連接的目的Service的IBinder對象,這個IBinder是Service的BBinder在binder kernel的一個參考,
6.所以service IBinder 在binder kernel中不會存在相同的兩個IBinder對象,每一個Client進(jìn)程同樣需要打開Binder驅(qū)動程序。對用戶程序而言,我們獲得這個對象就可以通過binder kernel訪問service對象中的方法负芋。
7.Client與Service在不同的進(jìn)程中,通過這種方式實現(xiàn)了類似線程間的遷移的通信方式,對用戶程序而言當(dāng)調(diào)用Service返回的IBinder接口后,訪問Service中的方法就如同調(diào)用自己的函數(shù)漫蛔。
34.View如何刷新?
安卓要更新界面不要在主線程中去做
如果是在線程thread中獲取到了新的數(shù)據(jù),需要配合使用hanlder進(jìn)行刷新.
在線程中刷新View用postinvalidate();
在UI線程中刷新View的方法是invalidate()函數(shù),
當(dāng)調(diào)用線程處于空閑狀態(tài)時,調(diào)onDraw()刷新界面

如果是listView刷新數(shù)據(jù),用adapter.notifyDataSetInvalidated();
adapter.notifyDataSetChanged();
35.DDMS與TraceView的區(qū)別?
DDMS是一個程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器 。
36.在Java中如何引入C語言?

java中利用JNI引用本地語言 (java native interface java 本地接口)接口 旧蛾。
1.在應(yīng)用程序中定義本地接口(native)編譯成.h頭文件,交由C程序員實現(xiàn),將.c實現(xiàn)通過NDk編譯成.so動態(tài)鏈接庫(windows下是.dll, linux下是.so,導(dǎo)入項目中的libs/armeabi,代碼中調(diào)用本地接口,
應(yīng)用場景:音頻,拍攝車牌號
37.鏈表和數(shù)組的區(qū)別?
數(shù)組是將元素在內(nèi)存中連續(xù)存放,由于每個元素占用內(nèi)存相同,可以通過下標(biāo)迅速訪問數(shù)組中任何元素莽龟。但是如果要在數(shù)組中增加一個元素,需要移動大量元素,在內(nèi)存中空出一個元素的空間,然后將要增加的元素放在其中。同樣的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素锨天。如果應(yīng)用需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應(yīng)該用數(shù)組毯盈。
鏈表恰好相反,鏈表中的元素在內(nèi)存中不是順序存儲的,而是通過存在元素中的指針聯(lián)系到一起。比如:上一個元素有個指針指到下一個元素,以此類推,直到最后一個元素病袄。如果要訪問鏈表中一個元素,需要從第一個元素開始,一直找到需要的元素位置搂赋。但是增加和刪除一個元素對于鏈表數(shù)據(jù)結(jié)構(gòu)就非常簡單了,只要修改元素中的指針就可以了。如果應(yīng)用需要經(jīng)常插入和刪除元素你就需要用鏈表數(shù)據(jù)結(jié)構(gòu)了益缠。
二者都屬于一種數(shù)據(jù)結(jié)構(gòu)
(1) 從邏輯結(jié)構(gòu)角度來看
a, 數(shù)組必須事先定義固定的長度(元素個數(shù)),不能適應(yīng)數(shù)據(jù)動態(tài)地增減的情況脑奠。當(dāng)數(shù)據(jù)增加時,可能超出原先定義的元素個數(shù);當(dāng)數(shù)據(jù)減少時,造成內(nèi)存浪費(fèi)。
b,鏈表動態(tài)地進(jìn)行存儲分配,可以適應(yīng)數(shù)據(jù)動態(tài)地增減的情況,且可以方便地插入幅慌、刪除數(shù)據(jù)項宋欺。(數(shù)組中插入、刪除數(shù)據(jù)項時,需要移動其它數(shù)據(jù)項)
(2)從內(nèi)存存儲角度來看
a,(靜態(tài))數(shù)組從棧中分配空間, 對于程序員方便快速,但自由度小。
b, 鏈表從堆中分配空間, 自由度大但申請管理比較麻煩.
39.Hash表是什么?有什么用?
散列表(Hash table,也叫哈希表),是根據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)迄靠。也就是說,它通過把關(guān)鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度秒咨。這個映射函數(shù)叫做散列函數(shù),存放記錄的數(shù)組叫做散列表。
給定表M,存在函數(shù)f(key),對任意給定的關(guān)鍵字值key,代入函數(shù)后若能得到包含該關(guān)鍵字的記錄在表中的地址,則稱表M為哈希(Hash)表,函數(shù)f(key)為哈希(Hash) 函數(shù)
作用:HASH表主要就是提供更快的查找速度,簡單來說就是分桶掌挚。
比如說你們學(xué)校的一個年級有很多班是吧? 那么現(xiàn)在要查找一位同學(xué)雨席。如果不看班級直接找,就需要每個班級一個一個的查找是不? 那現(xiàn)在因為分了班級,我們有一個函數(shù)可以通過名字產(chǎn)生它的班級號。比如說王勇,二班吠式。 那么現(xiàn)在我們直接hash( 王勇) = 2; 然后我們就直接從2班開始找陡厘。 如果2班有50個學(xué)生,那么我們最多查找50次對嗎? 好。假設(shè)你們年級一共有10個班,如果沒有這個hash函數(shù),那么直接找,最壞可能要查找50*10=500次特占。!! 這個班級其實就是每個桶!! 這就是分桶糙置。。是目。通過哈希函數(shù)產(chǎn)生哈希值,然后相同哈希值的元素放在相同的桶里邊谤饭。。懊纳。!
這樣可以通過hash這個間接作用減少查找的時間和次數(shù)!這就是它的意義!!
40.什么是鎖?有什么用?有哪些鎖?為什么需要鎖?
鎖是為了保證安全性,如程序運(yùn)行時保證另外的程序不能再對本程序所使用到的數(shù)據(jù)進(jìn)行某些操作,版本軟件的“不能合并”文件不能同時被兩人修改等揉抵。
鎖分為:線程鎖,數(shù)據(jù)庫鎖,SVN鎖等等
1、當(dāng)幾個線程都用到了某個量,但是這個量卻能影響程序的運(yùn)行時就需要線程鎖來控制一次只能由一個線程訪問這個量嗤疯。如果沒有使用線程鎖會出現(xiàn)爭用情況冤今。
兩個或更多的線程或進(jìn)程讀或?qū)懸恍┕蚕頂?shù)據(jù),而最終結(jié)果取決于這些線程是如何被調(diào)度計時的。爭用情況可能會導(dǎo)致不可預(yù)見的結(jié)果和隱蔽的程序錯誤茂缚。
2戏罢、數(shù)據(jù)庫鎖的作用是防止程序運(yùn)行的時候其他的程序不能再對該程序所使用到的數(shù)據(jù)進(jìn)行操作,保護(hù)數(shù)據(jù)的安全性。
3脚囊、SVN鎖的作用是防止版本軟件中的“不能合并”的文件(如:圖形文件)不能被多人同時更改的時候進(jìn)行鎖定,當(dāng)一個人對其進(jìn)行操作時,其他人不能對這個文件再進(jìn)行操作,保證了文件的安全性龟糕。
41.MVC作用?
答: Android中界面部分也采用了當(dāng)前比較流行的MVC框架。
在Android中:

  1. 視圖層(View):一般采用XML文件進(jìn)行界面的描述,使用的時候可以非常方
    便的引入悔耘。也可以使用JavaScript+HTML等的方式作為View層,通過WebView組
    件加載,同時可以實現(xiàn)Java和JavaScript之間的通信讲岁。
  2. 控制層(Controller):這句話也就暗含了不要在Acitivity中寫代碼,要通過Activity
    交割Model業(yè)務(wù)邏輯層處理,這樣做的另外一個原因是Android中的Acitivity的響
    應(yīng)時間是5s,如果耗時的操作放在這里,Android的控制層的重任通常落在了眾多
    的Acitvity的肩上,程序就很容易被回收掉。
    3)模型層(Model):對數(shù)據(jù)庫的操作淮逊、對網(wǎng)絡(luò)等的操作都應(yīng)該在Model里面處理,
    當(dāng)然對業(yè)務(wù)計算等操作也是必須放在的該層的催首。
    在Android SDK中的數(shù)據(jù)綁定,也都是采用了與MVC框架類似的方法來顯示數(shù)據(jù)。在控制層上將數(shù)據(jù)按照視圖模型的要求(也就是Android SDK中的Adapter)封裝就可以直接在視圖模型上顯示了,從而實現(xiàn)了數(shù)據(jù)綁定泄鹏。比如顯示Cursor中所有數(shù)據(jù)的ListActivity,其視圖層就是一個ListView,將數(shù)據(jù)封裝為ListAdapter,并傳遞給ListView,數(shù)據(jù)就在ListView中顯示寥袭。

42.px,dp,sp區(qū)別?
px:
即像素,1px代表屏幕上一個物理的像素點;
px單位不被建議使用,因為同樣100px的圖片,在不同手機(jī)上顯示的實際大小可能不同
dp = dip : device independent pixels(設(shè)備獨立像素). 不同設(shè)備有不同的顯示效果,這個和設(shè)備硬件有關(guān),一般我們?yōu)榱酥С諻VGA昔逗、HVGA和QVGA 推薦使用這個,不依賴像素位衩。
sp:
與縮放無關(guān)的抽象像素(Scale-independent Pixel)钢属。sp和dp很類似但唯一的區(qū)別是,Android系統(tǒng)允許用戶自定義文字尺寸大小(小分井、正常、大霉猛、超大等等),當(dāng)文字尺寸是“正吵呙”時1sp=1dp=0.00625英寸,而當(dāng)文字尺寸是“大”或“超大”時,1sp>1dp=0.00625英寸。類似我們在windows里調(diào)整字體尺寸以后的效果——窗口大小不變,只有文字大小改變惜浅。
43.android 系統(tǒng)架構(gòu),按順序?
答:1)應(yīng)用程序?qū)?java語言 應(yīng)用程序開發(fā)
2)應(yīng)用程序框架層 java語言 OS定制 framework層開發(fā)
3)系統(tǒng)運(yùn)行庫層 C C++ 實現(xiàn) so庫
4)Linux內(nèi)核層

44.android有幾種布局,有什么特點?
答:最常用的布局有以下這幾種:
第一種:幀布局(框架布局)FrameLayout,在這個布局中,所有的子元素統(tǒng)統(tǒng)放于這塊區(qū)域的左上角,并且后面的子元素直接覆蓋在前面的子元素之上,將前面的子元素部分和全部遮擋瘫辩。
第二種:線性布局LinearLayout,最常用的一種布局方式,所有子控件的對齊方式,取決于如何定義 orientation的屬性:vertical 垂直方向 ,如果按照這種方向所有的子控件將按照垂直的方式分布在布局上,每行只允許有一個子元素,horizontal水平方向 ,這時子控件將會以水平的方向分布在布局中。
第三種:絕對布局AbsoluteLayout,又可以叫做坐標(biāo)布局,可以直接指定子元素的絕對位置,這種布局簡單直接,直觀性強(qiáng),但是由于手機(jī)屏幕尺寸差別比較大,使用絕對定位的適應(yīng)性會比較差坛悉。
第四種:相對布局RelativeLayout,允許子元素指定它們相對于其父元素或兄弟元素的位置,這是實際布局中最常用的布局方式之一伐厌。它靈活性大很多,當(dāng)然屬性也多,操作難度也大,屬性之間產(chǎn)生沖突的的可能性也大,使用相對布局時要多做些測試。
第五種:表格布局TableLayout,表格布局TableLayout以行列的形式管理子元素,每一行是一個TableRow布局對象,當(dāng)然也可以是普通的View對象,TableRow里每放一個元素就是一列,總列數(shù)由列數(shù)最多的那一行決定裸影。
第六種:網(wǎng)格布局 GridLayout,在Android 4.0中,新引入的GridLayout網(wǎng)格布局,GridLayout布局使用虛細(xì)線將布局劃分為行,列和單元格,也支持一個控件在行,列上都有交錯排列挣轨。而GridLayout使用的其實是跟LinearLayout類似的API,只不過是修改了一下相關(guān)的標(biāo)簽而已,所以對于開發(fā)者來說,掌握GridLayout還是很容易的事情。

(Android 4.0的SDK已經(jīng)發(fā)布,在眾多的新增特性中,其中對開發(fā)者來說比較重要的特性之一,是新增的兩種界面布局方式:Space和Gridlayout)

45.常用的設(shè)計模式?
答:單例模式;工廠模式;
觀察者模式:ContentObserver, 監(jiān)聽ContentProvider ContentResolver;
適配器模式Adapter(SimpleAdapter BaseAdapter ArrayAdapter CursorAdapter)以及各種Adapter的數(shù)據(jù)源;
代理模式 AOP;
46.常用的排序法?
答: 冒泡排序 O(n^2) : 冒泡排序也是最簡單最基本的排序方法之一轩猩。冒泡排序的思想很簡單,就是以此比較相鄰的元素大小,將小的前移,大的后移,就像水中的氣泡一樣,最小的元 素經(jīng)過幾次移動,會最終浮到水面上卷扮。
for (int i = 0; i < num.length; i++) {
// 內(nèi)循環(huán)控制比較后移位
for (int j = num.length-1; j > i ; j–) {
if (num[j-1]>num[j]) {
temp = num[j-1];
num[j-1] = num[j];
num[j] = temp;
}
}
快速排序O(n log n) : 快速排序采用的思想是分治思想【快速排序算法的核心算法是分區(qū)操作,即如何調(diào)整基準(zhǔn)的位置以及調(diào)整返回基準(zhǔn)的最終位置以便分治遞歸晤锹。
插入排序 O(n^2) :將新來的元素按順序放入一個已有的有序序列當(dāng)中。
選擇排序 O(n^2) :第i趟簡單選擇排序是指通過n-i次關(guān)鍵字的比較,從n-i+1個記錄中選出關(guān)鍵字最小的記錄,并和第i個記錄進(jìn)行交換浊猾。共需進(jìn)行i-1趟比較,直到所有記錄排序完成為止抖甘。

47.寫一個快速排序法?
快速排序(Quicksort)是對冒泡排序的一種改進(jìn)热鞍。它的基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,以此達(dá)到整個數(shù)據(jù)變成有序序列葫慎。
public class QuickSort {
public static void main(String[] args) {
Integer[] list={34,3,53,2,23,7,14,10};
QuickSort qs= new QuickSort();
qs.quick(list);
for( int i=0;i...}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市薇宠,隨后出現(xiàn)的幾起案子偷办,更是在濱河造成了極大的恐慌,老刑警劉巖澄港,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椒涯,死亡現(xiàn)場離奇詭異,居然都是意外死亡回梧,警方通過查閱死者的電腦和手機(jī)废岂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狱意,“玉大人湖苞,你說我怎么就攤上這事∠甓冢” “怎么了财骨?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我隆箩,道長该贾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任捌臊,我火速辦了婚禮杨蛋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘理澎。我一直安慰自己六荒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布矾端。 她就那樣靜靜地躺著掏击,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秩铆。 梳的紋絲不亂的頭發(fā)上砚亭,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音殴玛,去河邊找鬼捅膘。 笑死,一個胖子當(dāng)著我的面吹牛滚粟,可吹牛的內(nèi)容都是我干的寻仗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凡壤,長吁一口氣:“原來是場噩夢啊……” “哼署尤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亚侠,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤曹体,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后硝烂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箕别,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年滞谢,在試婚紗的時候發(fā)現(xiàn)自己被綠了串稀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡狮杨,死狀恐怖母截,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情禾酱,我是刑警寧澤微酬,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布绘趋,位于F島的核電站,受9級特大地震影響颗管,放射性物質(zhì)發(fā)生泄漏陷遮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一垦江、第九天 我趴在偏房一處隱蔽的房頂上張望帽馋。 院中可真熱鬧,春花似錦比吭、人聲如沸绽族。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧慢。三九已至,卻和暖如春赏表,著一層夾襖步出監(jiān)牢的瞬間检诗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工瓢剿, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留逢慌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓间狂,卻偏偏與公主長得像攻泼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鉴象,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容