您當前的位置:首頁 > 曲藝

2022年 Android 面試題(四大元件、UI、效能調優、kotlin....),在這凜冽的" 寒冬 "裡,砥礪前行 !

作者:由 程式設計師小甲魚 發表于 曲藝時間:2022-01-10

近十幾年來,隨著以 Android 系統為代表的智慧手機普及與發展,網際網路行業早已進入“移動”的時代。但是現如今整個移動網際網路行業正處於增量下降、存量廝殺的階段。

在如此的大環境下,整個行業頭部企業,越來越重視產品的體驗與成本,對中高階的開發者的能力要求也越來越高。

同時,很多小公司倒閉,大把公司招不到人,還有一點大家多多少少可能都聽到或看到一些資訊,就是好多公司在最佳化裁員。

2022年 Android 面試題(四大元件、UI、效能調優、kotlin....),在這凜冽的" 寒冬 "裡,砥礪前行 !

作為求職者來說,面試是一道坎,很多人會恐懼面試,即使是工作很多年的老鳥,可能仍存在面試的焦慮。

與其焦慮,不如行動

面試一般都是基於你的簡歷來進行的,一般先考察你的基礎,然後考察你知識體系的完備程度,接著會考察你的極限,最後還會考察一些軟技能,比如你的學習能力、協作能力、溝通能力、分析解決未知問題的能力、抗壓能力等。

準備週期

面試之前,最好先系統的複習一下基礎知識,然後再覆盤下自己的專案經歷,把亮點都發掘出來。複習週期個人建議是1-3個月(現在正是準備金三銀四的好時間),時間不宜太久,久了就容易懈怠或者閉門造車。

複習計劃的制定和進度的把控也很重要,可以參考別人的學習計劃去學習,再根據自己的實際情況去做適當的調整。

複習技巧

學習沒有捷徑可言,一定要去實踐

。對於程式設計師而言,不單單是死記硬背,我們有更好的方式去學習,比如寫demo去驗證,比如學習原始碼的過程中,一定要自己去翻看原始碼,多翻幾遍看熟了再說。

好記性不如爛筆頭

。學習筆記很重要,不僅要記筆記,還要寫心得體會,文字筆記、畫圖、總結等,方式很多,但是一定要自己認真去做,不要太相信自己的記憶,只有反覆記憶,加深理解才行。

在複習的過程中,都是從一個個小的知識點開始學的,複習到一定階段,可以嘗試著去把這些東西串聯起來,

由點及面,形成知識體系

複習知識點時,要及時跟你做過的專案結合起來

,這樣在面試時就知道怎麼聊了,由專案講到知識點,由一個知識點串聯到另一個知識點。

答題技巧

面試總體上是一個你跟面試官相會了解、相互交流的過程,大廠的面試官一般都很好,如果你遇到不會的問題了,可以及時請教對方,不會了就問,不要怕丟面子,面試本就是一個學習和相互交流的過程。

有些時候某些技術或者知識點你不瞭解細節,但是大體的設計思路你是知道的,你就儘可能的答出你的理解,可以用橫向的類似的技術去闡述這個技能點。

如果某個知識點一時半會想不起來了,可以迂迴一下,跟遞推公式一樣,根據你擅長的知識點,一步一步去推導,先大膽假設,再小心求證,推導的過程也能說明一些問題。

中高階 Android 面試題

第一章 Java 方面

(一)Java 基礎部分

抽象類與介面的區別?

分別講講 final,static,synchronized 關鍵字可以修飾什麼,以及修飾後的作用?

請簡述一下String、StringBuffer和StringBuilder的區別?

“equals”與“==”、“hashCode”的區別和使用場景?

Java 中深複製與淺複製的區別?

談談Error和Exception的區別?

什麼是反射機制?反射機制的應用場景有哪些?

談談如何重寫equals()方法?為什麼還要重寫hashCode()?

Java 中 IO 流分為幾種?BIO,NIO,AIO 有什麼區別?

