翻譯:瘋狂的技術宅
原文:https://www.indeed.com/hire/interview-questions/javascript
不管你是面試官還是求職者,裡面的思路都能讓你獲益匪淺。
單體應用和微服務架構之間有哪些主要區別,從靈活性和可擴充套件性的角度來看,哪個是更好選擇?
解析:
這個問題用來評估基礎編碼知識。答案可以有多種,所以應該注意傾聽具體的問題,並儘量全面回答,來展示自己對單體應用與微服務架構的理解。
面試官想知道些什麼:
- 求職者對編碼的熟悉程度
- 求職者對不同構建方法利弊的理解
- 是否具有從單體應用服務過渡到微服務的能力
參考答案:
設計單體架構在短期內成本較低,但程式碼在記憶體是單一的內聚單元。微服務架構提供了靈活性和可擴充套件性,因為每個元件都是一個獨立的程式。
同步和非同步程式設計有什麼區別,非同步程式設計與你的 JavaScript 工作有什麼關係?
解析:
非同步程式設計允許多個併發操作,並且它非常適合 JavaScript 程式。這個問題評用來估求職者的編碼知識,以及對 JavaScript 的具體理解。
面試官想知道些什麼:
- 能夠清晰地表達同步和非同步程式設計之間的差異
- 非同步程式設計對使用者介面的影響
- 瞭解阻塞以及對效能的影響
參考答案:
簡單來說,同步程式設計意味著程式碼以線性方式執行。這些程式通常不能同時處理多個操作。使用非同步程式設計,有一個事件迴圈。一個程式執行緒可以處理多個操作。由於 JavaScript 通常用於使用者介面,因此同時執行多個操作的能力可以帶來更好的使用者體驗。
你是否在 JavaScript 中使用過類繼承和原型繼承?為什麼?
解析:
這個問題有助於瞭解求職者是否具有 JavaScript 經驗和專業知識。原型繼承比類繼承更容易、更靈活,這是判斷一個有經驗的 JavaScript 程式設計師的首選方法。
面試官想知道些什麼:
- 是否偏愛原型繼承和組合
- 具有闡明這種偏好的原因的能力
- 函式繼承,原型鏈繼承,原型委託和物件組合
參考答案:
當使用類繼承時,例項繼承自類,這會產生分層。而通過原型繼承,例項繼承自其他物件,並且可以從多個物件建立。我更喜歡原型繼承,因為它更簡單、更靈活。
在你看來,類繼承是否是正確的選擇?如果是的話,是在什麼情況下?如果不是,為什麼?
解析:
求職者的答案能讓面試官深入瞭解他們使用 JavaScript 的經歷。類繼承有意義的情況很少,求職者可能會說根本沒有。 否定的答案優於對適當情況冗長的描述,因為這些通常是基於錯誤資訊的。
面試官想知道些什麼:
- 類繼承永遠或幾乎從來都不是正確的選擇
- 求職者能否闡明其回覆的原因
- 求職者有能力用邏輯來捍衛他們的結論
參考答案:
類繼承幾乎從來都不是正確的解決方案。只有在極少數情況下,它可能被用到。
你如何定義函數語言程式設計?函數語言程式設計在 JavaScript 中的作用是什麼?
解析:
函數語言程式設計是目前 JavaScript 使用的基本原則。求職者是否能夠完整的回答這個問題,可以證明他們的基礎知識是否紮實。
面試官想知道些什麼:
- 提及純函式和避免副作用
- 能夠提供函數語言程式設計語言的示例
- 能夠認同 JavaScript 的函數語言程式設計,並具有使用它們的能力
參考答案:
函數語言程式設計允許通過使用純函式來設計軟體。此方法避免了很多程式設計問題,如共享狀態,副作用和可變資料。它作為物件導向程式設計的替代方案,其中應用狀態通常與物件中的方法搭配並共享。
使用函數語言程式設計方法而不是物件導向程式設計有什麼好處?你能提供一個例子嗎?
解析:
任何具有 JavaScript 經驗的求職者都會使用其中一種風格,因此應該能夠對每種風格的優缺點提出一些看法。這個問題可以幫助面試官衡量求職者使用 JavaScript 的深度。
面試官想知道些什麼:
- 能夠闡明任何一種方法的優缺點
- 提及共享資源導致的問題
- 瞭解函數語言程式設計如何簡化應用程式
參考答案:
雖然我主要使用物件導向程式設計方式,但是我更希望用函數語言程式設計開發。在用物件導向程式設計時遇到不同的元件競爭相同的資源的時候,更是如此。
你如何定義單向資料流和雙向資料繫結?兩者有什麼區別?
解析:
這個問題能夠說明求職者對 JavaScript 重要基本原則的深刻理解。不熟悉這些條款的求職者可能沒有該職位所需的經驗。
面試官想知道些什麼:
- 能夠清晰、簡潔的定義這兩個概念
- 能夠闡明兩個概念之間的差異
- 提及相關的框架
參考答案:
當模型是單一事實來源時,會發生單向資料流,React 就是一個例子。雙向資料繫結是使用者介面與模型資料動態連結的狀態。如果使用者介面中的欄位發生了變化,模型也會發生變化,比如 Angular。