最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

接近金三銀四?不要慌,先刷完這幾百道面試題

2020-03-04 21:07 作者:初壹十五阿  | 我要投稿

快到金三銀四了,很多小伙伴還沒有復工,在家呆的有點慌,不知道之后會面臨的裁員還是被裁員。在這里我給大家收集了很多面試題,刷完這些面試題,金三銀四絲毫不用慌了

AndroidBAT面試專題PDF+學習筆記+相對應的視頻教程(見末尾)



一丶Android常問基礎面試點

1.四大組件的生命周期和簡單用法

1)Activity

onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()
onCreate():為 Activity 設置布局,此時界面還不可見;
onStart(): Activity 可見但還不能與用戶交互,不能獲得焦點
onRestart(): 重新啟動 Activity 時被回調
onResume(): Activity 可見且可與用戶進行交互
onPause(): 當前 Activity 暫停,不可與用戶交互,但還可見。在新 Activity 啟動前被系統(tǒng)調用保存現(xiàn)有的 Activity 中的持久數(shù)據(jù)、停止動畫等。
onStop(): 當 Activity 被新的 Activity 覆蓋不可見時被系統(tǒng)調用
onDestory(): 當 Activity 被系統(tǒng)銷毀殺掉或是由于內(nèi)存不足時調用

2)Service

a)?onBind?方式綁定的:onCreate->onBind->onUnBind->onDestory(不管調用?bindService?幾次,onCreate?只會調用一次,onStart?不會被調用,建立連接后,service 會一直運行,直到調用
unBindService?或是之前調用的?bindService?的 Context 不存在了,系統(tǒng)會自動停止 Service,對
應的?onDestory?會被調用)

b)?startService?啟動的:onCreate->onStartCommand->onDestory(start 多次,onCreate?只會被
調用一次,onStart會調用多次,該service會在后臺運行,直至被調用stopService或是stopSelf)

c) 又被啟動又被綁定的服務,不管如何調用?onCreate()只被調用一次,startService?調用多少
次,onStart?就會被調用多少次,而?unbindService?不會停止服務,必須調用?stopService?或是
stopSelf?來停止服務。必須?unbindService?和?stopService(stopSelf)同時都調用了才會停止服
務。

3)BroadcastReceiver

a) 動態(tài)注冊:?存活周期是在?Context.registerReceiver?和?Context.unregisterReceiver?之間,
BroadcastReceiver?每次收到廣播都是使用注冊傳入的對象處理的。
b) 靜態(tài)注冊:?進程在的情況下,receiver 會正常收到廣播,調用?onReceive?方法;生命周期
只存活在onReceive?函數(shù)中,此方法結束,BroadcastReceiver?就銷毀了。onReceive()只有十
幾秒存活時間,在?onReceive()內(nèi)操作超過 10S,就會報 ANR。進程不存在的情況,廣播相應的進程會被拉活,Application.onCreate?會被調用,再調用onReceive。

4)ContentProvider

應該和應用的生命周期一樣,它屬于系統(tǒng)應用,應用啟動時,它會跟著初始化,應用關閉或被殺,它會跟著結束。

2 .Activity 之間的通信方式

1)通過 Intent 方式傳遞參數(shù)跳轉
2)通過廣播方式
3)通過接口回調方式
4)借助類的靜態(tài)變量或全局變量
5)借助?SharedPreference?或是外部存儲,如數(shù)據(jù)庫或本地文件

3.橫豎屏切換的時候,Activity 各種情況下的生命周期

1 ) 切 換 橫 屏 時 :
onSaveInstanceState->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState->onResume
2) 切換豎屏時:會打印兩次相同的 log
onSaveInstanceState->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState->onResume->onSaveInstanceState->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState->onResume

3) 如 果 在?AndroidMainfest.xml?中 修 改 該 Activity 的 屬 性 , 添 加
android:configChanges="orientation"橫豎屏切換,打印的 log 一樣,同 1)

  1. 如 果?AndroidMainfest.xml中 該 Activity 中 的
    android:configChanges="orientation|keyboardHidden",則只會打印
    onConfigurationChanged

4.Activity 上有 Dialog 的時候按 Home 鍵時的生命周期

AlertDialog并不會影響Activity的生命周期,按Home鍵后才會使Activity走onPause->onStop
AlertDialog?只是一個組件,并不會使 Activity 進入后臺

5.兩個 Activity 之間跳轉時必然會執(zhí)行的是哪幾個方法?

前一個 Activity 的?onPause,后一個 Activity 的?onResume

