這是一篇介紹android面試題的文章,下面就讓我們一起來了解一下吧!
公司主營業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出雁江免費(fèi)做網(wǎng)站回饋大家。
1.android dvm 的進(jìn)程和Linux的進(jìn)程,應(yīng)用程序的進(jìn)程是否為同一個(gè)概念:
答:dvm是dalivk虛擬機(jī)。每一個(gè)android應(yīng)用程序都在自己的進(jìn)程中運(yùn)行,都擁有一個(gè)dalivk虛擬機(jī)實(shí)例。而每一個(gè)dvm都是在linux的一個(gè)進(jìn)程。所以說可以認(rèn)為是同一個(gè)概念。
2.android的動(dòng)畫有哪幾種?他們的特點(diǎn)和區(qū)別是什么?
答:兩種,一種是tween動(dòng)畫,一種是frame動(dòng)畫。tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng),放大或縮小以及產(chǎn)生透明度的變化。frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。
3.handler進(jìn)制的原理:
答:android提供了handler和looper來滿足線程間的通信。Handler先進(jìn)先出原則。looper用來管理特定線程內(nèi)對(duì)象之間的消息交換(message Exchange).
1)looper:一個(gè)線程可以產(chǎn)生一個(gè)looper對(duì)象,由它來管理此線程里的message queue(消息隊(duì)列)
2)handler:你可以構(gòu)造一個(gè)handler對(duì)象來與looper溝通,以便push新消息到messagequeue里;或者接收looper(從messagequeue里取出)所送來的消息。
3)messagequeue:用來存放線程放入的消息。
4)線程:UI thread 通常就是main thread,而android啟動(dòng)程序時(shí)會(huì)為它建立一個(gè)message queue.
4.android view的刷新:
答:Android中對(duì)View的更新有很多種方式,使用時(shí)要區(qū)分不同的應(yīng)用場(chǎng)合。我感覺最要緊的是分清:多線程和雙緩沖的使用情況。
1).不使用多線程和雙緩沖
這種情況最簡單了,一般只是希望在View發(fā)生改變時(shí)對(duì)UI進(jìn)行重繪。你只需在Activity中顯式地調(diào)用View對(duì)象中的invalidate()方法即可。系統(tǒng)會(huì)自動(dòng)調(diào)用 View的onDraw()方法。
2).使用多線程和不使用雙緩沖
這種情況需要開啟新的線程,新開的線程就不好訪問View對(duì)象了。強(qiáng)行訪問的話會(huì)報(bào):android.view.ViewRoot$CalledFromWrongThreadException:Only the originalthread that created a view hierarchy can touch its views.
這時(shí)候你需要?jiǎng)?chuàng)建一個(gè)繼承了android.os.Handler的子類,并重寫handleMessage(Messagemsg)方法。android.os.Handler是能發(fā)送和處理消息的,你需要在Activity中發(fā)出更新UI的消息,然后再你的Handler(可以使用匿名內(nèi)部類)中處理消息(因?yàn)槟涿麅?nèi)部類可以訪問父類變量,你可以直接調(diào)用View對(duì)象中的invalidate()方法 )。也就是說:在新線程創(chuàng)建并發(fā)送一個(gè)Message,然后再主線程中捕獲、處理該消息。
3).使用多線程和雙緩沖
Android中SurfaceView是View的子類,她同時(shí)也實(shí)現(xiàn)了雙緩沖。你可以定義一個(gè)她的子類并實(shí)現(xiàn)SurfaceHolder.Callback接口。由于實(shí)現(xiàn)SurfaceHolder.Callback接口,新線程就不需要android.os.Handler幫忙了。SurfaceHolder中l(wèi)ockCanvas()方法可以鎖定畫布,繪制玩新的圖像后調(diào)用unlockCanvasAndPost(canvas)解鎖(顯示),還是比較方便得。
5.說說mvc模式的原理,它在android中的運(yùn)用:
答:android的官方建議應(yīng)用程序的開發(fā)采用mvc模式。何謂mvc?
mvc是model,view,controller的縮寫,mvc包含三個(gè)部分:
l模型(model)對(duì)象:是應(yīng)用程序的主體部分,所有的業(yè)務(wù)邏輯都應(yīng)該寫在該層。
2視圖(view)對(duì)象:是應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。也是在整個(gè)mvc架構(gòu)中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結(jié)果。
3控制器(control)對(duì)象:是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新model對(duì)象狀態(tài)的部分,控制器更重要的一種導(dǎo)航功能,想用用戶出發(fā)的相關(guān)事件,交給m哦得了處理。
android鼓勵(lì)弱耦合和組件的重用,在android中mvc的具體體現(xiàn)如下:
1)視圖層(view):一般采用xml文件進(jìn)行界面的描述,使用的時(shí)候可以非常方便的引入,當(dāng)然,如何你對(duì)android了解的比較的多了話,就一定 可以想到在android中也可以使用javascript+html等的方式作為view層,當(dāng)然這里需要進(jìn)行java和javascript之間的通 信,幸運(yùn)的是,android提供了它們之間非常方便的通信實(shí)現(xiàn)。
2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業(yè)務(wù)邏輯層處理, 這樣做的另外一個(gè)原因是android中的acitivity的響應(yīng)時(shí)間是5s,如果耗時(shí)的操作放在這里,程序就很容易被回收掉。
3)模型層(model):對(duì)數(shù)據(jù)庫的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)該在model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算等操作也是必須放在的該層的。
6.Activity的生命周期:
答:onCreate: 在這里創(chuàng)建界面,做一些數(shù)據(jù) 的初始化工作
onStart: 到這一步變成用戶可見不可交互的
onResume:變成和用戶可交互 的,(在activity 棧系統(tǒng)通過棧的方式管理這些個(gè)Activity的最上面,運(yùn)行完彈出棧,則回到上一個(gè)Activity)
onPause: 到這一步是可見但不可交互的,系統(tǒng)會(huì)停止動(dòng)畫 等消耗CPU 的事情從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在
onstop: 變得不可見,被下一個(gè)activity覆蓋了
onDestroy: 這是activity被干掉前最后一個(gè)被調(diào)用方法了,可能是外面類調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時(shí)性的干掉
7.讓Activity變成一個(gè)窗口:
答:Activity屬性設(shè)定:有時(shí)候會(huì)做個(gè)應(yīng)用程序是漂浮在手機(jī)主界面的。這個(gè)只需要在設(shè)置下Activity的主題theme,即在Manifest.xml定義Activity的地方加一句:
android :theme="@android:style/Theme.Dialog"
如果是作半透明的效果:
android:theme="@android:style/Theme.Translucent"
8.Android中常用的五種布局:
答:LinearLayout線性布局;AbsoluteLayout絕對(duì)布局;TableLayout表格布局;RelativeLayout相對(duì)布局;FrameLayout幀布局;
9.Android的五種數(shù)據(jù)存儲(chǔ)方式:
答:sharedPreferences;文件;SQLite;contentProvider;網(wǎng)絡(luò)
10.請(qǐng)解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關(guān)系:
答:Handler獲取當(dāng)前線程中的looper對(duì)象,looper用來從存有Message的Message Queue里取出message,再由Handler進(jìn)行message的分發(fā)和處理。
11.AIDL的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)?
答:AIDL(AndroidInterface Definition Language)android接口描述語言
12.系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請(qǐng)說明原由:
答:通過直接發(fā)送Uri把參數(shù)帶過去,或者通過manifest里的intentfilter里的data屬性。代碼如下:
Intent intent = new Intent();
Intent.setAction(“android.intent.action.View”);
Uri uriBrowsers = Uri.parse(“”);
Intent.setData(uriBrowsers);
//包名、要打開的activity
intent.setClassName(“com.android.browser”,”com.android.browser.BrowserActivity”);
startActivity(intent);
13.什么是ANR,如何避免?
答:ANR的定義:
在android上,如果你的應(yīng)用程序有一段時(shí)間響應(yīng)不移靈敏,系統(tǒng)會(huì)向用戶提示“應(yīng)用程序無響應(yīng)”(ANR:application Not Responding)對(duì)話框。因此,在程序里對(duì)響應(yīng)性能的設(shè)計(jì)很重要,這樣,系統(tǒng)不會(huì)顯示ANR給用戶。
如何避免:
首先來研究下為什么它會(huì)在android的應(yīng)用程序里發(fā)生和如何最佳構(gòu)建應(yīng)用程序來避免ANR.
android應(yīng)用程序通常是運(yùn)行在一個(gè)單獨(dú)的線程(例如:main)里,這就意味你的應(yīng)用程序所做的事情如果在主線程里占用了大長時(shí)間的話,就會(huì)引發(fā)ANR對(duì)話框,因?yàn)槟愕膽?yīng)用程序并沒有給自己機(jī)會(huì)來處理輸入事件或者Intent廣播。
因此,運(yùn)行在主線程里的任何訪求都盡可能少做事情。特別是,activity應(yīng)該在它的關(guān)鍵生命周期方法(onCreate()和onResume())里盡可能少的去作創(chuàng)建操作。潛在的耗時(shí)操作,例如網(wǎng)絡(luò)或數(shù)據(jù)庫操作,或者高耗時(shí)的計(jì)算如改變位圖尺寸,應(yīng)該在子線程里(或者以數(shù)據(jù)庫操作為例,通過異步請(qǐng)求的方式)來完成。然而,不是說你的主線程阻塞在那里等待子線程的完成---也不是調(diào)用Thread.wait()或者Thread.sleep()。替代的方法是:主線程應(yīng)該為子線程提供一個(gè)Handler,以便完成時(shí)能夠提交給主線程。以這種方式設(shè)計(jì)你的應(yīng)用程序,將能保證你的主線程保持對(duì)輸入的響應(yīng)性并能避免由5秒輸入事件的超時(shí)引發(fā)的ANR對(duì)話框。這種做法應(yīng)該在其它顯示UI的線程里效仿,因?yàn)樗鼈兌际芟嗤某瑫r(shí)影響。
IntentReceiver執(zhí)行時(shí)間的特殊限制意味著它應(yīng)該做:在后臺(tái)里做小的、瑣碎的工作,如保存設(shè)定或注冊(cè)一個(gè)Notification。和在主線程里調(diào)用的其它方法一樣,應(yīng)用程序應(yīng)該避免在BroadcastReceiver里做耗時(shí)的操作或計(jì)算,但也不是在子線程里做這些任務(wù)(因?yàn)锽roadcastReceiver的生命周期短),替代的是,如果響應(yīng)Intent廣播需要執(zhí)行一個(gè)耗時(shí)的動(dòng)作的話,應(yīng)用程序應(yīng)該啟動(dòng)一個(gè)Service。順便提及一句,你也應(yīng)該避免在Intent Receiver里啟動(dòng)一個(gè)Activity,因?yàn)樗鼤?huì)創(chuàng)建一個(gè)新的畫面,并從當(dāng)前用戶正在運(yùn)行的程序上搶奪焦點(diǎn)。如果你的應(yīng)用程序在響應(yīng)Intent廣播時(shí)需要向用戶展示什么,你應(yīng)該使用Notification Manager來實(shí)現(xiàn)。
一般來說,在應(yīng)用程序里,100到200ms是用戶能感知阻滯的時(shí)間閾值,下面總結(jié)了一些技巧來避免ANR,并有助于讓你的應(yīng)用程序看起來有響應(yīng)性。
如果你的應(yīng)用程序?yàn)轫憫?yīng)用戶輸入正在后臺(tái)工作的話,可以顯示工作的進(jìn)度(ProgressBar和ProgressDialog對(duì)這種情況來說很有用)。特別是游戲,在子線程里做移動(dòng)的計(jì)算。如果你的程序有一個(gè)耗時(shí)的初始化過程的話,考慮可以顯示一個(gè)Splash Screen或者快速顯示主畫面并異步來填充這些信息。在這兩種情況下,你都應(yīng)該顯示正在進(jìn)行的進(jìn)度,以免用戶認(rèn)為程序被凍結(jié)了。
14.什么情況會(huì)導(dǎo)致Force Close?如何避免?能否捕獲導(dǎo)致其的異常?
答:如空指針等可以導(dǎo)致ForceClose;可以看Logcat,然后找到對(duì)應(yīng)的程序代碼來解決錯(cuò)誤。
15.橫豎屏切換時(shí)候的activity的生命周期:
答:
1) 新建一個(gè)activity,并把各個(gè)生命周期打印出來
2) 運(yùn)行activity,得到如下信息:
onCreate()à
onStart()à
onResume()à
3) 按ctrl+F12切換成橫屏?xí)r
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
4) 再按ctrl+f12切換成豎屏?xí)r,發(fā)現(xiàn)打印了兩次相同的Log
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
5) 修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執(zhí)行步驟3
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
6) 修改AndroidManifest.xml,把該Activity添加android:configChanges=“orientation”,執(zhí)行步驟4,發(fā)現(xiàn)不會(huì)再打印相同信息,但多打印了一行onConfigChanged
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
onConfigurationChanged()à
7) 把步驟5的android:configChanges=“orientation”改成
android:configChanges=“orientation|keyboradHidden”,執(zhí)行步驟3,就只打印onConfigChanged
onConfigurationChanged()à
8) 把步驟5的android:configChanges=“orientation”改成
android:configChanges=“orientation|keyboradHidden”,執(zhí)行步驟4
onConfigurationChanged()à
onConfigurationChanged()à
總結(jié):
1) 不設(shè)置activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次。
2) 設(shè)置activity的android:configChanges=“orientation”時(shí), 切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏、豎屏?xí)r都只會(huì)執(zhí)行一次,但是豎屏最后多打印一條onConfigurationChanged()
3) 設(shè)置activity的android:configChanges=“orientation|keyboardHidden”時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged(),橫屏一次,豎屏兩次
再總結(jié)下整個(gè)activity的生命周期:
1) 當(dāng)前activity產(chǎn)生事件彈出Toast和AlertDialog的時(shí)候Activity的生命周期不會(huì)有改變
2) Activity運(yùn)行時(shí)按下HOME鍵(跟被完全覆蓋一樣的)
onSavaInstanceStateà
onPauseà
onStopà
onRestartà
onStartà
onResumeà
3) 未被完全覆蓋,只是失去焦點(diǎn):
onPauseà
onResumeà
16.如何將SQLite數(shù)據(jù)庫(.db文件)與apk文件一起發(fā)布?
答:可以將.db文件復(fù)制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會(huì)被壓縮,這樣可以直接提取該目錄中的文件??梢詫?db文件復(fù)制到res aw目錄中
17.如何將打開res aw目錄中的數(shù)據(jù)庫文件?
答:在Android中不能直接打開res aw目錄中的數(shù)據(jù)庫文件,而需要在程序第一次啟動(dòng)時(shí)將該文件復(fù)制到手機(jī)內(nèi)存或SD卡的某個(gè)目錄中,然后再打開該數(shù)據(jù)庫文件。復(fù)制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對(duì)象,然后將該InputStream對(duì)象中的數(shù)據(jù)寫入其他的目錄中相應(yīng)文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數(shù)據(jù)庫文件。
18.android 中有哪幾種解析xml的類?官方推薦哪種?以及它們的原理和區(qū)別:
答:XML解析主要有三種方式,SAX、DOM、PULL。常規(guī)在PC上開發(fā)我們使用Dom相對(duì)輕松些,但一些性能敏感的數(shù)據(jù)庫或手機(jī)上還是主要采用SAX方 式,SAX讀取是單向的,優(yōu)點(diǎn):不占內(nèi)存空間、解析屬性方便,但缺點(diǎn)就是對(duì)于套嵌多個(gè)分支來說處理不是很方便。而DOM方式會(huì)把整個(gè)XML文件加載到內(nèi)存 中去,這里Android開發(fā)網(wǎng)提醒大家該方法在查找方面可以和XPath很好的結(jié)合如果數(shù)據(jù)量不是很大推薦使用,而PULL常常用在J2ME對(duì)于節(jié)點(diǎn)處 理比較好,類似SAX方式,同樣很節(jié)省內(nèi)存,在J2ME中我們經(jīng)常使用的KXML庫來解析。
19.DDMS和TraceView的區(qū)別?
答:DDMS是一個(gè)程序執(zhí)行查看器,在里面可以看見線程和堆棧等信息,TraceView是程序性能分析器
20.談?wù)凙ndroid的IPC機(jī)制:
答:IPC是內(nèi)部進(jìn)程通信的簡稱,是共享"命名管道"的資源。Android中的IPC機(jī)制是為了讓Activity和Service之間可以隨時(shí)的進(jìn)行交互,故在Android中該機(jī)制,只適用于Activity和Service之間的通信,類似于遠(yuǎn)程方法調(diào)用,類似于C/S模式的訪問。通過定義AIDL接口文件來定義IPC接口。Servier端實(shí)現(xiàn)IPC接口,Client端調(diào)用IPC接口本地代理。
21.NDK是什么:
答:NDK是一系列工具的集合
NDK提供了一系列的工具,幫助開發(fā)者迅速的開發(fā)C/C++的動(dòng)態(tài)庫,并能自動(dòng)將so和java應(yīng)用打成apk包
NDK集成了交叉編譯器,并提供了相應(yīng)的mk文件和隔離cpu,平臺(tái)等的差異,開發(fā)人員只需簡單的修改mk文件就可以創(chuàng)建出so
22.描述一下android的系統(tǒng)架構(gòu):
答:android系統(tǒng)架構(gòu)分從下往上為Linux內(nèi)核層、運(yùn)行庫、應(yīng)用程序框架層和應(yīng)用程序?qū)印?/p>
Linux內(nèi)核層:負(fù)責(zé)硬件的驅(qū)動(dòng)程序、網(wǎng)絡(luò)、電源、系統(tǒng)安全以及內(nèi)存管理等功能。
運(yùn)行庫和androidruntion:運(yùn)行庫:即c/c++函數(shù)庫部分,大多數(shù)都是開放源代碼的函數(shù)庫,例如webkit,該函數(shù)庫負(fù)責(zé)android網(wǎng)頁瀏覽器的運(yùn)行;例如標(biāo)準(zhǔn)的c函數(shù)庫libc、openssl、sqlite等,當(dāng)然也包括支持游戲開發(fā)的2dsgl和3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,如mpeg4、h.264、mp3、aac、amr、jpg和png等眾多的多媒體文件格式。Androidruntion負(fù)責(zé)解釋和執(zhí)行生成的dalvik格式的字節(jié)碼
應(yīng)用軟件架構(gòu):java應(yīng)用程序開發(fā)人員主要是使用該層封裝好的api進(jìn)行快速開發(fā)的。
應(yīng)用程序?qū)樱涸搶邮莏ava的應(yīng)用程序?qū)?,android內(nèi)置的googlemaps、email、IM、瀏覽器等,都處于該層,java開發(fā)人員工發(fā)的程序也處于該層,而且和內(nèi)置的應(yīng)用程序具有平等的地位,可以調(diào)用內(nèi)置的應(yīng)用程序,也可以替換內(nèi)置的應(yīng)用程序
到現(xiàn)在我入職也有一段時(shí)間了,這才有空梳理一下當(dāng)時(shí)的面試題。簡單說下我的情況:這是一次比較平常的跳槽,不是什么逆襲大廠的劇本,只是薪資有所漲幅。
個(gè)人經(jīng)歷不詳說,面試題對(duì)大家來說可能更有參考性,本篇先整理小米的面試題,我前后也面了很多個(gè)大廠,有空把其他幾個(gè)大廠的面試題也總結(jié)一下。
Java基礎(chǔ)肯定是少不了要問的,這輪面試Kotlin相對(duì)來說是我這些面試中問得比較多的,所以說準(zhǔn)備面試還是要面面俱到。
我有點(diǎn)佩服我的記憶力了。這部分涉及到更多的 源碼、原理和優(yōu)化 方面的問題,Android高級(jí)開發(fā)需要具備一些什么能力大家也應(yīng)該有所衡量了。
最后給大家分享一份 2246頁 的 Android大廠高頻面試題解析大全 ,基本上把我的面試內(nèi)容都涵蓋到了: Android、性能優(yōu)化、Java、Kotlin、網(wǎng)絡(luò)、插件化、熱修復(fù)、模塊化、組件化、增量更新、Gradle、圖片、Flutter等。
這份資料免費(fèi)提供給大家復(fù)習(xí),文末查看領(lǐng)取方式,搞定Android面試這一份肯定夠了。
第一章 Android相關(guān) (源碼分析、性能優(yōu)化、Framework等)
第二章 性能優(yōu)化 (GC原理、布局優(yōu)化、繪制優(yōu)化、內(nèi)存優(yōu)化等)
第三章 Java相關(guān) (四種線程池、JVM、內(nèi)存管理、垃圾回收、引用等)
第四章 Kotlin相關(guān) (延遲初始化、Reified、Extension Functions、函數(shù)等)
第五章 網(wǎng)絡(luò)相關(guān) (HTTP 知識(shí)體系、HttpDns 原理、TCP,UDP,HTTP,SOCKET 之間的區(qū)別等)
第六章 插件化熱修復(fù)模塊化組件化增量更新Gradle
第七章 圖片相關(guān) (圖片庫對(duì)比、LRUCache原理、圖片加載原理、Glide等)
第八章 Flutter相關(guān) (Flutter原理、Flutter Hot Reload、Flutter 動(dòng)態(tài)化 探索 、Flutter Platform Channel等)
需要這份資料的朋友私信我【面試題】就可以免費(fèi)領(lǐng)取。
希望大家都可以把握住每一次自我提升的機(jī)會(huì),把每一步都走踏實(shí)了,漲薪升職什么的都會(huì)迎你而來。
也歡迎大家和我一起交流Android方面的事情。
大廠資深面試官 ?帶你破解Android高級(jí)面試免費(fèi)下載
鏈接: ?
?pwd=em2q 提取碼: em2q ?
《Android高薪之路:Android程序員面試寶典》取材于各大IT公司面試真題,所給出的試題盡可能地覆蓋了Android應(yīng)用開發(fā)的各個(gè)方面,而且大多數(shù)試題都有解析部分,讀者可以通過這部分更深入地理解試題中所包含的技術(shù)內(nèi)容,希望真正做到由點(diǎn)成線,舉一反三。
我是從小公司跳出來的,最終入職OPPO,說實(shí)話這段時(shí)間的經(jīng)歷讓我深深地感受到,我們?yōu)樘圩龅囊恍┡R時(shí)抱佛腳的提升跟那些大佬的沉淀比起來太渺小了。我們都知道找資料學(xué)習(xí)、刷面試題,但也許只能應(yīng)付這一次的面試,后面還是會(huì)技術(shù)發(fā)愁,那些短時(shí)間背下來的東西遲早會(huì)忘掉, 大家還是做好長期提升自己的準(zhǔn)備,好好沉淀的東西最后才是屬于自己的。
說說當(dāng)時(shí)的面試過程,我是內(nèi)推獲得的面試機(jī)會(huì),很感謝當(dāng)時(shí)幫我內(nèi)推的兄弟,總共三輪面試,兩輪技術(shù),一輪HR面,當(dāng)天面試結(jié)束。
我10:10分到的公司,10:30開始面試,第一輪面試將近一個(gè)小時(shí),聊的點(diǎn)我基本上都答得上來,自我感覺良好。然后面試官讓我等一下,他去叫他們老大來給我二面,我等了有二十幾分鐘吧,二面有一個(gè)多小時(shí),這次問的比較深,有些地方答的有些嗑吧,總體來說我自己是滿意的。HR面約到下午了,整個(gè)流程下來每輪面試官都讓人感覺很不錯(cuò),我自己做的準(zhǔn)備也讓我面試感覺下來很爽。
我把面試遇到過的以及自己學(xué)習(xí)用到過相關(guān)內(nèi)容都整理到一起了,方便自己進(jìn)行復(fù)盤和后續(xù)的查漏補(bǔ)缺:
一、 Java基礎(chǔ)
1.1 靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的比較
1.2 多態(tài)的理解與應(yīng)用
1.3 java方法的多態(tài)性理解
1.4 java中接口和繼承的區(qū)別
1.5 線程池的好處,詳解,單例(絕對(duì)好記)
1.6 線程池的優(yōu)點(diǎn)及其原理
1.7 線程池的優(yōu)點(diǎn)(重點(diǎn))
1.8 為什么不推薦通過Executors直接創(chuàng)建線程池
1.9 不怕難之BlockingQueue及其實(shí)現(xiàn)
1.10 深入理解ReentrantLock與Condition
1.11 Java多線程:線程間通信之Lock
1.12 Synchronized 關(guān)鍵字原理
1.13 ReentrantLock原理
1.14 HashMap中的Hash沖突解決和擴(kuò)容機(jī)制
1.14 Java并發(fā)
1.15 Java虛擬機(jī)
1.16 JVM常見面試題
1.17 JVM內(nèi)存結(jié)構(gòu)
1.18 類加載機(jī)制/雙親委托
二、 Android基礎(chǔ)
2.1 Activity知識(shí)點(diǎn)(必問)
2.2 Fragment知識(shí)點(diǎn)
2.3 Service知識(shí)點(diǎn)
2.4 Intent知識(shí)點(diǎn)
2.5 數(shù)據(jù)存儲(chǔ)
三、UI控件篇
3.1 屏幕適配
3.2 主要控件優(yōu)化
3.3 事件分發(fā)與嵌套滾動(dòng)
3.4 動(dòng)態(tài)化頁面構(gòu)建方案
四、網(wǎng)絡(luò)通信篇
4.1 網(wǎng)絡(luò)協(xié)議
五、架構(gòu)設(shè)計(jì)篇
5.1 MVP架構(gòu)設(shè)計(jì)
5.2 組件化架構(gòu)
六、性能優(yōu)化篇
6.1 啟動(dòng)優(yōu)化
6.2 內(nèi)存優(yōu)化
6.3 繪制優(yōu)化
6.4 安裝包優(yōu)化
七、源碼流程篇
7.1 開源庫源碼分析
7.2 Glide源碼分析
7.3 day 20 面試題:Glide面試題
7.4 聊一聊關(guān)于Glide在面試中的那些事
7.5 面試官:簡歷上如果寫Glide,請(qǐng)注意以下幾點(diǎn)…
7.6 Glide OOM問題解決方法匯總
7.7 LeakCanary源碼分析
7.8 OkHttp源碼分析
7.9 okhttp連接池復(fù)用機(jī)制
7.10 okhttp 流程和優(yōu)化的實(shí)現(xiàn)
7.11 一篇讓你受用的okhttp分析
7.12 OkHttp面試之–OkHttp的整個(gè)異步請(qǐng)求流程
7.13 OkHttp面試之–HttpEngine中的sendRequest方法詳解
7.14 OkHttp解析大總結(jié)
7.15 Okhttp任務(wù)隊(duì)列工作原理
7.16 Android高頻面試專題 - 架構(gòu)篇(二)okhttp面試必知必會(huì)
7.17 Android 網(wǎng)絡(luò)優(yōu)化,使用 HTTPDNS 優(yōu)化 DNS,從原理到 OkHttp 集成
7.18 Retrofit源碼分析
7.19 RxJava源碼分析
7.20 RxJava原理與源碼分析
7.21 RxJava如何進(jìn)行線程切換的?
7.22 Rxjava內(nèi)存泄漏防止方案——RxLifecycle,AutoDispose,RxLife框架
7.23 Tinker源碼分析
7.24 ARouter源碼分析
7.25 Android框架層源碼解析
7.26 算法設(shè)計(jì)
八、新技術(shù)篇
8.1 實(shí)戰(zhàn)問題篇
九、面試篇
9.1 開源文檔
9.2 面試文獻(xiàn)
以上就是我的學(xué)習(xí)和面試積累,有自己面試經(jīng)歷過的,也有整理的一些大廠面試題,篇幅有限,具體內(nèi)容就不展示了,我已經(jīng)整理成文檔了。
還是開頭說的,僅靠面試期間臨時(shí)抱佛腳和刷題對(duì)自身發(fā)展不是長久之計(jì),做好長期提升的規(guī)劃,好好沉淀每一次的學(xué)習(xí)和面試經(jīng)歷,把這些最終都轉(zhuǎn)化成屬于自己的東西才是實(shí)質(zhì)上對(duì)自己最有用的。
我經(jīng)歷過這么多年的摸爬滾打,面試過也被面試過?,F(xiàn)總結(jié)與歸納Android開發(fā)相關(guān)面試題:
1、Activity啟動(dòng)模式有哪些,分別有什么不同?
2、Service啟動(dòng)模式有哪些,對(duì)應(yīng)的生命周期?IntentService呢?
3、ContentProvider的作用,是否支持多線程和多進(jìn)程
4、Broadcast的注冊(cè)方式,對(duì)應(yīng)的生命周期是什么,有序和無序那種可以中斷廣播?
5、AsyncTask的作用,如何使用(包括有哪些方法,能說出同步異步,能說出不同Android版本下的區(qū)別加分)
6、有哪些異步的方式?
7、Handler機(jī)制
8、Dialog的使用及其生命周期
9、Activity的生命周期,能否改?
10、Fragment的生命周期,能否改?
11、Activity和Fragment如何通信
12、View的繪制機(jī)制
13、View的事件傳遞機(jī)制
14、如何監(jiān)聽手勢(shì)
15、ImageView設(shè)置圖片顯示有哪幾種模式,有什么區(qū)別?
16、有哪些存儲(chǔ)方式
17、SharedPreferences是否支持多進(jìn)程、多線程
別看以上常問的是入門級(jí)的,但是有兩三年開發(fā)經(jīng)驗(yàn)?zāi)芑卮饒A滿的人不多。
1、如何理解Activity的任務(wù)親和性
2、如何讓Service為單獨(dú)的進(jìn)程
3、IntentService的實(shí)現(xiàn)原理
4、LocalBroadcast的作用,實(shí)現(xiàn)原理,相對(duì)于Broadcast的優(yōu)勢(shì)在哪,劣勢(shì)在哪
5、Handler的缺點(diǎn),會(huì)不會(huì)造成內(nèi)存泄漏,有則如何解決
6、Fragment與Activity的區(qū)別和聯(lián)系
7、Fragment如何緩存布局
8、Fragment與ViewPager的搭配使用,有沒有問題重疊問題,怎么解決
9、同時(shí)提供側(cè)滑和上下滑動(dòng),如何解決事件傳播問題
10、是否使用過Design包
11、嵌套滑動(dòng)理解
12、behavior的原理
13、對(duì)設(shè)計(jì)模式有什么看法,經(jīng)常使用的有哪些?
中級(jí)的稍微偏底層一些,這個(gè)主要考察平時(shí)是否關(guān)注而不是一味地懟業(yè)務(wù)需求
1、Activity的啟動(dòng)過程
2、Service創(chuàng)建為單獨(dú)進(jìn)程會(huì)有哪些問題?
3、簡述AIDL的構(gòu)建過程
4、IPC機(jī)制有哪些?
5、android多進(jìn)程通信方式,內(nèi)部原理
6、App啟動(dòng)的入口在哪?
7、LRU緩存算法
8、Bitmap的有哪幾種壓縮算法,有啥區(qū)別?
9、圖片在手機(jī)本地存儲(chǔ)大小和在內(nèi)存大小是否一致,為什么,Android默認(rèn)像素一般占幾個(gè)字節(jié)?
10、第三方框架的熟練程度,如:
11、SharedPreference內(nèi)部實(shí)現(xiàn)原理
12、模塊化、插件話、組件化等分別有什么區(qū)別,對(duì)用有什么好處
13、說說MV * 模式,并畫出做過項(xiàng)目的架構(gòu)圖
14、對(duì)跨平臺(tái)方案有哪些了解,使用過哪些? 比如RN
15、對(duì)大前端有什么看法,了解多少?使用過什么?
16、對(duì)其他語言的了解,kotlin,python、php、c++等
17、興趣愛好是什么?對(duì)未來有什么規(guī)劃?
目前是一些經(jīng)常會(huì)被問到的,當(dāng)然只是列舉了Android 開發(fā)方向的,Java的一些還沒列舉,比如異常、網(wǎng)絡(luò)、多線程、JCF等等
以上問題的答案在下面都有詳細(xì)解答,我們不僅整理了這些資料,而且還有一份長達(dá)"635頁"的Android資料匯總:
包括:底層原理+項(xiàng)目實(shí)戰(zhàn)+面試專題
雖說Android早已不像過去那般火爆,但各大廠對(duì)于中高級(jí)開發(fā)者仍舊是求賢若渴,想要獲取更豐厚的薪資,打鐵還得自身硬。對(duì)于框架、源碼、原理、項(xiàng)目實(shí)操經(jīng)驗(yàn),都必須有足夠的知識(shí)儲(chǔ)備,才可以在面試中擊敗面試官。但是由于網(wǎng)上的資料魚龍混雜,也不成體系,很多人在自我提升的過程中都頭疼不已。 這里就給大家分享一份字節(jié)大佬整理的《Android中高級(jí)面試題匯總(2022)》,幫助大家系統(tǒng)的梳理中高級(jí)Android知識(shí)!里面包含了所有Android面試的知識(shí)點(diǎn),刷完進(jìn)大廠妥妥的 !
(含:靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類的比較,多態(tài)的理解與應(yīng)用, java方法的多態(tài)性理解,java中接口和繼承的區(qū)別,線程池的好處,詳解,單例,線程池的優(yōu)點(diǎn)及其原理,線程池的優(yōu)點(diǎn),為什么不推薦通過Executors直接創(chuàng)建線程池,創(chuàng)建線程或線程池時(shí)請(qǐng)指定有意義的線程名稱,方便出錯(cuò)時(shí)回溯,深入理解ReentrantLock與Condition,Java多線程:線程間通信之Lock,Synchronized 關(guān)鍵字原理,ReentrantLock原理,HashMap中的Hash沖突解決和擴(kuò)容機(jī)制, JVM常見面試題, JVM內(nèi)存結(jié)構(gòu),類加載機(jī)制/雙親委托…)
(含:Activity知識(shí)點(diǎn), Fragment知識(shí)點(diǎn), Service知識(shí)點(diǎn), Intent知識(shí)點(diǎn)…)
(含:屏幕適配,主要控件優(yōu)化,事件分發(fā)與嵌套滾動(dòng)…)
(含:MVP架構(gòu)設(shè)計(jì),組件化架構(gòu)…)
(含:啟動(dòng)優(yōu)化,內(nèi)存優(yōu)化,繪制優(yōu)化,安裝包優(yōu)化…)
(含:開源庫源碼分析,Glide源碼分析,OkHttp源碼分析,Retrofit源碼分析,RxJava源碼分析…)
(含:開源文檔,面試合集…)
隨著 Android 開發(fā)者越來越多,企業(yè)在篩選 Android 程序員時(shí)越來越看中一個(gè)程序員對(duì)于 Android 底層原理的理解和思考。
經(jīng)常面試的人就知道,現(xiàn)在 Framework 算是面試必問知識(shí)點(diǎn)了,比如下面一些大廠面試題:
Framework 為開發(fā)應(yīng)用程序提供了非常多的 API,通過調(diào)用特殊的 API 構(gòu)造 APP,滿足業(yè)務(wù)上的需求。正因?yàn)橛辛?Framework 層,應(yīng)用開發(fā)才能事半功倍,專注于業(yè)務(wù)邏輯實(shí)現(xiàn)。
這里給大家分享一份由 騰訊大佬整理推薦的《Android Framework 開發(fā)揭秘》以及《2022最新Android中高級(jí)面試題合集》。
這份1932頁的《2022Android中高級(jí)面試題匯總》是總結(jié)了2020-2021期間大廠面試中的高頻面試題匯總,其中包括騰訊、字節(jié)、美團(tuán)、阿里、百度…等一線互聯(lián)網(wǎng)大廠。
資料包含: Java基礎(chǔ)、Android基礎(chǔ)、UI控件、網(wǎng)絡(luò)通信、架構(gòu)設(shè)計(jì)、性能優(yōu)化、源碼流程…
想要深入學(xué)習(xí)了解 Framework ,突破面試難關(guān),那么這兩份《Android Framework 開發(fā)揭秘》《2022最新Android中高級(jí)面試題合集》一定不要錯(cuò)過。
分享題目:android面試題,android面試題2020基礎(chǔ)
標(biāo)題來源:http://chinadenli.net/article44/dsdijhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、微信小程序、域名注冊(cè)、響應(yīng)式網(wǎng)站、企業(yè)建站、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)