1、什么是模塊化,解釋AMD/CommonJS/ES6 模塊
(評(píng)分標(biāo)準(zhǔn):模塊化2分,AMD 2分,CommonJS 3分,ES6 3分)
模塊化是一種將系統(tǒng)分離成獨(dú)立功能部分的方法,可將系統(tǒng)分割成獨(dú)立的功能部分,嚴(yán)格定義模塊接口、模塊間具有透明性。有了模塊,我們就可以更方便地使用別人的代碼,想要什么功能,就加載什么模塊。
AMD/CommonJS/ES6 模塊就是現(xiàn)在通行的Javascript模塊規(guī)范
AMD:是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語句的運(yùn)行。所有依賴這個(gè)模塊的語句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行
CommonJS:JavaScript是一個(gè)強(qiáng)大面向?qū)ο笳Z言,它有很多快速高效的解釋器。官方JavaScript標(biāo)準(zhǔn)定義的API是為了構(gòu)建基于瀏覽器的應(yīng)用程序。然而,并沒有定于一個(gè)用于更廣泛的應(yīng)用程序的標(biāo)準(zhǔn)庫。
CommonJS API定義很多普通應(yīng)用程序(主要指非瀏覽器的應(yīng)用)使用的API,從而填補(bǔ)了這個(gè)空白。它的終極目標(biāo)是提供一個(gè)類似Python,Ruby和Java標(biāo)準(zhǔn)庫。這樣的話,開發(fā)者可以使用CommonJS API編寫應(yīng)用程序,然后這些應(yīng)用可以運(yùn)行在不同的JavaScript解釋器和不同的主機(jī)環(huán)境中。在兼容CommonJS的系統(tǒng)中,你可以實(shí)用JavaScript程序開發(fā):
a.服務(wù)器端JavaScript應(yīng)用程序
b.命令行工具
c.圖形界面應(yīng)用程序
概括來說,CommonJS規(guī)范定義讓Javascript運(yùn)行在其他的環(huán)境中,而非僅僅在瀏覽器
modules是ES6引入的最重要一個(gè)特性。
modules規(guī)范分兩部分,一部分是如何導(dǎo)出,一部分是如何導(dǎo)入。
2、說說你對(duì)Node.js的理解,npm又是什么?
(評(píng)分標(biāo)準(zhǔn):NodeJS 5分,npm 5分)
Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。?Node.js 使用了一個(gè)事件驅(qū)動(dòng)、非阻塞式 I/O 的模型,使其輕量又高效。Node.JS逐漸發(fā)展成一個(gè)成熟的開發(fā)平臺(tái),吸引了許多開發(fā)者。有許多大型高流量網(wǎng)站都采用Node.JS進(jìn)行開發(fā),此外,開發(fā)人員還可以使用它來開發(fā)一些快速移動(dòng)Web框架。
npm(NodeJS Package manager)是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場(chǎng)景有以下幾種:
允許用戶從npm服務(wù)器下載別人編寫的第三方包到本地使用。
允許用戶從npm服務(wù)器下載并安裝別人編寫的命令行程序到本地使用。
允許用戶將自己編寫的包或命令行程序上傳到npm服務(wù)器供別人使用。
3、Gulp是什么?
(評(píng)分標(biāo)準(zhǔn):自動(dòng)化構(gòu)建工具4分,提高效率 2分,構(gòu)建任務(wù)2分)
基于NodeJs的自動(dòng)化構(gòu)建工具,通過gulpfile.js文件定義任務(wù),gulp taskname 執(zhí)行任務(wù),gulp是前端開發(fā)過程中對(duì)代碼進(jìn)行構(gòu)建的工具,是自動(dòng)化項(xiàng)目的構(gòu)建利器;不僅能對(duì)網(wǎng)站資源進(jìn)行優(yōu)化,而且在開發(fā)過程中很多重復(fù)的任務(wù)能夠使用正確的工具自動(dòng)完成;使用gulp,我們不僅可以很愉快的編寫代碼,而且大大提高我們的工作效率。
4、談?wù)勀銓?duì)webpack的理解
(評(píng)分標(biāo)準(zhǔn):模塊加載器2分,資源模塊化4分,優(yōu)勢(shì)4分)
webpack是一款模塊加載器兼打包工具,它能把各種資源,例如JS(含JSX)、coffee、樣式(含less/sass)、圖片等都作為模塊來使用和處理。
我們可以直接使用require(XXX) 的形式來引入各模塊,即使它們可能需要經(jīng)過編譯(比如JSX和sass),但我們無須在上面花費(fèi)太多心思,因?yàn)?webpack 有著各種健全的加載器(loader)在默默處理這些事情。
其優(yōu)勢(shì)歸類為如下幾個(gè):
1. webpack 是以 commonJS 的形式來書寫腳本滴,但對(duì) AMD/CMD的支持也很全面,方便舊項(xiàng)目進(jìn)行代碼遷移。
2. 資源模塊化。
3. 開發(fā)便捷,能替代部分 grunt/gulp 的工作,比如打包、壓縮混淆、圖片轉(zhuǎn)base64等。
4. 擴(kuò)展性強(qiáng),插件機(jī)制完善
5、什么是Promise?如何使用
(評(píng)分標(biāo)準(zhǔn):ES6新增特性2分,解決回調(diào)地獄/回調(diào)金字塔4分,基本api 4分)
ES6 原生提供了 Promise 對(duì)象。
所謂Promise,就是一個(gè)對(duì)象,用來傳遞異步操作的消息。它代表了某個(gè)未來才會(huì)知道結(jié)果的事件(通常是一個(gè)異步操作),并且這個(gè)事件提供統(tǒng)一的 API,可供進(jìn)一步處理。
Promise 對(duì)象有以下兩個(gè)特點(diǎn)。
a.對(duì)象的狀態(tài)不受外界影響。
b.一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。
有了Promise 對(duì)象,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)(解決回調(diào)地獄/回調(diào)金字塔)。此外,Promise 對(duì)象提供統(tǒng)一的接口,使得控制異步操作更加容易。
基本的api
Promise.resolve()//已完成
Promise.reject()//已失敗
Promise.prototype.then()// 異步函數(shù)完成調(diào)用
Promise.prototype.catch()// 異步函數(shù)異常
Promise.all() // 所有的完成
Promise.race() // 競(jìng)速,完成一個(gè)即可
6、ES6中有哪些新增了哪些特性?
(評(píng)分標(biāo)準(zhǔn):ES6新增特性每點(diǎn)2分)
a. let, const 用來聲明變量的,let 新增了塊級(jí)作用域,const定義常量
b.class, extends, super 新的class寫法讓對(duì)象原型的寫法更加清晰、更像面向?qū)ο缶幊痰恼Z法,也更加通俗易懂。
c. arrow function 用它來寫function比原來的寫法要簡(jiǎn)潔清晰
d. template string 字符串模板
e. destructuring 解構(gòu),ES6允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值
7、什么是箭頭函數(shù)?且寫出一個(gè)使用例子
(評(píng)分標(biāo)準(zhǔn):形式2分,this值3分,例子5分)
ES6中新增特性,使用箭頭函數(shù)來寫function比原來的寫法要簡(jiǎn)潔清晰,箭頭函數(shù)沒有自己的this,繼承的是外層的this
形式:()=>{}
var person = {
name: "Shafee",
say: function() {
setTimeout(()=> {
alert("hello ," + this.name)
}, 1000)
}
};
person.say();
8、說說你對(duì)Express的看法
(評(píng)分標(biāo)準(zhǔn):概念2分,豐富中間件5分,腳手架2分,其他一分)
Express 是一個(gè)基于 Node.js 平臺(tái)的極簡(jiǎn)、靈活的 web 應(yīng)用開發(fā)框架,它提供一系列強(qiáng)大的特性,幫助你創(chuàng)建各種 Web 和移動(dòng)設(shè)備應(yīng)用。提供了豐富的 HTTP 快捷方法和任意排列組合的 Connect 中間件,讓創(chuàng)建健壯、友好的 API 變得既快速又簡(jiǎn)單。擴(kuò)展了 Web 應(yīng)用所需的基本功能。使用使用腳手架express-generator快速創(chuàng)建express應(yīng)用
9、比較mongodb跟mysql的異同
(評(píng)分標(biāo)準(zhǔn):特點(diǎn)各5分)
mongodb與mysql命令對(duì)比
mysql 傳統(tǒng)的關(guān)系數(shù)據(jù)庫一般由數(shù)據(jù)庫(database)、表(table)、記錄(record)三個(gè)層次概念組成。
mongodb 非關(guān)系型數(shù)據(jù)庫,是由數(shù)據(jù)庫(database)、集合(collection)、文檔對(duì)象(document)三個(gè)層次組成。
mongodb(文檔型數(shù)據(jù)庫):提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)
1、基于分布式文件存儲(chǔ)
2、高負(fù)載情況下添加更多節(jié)點(diǎn),可以保證服務(wù)器性能
3、將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔
10、使用Node.js中的http模塊創(chuàng)建一個(gè)web服務(wù)器
(評(píng)分標(biāo)準(zhǔn):模塊加載2分,創(chuàng)建服務(wù)器2分,設(shè)置像迎頭2分,響應(yīng)內(nèi)容2分,結(jié)束響應(yīng)1分,監(jiān)聽1分)
var http = require("http"); // 加載http模塊
// http.createServer 返回一個(gè)http.Server實(shí)例
var server = http.createServer(function(request, response) {
// request 請(qǐng)求
// response響應(yīng)
response.writeHead(200, {"Content-Type":"text/html"}); //設(shè)置響應(yīng)頭,包含狀態(tài)碼以及MIME 長(zhǎng)度..
response.write("
hello nodejs
");//響應(yīng)內(nèi)容response.end(); //結(jié)束響應(yīng)
});
server.listen(3000);
console.log("服務(wù)器開始運(yùn)行...");