2022前端面试题总结大全 ES6 1、var、let、const之间的区别 var存在变量提升、可重复声明、全局作用域 在window 作用域下面 let不存在变量提升、不可重复声明、限于块级作用域、有暂时性死区 const声明后必须赋值、定义的变量不可更改、限于块级作用域 2、使用箭头函数应注意什么? 箭头函数:this指向定义时的this、不是使用时的this不能当构造函数使用、不能使用new、会报错不能使用不定参数arguments、如果要使用用rest参数代替不能使用Generator函数、不能使用yield命令 3、Set、Map的区别? set只接受字符串类型的数据 Map接受所有类型的数据 4、ECMAScript 6 怎么写 class ,为何会出现 class Class Tab{ Constructor(name,age){ This.name = name; This.age=age; } Skill(){ Console.log(1); } } class是ES5的语法糖、让对象原型的写法更加的简便和清晰 5、继承 ES5: function Father(name,age){} function Child(name,age,sex){} Father.call(this,name,age) 继承属性 ES6: class Father{ constructor(){} } class Child extends Father{ constructor(name,age){ super(this,name,age); } } 5、Promise构造函数是同步执行还是异步执行,那么 then 方法呢? promise构造函数是同步执行 then是异步执行 6、promise有几种状态,什么时候会进入catch? Pending(进行中)、fulfilled(已成功)、rejected(已失败) pending为rejected(已失败)时进入catch 7、Promise 中reject 和 catch 处理上有什么区别 reject来抛出异常、cathc用来处理异常 reject是promise的方法、catch是promise的实例 Reject的东西会进入then的第二个回调,如果没有then回调进入catch 8、理解 async/await以及对Generator的优势 async和await是用来解决异步的、async是Generator函数的语法糖 使用关键字async来表示,在函数内部使用 await 来表示异步 async函数返回一个Promise对象,可以使用then方法添加回调函数 当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句async和generator的区别内置执行器:G函数的执行必须依靠执行器async函数自带执行器更好的语义化:Async和await相对于*和yield更加语义化更广的适用性:yield命令只能是thunk函数或promise对象、async函数的await可以是promise对象也可以是原始类型的值返回值: async返回promise对象、可以直接调用then方法 G函数返回的是遍历器对象 10、forEach、for in、for of三者区别 forEach:用来遍历数组 for in:用来遍历对象或json for of:用来遍历数组和对象、遍历对象需要object.keys() 11、说一下es6的导入导出模块 导入:import {内容} from ‘路径’ 引入:export 面试题 1、promise的方法有哪些? 答: all():等多个异步程序均产生结果后执行下一步操作 race():当promise数组中任意一个promise被拒绝或者成功,则会采用第一个promise作为它的返回值。若为成功的执行then,若失败则执行catch any():当传入的promise数组中有任意一个完成时就会终止,会忽略所有被拒绝掉的promise,直到第一个promise完成。若传入所有的promise被拒绝则会执行拒绝回调 allSettled():当给定的promise数组中的所有promise被拒绝后会返回一个拒绝的promise数组,与[]一一对应 2、小程序中,module.exports和exports有什么区别? 答: exports是module.exports的引用,当module.exports指向新的对象时,exports断开了与module.exports的引用,module.exports指向了新的内存块,而exports还是指向原来的内存块 3、什么是同源策略,如何解决? 答: 端口、协议、域名不同时会发生同源策略问题,解决方案有:jsonp、cors、nginx 4、http和https有什么区别? 答: 传输信息安全性不同,连接方式不同,端口不同,证书申请方式不同 一、传输信息安全性不同 http协议:超文本传输协议,信息是明文输出 https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全 二、连接方式不同 http的连接很简单,是无状态的 https是由ssl+http协议构建的可进行加密传输、身份认证的网络协议 三、端口不同 http使用的端口是80 https使用的端口是443 四、证书申请方式不同 http免费申请 https需要到ca申请证书,一般免费的证书很少,需要交费 5、什么是BFC?有什么作用? 答:BFC是块级格式化上下文,就是页面上的一个独立的容器,容器内的素不会影响容器外部的素,外部也无法影响内部的素 作用:防止margin重叠,清除浮动,自适应两栏布局 6、原生js中如何阻止事件冒泡,如何取消默认事件? 答:e.preventDefault()取消默认事件 e.stopPropagation()阻止事件冒泡 7、上拉加载原理? 答:一般是页面滚动到底部是触发,获得当前滚动条的scrollTop值、当前可视范围的高度值clientHeight以及文档的总高度scrollHeight。当scrollTop和clientHeight的值之和大于等于scrollHeight时,触发callback。实现上拉加载 8、rem的原理 答:rem布局的本质是等比缩放,一般是基于宽度,rem是指相对于根素的字体大小改变 公式:根素字体大小 = 100*(当前屏幕宽度/640)+’px’ 9、async和await怎么执行的? 答: 对内同步,对外异步,每一个await都会返回一个promise实例 10、小程序跳转页面的方式?各自的作用? wx.navigateTo()跳转普通页面,隐藏当前页面,可以传值 wx.reLaunch()跳转任意页面,关闭所有页面,可以传值 wx.redirectTo()跳转普通页面,关闭当前页面,可以传值 wx.switchTab()跳转tabBar页面,关闭所有非tabBar页面,不能传值 wx.navigateBack()返回上一页面,关闭当前页面,不能传值 11、rpx和px的区别?什么是rpx? 答:rpx是小程序中css尺寸的单位,rpx可以根据屏幕宽度进行自适应, 使用rpx为单位的小程序会在不同分辨率下进行转换,而px则不会 rpx的换算方式:可视窗口的屏幕宽度,设备rpx换算px:屏幕宽度/750,px换算成rpx:750/屏幕宽度; 12、小程序如何封装模块? 答:通过封装模块,编写模块结构内容 用import引入模块文件的模板内容,通过is属性声明需要使用的模块,利用data属性向模块传入需要的数据信息 13、git提交,分支 答:git commit -m “注释”—— 提交 git branch —— 创建分支 git checkout —— 切换分支 git merge 分支名 —— 合并分支 14、小程序子组件如何向父组件传值? 答:通过事件来传递数据,在子组件中绑定事件,在子组件js中的事件处理函数中用triggerEvent激活父组件绑定的自定义事件并进行传递数据 15、什么是原型链? 答:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没找到就会再在构造函数的prototype的__proto__中查找,就这样一层一层向上查找就会形成一个链式结构,我们称为原型链 16、什么是递归函数? 答:递归就是一个函数在它的函数体内调用它自身,执行递归函数将反复调用其自身,每调用一次就进入新的一层,递归函数必须有结束条件 17、什么是伪数组?如何将伪数组转换为真数组? 答: 伪数组具有length属性,按索引方式存储数据,不具有数组的方法 Array.from() […arr]数组的解构赋值 18、改变this指向的方法?分别有什么区别? bind():不会立即调用,调用时需要加小括号 call():直接调用,参数用逗号分隔 apply():直接调用,参数需要用数组包裹 Reflect.apply():直接调用,参数需要用数组包裹 19.浅拷贝深拷贝 答: 浅拷贝:只是将数据中的所有数据引用下来,依旧指向同一个内存地址,拷贝后的数据修改后,会影响原数据的对象数据 浅拷贝的实现方式: Object.assign(target,…sources) for…in 只循环第一层; 直接用=赋值 深拷贝:将数据中的所有数据拷贝下来,(相当于开辟了一个新的内存地址),对拷贝之后的数据修改不会影响原数据 深拷贝的实现方式: 采用递归去拷贝所有层级属性; 通过JSON对象,JSON.parse(JSON.stringify(obj)) 通过JQuery的extend方法:$.extend(true,[],array) //true深拷贝,false浅拷贝 lodash函数库实现——let result=_.cloneDeep(test) Reflect法 slice对数组的深拷贝 concat对数组的深拷贝 var newObj=Object.create(oldObj) 使用拓展运算符 {…obj} 20.new关键字的作用? 答: 1、在构造函数中创建this 2、隐式返回this 3、让this指向new构造函数创建的实例 4、让实例的__proto__指向构造函数的原型对象(prototype) 21. DOM 事件对象的target和currentTarget属性的区别是什么? 答:currentTarget是事件绑定的素,target是事件触发的真实素 事件处理函数中的this指向始终为currentTarget 22.http https 的区别 答:端口、连接方式、证书申请方式、传输信息安全性不同 23.重绘和重排 回流reflow 答:重绘:当素的一部分不会引起布局影响的属性改变时,浏览器就会根据新属性重新绘制。 重排:当render树中的一部分或全部因为大小边距等问题发生了改变而DOM树重新计算的过程 重绘不一定需要重排,重排必然导致重绘(比如改变网页位置) 24.什么是同源策略 答:域名、端口、协议其中有一个不同就会发生同源策略 25.ajax、fetch、axios的区别 ajax 和 axios都是基于xmlHTTPrequest原生写的 ,只不过ajax有会产生回调地狱,axios则是 用到了promise使代码更简洁,可以实现异步操作 ajax针对MVC编程 而 axios针对新的 MVVC ajax,fetch拿过来的数据 需要转换用 JSON.parse() axios 自动转换JSON数据 所以请求到就可以用,还可以自己配置拦截器 fetch是es6调数据的新方法不基于XMLHttpRequest Ajax是指一种创建交互式网页应用的网页开发技术,并且可以做到无需重新加载整个网页的情况下,能够更新部分网页,也叫作局部更新。 fetch采用了Promise的异步处理机制,解决了回调地狱,属于全局的方法,需要调用两次 axios就是通过promise实现了对ajax技术的封装,支持promise API,异步的 答:axios: 一、Axios 是一个基于 promise 的 HTTP 库,支持promise所有的API 二、它可以拦截请求和响应 三、它可以转换请求数据和响应数据,并对响应回来的内容自动转换成 JSON类型的数据 四、安全性更高,客户端支持防御 XSRF 优缺点:从node.js创建http请求 支持PromiseAPI 客户端支持防止CSRF 提供了一些并发请求的接口(重要,方便了很多的操作) ajax:通过XMLHttpRequest对象向服务器发送异步请求,从服务器数据,然后用js来操作dom达到局部刷新 优缺点:本身是针对MVC的编程,不符合现在前端MVVM的浪潮 基于原生的XHR开发,XHR本身的构架不清晰,已经有了fetch的替代方案 fetch:就是实现ajax的封装以及Promise的实现。 优缺点:符合分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里 更好更方便的写法 更加底层,提供的API丰富(request、response) 脱离了XHR,是ES规范里新的实现方式 MVVM是什么? M:model 后台数据库 V:view(用户看到的) 视图层 展示 数据处理层的数据 VM:view modul 数据处理层 与model层交互 26.es6的模块语法 和 commentJS模语法的区别 es6:导出export 导入import es6是前端页面 所以用的es6模块语法 commentJS :导出:module.exports 导入:require node.js默认的模块就是commentjs的语法 区别: CommonJs模块的require()是同步加载模块,ES6模块的import命令是异步加载模块 CommonJs模块是运行时加载,ES6模块是编译时加载或静态加载 CommonJs模块加载有缓存,ES6模块加载没有缓存 CommonJs模块输出的是一个值的复制,ES6模块输出的是值的只读引用 CommonJs加载的是整个模块,即将所有的方法都加载进来,ES6可以单独加载其中的某个方法 CommonJs模块中this指向当前模块,ES6中指向undefined 27.align-items的默认值? 答:stretch 默认项目被拉伸以适应容器 28.flex-grow、flex-shrink、flex-basis? 答: flex-grow:默认0,如果主轴还有空间,此属性规定素如何瓜分剩余空间 flex-shrink:默认1,如果主轴空间不够,此属性规定素如何吸收超出部分 Flex-basis:用于设置子项的占用空间,如果设置了值,则子项占用的空间为设置的值,如果没设置或者为auto,那么子项的空间为width/height的值 29.兄弟选择器 p+p 紧跟着p后边的p p~p 不是非要紧跟 只需要是p后边的p 30.判断一个变量是否为数组的方法? 答: arr instanceof Array Array.isArray(arr) Object.protype.toString.call(arr) arr.constructor == Array 31. background-size的属性值有哪些,其区别是什么 ? 答: contain:把图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域 cover:把背景图像扩展至足够大,以使背景图像完全覆盖背景区域,背景图像的某些部分也许无法显示在背景定位中。(背景的宽度撑满整个屏幕) 32. input事件和change事件的区别是什么? 答: input:实时触发,在input框里输入内容就会触发 change:只有input框里内容改变并且失去焦点才会触发 33. 表格table的哪个样式属性可以控制让相邻单格td的边框合并 ? 答: border-collapse: collapse; 34.小程序key的作用 : 答: 唯一标识符,提高渲染效率 避免复用数据不一致 35.什么是内存泄漏 答: 有变量一直占用空间 不使用也没有回收 造成占内存 36.回调函数? 答: 把一个方法传给另一个方法 37.screenX、clientX、pageX的区别? 答: screenX:距离屏幕左上角的横坐标 clientX:距离可视窗口左上角的横坐标 pageX:距离文档左上角的横坐标 38.能够改变数组本身的方法? 答: push(),pop(),shift(),unshift(),splice(),concat(),reverse() 39.ES5和ES6的继承有什么区别? 答: ES5 的继承,实质是先创造子类的实例对象this,然后再将父类的方法添加到this上面。 ES6 的继承机制完全不同,实质是先将父类实例对象的属性和方法,加到this上面(所以必须先调用super方法),然后再用子类的构造函数修改this。 40.es6如何实现取一个数的整数部分? Math.trunc() 41.如何解决跨域问题? jsonp:通过javascript标签的src属性将callback参数get请求,服务器将以callback函数调用浏览器,以实参返回形参接收 例如…百度请求接口,他内部处理就是写了一个jsonp的方法,方法的参数,才是我们需要的数据,所以我们才使用jsonp进行跨域请求,对应的数据 cors跨域资源共享:浏览器发送请求在头部信息中发送一字段,服务器拿到这一字段后添加对应一个orgin字段,若不在范围内,浏览器将拦截 Nginx反向代理:发送一简单请求,服务器接收后转发其他服务器,可在合适范围下进行转发Here 42.flex布局的原理? 根据盒子的横轴和交叉轴的排列方式进行自适应布局 43.box-sizing的属性值:border-box和content-box的区别? border-box:宽高设置以后就不会随着内边距改变,绘制内边距或者边框将在已定的宽度中绘制 content-box:在宽高之外绘制内外边距或者边框 44.cookie和token有什么区别 ? cookie: 1、请求的时候浏览器自己生成一段cookie加在请求头上 2、仅限于浏览器 3、无法防止csrf攻击 4、Cookie 大小4KB,Cookie过期时间一般为1个月。 token: 1、需要手动添加 2、可以处理多端的身份验证,不仅仅局限于浏览器,只要客户端能对 token 进行储存就行。 3、token 能防止 csrf 攻击 4、token 可以携带丰富的用户信息, 45.什么是闭包函数? 指的是能够读取其他函数内部的函数 46.inherit什么作用? 指定一个属性应从父素继承它的值,可以用于任何HTML素上的任何css属性 47. HTTP请求报文中包含什么 ? 请求报文是由请求方法、请求 URI、协议版本、可选的 请求首部字段和内容实体构成 请求首部字段和内容实体之间空行分隔 第一行是包含了请求方法、URL、协议版本; 接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。 一个空行用来分隔首部和内容主体 Body 最后是请求的内容主体 48. HTTP响应报文中包含什么 ? 响应报文是由协议版本、状态码、解释状态码的原因 短语、可选的响应首部字段以及内容主体构成 响应首部字段和内容主体之间空行分隔 第一行包含协议版本、状态码以及描述,最常见的是 200 OK 表示请求成功了 接下来多行也是首部内容 一个空行分隔首部和内容主体 最后是响应的内容主体 49.小程序组件的声明周期? created 在组件实例被创建时执行(这个时候不能使用this.setData) attached 在组件实例进入页面节点树时执行(可以使用this.setData) ready 在组件在视图层布局完成后执行 moved 在组件实例被移动到节点树的另一个位置时执行 detached 在组件实例被页面节点树移除时执行 error 每当组件方法抛出错误时执行 50.小程序如何用户信息? wx.getUserprofile() 51.小程序登录步骤逻辑? 通过wx.login()传入用户的APPid和密钥,返回code码,传入服务器,返回一个token,通过token值请求接口 52.promise和async await的区别? 1promise是ES6,async/await是ES7 2 async/await是基于promise实现的,不能用普通回调,是函数前多了一个async关键字,使用async使得代码更清晰易读 3 reject状态: 1)promise错误可以通过catch来捕捉,建议尾部捕获错误, 2)async/await既可以用.then又可以用try-catch捕捉 53.computed和watch的区别? computed是计算属性计算属性的差值绑定不需要加括号 计算属性是有缓存的 只要依赖不变,它就不需要重新计算(无论绑定多少次) watch是相应数据变化时执行一定的逻辑, //属性名是监听data数据中变量的名称 属性值是个方法 当属性名对应的变量发生改变时 就会执行 computed是计算属性,依赖某个值 缓存的 只要依赖不变,它就不需要重新计算 不支持异步 watch: 是监听数据的变化 没有缓存 支持异步 1、功能上:computed是计算属性,watch是监听一个值的变化,然后执行对应的回调。 2、是否调用缓存:computed中的函数所依赖的属性没有发生变化,那么调用当前的函数的时候会从缓存中读取,而watch在每次监听的值发生变化的时候都会执行回调。 3、是否调用return:computed中的函数必须要用return返回,watch中的函数不是必须要用return。 4、computed默认第一次加载的时候就开始监听;watch默认第一次加载不做监听,如果需要第一次加载做监听,添加immediate属性,设置为true(immediate:true) 5、使用场景:computed—-当一个属性受多个属性影响的时候,使用computed——-购物车商品结算。watch—-当一条数据影响多条数据的时候,使用watch——-搜索框。 54.小程序中如何预览图片? wx.previewImage(Object object) 55.import require区别? require 运行时加载 import 编译时加载(效率更高),import命令会提升到整个模块的头部 遵循的模块化规范不一样 出现的时间不同 56.小程序中如何适配1px? transform:scale(0.5) 伪素 border-width:0.5px 57.1rem、1em、1vh、1px各自代表的含义? 1rem 根据根素 1em 根据父素 1vh 视口高度百分比 1px 1像素 58.什么是自执行函数,作用是什么 ? 隔绝变量,不污染全局环境 (function(){})() !function(){}() 59.key的作用? 唯一标识符,提高渲染性能,虚拟Dom比对的时候更高效 60.jsonp的工作原理? 动态创建Script标签,src路径里有个参数 callback是方法名称 当前页面定义一个同名方法 请求回来js文件,文件中是这个方法的执行(执行时传的参数是服务端给的数据) 61.href与src的区别? href 在当前文档和引用资源之间建立联系 标识超文本引用 link标签 a标签使用 可跳转到指定的地址路径 src 替换当前素 引用资源 img标签 script标签使用 引入指定的地址路径,不跳转 62.vue双向绑定 v-model=”” vue的数据双向绑定主要通过Object.defineProperty()方法来进行数据劫持各个属性的setter,getter,以及发布者-订阅模式来实现的 63.rgba和opacity、transparent区别 opacity: 作用于素,以及素内的所有内容的透明度 继承父素的 opacity 属性 rgba(): 作用于素的颜色或其背景色 设置的素的后代素不会继承不透明属性 transparent:属性用来指定全透明色彩 transparent:是全透明黑色(black)的速记法,即一个类似rgba(0,0,0,0)这样的值。在CSS1中,transparent被用来作为background-color的一个参数值,用于 表示背景透明。 64.for in、for of forEach 区别 for in 循环遍历的值都是数据结构的键值 for of 它是ES6中新增加的语法,用来循环一对键值对中的值 forEach 对数组的每一个素执行一次提供的函数(不能使用return、break等中断循环),不改变原数组,无返回值undefined。 65.图片懒加载原理及实现 原理:懒加载其实就是延迟加载,是一种对网页性能优化的方式 实现的基本原理:通过判断当前图片的【offsetTop】值,来动态添加【img】标签,设置【img】标签的【src】属性。 66.物理像素和逻辑像素 物理像素:在同一个设备上,它的物理像素是固定的 逻辑像素:需要使用大约4个物理像素来显示一个CSS像素。 像素比:物理像素与逻辑像素之间的比例。 67.什么是proxy?如何实现? 答:proxy就是一个拦截器或者是过滤器,本质上就是在被代理的目标对象上加了一些事件处理行为。 const p = new Proxy(target目标对象, handler各属性的操作代理行为{}) 68.link和@import的区别? 答: link是xhtml标签,除了加载css外,还可以定义Rss等其他事物。@import属于css范畴只能加载css link引用css时在页面载入时,同时加载。@import需要网页完全载入以后加载 link是xhtml标签,无兼容问题。@import是在css2.1提供的,低版本浏览器不支持、 link支持使用javascript控制dom去改变css样式。@import不支持 69.cookie、localStorage和sessionStorage的区别? 答: cookie在设置的cookie过期时间之前一直有效即使关闭窗口和浏览器,在所有同源窗口中都是共享的 localStorage 长期有效 保存 除非手动清除,在所有同源窗口中都是共享的 sessionStorage 只要关闭浏览器就删除数据, 70.background-size有哪些取值,分别表示什么 ? 答: size:设置背景图片高度和宽度,第一个值设置宽度,第二个值设置高度,如果只给一个值,那么第二个值为auto(自动) percentage:将计算相对于背景定位区域的百分比。第一个值设置宽度,第二个值设置高度,如果只给一个值,那么第二个值为auto(自动) cover:此时会保持图像的纵横比并将图像缩放成将完全覆盖背景定位区域的最小大小 contain:此时会保持图像的纵横比并将图像缩放成将适合背景定位区域的最大大小 71.如何判断变量的数据类型? typeof(),instanceof(),constructor,Object.prototype.toString().call() 72.$nextTick的作用是什么 ? 用原生JS如何实现相同的功能 ? $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中更新后的 DOM。 用原生JS:setTimeout延时器 73.export的default有什么作用? export可以导出多个对象,export.default只能导出一个对象 export导出对象需要用{},exprot.default导出不需要{} export.default导出对象时不一定要用导出时的名字 74.如何判断对象为空对象 Object.keys() Object.getOwnPropertyNames() isEmptyObject() JSON.stringify(obj) == “{}” 75.xhtml和html的区别? XHTML 素必须被正确地嵌套。 XHTML 素必须被关闭。 标签名必须用小写字母。 XHTML 文档必须拥有根素。 76.小程序如何实现下拉刷新和下拉加载? 上拉加载:onReachBottom 下拉刷新:onPullDownRefresh 77.图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址 图片转换成base64格式的优缺点 1. 优点 (1)base64格式的图片是文本格式,占用内存小,转换后的大小比例大概为1/3,降低了资源服务器的消耗; (2)网页中使用base64格式的图片时,不用再请求服务器调用图片资源,减少了服务器访问次数。 (3)base64编码的字符串,更适合不同平台、不同语言的传输; (4)算法是编码, 不是压缩, 编码后只会增加字节数,但是算法简单, 几乎不会影响效率,算法可逆, 解码很方便, 不用于私密信息通信; (5)解码方便, 但毕竟编码了, 肉眼还是不能直接看出原始内容; 2. 缺点 (1)base64格式的文本内容较多,存储在数据库中增大了数据库服务器的压力; (2)网页加载图片虽然不用访问服务器了,但因为base64格式的内容太多,所以加载网页的速度会降低,可能会影响用户的体验。 (3)base64无法缓存,要缓存只能缓存包含base64的文件,比如js或者css,这比直接缓存图片要差很多,而且一般HTML改动比较频繁,所以等同于得不到缓存效益。 (4) 图片体积会更大(文件请求速度更慢),所以一般8-12kb以下的图片适合用base64 ———————————————— 版权声明:本文为CSDN博主「I-T枭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hahahhahahahha123456/article/details/114062181
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/23739.html