6.Fragment 狀態(tài)保存?onSaveInstanceState?是哪個類的方法,在什么情況下使用?

在對應的?FragmentActivity.onSaveInstanceState?方法會調用?FragmentController.saveAllState
其中會對?mActive?中各個 Fragment 的實例狀態(tài)和 View 狀態(tài)分別進行保存.當 Activity 在做狀
態(tài)保存和恢復的時候, 在它其中的 fragment 自然也需要做狀態(tài)保存和恢復.

7.如何實現(xiàn) Fragment 的滑動?

ViewPager+FragmentPagerAdapter+List<Fragment>

8.fragment 之間傳遞數(shù)據(jù)的方式?

1)在相應的 fragment 中編寫方法,在需要回調的 fragment 里獲取對應的 Fragment 實例,調
用相應的方法;
2)采用接口回調的方式進行數(shù)據(jù)傳遞;

a) 在Fragment1中創(chuàng)建一個接口及接口對應的set方法;
b) 在Fragment1中調用接口的方法;
c)在?Fragment2?中實現(xiàn)該接口;

3)利用第三方開源框架 EventBus

9.說說?ContentProvider?、ContentResolver?、ContentObserver?之間的關系

ContentProvider?實現(xiàn)各個應用程序間數(shù)據(jù)共享,用來提供內(nèi)容給別的應用操作。如聯(lián)系人應
用中就使用了?ContentProvider,可以在自己應用中讀取和修改聯(lián)系人信息,不過需要獲取相
應的權限。它也只是一個中間件,真正的數(shù)據(jù)源是文件或 SQLite 等。

ContentResolver?內(nèi) 容 解 析 者 , 用 于 獲 取 內(nèi) 容 提 供 者 提 供 的 數(shù) 據(jù) , 通 過
ContentResolver.notifyChange(uri)發(fā)出消息

ContentObserver 內(nèi)容監(jiān)聽者,可以監(jiān)聽數(shù)據(jù)的改變狀態(tài),觀察特定 Uri 引起的數(shù)據(jù)庫變化,
繼而做一些相應的處理,類似于數(shù)據(jù)庫中的觸發(fā)器,當?ContentObserver所觀察的 Uri 發(fā)生
變化時,便會觸發(fā)它。

10. 在?manifest?和代碼中如何注冊和使用?BroadcastReceiver?

1)mainfest中注冊:靜態(tài)注冊的廣播接收者就是一個常駐在系統(tǒng)中的全局監(jiān)聽器,也就是說
如果你應用中配置了一個靜態(tài)的?BroadcastReceiver,而且你安裝了應用而無論應用是否處于
運行狀態(tài),廣播接收者都是已經(jīng)常駐在系統(tǒng)中了。


2 ) 動態(tài)注冊:動態(tài)注冊的廣播接收者只有執(zhí)行了?registerReceiver(receiver, filter)才會開始監(jiān)聽
廣播消息,并對廣播消息作為相應的處理。


  • 11.Android 屬性動畫特性

  • 12.如何導入外部數(shù)據(jù)庫?

  • 13.LinearLayout、RelativeLayout、FrameLayout 的特性及對比,并介紹使用場景。

  • 14.談談對接口與回調的理解

  • 15.寫一個回調 demo

  • 16.介紹下 SurfView

  • 17.RecycleView 的使用

  • 18.序列化的作用,以及 Android 兩種序列化的區(qū)別

二丶Android View總結

19.View 的滑動方式

a.layout(left,top,right,bottom):?通過修改 View 四個方向的屬性值來修改 View 的坐標,從而滑動 View
b.offsetLeftAndRight() offsetTopAndBottom():?指定偏移量滑動 view
c.LayoutParams,改變布局參數(shù):?layoutParams?中保存了 view 的布局參數(shù),可以通
過修改布局參數(shù)的方式滑動 view
d.通過動畫來移動 view:?注意安卓的平移動畫不能改變 view 的位置參數(shù),屬性
動畫可以
e.scrollTo/scrollBy:?注意移動的是 view 的內(nèi)容,scrollBy(50,50)你會看到屏幕上的
內(nèi)容向屏幕的左上角移動了,這是參考對象不同導致的,你可以看作是它移動的
是手機屏幕,手機屏幕向右下角移動,那么屏幕上的內(nèi)容就像左上角移動了
f.scroller?:scroller?需要配置?computeScroll?方法實現(xiàn) view 的滑動,scroller?本身并不
會滑動 view,它的作用可以看作一個插值器,它會計算當前時間點 view 應該滑
動到的距離,然后 view 不斷的重繪,不斷的調用?computeScroll?方法,這個方法
是個空方法,所以我們重寫這個方法,在這個方法中不斷的從scroller?中獲取當
前 view 的位置,調用?scrollTo?方法實現(xiàn)滑動的效果

