挑战前端知识点HTTP/ECMAScript

哪吒人生信条:若是你所学的东西 处于喜欢 才会有强大的动力支撑。javascript

天天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一块儿,让那一颗像四处流荡的心定下来,一直走下去,加油,2021加油!欢迎关注加我vx:xiaoda0423,欢迎点赞、收藏和评论html

不要惧怕作梦,可是呢,也不要光作梦,要作一个实干家,而不是空谈家,求真力行。前端

前言

但愿能够经过这篇文章,可以给你获得帮助。(感谢一键三连),接收好挑战了吗?java

关于HTTP模块

1.说说你对HTTP和HTTPS的理解,并说一下它们的端口号是什么

好的,HTTP是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为普遍的一种网络协议,全部的www文件都必须遵照这个标准,设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。git

HTTP是一种普遍使用的网络传输协议,是客户端浏览器或其余程序与web服务器之间的应用层通讯协议或者标准tcp,用于从www服务器传输超文本到本地浏览器的传输协议,它可使浏览器更加高效,使网络传输减小。程序员

那么HTTPS,它是一种经过计算机网络进行彻底通讯的传输协议,通过HTTP进行通讯,利用SSL/TLS创建通讯,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。es6

https是http的加密版,是以安全为目标的http,在http中加入ssl,安全基础是ssl。 github

TLS是传输层加密协议,前身是SSL协议。web

HTTP一般承载于TCP之上,在HTTTPTCP之间添加一个安全协议层(SSLTSL),就是咱们常说的HTTPS编程

HTTP特色:

支持客户端或服务器模式,C/S模式;

简单快速,客户端向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET,HEAD,POST,每种方法规定了客户与服务器联系的类型不一样,因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快;

比较灵活,HTTP容许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记;

无链接,表示限制每次链接只处理一个请求,服务器处理完客户端的请求,并收到客户端的应答后,就断开链接,采用这种方式能够节省传输时间;

无状态,HTTP协议是无状态的协议,无状态表示协议对于事务处理是没有记忆能力的,缺乏状态意味着若是后续处理须要前面的信息,则它就必须重传,这样可能致使每次链接传送的数据量不断增长,另外一方面,在服务器不须要先前信息时它的应答就比较快。

HTTPS特色

它是采用混合加密技术,中间者是没法看到明文内容,对内容加密过;

又对身份进行验证,经过证书认证客户端访问的是本身的服务器;

能够防止传输的内容被中间人冒充或者篡改,保户了数据的完整性。

HTTPURL是以http://开头,对于HTTPSURL是以https://开头;HTTP是不安全的,而HTTPS是安全的;HTTP没法加密,而HTTPS对传输的数据进行加密;HTTP无需证书,而HTTPS须要CA机构的颁发的SSL证书。

它们的端口号分别是:

HTTP默认的端口号为80HTTPS默认的端口号为443

那么HTTPS更加安全的由于是:在网络请求中,须要不少服务器,路由器的转发。其中的节点均可能篡改信息,而若是使用HTTPS,密钥在终点站才有。HTTPS之因此比HTTP安全,是由于它利用ssl/tls协议传输。它包含证书,卸载,流量转发,负载均衡,页面适配,浏览器适配,refer传递等技术,保障了传输过程的安全性。

https,全称Hyper Text Transfer Protocol Secure,相比http,多一个secure,这一个secure是由TLS(ssl)提供的。httpshttp都属于application layer,基于tcp以及udp协议,可是又彻底不同。

http是客户端和服务器端之间数据传输的格式规范,表示“超文本传输协议”

小结

  1. 无状态协议对于事务没有记忆能力,缺乏状态表示若是后续须要处理,须要前面提供的信息
  2. 克服无状态协议缺陷的办法是经过cookie和会话保存信息

2.http/2你了解多少

HTTP/2引入了“服务器端推送”的概念,它容许服务器端在客户端须要数据以前主动将数据发送到客户端缓存中,从而提升性能。

HTTP/2提供更多的加密支持。使用多路技术,容许多个消息再一个链接上同时交差。增长了头压缩,所以请求很是小,请求和响应的header都只会用很小的带宽比例。

