Ajax和Node

众所周知,前端开发总是离不开Ajax和Node的,因此,这些知识必须掌握。

Featured image

1、http和https的区别

答:
  1.https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
  2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
  3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4.http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2、get 和post的区别

答: get
			1. 在url后面拼接参数,只能以文本的形式传递数据
			2. 传递的数据量小,4KB左右
			3. 安全性低, 会将数据显示在地址栏
			4. 速度快,通常用于安全性要求不高的请求
			5. 会缓存数据
	post
		    1. 安全性比较高
			2. 传递数据量大,请求对数据长度没有要求
			3. 请求不会被缓存,也不会保留在浏览器历史记录里

3、项目中遇到的状态码有哪些

答: 200  请求成功,  2开头的异步表示请求成功
		304  请求被允许,但请求内容没有改变, 3开头的一般请求完成
		400  请求格式错误,  4开头的一般表示请求错误
		404  请求的资源(网页)不存在,  
		500  内部服务器错误,  5开头的一般都是指服务器错误

4、jsonp的原理?以及优缺点

答: 原理: 利用script标签的src属性具有天然可跨域的特性,由服务端返回一个预先定义好的Javascript函数的调用,并且将服务器数据以该函数参数的形式响应给浏览器.
		优点: 完美解决在测试或者开发中获取不同域下的数据,用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
		缺点:Jsonp只支持get请求而不支持post 请求,也即是说如果想传给后台一个json 格式的数据,此时问题就来了, 浏览器会报一个http状态码41错误,告诉你请求格式不正确.

5、什么是同源策略?怎么解决跨域问题

