框架

什么是單頁(yè)面應(yīng)用(SPA)?

  • 單頁(yè)面應(yīng)用(SPA)是指用戶在瀏覽器加載單一的HTML頁(yè)面资铡,后續(xù)請(qǐng)求都無(wú)需再離開此頁(yè)

  • 目標(biāo):旨在用為用戶提供了更接近本地移動(dòng)APP或桌面應(yīng)用程序的體驗(yàn)尿贫。

  • 流程:第一次請(qǐng)求時(shí)隘道,將導(dǎo)航頁(yè)傳輸?shù)娇蛻舳烁倭耄溆嗾?qǐng)求通過(guò) REST API 獲取 JSON 數(shù)據(jù)

  • 實(shí)現(xiàn):數(shù)據(jù)的傳輸通過(guò) Web Socket API 或 RPC(遠(yuǎn)程過(guò)程調(diào)用)晓淀。

  • 優(yōu)點(diǎn):用戶體驗(yàn)流暢潭辈,服務(wù)器壓力小鸯屿,前后端職責(zé)分離

  • 缺點(diǎn):關(guān)鍵詞布局難度加大,不利于 SEO

什么是“前端路由”? 什么時(shí)候適用“前端路由”? 有哪些優(yōu)點(diǎn)和缺點(diǎn)?

  • 前端路由通過(guò) URL 和 History 來(lái)實(shí)現(xiàn)頁(yè)面切換
  • 應(yīng)用:前端路由主要適用于“前后端分離”的單頁(yè)面應(yīng)用(SPA)項(xiàng)目
  • 優(yōu)點(diǎn):用戶體驗(yàn)好把敢,交互流暢
  • 缺點(diǎn):瀏覽器“前進(jìn)”寄摆、“后退”會(huì)重新請(qǐng)求,無(wú)法合理利用緩存

模塊化開發(fā)怎么做修赞?

  • 封裝對(duì)象作為命名空間 -- 內(nèi)部狀態(tài)可以被外部改寫
  • 立即執(zhí)行函數(shù)(IIFE) -- 需要依賴多個(gè)JS文件婶恼,并且嚴(yán)格按順序加載
  • 使用模塊加載器 -- require.js, sea.js, EC6 模塊

通行的 Javascript 模塊的規(guī)范有哪些?

  • CommonJS -- 主要用在服務(wù)器端 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);
  • E6 模塊
import {math} from './math';
math.add(2, 3);

AMD 與 CMD 規(guī)范的區(qū)別柏副?

  • 規(guī)范化產(chǎn)出:

    • AMD 由 RequireJS 推廣產(chǎn)出
    • CMD 由 SeaJS 推廣產(chǎn)出
  • 模塊的依賴:

    • AMD 提前執(zhí)行勾邦,推崇依賴前置
    • CMD 延遲執(zhí)行,推崇依賴就近
  • API 功能:

    • AMD 的 API 默認(rèn)多功能(分全局 require 和局部 require)
    • CMD 的 API 推崇職責(zé)單一純粹(沒(méi)有全局 require)
  • 模塊定義規(guī)則:

    • AMD 默認(rèn)一開始就載入全部依賴模塊
  define(['./a', './b'], function(a, b) {
      a.doSomething();
      b.doSomething();
  });
  • CMD 依賴模塊在用到時(shí)才就近載入
  define(function(require, exports, module) {
      var a = require('./a');
      a.doSomething();
      var b = require('./b');
      b.doSomething();
  })

requireJS的核心原理是什么割择?

  • 每個(gè)模塊所依賴模塊都會(huì)比本模塊預(yù)先加載

