前端面試題(3)當代手藝

什麼是單頁面運用(SPA)?

  • 單頁面運用(SPA)是指用戶在瀏覽器加載單一的HTML頁面,後續請求都無需再脫離此頁
  • 目的:旨在用為用戶供應了更靠近當地挪動APP或桌面運用順序的體驗。
  • 流程:第一次請求時,將導航頁傳輸到客戶端,其他請求經由歷程 REST API 獵取 JSON 數據
  • 完成:數據的傳輸經由歷程 Web Socket API 或 RPC(遠程歷程挪用)。
  • 長處:用戶體驗流通,效勞器壓力小,前後端職責星散
  • 瑕玷:關鍵詞規劃難度加大,不利於 SEO

什麼是“前端路由”? 什麼時候實用“前端路由”? 有哪些長處和瑕玷?

  • 前端路由經由歷程 URL 和 History 來完成頁面切換
  • 運用:前端路由重要實用於“前後端星散”的單頁面運用(SPA)項目
  • 長處:用戶體驗好,交互流通
  • 瑕玷:瀏覽器“行進”、“退卻”會從新請求,沒法合理應用緩存

模塊化開闢怎麼做?

  • 封裝對象作為定名空間 — 內部狀況能夠被外部改寫
  • 馬上實行函數(IIFE) — 須要依靠多個JS文件,而且嚴厲按遞次加載
  • 運用模塊加載器 — require.js, sea.js, EC6 模塊

通行的 Javascript 模塊的範例有哪些?

  • CommonJS — 重要用在效勞器端 node.js
var math = require('./math');
math.add(2,3);
  • AMD(異步模塊定義) — require.js
require(['./math'], function (math) {
    math.add(2, 3);
});
  • CMD(通用模塊定義) — sea.js
var math = require('./math');
math.add(2,3);
  • ES6 模塊
import {math} from './math';
math.add(2, 3);

AMD 與 CMD 範例的區分?

  • 範例化產出:

    • AMD 由 RequireJS 推行產出
    • CMD 由 SeaJS 推行產出
  • 模塊的依靠:

    • AMD 提早實行,推重依靠前置
    • CMD 耽誤實行,推重依靠就近
  • API 功用:

    • AMD 的 API 默許多功用(分全局 require 和部份 require)
    • CMD 的 API 推重職責單一地道(沒有全局 require)
    • 模塊定義劃定規矩:

      • AMD 默許一開始就載入悉數依靠模塊
  define(['./a', './b'], function(a, b) {
      a.doSomething();
      b.doSomething();
  });
  • CMD 依靠模塊在用到時才就近載入
  define(function(require, exports, module) {
      var a = require('./a');
      a.doSomething();
      var b = require('./b');
      b.doSomething();
  })

requireJS的中心道理是什麼?

  • 每一個模塊所依靠模塊都邑比本模塊預先加載

對 Node.js 的長處、瑕玷提出了本身的意見? Node.js的特性和實用場景?

  • Node.js的特性:單線程,非壅塞I/O,事宜驅動
  • Node.js的長處:善於處置懲罰高併發;合適I/O麋集型運用
  • Node.js的瑕玷:不合適CPU麋集運算;不能充分應用多核CPU;可靠性低,某個環節出錯會致使全部體系崩潰

    • Node.js的實用場景:

      • RESTful API
      • 及時運用:在線談天、圖文直播
      • 東西類運用:前端布置(npm, gulp)
      • 表單網絡:問卷體系

怎樣推斷當前劇本運轉在瀏覽器照樣node環境中?

  • 推斷 Global 對象是不是為 window,假如不為 window,當前劇本沒有運轉在瀏覽器中

什麼是 npm ?

  • npm 是 Node.js 的模塊治理和宣布東西

什麼是函數式編程?

  • 函數式編程是一種”編程範式”,重要頭腦是把運算曆程只管寫成一系列嵌套的函數挪用
  • 比方:var result = subtract(multiply(add(1,2), 3), 4);
  • 函數式編程的特性:

    • 函數中心化:函數能夠作為變量的賦值、另一函數的參數、另一函數的返回值
    • 只用“表達式”,不必“語句”:請求每一步都是純真的運算,都必須有返回值
    • 沒有”副作用”:一切功用只為返回一個新的值,不修正外部變量
    • 援用通明:運轉不依靠於外部變量,只依靠於輸入的參數
  • 函數式編程的長處:

    • 代碼簡約,靠近自然語言,易於明白
    • 便於保護,利於測試、除錯、組合
    • 易於“併發編程“,不必憂鬱一個線程的數據,被另一個線程修正
    • 可“熱晉級”代碼,在運轉狀況下直接晉級代碼,不須要重啟,也不須要停機

什麼是函數柯里化Currying)?

  • 柯里化:

    • 一般也稱部份求值,寄義是給函數分步通報參數,每次遞參部份運用參數,並返回一個更詳細的函數,繼承接收盈餘參數
    • 時期會一連返回詳細函數,直至返回末了效果。因而,函數柯里化是逐漸傳參,逐漸減少函數的實用範圍,逐漸求解的歷程
    • 柯里化的作用:耽誤盤算;參數復用;動態建立函數
  • 柯里化的瑕玷:

    • 函數柯里化會發作開支(函數嵌套,比一般函數占更多內存),但機能瓶頸起首來自別的緣由(DOM 操縱等)

