最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

總結(jié)幾道關(guān)于Node.js的面試問(wèn)題

 更新時(shí)間:2017年01月11日 09:56:40   投稿:daisy  
這篇文章主要總結(jié)了幾道關(guān)于Node.js的面試問(wèn)題,通過(guò)這些問(wèn)題就來(lái)判斷一個(gè)人的Node.js水平是不太嚴(yán)謹(jǐn)?shù)?,但是它能讓你?duì)面試者在Node.js上的經(jīng)驗(yàn)如何有個(gè)大概的了解。有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。

什么是error-first的回調(diào)方式

Error-first回調(diào)方式用來(lái)同時(shí)傳遞error和data。將錯(cuò)誤作為第一個(gè)參數(shù),它就必須先檢查看看有沒(méi)有錯(cuò)誤先。另外的參數(shù)就用來(lái)傳遞data了。

fs.readFile(filePath, function(err, data) {
 if(err) {
  //處理錯(cuò)誤,這里的return很重要,如果發(fā)生錯(cuò)誤,在此處就會(huì)停止了。
  return console.log(err);
 }
 //傳遞data
 console.log(data);
})

你是如何避免回調(diào)地獄的?

  1. 模塊化 把回調(diào)函數(shù)分割成獨(dú)立的函數(shù)
  2. 使用控制流的庫(kù),比如async
  3. generators結(jié)合Promise
  4. async/await

Promise是什么?

概念不多說(shuō)了,簡(jiǎn)單來(lái)說(shuō)就是幫助你更好地處理異步操作的東西。

new Promise((resolve, reject) => {
 setTimeout(() => {
  resolve('result');
 }, 100)
})
 .then(console.log)
 .catch(console.error)

stub是什么? 舉個(gè)例子?

stub是用來(lái)模擬組件/模塊行為的東西,它在測(cè)試階段為函數(shù)調(diào)用提供內(nèi)部響應(yīng)。

例子是寫(xiě)文件,但實(shí)際上并沒(méi)有這么做

var fs = require('fs');

var writeFileStub = sinon.stub(fs, 'writeFile', function(path, data, cb) {
 return cb(null)
})

expect(writeFileStub).to.be.called
writeFileStub.restore();

如何保證你的HTTP cookies安全不受XSS攻擊

在set-cookieHTTP頭部加上這幾個(gè)信息:

  1. HttpOnly-這個(gè)屬性用來(lái)防止跨站腳本攻擊,它不允許cookie被JavaScript代碼獲取。
  2. secure-這個(gè)屬性告訴瀏覽器只有在HTTPS連接時(shí)才發(fā)送cookie

像這樣:Set-Cookit: sid=<cookit-value>; HttpOnly

下面這段代碼有什么問(wèn)題

new Promise((resolve, reject) => {
 throw new Error('error')
}).then(console.log)

then后面沒(méi)有跟上catch,這樣的話如果出錯(cuò)的這段代碼還是默默地運(yùn)行,并不會(huì)告訴你哪里出錯(cuò)了。

修改后:

new Promise((resolve, reject) => {
 throw new Error('error')
}).then(console.log).catch(console.error)

如果你正在調(diào)試一個(gè)大型項(xiàng)目,你不知道哪個(gè)Promise可能會(huì)有問(wèn)題,可以使用unhandledRejection。它會(huì)打印出所有未經(jīng)處理的Promise異常

process.on('unhandledRejection', (err) => {
 console.log(err)
})

下面的代碼有什么問(wèn)題?

function checkApiKey(apiKeyFromDb, apiKeyReceived) {
 if (apiKeyFromDb === apiKeyReceived) {
  return true
 }
 return false
}

說(shuō)實(shí)話我剛看到的時(shí)候也是一臉懵逼,這有啥問(wèn)題?不是很正常的一個(gè)if else代碼嗎。

不過(guò)這不是普通的if else代碼,這是用來(lái)比較安全證書(shū)的代碼,這個(gè)時(shí)候你不能泄露一丁點(diǎn)的信息,所以確保他們?cè)谝欢ǖ臅r(shí)間內(nèi)進(jìn)行比較。否則的你的應(yīng)用就可能受到時(shí)序攻擊了。

