《Android程序員面試筆試寶典》覆蓋了Android開發(fā)中的各個主要方面,所給出的試題均取材于各大IT公司的Android面試真題。全書分為Java部分與Android部分。因?yàn)锳ndroid開發(fā)是用Java語言來編寫的,所以這里所講的Java知識都是基礎(chǔ)方面,而且跟Android開發(fā)有關(guān)的其他基礎(chǔ)知識都會在Java部分進(jìn)行講解。而Android部分,則從面試中經(jīng)常考的知識點(diǎn)入手,對Android進(jìn)行全面的學(xué)習(xí),對常見面試真題進(jìn)行分析與講解,培養(yǎng)讀者解決面試題思路的同時,也能系統(tǒng)學(xué)習(xí)到Android開發(fā)。
《Android程序員面試筆試寶典》內(nèi)容豐富,講解思路清晰且詳細(xì),涵蓋的知識點(diǎn)非常多,不但是一本用來解決程序員面試的Android實(shí)用工具書,也是一本適合任何Android開發(fā)者學(xué)習(xí)的好書。
適讀人群 :Android、Java和Web 開發(fā)人員 軟件工程師 高等院校計(jì)算機(jī)專業(yè)師生
詳細(xì)分析Android核心組件、面試真題,揭開華為、小米等知名企業(yè)Android面試的機(jī)密
細(xì)分Android面試?yán)},幫助讀者查遺補(bǔ)漏,重點(diǎn)攻破,事半功倍
附贈全書代碼,增加Java擴(kuò)展知識,由點(diǎn)成線,舉一反三,傳授靈活應(yīng)用Android及面試關(guān)鍵技巧
不知不覺已經(jīng)過了半年,而在這半年里我跟另一位伙伴順利完成了這本關(guān)于Android(安卓)面試方面的技術(shù)書。雖然編寫過程辛苦,但一想到可以把自己一直以來總結(jié)的知識與經(jīng)驗(yàn)分享給大家,就有種莫名的興奮感,這也是我們撰寫本書的初衷,希望能對正在學(xué)習(xí)安卓的或者決定要學(xué)習(xí)安卓開發(fā)的朋友有所幫助,哪怕是只有一點(diǎn),只要能幫助到各位,這樣也足矣。
回想大學(xué)畢業(yè)時,還沒確定好自己該往哪個方向去走向編程這個1/0世界,因?yàn)轳R上又是求職季,感覺自己Java基礎(chǔ)還行,所以從此就選擇安卓開發(fā)這條路了。直到現(xiàn)在,自己雖然早已不是當(dāng)初那個懵懂的菜鳥,但在安卓開發(fā)上,也一直碰到很多問題。慶幸的是,我都堅(jiān)持下來,一直系統(tǒng)地學(xué)習(xí)安卓知識,鍛煉自己的編程能力,不斷積累自身的項(xiàng)目經(jīng)驗(yàn)。
所以我始終認(rèn)為,要學(xué)習(xí)好安卓,或者是其他編程語言,都要堅(jiān)持。再一個就是要選對方法,怎樣在學(xué)習(xí)的過程中避坑,而不是一股腦地堅(jiān)持就行了。我開始學(xué)習(xí)安卓的那段時期經(jīng)常會不明所以然,后來自己不斷去看相關(guān)書籍和網(wǎng)上的大神寫的技術(shù)文章,這才知道是因?yàn)樽约宏P(guān)于安卓的知識面太窄了,限制了我的思維?墒蔷退阒雷约褐R面窄又能怎樣,畢竟一個人的知識體系并不能一下子就豐富起來。所以這時我想到了可以先收集安卓開發(fā)中各種知識點(diǎn)的簡介,因?yàn)橥ǔ_@些簡介都涵蓋了對各種知識點(diǎn)的作用的描述,然后我再把它們制作成思維導(dǎo)圖,這樣雖然不能短時間把所有知識都琢磨透,但起碼讓我知道它們是干什么的,有什么用,這樣我腦海中就形成了一個框架,能把開發(fā)中的知識點(diǎn)串聯(lián)起來,就不會再有那種迷惘感,學(xué)習(xí)起來也更加高效了。先宏觀了解大概,讓自己有個知識框架,然后過關(guān)斬將,循序漸進(jìn)地攻克每一個知識點(diǎn)。
最后,既然是從事開發(fā)工作,那就一定要實(shí)踐,編程能力才是你的核心競爭力,努力寫好你的代碼。
本書內(nèi)容
本書涵蓋了Java基礎(chǔ)、Android四大組件(Activity、Service、ContentProvider和BroadcastReceiver)、布局、自定義View、動畫框架、常用的第三方框架(Rxjava、Retrofit、OkHttp和Glide等)、消息異步機(jī)制、事件分發(fā)機(jī)制、MVC/MVP/MVVM和跨進(jìn)程通信等知識點(diǎn)的講解,這些知識點(diǎn)不僅在面試的時候經(jīng)?疾,在實(shí)際開發(fā)中也是經(jīng)常要用到的。所以本書將著重詳細(xì)講解它們,讓大家能切實(shí)理解,務(wù)必讓看本書的讀者能培養(yǎng)自己思考問題的思路。畢竟隨著技術(shù)的發(fā)展與進(jìn)步,安卓開發(fā)所涉及的東西也會越來越多,這樣公司對面試者的要求也會越來越高,考核的面試題的內(nèi)容和難度也會隨之變多與加深。但是,萬變不離其宗,只要掌握了每個知識點(diǎn)以及它的解題思路,那么不僅能用于面試,在開發(fā)上也會水到渠成。而本書正是基于這樣的目的來講解有關(guān)安卓開發(fā)中的知識以及面試題。
致謝
直到現(xiàn)在,我還不敢相信自己能完成本書的撰寫。這半年的時間,要感謝的人太多,沒有他們,我恐怕是完成不了本書的。
首先,我要在這里感謝《Java程序員面試筆試寶典》的作者何昊先生與薛鵬先生。當(dāng)初,我還是一名默默無聞的安卓碼農(nóng),在微信公眾號上偶爾發(fā)表一些自己總結(jié)的技術(shù)文章。何昊先生在看了我公眾號上的文章后,邀我寫一本關(guān)于安卓面試方面的書,而我也最終在他的鼓勵下踏上了寫書的道路。薛鵬先生也在我編寫本書的過程中給予了很大的幫助。還有,機(jī)械工業(yè)出版社計(jì)算機(jī)分社時靜副社長與尚晨編輯,感謝你們?yōu)楸緯o出的建議與幫助。
其次,我要感謝我的父母,因?yàn)闆]有你們背后的支持與理解,我是完成不了本書的編寫。
最后
盡管我們已經(jīng)盡力去編寫了,但畢竟精力有限,可能也會在某些知識的講解過程中出現(xiàn)紕漏與錯誤,懇請讀者批評指正,也希望大家能將發(fā)現(xiàn)的問題向我反饋,不勝感激。除此之外,也歡迎大家與我聯(lián)系,交流安卓或者編程相關(guān)的問題。
編 者
前言
第1章 四大組件1
1.1 活動1
1.1.1 生命周期1
1.1.2 啟動模式2
1.1.3 碎片5
1.1.4 常見面試筆試真題6
1.2 服務(wù)17
1.2.1 Android線程17
1.2.2 生命周期17
1.2.3 服務(wù)類型18
1.2.4 Handler機(jī)制18
1.2.5 常見面試筆試真題19
1.3 廣播接收器26
1.3.1 動態(tài)注冊與靜態(tài)注冊26
1.3.2 廣播類型26
1.3.3 發(fā)送廣播27
1.3.4 常見面試筆試真題28
1.4 內(nèi)容提供者30
1.4.1 系統(tǒng)ContentProvider31
1.4.2 自定義ContentProvider31
1.4.3 常見面試筆試真題32
第2章 布局及其常用屬性36
2.1 常用的幾種布局36
2.1.1 線性布局36
2.1.2 幀布局37
2.1.3 相對布局37
2.1.4 約束布局38
2.2 常見面試筆試真題40
第3章 自定義View及ViewGroup42
3.1 自定義View42
3.1.1 onMeasure()43
3.1.2 onDraw()44
3.2 自定義ViewGroup45
3.3 常見面試筆試真題48
第4章 動畫65
4.1 View動畫65
4.1.1 透明度動畫(AlphaAnimation)65
4.1.2 縮放動畫(ScaleAnimation)66
4.1.3 平移動畫(TranslateAnimation)67
4.1.4 旋轉(zhuǎn)動畫(RotateAnimation)68
4.1.5 AnimationSet69
4.2 屬性動畫70
4.3 常見面試筆試真題74
第5章 數(shù)據(jù)庫框架83
5.1 文件流83
5.2 SQLite85
5.2.1 創(chuàng)建與更新數(shù)據(jù)庫85
5.2.2 添加數(shù)據(jù)86
5.2.3 刪除數(shù)據(jù)87
5.2.4 修改數(shù)據(jù)87
5.2.5 查詢數(shù)據(jù)87
5.3 LitePal88
5.3.1 使用前準(zhǔn)備工作88
5.3.2 創(chuàng)建與升級數(shù)據(jù)庫89
5.3.3 添加數(shù)據(jù)91
5.3.4 修改數(shù)據(jù)91
5.3.5 刪除數(shù)據(jù)93
5.3.6 查詢數(shù)據(jù)93
5.4 常見面試筆試真題95
第6章 網(wǎng)絡(luò)框架104
6.1 關(guān)于HTTP/HTTPS的基礎(chǔ)知識104
6.1.1 HTTP請求方式104
6.1.2 HTTP報(bào)文104
6.1.3 首部(Header)105
6.1.4 HTTP緩存106
6.2 OkHttp108
6.2.1 Get請求108
6.2.2 Post請求109
6.2.3 文件上傳109
6.2.4 結(jié)合GSON框架來解析返回結(jié)果110
6.3 Retrofit112
6.4 常見面試筆試真題114
第7章 Rxjava119
7.1 Rxjava的優(yōu)點(diǎn)119
7.2 Rxjava原理119
7.3 Rxjava的使用120
7.4 操作符121
7.4.1 創(chuàng)建操作符121
7.4.2 轉(zhuǎn)換操作符124
7.4.3 組合操作符124
7.4.4 功能操作符127
7.4.5 過濾操作符135
7.4.6 條件操作符138
7.5 常見面試筆試真題140
第8章 事件分發(fā)機(jī)制142
8.1 觸摸事件的方法143
8.2 Activity事件分發(fā)143
8.3 ViewGroup與View事件分發(fā)144
8.4 常見面試筆試真題148
第9章 MVC、MVP與MVVM151
9.1 MVC151
9.2 MVP153
9.3 MVVM157
9.4 常見面試筆試真題158
第10章 圖片加載框架161
10.1 Glide161
10.2 ImageLoader162
10.3 Picasso162
10.4 常見面試筆試真題163
第11章 性能優(yōu)化與跨進(jìn)程通信165
11.1 性能優(yōu)化165
11.1.1 布局優(yōu)化165
11.1.2 繪制優(yōu)化167
11.1.3 內(nèi)存優(yōu)化168
11.1.4 包優(yōu)化169
11.1.5 Bitmap優(yōu)化169
11.2 跨進(jìn)程通信170
11.2.1 進(jìn)程與線程170
11.2.2 Android的IPC170
11.3 常見面試筆試真題172
第12章 Java基礎(chǔ)知識175
12.1 基本概念175
12.1.1 Java語言有哪些優(yōu)點(diǎn)?175
12.1.2 Java與C/C++有何異同?175
12.1.3 為什么需要public static void main(String[] args)這個方法?176
12.1.4 如何實(shí)現(xiàn)在main函數(shù)執(zhí)行前輸出“Hello world”?178
12.1.5 Java程序初始化的順序是怎樣的?178
12.1.6 Java中作用域有哪些?180
12.1.7 一個Java文件中是否可以定義多個類?181
12.1.8 什么是構(gòu)造方法?181
12.1.9 為什么Java中有些接口沒有聲明任何方法?183
12.1.10 Java中clone方法有什么作用?185
12.1.11 反射190
12.1.12 package有什么作用?194
12.1.13 Java如何實(shí)現(xiàn)類似于C語言中函數(shù)指針的功能?194
12.1.14 本地變量類型推斷196
12.1.15 常見面試筆試真題200
12.2 面向?qū)ο蠹夹g(shù)202
12.2.1 面向?qū)ο笈c面向過程有什么區(qū)別?202
12.2.2 面向?qū)ο笥心男┨卣鳎?03
12.2.3 面向?qū)ο蟮拈_發(fā)方式有什么優(yōu)點(diǎn)?203
12.2.4 什么是繼承?204
12.2.5 組合與繼承有什么區(qū)別?204
12.2.6 多態(tài)的實(shí)現(xiàn)機(jī)制是什么?205
12.2.7 Overload和Override有什么區(qū)別?207
12.2.8 abstract class(抽象類)與interface(接口)有何異同?207
12.2.9 內(nèi)部類有哪些?209
12.2.10 如何獲取父類的類名?211
12.2.11 this與super有什么區(qū)別?212
12.2.12 常見面試筆試真題213
12.3 關(guān)鍵字216
12.3.1 變量命名有哪些規(guī)則?216
12.3.2 break、continue以及return的區(qū)別是什么?216
12.3.3 final、finally和 finalize有什么區(qū)別?218
12.3.4 assert有什么作用?220
12.3.5 static關(guān)鍵字有哪些作用?220
12.3.6 switch使用時有哪些注意事項(xiàng)?224
12.3.7 volatile有什么作用?226
12.3.8 instanceof有什么作用?230
12.3.9 strictfp有什么作用?230
12.3.10 常見面試筆試真題231
12.4 基本類型與運(yùn)算231
12.4.1 Java提供了哪些基本的數(shù)據(jù)類型?231
12.4.2 什么是不可變類?233
12.4.3