談談你對Java泛型中型別擦除的理解,並說說其侷限性?

String為什麼要設計成不可變的?

說說你對Java註解的理解?

談一談Java成員變數,區域性變數和靜態變數的建立和回收時機?

請說說Java中String。length()的運作原理?

(二)Java 集合

談談List,Set,Map的區別?

談談ArrayList和LinkedList的區別?

請說一下HashMap與HashTable的區別

談一談ArrayList的擴容機制?

HashMap 的實現原理?

請簡述 LinkedHashMap 的工作原理和使用方式?

談談對於ConcurrentHashMap的理解?

(三)Java 多執行緒

Java 中使用多執行緒的方式有哪些?

說一下執行緒的幾種狀態?

如何實現多執行緒中的同步?

談談執行緒死鎖,如何有效的避免執行緒死鎖?

談談執行緒阻塞的原因?

請談談 Thread 中 run() 與 start() 的區別?

synchronized和volatile關鍵字的區別?

如何保證執行緒安全?

談談ThreadLocal用法和原理?

Java 執行緒中notify 和 notifyAll有什麼區別?

什麼是執行緒池?如何建立一個執行緒池?

談一談java執行緒常見的幾種鎖?

談一談執行緒sleep()和wait()的區別?

什麼是悲觀鎖和樂觀鎖?

什麼是BlockingQueue?請分析一下其內部原理並談談它的使用場景?

談一談java執行緒安全的集合有哪些?

Java中為什麼會出現Atomic類?試分析它的原理和缺點?

說說ThreadLocal的使用場景?與Synchronized相比有什麼特性?

(四)Java 虛擬機器

談一談JAVA垃圾回收機制?

回答一下什麼是強、軟、弱、虛引用以及它們之間的區別?

簡述JVM中類的載入機制與載入過程?

JVM、Dalvik、ART三者的原理和區別?

請談談Java的記憶體回收機制?

JMM是什麼?它存在哪些問題?該如何解決?

2022年 Android 面試題(四大元件、UI、效能調優、kotlin....),在這凜冽的" 寒冬 "裡,砥礪前行 !

第二章 Android 方面

(一)Android 四大元件相關

Activity 與 Fragment 之間常見的幾種通訊方式?

LaunchMode 的應用場景?

BroadcastReceiver 與 LocalBroadcastReceiver 有什麼區別?

對於 Context,你瞭解多少?

IntentFilter是什麼?有哪些使用場景?

談一談startService和bindService的區別,生命週期以及使用場景?

Service如何進行保活?

簡單介紹下ContentProvider是如何實現資料共享的?

說下切換橫豎屏時Activity的生命週期?

Activity中onNewIntent方法的呼叫時機和使用場景?

Intent傳輸資料的大小有限制嗎?如何解決?

說說ContentProvider、ContentResolver、ContentObserver 之間的關係?

說說Activity載入的流程?

(二)Android 非同步任務和訊息機制

HandlerThread 的使用場景和用法?

IntentService 的應用場景和使用姿勢?

AsyncTask 的優點和缺點?

談談你對 Activity。runOnUiThread 的理解?

子執行緒能否更新 UI?為什麼?

談談 Handler 機制和原理?

為什麼在子執行緒中建立 Handler 會拋異常?

試從原始碼角度分析 Handler 的 post 和 sendMessage 方法的區別和應用場景?

Handler 中有 Loop 死迴圈,為什麼沒有阻塞主執行緒,原理是什麼?

(三)Android UI 繪製相關

Android 補間動畫和屬性動畫的區別?

Window和DecorView是什麼?DecorView又是如何和Window建立聯絡的?

簡述一下 Android 中 UI 的重新整理機制?

LinearLayout, FrameLayout, RelativeLayout 哪個效率高, 為什麼?

談談Android的事件分發機制?

談談自定義View的流程?

針對RecyclerView你做了哪些最佳化?

談談如何最佳化ListView?

