為什麼今年許多Java後端選擇了Android開發?
家人們,史上最難就業季來襲:
大廠不斷裁員、開始縮招鎖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中集合遍歷有哪幾種方式?
「其他文章」
- 為什麼今年許多Java後端選擇了Android開發?
- 車載行業有望成為下一個網際網路行業時代風口
- Android面試官:這個知識點你都不知道,還如何去大廠,提漲薪?
- Android Studio 出現“Cannot resolve symbol” 解決辦法
- 一篇文章帶你全面讀懂Android Backup
- Android安卓進階技術分享之AGP工作原理
- Android進階技術之——一文吃透Android的訊息機制
- 技術漫談之——Jectpack Compose
- Android中的Coroutine協程原理詳解
- Spring中毒太深,離開了Spring,我居然連最基本的介面都不會寫了¯\_(ツ)_/¯
- 用Markdown寫Html和.md也就圖一樂,真騷操作還得用來做PPT
- 什麼?Android上面跑Linux?