又到了“金九銀十”換作業的高峰期,在互聯網寒冬下,抓住機會就顯得尤為重要了,那作為Android工程師我們應該從哪些方面去準備呢? 例如,不太熟悉的技能要不要寫在簡歷上、要復習哪些Android組件的知識、刷演算法題目有沒有用,可能在面試前你都會仔細考慮這些問題, 下面我就結合自身的經驗和理解,幫你梳理一下關于簡歷、面試和演算法方面需要準備的內容,分享一些我的心得體會,
Java基礎
面試Android崗位,Java基礎那是必問的,如果專案中使用kotlin比較多的話,可能還會問一些kotlin相關的問題,
Java, 作為一門基礎語言,考核的是應聘者是否具備扎實的基本功,很多培訓班或者非科班出身的人,經常會栽在這一環節,一般這個環節的問題答不上來的話,基本上是提前結束了,
那么常見面試的Java基礎問題有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.Java集合類List,Map,Set相關的實作原理,
- 2.Java執行緒池的實作原理和使用
- 3.Java執行緒同步相關的知識點,
- 4.Java鎖機制,以及死鎖產生的原因以及解決方案,
- 5.Java反射、泛型、注解相關的知識點以及使用,
- 6.Java類加載機制,
- 7.Java虛擬機的資源回識訓制以及演算法,
以上基本上是面試Android崗位的常見考點,所以我們必須重視對Java語言的學習和理解,即便你在平時作業中使用kotlin較多,也不能忽視對Java基礎知識的鞏固和學習,
設計模式
設計模式其本身其實也是屬于Java基礎范疇的,只不過部分大廠對設計模式的要求較高,所以會單獨擰出來進行考察,
很多大廠都喜歡招那些對代碼有潔癖,有高追求的人進來,在他們眼里,追求的并不是這個功能如何實作,而是這個功能如何更好地實作,只要性能不佳或者擴展性不夠強的話,結局基本上就是推翻重構,
其實設計模式的考核因人而異,面試官并不會過于為難你,因為設計模式其本身就是個非常虛的東西,很多人即使是了解設計模式,在平時的作業中也不一定會使用它們,所以設計模式的考核更多的是加分項,并不是必要項,所以即使答不上來其實也是沒什么關系的,
但是如果你在簡歷中寫了**“熟悉/精通常用的設計模式”**的時候,那么你就要小心了,因為你可能將會面臨一波直擊靈魂深處的拷問,
那么設計模式一般會考察哪些內容呢?下面我們簡單列舉一些供大家參考:
- 1.java設計模式的六大設計原則以及它們的關系,
- 2.單例模式、配接器模式、裝飾者模式、代理模式、外觀模式、策略模式、觀察者模式、責任鏈模式、命令模式、狀態模式、中介者模式,這十一種常用的設計模式是考核的重點,你需要掌握它們的優缺點以及使用的場景,
- 3.配接器模式,裝飾者模式,外觀模式它們之間的區別是什么,
- 4.代理模式、策略模式、狀態模式它們之間的區別是什么,
- 5.外觀模式、中介模式它們之間的區別是什么,
- 6.靜態代理和動態代理的區別,什么場景使用,實作動態代理的幾種方式,
- 7.簡單列舉幾個Android原始碼中使用到設計模式的例子,
以上我只是簡單列舉了一些設計模式常見的考點,因為設計模式的考核相對靈活,因此還是以實際應用場景為主,
例如,面試官可能會問你:簡單列舉幾個你常用的設計模式,談談它們的優缺點以及使用的場景,
這個時候,大多數做Android開發的人腦海里可能只剩下單例模式、觀察者模式這些個常常被他們濫用的設計模式,
這里我并不推薦大家說這兩種設計模式,為什么呢?因為這兩種設計模式并不能很好地詮釋設計模式的美,而且你要知道任何東西聽多了,人的心理是受不了的,這很容易導致面試官心態崩潰,
就拿我來說,只要一有人無腦回答單例模式或者觀察者模式的時候,我都會情不自禁地提高問題的難度,你要知道,就是一個簡簡單單的單例模式,我也能給你問到心態崩潰,
所以聽我的勸,不要一提到設計模式,你腦海里就只剩下單例模式或者觀察者模式,多了解了解其他設計模式,對你會有很大的幫助,
注意:對設計模式不夠了解的,可以參考我開源的 architect-java 專案,里面有我自己整理的一些簡單的演算法和設計模式的講解,可以說非常實用,
Android基礎
Android基礎,不用說這是面試Android崗位必須要問的內容,要是連這個都答不上來,基本你的面試就提前結束了,
Android基礎是任何Android面試都需要考核的內容,不過這也是按級別而定,一般高級開發工程師的面試,Android基礎只是一筆帶過,
那么Android基礎有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.Handler機制以及相關知識,
- 2.Activity和Fragment生命周期,
- 3.Android四大組件相關的知識,
- 4.Android行程間通信的方式,
- 5.Context相關的知識,
- 6.Activity的啟動模式,
- 7.Android影片相關知識,
- 8.Android自定義組件相關知識,
- 9.Android事件分發機制以及觸摸事件沖突的處理,
- 10.ANR產生的原因以及避免ANR的方式,
- 11.記憶體泄漏產生的原因以及定位解決的方式,
- 12.OOM產生的原因以及解決的方式,
- 13.Android頁面渲染機制以及優化方式,
- 14.LinearLayout、FrameLayout、RelativeLayout和ConstraintLayout的理解和性能對比,
- 15.Android各版本的特性,
- 16.Android螢屏適配的技巧,
- 17.MVC,MVP,MVVM的理解與實踐,
- 18.Android的主題、樣式、屬性相關的內容,
- 19.JNI相關的知識,
以上內容是作為一名合格Android開發工程師所必備的知識點,也是常見的考點,請務必每條都要清楚掌握,這樣你在面試程序中才能游刃有余,
Android原始碼分析
Android原始碼分析,算是要求較高的考核,不過這在大廠面試中非常普遍,因為很多大廠對Android原始碼的分析和理解都有相當高的要求,
那么常見的Android原始碼分析有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.Android系統的啟動流程分析,
- 2.APP啟動的流程分析,
- 3.Activity的啟動流程分析,
- 4.Zygote行程的創建和啟動流程分析,
- 5.Window視窗創建和加載的流程分析,
- 6.Dalvik和ART的理解,
- 7.RecyclerView的原始碼分析,
閱讀原始碼是一件相對枯燥的事情,如果平時作業中涉及不到的話就很難堅持下去,因此需要非常強的毅力,不過話又說回來,如果你能夠熟練地掌握Android原始碼的話,那么就非常有機會進入大廠了,
Android進階技能
這部分一般是對Android高級開發工程師的考核,主要涉及的點主要是一些性能優化,技術細節方面的問題,
要想成為一名高級開發工程師,性能優化以及架構設計永遠都是繞不開的話題,做技術如果只是廣而不深的話,是不可能成為一名高級開發工程師的,只有不斷提升自己的不可替代性,才能提高自己的價值,
那么常見的Android進階技能有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.App穩定性優化,(crash、性能以及體驗等)
- 2.App啟動速度優化,
- 3.App記憶體優化,
- 4.App界面繪制優化,
- 5.App瘦身優化,
- 6.App安全優化,
- 7.網路請求優化,
- 8.WebView使用優化,
- 9.RecyclerView的快取重繪優化,
- 10.AOP技術的原理和實踐,
- 11.gradle腳本持續集成技術,
- 12.App行程保活,
以上只是Android進階技能的一小部分通用性技術,除此之外還有很多細分領域相關的進階技能,總之,如果這項技術是你掌握而其他人普遍不了解的,那么它就屬于進階技能,
新技術研究
Android這些年的技術發展基本上已經趨向成熟,所以對于新技術的研究也并不是那么看中,可能面試官就是隨口問一下,想要知道你的學習欲望強不強罷了,
那么有什么新的技術可以在業余時間進行研究呢?下面我們簡單列舉一些供大家參考:
- 1.Android組件化,
- 2.Android插件化,
- 3.Android熱更新技術,
- 4.Android JetPack框架技術,
- 5.Kotlin開發技術,
- 6.Android Hook技術,
- 7.AOP技術,
- 8.依賴注入技術IoC,
- 9.跨平臺開發技術:ReactNative、Flutter等,
上面的內容,其實很多已經算不上新技術了,如果你現在還不了解的話,那么你最好花點時間了解一下,否則我只能說你是真的out了,
開源專案原始碼分析
開源專案原始碼分析和Android原始碼分析一樣,也是考核應聘者對原理的理解,如果僅僅只是會使用而不對其原理加以了解的話,那么你也只能算是達到初級水平,這樣是無法進入到大廠的,
那么開源專案的原始碼分析我們應該怎么做呢?首先我們需要帶著問題一點點閱讀原始碼,搞清楚其內部的實作邏輯,然后梳理出其大致的設計架構,畫出UML圖,最后總結出其中運用到的設計模式和思想,
那么有哪些優質的開源專案值得我們去研究其原始碼呢?下面我們簡單列舉一些供大家參考:
- OkHttp
- Retrofit
- Glide
- LeakCanary
- RxJava
- ARouter
- EventBus
- ButterKnife
- GreenDao
- Dagger2
以上我列舉的基本上都是我們平時開發程序中經常使用到的開源專案,認真研究和分析他們的設計思想和精髓,并積極運用到我們平時的編碼當中去,可以讓我們的技術得到質的飛躍!
演算法
部分大廠對Android開發工程師的演算法也是有一定要求的,這部分沒有什么好說的,打開LeetCode去多刷刷題就可以了,
雖說Android開發工程師也需要掌握一定的演算法,不過和那些專業做演算法的相比肯定是沒那么高的要求的,我們并不需要把LeetCode的每道題都刷一遍,只要把一些簡單和中等難度的題刷一遍就可以了,
那么常見的Android演算法題有哪些呢?下面我們簡單列舉一些供大家參考:
- 1.各類排序,(尤其二分法插入排序、歸并排序需要著重掌握其思想)
- 2.手寫反轉鏈表、鏈表復制、鏈表合并,
- 3.手寫佇列或者鏈表等資料結構的實作,
- 4.字串匹配、去重問題,
- 5.雙指標演算法問題,
- 6.陣列查重問題,
- 7.二叉樹的遍歷和序列化,
- 8.貪心演算法相關問題,
一個好的演算法可能極大地提升應用的性能,如果你平時有心的話就會發現在Android原始碼中也經常能看到演算法的身影,感興趣的可以閱讀一下SparseArray的原始碼,
Android面試資料分享
資料不在于多,而在于精,下面我就簡單分享一下曾經對我幫助比較大的幾個面試資料,如果你有需要這套Android進階面試指南,這些筆記和面試檔案已經全部整理收錄在我的Github上了,有需要的小伙伴點擊這(這這這)來我的Github查看獲取學習吧!
Andorid從底層基礎到架構成長筆記目錄展示

