程序员Node.js专题

Node面试整理

2018-12-27  本文已影响16人  Luciena

Node的优缺点?

优点

缺点

Koa ?

什么是RESTful架构?

什么是错误优先的回调函数?

错误优先的回调函数(Error-First Callback)用于同时返回错误和数据。第一个参数返回错误,并且验证它是否出错;其他参数用于返回数据。

fs.readFile(filePath, function(err, data) { 
  if (err) { 
    // 处理错误 
    return console.log(err);
  } 
   console.log(data); 
});

如何避免回调地狱?

如何让node监听80端口?

一次完整的HTTP请求所经历的7个步骤?

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

**建立TCP连接 **

**Web浏览器向Web服务器发送请求命令 **

**Web浏览器发送请求头信息 **

**Web服务器应答 **

**Web服务器发送应答头信息 **

**Web服务器向浏览器发送数据 **

**Web服务器关闭TCP连接 **

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive

什么是HTTP,TCP,UDP?

关系

TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有HTTP,FTP、TELNET、SMTP、DNS等协议。

HTTPS通信原理

HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道

HTTPS是HTTP over SSL/TLS,HTTP是应用层协议,TCP是传输层协议,在应用层和传输层之间,增加了一个安全套接层SSL/TLS:

(加密的是path/body)

Https的作用

HTTP(HyperText Transfer Protocal, 超文本传输协议)无状态、HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

tcp协议和udp协议的差别

差别 | TCP | UDP
---- | ----- | ----- | -----
是否连接 | 面向连接 | 面向非连接
传输可靠性 | 可靠 | 不可靠
应用场合 | 传输大量数据 | 少量数据
速度 | 慢 | 快

Node的中间件模式?

中间件 在 Node.js 中被广泛使用,它泛指一种特定的设计模式、一系列的处理单元、过滤器和处理程序。以函数的形式存在,连接在一起,形成一个异步队列,来完成对任何数据的预处理和后处理。

横向处理

灵活性:使用中间件我们用极少的操作就能得到一个插件
扩展性:用最简单的方法就能将新的过滤器和处理程序扩展到现有的系统上

Promise的用法?

状态?

方法?

async/await?

使用 async / await, 搭配 promise, 可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性.

匿名函数、闭包?

匿名函数

// 自我执行
(function (num){
    alert(num);
})(100);

闭包

//函数里放一个匿名函数---闭包
function box (){
    return function(){
        return 'Lee';
    }
}
alert(box); //function box(){return function(){return 'Lee'}}
alert(box());//function (){return 'Lee'}
alert(box()());//Lee

关于this指向

this对象是在运行时基于函数的执行环境绑定的,如果this在全局范围就是window,如果是在对象内部,就指向这个对象,而闭包却是在运行时指向window的,因而闭包不属于这个对象的属性或方法。

MongoDB的优缺点?

优点

缺点

MongoDB支持存储过程吗?如果支持的话,怎么用?

关系型数据库与非关系型数据库的区别?

条件查询符?

为什么MongoDB的数据文件很大?

当更新一个正在被迁移的块(Chunk)上的文档时会发生什么?

MongoDB在A:{B,C}上建立索引,查询A:{B,C}和A:{C,B}都会使用索引吗?

如果一个分片(Shard)停止或很慢的时候,发起一个查询会怎样?

Redis

简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis 优势

Redis与其他key-value存储有什么不同?

如何优化并发?

进程的管理工具?

pm2、supervisor、nodemon

数据库都有哪些?

什么是事件循环?

查找算法?

排序算法?

JS经典面试题?

MYSQL的事务隔离?

async/await/yield?

Mysql及Mongodb?

JS的对象,原型,继承?

消息队列的使用场景?

Promise是怎么实现的?

引擎?

数据库表的设计规范?

并行与并发?

SQL语法?

上一篇 下一篇

猜你喜欢

热点阅读