對(duì) Node.js 的優(yōu)點(diǎn)眷篇、缺點(diǎn)提出了自己的看法? Node.js的特點(diǎn)和適用場(chǎng)景荔泳?

  • Node.js的特點(diǎn):?jiǎn)尉€程蕉饼,非阻塞I/O,事件驅(qū)動(dòng)
  • Node.js的優(yōu)點(diǎn):擅長(zhǎng)處理高并發(fā)换可;適合I/O密集型應(yīng)用
  • Node.js的缺點(diǎn):不適合CPU密集運(yùn)算;不能充分利用多核CPU厦幅;可靠性低沾鳄,某個(gè)環(huán)節(jié)出錯(cuò)會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰

  • Node.js的適用場(chǎng)景:

    • RESTful API
    • 實(shí)時(shí)應(yīng)用:在線聊天、圖文直播
    • 工具類應(yīng)用:前端部署(npm, gulp)
    • 表單收集:?jiǎn)柧硐到y(tǒng)

如何判斷當(dāng)前腳本運(yùn)行在瀏覽器還是node環(huán)境中确憨?

  • 判斷 Global 對(duì)象是否為 window译荞,如果不為 window,當(dāng)前腳本沒(méi)有運(yùn)行在瀏覽器中

什么是 npm 休弃?

  • npm 是 Node.js 的模塊管理和發(fā)布工具

什么是 WebKit 吞歼?

  • WebKit 是一個(gè)開源的瀏覽器內(nèi)核,由渲染引擎(WebCore)和JS解釋引擎(JSCore)組成
  • 通常所說(shuō)的 WebKit 指的是 WebKit(WebCore)塔猾,主要工作是進(jìn)行 HTML/CSS 渲染
  • WebKit 一直是 Safari 和 Chrome(之前) 使用的瀏覽器內(nèi)核篙骡,后來(lái) Chrome 改用Blink 內(nèi)核

如何測(cè)試前端代碼? 知道 Unit Test,BDD, TDD 么? 怎么測(cè)試你的前端工程(mocha, jasmin..)?

  • 通過(guò)為前端代碼編寫單元測(cè)試(Unit Test)來(lái)測(cè)試前端代碼
  • Unit Test:一段用于測(cè)試一個(gè)模塊或接口是否能達(dá)到預(yù)期結(jié)果的代碼
  • BDD:行為驅(qū)動(dòng)開發(fā) -- 業(yè)務(wù)需求描述產(chǎn)出產(chǎn)品代碼的開發(fā)方法
  • TDD:測(cè)試驅(qū)動(dòng)開發(fā) -- 單元測(cè)試用例代碼產(chǎn)出產(chǎn)品代碼的開發(fā)方法
  • 單元測(cè)試框架:
// mocha 示例
describe('Test add', function() {
  it('1 + 2 = 3', function() {
      expect(add(1, 2)).to.be.equal(3);
  });
});

// jasmin 示例
describe('Test add', function () {
    it('1 + 2 = 3', function () {
        expect(add(1, 2)).toEqual(3);
    });
});

介紹你知道的前端模板引擎?

  • artTemplate, underscore, handlebars

什么是 Modernizr糯俗? Modernizr 工作原理尿褪?

  • Modernizr 是一個(gè)開源的 JavaScript 庫(kù),用于檢測(cè)用戶瀏覽器對(duì) HTML5 與 CSS3 的支持情況

移動(dòng)端最小觸控區(qū)域是多大得湘?

  • 44 * 44 px

移動(dòng)端的點(diǎn)擊事件的延遲時(shí)間是多長(zhǎng)杖玲,為什么會(huì)有延遲? 如何解決這個(gè)延時(shí)淘正?

  • 移動(dòng)端 click 有 300ms 延遲摆马,瀏覽器為了區(qū)分“雙擊”(放大頁(yè)面)還是“單擊”而設(shè)計(jì)
  • 解決方案:
    • 禁用縮放(對(duì)safari無(wú)效)
    • 使用指針事件(IE私有特性,且僅IE10+)
    • 使用 Zepto 的 tap 事件(有點(diǎn)透BUG)
    • 使用 FastClick 插件(體積大[壓縮后8k])

