后端服务器Node基础

    • HTTP和Https有什么区别?为什么说HTTPS更安全?

HTTP:超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:安全套接字层超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer)。是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS和SSL支持使用X.509数字认证,用户可以确认发送者是谁,它的主要作用有两种:1、建立一个信息安全的通道,来保证数据传输的安全;2、确认网站的真实性。

https和http的主要区别:

一、https协议需要到ca机构申请ssl证书(如Gworg CA),另外Gworg CA还提供2年期ssl证书,高级别的ssl证书可以让地址栏展示企业名称。

二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

三、http和https使用的是完全不同的连接方式,用的端口也不一样,http是80端口,https是443端口。

四、http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

五、如果要实现HTTPS那么可以淘宝Gworg获取SSL证书。

总的来说HTTPS比HTTP更加安全,能够有效的保护网站用户的隐私信息安全.

MongoDB和MySQL有什么区别?

(1)存储方式

关系型数据库是表格式的,nosql数据库是大块的组合在一起,通常存储在数据集中,就像文档、键对值或者图结构。

(2)存储结构

Rdbms是结构化数据,一般都先预定义结构,结构描述了数据的形式和内容。

nosql数据库基于动态结构,使用与非结构化数据,很用以适应数据类型和结构变化。

(3)存储规范

rdbms是把数据切割成最小的关系表以避免重复,获得精简的空间利用,但是虽然看着清晰,但是设计多个表时,数据管理复杂。

nosql存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储更一个整体,这样整块的数据便于读写。

(4)存储扩展

rdbms是纵向扩展

nosql是横向扩展。

(5)查询方式

rdbms是通过结构化查询语言来操作数据库,功能强大,是业界标准的用法。

nosql是使用非结构化查询语言,它是没有标准的。

    • MongoDB和MySQL有什么区别?

(1)存储方式

关系型数据库是表格式的,nosql数据库是大块的组合在一起,通常存储在数据集中,就像文档、键对值或者图结构。

(2)存储结构

Rdbms是结构化数据,一般都先预定义结构,结构描述了数据的形式和内容。

nosql数据库基于动态结构,使用与非结构化数据,很用以适应数据类型和结构变化。

(3)存储规范

rdbms是把数据切割成最小的关系表以避免重复,获得精简的空间利用,但是虽然看着清晰,但是设计多个表时,数据管理复杂。

nosql存储在平面数据集中,数据经常可能会重复。单个数据库很少被分隔开,而是存储更一个整体,这样整块的数据便于读写。

(4)存储扩展

rdbms是纵向扩展

nosql是横向扩展。

(5)查询方式

rdbms是通过结构化查询语言来操作数据库,功能强大,是业界标准的用法。

nosql是使用非结构化查询语言,它是没有标准的。

    • Cookie、Session、本地存储有什么区别?应用场景有哪些?

(1)cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

(2)cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗

考虑到安全应当使用session。

(3)session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE。

(4)单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个cookie。

(5)cookie不能进行跨域处理,session存储是依赖于cookie,默认也是不能跨域的,但是session的数据是存在服务器上的,可以通过服务器来操作数据库,将session进行入库处理,既可以实现跨域

cookie

用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

只要添加了就一直存在,只要不是手动的去清除或者expires为默认的过期时间。但是安全性无法保证,而且也无法对客户的喜好进行定量的分析,有个数和长度的限制。

session

对话的时效性的问题,如果客户选购商品的途中浏览器突然关闭,服务端找不到cookie中的sessionid了,那么选购的商品就不存在了

session是实现购物车的另一种方法。session提供了可以保存和跟踪用户的状态信息的功能,使当前用户在session中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问,

它与cookie最重大的区别是,session将用户在会话期间的私有信息存储在服务器端,提高了安全性。在服务器生成session后,客户端会生成一个sessionid识别号保存在客户端,以保持和服务器的同步。

这个sessionid是只读的,如果客户端禁止cookie功能,session会通过在URL中附加参数,或隐含在表单中提交等其他方式在页面间传送。因此利用session实施对用户的管理则更为安全、有效。

    • 说说你对Node中事件回调的理解

函数作为参数传递到另一个函数中,然后被调用。

同样,在Node.js中,比如I/O操作发生的地方,经常使用回调模式。通过在回调函数中嵌套回调函数,可以控制事情的顺序(使用回调的根本出发点),比如从数据库读取数据后通过回调用另一个函数处理数据。

    • 说一下对nodejs的认识

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境

JavaScript有ECMAScript BOM DOM组成

node.js 由 ECMAScript 和 Node模块API 组成

    • 什么是域名

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的Internet上某