什么是時(shí)序攻擊(timing attacks)?Node.js使用的V8引擎試圖從表示層面上優(yōu)化代碼。它一個(gè)字符一個(gè)字符地比較,一旦找到不符合它就停止比較。

你可以使用cryptiles這個(gè)npm模塊來(lái)解決這個(gè)問(wèn)題

function checkApiKey(apiKeyFromDb, apiKeyReceived) {
 return cryptiles.fixedTimeCimparison(apiKeyFromDb, apiKeyReceived)
}

如何通俗地解釋時(shí)序攻擊(timing attack)?

時(shí)序攻擊屬于側(cè)信道攻擊/旁路攻擊(Side Channel Attack),側(cè)信道攻擊是指利用信道外的信息,比如加解密的速度/加解密時(shí)芯片引腳的電壓/密文傳輸?shù)牧髁亢屯緩降冗M(jìn)行攻擊的方式,一個(gè)詞形容就是“旁敲側(cè)擊”。

舉一個(gè)最簡(jiǎn)單的計(jì)時(shí)攻擊的例子,某個(gè)函數(shù)負(fù)責(zé)比較用戶(hù)輸入的密碼和存放在系統(tǒng)內(nèi)密碼是否相同,如果該函數(shù)是從第一位開(kāi)始比較,發(fā)現(xiàn)不同就立即返回,那么通過(guò)計(jì)算返回的速度就知道了大概是哪一位開(kāi)始不同的,這樣就實(shí)現(xiàn)了電影中經(jīng)常出現(xiàn)的按位破解密碼的場(chǎng)景。密碼破解復(fù)雜度成千上萬(wàn)倍甚至百萬(wàn)千萬(wàn)倍的下降。

最簡(jiǎn)單的防御方法是:“發(fā)現(xiàn)錯(cuò)誤的時(shí)候并不立即返回,而是設(shè)一個(gè)標(biāo)志位,直到完全比較完兩個(gè)字符串再返回”。

時(shí)序攻擊并非是一種理論攻擊方法,OpenSSL、OpenSSH等應(yīng)用都曾經(jīng)有時(shí)序攻擊漏洞,舉個(gè)實(shí)際的例子吧:

下面的代碼會(huì)輸出什么

Promise.reso(1)
 .then((x) => x + 1)
 .then((x) => {throw new Error('My Error')})
 .catch(() => 1)
 .then((x) => x + 1)
 .then((x) => console.log(x))
 .catch(console.error) 
  1. 一個(gè)新的Promise被創(chuàng)造出來(lái),它會(huì)解析參數(shù)1
  2. 解析后的值會(huì)被加上1(現(xiàn)在是2),并立即返回了這個(gè)2
  3. 解析的值被丟棄,拋出一個(gè)異常
  4. 異常被丟棄,新的值1被返回
  5. catch后運(yùn)行不會(huì)停止,在異常處理之前,它繼續(xù)運(yùn)行,一個(gè)新的,增加了1后的值2被返回
  6. 返回值被打印出來(lái)
  7. 這一行不會(huì)運(yùn)行,因?yàn)闆](méi)有異常

總結(jié)

