老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

第一次看文章的朋友能夠關注我,會不按期發佈大廠面試題、Android架構技術知識點及解析等內容,還有Android學習PDF+源碼筆記+面試文檔+進階視頻+Flutter+Kotlin等分享。前端

更多還能夠看個人GitHub連接:https://github.com/Meng997998/AndroidJX,看完順便點亮一下星星哦react

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

前言

2019年立刻就結束了,又要到年後,跳槽的好時機,金三銀四,不少小夥伴但願趁着這個機會轉陣 Flutter。git

「老許,你要老婆不要?只要你開金口,我待會兒給你送來。「github

哈哈,錯了,老許,你要flutter面試資料不,如今就給你送來咯web

先看看各大公司招聘的需求

首先來看看各個公司招聘的需求吧,畢竟面試題只是一部分。面試

更美APP - Flutter開發工程師 20-40K·14薪算法

崗位職責編程

  • 使用Flutter進行ai sdk 應用研發;可以獨立完成iOS、Android應用的開發工做;
  • 和算法工程師一塊兒研討技術實現方案,進行應用及系統整合;
  • 熟悉Flutter相關API及第三方框架;
  • 持續對產品開發流程進行改進與優化,提升開發能力和效率,並能經過技術提高用戶體驗和可用性。
  • 開發ar相關業務

崗位要求後端

  • 可以使用Flutter進行跨平臺的移動端開發;
  • 熟悉iOS或安卓原生開發者優先;
  • 有Flutter實際項目經驗者優先。
  • 熟悉主流AR SDK(ARKit,ARCore,Vuforia等)之⼀優先多線程

    • *

格步科技 - Flutter開發工程師 20-30K

職位描述

  • 熟悉Flutter 編程語言,熟練使用各類UI組件並進行UI 開發,並對Java 語言有必定的瞭解;
  • 2年以上Android開發經驗,熟悉Android SDK,有良好的面向組件編程經驗,能獨立開發Android App;
  • 熟悉經常使用單元測試框架,具備敏銳的抽象和封裝意識,熟練編寫單元測試代碼,保證代碼質量;
  • 有iOS、Web前端例如ReactNative或Web後端經驗優先,有知名開源做品優先;
  • 熟練使用Git 經常使用操做命令,並熟悉經常使用的基於Git的代碼版本控制平臺Github,Gitlab等;
  • 具有較強的分析解決問題能力和抗壓能力,對新技術富有好奇心,積極探索,快速學習並應用到產品中;
  • 有良好的產品意識和風險意識,可以把控好工做進度,積極樂觀,認真負責,善於溝通,樂於協做。

    • *

就先看兩個吧,其實大部分招聘寫的都差很少,咱們能夠抽出來幾個點:

  1. 瞭解原生開發,對原生開發有經驗
  2. 熟悉 Flutter 及 API
  3. 有過必定的 Flutter 開發經驗

第一點對於前端 web 開發同窗來講可能有些難度,畢竟 Flutter 只是一個 UI 框架,因此仍是要學習一些原生開發知識的。

第三點其實也沒什麼好說的,咱們本身寫幾個 demo 項目也是能夠的。

下面就來講第二點吧,也是咱們這篇文章的重點。

面試題相關

Flutter 的面試其實和 Android 面試的套路差很少,也是分兩個部分:

  1. Dart
  2. Flutter

畢竟 Flutter 要使用 Dart 來寫,那也就必須瞭解 Dart 的一些相關知識點。

Dart 相關面試題

1. Dart 當中的 「..」表示什麼意思?

Dart 當中的 「..」意思是 「級聯操做符」,爲了方便配置而使用。

「..」和「.」不一樣的是 調用「..」後返回的至關因而 this,而「.」返回的則是該方法返回的值 。

2. Dart 的做用域

Dart 沒有 「public」「private」等關鍵字,默認就是公開的,私有變量使用 下劃線 _開頭。

3. Dart 是否是單線程模型?是如何運行的?