一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。

    • Npm 全局下载和本地下载的区别

1-安装位置

局部: 当前node项目下的node_modules目录中

全局: C:\Users\lce\AppData\Roaming\npm

2-命令不同

全局命令npm i xxx -g

局部命令 npm i xxx

3-全局安装会产生一个命令行工具

4-局部安装的包使用之前需要先进行导入

    • 什么是http协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )

服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

    • Commonjs规范是什么

1-每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。

2-在模块中使用global 定义全局变量,不需要导出,在别的文件中可以访问到。

3-每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。

4-通过 require加载模块,读取并执行一个js文件,然后返回该模块的exports对象。

5-所有代码都运行在模块作用域,不会污染全局作用域。

6-模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

7-模块加载的顺序,按照其在代码中出现的顺序

    • Express中如何配置静态资源

app.use(express.static(目录))

    • Ejs模板引擎如何进行条件渲染

ejs.renderFile() 参数一:模板路径 参数二:渲染参数 参数三:回调函数

    • 在浏览器地址栏键入URL,按下回车之后会经历以下流程

1.查找浏览器缓存:如果查找到缓存中有我们URL对应的文件,则判断是否命中强缓存,如果命中直接读取使用即可,如果强缓存没有命中,

2.DNS域名解析:将输入的URL解析成对应的IP地址

3.生成HTTP请求报文:请求报文包括起始行,首部,主体

4.TCP连接:客户端与服务端进行TCP三次握手,建立连接

5.发送HTTP请求:握手成功后,客户端向服务端发送http请求,请求数据

6.服务器收到请求并返回数据:客户端根据返回的结果进行渲染展示,同时判断是否需要将文件存入缓存

7.TCP断开连接:客户端与服务端进行TCP四次挥手,断开连接

    • 说一下GET和POST有什么区别?

①get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);

post请求一般是去提交数据。

②get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,

不同的浏览器和服务器不同,一般限制在2~8K 之间,更加常见的是 1k 以内;

post请求是没有的长度限制,请求数据是放在body中;

③get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。

④get请求可以被缓存,post请求不会被缓存。

⑤get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。

⑥get请求只能进行url编码

    • Http请求头有哪些?作用是什么?

请求头: 作用:

①Accept ①浏览器端能够处理的内容类型。

②Accept-Encoding ②浏览器能够处理的的压缩编码。通常指定压缩方法

③Accept-Language ③浏览器当前设置的语言

④Accept_Charset ④浏览器能够显示的字符集

⑤Connection ⑤浏览器与服务器的连接类型

⑥Host ⑥发送请求的页面的域名

⑦Referer ⑦发送请求的页面的URI。

⑧User-Agent ⑧浏览器的用户代理字符串。告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本。

⑨Cookie ⑨用来存储一些用户信息以便让服务器辨别用户身份的。

⑩Cache-Control ⑩指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据,还是重新发请求到服务器获取数据。

⑪If-Modified-Since ⑪把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。

⑫If-None-Match ⑫If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。

    • 说说对Nodejs中的事件循环机制理解

定义:

①JavaScript引擎本身不实现事件循环机制。浏览器中的事件循环由浏览器实现的,NodeJS中事件循环主要是由底层Libuv库实现的。

②Libuv库是事件驱动的,其封装和统一了不同平台的API实现。NodeJS的跨平台和事件循环机制都是通过Libuv库实现的。

步骤:

①NodeJS的V8引擎解析JavaScript代码,然后调用Node API

②NodeAPI将任务分配给Libuv库处理,

③Libuv中通过事件循环机制管理这些任务的执行,处理结束后将结果返回给V8引擎。

④V8引擎回调处理Libuv返回

    • 如何实现jwt鉴权机制?说说你的思路

是什么:JWT(JSON Web Token),本质就是一个字符串书写规范,如下图,作用是用来在用户和服务器之间传递安全可靠的信息

步骤:

①服务器当验证用户账号和密码正确的时候,给用户颁发一个令牌,这个令牌作为后续用户访问一些接口的凭证

②后续访问会根据这个令牌判断用户时候有权限进行访问

token组成部分:

Token,分成了三部分,头部(Header)、载荷(Payload)、签名(Signature),并以.进行拼接。其中头部和载荷都是以JSON格式存放数据,只是进行了编码

如何实现:

①生成token:登录成功的时候,颁发token

②验证token:访问某些资源或者接口时,验证token

优缺点:

优点:

①json具有通用性,所以可以跨语言

②组成简单,字节占用小,便于传输

③服务端无需保存会话信息,很容易进行水平扩展

④一处生成,多处使用,可以在分布式系统中,解决单点登录问题