什么是函數(shù)式編程鸿吆?

  • 函數(shù)式編程是一種"編程范式"囤采,主要思想是把運(yùn)算過(guò)程盡量寫成一系列嵌套的函數(shù)調(diào)用

  • 例如:var result = subtract(multiply(add(1,2), 3), 4);

  • 函數(shù)式編程的特點(diǎn):

    • 函數(shù)核心化:函數(shù)可以作為變量的賦值、另一函數(shù)的參數(shù)伞剑、另一函數(shù)的返回值
    • 只用“表達(dá)式”斑唬,不用“語(yǔ)句”:要求每一步都是單純的運(yùn)算,都必須有返回值
    • 沒(méi)有"副作用":所有功能只為返回一個(gè)新的值黎泣,不修改外部變量
    • 引用透明:運(yùn)行不依賴于外部變量恕刘,只依賴于輸入的參數(shù)
  • 函數(shù)式編程的優(yōu)點(diǎn):

    • 代碼簡(jiǎn)潔,接近自然語(yǔ)言抒倚,易于理解
    • 便于維護(hù)褐着,利于測(cè)試、除錯(cuò)托呕、組合
    • 易于“并發(fā)編程“含蓉,不用擔(dān)心一個(gè)線程的數(shù)據(jù),被另一個(gè)線程修改
    • 可“熱升級(jí)”代碼项郊,在運(yùn)行狀態(tài)下直接升級(jí)代碼馅扣,不需要重啟,也不需要停機(jī)

什么是函數(shù)柯里化Currying)着降?

  • 柯里化:

    • 通常也稱部分求值差油,含義是給函數(shù)分步傳遞參數(shù),每次遞參部分應(yīng)用參數(shù)任洞,并返回一個(gè)更具體的函數(shù)蓄喇,繼續(xù)接受剩余參數(shù)
    • 期間會(huì)連續(xù)返回具體函數(shù),直至返回最后結(jié)果交掏。因此妆偏,函數(shù)柯里化是逐步傳參,逐步縮小函數(shù)的適用范圍盅弛,逐步求解的過(guò)程
    • 柯里化的作用:延遲計(jì)算钱骂;參數(shù)復(fù)用叔锐;動(dòng)態(tài)創(chuàng)建函數(shù)
  • 柯里化的缺點(diǎn):

    • 函數(shù)柯里化會(huì)產(chǎn)生開銷(函數(shù)嵌套,比普通函數(shù)占更多內(nèi)存)罐柳,但性能瓶頸首先來(lái)自其它原因(DOM 操作等)

什么是依賴注入掌腰?

  • 當(dāng)一個(gè)類的實(shí)例依賴另一個(gè)類的實(shí)例時(shí),自己不創(chuàng)建該實(shí)例张吉,由IOC容器創(chuàng)建并注入給自己齿梁,因此稱為依賴注入。
  • 依賴注入解決的就是如何有效組織代碼依賴模塊的問(wèn)題

設(shè)計(jì)模式:什么是 singleton, factory, strategy, decorator肮蛹?

  • Singleton(單例) 一個(gè)類只有唯一實(shí)例勺择,這個(gè)實(shí)例在整個(gè)程序中有一個(gè)全局的訪問(wèn)點(diǎn)
  • Factory (工廠) 解決實(shí)列化對(duì)象產(chǎn)生重復(fù)的問(wèn)題
  • Strategy(策略) 將每一個(gè)算法封裝起來(lái),使它們還可以相互替換伦忠,讓算法獨(dú)立于使用
  • Observer(觀察者) 多個(gè)觀察者同時(shí)監(jiān)聽一個(gè)主體省核,當(dāng)主體對(duì)象發(fā)生改變時(shí),所有觀察者都將得到通知
  • Prototype(原型) 一個(gè)完全初始化的實(shí)例昆码,用于拷貝或者克隆
  • Adapter(適配器) 將不同類的接口進(jìn)行匹配調(diào)整气忠,盡管內(nèi)部接口不兼容,不同的類還是可以協(xié)同工作
  • Proxy(代理模式) 一個(gè)充當(dāng)過(guò)濾轉(zhuǎn)發(fā)的對(duì)象用來(lái)代表一個(gè)真實(shí)的對(duì)象
  • Iterator(迭代器) 在不需要直到集合內(nèi)部工作原理的情況下赋咽,順序訪問(wèn)一個(gè)集合里面的元素
  • Chain of Responsibility(職責(zé)連) 處理請(qǐng)求組成的對(duì)象一條鏈旧噪,請(qǐng)求鏈中傳遞,直到有對(duì)象可以處理

