為什麼今年許多Java後端選擇了Android開發?

語言: CN / TW / HK

家人們,史上最難就業季來襲:

大廠不斷裁員、開始縮招鎖hc

簡歷被刷、實習留用被鴿

……

今年受到疫情和經濟市場的影響,就業市場非常不樂觀:

網際網路陷入“寒冬”,位元組、騰訊、蝦皮等大廠不斷裁員、縮招

在這裡插入圖片描述 不傳謠,不信謠,自己實力到位了,什麼“寒冬”都吹不跑自己

在今年10月份,秋招進入“白熱化”階段。身邊不少從事Java後端的朋友在面試中碰壁,但奇怪的是今年Android開發竟在這股寒流中站了出來。

今年Java後端就業人數眾多,這就直接導致卷的離譜,而Android開發。Android是全球最大的智慧手機作業系統,Android在國內的市場份額愈來愈額高。最近幾年發展非常快速,但人才積累卻沒有跟上,優秀的Android開發工程師仍然存在不小的缺口。Android應用的主要開發語言就是Java,所以很多Java後端開發選擇了這個方向

在這為了能夠幫到最近有跳槽需求的朋友,本篇文章整理和總結了面試中各種最常見的知識點與問題,將為最近準備面試的各位開發者衝刺大廠保駕護航!

有些知識點不經常使用就會忘記,但是面試還會問,對此,我也是深受其害,所以我決定將這些遇見的問題整理下來,分享出去,幫助更多的人,我們共同進步。所謂“溫故而知新”,沒事的時候多翻看一下這些知識,沒準就會有新的收穫。你沒時間整理的東西,我都幫你寫好了。

詳細VX關注公眾號: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是什麼?它存在哪些問題?該如何解決? 在這裡插入圖片描述

第二章 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 分別屬於哪一層?

(十二)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中集合遍歷有哪幾種方式? ​在這裡插入圖片描述