兩年Android老司機你不得不具備的面試知識

前言
金三銀四的跳槽季過去了,大部分的程序員在這個時候已然找到了自己合適或還算滿意的崗位公司。但也有大部分人仍在不斷的重復面試,復試锌杀。然后淘汰還不能達到自己理想的企業(yè)公司,又或者被企業(yè)公司淘汰泻仙。在不斷面試的過程中你就會發(fā)現(xiàn)糕再,實際上Android程序員在這個過程中面臨的挑戰(zhàn)越來越大,初級程序員越來越難找到工作玉转,中級程序員人數(shù)越來越多突想,高級程序員越來越吃香,但工資卻越來越難有所提升,同一Android崗位的競爭越來越多蒿柳,而培訓班的簡歷年限也是越來越夸張。下面我總結(jié)了一些深圳各大中小型企業(yè)公司的面試題目漩蟆,這些都學(背)起來垒探,在深圳,面試招聘要求1-3年的Android 崗位怠李,不用愁圾叼。

JAVA基礎(chǔ)
1.java三大特性
封裝,繼承捺癞,多態(tài)(少說也要會扯一點概念性的東西出來)

2.基本數(shù)據(jù)類型及占用的字節(jié)數(shù)
基本類型有byte,short,int,long,float,double,boolean,char
引用類型有 對象(包括String)夷蚊、數(shù)組

類型 包裝類 所占位數(shù)(二進制) 所占字節(jié)數(shù)
byte(字節(jié)) Byte 8 1
short(短整型) Short 16 2
int(整型) Integer 32 4
long(長整型) Long 64 8
float(浮點型) Float 32 4
double(雙精度) Double 64 8
char(字符型) Character 16 2
boolean(布爾型) Boolean 1

3.進程與線程
一個程序至少有一個進程,一個進程至少有一個線程

4.java的四種引用髓介?
強引用惕鼓、弱引用、軟引用唐础、虛引用(了解箱歧,并知道如何使用)

5.equals與==的區(qū)別
==是判斷兩個變量或?qū)嵗遣皇侵赶蛲粋€內(nèi)存空間,equals是判斷兩個變量或?qū)嵗赶虻膬?nèi)存空間的值是不是相等

6.java反射機制
java反射機制是在運行時一膨,對于任意一個類呀邢,都能夠知道這個類所有屬性和方法;對于任意一個對象豹绪,都能夠調(diào)用它的任意一個方法价淌;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法等功能稱為java語言的反射機制。java反射機制主要提供了一下功能:a)在運行時判斷任意一個對象所屬的類瞒津;b)在運行時構(gòu)造任意一個類的對象蝉衣;c)在運行時判斷任意一個類所具有的成員變量和方法;d)在運行時調(diào)用任意一個對象的方法巷蚪,生成動態(tài)代理

7.Maven 和ANT 有什么區(qū)別
雖然兩者都是構(gòu)建工具买乃,都用于創(chuàng)建java應(yīng)用,但是Maven做的事情更多钓辆,在基于“約定優(yōu)于配置”的概念下剪验,提供標準的java項目結(jié)構(gòu),同時能為應(yīng)用自動管理依賴應(yīng)用中所依賴的jar文件前联。

8.進程間通信方式
intent功戚,bind機制(IPC - > AIDL),Messenger似嗤,broadcastReceiver廣播

9.Dalvik虛擬機與JVM有什么區(qū)別
Dalvik基于寄存器啸臀,而JVM基于棧。基于寄存器的虛擬機對于更大的程序來說乘粒,在它們編譯的時候豌注,花費的時間更短。Dalvik執(zhí)行.dex格式的字節(jié)碼灯萍,而JVM執(zhí)行.class格式的字節(jié)碼

網(wǎng)絡(luò)篇:
1.http與https的區(qū)別:
https = http + ssl +加密算法+證書驗證
http使用80 端口轧铁,https使用443端口

2.Http 中的Get和Post方法的區(qū)別
Get 從指定的服務(wù)器中獲取數(shù)據(jù),明文發(fā)送內(nèi)容
Post 提交數(shù)據(jù)給指定的服務(wù)器處理
a)Post請求不能被緩存下來
b)Post請求不會保存在瀏覽器瀏覽記錄中
c)以Post請求的URL無法保存為瀏覽器書簽
d)Post請求沒有長度限制

