返回顶部
首页 > 资讯 > 前端开发 > node.js >总结几道关于Node.js的面试问题
  • 286
分享到

总结几道关于Node.js的面试问题

几道Nodejs 2022-06-04 17:06:09 286人浏览 八月长安
摘要

什么是error-first的回调方式 Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。 fs.re

什么是error-first的回调方式

Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。


fs.readFile(filePath, function(err, data) {
 if(err) {
  //处理错误,这里的return很重要,如果发生错误,在此处就会停止了。
  return console.log(err);
 }
 //传递data
 console.log(data);
})

你是如何避免回调地狱的?

模块化 把回调函数分割成独立的函数 使用控制流的库,比如async generators结合Promise async/await

Promise是什么?

概念不多说了,简单来说就是帮助你更好地处理异步操作的东西。


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

stub是什么? 举个例子?

stub是用来模拟组件/模块行为的东西,它在测试阶段为函数调用提供内部响应。

例子是写文件,但实际上并没有这么做


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头部加上这几个信息:

HttpOnly-这个属性用来防止跨站脚本攻击,它不允许cookie被javascript代码获取。 secure-这个属性告诉浏览器只有在https连接时才发送cookie

像这样:Set-Cookit: sid=<cookit-value>; HttpOnly

下面这段代码有什么问题


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

then后面没有跟上catch,这样的话如果出错的这段代码还是默默地运行,并不会告诉你哪里出错了。

修改后:


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

如果你正在调试一个大型项目,你不知道哪个Promise可能会有问题,可以使用unhandledRejection。它会打印出所有未经处理的Promise异常


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

下面的代码有什么问题?


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

说实话我刚看到的时候也是一脸懵逼,这有啥问题?不是很正常的一个if else代码吗。

不过这不是普通的if else代码,这是用来比较安全证书的代码,这个时候你不能泄露一丁点的信息,所以确保他们在一定的时间内进行比较。否则的你的应用就可能受到时序攻击了。

什么是时序攻击(timing attacks)?node.js使用的V8引擎试图从表示层面上优化代码。它一个字符一个字符地比较,一旦找到不符合它就停止比较。

你可以使用cryptiles这个npm模块来解决这个问题


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

如何通俗地解释时序攻击(timing attack)?

时序攻击属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,比如加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。

举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,如果该函数是从第一位开始比较,发现不同就立即返回,那么通过计算返回的速度就知道了大概是哪一位开始不同的,这样就实现了电影中经常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的下降。

最简单的防御方法是:“发现错误的时候并不立即返回,而是设一个标志位,直到完全比较完两个字符串再返回”。

时序攻击并非是一种理论攻击方法,OpenSSL、Openssh等应用都曾经有时序攻击漏洞,举个实际的例子吧:

查看图片

下面的代码会输出什么


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) 
一个新的Promise被创造出来,它会解析参数1 解析后的值会被加上1(现在是2),并立即返回了这个2 解析的值被丢弃,抛出一个异常 异常被丢弃,新的值1被返回 catch后运行不会停止,在异常处理之前,它继续运行,一个新的,增加了1后的值2被返回 返回值被打印出来 这一行不会运行,因为没有异常

总结

以上就是关于node.js的几道面试题,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流,谢谢大家对编程网的支持。

--结束END--

本文标题: 总结几道关于Node.js的面试问题