http/2协议是基于https的,因此http/2的安全性也是有保障的。

头部压缩:http/2会压缩头,若是你同时发出多个请求,他们的头是同样的或是类似的,那么,协议会帮你消除重复的部分。

对于http/2再也不使用像http/1.1里的纯文本形式的报文,而是采用了二进制格式。头信息和数据体都是二进制,统称为帧,头信息帧和数据帧。

数据流:http/2的数据包不是按顺序发送的,同一个链接里面连续的数据包,可能属于不一样的回应,必需要对数据包作标记,指出它属于哪一个回应。每一个请求或回应的全部数据包,称为一个数据流。

多路复用:http/2是能够在一个链接中并发多个请求或回应,而不用按照顺序一一对应,解决了http/1.1中的串行请求,不须要排队等待,也就不会出现队头阻塞问题,下降了延迟,大幅度提升了链接的利用率。

服务器推送,http/2改善了传送的请求-应答工做模式,服务端再也不是被动响应,也能够自动向客户端发送信息了。

http2问题出如今,多个http请求在复用一个tcp链接,下层的tcp协议是不知道有多少个http请求的,一旦发生丢包现象,会触发tcp的重传机制,这样一个tcp链接中的全部的http请求都必须等待这个丢了的包被重传回来。

第一,http/1.1中的管道传输中若是有一个请求阻塞了,那么队列后请求也通通被阻塞了。第二,http/2多请求复用一个tcp链接,一旦发生丢包,就会阻塞全部的http请求。

3.说说http常见的状态码

五大类的http状态码:

1xx: 提示信息,表示目前是协议处理的中间状态,后续还有操做

2xx: 成功,报文已经收到并被正确处理,200, 204, 206

3xx: 重定向,资源位置发生变更,须要客户端从新发送请求

4xx: 客户端错误,请求报文有误,服务器没法处理

5xx:服务器错误,服务器在处理请求时内部发生了错误

  1. 100 Continue 表示继续,通常在发送post请求时,已经发送了http header以后,服务器端将返回此信息,表示确认,以后发送具体参数信息。
  2. 200 ok 表示正常返回信息。
  3. 201 Created 表示请求成功而且服务器建立了新的资源
  4. 202 Accepted 表示服务器已经接受请求,但还没有处理
  5. 301 Moved Permanently 表示请求的网页已永久移动到新位置
  6. 302 Found 表示临时性重定向
  7. 303 See Other 表示临时性重定向,且老是使用GET请求新的URI
  8. 304 Not Modified 表示自从上次请求后,请求的网页伪修改过
  9. 400 Bad Request 表示服务器没法理解请求的格式,客户端不该当尝试再次使用相同的内容发送请求。
  10. 401 Unauthorized 表示请求未受权
  11. 403 Forbidden 表示禁止访问
  12. 404 Not Found 表示找不到如何与uri 相匹配的资源
  13. 500 Internal Server Error 表示最多见的服务器端错误
  14. 503 Service Unavailable 表示服务器端暂时没法处理请求

4.说说http事务流程

第一步,域名的解析;第二步,发起tcp的三次握手;第三步,创建tcp链接后发起HTTP请求;第四步,服务器端响应HTTP请求,浏览器获得HTML代码;第五步,浏览器解析HTML代码,并请求HTML代码中的资源;第六步,浏览器对页面进行渲染并呈现给用户。

5.手写简单的HTTP服务器

var http = require('http');

http.createServer(function(req, res){
 res.writeHead(200, {'Content-Type': 'text/html'});
 res.write('<meta charset="UTF-8"><h1>dadaqianduan</h1>');
 res.end();
}).listen(3000);

6.说说http的请求报文和响应报文包含哪些部分

请求报文包含三部分:

1.请求行,包含请求方法,URI,HTTP版本信息

2.请求首部字段

3.请求内容实体

请求报文包含三部分:

1.状态行,包含HTTP版本,状态码,状态码的缘由短语

  1. 响应首部字段
  2. 响应内容实体

7. 什么是反向代理

反向代理,Reverse Proxy,是指经过代理服务器来接收互联网上的链接请求,而后将请求转发给内部网络上的服务器,并把从服务器上获得的结果返回给互联网上请求链接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

