西宁 专业网站建设,芜湖市建设工程质量监督站官方网站,做购物网站能否生存,创建网站成功案例大厂面试题分享 面试题库后端面试题库 #xff08;面试必备#xff09; 推荐#xff1a;★★★★★地址#xff1a;前端面试题库html语义化的理解代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎…大厂面试题分享 面试题库后端面试题库 面试必备 推荐★★★★★地址前端面试题库html语义化的理解代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构有利于SEO: 爬虫根据标签来分配关键字的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息方便其他设备解析 如屏幕阅读器、盲人阅读器、移动设备等以有意义的方式来渲染页面便于团体的开发和维护: 语义化使代码更具有可读性让其他开发人员更加理解你的html结构减少差异化。遵循 W3C 标准的团队都遵循这个标准。常用的语义元素有header、nav、main、footer、article、section、asideiframeiframe称之为嵌入式框架、嵌入式框架可以把完整的网页内容嵌入到现有的网页中。优点重载页面时不需要重载整个页面只需要重载页面中的一个框架页可以使脚本、可以并行下载可以实现跨子域通信缺点会产生很多页面不容易管理调用外部页面需要额外调用 CSS给页面带来额外的请求次数iframe 会阻塞主页面的 onload 事件浏览器的后退按钮无效无法被一些搜索引擎索引识别多数小型的移动设备无法完全显示框架BOM和DOM分别是什么BOM是浏览器对象模型 用来获取或设置浏览器的属性、行为。例如新建窗口、获取屏幕分辨率、浏览器版本号等DOM是文档对象模型 用来获取或设置文档中标签的属性、例如获取或者设置input表单的value值CSS盒模型盒模型都是由四个部分组成的分别是margin、border、padding和content标准盒模型和IE盒模型的区别在于设置width和height时所对应的范围不同标准盒模型的width和height属性的范围只包含了contentIE盒模型的width和height属性的范围包含了border、padding和content。可以通过修改元素的box-sizing属性来改变元素的盒模型box-sizeing: content-box表示标准盒模型默认值box-sizeing: border-box表示IE盒模型怪异盒模型怎么让一个 div 水平垂直居中通过 verticle-align:middle 实现垂直居中通过父元素设置伪元素 :before 然后设置子元素 verticle-align:middle 实现垂直居中通过绝对定位实现垂直居中通过 transform 实现垂直居中使用弹性盒子居中BFC所谓 BFC指的是一个独立的布局环境BFC 内部的元素布局与外部互不影响。触发 BFC 的方式有很多常见的有设置浮动overflow 设置为 auto、scroll、hiddenpositon 设置为 absolute、fixed常见BFC的应用解决浮动元素令父元素高度坍塌的问题解决非浮动元素被浮动元素覆盖问题解决外边距垂直方向重合问题JS 的基本数据类型有哪些基本数据类型和引用数据类型的区别基本数据类型JavaScript共有八种数据类型分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt这些数据可以分为原始数据类型和引用数据类型栈原始数据类型Undefined、Null、Boolean、Number、String堆引用数据类型对象、数组和函数基本数据类型和引用数据类型的区别访问方式:原始值访问到的是值引用值访问到的是引用地址 (js不允许直接访问保存在堆中的对象、首先得到在堆中的地址然后按照这个地址去获得对象的值)比较方式:原始值比较的是值引用值: 比较的是引用的地址变量赋值:原始值赋值赋值的是新值与原来互不影响引用值赋值赋值的是地址指向原值所在堆内存中的地址动态属性:原始值赋值的是值引用值赋值的是地址ES6 新增哪些东西箭头函数字符串模板支持模块化import、export类class、constructor、extendslet、const 关键字新增一些数组、字符串等内置构造函数方法例如 Array.from、Array.of 、Math.sign、Math.trunc 等新增一些语法例如扩展操作符、解构、函数默认参数等新增一种基本数据类型 Symbol新增元编程相关例如 proxy、ReflectSet 和 Map 数据结构PromiseGenerator 生成器let const var 的区别什么是块级作用域如何用var 定义的变量是函数作用域没有块的概念可以跨块访问, 不能跨函数访问有变量提升。let 定义的变量只能在块作用域里访问不能跨块访问也不能跨函数访问无变量提升不可以重复声明。const 用来定义常量使用时必须初始化(即必须赋值)只能在块作用域里访问而且不能修改无变量提升不可以重复声明。var不存在暂时性死区,let和const存在暂时性死区let和const创建的全局变量没有给window设置相应的属性暂时性死区使用 let / const 命令声明变量之前该变量都是不可用的箭头函数与普通函数的区别箭头函数没有自己的this、会捕获其所在的上下文的this值作为自己的this值箭头函数继承来的this指向永远不会改变call()、apply()、bind()等方法不能改变箭头函数中this的指向箭头函数是匿名函数不能作为构造函数不能使用new箭头函数没有自己的arguments箭头函数没有prototype原型箭头函数不能用作Generator函数不能使用yeild关键字bindapplycall三者的区别三者都可以改变函数的this对象指向三者第一个参数都是this要指向的对象如果如果没有这个参数或参数为undefined或null则默认指向全局window三者都可以传参但是apply是数组而call是参数列表且apply和call是一次性传入参数而bind可以分为多次传入bind是返回绑定this之后的函数apply、call 则是立即执行是否了解 JavaScript 中的包装类型包装对象 : 就是当基本类型以对象的方式去使用时JavaScript 会转换成对应的包装类型相当于 new 一个对象内容和基本类型的内容一样然后当操作完成再去访问的时候这个临时对象会被销毁然后再访问时候就是 undefined代码理解:var str hello;
str.number 10; //假设我们想给字符串添加一个属性 number 后台会有如下步骤
(var _str newString(hello); // 1 找到对应的包装对象类型然后通过包装对象创建出一个和基本类型值相同的对象_str.number 10; // 2 通过这个对象调用包装对象下的方法 但结果并没有被任何东西保存_str null; // 3 这个对象又被销毁
)
console.log(str.number); // undefined 当执行到这一句的时候因为基本类型本来没有属性后台又会重新重复上面的步骤
(var str newString(hello);// 1 找到基本包装对象然后又新开辟一个内存创建一个值为 hello 对象str.number undefined;// 2 因为包装对象下面没有 number 这个属性所以又会重新添加因为没有值所以值是未定义;然后弹出结果str null; // 3 这个对象又被销毁
)
复制代码JS 中如何进行数据类型的转换类型转换可以分为两种隐性转换和显性转换显性转换主要分为三大类数值类型、字符串类型、布尔类型三大类的原始类型值的转换规则我就不一一列举了更多详情文章链接juejin.cn/post/695617…数值类型引用类型转换Number({a: 1}) // NaNNumber([1, 2, 3]) // NaNNumber([5]) // 5第一步调用对象自身的valueOf方法。如果返回原始类型的值则直接对该值使用Number函数不再进行后续步骤。第二步如果valueOf方法返回的还是对象则改为调用对象自身的toString方法。如果toString方法返回原始类型的值
则对该值使用Number函数不再进行后续步骤。第三步如果toString方法返回的是对象就报错。补充一点valueOf和toString方法都是可以自定义的
复制代码字符串类型引用类型转换String({a: 1}) // [object Object]String([1, 2, 3]) // 1,2,3String方法背后的转换规则与Number方法基本相同只是互换了valueOf方法和toString方法的执行顺序。
复制代码隐性转换类型转换前转换后number44string11string0booleantrue1booleanfalse0undefinedundefinedNaNnullnull0详情看上方文章链接闭包闭包是指有权访问另一个函数作用域中的变量的函数 ———— 《JavaScript高级程序设计》闭包用途能够访问函数定义时所在的词法作用域阻止其被回收私有变量化模拟块级作用域创建模块闭包缺点闭包调用函数的变量并且这个变量在函数执行完之后不能释放会导致函数的变量一直保存在内存中过多的闭包可能会导致内存泄漏。解决变量设置成null原型和原型链原型每个对象都有一个 proto 属性该属性指向自己的原型对象每个构造函数都有一个 prototype 属性该属性指向实例对象的原型对象原型对象里的 constructor 指向构造函数本身原型链当试图访问一个对象的属性时它不仅仅在该对象上搜寻还会搜寻该对象的原型以及该对象的原型的原型依次层层向上搜索直到找到一个名字匹配的属性或到达原型链的末尾null作用域和作用域链的理解作用域1全局作用域最外层函数和最外层函数外面定义的变量拥有全局作用域所有未定义直接赋值的变量自动声明为全局作用域所有window对象的属性拥有全局作用域全局作用域有很大的弊端过多的全局作用域变量会污染全局命名空间容易引起命名冲突。2函数作用域函数作用域声明在函数内部的变零一般只有固定的代码片段可以访问到作用域是分层的内层作用域可以访问外层作用域反之不行3块级作用域使用ES6中新增的let和const指令可以声明块级作用域块级作用域可以在函数中创建也可以在一个代码块中的创建由{ }包裹的代码片段let和const声明的变量不会有变量提升也不可以重复声明在循环中比较适合绑定块级作用域这样就可以把声明的计数器变量限制在循环内部。作用域链在当前作用域中查找所需变量但是该作用域没有这个变量那这个变量就是自由变量。如果在自己作用域找不到该变量就去父级作用域查找依次向上级作用域查找直到访问到window对象就被终止这一层层的关系就是作用域链。作用域链有一个非常重要的特性那就是作用域中的值是在函数创建的时候就已经被存储了是静态的。防抖和节流我们在平时开发的时候会有很多场景会频繁触发事件比如说搜索框实时发请求onmousemove、resize、onscroll 等有些时候我们并不能或者不想频繁触发事件这时候就应该用到函数防抖和函数节流。函数防抖(debounce)指的是短时间内多次触发同一事件只执行最后一次或者只执行最开始的一次中间的不执行。函数节流(throttle)指连续触发事件但是在 n 秒中只执行一次函数。即 2n 秒内执行 2 次... 。节流如字面意思会稀释函数的执行频率。区别在于防抖动是将多次执行变为最后一次执行节流是将多次执行变成每隔一段时间执行宏任务和微任务常见的宏任务有setTimeout、setInterval、requestAnimationFrame、script等。常见的微任务有new Promise( ).then(回调)、MutationObserver 等。宏任务和微任务的执行流程总结起来就是js在调用时优先取出微任务并且在执行过程中如果创建了新的作业则放在本次执行完后紧接着调用微任务执行完成后再取出宏任务执行哪些情况会导致内存泄漏以下四种情况会造成内存的泄漏意外的全局变量 由于使用未声明的变量而意外的创建了一个全局变量而使这个变量一直留在内存中无法被回收。被遗忘的计时器或回调函数 设置了 setInterval 定时器而忘记取消它如果循环函数有对外部变量的引用的话那么这个变量会被一直留在内存中而无法被回收。脱离 DOM 的引用 获取一个 DOM 元素的引用而后面这个元素被删除由于一直保留了对这个元素的引用所以它也无法被回收。闭包 不合理的使用闭包从而导致某些变量一直被留在内存当中。请介绍一下 JavaScript 中的垃圾回收站机制JavaScript 具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。JavaScript 常见的垃圾回收方式标记清除、引用计数方式。标记清除方式工作原理当变量进入环境时将这个变量标记为“进入环境”。当变量离开环境时则将其标记为“离开环境”。标记“离开环境”的就回收内存。工作流程垃圾回收器在运行的时候会给存储在内存中的所有变量都加上标记去掉环境中的变量以及被环境中的变量引用的变量的标记被加上标记的会被视为准备删除的变量垃圾回收器完成内存清理工作销毁那些带标记的值并回收他们所占用的内存空间。引用计数方式工作原理跟踪记录每个值被引用的次数。工作流程声明了一个变量并将一个引用类型的值赋值给这个变量这个引用类型值的引用次数就是 1同一个值又被赋值给另一个变量这个引用类型值的引用次数加 1当包含这个引用类型值的变量又被赋值成另一个值了那么这个引用类型值的引用次数减 1当引用次数变成 0 时说明没办法访问这个值了当垃圾收集器下一次运行时它就会释放引用次数是 0 的值所占的内存。防抖节流是什么函数防抖(debounce)指的是短时间内多次触发同一事件只执行最后一次或者只执行最开始的一次中间的不执行函数节流(throttle)指连续触发事件但是在 n 秒中只执行一次函数。即 2n 秒内执行 2 次...深拷贝和浅拷贝浅拷贝只是拷贝了基本类型的数据而引用类型数据复制后也是会发生引用我们把这种拷贝叫做浅拷贝浅复制 浅拷贝只复制指向某个对象的指针而不复制对象本身新旧对象还是共享同一块内存。深拷贝在堆中重新分配内存并且把源对象所有属性都进行新建拷贝以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象拷贝后的对象与原来的对象是完全隔离互不影响。HTTP状态码状态码的类别类别原因描述1xxInformational(信息性状态码)接受的请求正在处理2xxSuccess(成功状态码)请求正常处理完毕3xxRedirection(重定向状态码)需要进行附加操作一完成请求4xxClient Error (客户端错误状态码)服务器无法处理请求5xxServer Error(服务器错误状态码)服务器处理请求出错Http和Https区别HTTP 的URL 以http:// 开头而HTTPS 的URL 以https:// 开头HTTP 是不安全的而 HTTPS 是安全的HTTP 标准端口是80 而 HTTPS 的标准端口是443在OSI 网络模型中HTTP工作于应用层而HTTPS 的安全传输机制工作在传输层HTTP 无法加密而HTTPS 对传输的数据进行加密HTTP无需证书而HTTPS 需要CA机构wosign的颁发的SSL证书GET 和 POST 的区别从 http 协议的角度来说GET 和 POST 它们都只是请求行中的第一个单词除了语义不同其实没有本质的区别。之所以在实际开发中会产生各种区别主要是因为浏览器的默认行为造成的。受浏览器的影响在实际开发中GET 和 POST 有以下区别浏览器在发送 GET 请求时不会附带请求体GET 请求的传递信息量有限适合传递少量数据POST 请求的传递信息量是没有限制的适合传输大量数据。GET 请求只能传递 ASCII 数据遇到非 ASCII 数据需要进行编码POST 请求没有限制大部分 GET 请求传递的数据都附带在 path 参数中能够通过分享地址完整的重现页面但同时也暴露了数据若有敏感数据传递不应该使用 GET 请求至少不应该放到 path 中刷新页面时若当前的页面是通过 POST 请求得到的则浏览器会提示用户是否重新提交。若是 GET 请求得到的页面则没有提示。GET 请求的地址可以被保存为浏览器书签POST 不可以浏览器渲染机制、重绘、重排网页生成过程HTML被HTML解析器解析成DOM 树css则被css解析器解析成CSSOM 树结合DOM树和CSSOM树生成一棵渲染树(Render Tree)生成布局flow即将所有渲染树的所有节点进行平面合成将布局绘制paint在屏幕上重排(也称回流): 当DOM的变化影响了元素的几何属性DOM对象的位置和尺寸大小浏览器需要重新计算元素的几何属性将其安放在界面中正确的位置这个过程就叫回流。触发添加或者删除可见的DOM元素元素尺寸改变——边距、填充、边框、宽度和高度重绘 当一个元素的外观发生了改变但没有改变布局重新把元素外观绘制出来的过程叫做重绘触发改变元素的color、background、box-shadow属性url按下回车之后发生了什么1 解析域名
2 缓存判断 --有资源直接返回、否则向服务器发起新的请求
3DNS解析
4 获取MAC地址
5 会把请求的内容存储到dns
6TCP三次握手
7HTTPS握手
8 返回数据
9TCP四次挥手
复制代码cookie、sessionStorage、localStorage的区别cookie 可以设置失效时间localStorage 除非手动清除否则永久保存sessionStorage 尽在当前网页有效关闭页面就被清除cookie储存大小是4klocalStorage和sessionStorage是5M请求时cookie自动携带HTTP头部中localStorage和sessionStorage仅在浏览器保存不参与服务器通信同源策略浏览器有一个重要的安全策略称之为同源策略其中协议、端口号、域名必须一致称之为同源两个源不同称之为跨源或跨域同源策略是指若页面的源和页面运行过程中加载的源不一致时出于安全考虑浏览器会对跨域的资源访问进行一些限制如何解决跨越问题jsonp(利用script标签没有跨域限制的漏洞实现。缺点只支持GET请求)CORS(设置Access-Control-Allow-Origin指定可访问资源的域名Node中间件代理Nginx反向代理谈谈你对 TCP 三次握手和四次挥手的理解TCP 协议通过三次握手建立可靠的点对点连接具体过程是首先服务器进入监听状态然后即可处理连接第一次握手建立连接时客户端发送 syn 包到服务器并进入 SYN_SENT 状态等待服务器确认。在发送的包中还会包含一个初始序列号 seq。此次握手的含义是客户端希望与服务器建立连接。第二次握手服务器收到 syn 包然后回应给客户端一个 SYNACK 包此时服务器进入 SYN_RCVD 状态。此次握手的含义是服务端回应客户端表示已收到并同意客户端的连接请求。第三次握手客户端收到服务器的 SYN 包后向服务器再次发送 ACK 包并进入 ESTAB_LISHED 状态。最后服务端收到客户端的 ACK 包于是也进入 ESTAB_LISHED 状态至此连接建立完成当需要关闭连接时需要进行四次挥手才能关闭Client 向 Server 发送 FIN 包表示 Client 主动要关闭连接然后进入 FIN_WAIT_1 状态等待 Server 返回 ACK 包。此后 Client 不能再向 Server 发送数据但能读取数据。Server 收到 FIN 包后向 Client 发送 ACK 包然后进入 CLOSE_WAIT 状态此后 Server 不能再读取数据但可以继续向 Client 发送数据。Client 收到 Server 返回的 ACK 包后进入 FIN_WAIT_2 状态等待 Server 发送 FIN 包。Server 完成数据的发送后将 FIN 包发送给 Client然后进入 LAST_ACK 状态等待 Client 返回 ACK 包此后 Server 既不能读取数据也不能发送数据。Client 收到 FIN 包后向 Server 发送 ACK 包然后进入 TIME_WAIT 状态接着等待足够长的时间2MSL以确保 Server 接收到 ACK 包最后回到 CLOSED 状态释放网络资源。Server 收到 Client 返回的 ACK 包后便回到 CLOSED 状态释放网络资源。大厂面试题分享 面试题库后端面试题库 面试必备 推荐★★★★★地址前端面试题库