20.View 的事件分發(fā)機制

點擊事件產(chǎn)生后,首先傳遞給 Activity 的?dispatchTouchEvent方法,通過PhoneWindow?傳遞給?DecorView,然后再傳遞給根?ViewGroup,進入?ViewGroup?的dispatchTouchEvent?方法,執(zhí)行?onInterceptTouchEvent?方法判斷是否攔截,再不攔截的情況下,此時會遍歷?ViewGroup?的子元素,進入子 View 的dispatchToucnEvent方法,如果子 view 設置了?onTouchListener,就執(zhí)行onTouch方法,并根據(jù)?onTouch?的返回值為 true 還是 false 來決定是否執(zhí)行?onTouchEvent方法,如果是 false 則繼續(xù)執(zhí)行?onTouchEvent,在?onTouchEvent的 Action Up 事件中判斷,如果設置了?onClickListener?,就執(zhí)行?onClick?方法。

21.View 的加載流程

View 隨著 Activity 的創(chuàng)建而加載,startActivity?啟動一個 Activity 時,在ActivityThread?的handleLaunchActivity?方法中會執(zhí)行 Activity 的?onCreate?方法,這個時候會調用?setContentView加載布局創(chuàng)建出?DecorView并將我們的 layout加載到?DecorView?中,當執(zhí)行到?handleResumeActivity?時,Activity 的?onResume方法被調用,然后?WindowManager?會將?DecorView?設置給?ViewRootImpl,這樣,DecorView就被加載到Window中了,此時界面還沒有顯示出來,還需要經(jīng)過 View的 measure,layout 和 draw 方法,才能完成 View 的工作流程。我們需要知道 View的繪制是由ViewRoot來負責的,每一個DecorView都有一個與之關聯(lián)的ViewRoot,這種關聯(lián)關系是由WindowManager?維護的,將DecorView和?ViewRoot?關聯(lián)之后,ViewRootImpl的requestLayout會被調用以完成初步布局,通過scheduleTraversals方法向主線程發(fā)送消息請求遍歷,最終調用?ViewRootImpl的?performTraversals方法,這個方法會執(zhí)行 View 的?measure layout?和 draw 流程

三丶技術性面試問題

22)圖片庫對比
23)LRUCache?原理
LruCache?是個泛型類,主要原理是:把最近使用的對象用強引用存儲在LinkedHashMap?中,
當緩存滿時,把最近最少使用的對象從內(nèi)存中移除,并提供 get/put 方法完成緩存的獲取和
添加。LruCache?是線程安全的,因為使用了?synchronized?關鍵字。當調用 put()方法,將元素加到鏈表頭,如果鏈表中沒有該元素,大小不變,如果沒有,需調用?trimToSize?方法判斷是否超過最大緩存量,trimToSize()方法中有一個?while(true)死循環(huán),如果緩存大小大于最大的緩存值,會不斷刪除?LinkedHashMap?中隊尾的元素,即最少訪問的,直到緩存大小小于最大緩存值。當調用?LruCache?的 get 方法時,LinkedHashMap?會調用recordAccess方法將此元素加到鏈表頭部。
24 )圖片加載原理
25)自己去實現(xiàn)圖片庫,怎么做?
26) Glide 源碼解析
27) Glide 使用什么緩存?
1) 內(nèi)存緩存:?LruResourceCache(memory)+弱引用?activeResources
Map<Key,?WeakReference<EngineResource<?>>> activeResources?正在使用的資源,當?acquired變量大于 0,說明圖片正在使用,放到?activeResources?弱引用緩存中,經(jīng)過 release()后,acquired=0,說明圖片不再使用,會把它放進?LruResourceCache?中
2)磁盤緩存:?DiskLruCache,這里分為 Source(原始圖片)和 Result(轉換后的圖片)
第一次獲取圖片,肯定網(wǎng)絡取,然后存?active\disk中,再把圖片顯示出來,第二次讀取相同
的圖片,并加載到相同大小的 imageview 中,會先從 memory 中取,沒有再去 active 中獲取。
如果 activity 執(zhí)行到?onStop?時,圖片被回收,active 中的資源會被保存到 memory 中,active
中的資源被回收。當再次加載圖片時,會從 memory 中取,再放入 active 中,并將 memory
中對應的資源回收。