8.HTTP中有哪些请求方式

GET,请求访问已经被uri,统一资源标识符识别的资源,能够经过url,给服务器传递参数数据

POST,传输信息给服务器,主要功能与GET方法相似,但传递的数据量一般不受限制。

PUT,传输文件,报文主体中包含文件内容,保存到对应的URI位置。

HEAD,得到报文首部,与GET方法相似,只是不返回报文主体,通常用于验证URI是否有效。

DELETE,删除文件,与PUT方法相反,产生对应URI位置的文件

OPTIONS,查询相应URI支持的HTTP方法

9.HTTP协议中1.0版本规范与1.1版本规范的区别

http1.0中,当创建链接后,客户端发送一个请求,服务器端返回一个信息后就关闭链接,当浏览器下次请求的时候又要创建链接,这种不断创建链接的方法会形成不少问题。

http1.1中,引入了连续链接的概念,经过这种链接,浏览器能够在创建一个链接以后,发送请求并获得返回信息,而后继续发送请求再次等到返回信息。客户端能够连续发送多个请求,而不用等待每个响应的到来。

10.HTTP的首部字段包括哪些类型

通用首部字段,请求报文和响应报文都会使用的首部字段
  1. Date,建立报文的时间
  2. Connection,链接的管理
  3. Cache-Control,缓存的控制
  4. Transfer-Encoding,报文主体的传输编码方式
请求首部字段,请求报文会使用的首部字段
  1. Host,请求资源所在服务器
  2. Accept,可处理的媒体类型
  3. Accept-Charset,可接受的字符集
  4. Accept-Encoding,可接受的内容编码
  5. Accept-Language:可接受的天然语言
响应首部字段,响应报文会使用的首部字段
  1. Accept-Ranges,可接受的字节范围
  2. Location,令客户端从新定向到URI
  3. Server,HTTP服务器的安装信息
实体首部字段,请求报文与响应报文的实体部分使用的首部字段
  1. Allow,资源可支持的http方法
  2. Content-Type,实体主体的类型
  3. Content-Encoding,实体主体使用的编码方式
  4. Content-Language,实体主体的天然语言
  5. Content-Length,实体主体的字节数
  6. Content-Range,实体主体的位置范围,通常用于发出部分请求时使用

11.与https相比,http有什么缺点

http的缺点是:通讯使用明文,不加密,内容可能被窃听,也就是被抓包分析;不验证通讯方身份,可能遭到假装;没法验证报文完整性,可能性篡改。

https就是 http+加密处理+认证+完整性保护

12.如何优化HTTP请求

利用负载均衡优化和加速HTTP应用请求,利用HTTP缓存来优化网站请求

13.HTTP协议有哪些特征

支持客户端或服务器模式,简单快捷,灵活,无链接,无状态。

14.HTTP1.1版本的新特性

默认持久链接,节省通讯量,只要客户端或服务端中任意一端没有明确指出断开TCP链接,就一直保持链接,能够屡次发送HTTP请求。

管线化,客户端能够同时发出多个HTTP请求,而不用一个个等待响应。

断点续传原理。

15.tcp传输的三次握手,四次挥手

三次握手,用tcp把数据包发送出去后,tcp不会对传送后的数据置之不理,它必定会向对方确认是否成功送达。握手过程当中使用了tcp的标志,既是 SYN 和 ACK

发送端首先给接收端发送一个带SYN标志的数据包。接收端收到后,回传一个带有SYN/ACK标志的数据包以表示正确传达,并确认信息。最后,发送端再回传一个带ACK标志的数据包,表明“握手”结束。若在握手过程当中的某个阶段莫名中断,TCP会再次以相同的顺序发送相同的数据包。

断开一个TCP链接则须要“四次握手”

第一次握手:主动关闭方发送一个 FIN,用来关闭主动关闭方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方,主动关闭方已经不会再给被动关闭方发送数据了,可是,此时主动关闭方还能够接收数据。

第二次握手:被动关闭方收到FIN包后,给对方发送一个ACK,确认序号为收到序号+1,与SYN相同,一个FIN占用一个序号。

