本篇將由?環境搭建、實現原理、編程開發、插件開發、編譯運行、性能穩定、發展未來?等七個方面,對當前的?React Native?和?Flutter?進行全面的分析對比,希望能給你更有價值的參考。
前言
移動端跨平臺在經歷數年沉浮之后,如今還能在舞臺聚光燈下雀躍的, 也只剩下?React Native?和?Flutter?了,作為沉淀了數年的 “豪門” 與 19 年當紅的 “新貴” ,它們之間的 “針鋒相對” 也成了開發者們關心的事情。
過去曾有人問我:“他即寫 Java 又會 Object-C ,在 Android 和 IOS 平臺上可以同時開發,為什么還要學跨平臺呢?”
而我的回答是:跨平臺的市場優勢不在于性能或學習成本,甚至平臺適配會更耗費時間,但是它最終能讓代碼邏輯(特別是業務邏輯),無縫的復用在各個平臺上,降低了重復代碼的維護成本,保證了各平臺間的統一性,?如果這時候還能保證一定的性能,那就更完美了。
阿里一面(考察技術深度)面試時間1小時
1. 面試官:來先介紹下你最成熟的一個項目是哪個?
(放心,面試上來都是先問你項目,了解下你情況)
2. 面試官:嗯嗯嗯,好的,我這有紙,能簡單的畫一下你這個項目的架構圖嗎?
3. 面試官:好,來說一說在項目中做過哪些優化?
4. 面試官:按照你說的,在項目啟動的時候,為了提速打開APP,你說你做了dex分包的預加載操作,為什么需要多開一個進程單獨進行dex的預加載?
5. 面試官:dex一般都解壓到哪里?如何做的?
6. 面試官:MVP的缺點是什么?
7. 面試官:除了MVP,MVC,MVVM外還有什么其他的架構方式?
(考下你的知識點,還是比較簡單的,想必大家都了解過吧,很久以前了解的clean架構,還有jetpack的AAC)
好了,面試到這里已經有段時間了,問題還是比較簡單的,屬于熱身階段,下面就開始進入深度的問題了
8. 面試官:你做了Android這么久了,說一說你擅長的地方
(你們懂的,深入問題先得弄清你哪里擅長,不然沒法進入深度提問,當然這里作者選擇了性能優化方向)
9. 面試官:來說一說,在5.0以上和4.0加載dex時的方式有什么區別?
(這個還是有一定深度的,沒有真正做過性能優化的小伙伴們,可能真的不知道,簡單說下,5.0以上會在安裝的時候就會自動加載多dex了,而4.0不會)
10. 面試官:為什么5.0以上要有這個機制?
(這個還真沒答上來,知道的小伙伴們記得留言)
11. 面試官:你了解過odex嗎?
(估計是對上一題的提醒,無奈只是聽過,具體不是很了解)
12. 面試官:說一下你了解的Android虛擬機有哪些?
(繼續深挖。。。ART虛擬機,dalvik虛擬機,說完感覺有的后悔,感覺接下來的問題就是要繼續深挖)
13. 面試官:這兩個虛擬機有什么區別嗎?
(還好還好,還是知道一點的,ART虛擬機是可以自動在安裝的時候就去加載多dex的,但是dalvik虛擬機不會哦)
14. 面試官:低頭看簡歷,大概2分鐘,繼續問:說說什么是同步屏障,在Android繪制的過程中,掉幀是如何處理的
(沒有繼續深挖虛擬機,這個考察的都是Android繪制的原理,看過原理的應該都知道,同步屏障,然后發送VSync脈沖信號包括掉幀的處理等等,還是比較簡單的,就不一一敘述了)
15.面試官:了解過x2c嗎?它和常規的xml轉換有什么區別 (比較簡單,不在敘述)
16.面試官:Handler持有Activity的引用會造成內存泄漏,那么如何避免?
17.面試官:內存泄漏,還有哪些檢測工具?
18.面試官:LeakCanary 的原理說一說 (你們懂的,肯定是17題的時候,我引出的LeakCanary 。。。。哈哈,陳述原理吧)
19.面試官:ANR 的原理說一說
20.面試官:還做了哪些內存優化
(縮減包體積,縮減資源路徑 微信的一個框架AndResGuard了解下,還可以把圖片轉換成webp)
21.面試官:webp和普通的png的區別在哪
(好吧,上一題留的坑,不過只是知道webp滿足圖片的清晰度要求及大小會很小,其他的了解的不多)
22.面試官:webp的原理你知道嗎
(布置到。。。=,=)
23.面試官:okHttp的原理你了解嗎?使用時是如何對它封裝的
(這個還是了解的,開始考網絡方面了)
24.面試官:dagger了解過嗎?動態編譯知道嗎?
(基礎送分題)
25.面試官:動態編譯和反射相比,除了性能方面外還有什么區別?
26.面試官:來后面有黑板,畫一下工廠模式的UML圖吧
(1面進入了尾聲,考察下動手能力)
27.面試官:處理過什么手勢回饋嗎
28.面試官:處理死鎖嗎?如何避免
(估計是感覺我有點疲憊和緊張,開始問一些簡單的問題緩和下,哈哈)
29.面試官:http和https有什么區別?
30.面試官:三次握手簡單說下
31.面試官:做個題吧,就寫個雙鏈表翻轉吧
(最后一題)
一面完事,然后進來一個人非常好的兄臺,給我送了一杯水
如何成為Android高級架構師!
架構師必須具備抽象思維和分析的能力,這是你進行系統分析和系統分解的基本素質。只有具備這樣的能力,架構師才能看清系統的整體,掌控全局,這也是架構師大局觀的形成基礎。 你如何具備這種能力呢?一是來自于經驗,二是來自于學習。
架構師不僅要具備在問題領域上的經驗,也需要具備在軟件工程領域內的經驗。也就是說,架構師必須能夠準確得理解需求,然后用軟件工程的思想,把需求轉化和分解成可用計算機語言實現的程度。經驗的積累是需要一個時間過程的,這個過程誰也幫不了你,是需要你去經歷的。
但是,如果你有意識地去培養,不斷吸取前人的經驗的話,還是可以縮短這個周期的。這也是我整理架構師進階此系列的始動力之一。
成為Android架構師必備知識技能
對應導圖的學習筆記(由阿里P8大牛手寫,我負責整理成PDF筆記)
部分內容展示
《設計思想解讀開源框架》
- 目錄
- 熱修復設計
- 插件化框架設計
《360°全方面性能優化》
- 設計思想與代碼質量優化
- 程序性能優化
…(img-tV0cgCt8-1621435684663)]
- 設計思想與代碼質量優化
[外鏈圖片轉存中…(img-F034fX95-1621435684664)] - 程序性能優化
[外鏈圖片轉存中…(img-jG6fA5lW-1621435684665)]
本文在開源項目:【騰訊文檔 】中已收錄,里面包含不同方向的自學編程路線、面試題集合/面經、及系列技術文章等,資源持續更新中…