之所以需要?activeResources,它是一個隨時可能被回收的資源,memory 的強引用頻繁讀寫
可能造成內(nèi)存激增頻繁 GC,而造成內(nèi)存抖動。資源在使用過程中保存在?activeResources?中,
而?activeResources?是弱引用,隨時被系統(tǒng)回收,不會造成內(nèi)存過多使用和泄漏。

28 )Glide 內(nèi)存緩存如何控制大?。?/strong>
Glide 內(nèi)存緩存最大空間(maxSize)=每個進程可用最大內(nèi)存0.4(低配手機是 每個進程可用
最大內(nèi)存0.33)
磁盤緩存大小是 250MB int DEFAULT_DISK_CACHE_SIZE = 250 * 1024 * 1024;

29.網(wǎng)絡框架對比和源碼分析
30.自己去設計網(wǎng)絡請求框架,怎么做?
31.okhttp 源碼
32.網(wǎng)絡請求緩存處理,okhttp 如何處理網(wǎng)絡緩存的;

四丶數(shù)據(jù)庫面試內(nèi)容

33.sqlite 升級,增加字段的語句
34.數(shù)據(jù)庫框架對比和源碼分析
35.數(shù)據(jù)庫的優(yōu)化
36.數(shù)據(jù)庫數(shù)據(jù)遷移問題

五丶算法

  1. 排序算法有哪些?

  2. 最快的排序算法是哪個?

  3. 手寫一個冒泡排序

  4. 手寫快速排序代碼

  5. 快速排序的過程、時間復雜度、空間復雜度

  6. 手寫堆排序

  7. 堆排序過程、時間復雜度及空間復雜度

  8. 寫出你所知道的排序算法及時空復雜度,穩(wěn)定性

  9. 二叉樹給出根節(jié)點和目標節(jié)點,找出從根節(jié)點到目標節(jié)點的路徑

  10. 給阿里 2 萬多名員工按年齡排序應該選擇哪個算法?

  11. GC 算法( 各種算法的優(yōu)缺點以及應用場景)

  12. 蟻群算法與蒙特卡洛算法

  13. 子串包含問題(KMP 算法) 寫代碼實現(xiàn)

  14. 一個無序, , 不重復數(shù)組, , 輸出 N 個元素, , 使得 N 個元素的和相加為 M, , 給出時間復雜度、 、.空間復雜度。手寫算法

  15. 萬億級別的兩個 URL 文件 A 和 和 B, , 如何求出 A 和 和 B 的差集 C( 提示 :Bit 映射->hash 分組->多文件讀寫效率-> 磁盤尋址以及應用層面對尋址的優(yōu)化)

  16. 百度 POI 中如何試下查找最近的商家功能( 提示:坐標鏡像+R 樹) 。

  17. 兩個不重復的數(shù)組集合中,求共同的元素。

  18. 兩個不重復的數(shù)組集合中,這兩個集合都是海量數(shù)據(jù),內(nèi)存中放不下,怎么求共同的元
    素?

  19. 一個文件中有 100 萬個整數(shù),由空格分開,在程序中判斷用戶輸入的整數(shù)是否在此文件
    中。說出最優(yōu)的方法

  20. 一張 Bitmap 所占內(nèi)存以及內(nèi)存占用的計算

六丶插件化、模塊化、組件化、熱修復、增量更新、Gradle

  1. 對熱修復和插件化的理解

  2. 插件化原理分析

  3. 模塊化實現(xiàn)(好處,原因)

  4. 熱修復, 插件化

  5. 項目組件化的理解

  6. 擊 描述清點擊 Android Studio 的 build 按鈕后發(fā)生了什么

七丶架構設計和設計模式

  1. 談談你對 Android 設計模式的理解

  2. MVC MVP MVVM 原理和區(qū)別

  3. 你所知道的設計模式有哪些?

  4. 項目中常用的設計模式

  5. 手寫生產(chǎn)者/ 消費者模式

  6. 寫出觀察者模式的代碼

  7. 適配器模式,裝飾者模式,外觀模式的異同?

  8. 用到的一些開源框架,介紹一個看過源碼的,內(nèi)部實現(xiàn)過程。

71. 談談對 RxJava的理解
RxJava 是基于響應式編程,基于事件流、實現(xiàn)異步操(類似于 Android 中的?AsyncTask、Handler
作用)作的庫,基于事件流的鏈式調用,使得 RxJava 邏輯簡潔、使用簡單。RxJava 原理是
基于一種擴展的觀察者模式,

有四種角色:?被觀察者?Observable?觀察者?Observer?訂閱subscribe?事件 Event。

