面試小技巧:如果有人問你 xxx 技術是什麼?

語言: CN / TW / HK

theme: fancy

我正在參加「掘金·啟航計劃」

背景

在前幾天,有一個朋友突然問了我一個問題,說如果有人問你“React 是什麼?你怎麼回答。 ”,我當時脫口而出“React 是一個網頁 UI 框架一個,它的特點宣告式、元件化、元件化、一次學習隨處編寫。”。我感覺這樣回答沒毛病,skr~。

據這個朋友說這個題目來源於之前他的一次大廠面試,面試官看他在簡歷上寫著精通 React , 所以第一個問題就是問他“ React 是什麼?”。然而他的回答也和我回答的差不多,但是回答完,面試官對這個回答不是很滿意。

所以對這個問題產生了一個疑問?如何回答這個問題才能讓面試官滿意了。或者說如何回答這個問題,才能讓重來都麼有接觸過 React 的人知道 React 是一個什麼了?。我在網路上也看了很多人多這個問題的回答,總結了一下思路,可以從以下方面來回答這個問題:

  • React 的本質
  • React 出現的背景,為什麼出現?解決什麼問題?
  • React 的用途
  • React 的核心思想,他的優點是什麼?
  • 反過來想想它的缺點

通過這篇文章,你將知道這一類問題怎麼回答。我們這篇文章以 React 為例。

1. React 的本質

先總結 React 是一個網頁 UI 框架。

2. React 出現的背景

在說背景,任何技術的出現都是在一定的背景下,在講講 React 出現的背景。我記得我在我最早寫前端的時候,還是使用的 jQuery、AngularJS。

最早瀏覽器相容是最大的問題,出現了jQuery, jQuery 封裝了 DOM 操作、樣式選擇器、鏈式呼叫、Ajax等基礎的函式。jQuery 把Html、Css、Js 攪拌在一起就成了一個網頁。但是並沒有一個模式有序的來組織這些原料。隨著頁面的功能越來越多、越來越酷炫,前端的工程越來越大,jQuery 組織程式碼,解決程式碼複用率成為一個待解決的問題。如果在現在來看,jQuery 本質是一個工具函式。

2009年,AngularJS 借鑑了Java MVC 的思想,還強行灌入了 controller、$scope、service 等一系列概念。如同 Spring Boot,AngularJS 提供了一攬子全家桶解決方案,從底層開始深度封裝,向上提供了路由、雙向繫結、指令、元件等框架特性。但也正是因為它龐大複雜的概念,你在使用 AngularJS 進行開發的時候,需要先學習各種概率,需要編寫大量的麵條程式碼。

但是這些框架都還有兩個問題待解決:

  • 元件複用性薄弱
  • 前端工程越來越大,前面幾種方案不能很好的支援單元測試。

在這樣的背景下,React 誕生了。React 帶來了新的思維模式,UI = fn(props),React 中一個元件就是一個函式或者一個類,一個函式或者一個類就是一個基礎單位,然後把這些基礎單位組合在一起,這就是『組合』的魅力,在設計模式中有一句話『組合大於繼承』。React通過元件的方式來解決複用性的問題。所以 React 本質是一個元件化框架。React 也解決了元件複用性薄弱的問題,也很好的支援了單元測試。

3. React 的用途

然後說 React 的用途,由於 React 虛擬 DOM 的關係,在用途上非常的豐富。

  • 無論是 PC 還是移動端,都是支援的。
  • React Native 即可開發 iOS 也可開發安卓。
  • React 360 可開發 VR。
  • 冷門的 ink,也可以使用 React 開發命令列。

4. React 的核心思想,他的優點是什麼?

說完用途,在講講核心思想,也就是 React 的有點,很多人在面試時,經常在把自己知道的原始碼亂說一氣,來證明自己對 React 很瞭解。其實個人感覺說原始碼還不如說說它核心思想是什麼。它的優點是什麼。

1. 宣告式

宣告式的優勢就是直觀,可以一目瞭然,也便於組合。

2. 元件化

元件化的好處是低耦合,高內聚,以元件為基礎單位,進行組合。對前端工程化是極大的優化。React 沒有差用模板語法,而是使用了宣告 jsx這樣的書寫方式。

3. 通用性

React 的通用性源於虛擬 DOM,React 將 DOM 抽象為虛擬 DOM,開發者不在直接操作 DOM,正式由於這一層的封裝,React 的不在侷限於 Web 開發,還可以開發 iOS、安卓、VR、命令列指令碼。只要能相容虛擬 DOM,都能使用 React 開發。

5. 反過來想想它的缺點

最後還是要客觀的想想來看待,辯證的回來想想 React 有什麼缺點,所有的東西肯定有缺點,沒有完美的東西。React 也一樣。React 的優點就是React 的核心思路,宣告式,元件化,通用性。缺點了,個人覺得對於一個開發者來說,當我使用完 Vue 之後再來使用 React,你會發現 React 並不是一個完全體,當你在開發一個應用時,很多東西你都需要去社群尋求並找到解決方案,這對於研發者來說,需要投入學成本。但是這其實在某些角度來看,這也並不算缺點,這間接的讓 React 社群蓬勃發展。

總結

文章回答了最開始的問題 ”React 是什麼?“。通過以 React 為例,可以延伸到這一類問題,如:

  • React 是什麼?解釋 React 是什麼?你瞭解 React 嗎?談一談你對 React 的理解?
  • 說說什麼是 Vue?你瞭解 Vue 嗎?
  • xx 技術是什麼?你對 xx 技術瞭解嗎?

這一類問題其實大致都可以套用下面這個圖的思路來回答,從本質、背景,到用途、核心、優缺點。