Android開發必備底層技術模塊
BATJ這些大公司都要求有扎實的Java語言基礎和虛擬機底層原理,這一個部分就是Android開發中最常用的java語言相關知識,在這個里面,結合了Dex檔案加密實戰和熱修復手寫實戰來讓大家深刻體會Java語言體系的重要性以及在Android開發中的地位

FrameWork原始碼與UI及jetpack模塊
在Android中,Framework泛指系統架構層,Framework的中文意思是“框架”,在軟體開發中通常指開發框架,在一個系統中處于內核層之上,為頂層應用提供介面,被設計用來幫助開發者快速開發頂層應用,而不必關心系統內核運行機制,通常Framework都會隱藏main函式等應用程式必須的組件,開發人員只需把精力放在功能代碼的實作上,說簡單點,Framework具體的作業也就是為android應用開發的開發人員提供了一系列的服務和API的介面,
FrameWork原始碼決議: Binder+Handler+Zygote+ AMS+ PMS+WMS

UI底層原始碼深度剖析篇:UI繪制流程+ LayoutInflater + 事件分發機制+ 屬性影片+ViewGroup+ View

Jetpack實戰及大廠架構演進實踐手冊

Android性能分析與優化實戰方案
作為一名Android程式員,說實話要做好性能這一塊,真心不容易,為什么這么說? 是因為需要接觸的知識實在是太多了, Android 是一個整體,牽一發而動全身,不是說只懂一個模塊就可以做好,這份《Android性能分析與優化實戰進階手冊》,讓每一個想進入 Android 系統開發和優化這個領域的人,能通過這份筆記手冊快速入門,同時也算是對知識的一個梳理,查漏補缺,終身學習,
- 記憶體優化
- 布局優化
- 啟動優化
- 卡頓優化
- 穩定性優化
- 電量優化
- 執行緒優化
- 瘦身優化

