看待面試考察框架源碼這個問題(大佬請忽略)

前言

在前端三大框架日益變成前端必備工具時,考察一些框架的源碼變成了面試必問,也是初級前端到高級前端實現晉升的有效途徑之一。也有不少資深大佬推薦咱們有時間多去讀源碼,能很大程度提高本身的能力和認識。(大佬請繞過忽略,只是可能寫給剛入門的前端同窗的一些觀點)css

那麼做爲一名業務前端,或者一名初級前端,或者也是一名高級前端該怎麼看待這個事情,有沒有必要真的去研讀源碼,以及將這件事放在什麼重要等級上呢?這也是不少前端或許擴大到程序員都一直在爭議的話題:面試造火箭,實際擰螺絲。前端

背景

其實,在咱們討論一件事有什麼價值以前,有兩個問題咱們要必須清楚,1 這件事是不是有益的 2 這件事是否適合如今的本身,是否能解決本身當前的剛需。vue

  • 第一個問題,學習一些框架源碼確定是有益的,這個毋庸置疑的。
  • 第二個問題,對於當下的本身是否有必要,有沒有必要當作提高本身或者必定要變成必讀的部分。這個咱們大多數人並不肯定其實。

技術可能的幾個階段

在談一些技術框架的時候,首先要認識到技術框架意味着什麼,什麼是咱們真的要學習的。前期,掘金還相繼出現過一波的什麼中止學習框架、駁中止學習框架之類的文章,起源就是由於外文的一個大佬提倡你們不要以學習框架爲主爲最終目的,讓你們儘可能多把重心放在技術和設計思想上,而後有些人曲解了觀點。個人觀點也是如此,很是同意原文的觀點。我本身將技術分爲如下三個階段:react

基礎階段

  • 技術基礎,底層api
  • 技術原理(入門層次)
  • 基於框架的基本使用

進階階段

  • 框架源碼解讀能力
  • 代碼設計思想
  • 針對業務邏輯分析定製技術方案
  • 知識廣度
  • 技術原理(深層次)

專家階段

  • 基於框架的研發(造輪子)
  • 基於技術基礎的研發(造輪子)
  • 基於業務的聚合設計
  • 針對大數據、大併發、高要求、高安全等需求的高質量方案

如何學習

目前市場上大多數的前端屬於5年之內經驗的,隨着大部分公司對前端的工做經驗要求愈來愈高,慢慢的公司都喜歡加上一條指望3-5年的工做經驗。由於前端技術在快速迭代,我最誠懇的建議就是重學前端。linux

基礎學習

首先,咱們有必要列一下前端的知識圖譜。通常狀況下,圖譜上所能列出的是多數都有書籍參考或者大部分所熟悉的知識點,也就是處於第一階段的。這時候我會推薦你們學習以及瞭解的內容:git

  • 各個技術名詞的mdn解釋
  • 技術大佬對一些名詞和常見問題的解釋
  • 各種技術的權威指南,好比css權威指南、js權威指南、http權威指南、dom編程藝術、linux私房菜
  • 技術框架的官網,好比vue、react、ng各自的官網以及社區,github站點以及issue

進階學習

  • 技術進階的書籍,好比js高級程序、高性能的js設計
  • 基於技術或者框架實戰總結的書籍,好比一系列相似名稱,es6實戰、vue實戰等
  • 技術思想的,重構、設計模式
  • 框架源碼解讀,能夠看大佬解讀的或者本身直接看源碼
  • 基於項目分析問題,改進問題,總結反思

專家學習

  • 總結工程性質問題,分析共享,思考模型
  • 總結思考基於底層如何作封裝設計
  • 總結思考基於框架進行設計
  • 定義團隊研發思想
  • 造輪子
  • 技術方案解耦與針對性方案

考察源碼是爲何

考察深度

考察對源碼的理解實際是考察你的技術深度,若是你能將框架中的一些設計原理越能詳細的說出,理解對,說明你不但基礎好,並且在技術深度上有必定的造詣。固然不得不說,隨着這些內容變成面試必問題,這類問題的答案在網上有很是多的版本,而不少開發者可能會不求甚解的去背,甚至在不理解、基礎很差的狀況下,必定要看懂源碼的整個內容。若是咱們的基礎不是特別好,當務之急仍是基礎牢固一點。程序員

