哪吒人生信条:如果你所学的货色 处于喜爱 才会有弱小的能源撑持。

每天学习编程,让你离幻想更新一步,感激不负每一份酷爱编程的程序员,不管知识点如许奇葩,和我一起,让那一颗像到处流荡的心定下来,始终走上来,加油,2021加油!欢送关注加我vx:xiaoda0423,欢送点赞、珍藏和评论

不要胆怯做梦,然而呢,也不要光做梦,要做一个实干家,而不是空谈家,求真力行。

前言

心愿能够通过这篇文章,可能给你失去帮忙。(感激一键三连),接管好挑战了吗?

对于HTTP模块

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

好的,HTTP是超文本传输协定,是一个基于申请与响应,无状态的,应用层的协定,常基于TCP/IP协定传输数据,互联网上利用最为宽泛的一种网络协议,所有的www文件都必须恪守这个规范,设计HTTP的初衷是为了提供一种公布和接管HTML页面的办法。

HTTP是一种宽泛应用的网络传输协定,是客户端浏览器或其余程序与web服务器之间的应用层通信协议或者规范tcp,用于从www服务器传输超文本到本地浏览器的传输协定,它能够使浏览器更加高效,使网络传输缩小。

那么HTTPS,它是一种通过计算机网络进行齐全通信的传输协定,通过HTTP进行通信,利用SSL/TLS建设通信,加密数据包。HTTPS应用的次要目标是提供对网站服务器的身份认证,同时爱护替换数据的隐衷与完整性。

https是http的加密版,是以平安为指标的http,在http中退出ssl,平安根底是ssl。

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

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实现数组去重

// es5var 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);}// es6let removeDa = arr => [...{new Set([...arr]))];

25.es6应用进行两个数的替换

let a = 1, b = 2;[a,b] = [b,a];console.log(a); // 2console.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](); // 5let 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(); // objobj.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收录,欢送Star:https://github.com/webVueBlog/WebFamily