什麼是依靠注入?

  • 當一個類的實例依靠另一個類的實例時,本身不建立該實例,由IOC容器建立並注入給本身,因而稱為依靠注入。
  • 依靠注入處理的就是怎樣有用構造代碼依靠模塊的題目

設想形式:什麼是 singleton, factory, strategy, decorator?

  • Singleton(單例) 一個類只要唯一實例,這個實例在全部順序中有一個全局的接見點
  • Factory (工場) 處理實列化對象發作反覆的題目
  • Strategy(戰略) 將每一個算法封裝起來,使它們還能夠互相替換,讓算法自力於運用
  • Observer(觀察者) 多個觀察者同時監聽一個主體,當主體對象發作轉變時,一切觀察者都將獲得關照
  • Prototype(原型) 一個完整初始化的實例,用於拷貝或許克隆
  • Adapter(適配器) 將差別類的接口舉行婚配調解,只管內部接口不兼容,差別的類照樣能夠協同事情
  • Proxy(代辦形式) 一個充任過濾轉發的對象用來代表一個實在的對象
  • Iterator(迭代器) 在不須要直到鳩合內部事情道理的情況下,遞次接見一個鳩合內里的元素
  • Chain of Responsibility(職責連) 處置懲罰請求構成的對象一條鏈,請求鏈中通報,直到有對象能夠處置懲罰

什麼是前端工程化?

  • 前端工程化就是把一整套前端事情流程運用東西自動化完成
  • 前端開闢基礎流程:

    • 項目初始化:yeoman, FIS
    • 引入依靠包:bower, npm
    • 模塊化治理:npm, browserify, Webpack
    • 代碼編譯:babel, sass, less
    • 代碼優化(緊縮/兼并):Gulp, Grunt
    • 代碼搜檢:JSHint, ESLint
    • 代碼測試:Mocha
  • 現在最着名的構建東西:Gulp, Grunt, npm + Webpack

引見 Yeoman 是什麼?

  • Yeoman –前端開闢腳手架東西,自動將最好實踐和東西整合起來構建項目骨架
  • Yeoman 實際上是三類東西的合體,三類東西各自自力:

    • yo — 腳手架,自動天生東西(相當於一個粘合劑,把 Yeoman 東西粘合在一起)
    • Grunt、gulp — 自動化構建東西 (最初只要grunt,以後加入了gulp)
    • Bower、npm — 包治理東西 (原來是bower,以後加入了npm)

引見 WebPack 是什麼? 有什麼上風?

  • WebPack 是一款[模塊加載器]兼[打包東西],用於把種種靜態資本(js/css/image等)作為模塊來運用
  • WebPack 的上風:

    • WebPack 同時支撐 commonJS 和 AMD/CMD,輕易代碼遷徙
    • 不僅僅能被模塊化 JS ,還包括 CSS、Image 等
    • 能替換部份 grunt/gulp 的事情,如打包、緊縮殽雜、圖片base64
    • 擴展性強,插件機制完美,特別是支撐 React 熱插拔的功用

引見類庫和框架的區分?

  • 類庫是一些函數的鳩合,輔佐開闢者寫WEB運用,起主導作用的是開闢者的代碼
  • 框架是已完成的特別WEB運用,開闢者只需對它添補詳細的營業邏輯,起主導作用是框架

什麼是 MVC/MVP/MVVM/Flux?

  • MVC(Model-View-Controller)

    • V->C, C->M, M->V
    • 通訊都是單向的;C只起路由作用,營業邏輯都布置在V
    • Backbone
  • MVP(Model-View-Presenter)

    • V<->P, P<->M
    • 通訊都是雙向的;V和M不發作聯絡(經由歷程P傳);V異常薄,邏輯都布置在P
    • Riot.js
  • MVVM(Model-View-ViewModel)

    • V->VM, VM<->M
    • 採納雙向數據綁定:View 和 ViewModel 的更改都邑互相映射到對象上面
    • Angular
  • Flux(Dispatcher-Store-View)

    • Action->Dispatcher->Store->View, View->Action
    • Facebook 為了處理在 MVC 運用中遇到的工程性題目提出一個架構頭腦
    • 基於一個簡樸的準繩:數據在運用中單向活動(單向數據流)
    • React(Flux 中 View,只關注表現層)

Backbone 是什麼?

  • Backbone 是一個基於 jquery 和 underscore 的前端(MVC)框架

AngularJS 是什麼?

  • AngularJS 是一個完美的前端 MVVM 框架,包括模板、數據雙向綁定、路由、模塊化、效勞、依靠注入等
  • AngularJS 由 Google 保護,用來輔佐大型單一頁面運用開闢。

React 是什麼?

  • React 不是 MV* 框架,用於構建用戶界面的 JavaScript 庫,側重於 View 層
  • React 重要的道理:

    • 假造 DOM + diff 算法 -> 不直接操縱 DOM 對象
    • Components 組件 -> Virtual DOM 的節點
    • State 觸發視圖的襯着 -> 單向數據綁定
    • React 處理方案:React + Redux + react-router + Fetch + webpack

react-router 路由體系的完成道理?

  • 完成道理:location 與 components 之間的同步
  • 路由的職責是保證 UI 和 URL 的同步
  • 在 react-router 中,URL 對應 Location 對象,UI 由 react components 決議
  • 因而,路由在 react-router 中就轉變成 location 與 components 之間的同步

延續更新中~喜好留下個贊哦!

    原文作者:keywords
    原文地址: https://segmentfault.com/a/1190000015150912
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