军事
notifydatasetchanged(扒一扒:2020台湾Android 面試題(附答案解析))

想要成為一名優秀的Android開發,你需要一份完備的 知識體系,在這裏,讓我們一起成長為自己所想的那樣~。

在這波浪潮裡沉浮的我

加強印象的同時,也可以幫到找工作的朋友們


扒一扒:2020台湾Android 面試題(附答案解析)nerror="javascript:errorimg.call(this);">

2、Android 四大組件與用途 [資料:Activity, Service Broadcast, ContentProvider](https://ithelp.ithome.com.tw/articles/10200435?sc=iThelpR)
a、Activity
可說是 Android 的核心元件,是 App 與使用者互動的基礎介面

但因為 Android 對資安的要求,權限的取得越來越嚴格,之後可能會偏向於使用 Foreground ( 使用者知情-icon、不會被回收 )來進行開發。

2018 Google 推了 WorkManager 可以更簡單的來進行後台工作,點我看介紹

d、ContentProvider
這是一個統一的資料接口元件,將自己可供人讀取的資料包住,讓別的 App 能存取。例如:通訊錄要給不同 App 讀取時就會包在此類

a、onCreate ( onAttach, onCreateView, onActivityCreate )
建立 Activity:可執行一次性的基本啟用邏輯,且有saveInstanceState可以取得舊資料

c、onResume
可與用戶互動:恢復 onPause 釋放的資源,或需要每次進來就初始化的動作

e、onStop => onRestart => 接到 onStart
隱藏:檢查並釋放資源,以避免 memory leak,onPause 中 heavy-load 的工作應該移到 onStop 來做。

===額外的===
g、onStart => onRestoreInstanceSave
雖然 onCreate 也能取到 saveBundle ,但此方法只會在需要恢復狀態的時候 invoke 所以不用判斷 bundle == null

4、生命週期的進階 ( A轉B、反轉螢幕...)
a、A轉B
A onPause, B onCreate, B onStart, B onResume, A onStop

c、反轉螢幕2 (官方configChanges資料)
configChanges = orientation | keyboardHidden | screenSize
只執行 onConfigurationChanged 方法,可在此做相關調整。

6、Manifest.xml 的作用
定義了很多要向系統告知的訊息
例如: App name, 入口 Activity, 申請權限…等。

a、Standard
無論如何新加一個實例

c、SingleTask
若任務棧中已有實例,調用onNewIntent復用,且會刪除壓在目標實例上面的其它實例,可應用在首頁性質的 UI,跳到首頁時清除之前壓在首頁上的 UI。

8、Handler 的用途與使用注意事項

Handler 有做 synchronized 以防多執行緒存取
Looper 裡面是一個無窮迴圈來取 queue 的值

在 Kotlin 裡,可以使用 coroutines 來做到防 Main Thread 堵塞

10、內存溢出 ( OOM )、洩漏 ( Memory Leak ) 的差異,[資料](https://blog.csdn.net/qq_34501274/article/details/70216124)
Memory Leak:資源未釋放 ( Connection, Cursor… 等 )
Out of Memory:太多 Memory Leak 導致不夠用,或是像大圖那種需要大量 Memory 的情況

a、Static Activity:static 變數是貫串整個 APP 的生命周期的,所以若抓著的 Activity 結束前沒有清掉,就會造成 memory leak。

c、Inner Classes:內部類的優點是可以存取外部類,但它會強引用外部類,所以容易造成 Memory leak。

e、Handler:同匿名類別,當 MessageQueue 還沒處理完,Activity 不會釋放。

12、Memory leak 和 Out of memory 的解決方法為何?
需釋放的資源可在 onStop 進行檢查並釋放,注意物件的生命週期與使用情況,而像大圖這種大量使用 Memory 的情況,可以用 LruCache 來控制使用量。

14、JobScheduler & JobIntentService
Android 8 之後,後台權限的管制變嚴格,JobService 會透過 JobScheduler 去發送分配任務,而 JobIntentService 與 JobService 的關係就像 Service 與 IntentService,JobIntentService 會處理掉 JobScheduler 的部份,讓我們專心覆寫 onHandleWork 即可。

16、Android ANR exception 資料
Application Not Responding 發生因原通常是在 main thread 做耗時操作。這裡可以用 Trace File 來追蹤 ( /data/anr/traces.txt ),裡頭會記錄發生問題的 Thread 做了什麼事而導致 Exception

18、Dependency Injection 是什麼
從物件外部注入資源,像是 setter、construct 都算是,目的是為了降低耦合度

a、設計基礎:封裝、繼承、多型、抽象

c、實際工作上,擁有好的物件概念,可以讓工作伙伴只要看我們提供的方法就可以知道物件怎麼使用。

b、GitHub Flow:只有 Master & Freture 的用法

21、Java 使用 String pool 的原因
a、節省資源:若 pool 中已有 “abc”,String str2 = “abc”,會重用 pool “abc”

22、View 重疊的 Touch 處理方法 資料
onDispatchTouchEvent 負責分發事件
若 return
『True => onTouchEvent』
『False => onInterceptTouchEvent』

最後到子類的 onTouchEvent 還是沒有被消費則會傳到 父類.onTouchEvent

24、常見 Design patterns ( 共 23 種 ) 資料

b、Singleton:一些較耗資源的物件,可以 new 一個實例供大家使用。就像 getSystemService 就是返回單例物件

d、Builder:若創建實例需要很多參數,且依據順序or設置不同時會有不同結果時使用。就像 Dialog 在 set title msg…後才調用 Builder.create

f、Prototype:屬性多且常要拷貝的物件適合此模式,有些物件有 clone method 就是此模式。 像 Intent.clone()

優點:頻繁創建時、需大量建立資源時,可以省效能。

26、private, public, protect 放在 class 上的功用
基本上和放在 method, field 是一樣的,但 private 通常出現在 inner class 上,無宣告的話預設 protect

28、使用什麼類做 UI Auto Test ,與其測試目的
Espresso,檢查流程是否正確

a、Coordinatorlayout:Behavior 是與 RelativeLayout 的差異點,可以監聽其它行為來改變自己的狀態,例如:滾動事件、配合其它 View 做變動…等。

c、LinearLayout:以橫豎的方式堆疊排列元件

e、GridLayout ( 少用 ):格狀的 Layout

g、AbsoluteLayout ( 已棄用 ):透過 x,y 來指定位置。

Jar 只包 Class文件 與 清單文件,Aar 更包含了 res 的全部文件,所以如果我們要包的是一個 UI 庫,有一些自己寫的控件布局文件、字體文件…等,就只能用 Aar。

ListArray:取值快,塞值有預設10個格子,沒了若加在中間,要用一個新 Array 搬過去。

TreeMap、TreeSet:Tree 有排序,Map 一組 Key,Value 的格式,Set 有不可重復性。

32、對稱、非對稱,Aes 加密
對稱:加解密都是同把 key ( AES :後面的數字是位元數 )
非對稱:分為公鑰加密、私鑰解密,安全性較高 ( RSA )

攻擊者將自己偽裝成終端,攔截通訊雙方的通話並插入新的內容。中間人攻擊是一個『缺乏』相互認證的攻擊,SSL、Auth 可以防止攻擊。

**35、Android 3.0 Google 推出 Fragment 的原因,為什麼要用 Fragment 圖源//

b、可重用:多個 Activity 可以重用同個 Fragment。

//36、View 的繪制原理 資料**
繪制有三個步驟 onMeasure、onLayout、onDraw,皆由從 ViewGroup 往 View 執行。

Layout:將 View 依上下左右的四個點確認在 Layout 的位置

37、Android Jetpack
這是一個 2018 Google 為了提高開發效率而誕生的組件,包含很多,有後台管理的 WorkManager、生命週期的 Lifecycles、SQLite訪問的 Room …等。

39、A/B Testing
當我們有新功能或大改版的時候,可以發佈給部份使用者使用,以取得市場回饋,來決定是否發佈或如何改善。 而 Fabric 可以幫助我們去挑選這些部份使用者。

41、Monkey Test
這是一套 Android 原生的壓力測試工具,特色就是像隻猴子一樣亂按,我們無法控制他的行為,所以才能測出一些意想不到的 Bug

43、Kotlin Volatile
這個關鍵字用於多線程,可以當作是「輕量化的 synchronized」。

45、Kotlin vs Java

b、Extension

d、Smart Casts

f、Companion Object

46、為什麼 Kotlin 和 Java 相融
Kotlin 也是一種靜態語言,他會編譯成 byte code 然後在 jvm 上面運行,和 java 一樣,所以才能和 java 配合

a、implicit 利用 action, category, data 去選擇開啟哪一個

48、Fragment 要如何以 back 回到上一個 Fragment

b、Navigation 就可以做到 view 很好的流程控制

ThreadPool 會比較有效益,因為 Thread 在開啟和關閉時其實都會消耗一點資源,所以會優先選擇讓 Pool 去管理 Thread

b、therad 就是一個個任務結束就

a、Activity 可以說是 ui 基本的的元件,也只有他才能接受 intent 的調轉

51、Serializable VS Parcelable

b、s 比 p 還消資源,在序列化 & 反序列化的過程需要很多 I/O 操作

d、s 適合用於網路傳輸 & 持久化本地儲存

53、什麼時候用 MVC 什麼時候用 MVVM
依照專案的規模來決定,太小規模的專案,會產生大量無用的 code,雖然說可擴性高,但因為小規模,擴充機會較小

a、知道資料從何而來,該去哪兒的一個傢伙

c、Activity、Fragment 之間的資料通訊


56、Kotlin Data Class VS Class
Data Class 會自動的創建這些 eqauls、hashCode、toString、componentN、copy

**58、Android 各版本重大差異 **

6.0 取得權限需要使用者同意

9.0 Dooz model 省電模式

本文在開源專案:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄,裏面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中...


顶一下()     踩一下()

热门推荐

发表评论
0评