那麼其實,若是你的項目具備必定難度或者表明性,能體現你的技術深度,也是何嘗不可的,但大多碼農可能沒有特別典型的項目能真實體現本身的所有能力,尤爲是不少公司業務驅動的前提下,即便你有較好的技術可能也沒有空間去發展。es6

考察技術興趣

考察你是否讀了源碼也是爲了考察你是不是屬於極客類型的碼農,意味着你可能很喜歡學習研究一些代碼,對技術具備更高的興致,具備更好的潛力。github

那麼其實,若是你不讀框架源碼,你能常常關注一些大佬的博客或者技術貼,或者常常參與一些界內的論壇,那麼也能夠用來證實你這點符合要求。面試

用來過濾

這點是最直接的目的,由於考察前端基礎可能對於3年甚至更久經驗來講,太沒有辦法過濾出什麼了,因此考察框架源碼是爲了過濾出你和其餘人的差異,從中選擇出更具備優點的候選人。

咱們該怎麼看

心態平和

無論公司提出這樣的面試題是否合理,咱們都該以正確平和的心態去理解這件事自己,不要有不平衡或者以爲這樣考覈沒價值。公司怎樣篩選人才是公司的權利,或者說是面試官的面試標準,咱們能作的只是讓本身儘量優秀,在這方面可能的話花出一些時間瞭解一下。

重點是什麼?基礎 + 實戰 + 攻關

不管何時,技術基礎都是在最重要的部分,咱們應該讓本身的技術基礎足夠紮實,這樣可以減小一些低級問題,可以快速的解決一些問題,也可以在框架更新迭代的時候,不由於框架迭代而心慌,由於不管框架怎麼迭代,其都是基於基礎api而設計封裝出的一些api。

實戰能力是最實際的能力,我也稱這點爲工做技能,解決實際問題的能力。咱們作一切的學習以及研究都是爲了解決實際的問題,而不是爲了學術或者爲了好看或者kpi.這裏的實戰能力就是針對一些需求,最好與相應技術的對應,或者能夠作必定的關聯。當符合某些條件時,咱們可以根據已有的知識點,提出完成需求所應該具備的技術方案,以及其細節處的收益和風險點。

攻關能力,是指可以爲公司提供技術儲備以及解決重大的技術難題。尤爲是目前公司內或者網絡上缺乏比較相似的成熟的、針對性的方案時。

看框架源碼是看什麼

咱們學習框架,不建議形式同樣的去看每行代碼,而後最終結果是咱們看完了整個框架每一個地方都知道怎麼實現的了,由於這樣作就像咱們要抄一遍課文,而後每一個地方加上註解同樣,當然熟悉了,但沒有什麼直接價值。

我建議咱們要至少處於如下4種角度去學習源碼:

1 爲了更好的理解和使用框架。就像以前不少人都會看api使用jq同樣,實際上不少人不能正確合理高效的使用。咱們讀源碼是爲了讓咱們更好的理解框架爲何能實現這樣的功能,以及咱們怎樣才能更好的用好,好比像基於vue框架寫的ui框架,咱們能夠認爲那些寫ui框架的人比較好的理解了框架的一些設計思想。

2 學習設計思想。在沒有很好地項目代碼做爲參考學習的案例時,其實咱們最好的案例就是各個框架的源碼,咱們在讀源碼時,要清楚每一個關鍵點的設計整體是依賴於什麼實現的,而不是記住具體的代碼。好比雙向綁定核心就是依賴於對象的定義屬性增長監聽,好比自定義事件的核心是發佈訂閱機制,好比keep-alive的實現的基本原理是依賴數據緩存節點等。也許框架裏寫了不少api,實現了不少功能,可是其一些核心的設計上可能用到的設計思想都是同樣的,咱們不須要重複的學習理解每一個api是具體怎麼寫代碼的。

3 代碼技巧和代碼風格。一個框架被開源被大多數人使用,咱們還要從中學習框架的代碼風格,代碼組織方式,代碼的技巧,這些都是隻學會基礎和設計模式後還須要提升的部分。

4 更多的去延伸場景,針對性的學習。每當咱們讀一段源碼時,要將之以一個新的角度去解讀,而不是以框架的某個文件,某種算法單獨的侷限於這個場景去分析。咱們須要爲咱們本身想總結的內容找出一個更加獨立的場景和技術話題,而後綜合本身看到的幾個框架文件,思考得出本身的答案。

小結

就到這裏了,但願你們有不一樣見解積極發言,下次在看完源碼以後可以總結出一些不一樣的文章。

相關文章
相關標籤/搜索