個人簡介
學渣一枚,2017年6月某空港學校畢業。從事Android開發已經4年,開發過機頂盒應用,做過手機app,21年年後入職新單位從事車載應用開發。
工作經歷
因爲新公司入職不就主要說說前面的工作情況。
煎熬&沒有太多的成長(第一家公司)
處於這個狀態並不是因爲公司不好,相反是自己表現的不好。在公司時,公司有完善的培訓機制(還可以選擇其它方向的一些培訓,由其它部門的資深開發人員進行授課),入職時有對應的導師進行培訓。更加幸福的是每個月老闆都會買書給我們看。
既然在這麼好的一個環境爲什麼我還是這樣難受呢?總結有下面的原因。
- 心思雜亂。python、js 、web 都想要學習,最終的結果確是什麼都沒有。
- 貪玩 下班之後很多空餘時間都在玩遊戲。
- 自身技術基礎不夠,卻又選擇了錯誤的東西進行學習,導致主要工作上沒有做出太好的成績。最終的結果就是被公司拖着走。
茁壯成長&發展
爲甚麼要在成長前加上茁壯二字,因爲相對與第一家公司,個人的技術成長要好太多。
2018年的時候有幸接觸到了時間管理,開始學着對自身狀態進行調整。有計劃有目的的進行學習。每天會提前一個小時到達公司進行技術類書籍閱讀。兩年時間看完的技術書籍有:
- Android開發藝術探索
- 大話設計模式
- Android 源碼設計模式
- Android 進階解密
隨着時間的進行,自己也在項目小組由一個輔助的角色變成項目主力開發,同時自己成長到了中級開發水平,也會和初級的小夥伴進行一些技術交流。
相比於第一家公司,這邊並沒有一些技術培訓和導師指導。但是我的技術成長卻相對較大。個人的理解是:內在驅動大於外在。
前景展望
從3月份開始進行面試。前後面試大約有6家,通過幾家公司的面試也大致瞭解到了自身的價值(能拿多少錢)。其中最遺憾的是面試某筆記,前三輪技術面已經過了,結果vp掛掉了。可能是自己表現太積極,因爲確實很想去,甚至做好了如果能去願意接收降薪的準備。
相較於公司的其他小夥伴,我的面試過程還算比較順利。我認爲最好的我們不應該爲了面試而準備,而在於平時就應該注重積累自己的技術。
一些面試經歷
公司一:
軟件面試官:
- 自我介紹、工作履歷簡述。
- SVN 和 Git 區別?描述下 Git 提交過程以及什麼是工作區和暫存區?
- Git 中 merge 作用?和 rebase 有什麼區別?
- Java 中強引用、軟引用、弱引用、虛引用區別。
- Https 和 Http 區別,內部使用哪兒些算法。
- 對稱加密和非對稱加密區別。
- Jetpack 實際項目中用過哪兒些?
- 簡述 Apk 包大小優化思路。
- Kotlin 拓展函數怎麼實現的?基於什麼原理。
- Kotlin 屬性委託怎麼實現的?基於什麼原理。
- 簡述 SharePreferences 以及過程中遇到的問題。
- 爲什麼選擇 MMKV,MMKV 有什麼優勢,內部原理是什麼?
- 簡述 Handler 以及原理。泄漏怎麼解決?
硬件面試官:
- Flutter 實際開發經驗有多久?使用/瞭解過 Flutter 混編嗎?
- 怎麼優化的 Flutter 包大小?
- Flutter 中 Element、Widget 簡述。
- Android Compose 瞭解過嗎?簡述一下。
- so 庫動態加載有了解過嗎?
- 簡述 MMKV 原理。
- SharePreferences 有什麼缺陷?支持跨進程嗎?
- 在不使用任何三方庫,如何實現彈幕功能?如何保證低端機上流暢性。
- 自定義彈幕中,你 Model 怎麼設計?View 又怎麼設計?
- RecyclerView 和 ListView 有什麼區別?
- RecyclerView 緩存原理。
- 在不使用任何三方庫以及系統提供控件,如何實現 RecyclerView 下拉刷新?
- 直播是什麼實現的?需要注意的有什麼?使用過的視頻格式有什麼?如何保證視頻以及文字/語音同步性?
- 開發過音頻相關嗎?用的是什麼?音頻格式是什麼?
- 微信小程序使用什麼開發的?Vue 還是?
公司二:
- 工作多久了,你覺得你和其它 Android 工程師相比,有什麼優勢。
- 你的 GitHub 主要內容是什麼?
- 假如當你帶小朋友,你是如何和他進行分享以及幫助等?
- 你持續寫東西,輸出的動力是什麼?
- Kotlin 用多久了,你認爲你的 Kotlin 掌握水準在哪兒?初級、中級、高級?
- var、val、let、apply 有什麼區別?
- let 返回 it,apply 返回 this,它們有什麼區別?爲什麼這麼設計。
- lateinit 作用是什麼?
- Kotlin 協程有用過嗎?用在什麼場景?
- 協程是個什麼東西?
- 有了解過協程如何切換線程原理嗎?
- Retrofit 和 OkHttp 是什麼關係?
- Retrofit 是如何通過註解來方便我們 api 調用?基於什麼原理。
- JetPack 用過哪兒些?
- ViewModel 用來做什麼的?
- ViewModel 如何實現生命週期綁定?
- ViewModel 爲什麼存在?那我直接創建個類不可以嗎?如何實現數據綁定。
- ViewModel 如何實例,如何使用的?
- LiveData 如何實現的?
- LiveData postValue 和 setValue 賦值,這兩個會不會丟失數據,有沒有遇到過?
- MVC、MVP、MVVM 區別是什麼?
- Rxjava 用的多麼?map 和 flatMap 有什麼區別。
- RxJava 使用哪兒個操作符能保證順序執行?
- 如果讓你自己設計一個 Glide 你會如何設計?
- RGB_565 每個像素點佔多少內存?
- 爲什麼會使用 RGB_565?
- 爲什麼要對圖片進行一些壓縮?那服務器直接給我們直接裁剪指定尺寸大小不就好了。
- 假設現在有一張 1MB 圖片,我直接設置給 ImageView,那麼它在內存中佔用空間有多大?
- 性能優化都做過哪兒些內容?
- 瘦身的話,我們都是怎麼做的呢?
- armeabi 和 armeabi-v7a 有什麼區別?
- so 庫可不可以動態加載,如何實現?
- Android 版本從 5.0 到 12 都更新了什麼東西?
- Android 5.0 ART 是個什麼東西,具有什麼優勢。
- 今天的面試,自我感覺怎麼樣?
公司三:
- 請做一下自我介紹、學歷說明以及工作經驗。
- 公司團隊多大,主要負責哪兒些內容?公司是否有自營項目?外包嗎?
- 爲什麼 Google Play 搜索不到,原因是什麼?怎麼處理的?現在是一個什麼樣的狀態?
- 關於彈框隱私協議,工信部怎麼規定的?
- Luban 壓縮具體在業務中做哪兒些操作?你知道它內部使用了哪兒些算法嗎?
- 圖片使用 Glide,你爲什麼使用它,它有什麼優點,內部算法有什麼?
- 請手寫 Glide 加載圖片地址到 ImageView,並且圖片展示效果爲一個圓。
- ShapeableImageView 你知道原理是什麼嗎?最低兼容版本你知道嗎?
- 假設後端接口列表中返回了超大圖片,你是如何處理優化並正常顯示列表中的?
- 使用過 Jetpack 的哪兒些東西,你對它評價怎麼說?
- Jetpack Compose 瞭解過麼?簡單談下個人理解。
- Kotlin 與 Java 區別在哪兒裏?
- Android 原生 Apk 以及 Flutter Apk 大小優化怎麼做的?
- 怎麼統計性能調優數據?
- 項目中接觸過 WebView 相關嗎?這塊怎麼處理的?
- SpannedString 原理是什麼?都用過它做什麼操作?
- TextView 中 setText(Html.fromHtml()) 內部原理知道嗎?
- 簡單描述 CoordinatorLayout 以及內部事件如何分發?
- 圖片輪播怎麼做的?如何做到我在最後一張無縫滑動到第一張圖片?
- 你知道 Retrofit 是怎麼發出的請求嗎?
- 你的 Android 借殼分享微信中 mmessage_content 怎麼算出來的?
- 項目中 Flutter 中是原生開發還是混合開發?使用了哪兒些框架?
- 假設地圖現在沒有開源庫,你怎麼在 Flutter 實現地圖效果?如果我想當前頁面上面是地圖下面是其他內容呢?
公司四:
- 自我介紹以及學歷簡述。
- HashMap 內部存儲是怎樣的?
- hash 衝突是個什麼概念?衝突之後怎麼解決?
- 哈希桶是什麼結構?
- 鏈表結構節點是怎樣的?
- Java 中的 volatile 是線程安全的嗎?如果對他做自增操作,例如 a++。
- Handle 中的 postDelay 實現原理是怎樣的,它是怎麼實現的延遲處理?
- 優化線上 Apk 大小都了什麼操作?做完 Apk 大小之後從多少降低到多少?
- 下載轉換率怎麼統計的?
- 假設現在給你個需求,需要在打包的過程中去處理圖片,你有什麼思路?在哪兒個 task 去做 hook?
- 資源編譯的流程是什麼樣的?
- 360 加固原因是什麼?
- 你覺得加固或者安全方面,應該從哪兒個方面入手?Dex 層怎麼處理能防止反編譯?
- so 加固你知道有什麼方案嗎?
- 你比較擅長什麼?設計或者某個技術有比較深的瞭解?
- 責任鏈模式簡述,一般用於什麼場景下。
- 你怎麼理解的依賴倒置設計,具體在什麼場景下使用?
未來要做的事
- 學習數據結構 678月刷完leetcode 最熱100題
- 源碼閱讀總結
- 藍牙應用層的運行原理(6月已完成)
- 系統binder機制
- 系統Anr原理
- 其它的一些框架源碼閱讀
工作上的小建議
- 如果你初入職場,在專業知識不是太牢固的情況下建議不要花過多得時間研究其它的一些東西,而是專注於提升自己的專業技能
- 關於職場技能的學習,我們要記住,我們的學習都是有目的,學過之後一定要總結歸納。不要反覆的重頭在來。
- 關於工作的選擇,我的理解是合適最好。就好比將一個成績極差的學生放在及其優秀的班級,他往往是跟不上老師的節奏的。需要下來花大量的時間來補,而成年人往往缺少這樣的時間。
- 關於數據結構和設計模式,許多多年開發的小夥伴居然也有說不重要。舉個簡單的例子,gradle項目之間怎麼判斷循環依賴的呢?學習了圖的知識,瞭解拓撲排序。你會知道至少這個是判斷循環依賴的的一種方式。不瞭解他們很多時候只能停留在api調用。而瞭解數據結構你纔有編寫一些深層次東西的可能。
- 最後一點,靜下心來,做自己想做的事,每一個目標都需要一點一滴的努力。
感謝你看到這裏,如果你覺得文章還不錯,或者對你小有啓發。歡迎點贊轉發。
以上就是一枚普通的Android開發者的4年。
希望能夠有機會入大廠上岸。
面試大廠需要準備的一些技能
面對這麼多的公司,每個公司的考察重點都不一樣,我們在面試一定要做好充分準備,只有充分地準備好了面試,纔可以更有自信地吊打面試官。
Android面試會涉及到很多雜而亂的知識點,所以想要進入大廠,你不僅需要有十分紮實的基本功,還需要有完整的解答邏輯!
這份錦囊裏還包含了百度、阿里、騰訊、京東等衆多大廠的Android面試真題,詳細介紹了各企業的面試重點、解決方案,幫助大家做好面試準備,斬獲大廠高薪 offer!
通過這份錦囊,你能收穫:
- 瞭解大廠的面試考覈標準,有的放矢地準備面試;
- 掌握一手最新Android面試真題,有針對性地刷題;
- 爲自己心儀的公司提前做好準備,面試更有信心。
多餘的話就不講了,接下來將分享面試的一個複習路線,如果你也在準備面試但是不知道怎麼高效複習,可以參考一下我的複習路線,有任何問題也歡迎一起互相交流,加油吧!
Android學習路線圖
首先,對於沒有學習方向,知識不體系的人,我把我工作幾年整理的學習路線分享給大家,做一個借鑑作用,還不知道怎麼學習的人可以直接照着我這個學習路線一個個的去學習,知識不體系的人可以參考下我整理路線的方式,總之希望能夠幫到你們!
模塊化學習資源
接下來是每個模塊我整理出來的文檔學習資料,幫助大家更細緻化的學習。
《Android彙總複習資料—Java》
《Android彙總複習資料—Android》
《Android彙總複習資料—Android擴展》
《Android彙總複習資料—Kotlin》
《Android彙總複習資料—Flutter》
《Android彙總複習資料—算法》
除了上面的學習路線,還可以額外的配合以下方式學習,效果翻倍~
①看視頻進行系統學習
前幾年的Crud經歷,讓我明白自己真的算是菜雞中的戰鬥機,也正因爲Crud,導致自己技術比較零散,也不夠深入不夠系統,所以重新進行學習是很有必要的。我差的是系統知識,差的結構框架和思路,所以通過視頻來學習,效果更好,也更全面。關於視頻學習,個人可以推薦去B站進行學習,B站上有很多學習視頻,唯一的缺點就是免費的容易過時。
另外,我自己也珍藏了好幾套視頻,有需要的我也可以分享給你。
②讀源碼,看實戰筆記,學習大神思路
“編程語言是程序員的表達的方式,而架構是程序員對世界的認知”。所以,程序員要想快速認知並學習架構,讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背後的想法;程序員說:讀萬行源碼,行萬種實踐。
主要內含微信 MMKV 源碼、AsyncTask 源碼、Volley 源碼、Retrofit源碼、OkHttp 源碼等等。
③面試前夕,刷題衝刺
面試的前一週時間內,就可以開始刷題衝刺了。請記住,刷題的時候,技術的優先,算法的看些基本的,比如排序等即可,而智力題,除非是校招,否則一般不怎麼會問。
關於面試刷題,我個人也準備了一套系統的面試題,幫助你舉一反三:
④2020大廠面試高頻知識點
- 圖片
- 網絡和安全機制
- 數據庫
- 插件化、模塊化、組件化、熱修復、增量更新、Gradle
- 架構設計和設計模式
- 性能優化
- Android Framework
- Android優秀三方庫源碼