1.什么是NodeJS,NodeJS有哪些特点
NodeJS是一个基于Chrome V8引擎的JavaScript运行时环境
JavaScript运行时环境:可以脱离了浏览器环境,直接运行js代码
基于Chrome V8 引擎:解释执行js代码的效率非常高
非阻塞IO:NodeJS环境中提供了同步和异步的文件IO处理
2.使用NodeJS的文件模块,使用同步的方式创建文件并向文件中写入文本数据
const fs = require('fs')
const fd = fs.openSync(__dirname+'/index.html','w')
fs.writeSync(fd,'内容')
fs.closeSync(fd)
fs.writeFileSync(__dirname + '/index.html', '内容')
3.使用NodeJs的文件模块,使用同步的方式从文件中读取内容并展示到页面中
const fs = require('fs')
const fd = fs.openSync(__dirname + '/index.html')
const content = fs.readSync(fd, 'utf-8')
fs.closeSync(fd)
const content = fs.readFileSync(__dirname + '/index.html', 'utf-8')
4.简述NodeJS的文件模块,同步操作函数和异步操作函数的优缺点
同步函数的特点,编写的代码,从上到下按照编写顺序依次执行,上一行代码没有执行完成的情况下,下一行代码处于阻塞、等待状态
优点:如果编写的代码,后面的代码需要依赖前面代码的执行结果,此时同步方式更加符合开发习惯
缺点:在一些代码互相没有依赖的情况下,同步执行的代码比较消耗时间
异步函数的特点,编写代码从上到下的顺序,但是执行过程中下一行代码不会等待上一行代码执行完成后采取执行,而是上一行代码开始执行,下一行代码紧接着直接执行
优点:如果编写的代码,后面的代码和前面的代码如果没有依赖关系,异步执行的方式更加节省时间,在效率上有很大的提升
缺点:在一些代码互相有依赖的情况下, 编写方式只能通过回调函数的方式执行,否则直接按照顺序方式编写的代码执行会出现问题
5.NodeJS如何初始化项目应用
NodeJS为了方便前端/后端项目的独立管理,通过node init命令初始化一个项目文件夹为NodeJS应用,初始化完成后会在文件夹中生成标志性配置文件package.json,文件中存储了当前项目的初始配置
6.简述package.json配置文件中都有哪些常见配置项
package.json配置文件是NodeJS应用标志性配置文件,包含了
name :项目名称
author:项目作者
version:项目版本
scripts:项目脚本命令
dependencied:项目第三方依赖
main:项目入口文件
7.NodeJS中如何添加第三方模块
一般情况下会用node init命令初始化一个Node应用,然后在应用中通过npm命令安装第三方模块
npm install <模块名称> -g
或 npm install <模块名称> -S
8.npm命令安装模块,添加-g选项和-S选项有什么区别
-g选项表示全局安装,安装的模块在当前计算机中的任何NodeJS应用中都可以访问
-S选项表示局部安装/项目安装,安装的模块只在当前项目中使用,项目开发中除了通过模块之外建议使用项目安装的方式
9.什么是模块化,什么是模块化开发
模块化就是将项目中不同的功能拆分成多个独立的模块,通过模块之间的互相组合完成一定功能的操作过程
模块化开发就是完成模块化拆分和最后的模块化合并的开发模式
10.module.exports和exports有什么区别
NodeJS模块化开发时,遵循CommonJS规范的情况下导出模块使用的对象
module式NodeJS给js模块提供的一个内置对象,一般指代当前js文件/模块
module对象中包含了一个对象exports用于导出数据,同时NodeJS为了方便数据导出操作,通过引用赋值的方式将module.exports赋值给exports,可以使用exports导出数据,具体使用时需要注意模块实际导出数据使用的依然是module.exports,所以在这两个关键词混合操作时注意导出数据的有效性问题
11.http模块如何创建并启动一个web服务
const http = require('http')
const server = http.createServer((req,res)=>{
//接收并处理用户请求
})
server.listen(3000,'0.0.0.0',err=>{
err ? console.log(err) : console.log('服务器正常启动)
})
12.什么是IP地址,什么是端口,什么是网络协议,你都知道哪些常见的网络协议
IP地址:全程Internet Protocol,网际互联协议,主要用于规范和描述在互联网上给你的计算机之间的网络连接;具体体现在使用固定的规则表示互联上的唯一计算机
IP地址主要使用版本使用二进制表示表示的IPv4和使用十六进制表示的IPv6,现阶段主流IP地址主要是IPv4,IPv6地址已经开始部署使用,但是软件开发时依然没有作为主要的参考地址
端口:全称port,数据通信端口,描述了一台计算机上可以安装很多软件,每个软件连接网络的时候都需要数据通信,端口的出现就是为了保证每个软件都可以独立的进行网络数据通信
网络协议:全程protocol,网络数据通信协议,描述了工作在网络上的多台计算机进行数据正确的共享的格式和规则
常见的网络协议:
ftp:file transfer protocol 文件传输协议
http : hyper text transfer protocol 超文本传输协议
https: hyper text transfer protocol security 安全的超文本传输协议
smtp:simple mail transfer protocol 简单邮件传输协议
ssh:security shell 安全外壳协议,也成为安全隧道协议
TCP:Transfer Control Protocol 传输控制协议
13.简述一个请求从发起到看到了浏览器页面的过程中都发生了什么事
浏览器输入URL地址发起请求后
-工作在网络上的DNS域名解析服务器接收到的域名,解析出域名对应的IP地址
-请求继续向具体的IP地址发送,由网络上IP地址对应的服务器主机接收到请求
-服务器主机根据请求端口,找到服务器主机上端口对应的WEB服务器
-WEB服务器根据请求路径,交给对应的业务模块进行对应的业务处理,包装处理结果
-处理结果包装成响应数据,返回给客户端
-客户端浏览器解析响应数据,渲染展示对应的页面
14.简述HTTP和HTTPS协议的联系和区别
HTTP协议和HTTPS协议,都是超文本传输协议,HTTPS提供了安全数据通道,让工作在网络上的超文本数据在传输的时候具备了保密功能,保障了数据的安全传输
15.什么是同步,什么是异步,项目中你是怎么使用的
同步是多个任务按照顺序执行,前面的任务执行完成后才能开始执行下一个任务
异步是多个任务按照执行顺序同时调用执行,前面的任务执行是否完成不影响下一个任务的执行过程
项目开发中如果上一个执行任务的结果,对下一个任务有影响,需要按照同步的方式进行处理,如读取HTML文件内容响应给用户的操作
项目开发中如果上一个执行任务的结果,对下一个任务没有影响,可以通过异步的方式进行处理,如Node http模块中监听请求和启动服务就可以执行异步处理
16.npm 命令的作用是什么?都有哪些常见的操作命令
npm命令主要用于管理NodeJS环境中的第三方模块
npm instal 安装依赖
npm config 用于配置信息
npm uninstall 卸载依赖
17.JavaScript、NodeJS和Express有什么区别和联系
Javascript是一个编程语言
NodeJS是一个Javascript运行时环境
Express是一个基于NodeJS的WEB应用开发框架
18.什么是路由
路由是WEB应用开发中的一个组件,用于接收用户请求并分发到不同的业务函数进行处理的过程,路由主要包含请求地址和处理函数映射关系
19.简述GET请求和POST请求的联系个区别
GET请求和POST请求都是HTTP1.1规范中的请求方式
GET请求主要描述向服务器获取数据的请求,可以附带参数,参数会出现在URL地址的最后面?符号的后面,以明文的形式进行传递,参数只能传递字符串
POST请求主要描述向服务器请求新增数据,可以附带参数,参数包含在请求体中不会显示在可视界面上,参数可以是任意类型的数据
20.Express中如何处理静态资源的
Express中通过内置中间件处理静态资源
app.use(express.static("静态文件存放文件夹名称"))
21.GET请求的参数有什么特点,Express中怎么接收的
GET请求主要是浏览器中的地址栏、超链接、<link>、<script src="">
发起的请求,可以在发送请求时附带字符串参数,参数会展示在浏览器地址上
22.POST请求的参数有什么特点,Exprss中怎么接收的
POST请求通过表单设置method="POST"进行发送的,请求中可以附带参数,参数可以是任意类型的数据
Express中首先设置中间件(内置中间件、或者第三方中间件)
app.use(express.urlencoded({extended:false})
app.use(express.json())
Express中通过请求对象request接收POST参数:request.body
23.REST请求的参数有什么特点,Express中怎么接收的
REST请求是近些年前后端分离开发出现后,出现的一种新的请求模式,可以发送GET/POST/PUT/DELETE等任意方式的请求完成数据的增删改拆,请求发送的过程中可以附带参数,参数包含在URL路径中
Express中通过请求对象request接受REST风格的参数:request.params
24.Express中怎么给客户端返回数据的,如何返回不同类型的数据
Express中通过响应对象response给客户端返回数据
response.send(str | obj)可以响应字符串数据或者其他对象数据
response.sendFile(file)可以响应具体文件数据
25.简述常见的NodeJS模块
NodeJS是一个JavaScript运行时环境,提供了大量的操作模块
path: 用于操作文件路径的内置模块
url:用于操作URL网址的内置模块
fs: 用于操作文件系统的内置模块
http:用于操作网络服务的内置模块
querystring: 用于处理查询字符串的内置模块
express: 用于开发WEB应用的第三方模块/框架
body-parser:用于处理POST参数的第三方模块
tirm: 用于处理字符串空格的第三方模块
qs:用于处理查询字符串的第三方模块
26.如何通过NodeJS开发一个服务端应用
使用nodejs的http内建模块开发
const http = require('http')
const server = http.createServer()
server.listen(3000,err=>{
console.log('服务启动了')
})
27.如何使用Express开发一个服务端模块化应用
Express是一个基于NodeJS实现的web应用开发框架,通过自己的路由机制完成模块化开发,根据功能或者角色或者其他依据,将模块进行拆分,最后在app.js入口模块中进行统一的注册引入
子模块:
const express = require('express')
const router = express.Router()
//定义子模块路由
routerr.get(路径,处理函数)
module.express = router
app.js主模块
const express = require('express')
const 子模块 = require('./routes/子模块')
const app = express()
app.use(前缀路径,子模块)
app.listen(端口 ,err=>处理函数)
28.如何理解普通文件夹、Git管理的项目、NodeJS应用项目、Express web项目
普通文件夹,可以作为项目的基本文件夹存在,保存项目中所有的文件内容
git管理的项目,可以将普通文件夹通过git init命令初始化为git管理的项目,普通文件夹就支持git版本管理功能
NodeJS应用,进行前端/服务端应用开发时为了更好的管理第三方依赖,可以通过npm init命令将普通文件夹初始化为nodejs应用,更方便的进行项目的开发和维护
Express web应用,进行服务端应用开发时创建的NodeJS应用
29.Npm如何安装配置全局模块、如何安装配置局部模块,它们有什么区别
安装全局模块: npm install 模块名称 -g
安装局部模块: npm install 模块名称 -S
全局安装的模块在当前计算机中所有的node项目中都可以使用
局部安装的模块只能在当前项目中使用
30.npm是如何管理全局和局部依赖的,有什么其他的替代的方案吗
npm 是一个nodejs包管理器
全局依赖:npm在安装全局依赖时,将依赖的模块文件下载到计算机node应用指定的全局文件夹中,提供给当前计算机中所有项目使用
局部依赖:npm在安装局部依赖时,将依赖的模块下载到当前项目中的node_modues/文件中,提供给当前项目使用
npm管理依赖的方式已经非常完善了,在新的项目模块管理中,除了使用npm意外,还可以使用cnpm、pm2、yarn,yum...
31.如何创建并启动一个Express服务应用
const express = require('express')
const app = express()
app.listen(3000,err=>{console.log('服务已经启动')})
32.什么是路由?Express中是如何管理路由的
路由是WEB服务器中,对用户的请求进行分发,交给对应的业务处理函数进行业务受理的一种操作模式
Express中包含了入口模块中的路由express(),以及模块化拆分后的子路由对象express.Router(),创建的子路由对象使用固定语法user()函数完成子路由注册和使用
33.什么是中间件,Express中有哪些不同的中间件
中间件是工作在客户端和服务器之间的中间组件,主要用于拦截请求和响应,对请求和响应进行功能扩展的中间组件
Express中主要包含三种中间件,分别是内置中间件、第三方中间件以及自定义中间件
34.常见的网络协议都有哪些,常见的网络端口都有哪些
常见的网络协议HTTP超文本传输协议、HTTPS提供安全数据通道的超文本传输协议、FTP文件传输协议、SMTP简单邮件协议、SSH安全外壳协议/隧道协议、TCP传输控制协议、UDP广播协议、IP数据包协议...
常见的网络端口HTTP协议使用的80端口、HTTPS协议使用的443端口、FTP协议使用的20/21端口、SSH协议使用的22端口,SMTP协议使用的25端口、mysql数据库使用的3306端口...
35.GET 请求和POST请求的联系和区别
GET请求和POST请求都是HTTP1.1规范的请求格式
GET请求用于向服务器请求获取数据,请求中可以附带参数,参数类型只能是字符串数据,并且参数在传输的时候会展示是在URL地址中不利于数据安全,参数的长度受到限制
POST请求用于向服务器请求新增数据,请求中可以附带参数,参数类型可以是任意类型的数据,参数会包含在请求体(request body)中进行传递,具有一定的数据保密性
36.什么是session,什么是cookie,它们有什么联系和区别
session标识客户端和服务器之间的会话
cookie表示客户端存储的临时数据
WEB应用开发中会话跟踪技术或者状态保持技术中可以使用session完成会话跟踪,通过cookie记录在客户端的数据完成状态保持,session和cookie都会一起使用
session是存储在服务端的,可以存储任意类型的数据,需要注意的是没有必要的情况下尽量不要在session中存储大量数据,导致服务器存储空间出现问题
cookie是存储在客户端的,只能字符串类型的数据,需要注意的是不同 的浏览器对于存储的cookie数据大小也是有限制的,一般数据量不要求超过4k字节的数据
37.为什么说HTTP协议是一种无状态协议,项目中怎么解决这种无状态问题的呢
HTTP协议模式下,浏览器访问服务器数据,一旦数据成功响应,客户端和服务器之间的连接就会断开,保持连接的状态也就断开,所以说HTTP协议是一种无状态协议
项目中通过会话跟踪技术,通过session和cookie的使用解决无状态数据保持
38.项目中某些路径需要登录才能访问,Express中怎么解决未登录用户限制访问的问题
用户的登录主要通过状态保持技术实现,所以可以在需要登录的路由中进行登录判断,未登录用户限制访问即可,但是这样的操作不利于大量限制函数
Express中可以通过自定义中间件,拦截所有的请求,在所有业务请求处理之前进行登录身份验证,未登录的情况下限制访问跳转到登录页面
//1.express中的中间件工作顺序
app.use(express.static('public'))
//2.自定义中间件(所有请求之前执行)
app.use((req,res,next)=>{
.....
next()
})
//3.执行请求处理,路由
app.use('/path',module)
//4.错误中间件:自定义中间件
app.use((req,res,next)=>{
res.status(404)
.....
})
39.什么是NodeJS,谈谈你对NodeJS的认识
NodeJS是一个JavaScript运行时环境,支持了JavaScript服务端应用开发场景,NodeJS本身具有单线程、事件驱动、Chrome V8引擎、JavaScript运行时等特点,NodeJS和其他的后端语言环境相比较,技术发展更迅速,版本迭代更快,所以一般要求稳定性较高的后端项目开发很少会直接选择NodeJS进行开发,但是NodeJS本身具备的特性一方面可以支持后端开发,以后随着新特性的添加发展会更好,另一方面NodeJS对于前端开发框架的支持非常友好
40为什么说NodeJS是事件驱动的,底层实现逻辑是什么样的
NodeJS底层是单线程运行机制,常规情况下每次都只能服务一个请求,操作效率就会非常低下,为了提高请求处理效率,让NodeJS应用可以同时服务多个请求,提供了自己的事件驱动机制,在单线程接收到请求之后直接分发给后端处理函数进行处理,在处理过程中就可以将请求临时挂起,继续处理后续的请求,可以在相同的时间段处理更多的请求,被处理的请求处理完成后通过事件通知单线程找回请求并且及逆行响应,所以NodeJS是单线程工作机制、同时包含了事件驱动的工作方式高效率的处理并发请求,底层是通过EmitEvent对象实现时间创建和触发工作的
41.在项目中你都用过哪些Node相关的模块,简单描述一下它们的含义
fs 文件操作模块
http web 服务模块
path 路径处理模块
url 地址处理模块
trim 空格处理模块
querystring 查询字符串处理模块
express web应用开发框架
qs 查询字符串处理模块
express-session 会话管理里模块
parse-cookie cookie数据管理模块
svg-captcha验证码模块
serve-favicon 服务器LOGO模块
42.Express中都用过哪些中间件
中间件一般包含内置中间件、第三方中间件和自定义中间件
内置中间件如静态文件处理、POST参数处理中间件等等
第三方中间件如POST参数、session会话管理、cookie数据管理、formidable文件上传、svg-captcha验证码等等
自定义中间件一般用在拦截所有请求之前或者所有请求之后,所有请求之前自定义权限验证、请求参数验证等中间件,请求之后一般会设置共同响应、错误中间件
43.什么是路由,项目中你是怎么实现路由的
路由描述是项目中用户的请求以及分发处理的中间件
NodJS基本应用中可以通过选择结构实现基本路由操作,Express项目中通过构建的独立对象app或者router实现了路由分配
44.web应用一般都是多个用户同时访问的,项目中是如何解决多个用户使用的数据互相独立问题的
Web应用开发过程中,主要工作在服务器上,服务器和WEB应用会提供各种多用户管理模式。如多进程模式、多线程模式、单线程事件驱动模式等等
前端使用的NodeJS应用中,主要是单线程事件驱动模式实现多用户并发,多个用户的数据通过每个请求所属的session会话进行管理,每个用户的session都是独立的一个数据空间,和其他用户的session不会冲突
45.什么是数据库
数据库是软件结构中存储数据的仓库组件,主要提供数据持久化存储和操作的服务
46.MySQL中怎么创建和删除数据库
可以通过界面软件操作,图形化界面中创建和删除数据库
也可以通过sql语句的方式创建和删除数据库
创建数据库
create database 数据库名称 default charset ‘utf8’
删除数据库
drop database 数据库名称
47.MySQL中怎么创建和删除数据表
可以使用图形化界面的方式创建和删除数据表
也可以使用sql语句创建和删除数据表
创建数据表
create table 数据表名称()
删除数据表
drop table 数据表名称
48.假设MySQL中已经存在用户表user
id | username | password | nickname | phone |
---|---|---|---|---|
1 | zhangsan | sdaho | 张三 | 12345678910 |
2 | lisi | shdah | 李四 | 12345689709 |
使用sql语句完成下面的业务操作
1,注册用户时,判断账号是否已经存在
select * from user where username = '要注册的账号'
2.会员zhangsan登录时,同时允许使用账号或者手机号和密码登录系统
select * from user where (username = 'zhangsan' or phone='12345678910') and password = 'sdaho'
3.lisi更新用户资料时,更新自己新的昵称 --莉丝
update user set nickname = '莉丝' where uername = 'lisi'
4.用户zhangsan查看自己的资料绑定新的手机号码13523452345
updata user set phone = '13523452345' where usernmae = 'zhangsan'
5.用户lisi要销毁自己的资料,如何注销自己的用户信息
delete from user where username = 'lisi'
49.简述GET请求和POST请求的异同
GET请求和POST请求都属于HTTP1.1规范中的请求方式,用户客户端向服务器发起请求完成数据处理
GET请求主要通过浏览器URL地址、超链接、link标签href属性、script标签src属性以及img的src属性等发起,请求中可以附带字符串类型的参数数据,参数以key=value的形式拼接在url地址后面,主要用于向服务器请求获取数据
POST请求主要通过表单或者Ajax进行发送,请求中以附带任意类型的参数数据,参数包含在请求体中进行发送,具有一定的保密性,主要用于向服务器提交数据
50.一个HTTP请求从发送到浏览器渲染展示期间都发生了什么事
从HTTP请求发送到浏览器渲染展示页面,是一个完整的请求过程
首先请求发送之后,会被DNS进行解析得到域名对应的IP地址
通过IP地址查询到服务器,向服务器发送具体请求,请求具体资源数据
服务器根据请求路径完成业务处理,将返回的数据包装到响应对象中
响应对象返回给浏览器进行解析,渲染展示给用户
51.简述你都用过哪些NodeJS模块
NodeJS是一个JavaScript运行时环境,包含了大量的具有独立功能的模块
path用于文件路径处理
fs 用户文件系统内容读写
qs 用于查询字符串解析
querystring 用于查询字符串解析
trim 用于字符串空格剔除
http 用于web服务支持
express用于web应用开发
svg-captcha 用于验证码操作
serve-favicon用于服务LOGO处理
formidable用于文件上传操作
express-session 用于会话管理
cookie-parser用于cookie数据操作
md5 用于数据单向加密
52.什么是中间件,NodeJS中你都用过哪些类型的中间件
中间件是工作在请求和响应之间的中间组件,主要用于请求和响应的增强
应用级中间件:路由函数,拦截请求,使用对应的函数进行数据处理
内置中间件:静态文件处理、POST参数处理
第三方中间件:session会话管理
前置中间件:自定义中间件,主要用于在所有路由函数之前进行请求/响应的处理
错误中间件:自定义中间件,主要用于所有路由函数之后进行错误消息处理
53.普通请求和Ajax请求的区别
普通请求,客户端向服务器发送请求,如果服务器返回需要渲染的数据会出现页面整体刷新
Ajax请求,客户端在发送某个事件时后台发送请求,获取服务器返回数据后可以执行页面中的数据局部刷新
54.什么是跨域,简述都有哪些跨域的实现方式
跨域是客户端和服务器不在同一个协议/域名/端口的情况下,进行数据请求的操作过程,一般情况下由于同源策略的存在,服务器数据不允许跨域访问
由于数据共享的需求,需要部分需求中支持跨域数据请求,跨域的实现方式主要有如下几种:
CORS跨域:服务器端的跨域,服务器一侧通过设置请求头让数据接口支持跨域
JSONP跨域,客户端的跨域,本质上通过script标签的src属性的特性进行跨域
websoket跨域,本质上就是客户端和服务器之间的长连接,支持跨域的请求
其他的跨域,可以通过iframe标签的特性,完成跨域的操作,或者通过中间件跨域的方式完成跨域请求,如跨域中间件cors,如nginx代理跨域等
55.说一下jsonp跨域的原理,jQuery中怎么实现jsopn跨域的
jsonp跨域底层是通过sscript的src属性,实现跨域请求的是数据获取,获取的数据会通过请求后的回调函数进行获取和解析处理
jQuer中封装了了jsonp的跨域请求,可以直接通过data'Type选项指定jsonp跨域
$.ajax({
url:xxx,
type:'get',
data:{参数},
dataType: 'jsonp',
success:function(res) {...}
})
56.什么是代码的review操作?一般由谁进行代码的review?怎么进行review?
代码的review操作,主要包含代码评审工作和代码复盘工作
一般都是由小组组长或者带自己的同事主导执行的,平时开发项目过程中自己也可以执行代码的单元review操作
review的操作区分为通过软件工具的自动执行操作和人工操作的两部分,软件工具的自动化操作主要是通用性审核,人工操作部分主要是项目定制化规范和流程审核以及代码复盘
57.Promise有几种状态,什么时候会执行catch代码块
Promise执行过程中有三种状态,分别是pending、fulfilled、rejected状态,当出现rejected状态时就会执行catch代码块
58什么是错误优先的回调函数,为什么要做错误优先的处理
操作的回调函数包含很多参数,第一个参数是错误信息的回调函数
所有函数的执行,不论是正确结果还是错误结果,都是函数的返回结果,错误优先的处理能让函数中的执行流程第一时间处理错误信息,优化执行流程提高执行效率
59.为什么团队开发需要保障一致的编码风格,哪些工具可以实现该功能
提高代码风格的统一性,便于多人协同开发和后期维护
一般情况下代码质量检查工具都可以实现该功能,如前端开发中经常会遇到一些代码质量检查插件的操作,如JSLint、
ESLinst等
60.什么是stub,什么时候使用stub
stub模式,主要适用于代码测试环境中的依赖模拟操作
开发人员进行单元测试或者测试人员进行集成测试时,如果需要频繁依赖其他的运行环境或者运行依赖,但是不能确保这些运行环境和运行依赖已经准备充分的情况下,可以使用stub方式进行环境和依赖的模拟,达到测试解耦合的目的
如单元测试文件读写方式,但是为了保障目标文件不被数据污染,不能真实的发生文件读写操作,此时就可以借助stub方式模拟文件读写操作完成代码的测试工作
61.为什么说HTTP协议是无状态协议,无状态协议的优缺点是什么,如何解决这样的无状态问题
HTTP协议在进行客户端和服务端的访问过程中,每次执行的请求一旦得到响应数据,客户端和服务端之间的连接就会断开,所以连接状态无法保持,所以将HTTP协议称为无状态协议,HTTP无状态协议的优点是连接得到响应后直接断开,服务端可以使用这个断开的空闲连接去接入其他的客户端,在一定程度上服务器可以接入更多的客户端连接;缺点是连接状态无法保持就会导致每次连接都需要进行状态身份验证,更多的消耗了资源,要解决无状态的操作方式有很多种,可以通过会话跟踪的方式进行状态保持
62.什么是Websocket协议,它的主要应用场景是什么
websocket协议是一种基于TCP协议的保持长连接的数据交互协议
主要用于客户端和服务端需要进行双向消息推送的场景,如客服应用、消息推送等