以上就是關(guān)于Node.js的幾道面試題,希望本文的內(nèi)容對(duì)大家能有所幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Windows安裝Node.js報(bào)錯(cuò):2503、2502的解決方法

    Windows安裝Node.js報(bào)錯(cuò):2503、2502的解決方法

    這篇文章主要給大家介紹了關(guān)于在Windows系統(tǒng)下安裝Node.js報(bào)錯(cuò):2503、2502的解決方法,文中將解決的方法一步步介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • node.js?使用process.argv獲取和處理命令行參數(shù)的操作

    node.js?使用process.argv獲取和處理命令行參數(shù)的操作

    process.argv是Node.js中用于獲取命令行參數(shù)的數(shù)組,基本使用方法是通過(guò)命令行傳遞參數(shù)并在腳本中訪問(wèn)這些參數(shù),參數(shù)可以根據(jù)需求進(jìn)行處理,也可以使用第三方庫(kù)如minimist或yargs來(lái)簡(jiǎn)化參數(shù)解析,這些工具可以幫助開(kāi)發(fā)者有效地管理和使用命令行參數(shù),提高腳本的靈活性和功能性
    2024-10-10
  • Node.js中的模塊路徑解析規(guī)則和子模塊包

    Node.js中的模塊路徑解析規(guī)則和子模塊包

    NodeJS特性如事件驅(qū)動(dòng)、異步編程、無(wú)阻塞IO,這些特性為它帶來(lái)了高效的性能和更少的代碼,require函數(shù)支持斜杠(/)或盤(pán)符(C:)開(kāi)頭的絕對(duì)路徑,也支持./開(kāi)頭的相對(duì)路徑,為了便于管理和使用,我們可以把由多個(gè)子模塊組成的大模塊稱(chēng)做包,并把所有子模塊放在同一個(gè)目錄里
    2023-11-11
  • Nodejs實(shí)現(xiàn)用戶(hù)注冊(cè)功能

    Nodejs實(shí)現(xiàn)用戶(hù)注冊(cè)功能

    本文通過(guò)實(shí)例代碼給大家介紹了Nodejs實(shí)現(xiàn)用戶(hù)注冊(cè)功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • npm安裝慢的問(wèn)題分析及解決方法

    npm安裝慢的問(wèn)題分析及解決方法

    在Node.js開(kāi)發(fā)過(guò)程中,npm install 是安裝和管理項(xiàng)目依賴(lài)的關(guān)鍵命令,然而,有時(shí)我們會(huì)遇到 npm install 運(yùn)行卡住不動(dòng)的情況,所以本文給大家介紹了npm安裝慢的問(wèn)題分析及解決方法,需要的朋友可以參考下
    2025-03-03
  • node.js中的socket.io的廣播消息

    node.js中的socket.io的廣播消息

    這篇文章主要介紹了node.js中的socket.io的廣播消息,需要的朋友可以參考下
    2014-12-12
  • Nodejs腳本快速導(dǎo)出MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)

    Nodejs腳本快速導(dǎo)出MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)

    在數(shù)據(jù)庫(kù)管理和數(shù)據(jù)遷移的過(guò)程中,常常需要將數(shù)據(jù)庫(kù)中的表數(shù)據(jù)和結(jié)構(gòu)進(jìn)行導(dǎo)出,本文將使用Node.js編寫(xiě)一個(gè)腳本實(shí)現(xiàn)快速?gòu)腗ySQL數(shù)據(jù)庫(kù)中導(dǎo)出所有表的數(shù)據(jù)和結(jié)構(gòu),并保存為單獨(dú)的SQL文件,需要的可以參考下
    2024-10-10
  • node.js同步/異步文件讀寫(xiě)-fs,Stream文件流操作實(shí)例詳解

    node.js同步/異步文件讀寫(xiě)-fs,Stream文件流操作實(shí)例詳解

    這篇文章主要介紹了node.js同步/異步文件讀寫(xiě)-fs,Stream文件流操作,結(jié)合實(shí)例形式詳細(xì)分析了node.js針對(duì)文件的同步/異步讀寫(xiě)與文件流相關(guān)操作技巧,需要的朋友可以參考下
    2023-06-06
  • 深入淺出了解Node.js Streams

    深入淺出了解Node.js Streams

    這篇文章講了了解流的用途,為什么它們?nèi)绱酥匾?,以及如何使用它們。下面我們?lái)一起學(xué)習(xí)吧
    2019-05-05
  • 詳解nodejs的express如何自動(dòng)生成項(xiàng)目框架

    詳解nodejs的express如何自動(dòng)生成項(xiàng)目框架

    本篇文章主要介紹了nodejs的express如何自動(dòng)生成項(xiàng)目框架,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評(píng)論

太谷县| 石棉县| 焉耆| 马龙县| 浦东新区| 宁南县| 翁牛特旗| 青州市| 连江县| 光山县| 黄山市| 页游| 阿鲁科尔沁旗| 司法| 武山县| 拜泉县| 承德市| 育儿| 新源县| 政和县| 库伦旗| 泾源县| 莒南县| 盖州市| 邢台市| 太湖县| 博白县| 承德市| 枞阳县| 梅州市| 阿拉善左旗| 射阳县| 安康市| 东海县| 社旗县| 远安县| 贵港市| 石嘴山市| 东乌珠穆沁旗| 平安县| 成安县|