談談自定義LayoutManager的流程?

什麼是 RemoteViews?使用場景有哪些?

談一談獲取View寬高的幾種方法?

談一談插值器和估值器?

getDimension、getDimensionPixelOffset 和 getDimensionPixelSize 三者的區別?

請談談原始碼中StaticLayout的用法和應用場景?

有用過ConstraintLayout嗎?它有哪些特點?

關於LayoutInflater,它是如何透過 inflate 方法獲取到具體View的?

談一談Fragment懶載入?

談談RecyclerView的快取機制?

請談談View。inflate和LayoutInflater。inflate的區別?

請談談invalidate()和postInvalidate()方法的區別和應用場景?

談一談自定義View和自定義ViewGroup?

談一談SurfaceView與TextureView的使用場景和用法?

談一談RecyclerView。Adapter的幾種重新整理方式有何不同?

談談你對Window和WindowManager的理解?

談一談Activity,View,Window三者的關係?

有了解過WindowInsets嗎?它有哪些應用?

Android中View幾種常見位移方式的區別?

為什麼ViewPager巢狀ViewPager,內部的ViewPager滾動沒有被攔截?

請談談Fragment的生命週期?

請談談什麼是同步屏障?

談一談ViewDragHelper的工作原理?

談一談螢幕重新整理機制?

(四)Android 效能調優相關

談談你對Android效能最佳化方面的瞭解?

一般什麼情況下會導致記憶體洩漏問題?

自定義 Handler 時如何有效地避免記憶體洩漏問題?

哪些情況下會導致oom問題?

ANR 出現的場景以及解決方案?

談談Android中記憶體最佳化的方式?

談談佈局最佳化的技巧?

Android 中的圖片最佳化方案?

Android Native Crash問題如何分析定位?

談談怎麼給apk瘦身?

談談你是如何最佳化App啟動過程的?

談談程式碼混淆的步驟?

談談如何對WebView進行最佳化?

如何處理大圖的載入?

談談如何對網路請求進行最佳化?

請談談如何載入Bitmap並防止記憶體溢位?

(五)Android 中的 IPC

請回答一下Android程序間的通訊方式?

請談談你對Binder機制的理解?

談談 AIDL?

(六)Android 系統 SDK 相關

請簡要談談Android系統的架構組成?

SharedPreferences 是執行緒安全的嗎?它的 commit 和 apply 方法有什麼區別?

Serializable和Parcelable的區別?

請簡述一下 Android 7。0 的新特性?

談談ArrayMap和HashMap的區別?

簡要說說 LruCache 的原理?

為什麼推薦用SparseArray代替HashMap?

PathClassLoader和DexClassLoader有何區別?

說說HttpClient與HttpUrlConnection的區別?並談談為何前者會被替代?

什麼是Lifecycle?請分析其內部原理和使用場景?

談一談Android的簽名機制?

談談安卓apk構建的流程?

簡述一下Android 8。0、9。0 分別增加了哪些新特性?

談談Android10更新了哪些內容?如何進行適配?

請簡述Apk的安裝過程?

Java與JS程式碼如何互調?有做過相關最佳化嗎?

什麼是JNI?具體說說如何實現Java與C++的互調?

請簡述從點選圖示開始app的啟動流程?

(七)第三方框架分析

談一談LeakCanray的工作原理?

談一談EventBus的原理?

談談網路請求中的攔截器(Interceptor)?

談一談Glide的快取機制?

ViewModel的出現是為了解決什麼問題?並簡要說說它的內部原理?

請說說依賴注入框架ButterKnife的實現原理?

談一談RxJava背壓原理?

(八)綜合技術

請談談你對 MVC 和 MVP 的理解?

分別介紹下你所知道Android的幾種儲存方式?

簡述下熱修復的原理?

談談如何適配更多機型的?

請談談你是如何進行多渠道打包的?

MVP中你是如何處理Presenter層以防止記憶體洩漏的?

如何計算一張圖片所佔的記憶體空間大小?