3.tcp與udp區(qū)別
(TCP)傳輸控制協(xié)議旦棉,是一種提供可靠數(shù)據(jù)傳輸?shù)耐ㄓ脜f(xié)議齿风。
(UDP)用戶數(shù)據(jù)報協(xié)議,是一個面向無連接的協(xié)議绑洛。采用該協(xié)議不需要兩個應(yīng)用程序先建立連接救斑。UDP協(xié)議不提供差錯恢復,不能提供數(shù)據(jù)重傳真屯,因此該協(xié)議傳輸數(shù)據(jù)安全性差脸候。

4.常見的服務(wù)器錯誤代碼
400 - 錯誤的請求
401 - 訪問被拒絕
403 - 禁止訪問
500 - 內(nèi)部服務(wù)器錯誤
502 - 網(wǎng)關(guān)錯誤

Android 基礎(chǔ)篇:
1.activity生命周期,fragment生命周期绑蔫,broadcastReceiver生命周期纪他,service生命周期
activity:onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy()

fragment:onAttach() -> onCreate() -> onCreateView() -> onActivityCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy ->onDetach()

broadcastReceiver:10秒左右,onReceive() 方法開始到結(jié)束

service:
a)startService(): onCreate() -> onStartCommand() -> service running -> onDestroy()
b)bindService():onCreate() -> onBind() -> Clients are bound to service -> onUnbind() -> onDestory()

2.service如何操作activity
a)直接把activity傳給service晾匠,service通過activity實例隨便操作activity
b)使用接口回調(diào)方式茶袒,activity實現(xiàn)相應(yīng)的接口,service通過接口進行回調(diào)
c)使用廣播

3.如何解決方法數(shù)65K的問題
使用Android Studio的 gradle 可以構(gòu)建MutilDex

4.intent 可以傳遞哪些數(shù)據(jù)類型
1.Serializable
2.charsequence 主要用來傳遞String,char等
3.parcelable
4.Bundle

5.Activity的啟動模式:
1.Standard:默認標準模式凉馆,每啟動一個都會創(chuàng)建一個實例
2.SingleTop:棧頂服用薪寓,如果在棧頂就調(diào)用onNewIntent復用,從onResume()開始
3.SingleTask:棧內(nèi)復用澜共,本棧內(nèi)只要用該類型Activity就會調(diào)到棧頂復用向叉,從onResume()開始
4.SingleInstance:單例模式,除了3中的特性嗦董,系統(tǒng)會單獨給該Activity創(chuàng)建一個棧

6.說說xml 三種解析方式
DOM:檢索和更新效率高母谎;對于特別大的文檔,解析和加載整個文檔將會很耗資源
SAX:解析速度快京革,占用內(nèi)存衅婊健;代碼量大匹摇,不能倒退
PULL:小巧輕便咬扇,解析速度快,簡單易用廊勃,可隨時停止解析懈贺,適用于XML文檔較大但只需要文檔的一部分時

7.Android線程間通信有哪幾種方式
a)共享變量(內(nèi)存)
b)管道
c)handler機制

8.子線程中能不能new handler?
當然可以,子線程可以new一個mainHandler,然后發(fā)送消息到UIThread

9.橫豎屏切換時候Activity的生命周期
a)不設(shè)置Activity的android:configChanges時梭灿,切屏會重新調(diào)用各個生命周期画侣,切橫屏時會執(zhí)行一次,切豎屏時會執(zhí)行兩次
b)設(shè)置Activity的android:configChanges=“orientation”時堡妒,切屏還是會重新調(diào)用各個生命周期配乱,切橫豎屏時只執(zhí)行一次
c)設(shè)置Activity的android:configChanges=“orientation | keyboardHidden”時,切屏不會重新調(diào)用各個生命周期涕蚤,只會執(zhí)行onConfigurationChanged方法

10.淺談MVC宪卿、 MVP的诵、 MVVM區(qū)別與聯(lián)系
這個自由發(fā)揮万栅,不會答的請看以下鏈接
淺談MVC,MVP,MVVM區(qū)別與聯(lián)系