答: 同源策略: 同源策略是浏览器的一种安全策略, 所谓同源是指域名、协议、端口完全相同,不同源则跨域。
   解决跨域的方法: 
			1. 通过jsonp跨域
			2. 跨域资源共享(CORS  Access-Control-Allow-Origin: http://api.bob.com)
			3. nginx代理跨域

6、页面通信的方式有哪些

答: 1. 通过url拼接地址
	2. H5本地存储

7、你对WebSocket了解哪些

答: WebSocket 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是:
	1. WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/Client Agent都能主动的向对方发送或接收数据,就像Socket一样;
	2. WebSocket需要类似TCP的客户端和服务器端通过握手连接连接成功后才能相互通信。

8、如何清除浏览器的缓存

答: 当我们请求的地址相同的时候,浏览器为了提高性能,会把相同地址的数据进行缓存。如果服务端的数据发生改变,客户端也不会更新,那就需要清除缓存
    解决:在url后面加时间戳
    例如:https://www.baidu.com?time=New Date()

9、token的作用是什么

答: token是服务端生成的“令牌”,来标识不同身份的
    1. 防止表单重复提交
    2.判断用户是否登录

10、列举echarts常用的配置项,说明含义

答:      图表标题 title
		图例  legend
		值域 dataRange
		提示框 tooltip
		区域缩放控制器 dataZoom
		网格 grid
		类目轴 categoryAxis
		值型坐标轴默认参数 valueAxis
		柱形图默认参数 bar
		折线图默认参数 line
		散点图默认参数 scatter
		饼图默认参数 pie
		默认标志图形类型列表 symbolList
		可计算特性配置, 孤岛, 提示颜色 calculable

11、git如何管理一个项目和git如何解决合并冲突

1、git管理项目流程
答: 1、git init初始化git仓库(新项目才有这一步)
    2、git clone将远程仓库的项目资料下载下来
    3、git checkout -b dev (dev 为本地分支名)
    4、git add .将工作区文件存在暂存区
    4、git commit -m  ""从暂存区存到仓储区
    5、git checkout master切到master分支
    6、git merge dev 合并分支,合并后要将分支删除
    7、使用git push将其上传到远程仓库
    8、第二上班,先pull一下,更新最新代码
    
2、git解决合并冲突
答:冲突的原因:代码提交的时候,在当前行有新的代码要加入,就会出现冲突。例如:20行已经有代码了,但是合并的的代码20行也是有代码,这样就会出现冲突。
	解决办法:如果是双方的代码是不同的业务,那就保留双方双方更改(vscode有提示)。如果是重复的业务逻辑,那就选择采用当前更改(vscode有提示)。

12、介绍一下你们公司的开发流程(自己理解,形成自己的东西)

答: (这是最基础的流程,自己理解,形成自己的东西)
    1、项目确定下来后
    2、先分配确定开发人员,然后产品会召集相关开发人员一起开一个项目分析会
    3、接着就项目立项了,项目立项会形成一个prd,确定开发周期
    4、然后就进入开发阶段了,在开发一段时间会进行前后端联调
    5、功能完成后会先进行冒烟测试,检查是否有阻塞缺陷
    6、开发全部结束就进入测试阶段
    7、测试通过就可以上线了,上线之后会有一个回归测试,检查有没有影响以前的功能,保证全流程没有问题

13、在地址栏输入网址,到数据返回的过程是什么?

:  1. 输入url地址后首先进行DNS解析将相应的域名解析为IP地址
     2. 根据IP地址去寻找相应的服务器
     3. 与服务器进行TCP的三次握手建立连接
     4. 客户端发送请求找到相应的资源库
     5. 客户端拿到数据进行相应的渲染

14、原生 ajax 请求的步骤

1.创建异步对象 var xhr = new XMLHttpRequest()
    2.设置请求行  xhr.open()
    3.设置请求头  xhr.setRequestHeader()   get请求没有请求头
    4.设置请求体  xhr.send      get请求没有请求体,参数为null
    5.监视异步对象的状态变化   xhr.onreadystatechange(){}

15、什么是promise,特点是什么

	首先它是一个对象也就是说与其他JavaScript对象的用法没有什么两样它使得异步操作具备同步操作的效果使得程序具备正常的同步运行的流程回调函数不必再一层层嵌套
	简单说它的思想是每一个异步任务立刻返回一个Promise对象由于是立刻返回所以可以采用同步操作的流程这个Promises对象有一个then方法允许指定回调函数在异步任务完成后调用
    
 特点
    1Promise对象只有三种状态
        异步操作未完成”(pending
        异步操作已完成”(resolved又称fulfilled
        异步操作失败”(rejected
        异步操作成功Promise对象传回一个值状态变为resolved
        异步操作失败Promise对象抛出一个错误状态变为rejected
    2promise的回调是同步的then是异步的
    3可以链式调用

16、promise的方法有哪些,能说明其作用

原型上的方法
1Promise.prototype.then()
	1作用是为 Promise 实例添加状态改变时的回调函数接受两个回调函数作为参数第一个回调函数是Promise对象的状态变为resolved时调用第二个回调函数是Promise对象的状态变为rejected时调用其中第二个函数是可选的不一定要提供
    2返回的是另一个Promise对象后面还可以接着调用then方法
2Promise.prototype.catch()
	1用于指定发生错误时的回调函数
    2返回的也是一个 Promise 对象因此还可以接着调用then方法
3Promise.prototype.finally()
	1finally方法用于指定不管 Promise 对象最后状态如何都会执行的回调函数
    2finally方法的回调函数不接受任何参数这意味着没有办法知道前面的 Promise 状态到底是fulfilled还是rejected

自身API:
1Promise.resolve()
	1不带参数传递  返回一个新的状态为resolve的promise对象
    2参数是一个 Promise 实例 返回 当前的promise实例
2Promise.reject()
	1)返回的是一个值
    2返回的值会传递到下一个then的resolve方法参数中
3Promise.all() 
	1并行执行异步操作的能力
    2所有异步操作执行完后才执行回调
4Promise.race()
	1那个结果返回来的快就是那个结果不管结果是成功还是失败

17、async和await是干什么的

1async 用于申明一个 function 是异步的 await 用于等待一个异步方法执行完成
2await 只能出现在 async 函数中
3async 函数返回的是一个 Promise 对象后面可以用then方法

18、怎么理解三次握手

字段	      含义
URG	   紧急指针是否有效为1表示某一位需要被优先处理
ACK	   确认号是否有效一般置为1
PSH	   提示接收端应用程序立即从TCP缓冲区把数据读走
RST	   对方要求重新建立连接复位
SYN	   请求建立连接并在其序列号的字段进行序列号的初始值设定建立连接设置为1
FIN    希望断开连接

1三次握手
    第一次握手建立连接时客户端发送syn包到服务器等待服务器确认
    第二次握手服务器收到syn包必须确认客户的SYN同时自己也发送一个SYN包syn=y到客户端
    第三次握手客户端收到服务器的SYN+ACK包向服务器发送确认包ACK此包发送完毕客户端和服务器进入TCP连接成功状态完成三次握手
   通俗主机1告诉主机2我可以向你请求数据吗主机2告诉主机1可以请求数据主机1告诉主机2那我来请求数据了请求完成实现三次握手

19、怎么理解四次挥手

1四次挥手
    第一次分手主机1可以使客户端也可以是服务器端向主机2发送一个FIN报文段此时主机1进入FIN_WAIT_1状态这表示主机1没有数据要发送给主机2了
    第二次分手主机2收到了主机1发送的FIN报文段向主机1回一个ACK报文段主机1进入FIN_WAIT_2状态主机2告诉主机1同意你的关闭请求
    第三次分手主机2向主机1发送FIN报文段请求关闭连接同时主机2进入LAST_ACK状态
    第四次分手主机1收到主机2发送的FIN报文段向主机2发送ACK报文段然后主机1进入TIME_WAIT状态主机2收到主机1的ACK报文段以后就关闭连接此时主机1等待2MSL后依然没有收到回复则证明Server端已正常关闭那好主机1也可以关闭连接了
    通俗主机1告诉主机2我没有数据要发送了希望断开连接主机2接到请求后说同意断开主机2告诉主机1可以关闭连接了主机1接到可以关闭的指令后关闭连接四次挥手完成

20、怎么理解事件循环机制

	1JavaScript 是一门单线程语言.单线程可能会出现阻塞的情况所js分了同步任务和异步任务
    2同步和异步任务分别进入不同的执行环境同步的进入主线程即主执行栈异步的进入 Event Queue事件队列 主线程内的任务执行完毕为空会去 Event Queue 读取对应的任务推入主线程执行 上述过程的不断重复就是我们说的 Event Loop (事件循环)