本文链接: https://lsjlt.com/news/12867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 总结几道关于Node.js的面试问题
    什么是error-first的回调方式 Error-first回调方式用来同时传递error和data。将错误作为第一个参数,它就必须先检查看看有没有错误先。另外的参数就用来传递data了。 fs.re...
    99+
    2022-06-04
    几道 Node js
  • 总结53道有关Python的面试问答
    本篇内容主要讲解“总结53道有关Python的面试问答”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“总结53道有关Python的面试问答”吧!1. 列表和元组有什么区别每次python或数据科学...
    99+
    2023-06-16
  • 分享几道关于MySQL索引的重点面试题
    前言 索引是对数据库中一或多个列值的排序,帮助数据库高效获取数据的数据结构 假如我们用类比的方法,数据库中的索引就相当于书籍中的目录一样,当我们想找到书中的摸个知识点,我们可以直接去目录中找而不是在书中每页...
    99+
    2024-04-02
  • Android中关于Binder常见面试问题小结
    目录1.简单介绍下binder2.Binder的定向制导,如何找到目标Binder,唤起进程或者线程3.Binder中的红黑树,为什么会有两棵binder_ref红黑树4.Binde...
    99+
    2024-04-02
  • JavaScript必看的10道面试题总结(推荐)
    1.this指向 1.谁调用指向谁 例: function foo(){ console.log("this",this); } n...
    99+
    2024-04-02
  • 面试总结:秒杀设计、AQS 、synchronized相关问题
    目录1、面试官:如何设计一个秒杀系统?请你阐述流程?秒杀系统要解决的几个问题?① 高并发② 超卖③ 恶意请求④ 链接暴露如何解决上面遇到的几个问题?① 秒杀模块微服务化② 秒杀链接加...
    99+
    2024-04-02
  • 总结三道MySQL联合索引面试题
    目录前言: 众所周知mysql联合索引遵循最左前缀匹配原则,在少数情况下也会不遵循(有兴趣,可以翻一下上篇文章) 创建联合索引的时候,建议优先把区分度高的字段放在第一列。 至于怎么统计区分度,可以按照下面这种方式。 创建...
    99+
    2022-08-16
    MySQL联合索引面试题 MySQL联合索引
  • 分析总结20道Vue高频面试题
    目录引言vue生命周期vue父子组件生命周期v-if和v-showv-for和v-if优先级说一下computed和watchvue-routervue2和vue3区别vue插件使用...
    99+
    2022-11-13
    Vue高频面试题 Vue面试
  • Java面试问题知识点总结
    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下。1. Java中的原...
    99+
    2023-05-31
    java 面试 ava
  • Java中关于double、Double相关问题总结
    标题 java中double与Double的区别声明double变量的时候,加d与不加d有什么区别 java中float与double的区别java Double 详解BigDecimal、Double、String之间的互转j...
    99+
    2023-08-17
    Double
  • 面试官问关于Go和Linux的问题?这是你需要知道的。
    面试官问关于Go和Linux的问题?这是你需要知道。 随着互联网的发展,越来越多的企业开始采用Go语言进行开发。而Linux作为最流行的服务器操作系统,也成为了Go语言开发的首选平台。在面试中,关于Go和Linux的问题也成为了考察候选人技...
    99+
    2023-08-22
    linux 响应 面试
  • 几道常问Redis面试题,你能答对吗?
    目录1、Redis支持的数据类型?2、什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?3、Redis 有哪些架构模式?讲讲各自的特点4、使用过Redis分布式锁么...
    99+
    2024-04-02
  • Linux面试中最常问的10个问题总结
    前言 如果你要去面试一个linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了。这些都是比较基本的问题,大家要理解,不能光死记硬背。 1、如何查看系统内核的版本 这里有两种方法: 1) ...
    99+
    2022-06-04
    linux面试问题 linux面试常问命令 面试官常问的linux命令
  • 关于Python包导入报错的问题总结
    目录错误记录总结首先,一般来说,写一个小demo可能一个文件就够了,但是要是做一个小项目,可能需要拆分成很多零散的文件,放在不同的文件夹里面调用,这个就称之为模块(包),Python...
    99+
    2023-02-17
    Python包导入 Python包导入报错 Py包导入报错
  • 关于关闭管道的问题DisconnectNamedPipe
    `DisconnectNamedPipe` 是一个Windows API函数,用于关闭命名管道。命名管道是一种实现进程间通信的机制,...
    99+
    2023-08-08
    问题
  • 关于java中出现问号乱码问题的总结
    在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。下面是关于此类问题的总结。...
    99+
    2015-10-17
    java入门 java 问号 乱码 总结
  • 关于Python的面试问答题有哪些
    这篇文章主要介绍“关于Python的面试问答题有哪些”,在日常操作中,相信很多人在关于Python的面试问答题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”关于Python的面试问答题有哪些”的疑惑有所...
    99+
    2023-06-16
  • Python面经之16个高频面试问题总结
    目录(一)Python 是如何进行内存管理的?(二)什么是 lambda 函数?它有什么好处(三)Python 里面如何实现 tuple 和 list 的转换?(四)请写出一段 Py...
    99+
    2024-04-02
  • 深入解答关于Python的11道基本面试题
    前言 本文给大家深入的解答了关于Python的11道基本面试题,通过这些面试题大家能对python进一步的了解和学习,下面话不多说,来看看详细的介绍吧。 一、单引号,双引号,三引号的区别 分别阐述3种引号...
    99+
    2022-06-04
    面试题 Python
  • Redis中一些最常见的面试问题总结
    前言 经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估计是我...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作