第一次看文章的朋友能夠關注我,會不按期發佈大廠面試題、Android架構技術知識點及解析等內容,還有Android學習PDF+源碼筆記+面試文檔+進階視頻+Flutter+Kotlin等分享。前端
更多還能夠看個人GitHub連接:https://github.com/Meng997998/AndroidJX,看完順便點亮一下星星哦react
2019年立刻就結束了,又要到年後,跳槽的好時機,金三銀四,不少小夥伴但願趁着這個機會轉陣 Flutter。git
「老許,你要老婆不要?只要你開金口,我待會兒給你送來。「github
哈哈,錯了,老許,你要flutter面試資料不,如今就給你送來咯web
首先來看看各個公司招聘的需求吧,畢竟面試題只是一部分。面試
更美APP - Flutter開發工程師 20-40K·14薪算法
崗位職責編程
崗位要求後端
熟悉主流AR SDK(ARKit,ARCore,Vuforia等)之⼀優先多線程
格步科技 - Flutter開發工程師 20-30K
職位描述
有良好的產品意識和風險意識,可以把控好工做進度,積極樂觀,認真負責,善於溝通,樂於協做。
就先看兩個吧,其實大部分招聘寫的都差很少,咱們能夠抽出來幾個點:
第一點對於前端 web 開發同窗來講可能有些難度,畢竟 Flutter 只是一個 UI 框架,因此仍是要學習一些原生開發知識的。
第三點其實也沒什麼好說的,咱們本身寫幾個 demo 項目也是能夠的。
下面就來講第二點吧,也是咱們這篇文章的重點。
Flutter 的面試其實和 Android 面試的套路差很少,也是分兩個部分:
畢竟 Flutter 要使用 Dart 來寫,那也就必須瞭解 Dart 的一些相關知識點。
1. Dart 當中的 「..」表示什麼意思?
Dart 當中的 「..」意思是 「級聯操做符」,爲了方便配置而使用。
「..」和「.」不一樣的是 調用「..」後返回的至關因而 this,而「.」返回的則是該方法返回的值 。
2. Dart 的做用域
Dart 沒有 「public」「private」等關鍵字,默認就是公開的,私有變量使用 下劃線 _
開頭。
3. Dart 是否是單線程模型?是如何運行的?
Dart 是單線程模型,如何運行的看這張圖:
引用《Flutter中文網》裏的話:
Dart 在單線程中是以消息循環機制來運行的,其中包含兩個任務隊列,一個是「微任務隊列」 microtask queue,另外一個叫作「事件隊列」 event queue。
入口函數 main() 執行完後,消息循環機制便啓動了。首先會按照先進先出的順序逐個執行微任務隊列中的任務,當全部微任務隊列執行完後便開始執行事件隊列中的任務,事件任務執行完畢後再去執行微任務,如此循環往復,生生不息。
4. Dart 多任務如何並行的?
剛纔也說了,既然 Dart 不存在多線程,那如何進行多任務並行?
Dart 當中提供了一個 相似於新線程,可是不共享內存的獨立運行的 worker - isolate。
那他們是如何交互的?
這裏引用 flutter入門之dart中的併發編程、異步和事件驅動詳解 中的一部分答案:
在dart中,一個Isolate對象其實就是一個isolate執行環境的引用,通常來講咱們都是經過當前的isolate去控制其餘的isolate完成彼此之間的交互,而當咱們想要建立一個新的Isolate可使用Isolate.spawn方法獲取返回的一個新的isolate對象,兩個isolate之間使用SendPort相互發送消息,而isolate中也存在了一個與之對應的ReceivePort接受消息用來處理,可是咱們須要注意的是,ReceivePort和SendPort在每一個isolate都有一對,只有同一個isolate中的ReceivePort才能接受到當前類的SendPort發送的消息而且處理。
5. 說一下 Future?
Future,字面意思「將來」,是用來處理異步的工具。
剛纔也說過:
Dart 在單線程中是以消息循環機制來運行的,其中包含兩個任務隊列,一個是「微任務隊列」 microtask queue,另外一個叫作「事件隊列」 event queue。
Future 默認狀況下其實就是往「事件隊列」裏插入一個事件,當有空餘時間的時候就去執行,當執行完畢後會回調 Future.then(v)
方法。
而咱們也能夠經過使用 Future.microtask
方法來向 「微任務隊列」中插入一個任務,這樣就會提升他執行的效率。
由於在 Dart 每個 isolate 當中,執行優先級爲 : Main > MicroTask > EventQueue
6. 說一下 Stream?
Stream 和 Feature 同樣,都是用來處理異步的工具。
可是 Stream 和 Feature 不一樣的地方是 Stream 能夠接收多個異步結果,而Feature 只有一個。
Stream 的建立可使用 Stream.fromFuture
,也可使用 StreamController
來建立和控制。
還有一個注意點是:普通的 Stream 只能夠有一個訂閱者,若是想要多訂閱的話,要使用 asBroadcastStream()
。
7. 說一下 mixin?
關於什麼是 mixin,引用 張風捷特烈 文章中的:
首先mixin是一個定義類的關鍵字。直譯出來是混入,混合的意思 Dart爲了支持多重繼承,引入了mixin關鍵字,它最大的特殊處在於:
mixin定義的類不能有構造方法
,這樣能夠避免繼承多個類而產生的父類構造方法衝突
1. StatefulWidget 的生命週期
initState()
:Widget 初始化當前 State,在當前方法中是不能獲取到 Context 的,如想獲取,能夠試試 Future.delayed()
didChangeDependencies()
:在 initState()
後調用,State
對象依賴關係發生變化的時候也會調用。deactivate()
:當 State
被暫時從視圖樹中移除時會調用這個方法,頁面切換時也會調用該方法,和Android裏的 onPause
差很少。dispose()
:Widget 銷燬時調用。didUpdateWidget
:Widget 狀態發生變化的時候調用。借用 CoorChice 文章 裏的一張圖:
2. Flutter 如何與 Android iOS 通訊?
Flutter 經過 PlatformChannel
與原生進行交互,其中 PlatformChannel
分爲三種:
具體能夠查看 閒魚技術:深刻理解 Flutter Platform Channel。
3. 什麼是 Widgets、RenderObjects 和 Elements?
Widget
僅用於存儲渲染所須要的信息。RenderObject
負責管理佈局、繪製等操做。Element
纔是這顆巨大的控件樹上的實體。具體能夠查看 [譯] Flutter,什麼是 Widgets、RenderObjects 和 Elements?
4. 說一下什麼是狀態管理,爲何須要它?
首先狀態實際上是一個概念上的東西,區分全局狀態和局部狀態。
局部狀態好比說一個控件中輸入的信息,全局狀態好比是登錄後從後臺請求回來的 userId。
當全局狀態愈來愈多,多個頁面共享一個狀態時,咱們就須要管理它。
經常使用的狀態管理有:
5. 說一下 BLoC 模式?
具體能夠查看: Vadaski - Flutter | 狀態管理探索篇——BLoC(三)
這裏引用一部分:
BLoC是一種利用reactive programming方式構建應用的方法,這是一個由流構成的徹底異步的世界。
6. 如何統一管理錯誤頁面?
咱們都知道,若是在 Flutter 當中出錯的話,那就是一片紅。
可使用 ErrorWidget.builder
來自定義一個 Widget 就 ok 了。
暫時就寫到這,寫了這麼多,本身對 Flutter & Dart 的基礎認識也更深了,後續有新的面試題之類的,也歡迎發給我
關注我和個人專欄
私信我【安卓】領取flutter學習視頻
更多Android學習內容還能夠看個人GitHub連接:https://github.com/Meng997998/AndroidJX,看完順便點亮一下星星哦