老許,你要轉陣 Flutter不?你開了金口,面試題現在就給你送來
第一次看文章的朋友可以關注我,會不定期釋出大廠面試題、Android架構技術知識點及解析等內容,還有Android學習PDF+原始碼筆記+面試文件+進階影片+Flutter+Kotlin等分享。
更多還可以看我的GitHub連結: ,看完順便點亮一下星星哦
前言
2019年馬上就結束了,又要到年後,跳槽的好時機,金三銀四,很多小夥伴希望趁著這個機會轉陣 Flutter。
“老許,你要老婆不要?只要你開金口,我待會兒給你送來。“
哈哈,錯了,老許,你要flutter面試資料不,現在就給你送來咯
先看看各大公司招聘的需求
首先來看看各個公司招聘的需求吧,畢竟面試題只是一部分。
更美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等;
- 具備較強的分析解決問題能力和抗壓能力,對新技術富有好奇心,積極探索,快速學習並應用到產品中;
- 有良好的產品意識和風險意識,能夠把控好工作進度,積極樂觀,認真負責,善於溝通,樂於協作。
就先看兩個吧,其實大部分招聘寫的都差不多,我們可以抽出來幾個點:
- 瞭解原生開發,對原生開發有經驗
- 熟悉 Flutter 及 API
- 有過一定的 Flutter 開發經驗
第一點對於前端 web 開發同學來說可能有些難度,畢竟 Flutter 只是一個 UI 框架,所以還是要學習一些原生開發知識的。
第三點其實也沒什麼好說的,我們自己寫幾個 demo 專案也是可以的。
下面就來說第二點吧,也是我們這篇文章的重點。
面試題相關
Flutter 的面試其實和 Android 面試的套路差不多,也是分兩個部分:
- Dart
- Flutter
畢竟 Flutter 要使用 Dart 來寫,那也就必須瞭解 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定義的類不能有構造方法
,這樣可以避免繼承多個類而產生的父類構造方法衝突
Flutter 相關面試題
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
分為三種:
- BasicMessageChannel:用於傳遞字串和半結構化的資訊。
- MethodChannel:用於傳遞方法呼叫。Flutter主動呼叫Native的方法,並獲取相應的返回值。
- 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方式構建應用的方法,這是一個由流構成的完全非同步的世界。
6. 如何統一管理錯誤頁面?
我們都知道,如果在 Flutter 當中出錯的話,那就是一片紅。
可以使用
ErrorWidget.builder
來自定義一個 Widget 就 ok 了。
總結
暫時就寫到這,寫了這麼多,自己對 Flutter & Dart 的基礎認識也更深了,後續有新的面試題之類的,也歡迎發給我
關注我
點選 Flutter從入門到進階實戰領取flutter學習影片
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2671340/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 老許,你要轉Flutter不要?只要你開金口,面試題現在就給你送來Flutter面試題
- Spring Boot 面試,一個問題你就答不上來了Spring Boot面試
- 你們要的面試題來啦!面試題
- 不瞭解JavaWeb,你就錯億了,不信,你進來看JavaWeb
- 給你的Flutter頁面跳轉加上動畫Flutter動畫
- 31道Java核心面試題,一次性打包送給你Java面試題
- 20個高階Java面試題,你要來挑戰嗎?Java面試題
- Java面試必問面試題,你掌握了嗎?Java面試題
- 來了,來了,你們要的Nginx教程來了Nginx
- 當面試官問出“Unsafe”類時,我就知道這場面試廢了,祖墳都能給你問出來!面試
- 面經手冊 · 第12篇《面試官,ThreadLocal 你要這麼問,我就掛了!》面試thread
- 面試官在“逗”你係列:陣列去重你會幾種呀?面試陣列
- 面試現場:這些常問的面試題你都會了嗎面試題
- CSS面試要點!看完你還覺得你已經學好CSS了嗎?CSS面試
- 寫給即將面試的你面試
- 商家的短視訊營銷變現祕籍?今天就送給你!
- 面試架構師太南?這份求職指南送給你面試架構求職
- 你應該知道的 Laravel 面試問題,要搞懂Laravel面試
- 邦芒面試:這10個問題都答不上來,你還想透過面試?面試
- 送給寫小程式的你。
- Git 12 歲了,送給你 12 個 Git 使用技巧Git
- 快端午了,用Python畫一盤粽子送給你Python
- 千圖網,你面試了嗎面試
- 邦芒面試:11條面試提示將給你帶來成功的契機面試
- 2020 還不會泡 Github 你就落伍了Github
- 你要的區塊鏈書單來了!區塊鏈
- 面試官你來,130行帶你手寫完整Promise面試Promise
- 面試官:你為什麼要離開之前的公司?面試
- java面試官:程式設計師,請你告訴我是誰把公司面試題洩露給你的?Java程式設計師面試題
- 如果你在使用async,就進來看看吧
- 你們要的MyCat實現MySQL分庫分表來了MySql
- 老司機帶你玩轉面試(5):Redis 叢集模式 Redis Cluster面試Redis模式
- 老司機帶你玩轉面試(4):Redis 高可用之哨兵模式面試Redis模式
- 求職時這樣回答問題你就輸了!來自IT類面試官視角的深度解讀求職面試
- 你確定能通過現在的VUE面試嗎?Vue面試
- 面試官說:來談談限流-從概念到實現,一問你就懵逼了?面試
- 金三銀四面試季來臨,最新BAT面試資料分享給你面試BAT
- 想要快速進入車載測試?這份車載面試題集錦送給你,建議收藏!面試題