RxJava?原理可總結為:?被觀察者 Observable 通過訂閱(subscribe)按順序發(fā)送事件(Emitter)給觀察者(Observer), 觀察者按順序接收事件&作出相應的響應動作

RxJava 中的操作符:
1)defer():?直到有觀察者(Observer)訂閱時,才會動態(tài)創(chuàng)建被觀察者對象(Observer)&發(fā)送事件,通過?Observer?工廠方法創(chuàng)建被觀察者對象,每次訂閱后,都會得到一個剛創(chuàng)建的最新的
Observer 對象,可以確保 Observer 對象里的數(shù)據(jù)是最新的。defer()方法只會定義?Observable對象,只有訂閱操作才會創(chuàng)建對象。

?


2)timer()?快速創(chuàng)建一個被觀察者(Observable),延遲指定時間后,再發(fā)送事件


3)interval() intervalRange()?快速創(chuàng)建一個被觀察者對象(Observable),每隔指定時間就發(fā)送
事件


72.Rxjava 發(fā)送事件步驟

1)創(chuàng)建被觀察者對象 Observable&定義需要發(fā)送的事件

Observable.create()方法實際創(chuàng)建了一個?ObservableCreate?對象,它是?Observable?的子類,傳

入一個?ObservableOnSubscribe?對象,復寫了發(fā)送事件行為的?subscribe()方法。
2)創(chuàng)建觀察者對象 Observer&定義響應事件的行為

3)通過subscribe()方法使觀察者訂閱被觀察者

  1. RxJava 的作用,與平時使用的異步操作來比的優(yōu)缺點

  2. 說說 EventBus 作用,實現(xiàn)方式,代替 EventBus 的方式

  3. 從 從 0 設計一款 App 整體架構,如何去做?

  4. 說一款你認為當前比較火的應用并設計( 比如:直播 APP ,P2P 金融,小視頻等)

  5. 談談對 java 狀態(tài)機理解

  6. Fragment 如果在 Adapter 中使用應該如何解耦?

  7. Binder 機制及底層實現(xiàn)

  8. 對于應用更新這塊是如何做的?( 解答:灰度,強制更新,分區(qū)域更新) ?

  9. 實現(xiàn)一個 Json 解析器

八丶性能優(yōu)化

  1. 如何對 Android 應用進行性能分析以及優(yōu)化?

  2. ddms 和 和 traceView

  3. 性能優(yōu)化如何分析 systrace ?

  4. 用 用 IDE 如何分析內(nèi)存泄漏?

  5. Java 多線程引發(fā)的性能問題,怎么解決?

  6. 啟動頁白屏及黑屏解決?

  7. 啟動太慢怎么解決?

  8. 怎么保證應用啟動不卡頓?

  9. App 啟動崩潰異常捕捉

  10. 自定義 View 注意事項

  11. 現(xiàn)在下載速度很慢, 試從網(wǎng)絡協(xié)議的角度分析原因, 并優(yōu)化( 提示: : 網(wǎng)絡的 的 5 層都可以涉及)。

  12. Https 請求慢的解決辦法(提示:DNS ,攜帶數(shù)據(jù),直接訪問 IP )

  13. 如何保持應用的穩(wěn)定性

  14. RecyclerView 和 和 ListView 的性能對比

  15. ListView 的優(yōu)化

  16. RecycleView 優(yōu)化

  17. View 渲染

  18. Bitmap 如何處理大圖,如一張 30M 的大圖,如何預防 OOM

  19. java 中的四種引用的區(qū)別以及使用場景

  20. 強引用置為 null ,會不會被回收?

更多信息可以點擊關于我?, 非常希望和大家一起交流 , 共同進步
順手留下GitHub鏈接,需要獲取相關面試等內(nèi)容的可以自己去找
https://github.com/xiangjiana/Android-MS
(VX:mm14525201314)


接近金三銀四?不要慌,先刷完這幾百道面試題的評論 (共 條)

分享到微博請遵守國家法律
香港| 禄劝| 景德镇市| 九江县| 囊谦县| 崇文区| 伊金霍洛旗| 南昌县| 方城县| 巩留县| 喀喇沁旗| 吕梁市| 登封市| 郯城县| 调兵山市| 永清县| 轮台县| 喜德县| 体育| 嘉义县| 遵义县| 虞城县| 呼和浩特市| 达日县| 宁远县| 渑池县| 兰西县| 兴海县| 元氏县| 麦盖提县| 筠连县| 阳春市| 三明市| 太和县| 友谊县| 班玛县| 阿坝| 靖远县| 台北市| 民县| 建德市|