11.什么是內(nèi)存泄漏、內(nèi)存溢出西疤。兩者之間的區(qū)別
內(nèi)存泄露(Memory Leak)指你用malloc或new申請了一塊內(nèi)存烦粒,但是沒有通過free或delete將內(nèi)存釋放,導致這塊內(nèi)存一直處于占用狀態(tài)內(nèi)存泄露和硬件沒有關(guān)系代赁,它是由軟件設(shè)計缺陷引起的扰她。
內(nèi)存溢出(Memory Overflow)指程序在申請內(nèi)存時,沒有足夠的內(nèi)存空間供其使用芭碍,出現(xiàn)out of memory徒役。比如你申請了10個字節(jié)的空間,但是你在這個空間寫入11或以上字節(jié)的數(shù)據(jù)窖壕,就是溢出

相同點:都會導致應(yīng)用程序運行出現(xiàn)問題忧勿,性能下降或掛起。
不同點:

  1. 內(nèi)存泄露是導致內(nèi)存溢出的原因之一瞻讽;內(nèi)存泄露積累起來將導致內(nèi)存溢出鸳吸。
    2)內(nèi)存泄露可以通過完善代碼來避免;內(nèi)存溢出可以通過調(diào)整配置來減少發(fā)生頻率速勇,但無法徹底避免晌砾。

12.廣播的兩種注冊方法,有什么區(qū)別
動態(tài)注冊:動態(tài)注冊的優(yōu)先級高于靜態(tài)注冊,Activity關(guān)閉不能接受廣播烦磁,無需在清單文件注冊
靜態(tài)注冊:Activity關(guān)閉還能接受廣播养匈,只要設(shè)備處于開啟狀態(tài)就能接收

Android 進階篇:
1.為什么會出現(xiàn)ANR,如何避免ANR
出現(xiàn)的原因有三種:
a)KeyDispatchTimeout(5 seconds)主要類型按鍵或觸摸事件在特定時間內(nèi)無響應(yīng)
b)BroadcastTimeout(10 seconds)BoradcastReceiver在特定的時間內(nèi)無法處理
c)ServiceTimeout(20 seconds)小概率類型Service在特定的時間內(nèi)無法處理完成

避免ANR最核心的一點就是在主線程減少耗時操作都伪。通常需要從那個以下幾個方案下手:
a)使用子線程處理耗時IO操作
b)降低子線程優(yōu)先級乖寒,使用Thread或者HandlerThread時,調(diào)用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)設(shè)置優(yōu)先級院溺,否則仍然會降低程序響應(yīng)楣嘁,因為默認Thread的優(yōu)先級和主線程相同
c)使用Handler處理子線程結(jié)果,而不是使用Thread.wait()或者Thread.sleep()來阻塞主線程
d)Activity的onCreate和onResume回調(diào)中盡量避免耗時的代碼
e)BroadcastReceiver中onReceiver代碼也要盡量減少耗時操作,建議使用intentService處理逐虚。intentService是一個異步的聋溜,會自動停止的服務(wù),很好解決了傳統(tǒng)的Service中處理完耗時操作忘記停止并銷毀Service的問題

2.什么是三級緩存叭爱?三級緩存的原理
網(wǎng)絡(luò)加載撮躁,不優(yōu)先加載,速度慢买雾,浪費流量
本地緩存把曼,次優(yōu)先加載,速度快
內(nèi)存緩存漓穿,優(yōu)先加載嗤军,速度最快
首次加載Android App時,肯定要通過網(wǎng)絡(luò)交互來獲取圖片晃危,之后我們可以將圖片保存至本地SD卡和內(nèi)存中叙赚,之后運行APP時,優(yōu)先訪問內(nèi)存中的圖片緩存僚饭,若內(nèi)存中沒有震叮,則加載本地SD卡中圖片,最后選擇訪問網(wǎng)絡(luò)

3.ListView卡頓的原因以及優(yōu)化策略
重用converView
減少findViewById()操作
避免在getView()方法中做耗時的操作
item的布局層次結(jié)構(gòu)盡量簡單鳍鸵,避免布局太深或者不必要的重繪
盡量能保證Adapter的hasStablelds()返回true
在一些場景中苇瓣,ScollView內(nèi)會包含多個ListView,可以把ListView的高度寫死固定下來
使用RecycleView代替ListView
ListView中元素避免半透明
盡量開啟硬件加速

4.View的繪制過程
一個View要顯示在界面上偿乖,需要經(jīng)歷一個 View樹的遍歷過程击罪,這個過程又可以分為三個過程,也就是自定義View中的三要素:大小汹想,位置外邓,畫什么,即onMesure() , onLayout() , onDraw()
1.onMesure()確定一個View的大小
2.onLayout()確定View在父節(jié)點上的位置
3.onDraw()繪制View的內(nèi)容

