因為近來公司需要新招flutter的小伙伴,需要我來出一套面試題并面試。我現在整理出來分享給大家。
目前我就想整理出來flutter的,未來會陸續更新ios 和Android native的部分。
1. dart是什么,和flutter有什么關系?
? ? dart是一種面向對象語言,dart是flutter的程序開發語言。
2. main()和runApp()函數在flutter的作用分別是什么?有什么關系嗎?
? ? main函數是類似于java語言的程序運行入口函數
? ? runApp函數是渲染根widget樹的函數
? ? 一般情況下runApp函數會在main函數里執行
3. 什么是widget?? 在flutter里有幾種類型的widget?分別有什么區別?能分別說一下生命周期嗎?? ? ? ??
????widget在flutter里基本是一些UI組件
????有兩種類型的widget,分別是statefulWidget 和 statelessWidget兩種
????statelessWidget不會自己重新構建自己,但是statefulWidget會????
4. Hot Restart 和 Hot Reload 有什么區別嗎?
? ? Hot Reload比Hot Restart快,Hot Reload會編譯我們文件里新加的代碼并發送給dart虛擬機,dart會更新widgets來改變UI,而Hot Restart會讓dart 虛擬機重新編譯應用。另一方面也是因為這樣,?Hot Reload會保留之前的state,而Hot Restart回你重置所有的state回到初始值。
5. 在flutter里streams是什么?有幾種streams?有什么場景用到它?
? ??Stream?用來處理連續的異步操作,Stream?是一個抽象類,用于表示一序列異步數據的源。它是一種產生連續事件的方式,可以生成數據事件或者錯誤事件,以及流結束時的完成事件
? ??Stream?分單訂閱流和廣播流。
? ? 網絡狀態的監控
6.? 簡單說一下在flutter里async和await?
? ? await的出現會把await之前和之后的代碼分為兩部分,await并不像字面意思所表示的程序運行到這里就阻塞了,而是立刻結束當前函數的執行并返回一個Future,函數內剩余代碼通過調度異步執行。
? ? async是和await搭配使用的,await只在async函數中出現。在async 函數里可以沒有await或者有多個await。
7. future 和steam有什么不一樣??
????在 Flutter 中有兩種處理異步操作的方式?Future?和?Stream,Future?用于處理單個異步操作,Stream?用來處理連續的異步操作。
8. 什么是flutter里的key? 有什么用?
? ? key是Widgets,Elements和SemanticsNodes的標識符。
? ? key有LocalKey 和 GlobalKey兩種。
? ?LocalKey?如果要修改集合中的控件的順序或數量。GlobalKey允許 Widget 在應用中的任何位置更改父級而不會丟失 State。
9. 在什么場景下使用profile mode?
? ? profile model 是用來評估app性能的,profile model 和release mode是相似的,只有保留了一些需要評估app性能的debug功能。在模擬器上profile model是不可用的。? ??
10. 怎么做到只在debug mode運行代碼?
? ??foundation有一個靜態的變量kReleaseMode來表示是否是release mode
11. 怎么理解Isolate?? ?
? ???isolate是Dart對actor并發模式的實現。 isolate是有自己的內存和單線程控制的運行實體。isolate本身的意思是“隔離”,因為isolate之間的內存在邏輯上是隔離的。isolate中的代碼是按順序執行的,任何Dart程序的并發都是運行多個isolate的結果。因為Dart沒有共享內存的并發,沒有競爭的可能性所以不需要鎖,也就不用擔心死鎖的問題
12. 列舉在flutter的狀態管理方案?
????Scoped Model
? ? Redux
? ? BLoC
? ? RxDart
????provider