Andorid高級音視頻實戰模塊
- 基礎語法
- H264視頻編碼
- H265編碼原理及應用
- MediaCodec集訓
- Opengl與音視頻編解碼
- 實戰

Android架構師必備原始碼框架精講決議模塊

Gradle高階實戰模塊
- Groovy語法
- Gradle Android插件配置
- 實戰

Kotlin入門到精通模塊

Flutter2.0混合式開發模塊
- Dart語法
- Flutter2.0之UI
- Flutter2.0進階
- Flutter2.0優化
- 實戰

鴻蒙2.0系統開發模塊
- Ability組件
- 分布式任務
- 事件總線
- 鴻蒙執行緒
- UI自定義控制元件

總結
同樣是做Andorid,有的人作業5年工資沒變化,有的人作業2年就已經年薪50W,這個現象或許前幾年還不明顯, 但隨著近幾年后端技術瘋了一般的快速發展,曾經那個只要會個UI啥的就能走遍天下的時代早已不在了,人才水平的分化也越來越明顯,
競爭永遠都是非常殘酷的,畢竟成為一個架構師不是那么容易的,一個架構師的成長來自于機會,努力及天分 !在這個后浪奔騰的時代,不管是你是剛作業還是有幾年開發了,我相信以上這份Andorid從底層基礎到架構成長筆記你都需要閱讀閱讀,希望能夠對你的職業發展有所幫助, 這些筆記和面試檔案已經全部整理收錄在我的Github上了,有需要的小伙伴點擊這(這這這)來我的Github查看獲取學習吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/298406.html
標籤:其他