Dart 是單線程模型,如何運行的看這張圖:

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

引用《Flutter中文網》裏的話:

Dart 在單線程中是以消息循環機制來運行的,其中包含兩個任務隊列,一個是「微任務隊列」 microtask queue,另外一個叫作「事件隊列」 event queue

入口函數 main() 執行完後,消息循環機制便啓動了。首先會按照先進先出的順序逐個執行微任務隊列中的任務,當全部微任務隊列執行完後便開始執行事件隊列中的任務,事件任務執行完畢後再去執行微任務,如此循環往復,生生不息。

4. Dart 多任務如何並行的?

剛纔也說了,既然 Dart 不存在多線程,那如何進行多任務並行?

Dart 當中提供了一個 相似於新線程,可是不共享內存的獨立運行的 worker - isolate

那他們是如何交互的?

這裏引用 flutter入門之dart中的併發編程、異步和事件驅動詳解 中的一部分答案:

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

在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定義的類不能有構造方法,這樣能夠避免繼承多個類而產生的父類構造方法衝突

Flutter 相關面試題

1. StatefulWidget 的生命週期

  • initState():Widget 初始化當前 State,在當前方法中是不能獲取到 Context 的,如想獲取,能夠試試 Future.delayed()
  • didChangeDependencies():在 initState() 後調用,State對象依賴關係發生變化的時候也會調用。
  • deactivate():當 State 被暫時從視圖樹中移除時會調用這個方法,頁面切換時也會調用該方法,和Android裏的 onPause 差很少。
  • dispose():Widget 銷燬時調用。
  • didUpdateWidget:Widget 狀態發生變化的時候調用。

借用 CoorChice 文章 裏的一張圖:

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

2. Flutter 如何與 Android iOS 通訊?

Flutter 經過 PlatformChannel 與原生進行交互,其中 PlatformChannel 分爲三種:

  1. BasicMessageChannel:用於傳遞字符串和半結構化的信息。
  2. MethodChannel:用於傳遞方法調用。Flutter主動調用Native的方法,並獲取相應的返回值。
  3. EventChannel:用於數據流(event streams)的通訊。

具體能夠查看 閒魚技術:深刻理解 Flutter Platform Channel

3. 什麼是 Widgets、RenderObjects 和 Elements?

  • Widget 僅用於存儲渲染所須要的信息。
  • RenderObject 負責管理佈局、繪製等操做。
  • Element 纔是這顆巨大的控件樹上的實體。

具體能夠查看 [譯] Flutter,什麼是 Widgets、RenderObjects 和 Elements?

4. 說一下什麼是狀態管理,爲何須要它?

首先狀態實際上是一個概念上的東西,區分全局狀態和局部狀態。

局部狀態好比說一個控件中輸入的信息,全局狀態好比是登錄後從後臺請求回來的 userId。

當全局狀態愈來愈多,多個頁面共享一個狀態時,咱們就須要管理它。

經常使用的狀態管理有:

  • ScopedModel
  • BLoC
  • Redux / FishRedux
  • Provider

5. 說一下 BLoC 模式?

具體能夠查看: Vadaski - Flutter | 狀態管理探索篇——BLoC(三)

這裏引用一部分:

BLoC是一種利用reactive programming方式構建應用的方法,這是一個由流構成的徹底異步的世界。

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

6. 如何統一管理錯誤頁面?

咱們都知道,若是在 Flutter 當中出錯的話,那就是一片紅。

可使用 ErrorWidget.builder 來自定義一個 Widget 就 ok 了。

總結

暫時就寫到這,寫了這麼多,本身對 Flutter & Dart 的基礎認識也更深了,後續有新的面試題之類的,也歡迎發給我

關注我和個人專欄

私信我【安卓】領取flutter學習視頻

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

老許,你要轉陣 Flutter不?你開了金口,面試題如今就給你送來

更多Android學習內容還能夠看個人GitHub連接:https://github.com/Meng997998/AndroidJX,看完順便點亮一下星星哦

相關文章
相關標籤/搜索