什么是前端工程化脓匿?

  • 前端工程化就是把一整套前端工作流程使用工具自動(dòng)化完成
  • 前端開發(fā)基本流程:
    • 項(xiàng)目初始化:yeoman, FIS
    • 引入依賴包:bower, npm
    • 模塊化管理:npm, browserify, Webpack
    • 代碼編譯:babel, sass, less
    • 代碼優(yōu)化(壓縮/合并):Gulp, Grunt
    • 代碼檢查:JSHint, ESLint
    • 代碼測(cè)試:Mocha
  • 目前最知名的構(gòu)建工具:Gulp, Grunt, npm + Webpack

介紹 Yeoman 是什么淘钟?

  • Yeoman --前端開發(fā)腳手架工具,自動(dòng)將最佳實(shí)踐和工具整合起來(lái)構(gòu)建項(xiàng)目骨架
  • Yeoman 其實(shí)是三類工具的合體陪毡,三類工具各自獨(dú)立:
    • yo --- 腳手架米母,自動(dòng)生成工具(相當(dāng)于一個(gè)粘合劑,把 Yeoman 工具粘合在一起)
    • Grunt毡琉、gulp --- 自動(dòng)化構(gòu)建工具 (最初只有g(shù)runt铁瞒,之后加入了gulp)
    • Bower、npm --- 包管理工具 (原來(lái)是bower桅滋,之后加入了npm)

介紹 WebPack 是什么慧耍? 有什么優(yōu)勢(shì)?

  • WebPack 是一款[模塊加載器]兼[打包工具]虱歪,用于把各種靜態(tài)資源(js/css/image等)作為模塊來(lái)使用
  • WebPack 的優(yōu)勢(shì):
    • WebPack 同時(shí)支持 commonJS 和 AMD/CMD蜂绎,方便代碼遷移
    • 不僅僅能被模塊化 JS 栅表,還包括 CSS笋鄙、Image 等
    • 能替代部分 grunt/gulp 的工作,如打包怪瓶、壓縮混淆萧落、圖片base64
    • 擴(kuò)展性強(qiáng)践美,插件機(jī)制完善,特別是支持 React 熱插拔的功能

介紹類庫(kù)和框架的區(qū)別找岖?

  • 類庫(kù)是一些函數(shù)的集合陨倡,幫助開發(fā)者寫WEB應(yīng)用,起主導(dǎo)作用的是開發(fā)者的代碼
  • 框架是已實(shí)現(xiàn)的特殊WEB應(yīng)用许布,開發(fā)者只需對(duì)它填充具體的業(yè)務(wù)邏輯兴革,起主導(dǎo)作用是框架

什么是 MVC/MVP/MVVM/Flux?

  • MVC(Model-View-Controller)
    • V->C, C->M, M->V
    • 通信都是單向的蜜唾;C只起路由作用杂曲,業(yè)務(wù)邏輯都部署在V
    • Backbone
  • MVP(Model-View-Presenter)

    • V<->P, P<->M
    • 通信都是雙向的;V和M不發(fā)生聯(lián)系(通過(guò)P傳)袁余;V非常薄擎勘,邏輯都部署在P
    • Riot.js
  • MVVM(Model-View-ViewModel)

    • V->VM, VM<->M
    • 采用雙向數(shù)據(jù)綁定:View 和 ViewModel 的變動(dòng)都會(huì)相互映射到對(duì)象上面
    • Angular
  • Flux(Dispatcher-Store-View)

    • Action->Dispatcher->Store->View, View->Action
    • Facebook 為了解決在 MVC 應(yīng)用中碰到的工程性問(wèn)題提出一個(gè)架構(gòu)思想
    • 基于一個(gè)簡(jiǎn)單的原則:數(shù)據(jù)在應(yīng)用中單向流動(dòng)(單向數(shù)據(jù)流)
    • React(Flux 中 View,只關(guān)注表現(xiàn)層)

