前端工作2年,既因Flutter拿下阿里鹹魚offer!背後的努力值得我們學習
前言
在出現Flutter 起,有不少網際網路大廠投入實踐,先是有閒魚團隊大規模引入 Flutter,後有飛豬、百度貼吧、今日頭條、西瓜視訊、美團外賣、京東商城等團隊在多個場景下落地了 Flutter 專案。而我一個大學室友看準了風口,工作兩年了,決定轉戰Flutter,目標阿里鹹魚,這對於他來說是個挑戰,在Flutter這方面知識還是有所欠缺,就疫情那會為準備面試在家學習Flutter,學的腦袋嗡嗡的,好在最後拿到了阿里鹹魚offer。
Flutter面試準備
簡單看一個框架知識點肯定是不行,就瞭解了Flutter是什麼,怎麼用,優缺點等,當然瞭解是對的,要是去面試還得深入點。在系統學習Flutter這塊,室友是看視訊和電子書學習,詳細是詳細,就是有點費腦子。
視訊學習
視訊教學分為理論知識、進入實戰、進階提升三部分。
理論知識
這部分講到認識檢視、佈局與列表、狀態管理、路由與導航、執行緒與非同步UI、Dart基礎快速入門、表單輸入與富文字、Flutter入門基礎知識、專案結構、資源、依賴和本地化、什麼是宣告式UI視訊、Flutter除錯技巧、學習構建Flutter等內容,綜合來說,理論知識這部分主要是講開發工具選擇與開發環境搭建指南、上手Flutter、Flutter理論知識瞭解,並單個視訊都有相應文字版的文件講解,更方便學習和理解。
進入實戰
這部分是講到了APP導航框架與常用功能實現,比如APP首頁框架搭建-Scaffold與PageView、APP首頁框架搭建-專案實踐、輪播圖Banner功能開發 、自定義AppBar實現滾動漸變等內容,這個視訊內容還是得反覆看,才能消化。
進階提升
這部分內容視訊可以說是重中之重,重頭戲吧,涉及到網路程式設計與資料儲存技術相關經驗和技巧、玩轉列表元件、Flutter,Native混合開發、App首頁功能開發、搜尋模組開發、開發包和外掛開發、智慧AI語音搜尋模組實現、打包釋出Flutter應用等內容,真不虧是進階,慢慢啃下來把。
小編光和小夥伴們說的內容就有這麼多,但遠遠還不止哦,既然要學習就不要停留在表面。
電子書學習
室友整理些有關Flutter的電子書,包括了Flutter官方文件詳細翻譯、Flutter技術進階、Flutter跨平臺開發全套電子書、Flutter基礎學習PDF、Flutter技術入坑指南總結(阿里閒魚)等,可以先從Flutter技術入坑指南總結看起,比較好接受,再看Flutter官方文件詳細翻譯時,就會比較好懂不會覺得乏味了。
個人學習心得:不管是看視訊還是電子書學習,一定要做筆記,把重要的、不會不懂的點等記錄下來,做的筆記梳理成自己的腦圖或文件,這個過程也是加深對內容的印象和理解。
Flutter面試
面試時有關Flutter問的面試題不多,好在面試前端做了準備,還是要了解下iOS或者Android的原生相關知識,小編把被問到的及小編整理的面試題及答案列舉一部分,看看關於Flutter都會問什麼。
1.Flutter 是什麼
Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生使用者介面。 Flutter可以與現有的程式碼一起工作。在全世界,Flutter正在被越來越多的開發者和組織使用,並且Flutter是完全免費、開源的。
Flutter 特性有哪些?
快速開發(毫秒級熱過載)
- 絢麗UI(內建漂亮的質感設計Material Design和Cupertino Widget和豐富平滑的動畫效果和平臺感知)
- 響應式(Reactive,用強大而靈活的API解決2D、動畫、手勢、效果等難題)
- 原生訪問功能
- 堪比原生效能
3. Flutter 和 Dart的關係是什麼?
Flutter是一個使用Dart語言開發的跨平臺移動UI框架,通過自建繪製引擎,能高效能、高保真地進行移動開發。Dart囊括了多數程式語言的優點,它更符合Flutter構建介面的方式。
4. Dart 語言的特性?
- Productive(生產力高,Dart的語法清晰明瞭,工具簡單但功能強大)
- Fast(執行速度快,Dart提供提前優化編譯,以在移動裝置和Web上獲得可預測的高效能和快速啟動。)
- Portable(易於移植,Dart可編譯成ARM和X86程式碼,這樣Dart移動應用程式可以在iOS、Android和其他地方執行)
- Approachable(容易上手,充分吸收了高階語言特性,如果你已經知道C++,C語言,或者Java,你可以在短短几天內用Dart來開發)
- Reactive(響應式程式設計)
5. Dart的一些重要概念?
- 在Dart中,一切都是物件,所有的物件都是繼承自Object
- Dart是強型別語言,但可以用var或 dynamic來宣告一個變數,Dart會自動推斷其資料型別,dynamic類似c#
- 沒有賦初值的變數都會有預設值null
- Dart支援頂層方法,如main方法,可以在方法內部建立方法
- Dart支援頂層變數,也支援類變數或物件變數
- Dart沒有public protected private等關鍵字,如果某個變數以下劃線(_)開頭,代表這個變數在庫中是私有的
6. dart是值傳遞還是引用傳遞?
引用傳遞
7.Widget 和 element 和 RenderObject 之間的關係?
- Widget是使用者介面的一部分,並且是不可變的。
- Element是在樹中特定位置Widget的例項。
- RenderObject是渲染樹中的一個物件,它的層次結構是渲染庫的核心。
8. mixin extends implement 之間的關係?
繼承(關鍵字 extends)、混入 mixins (關鍵字 with)、介面實現(關鍵字 implements)。這三者可以同時存在,前後順序是extends -> mixins -> implements。
Flutter中的繼承是單繼承,子類重寫超類的方法要用@Override,子類呼叫超類的方法要用super。
在Flutter中,Mixins是一種在多個類層次結構中複用類程式碼的方法。mixins的物件是類,mixins絕不是繼承,也不是介面,而是一種全新的特性,可以mixins多個類,mixins的使用需要滿足一定條件。
9. 使用mixins的條件是什麼?
因為mixins使用的條件,隨著Dart版本一直在變,這裡講的是Dart2.1中使用mixins的條件:
mixins類只能繼承自object
mixins類不能有建構函式
一個類可以mixins多個mixins類
可以mixins多個類,不破壞Flutter的單繼承
10.Flutter main future mirotask 的執行順序?
普通程式碼都是同步執行的,結束後會開始檢查microtask中是否有任務,若有則執行,執行完繼續檢查microtask,直到microtask列隊為空。最後會去執行event佇列(future)。
11.Future和Isolate有什麼區別?
uture是非同步程式設計,呼叫本身立即返回,並在稍後的某個時候執行完成時再獲得返回結果。在普通程式碼中可以使用await 等待一個非同步呼叫結束。
isolate是併發程式設計,Dartm有併發時的共享狀態,所有Dart程式碼都在isolate中執行,包括最初的main()。每個isolate都有它自己的堆記憶體,意味著其中所有記憶體資料,包括全域性資料,都僅對該isolate可見,它們之間的通訊只能通過傳遞訊息的機制完成,訊息則通過埠(port)收發。isolate只是一個概念,具體取決於如何實現,比如在Dart VM中一個isolate可能會是一個執行緒,在Web中可能會是一個Web Worker。
12.Stream 與 Future是什麼關係?
Stream 和 Future 是 Dart 非同步處理的核心 API。Future 表示稍後獲得的一個數據,所有非同步的操作的返回值都用 Future 來表示。但是 Future 只能表示一次非同步獲得的資料。而 Stream 表示多次非同步獲得的資料。比如介面上的按鈕可能會被使用者點選多次,所以按鈕上的點選事件(onClick)就是一個 Stream 。簡單地說,Future將返回一個值,而Stream將返回多次值。Dart 中統一使用 Stream 處理非同步事件流。Stream 和一般的集合類似,都是一組資料,只不過一個是非同步推送,一個是同步拉取。
篇幅原因,為不影響小小夥伴閱讀感受,只列舉了12道題目,更多面試題已整理成文件,會發出來共享檔案的。
Flutter專案
這版塊就得看小夥伴個人是否需要了,可能安卓小夥伴會需要些,前端小夥伴也可以看看,我把Flutter專案都編輯成了一個文件,直接點選標題就可獲取文件噢,先看看都有什麼專案吧。
- 專案一:Flutter - 實現支付寶、微信支付
- 專案二:京東技術的Flutter實踐之路
- 專案三:Flutter實現一個酷炫帶動畫的列表型多選日曆元件
- 專案四:Flutter 仿滴滴出行App
- 專案五:阿里閒魚 Flutter 架構演進和實踐
- 專案六:Flutter的原理及美團的實踐
專案小編就沒有具體展開來講了,都詳細寫在文件中,有哪裡沒有看懂的,建議搭配Flutter學習那個版塊內容看看哈哈哈。
結尾
不管是出自對Flutter感興趣還是對移動端感興趣去學,Flutter是值得每個前端學習的,學習之前建議先鞏固前端的基礎知識,尤其是瀏覽器原理。
現階段越來越多前端開發可能會有 App 相關的業務,這是大前端的趨勢,而Flutter 是更接近 App 的開發框架,它的效能和跨平臺效果上滿足了專案的需求,小夥伴你們覺得呢?歡迎評論區討論噢。