引言
2017年初Android市場(chǎng)飽和的傳言一度甚囂塵上。2018年經(jīng)濟(jì)寒潮下,眾多大廠(chǎng)和曾經(jīng)風(fēng)口上的互聯(lián)網(wǎng)企業(yè)也不得不裁員自保,通過(guò)小程序、前端渲染以達(dá)到原生的實(shí)現(xiàn)。
面對(duì)外界的紛繁復(fù)雜和技術(shù)棧的日新月異,我們更應(yīng)該清楚認(rèn)識(shí)到自身技術(shù)的短板來(lái)進(jìn)行知識(shí)鞏固。目前移動(dòng)端Android初中級(jí)人才大量涌入,正所謂僧多粥少,但樓主始終認(rèn)為?
苦心人,天不負(fù),只要自身有過(guò)硬的知識(shí)廣度和深度儲(chǔ)備,在寒冬之下,同樣也能站穩(wěn)腳跟。
樓主年前走了一波社招試試水,一番廝殺后最終拿到多家offer,回味之余,不得不感嘆現(xiàn)在的985、211出身的技術(shù)人才真的強(qiáng)(樓主只是普通本科),為了踐行社會(huì)主義核心價(jià)值觀(guān),于是總結(jié)自己的面試經(jīng)歷,結(jié)合參考其他社招面試總結(jié)整理出這一份面試解答,承蒙大家不棄,文中知識(shí)點(diǎn)如有描述錯(cuò)誤,還望提出探討糾正。
注:答案在最下面
,因?yàn)閷?shí)際開(kāi)發(fā)與參考答案會(huì)有所不同,再者怕誤導(dǎo)大家的理解,所以這些面試題答案還是自己去理解!面試官會(huì)針對(duì)簡(jiǎn)歷中提到的知識(shí)點(diǎn)由淺入深提問(wèn),所以不要背答案,多理解。
Android篇
Activity
* 說(shuō)下Activity生命周期 ?
* Activity A 啟動(dòng)另一個(gè)Activity B 會(huì)調(diào)用哪些方法?如果B是透明主題的又或則是個(gè)DialogActivity呢 ?
* 說(shuō)下onSaveInstanceState()方法的作用 ? 何時(shí)會(huì)被調(diào)用?
* 說(shuō)下 Activity的四種啟動(dòng)模式、應(yīng)用場(chǎng)景 ?
* 了解哪些Activity常用的標(biāo)記位Flags?
* 說(shuō)下 Activity跟window,view之間的關(guān)系?
* 橫豎屏切換的Activity生命周期變化?
* 如何啟動(dòng)其他應(yīng)用的Activity?
* Activity的啟動(dòng)過(guò)程?
Fragment
* 談一談Fragment的生命周期 ?與Activity生命周期的不同 ?
* 談?wù)凙ctivity和Fragment的區(qū)別?
* Fragment中add與replace的區(qū)別(Fragment重疊)
* getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之間的區(qū)別?
* FragmentPagerAdapter與FragmentStatePagerAdapter的區(qū)別與使用場(chǎng)景
Service
* 談一談Service的生命周期?
* Service的兩種啟動(dòng)方式?區(qū)別在哪?
* 如何保證Service不被殺死 ?
* 能否在Service開(kāi)啟耗時(shí)操作 ? 怎么做 ?
* 用過(guò)哪些系統(tǒng)Service ?
* 了解ActivityManagerService嗎?發(fā)揮什么作用
Broadcast Receiver
* 廣播有幾種形式 ? 都有什么特點(diǎn) ?
* 廣播的兩種注冊(cè)方式 ?
* 廣播發(fā)送和接收的原理了解嗎 ?(Binder機(jī)制、AMS)
ContentProvider
* ContentProvider了解多少?
* ContentProvider的權(quán)限管理?
數(shù)據(jù)存儲(chǔ)
* 描述一下Android數(shù)據(jù)持久存儲(chǔ)方式?
* SharedPreferences的應(yīng)用場(chǎng)景?注意事項(xiàng)?
* 了解SQLite中的事務(wù)操作嗎?是如何做的
* 使用SQLite做批量操作有什么好的方法嗎?
* 如何刪除SQLite中表的個(gè)別字段?
* 使用SQLite時(shí)會(huì)有哪些優(yōu)化操作?
IPC(重點(diǎn))
* Android中進(jìn)程和線(xiàn)程的關(guān)系? 區(qū)別?
* 如何開(kāi)啟多進(jìn)程 ? 應(yīng)用是否可以開(kāi)啟N個(gè)進(jìn)程 ?
* 為何需要IPC?多進(jìn)程通信可能會(huì)出現(xiàn)的問(wèn)題?
* Android中IPC方式、各種方式優(yōu)缺點(diǎn),為什么選擇Binder?
* Binder機(jī)制的作用和原理?
* Binder框架中ServiceManager的作用?
* Bunder傳遞對(duì)象為什么需要序列化?Serialzable和Parcelable的區(qū)別?
* 講講AIDL?原理是什么?如何優(yōu)化多模塊都使用AIDL的情況?
View
* 講下View的繪制流程?
* MotionEvent是什么?包含幾種事件?什么條件下會(huì)產(chǎn)生?
* 描述一下View事件傳遞分發(fā)機(jī)制?
* 如何解決View的事件沖突 ? 舉個(gè)開(kāi)發(fā)中遇到的例子 ?
* scrollTo()和scollBy()的區(qū)別?
* Scroller是怎么實(shí)現(xiàn)View的彈性滑動(dòng)?
* invalidate()和postInvalidate()的區(qū)別 ?
* SurfaceView和View的區(qū)別?
* 自定義View如何考慮機(jī)型適配 ?
Handler
* 談?wù)勏C(jī)制Handler ? 作用 ?有哪些要素 ?流程是怎樣的 ?
* 一個(gè)線(xiàn)程能否創(chuàng)建多個(gè)Handler,Handler跟Looper之間的對(duì)應(yīng)關(guān)系 ?
* 軟引用跟弱引用的區(qū)別
* 為什么系統(tǒng)不建議在子線(xiàn)程訪(fǎng)問(wèn)UI
* Looper死循環(huán)為什么不會(huì)導(dǎo)致應(yīng)用卡死
* 使用Handler的postDealy后消息隊(duì)列會(huì)有什么變化 ?
* 可以在子線(xiàn)程直接new一個(gè)Handler嗎 ?怎么做 ?
* Message可以如何創(chuàng)建 ? 哪種效果更好 ? 為什么 ?
線(xiàn)程(重點(diǎn))
* 用過(guò)線(xiàn)程池嗎 ? 講講AsyncTask的原理
* 線(xiàn)程池的幾個(gè)參數(shù)的理解,四種線(xiàn)程池的使用場(chǎng)景
* 直接在Activity中創(chuàng)建一個(gè)thread跟在service中創(chuàng)建一個(gè)thread之間的區(qū)別
* IntentService有什么用 ?
* 線(xiàn)程池核心線(xiàn)程數(shù)一般定義多少 ,為什么 ?
* Thread、Looper、MessageQueue、Handler、Message每個(gè)類(lèi)的功能以及這些類(lèi)之間的關(guān)系
* 線(xiàn)程池的好處、原理、類(lèi)型 ? 多線(xiàn)程是否一定會(huì)高效(優(yōu)缺點(diǎn))
* ThreadPoolExecutor的工作策略 ?
* 什么是ANR ? 什么情況會(huì)出現(xiàn)ANR ?如何避免 ? 在不看代碼的情況下如何快速定位出現(xiàn)ANR問(wèn)題所在 ?
* NR在四大組件的時(shí)間、場(chǎng)景
* 多線(xiàn)程中,讓你做一個(gè)單例,你會(huì)怎么做
* 除了notify還有什么方式可以喚醒線(xiàn)程
Bitmap
* Bitmap在decode的時(shí)候申請(qǐng)的內(nèi)存如何復(fù)用、釋放時(shí)機(jī)
* Bitmap使用需要注意哪些問(wèn)題 ?Bitmap.recycle()會(huì)立即回收么 ? 什么時(shí)候會(huì)回收 ?
如果沒(méi)有地方使用這個(gè)Bitmap,為什么垃圾回收不會(huì)直接回收它 ?
* 一張Bitmap所占內(nèi)存以及內(nèi)存占用的計(jì)算
* Android中緩存更新策略 ?
* LRU的原理 ?
性能優(yōu)化(重點(diǎn))
* 圖片的三級(jí)緩存中,圖片加載到內(nèi)存中,如果內(nèi)存快爆了,會(huì)發(fā)生什么?怎么處理?
* 內(nèi)存中如果加載一張500*500的png高清圖片.應(yīng)該是占用多少的內(nèi)存?
* WebView的性能優(yōu)化 ?
* Bitmap如何處理大圖,如一張30M的大圖,如何預(yù)防OOM
* 內(nèi)存回收機(jī)制與GC算法(各種算法的優(yōu)缺點(diǎn)以及應(yīng)用場(chǎng)景);GC原理時(shí)機(jī)以及GC對(duì)象
* 內(nèi)存泄露和內(nèi)存溢出的區(qū)別 ?AS有什么工具可以檢測(cè)內(nèi)存泄露
* 性能優(yōu)化,怎么保證應(yīng)用啟動(dòng)不卡頓? 黑白屏怎么處理?
* 性能優(yōu)化如何分析systrace?
* 強(qiáng)引用置為null,會(huì)不會(huì)被回收?
* ListView跟RecyclerView的區(qū)別(動(dòng)畫(huà)、刷新、緩存、數(shù)據(jù)綁定層、優(yōu)化、各自的使用場(chǎng)景)
* ListView的adapter是什么adapter,如何復(fù)用 ?
* Java多線(xiàn)程引發(fā)的性能問(wèn)題,怎么解決?
* 性能優(yōu)化如何分析systrace?
JNI
* 對(duì)JNI是否了解
* 如何加載NDK庫(kù) ?如何在JNI中注冊(cè)Native函數(shù),有幾種注冊(cè)方法 ?
* java如何調(diào)用c、c++語(yǔ)言 ?
* JNI如何調(diào)用java代碼 ?
* 你用JNI來(lái)實(shí)現(xiàn)過(guò)什么功能 ? 怎么實(shí)現(xiàn)的 ?(加密處理、影音方面、圖形圖像處理)
設(shè)計(jì)模式
* 你所知道的設(shè)計(jì)模式有哪些?
* 談?wù)凪VC、MVP和MVVM,好在哪里,不好在哪里 ?
* 如何理解生產(chǎn)者消費(fèi)者模型 ?
* 是否能從Android中舉幾個(gè)例子說(shuō)說(shuō)用到了什么設(shè)計(jì)模式 ?
* 裝飾模式和代理模式有哪些區(qū)別 ?
* 實(shí)現(xiàn)單例模式有幾種方法 ?懶漢式中雙層鎖的目的是什么 ??jī)纱闻锌盏哪康挠质鞘裁??
* 用到的一些開(kāi)源框架,介紹一個(gè)看過(guò)源碼的,內(nèi)部實(shí)現(xiàn)過(guò)程。
* 談?wù)剬?duì)RxJava的理解
* RxJava的作用,與平時(shí)使用的異步操作來(lái)比的優(yōu)缺點(diǎn)
* 說(shuō)說(shuō)EventBus作用,實(shí)現(xiàn)方式,代替EventBus的方式
* Fragment如果在Adapter中使用應(yīng)該如何解耦?
Android進(jìn)階延伸點(diǎn)
* 如何進(jìn)行單元測(cè)試,如何保證App穩(wěn)定
* Android中如何查看一個(gè)對(duì)象的回收情況
* TabLayout如何設(shè)置指示器的寬度包裹內(nèi)容??
* APK的大小如何壓縮 ? 多渠道包 ?
* 插件化原理分析
* 組建化原理,組件化中路由、埋點(diǎn)的實(shí)現(xiàn)
* Hook以及插樁技術(shù)
* Android的簽名機(jī)制,APK包含哪些東西 ?
* v3簽名key和v2還有v1有什么區(qū)別
* 熱修復(fù)流派、原理,如何進(jìn)行dex替換的 ?
* Android4.0~9.0之間大的變化,如何處理 ?
* 說(shuō)下Measurepec這個(gè)類(lèi)
* WebView相關(guān)(內(nèi)存泄露、JS交互)
* 請(qǐng)例舉Android中常用布局類(lèi)型,并簡(jiǎn)述其用法以及排版效率
* 區(qū)別Animation和Animator的用法,概述其原理
* 如何實(shí)現(xiàn)一個(gè)推送,極光推送原理
* 是否使用過(guò)DataBinding ? ButterKnife是怎么做到布局綁定的 ?
* 使用過(guò)什么圖片加載庫(kù) ?Glide的源碼設(shè)計(jì)哪里很微妙 ?
* 做過(guò)屏幕適配嗎 ?你的處理方案有哪些 ?
* 做過(guò)主題切換嗎?你的處理方案有哪些?
* 做過(guò)權(quán)限適配嗎 ?動(dòng)態(tài)權(quán)限適配方案、權(quán)限組的概念
* 用過(guò)哪些網(wǎng)絡(luò)加載庫(kù) ?OkHttp、Retrofit實(shí)現(xiàn)原理 ?
* 對(duì)于應(yīng)用更新這塊是如何做的 ? (灰度,強(qiáng)制更新、分區(qū)域更新)
* 了解GPS、GIS嗎 ?
* 會(huì)用Kotlin、Fultter嗎 ? 談?wù)勀愕睦斫?
熱門(mén)工具 換一換