Backbone 是什么颖榜?

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

AngularJS 是什么棚饵?

  • AngularJS 是一個(gè)完善的前端 MVVM 框架,包含模板掩完、數(shù)據(jù)雙向綁定噪漾、路由、模塊化藤为、服務(wù)怪与、依賴注入等
  • AngularJS 由 Google 維護(hù),用來(lái)協(xié)助大型單一頁(yè)面應(yīng)用開發(fā)缅疟。

React 是什么分别?

  • React 不是 MV* 框架,用于構(gòu)建用戶界面的 JavaScript 庫(kù)存淫,側(cè)重于 View 層
  • React 主要的原理:
    • 虛擬 DOM + diff 算法 -> 不直接操作 DOM 對(duì)象
    • Components 組件 -> Virtual DOM 的節(jié)點(diǎn)
    • State 觸發(fā)視圖的渲染 -> 單向數(shù)據(jù)綁定
    • React 解決方案:React + Redux + react-router + Fetch + webpack

react-router 路由系統(tǒng)的實(shí)現(xiàn)原理耘斩?

  • 實(shí)現(xiàn)原理:location 與 components 之間的同步
  • 路由的職責(zé)是保證 UI 和 URL 的同步
  • 在 react-router 中,URL 對(duì)應(yīng) Location 對(duì)象桅咆,UI 由 react components 決定
  • 因此括授,路由在 react-router 中就轉(zhuǎn)變成 location 與 components 之間的同步

Meteor 是什么

  • Meteor 是一個(gè)全棧開發(fā)框架,基礎(chǔ)構(gòu)架是 Node.JS + MongoDB岩饼,并把延伸到了瀏覽器端荚虚。
  • Meteor 統(tǒng)一了服務(wù)器端和客戶端的數(shù)據(jù)訪問(wèn),使開發(fā)者可以輕松完成全棧式開發(fā)工作籍茧。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末版述,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子寞冯,更是在濱河造成了極大的恐慌渴析,老刑警劉巖晚伙,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俭茧,居然都是意外死亡咆疗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門母债,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)午磁,“玉大人,你說(shuō)我怎么就攤上這事毡们±焯撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵漏隐,是天一觀的道長(zhǎng)喧半。 經(jīng)常有香客問(wèn)我,道長(zhǎng)青责,這世上最難降的妖魔是什么挺据? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮脖隶,結(jié)果婚禮上扁耐,老公的妹妹穿的比我還像新娘。我一直安慰自己产阱,他們只是感情好婉称,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著构蹬,像睡著了一般王暗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庄敛,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天俗壹,我揣著相機(jī)與錄音,去河邊找鬼藻烤。 笑死绷雏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怖亭。 我是一名探鬼主播涎显,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兴猩!你這毒婦竟也來(lái)了期吓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤峭跳,失蹤者是張志新(化名)和其女友劉穎膘婶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛀醉,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悬襟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拯刁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脊岳。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垛玻,靈堂內(nèi)的尸體忽然破棺而出割捅,到底是詐尸還是另有隱情,我是刑警寧澤帚桩,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布亿驾,位于F島的核電站,受9級(jí)特大地震影響账嚎,放射性物質(zhì)發(fā)生泄漏莫瞬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一郭蕉、第九天 我趴在偏房一處隱蔽的房頂上張望疼邀。 院中可真熱鬧,春花似錦召锈、人聲如沸旁振。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拐袜。三九已至,卻和暖如春梢薪,著一層夾襖步出監(jiān)牢的瞬間阻肿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工沮尿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丛塌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓畜疾,卻偏偏與公主長(zhǎng)得像赴邻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啡捶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容