第三次握手:被动关闭方收到FIN包后,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,被动关闭方的数据也发送完了,不会再给主动关闭方发送数据了。

第四次握手:主动关闭方收到FIN后,给被动关闭方发送一个ACK,确认序号为收到序号+1

16.说说tcp和udp的区别

tcp传输控制协议,是基于链接的协议,也就是说,在正式收发数据前,必须和对方创建可靠的链接。一个tcp链接必需要通过三次对话才能创建起来。

udp用户数据报协议,是与tcp相对应的协议。它是面向非链接的协议,它不与对方创建链接,而是直接就把数据包发送过去。udp适用于一次只传送少许数据,对可靠性要求不高的应用环境。

17.一个页面从输入url到页面加载显示完成的过程发送什么

当发送一个url请求时,这个url是web页面的url仍是web页面上每一个资源的url,浏览器都会开启一个线程来处理这个请求,同时在远程dns服务器上启动一个dns查询,这能使浏览器得到请求对应的Ip地址。

浏览器与远程web服务器经过tcp三次握手协商来创建一个tcp/ip链接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这个3个报文在浏览器和服务器之间传递,该握手首先由客户端尝试创建起通讯,而后服务器应答并接受客户端的请求,最后由客户端发出已经接受该请求的报文。

一旦tcp/ip链接创建,浏览器会经过该链接向远程服务器发送HTTP的GET请求,远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态码表示一个正确的响应。

web服务器提供资源服务,客户端开始下载资源,请求返回后,便进入了浏览器模块,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS规则树,而javascript又能够根据DOM API操做DOM

18.网络分层模型有哪一个七层

  1. 应用层:容许访问OSI环境的手段
  2. 表示层:对数据进行翻译,加密和压缩
  3. 会话层:创建,管理和终止会话
  4. 传输层:提供端到端的可靠报文传递和错误恢复
  5. 网络层:负责数据包从源到宿的传递和网际互联
  6. 数据链路层:将比特组装成帧并实现点到点的传递
  7. 物理层:经过媒介传输比特,肯定机械以及电气规范

19.说说304缓存的原理

服务器首先为请求生成ETag,服务器可在稍后的请求中,使用它来判断页面是否已经修改,本质上,客户端经过将该记号传回服务器要求服务器验证其客户端是否缓存。

304是HTTP状态码,服务器用它来标识这个文件没有修改,不返回内容,浏览器在接收到个状态码后,会使用浏览器已缓存的文件。

客户端请求页面A,服务器返回页面A,并给A加上一个ETag,客户端展示该页面,并将页面连同ETag一块儿缓存,客户端再次请求页面A,并将上次请求时服务器返回的ETag一块儿传递给服务器。服务器检查该ETag,并判断出该页面自上次客户端请求以后还未被修改,直接返回响应304和一个空的响应体。

es模块

20.总结严格模式的限制

  1. 变量必须声明后再使用
  2. 函数的参数不能有同名参数,不然报错
  3. 不能使用with语句
  4. 不能对只读属性赋值,不然报错
  5. 不能使用八进制数,不然报错
  6. 不能使用特殊字符
  7. 不能使用delete删除变量,方法等,只能用delete删除对象的属性
  8. eval不会在它的外层做用域引入变量
  9. eval和arguments不能被从新赋值
  10. arguments不会自动反映函数参数的变化
  11. 不能使用arguments.callee
  12. 不能使用arguments.caller
  13. 禁止this指向全局对象
  14. 不能使用fn.caller和fn.arguments获取函数调用的栈
  15. 增长了保留字

21.说说es6

  1. 新增了模板字符串${}
  2. 箭头函数
  3. for-of
  4. 获取剩余参数语法代替arguments对象
  5. 定义默认参数语法
  6. es6Promise对象归入规范,提供了原生的Promise对象
  7. 增长了let关键字以定义块做用域的变量
  8. 增长了const以定义常量
  9. 增长了Symbol数据类型
  10. 引入module模块的概念

22.Promise有哪些特色

es6原生提供了Promise对象,它是用来处理异步操做的。

Promise对象特色:

对象的状态不受外界影响,Promise对象有三个状态:Pending,进行中,Resolved,已完成,Rejected,已失败,只有异步操做的结果,能够决定当前是哪种状态,任何其余操做都没法改变这个状态。