⑤可防护CSRF攻击

缺点:

①payload部分仅仅是进行简单编码,所以只能用于存储逻辑必需的非敏感信息

②需要保护好加密密钥,一旦泄露后果不堪设想

③为避免token被劫持,最好使用https协议

    • 说说你是如何理解Nodejs中的事件循环?

定义:Node底层使用的语言libuv,是一个c++语言。他用来操作底层的操作系统,封装了操作系统的接口。Node的事件循环也是用libuv来写的,所以Node生命周期和浏览器的还是有区别的。

六个阶段:

timers:计时器(setTimeout、setInterval等的回调函数存放在里边)

pending callback

idle prepare

poll:轮询队列(除timers、check之外的回调存放在这里)

check:检查阶段(使用 setImmediate 的回调会直接进入这个队列)

close callbacks

13.Vue中key的作用是什么?

①key属性是用来给每个节点添加一个唯一的标识。key属性的值必须是唯一的

②key属性的作用主要是用来高校的更新虚拟DOM,从而提高vue渲染的性能的

    • 请简单叙述关系型数据和非关系型数据库的区别

关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。

NoSQL非关系型数据库,主要指那些非关系型的、分布式的,且一般不保证ACID的数据存储系统,主要代表MongoDB,Redis、CouchDB。

区别:

存储上

Sql通常以数据库表的形式存储,

NoSql采用key-value的形式存储

数据表VS 数据集

关系型是表格型的,存储在数据表的行和列中。彼此关联,容易提取。而非关系型是大块存储在一起。

关系型和非关系型数据库的主要差异是数据存储的方式。

关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。

    • 简述jwt相比于传统token的优势

无需服务器端存放数据,减轻服务器端的压力

占用带宽比较小、跨语言

token自身包含用户信息且无法篡改,在服务(网关)中可以自行解析校验出用户信息,对认证服务器(account-svc)压力小

    • 什么是Http协议?端口号的作用是什么?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

一个HTTP请求由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成

请求行:请求方式 请求协议

请求头:是客户端发送给服务器端的一些信息cookie或session等

请求数据:post请求时发送的一些数据

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT

http响应的结果由 相应行、响应头、空行、响应体四个部分组成

响应行:协议状态码信息 状态码:1xx ---- 5xx

响应头: cookie信息的写入、响应的地址、文件类型等

响应体: 响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染,显示页面内容

端口号的作用是用来区分和管理不同端口的,通过端口号能找到唯一个的一个端口。

    • Http的状态码有哪些?作用是什么?

1开头:表示请求已被接受,需要继续处理

2开头:表示请求成功

3开头:表示请求被重定向

4开头:表示客户端错误

5开头:表示服务器错误

    • CommonJS的规范是什么?

JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器。然而, JavaScript 标准定义的 API 是为了构建基于浏览器的应用程序。并没有制定一个用于更广泛的应用程序 的标准库。CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷。

它的终极目标就是:提供一个类似Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序 的阶段。

用CommonJS API 编写出的应用,不仅可以利用 JavaScript 开发客户端应用,而且 还可以编写以下应用。

•服务器端 JavaScript 应用程序。(nodejs) •命令行工具。 •桌面图形界面应用程序。

CommonJS 就是模块化的标准(规范),nodejs 就是 CommonJS(模块化)的实现。

    • 说说你对前后端分离开发模式的理解?有什么优势?

后端仅返回前端所需要的数据,前端通过ajax访问后端给前端提供的接口 后端不再渲染html页面,也不再控制前端的效果

优势:

(1)彻底解放前端。前端不再需要向后台提供模板或是后台在前端HTML中嵌入后台代码。

(2)提高工作效率,分工更加明确。

(3)局部性能提升。通过前端路由的配置,我们可以实现页面的按需加载,无需一开始加载首页便加载网站的所有的资源,服务器也不再需要解析前端页面,在页面交互及用户体验上有所提升。

(4)降低维护成本。

    • 从浏览器中输入url地址,到页面显示中间的流程是什么?

大体流程:

(1)浏览器构建HTTP Request请求

  (2)网络传输

  (3)服务器构建HTTP Response 响应

  (4)网络传输

  (5)浏览器渲染页面

详细流程:

(1)输入url地址

(2)应用层进行DNS解析

(3)应用层生成HTTP请求报文

(4)传输层建立TCP连接

(5)网络层使用IP协议来选择路线

(6)数据链路层实现网络相邻节点间可靠的数据通信

(7)物理层传输数据

(8)服务器处理反向传输

(9)服务器返回一个 HTTP 响应

(10)浏览器渲染

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值