有沒有遇到64k問題,應該如何解決?

如何最佳化 Gradle 的構建速度?

如何獲取Android裝置唯一ID?

談一談Android P禁用http對我們開發有什麼影響?

什麼是AOP?在Android中它有哪些應用場景?

什麼是MVVM?你是如何將其應用於具體專案中的?

請談談你是如何實現資料埋點的?

假如讓你實現斷點上傳功能,你認為應該怎樣去做?

webp和svg格式的圖片各自有什麼特點?應該如何在Android中使用?

說說你是如何進行單元測試的?以及如何應用在MVP和MVVM中?

對於GIF 圖片載入有什麼思路和建議?

為什麼要將專案遷移到AndroidX?如何進行遷移?

(九)資料結構方面

什麼是氣泡排序?如何最佳化?

請用 Java 實現一個簡單的單鏈表?

如何反轉一個單鏈表?

談談你對時間複雜度和空間複雜度的理解?

談一談如何判斷一個連結串列成環?

什麼是紅黑樹?為什麼要用紅黑樹?

什麼是快速排序?如何最佳化?

說說迴圈佇列?

如何判斷單鏈表交叉

(十)設計模式

請簡要談一談單例模式?

對於面向物件的六大基本原則瞭解多少?

請列出幾種常見的工廠模式並說明它們的用法?

說說專案中用到的設計模式和使用場景?

什麼是代理模式?如何使用?Android原始碼中的代理模式?

談一談單例模式,建造者模式,工廠模式的使用場景?如何合理選擇?

談談你對原型模式的理解?

請談談策略模式原理及其應用場景?

靜態代理和動態代理的區別,什麼場景使用?

談一談責任鏈模式的使用場景?

(十一)計算機網路方面

請簡述 Http 與 Https 的區別?

說一說 https,udp,socket 區別?

請簡述一次 http 網路請求的過程?

談一談 TCP/IP 三次握手,四次揮手?

為什麼說 Http 是可靠的資料傳輸協議?

TCP/IP協議分為哪幾層?TCP 和 HTTP 分別屬於哪一層?

2022年 Android 面試題(四大元件、UI、效能調優、kotlin....),在這凜冽的" 寒冬 "裡,砥礪前行 !

(十二)Kotlin方面

請簡述一下什麼是 Kotlin?它有哪些特性?

Kotlin 中註解 @JvmOverloads 的作用?

Kotlin中List與MutableList的區別?

Kotlin中實現單例的幾種常見方式?

談談你對Kotlin中的 data 關鍵字的理解?相比於普通類有哪些特點?

什麼是委託屬性?請簡要說說其使用場景和原理?

請舉例說明Kotlin中with與apply函式的應用場景和區別?

Kotlin中 Unit 型別的作用以及與Java中 Void 的區別?

Kotlin 中 infix 關鍵字的原理和使用場景?

Kotlin中的可見性修飾符有哪些?相比於Java有什麼區別?

你覺得Kotlin與Java混合開發時需要注意哪些問題?

在Kotlin中,何為解構?該如何使用?

在Kotlin中,什麼是行內函數?有什麼作用?

談談kotlin中的構造方法?有哪些注意事項?

談談Kotlin中的Sequence,為什麼它處理集合操作更加高效?

請談談Kotlin中的Coroutines,它與執行緒有什麼區別?有哪些優點?

Kotlin中該如何安全地處理可空型別?

說說Kotlin中的Any與Java中的Object有何異同?

Kotlin中的資料型別有隱式轉換嗎?為什麼?

Kotlin中集合遍歷有哪幾種方式?

2022年 Android 面試題(四大元件、UI、效能調優、kotlin....),在這凜冽的" 寒冬 "裡,砥礪前行 !

篇幅有限,需要《2022年中高階Android面試必知百題》完整版(面試題+答案解析),可以點選下方小卡片,免費領取~

標簽: 談談  Android  Java  談一談  Kotlin