一旦状态改变,就不会再改变,任什么时候候均可以获得这个结果。Promise对象的改变,只有两种可能,从Pending变为Resolved和从Pending变为Rejected。只有这两种状况,状态就固定了,会一直保持这个结果,不会再变了。

即便对Promise对象添加回调函数,也会当即获得这个结果,这与事件彻底不一样,事件的特色是,若是你错过了它,再去监听,也没法获得结果。

有了Promise对象,就能够将异步操做以同步操做的流程表达出来,避免了层层嵌套到的回调函数,此外,Promise对象提供统一的接口,使得控制异步操做更加容易。

缺点:没法取消Promise,一旦新建,它就会当即执行,没法中途取消,若是不设置回调函数,Promise内部抛出的错误不会反映到外部。

23.说说Promise的理解

三种状态:

Pending指初始状态,非FulfilledRejected状态

Resolved指成功的操做

Rejected是指失败的操做

let p = new Promise(resolve, reject) => {
 if(condition) {
  resolve(result)
 }else{
  reject(result)
 }
}
});

promise.then(onResolved,onRejected)

24.es6实现数组去重

// es5
var varr [1,2,3,4,3,4,5,5,3]
function removeDa(arr){
 var obj = {};
 arr.forEach(function(item,index){
  obj[item] = true
 })
 return Object.keys(obj);
}
// es6
let removeDa = arr => [...{new Set([...arr]))];

25.es6使用进行两个数的交换

let a = 1, b = 2;
[a,b] = [b,a];
console.log(a); // 2
console.log(b); // 1

26.为啥使用es6

第一:符合将来趋势;第二:提升开发效率;第三:减小代码量,提升可读性等。

27.如何让开发环境下的浏览器支持es6

使用babel编译

28.es6let关键字支持块级做用域吗

var arr = [];
for (var i = 0; i < 5; i++){
 arr[i] = function(){
  console.log(i);
 }
}
arr[3](); // 5

let arr = [];
for(let i = 0; i < 5; i++) {
 arr[i] = function() {
  console.log(i);
 }
}
arr[3](); // /5

letJavaScript新增了块级做用域,用它声明的变量只在let关键字所在的代码块内有效。

29.代码示例

var obj = {
 // es5
 fn1: function() {
  console.log('fn1',this)
 },
 fn2:() => {
  console.log('fn3',this)
 }
}
obj.fn1(); // obj
obj.fn2(); // window

30.super是什么

它是一个关键字,用法为super(...)或者super.xx(...)

super的语法定义和this不一样,this的定义是this这个关键字会被替换成一个引用,而super则是super(...)会被替换成一个调用。除了能够在constructor里被直接调用super外,还可使用super.xx(...)来调用父类上的某个原型方法,这一样是一种限定语法。

31.代码示例

(function(x,f=()=>x){
 var x:
 var y = x;
 x = 2;
 return [x,y,fn()];
})(1)

[2,1,1]

32.代码示例

(function(){
 console.log([
 (()=>this.x).bind({x:'inner'})(),
 (()=>this.x)()
 })
}).call({x:'outer'});
// ['outer','outer']

33.代码示例

(function(){
 let a = this?class b{} : class c{};
 console.log(typeof a, typeof b, typeof c)
})()
// function undefined undefined

34.代码示例

(typeof (new (class { class () {} })))
// object
var Test = class{
 class(){}
};
var test = new Test();
typeof test;

35.代码示例

(function(){
if(false){
let f={g()=>1};
}
return typeof f;
})()
// error

36.什么是DOM模板

dom模板是原先就写在页面上的而且能被浏览器识别的html结果,在加载的时候,就会被浏览器渲染。因此要遵循HTML结构和标签命名,否则没法被浏览器解析,也就没法获取内容了,而后用JavaScript获取DOM节点的内容,就造成了DOM模板。

37.什么是字符串模板

字符串模板可能原先放在服务器上的script标签里,做为JavaScript字符串,而且不参与页面渲染,因此它可能不在意HTML结构和标签命名,只要最后根据模板生成对应的结构而且命名符合HTML规范。