5.簡述AIDL機制
AIDL(Android Interface Definition Language),Android 接口定義語言古掏,Android 提供的IPC(InterProcess Communication,進程間通信)的一種獨特實現(xiàn)损话。
使用AIDL只有在你允許來自不同應(yīng)用的客戶端夸進程通信訪問你的service,并且想要在你的service中處理多線程的時候才時必要的。如果你不需要執(zhí)行不同應(yīng)用之間的IPC并發(fā)槽唾,你應(yīng)該通過實現(xiàn)Binder建立你的接口丧枪,或者如果你想執(zhí)行IPC,但是不需要處理多線程庞萍。那么使用Messenger實現(xiàn)你的接口
a)建立.aidl文件
b)實現(xiàn)這個接口
c)暴露這個接口給客戶端

6.簡述android事件分發(fā)機制
android事件分發(fā)機制就是一個觸摸事件發(fā)生了拧烦,從一個窗口傳遞到一個視圖,再傳遞到另外一個視圖钝计,最后被消費的過程恋博,在android中還是比較復雜的傳遞流程齐佳。如下:
a)事件從Activity.dispatchTouchEvent()開始傳遞,只要沒有被停止或者攔截债沮,從最上層的View(ViewGroup)開始一直往下(子View)傳遞炼吴。子View可以通過onTouchEvent()對事件進行處理
b)事件由父View(ViewGroup)傳遞給子View,ViewGroup可以通過onInterceptTouchEvent()對事件做攔截疫衩,停止其往下傳遞
c)如果事件從上往下傳遞過程中一直沒有被停止硅蹦,且最底層子View沒有消費事件,事件會反向往上傳遞闷煤,這時父View(ViewGroup)可以進行消費童芹,如果還是沒有被消費的話,最后會到Activity的onTouchEvent()函數(shù)
d)如果View沒有對ACTION_DOEN進行消費鲤拿,之后其他的事件不會傳遞過來
e)onTouchListener優(yōu)先于onTouchEvent()對事件進行消費

7.簡述Handler機制
Handler的作用就是:調(diào)度消息和runnable對象去被執(zhí)行假褪;使動作在不同的線程中被執(zhí)行
Handler機制上android中異步消息處理機制,也就是異步消息處理線程啟動后會進入一個無限循環(huán)體之中皆愉,每循環(huán)一次嗜价,從其內(nèi)部的消息隊列中取出一個消息艇抠,然后回調(diào)相應(yīng)的消息處理函數(shù)幕庐,執(zhí)行完成一個消息后則繼續(xù)循環(huán)。若消息隊列為空家淤,線程則會阻塞等待异剥。而它們之間的關(guān)系是,消息循環(huán)Looper負責創(chuàng)建一個消息隊列MessageQueue絮重,而消息隊列MessageQueue是消息Message的容器冤寿,也是裝消息Message的地方,然后進入一個無限循環(huán)體不斷從該消息隊列MessageQueue中讀取消息青伤,而消息的創(chuàng)建者和處理者就是一個或多個Handler

8.你是如何進行性能優(yōu)化的
這個自己根據(jù)實際情況回復督怜。
這里推薦一下內(nèi)存泄漏檢測框架 Leakcanary,不會用的可以看下我寫過這樣的一篇文章
LeakCanary直面項目中的內(nèi)存泄露

邏輯題:
1.有兩個杯子狠角,一個5升一個6升号杠,很多水,請問如何取得3升水
先裝滿5升的倒進6升的丰歌,再裝滿五升的把五升的往剛剛有五升水的六升杯子里裝姨蟋,得到4升水和6升滿的水,倒掉6升滿的把4升往6升里到再裝滿5升的往剛剛倒4升的6升杯子里倒立帖。得到3升水

2.有27個人要買水,每3瓶礦泉水瓶子可以換1瓶礦泉水,請問要買多少瓶水剛好夠27人喝
設(shè)應(yīng)買X瓶水
則X+X/3+X/9=27 13X=243 X=18.6 X取整數(shù)為19
買19瓶水眼溶,換19/3=6瓶余1瓶 6瓶可以再換2瓶 2瓶加上剛余的一瓶可再換1瓶
一共可以換19+6+2+1=28瓶

