广告
返回顶部
首页 > 资讯 > 前端开发 > 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://www.lsjlt.com/news/12867.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 总结几道关于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+
    2022-10-18
  • Android中关于Binder常见面试问题小结
    目录1.简单介绍下binder2.Binder的定向制导,如何找到目标Binder,唤起进程或者线程3.Binder中的红黑树,为什么会有两棵binder_ref红黑树4.Binde...
    99+
    2022-11-13
  • 面试总结:秒杀设计、AQS 、synchronized相关问题
    目录1、面试官:如何设计一个秒杀系统?请你阐述流程?秒杀系统要解决的几个问题?① 高并发② 超卖③ 恶意请求④ 链接暴露如何解决上面遇到的几个问题?① 秒杀模块微服务化② 秒杀链接加...
    99+
    2022-11-12
  • JavaScript必看的10道面试题总结(推荐)
    1.this指向 1.谁调用指向谁 例: function foo(){ console.log("this",this); } n...
    99+
    2022-11-12
  • 面试官问关于Go和Linux的问题?这是你需要知道的。
    面试官问关于Go和Linux的问题?这是你需要知道。 随着互联网的发展,越来越多的企业开始采用Go语言进行开发。而Linux作为最流行的服务器操作系统,也成为了Go语言开发的首选平台。在面试中,关于Go和Linux的问题也成为了考察候选人技...
    99+
    2023-08-22
    linux 响应 面试
  • 关于Python包导入报错的问题总结
    目录错误记录总结首先,一般来说,写一个小demo可能一个文件就够了,但是要是做一个小项目,可能需要拆分成很多零散的文件,放在不同的文件夹里面调用,这个就称之为模块(包),Python...
    99+
    2023-02-17
    Python包导入 Python包导入报错 Py包导入报错
  • Linux面试中最常问的10个问题总结
    前言 如果你要去面试一个linux系统运维工程师的职位,下面这十个最常见的问题一定要会,否则你的面试可能就危险了。这些都是比较基本的问题,大家要理解,不能光死记硬背。 1、如何查看系统内核的版本 这里有两种方法: 1) ...
    99+
    2022-06-04
    linux面试问题 linux面试常问命令 面试官常问的linux命令
  • 关于java中出现问号乱码问题的总结
    在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号。这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。下面是关于此类问题的总结。...
    99+
    2015-10-17
    java入门 java 问号 乱码 总结
  • 关于MySQL自增ID的一些小问题总结
    下面这几个小问题都是基于 InnoDB 存储引擎的。 1. ID最大的记录删除后,新插入的记录ID是什么 例如当前表中有ID为1,2,3三条记录,把3删除,新插入记录的ID从哪儿开始? 答案: 从4开始。...
    99+
    2022-10-18
  • 关于Python的面试问答题有哪些
    这篇文章主要介绍“关于Python的面试问答题有哪些”,在日常操作中,相信很多人在关于Python的面试问答题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”关于Python的面试问答题有哪些”的疑惑有所...
    99+
    2023-06-16
  • 深入解答关于Python的11道基本面试题
    前言 本文给大家深入的解答了关于Python的11道基本面试题,通过这些面试题大家能对python进一步的了解和学习,下面话不多说,来看看详细的介绍吧。 一、单引号,双引号,三引号的区别 分别阐述3种引号...
    99+
    2022-06-04
    面试题 Python
  • Redis中一些最常见的面试问题总结
    前言 经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估计是我...
    99+
    2022-10-18
  • 关于springBootyml文件的list读取问题总结(亲测)
    目录springBoot yml文件的list读取问题配置如下1.定义配置类2.定义启动的配置类3.使用方式读取yml文件里的list配置YAML 支持以下几种数据类型这里只介绍li...
    99+
    2022-11-12
  • 华为C++开发工程师面试总结整理,面试问题你能答上几个?含答案
    前言:虽然全世界每个月都可能会出现新的语言,但从TIOBE世界编程语言排行榜的数据来看,从2009年到现在,C/C++一直都在前3甲中。不论历史的车轮如何滚滚向前,学好C/C++永远不会落后。面试官问的面试题:一面:先自我介绍;把自己简历上...
    99+
    2023-06-05
  • 关于vue-treeselect绑值、回显等常见问题的总结
    目录vue-treeselect绑值、回显常见问题这里以表单里的举例最主要的几点就是vue3-treeselect绑定数据有bug问题vue-treeselect绑值、回显...
    99+
    2022-11-13
  • 关于Vue ui 的没反应、报错问题解决总结
    目录Vue ui 的没反应、报错问题一、vue ui 启动出现的报错问题Vue ui无法启动项目管理器原因遇到版本低的解决方案没有ui功能的解决方法Vue ui 的没反应、...
    99+
    2022-11-13
  • 面试官会问到哪些关于 Spring 同步的问题?
    Spring 是目前最流行的开源框架之一,它提供了丰富的功能和特性,可帮助开发人员更轻松地构建高质量的应用程序。在面试中,面试官经常会问关于 Spring 同步的问题,因此本文将介绍一些常见的问题及其答案。 什么是 Spring 同步? ...
    99+
    2023-09-22
    面试 同步 spring
  • 面试官会问哪些关于Go、JavaScript和Unix的问题?
    作为一名准备找工作的程序员,你一定会面临着各种各样的技术面试。而在技术面试中,面试官们通常会问一些关于Go、JavaScript和Unix的问题。本文将会介绍一些常见的关于Go、JavaScript和Unix的面试问题,并提供相应的演示代码...
    99+
    2023-10-11
    javascript unix 面试
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作