38.请说出扩展运算符与剩余操做符之间的区别

在某种程度上,剩余操做符和扩展运算符相反。扩展运算符会使数组“展开”成多个元素,剩余操做符会收集多个元素并“压缩”成一个单一的元素。

39.var,let,const声明变量的区别

var声明的变量不支持块做用域,支持声明前置,能够重复定义,而且值能够改动。

let声明的变量支持块做用域,不支持声明前置,不能重复定义,而且值能够修改。

const定义常量,声明的常量支持做用域,不支持声明前置,不能重复定义,值没法修改,值一般是值类型的,不能用来定义循环变量。

40.解构分类

对象解构;数组解构;混合解构;参数解构。

41.es6extends支持多重继承吗

es6不支持多重继承,可是能够经过混合等技术来模拟,一旦使用多重继承,则按声明前后顺序覆盖同名属性方法。

42.剩余参数和arguments对象的区别

剩余参数只包含那些没有对应形参的实参,而arguments对象包含了传给函数的全部实参。

arguments对象不是一个真实的数组,而剩余参数是真实的Array实例,可以在它上面直接使用全部的数组方法。

arguments对象还有一些附加的属性。

若是想在arguments对象上使用数组方法,首先要将它转换为真实的数组。

43.for..of有点是啥

有着同for...in的简洁语法,可是没有for...in的缺点

不一样于forEach方法,能够与break,continue,return配合使用

提供了遍历全部数据结构的统一操做接口

44.为何修饰器不能用于函数

修饰器只能用于类和类的方法,不能用于函数,由于存在函数提高

45.Iterator接口的目的是啥

为全部数据结构提供了一种统一的访问机制,for..of循环

当使用for...of循环遍历某种数据结构时,该循环会自动寻找Iterator接口.

46.使用外部的模块脚本须要注意哪几点

代码在模块做用域中进行,而不是在全局做用域中运行,模块内部的顶层变量,在外部不可见。

不管有没有声明use strict,模块脚本都自动采用严格模式

在模块中,可使用import命令加载其余模块,也可使用export命令输出对外接口

在模块中,顶层的this关键字返回undefined,而不是指向window,也就是说在模块顶层使用this,是无心义的。

同一个模块若是加载屡次,将只执行一次。

47.Iterator的做用和遍历过程

第一,为各类数据结构提供一个统一的,简便的访问接口

第二,使得数据结构的成员可以按某种次序排序

第三,ES6创造了一种新的遍历命令for...of循环,Iterator接口主要提供for...of使用

过程:

建立一个指针对象,指向当前数据结构的起始位置,也就是说,遍历器对象本质上就是一个指针对象。

第一次调用指针对象的next方法,能够将指针指向数据结构的第一个成员

第二次调用指针对象的next方法,指针指向数据结构的第二个成员

不断调用指针对象的next方法,直到它指向数组结构的结束位置。每一次调用next方法,都会返回数据结构中当前成员的信息。

48.async函数有几种声明形式

函数声明

async function da(){}

表达式声明

var bar = async function () {}

经过对象声明

var obj = {
 async daFun(){}
}

经过箭头函数声明

var da = async() =>{}

49.async函数中,如何处理错误语句

try...catch

async function demo() {
 try{
  await doSomeThing();
 } catch(err){
  console.log(err)
 }
}

添加catch回调函数

async function demo() {
 await doSomeThing().cache(err=>console.log(err))
}

50.es6中,generator函数的throw方法如何使用

throw()会恢复generator的执行,且在执行点上抛出异常

throw()next()同样会返回{value,done},只会抛出的异常获得处理了,generator函数体才会真正执行throw()

点赞、收藏和评论

我是Jeskson(达达前端),感谢各位人才的:点赞、收藏和评论,咱们下期见!(如本文内容有地方讲解有误,欢迎指出☞谢谢,一块儿学习了)

咱们下期见!

文章持续更新,能够微信搜一搜「 程序员哆啦A梦 」第一时间阅读,回复【资料】有我准备的一线大厂资料,本文 http://www.dadaqianduan.cn/#/ 已经收录

github收录,欢迎Starhttps://github.com/webVueBlog/WebFamily

相关文章
相关标签/搜索