3.小吳小張小趙3人是好朋友,他們一個人經(jīng)商晓勇,一個人上大學堂飞,一個人當兵灌旧,小趙的年齡比士兵大,大學生的年齡比小張小绰筛,小吳的年齡和大學生的年齡不一樣节榜。那他們誰是商人,誰是大學生别智,誰是士兵
小王是士兵,張是商人,趙是大學生(結(jié)論自己推)

4.已知:有五位小姐排成一列 所有小姐穿的衣服顏色都不一樣 所有小姐的姓也不同 所有的小姐都養(yǎng)不同的寵物宗苍,喝不同的飲料,吃不同的水果 錢小姐穿紅色的衣服 翁小姐養(yǎng)了一只狗 陳小姐喝茶 穿綠衣服的站在穿白衣服的左邊穿綠衣服的小姐喝咖啡 吃西瓜的小姐養(yǎng)鳥 穿黃衣服的小姐吃橙子 站在中間的小姐喝牛奶 趙小姐站在最左邊 吃橘子的小姐站在養(yǎng)貓的隔壁 養(yǎng)魚的小姐隔壁吃橙子 吃蘋果的小姐喝香檳 江小姐吃香蕉 趙小姐站在藍衣服的隔壁 只喝開水的小姐站在吃橘子的隔壁
問:哪位小姐養(yǎng)蛇
答:題目源自1981年柏林的德國邏輯思考學院改編的薄榛,98%的測試者無法解題 (國內(nèi)某家半導體設(shè)計公司曾以此題目招考員工)
邏輯思維好的可以做著試試看讳窟,下面是答案及推理過程
http://blog.csdn.net/georgechen_ena/article/details/6726735

▲寫在之后的話:
目前的話,能想到的就是這些敞恋。還有一些丽啡,簡短的文字并不能很好的表達出來,還是要靠自己去理解硬猫。比如面試中补箍,handler相關(guān)的問題總是會被人追根究底,handler的源碼還是有必要了解啸蜜。項目中如果使用了網(wǎng)絡(luò)框架(包括OkHttp坑雅、Retrofit、NoHttp衬横、xUtils3等)裹粤,響應(yīng)式編程rx系列(RxJava,RxAndroid,RxBinding等),事件總線框架(EventBus蜂林、otto等)遥诉,至少在面試的時候能清楚的說出任意一個的源碼。并且寫在簡歷上的項目噪叙,其中包含的技術(shù)矮锈,能清晰使用語言表達并熟練的使用。
最后推薦一個簡書面試專輯睁蕾,其中收錄了大量的面試題苞笨,面試題經(jīng)驗,老司機給新人的建議惫霸,非常值得關(guān)注猫缭。
code小生《Android面試專輯》

關(guān)于我

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壹店,隨后出現(xiàn)的幾起案子猜丹,更是在濱河造成了極大的恐慌,老刑警劉巖硅卢,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件射窒,死亡現(xiàn)場離奇詭異藏杖,居然都是意外死亡,警方通過查閱死者的電腦和手機脉顿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門蝌麸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艾疟,你說我怎么就攤上這事来吩。” “怎么了蔽莱?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵弟疆,是天一觀的道長。 經(jīng)常有香客問我盗冷,道長怠苔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任仪糖,我火速辦了婚禮柑司,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锅劝。我一直安慰自己攒驰,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布鸠天。 她就那樣靜靜地躺著讼育,像睡著了一般帐姻。 火紅的嫁衣襯著肌膚如雪稠集。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天饥瓷,我揣著相機與錄音剥纷,去河邊找鬼。 笑死呢铆,一個胖子當著我的面吹牛晦鞋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棺克,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了罗岖?” 一聲冷哼從身側(cè)響起恬叹,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纱皆,沒想到半個月后湾趾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芭商,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年搀缠,在試婚紗的時候發(fā)現(xiàn)自己被綠了铛楣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡艺普,死狀恐怖簸州,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歧譬,我是刑警寧澤勿侯,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站缴罗,受9級特大地震影響助琐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜面氓,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一兵钮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舌界,春花似錦掘譬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藐握,卻和暖如春靴拱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猾普。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工袜炕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人初家。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓偎窘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溜在。 傳聞我的和親對象是個殘疾皇子陌知,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

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