Web前端面试题大全及详细答案(实战完整版)_第1页
Web前端面试题大全及详细答案(实战完整版)_第2页
Web前端面试题大全及详细答案(实战完整版)_第3页
Web前端面试题大全及详细答案(实战完整版)_第4页
Web前端面试题大全及详细答案(实战完整版)_第5页
已阅读5页,还剩11页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web前端面试题大全及详细答案(实战完整版)本次面试题汇总整理前端面试高频考点,涵盖HTML、CSS、JavaScript、ES6+、Vue、React、浏览器原理、网络协议、工程化、性能优化、兼容性、实战场景题等核心模块,答案贴合一线企业面试标准,通俗易懂、落地性强,无空洞理论。一、HTML核心面试题1、HTML5新增特性有哪些?详细答案:1.语义化标签:新增header、nav、main、section、article、aside、footer等标签,替代传统div布局,让页面结构更清晰,利于搜索引擎抓取和代码维护。2.媒体标签:video视频标签、audio音频标签,无需插件即可直接播放音视频,原生支持播放、暂停、进度控制等功能。3.表单增强:新增input类型(email、tel、number、date、range、url等),新增表单属性required、placeholder、autofocus、autocomplete,提升表单校验和用户体验。4.本地存储:新增localStorage(永久存储,手动清除)、sessionStorage(会话存储,页面关闭失效),替代传统cookie的存储短板。5.画布与绘图:canvas画布,支持JS动态绘制图形、动画、图表,常用于数据可视化、小游戏开发。6.其他能力:SVG矢量图形、拖拽API、地理位置API、WebWorker多线程、WebSocket长连接等。2、语义化标签的好处是什么?详细答案:1.结构清晰:代码可读性更高,团队协作时能快速看懂页面模块结构,区分头部、导航、主体、侧边栏、底部等区域。2.利于SEO:搜索引擎爬虫可通过语义标签精准识别页面内容权重,提升网页搜索排名。3.适配无障碍设备:屏幕阅读器可精准解析页面结构,方便视力障碍用户浏览网页。4.兼容性稳定:所有现代浏览器均支持语义化标签,老旧浏览器可通过简单JS兼容,无使用门槛。3、cookie、sessionStorage、localStorage的区别?详细答案:1.存储时长:cookie可设置过期时间,默认浏览器关闭失效;sessionStorage仅当前会话有效,页面关闭/标签页关闭立即清空;localStorage永久存储,除非手动清除缓存或代码删除。2.存储大小:cookie容量最小,仅4KB左右;sessionStorage和localStorage容量一致,约5MB。3.请求携带:cookie每次HTTP请求都会自动携带到服务端,可用于身份校验;sessionStorage、localStorage仅本地存储,不会参与网络请求。4.作用域:cookie可跨子域名共享;sessionStorage严格隔离标签页,不同标签页无法共享;localStorage同域名下所有页面可共享。5.用途:cookie多用于登录态、临时校验信息;localStorage用于长期本地数据缓存;sessionStorage用于临时会话数据,避免页面刷新丢失。4、HTML行内元素、块级元素、行内块元素区别?详细答案:1.块级元素:独占一行,可设置宽高、内外边距,默认宽度100%父级宽度。常见:div、p、h1-h6、ul、li、section。2.行内元素:不独占一行,同行排列,无法设置宽高、上下内外边距,宽度由内容撑开。常见:span、a、em、i、b。3.行内块元素:兼具两者特点,同行排列,可设置宽高、内外边距。常见:img、input、button、textarea。转换方式:通过display属性切换,block(块级)、inline(行内)、inline-block(行内块)。二、CSS核心面试题1、CSS选择器优先级及权重规则?详细答案:优先级从高到低排序:!important>行内样式>ID选择器>类/伪类/属性选择器>标签选择器>通配符选择器>继承样式权重计算规则(不叠加进位,只对比层级):1.!important:权重最高,强制覆盖所有样式,开发中尽量少用,避免样式难以维护;2.行内样式:1000;3.ID选择器:0100;4.类、伪类、属性选择器:0010;5.标签、伪元素选择器:0001;6.通配符、继承样式:0000。核心规则:权重数值大的样式优先生效,权重相同时,后写的样式覆盖先写的。2、盒模型详解?标准盒模型和怪异盒模型区别?详细答案:盒模型是CSS布局的核心,所有元素都由内容区、内边距、边框、外边距四部分组成。1.标准盒模型(box-sizing:content-box):元素实际宽度=width+padding+border+margin。width仅代表内容区宽度,设置内边距和边框会撑大元素整体尺寸。2.怪异盒模型(IE盒模型,box-sizing:border-box):元素实际宽度=width+margin。width包含内容区、内边距、边框,设置padding和border不会改变元素整体尺寸,布局更稳定,开发中默认使用此模式。3、水平垂直居中的常用方法?详细答案(适配不同场景,实战常用):1.Flex布局(最常用,兼容IE10+):父元素设置display:flex;justify-content:center;align-items:center;无需设置子元素样式,适配单行、多行、不定宽高元素。2.绝对定位+transform(不定宽高通用):父元素relative,子元素absolute;top:50%;left:50%;transform:translate(-50%,-50%);适配所有场景,无宽高限制。3.绝对定位+margin负值(固定宽高):子元素设置固定宽高,top/left:50%,margin-top、margin-left为宽高一半的负值。4.Grid布局(极简):父元素display:grid;place-items:center;代码最简洁,现代项目首选。4、BFC是什么?触发条件及作用?详细答案:BFC即块级格式化上下文,是浏览器渲染页面的独立渲染区域,内部元素布局不会影响外部元素,外部也不会影响内部。触发BFC的常见条件:1.根元素html;2.浮动元素(float不为none);3.绝对定位、固定定位元素;4.overflow不为visible(hidden、auto、scroll);5.display为inline-block、flex、grid。BFC核心作用:1.清除浮动:解决子元素浮动导致父元素高度塌陷问题;2.防止外边距塌陷:解决相邻块级元素margin重叠问题;3.实现自适应布局:BFC区域不会与浮动元素重叠,可实现左右自适应布局。5、Flex布局常用属性总结?详细答案:Flex是弹性布局,一维布局方案,适配移动端、自适应布局,分为容器属性和子项属性。容器(父元素)常用属性:1.display:flex;开启弹性布局;2.flex-direction:主轴方向(row横向、column纵向);3.justify-content:主轴对齐方式(center居中、space-between两端对齐、space-around均分);4.align-items:交叉轴对齐方式(center居中、stretch拉伸);5.flex-wrap:是否换行(wrap自动换行、nowrap不换行)。子项(子元素)常用属性:1.flex-grow:放大比例,默认0(不放大);2.flex-shrink:缩小比例,默认1(自动缩小);3.flex-basis:基础宽度,优先级高于width;4.flex:1;简写,自动占满剩余空间;5.align-self:单独设置自身交叉轴对齐方式。6、CSS动画和过渡的区别?详细答案:1.transition过渡:简单状态切换动画,仅支持「初始状态-结束状态」两个状态,需要触发条件(hover、点击、class切换),无法自动播放、循环,适合简单交互效果。2.animation动画:支持多关键帧动画(@keyframes),可设置自动播放、循环、延迟、速度曲线、暂停,无需触发即可执行,适合复杂连续动画(轮播、加载动画、动态特效)。三、JavaScript基础面试题1、JS数据类型有哪些?如何判断数据类型?详细答案:JS分为8种数据类型,包含7种基本类型+1种引用类型:基本类型(值类型):String、Number、Boolean、Undefined、Null、Symbol、BigInt;引用类型(引用地址):Object(包含数组、对象、函数、正则等)。常用判断方法:1.typeof:可判断基本类型(null除外,typeofnull返回object),无法区分数组、普通对象,适合快速判断基础类型;2.instanceof:判断引用类型,检测构造函数的prototype是否出现在实例原型链上,可区分数组和对象;3.Ototype.toString.call():最精准的判断方式,可区分所有数据类型,返回[object类型名]。2、null和undefined的区别?详细答案:1.undefined:变量已声明但未赋值、对象不存在的属性、函数无返回值,默认值为undefined,代表「未定义」;2.null:手动赋值的空值,代表「空对象」,是主动设置的空状态;3.类型区别:undefined属于Undefined类型,null属于Null类型;4.运算区别:undefined+数字=NaN,null+数字=对应数字(null视为0);5.使用场景:变量初始化未知值用undefined,对象清空、接口空数据用null。3、==和===的区别?详细答案:1.==松散相等:先进行隐式类型转换,类型不同则转换为相同类型后再对比值,只判断值是否相等;常见规则:数字和字符串对比,字符串转数字;布尔值和其他类型对比,布尔转数字;null==undefined为true。2.===严格相等:先判断类型,类型不一致直接返回false,类型一致再判断值,不做任何类型转换。开发规范:优先使用===,避免隐式转换带来的bug,仅在判断null和undefined时可用==。4、原型和原型链详解?详细答案:1.原型prototype:每个构造函数都有prototype属性,指向一个原型对象,用于存放公共方法和属性,所有实例可共享原型上的内容,节省内存。2.原型__proto__:每个实例对象都有__proto__属性,指向创建它的构造函数的prototype原型对象。3.原型链:当访问对象的属性/方法时,自身没有则向上查找__proto__指向的原型,层层向上查找,直到找到或查到Ototype.__proto__(null)为止,这条查找链路就是原型链。核心作用:实现属性和方法的继承,所有JS对象都继承自Object原型。5、this指向问题总结?详细答案:this指向由调用方式决定,和定义位置无关,核心规则:1.普通函数调用(独立调用):this指向window(浏览器)/global(node);2.对象方法调用:this指向调用该方法的对象;3.构造函数调用:this指向new创建的实例对象;4.箭头函数:无自身this,继承外层作用域的this,且无法修改;5.bind/call/apply:手动修改this指向,绑定指定对象。6、call、apply、bind的区别?详细答案:三者均用于修改函数this指向,核心区别在参数和执行方式:1.call:立即执行函数,参数为逐个罗列(thisArg,arg1,arg2...);2.apply:立即执行函数,参数为数组/伪数组(thisArg,[arg1,arg2]);3.bind:不立即执行,返回一个绑定this的新函数,可后续调用,参数可分批传递。实战场景:参数个数确定用call,参数为数组用apply,需要延时执行、绑定this不立即调用用bind。7、闭包是什么?优缺点及使用场景?详细答案:闭包:函数嵌套函数,内层函数访问外层函数的变量,外层函数执行结束后,内层函数依然可以持有外层变量,形成闭包。形成条件:函数嵌套、内层引用外层变量、外层函数执行完毕。优点:1.保护私有变量,实现模块化私有作用域;2.变量常驻内存,可保存状态;3.实现柯里化、防抖节流等高阶逻辑。缺点:1.变量不会被垃圾回收,容易造成内存占用过高;2.滥用闭包会导致代码可读性降低、调试困难。常用场景:防抖、节流、定时器封装、私有变量、循环绑定事件保存索引。8、JS垃圾回收机制?详细答案:JS是自动垃圾回收语言,无需手动管理内存,核心回收两种机制:1.标记清除(主流):浏览器遍历所有变量,标记可达变量,清除无标记、无法访问的变量,释放内存。主要回收全局、函数执行后的无用变量。2.引用计数:统计变量被引用的次数,引用次数为0时立即回收。缺点是无法解决循环引用问题,现代浏览器已不再单独使用。内存泄漏常见场景:全局变量过多、闭包滥用、定时器未清除、事件监听未移除、循环引用。四、ES6+高频面试题1、let、const、var的区别?详细答案:1.变量提升:var存在变量提升,声明前可访问(值为undefined);let、const无变量提升,存在暂时性死区,声明前无法访问。2.作用域:var仅支持全局、函数作用域,无块级作用域;let、const支持块级作用域({}、if、for内部隔离)。3.重复声明:var允许重复声明变量;let、const禁止重复声明,报错。4.赋值规则:var、let可修改赋值;const声明常量,必须初始化赋值,且基本类型不可修改,引用类型可修改内部属性(仅禁止地址修改)。开发规范:优先使用const,变量需要修改再用let,禁用var。2、箭头函数和普通函数的区别?详细答案:1.this指向:普通函数this由调用方式决定;箭头函数无独立this,继承外层作用域this,且永久绑定无法修改。2.arguments:箭头函数无arguments对象,可使用剩余参数...args替代;普通函数有arguments。3.构造函数:箭头函数不能作为构造函数,无法new实例;普通函数可作为构造函数。4.原型:箭头函数无prototype原型属性;普通函数有prototype。5.适用场景:箭头函数适合回调、匿名函数;不适合DOM事件、对象方法、构造函数。3、Promise是什么?三种状态及优缺点?详细答案:Promise是异步编程解决方案,用于解决回调地狱问题,统一异步代码写法,让异步逻辑更扁平化。三种状态(不可逆):1.pending等待态:初始状态,未完成、未失败;2.fulfilled成功态:异步执行成功,调用resolve后切换;3.rejected失败态:异步执行失败,调用reject后切换。优点:解决回调地狱、支持链式调用、统一异步错误处理、状态不可逆。缺点:一旦创建立即执行,无法取消;无法获取中间执行进度。4、Promise常用方法?详细答案:1.Promise.then():接收成功结果,可链式调用;2.Promise.catch():捕获异步错误、then中的错误;3.Promise.finally():无论成功失败都会执行,常用于关闭加载状态;4.Promise.all():所有Promise成功才返回成功,任意一个失败立即失败,适合并行异步请求;5.Promise.race():竞速模式,第一个完成的Promise结果作为最终结果;6.Promise.allSettled():等待所有Promise执行完毕,返回所有结果状态(成功/失败),无报错;7.Promise.resolve()/reject():快速创建成功/失败的Promise实例。5、async/await原理及作用?详细答案:async/await是Promise的语法糖,让异步代码写法同步化,极大提升代码可读性。核心规则:1.async修饰函数,函数返回值自动包装为Promise;2.await只能在async函数内部使用,用于等待Promise执行完成,阻塞后续代码;3.await等待成功状态,获取resolve结果;失败会抛出异常,需要try/catch捕获错误。优势:彻底解决回调地狱,代码结构清晰,便于调试和维护,是目前主流的异步写法。6、解构赋值、扩展运算符的用法?详细答案:解构赋值:快速从数组、对象中提取值,简化赋值代码。1.对象解构:可按需提取属性,支持默认值、别名;2.数组解构:按位置取值,支持快速交换变量。扩展运算符...:1.展开数组/对象,实现浅拷贝、数组合并、对象合并;2.剩余参数:收集剩余参数,替代arguments;注意:仅实现一层浅拷贝,深层引用类型无法拷贝。五、浏览器原理与网络面试题1、从输入网址到页面渲染完成的全过程?详细答案(面试标准版):1.DNS解析:将域名解析为服务器IP地址,先查本地缓存,再递归查询DNS服务器;2.TCP三次握手:与服务器建立可靠TCP连接,确保数据传输稳定;3.发送HTTP请求:浏览器组装请求报文,发送请求;4.服务器处理响应:服务器接收请求、处理逻辑,返回响应报文(状态码、响应头、响应体);5.浏览器解析资源:解析HTML生成DOM树、解析CSS生成CSSOM树;6.生成渲染树:结合DOM树和CSSOM树,生成可视节点的渲染树;7.布局(回流):计算每个节点的位置、大小;8.绘制(重绘):根据布局结果,绘制页面像素信息;9.TCP四次挥手:关闭连接,页面加载完成。2、回流和重绘的区别?如何优化?详细答案:1.重绘:元素样式改变(颜色、背景、透明度),不改变宽高和位置,仅重新绘制像素,开销较小;2.回流(重布局):元素宽高、位置、布局改变,导致整个页面重新计算布局,开销极大,会触发重绘;回流必触发重绘,重绘不一定触发回流。优化方案:1.批量修改样式,避免频繁操作DOM;2.使用class统一切换样式,不逐行修改style;3.脱离文档流处理动画(绝对定位、transform);4.开启硬件加速(transform、opacity属性不会触发回流);5.虚拟列表优化长列表渲染。3、HTTP1.0、HTTP1.1、HTTP2.0区别?详细答案:1.HTTP1.0:短连接,每次请求都需要建立/关闭TCP连接,无缓存机制,请求效率极低;2.HTTP1.1:默认长连接,连接可复用;新增缓存策略(强缓存、协商缓存);支持断点续传;但存在队头阻塞,同一域名下并行请求数量有限;3.HTTP2.0:二进制传输,数据体积更小、更快;支持多路复用,一个连接可并行多个请求,彻底解决队头阻塞;头部压缩,减少请求体积;支持服务器主动推送资源。4、HTTPS和HTTP区别?HTTPS加密原理?详细答案:区别:1.HTTP明文传输,不安全,端口80;HTTPS加密传输,安全,端口443;2.HTTPS需要CA证书认证,HTTP无需证书;3.HTTPS握手过程稍慢,有轻微性能损耗,HTTP传输更快。加密原理:HTTPS=HTTP+SSL/TLS加密,结合对称加密和非对称加密:1.非对称加密:客户端和服务端传输「对称密钥」,防止密钥被窃取;2.对称加密:传输正式业务数据,加密速度快、效率高;3.证书校验:通过CA证书验证服务器合法性,防止中间人攻击。5、浏览器缓存机制(强缓存、协商缓存)?详细答案:浏览器缓存分为强缓存和协商缓存,优先级:强缓存>协商缓存,目的是减少请求、提升页面加载速度。1.强缓存:无需发送请求,直接读取本地缓存,状态码200(frommemorycache/fromdiskcache)控制字段:Cache-Control(max-age=时间,优先级高)、Expires(绝对时间,兼容性好)。2.协商缓存:强缓存失效后,发送请求携带缓存标识,服务器对比判断是否可用缓存控制字段:-Last-Modified/If-Modified-Since:根据文件修改时间判断;-ETag/If-None-Match:根据文件唯一哈希标识判断,精度更高、优先级更高。协商缓存命中返回304状态码,使用本地缓存;未命中返回200和新资源。六、Vue核心面试题(Vue2/Vue3通用高频)1、Vue双向绑定原理?Vue2和Vue3区别?详细答案:双向绑定核心:数据驱动视图,视图更新同步数据,核心是数据劫持+发布订阅模式。Vue2原理:通过Object.defineProperty()劫持对象的getter/setter,监听数据读取和修改,数据变化时通知订阅者更新视图。Vue2缺陷:无法监听对象新增/删除属性、无法监听数组下标修改、数组长度修改,需要借助Vue.set、$set解决。Vue3原理:使用Proxy代理整个对象,可监听对象新增、删除、数组下标、数组长度变化,支持全量数据监听,无需额外API弥补缺陷。2、Vue生命周期及常用钩子?详细答案:生命周期是组件从创建、挂载、更新、销毁的完整流程,常用钩子:1.created:组件创建完成,数据、方法已初始化,未挂载DOM,无法操作DOM,适合发起初始接口请求;2.mounted:组件DOM挂载完成,可操作DOM、初始化定时器、监听事件;3.updated:数据更新、DOM重新渲染完成后触发;4.beforeDestroy(Vue2)/beforeUnmount(Vue3):组件销毁前,清除定时器、监听、事件,防止内存泄漏;5.destroyed/unmounted:组件销毁完成。3、Vue组件通信方式?详细答案(全场景覆盖):1.父子通信:父传子props,子传父$emit;2.兄弟/跨级通信:Vue2事件总线($bus)、Vue3mitt;3.多层级跨级:provide/inject(依赖注入),祖辈向后代穿透传值;4.全局状态管理:Vuex(Vue2)、Pinia(Vue3),适合全局共享状态(登录态、全局配置);5.$parent/$children、ref:直接获取组件实例,适合简单场景;6.本地存储:localStorage、sessionStorage,永久跨组件共享。4、v-for和v-if优先级?为什么不建议一起使用?详细答案:Vue2中v-for优先级高于v-if,Vue3中v-if优先级更高。不建议一起使用的原因:1.Vue2:先循环渲染所有节点,再判断条件删除无用节点,造成无效循环,性能浪费;2.Vue3:条件不成立时直接不循环,看似优化,但逻辑混乱,不利于代码维护。优化方案:外层用template包裹,v-if在外、v-for在内;或提前过滤数组数据,减少渲染数量。5、Vue虚拟DOM和diff算法?详细答案:虚拟DOM:用JS对象模拟真实DOM结构,真实DOM操作开销大,通过操作JS对象更新视图,减少DOM操作次数,提升性能。diff算法:数据更新后,对比新旧虚拟DOM的差异,只更新变化的DOM节点,而非全量重渲染,实现精准更新。核心规则:同层比较,不跨层级对比;通过key标识节点唯一性,快速匹配新旧节点。key的作用:唯一标识节点,提升diff对比效率,避免节点复用错乱;禁止使用索引作为key(会导致列表更新错乱、渲染异常)。6、Vuecomputed和watch区别?详细答案:1.功能定位:computed是计算属性,依赖缓存,基于已有数据计算新数据;watch是监听属性,监听数据变化执行回调逻辑;2.缓存特性:computed有缓存,依赖数据不变时,多次读取不重复计算;watch无缓存,数据变化立即执行;3.适用场景:computed适合简单数据计算、筛选、拼接;watch适合异步操作、复杂逻辑、数据变化后续处理;4.执行时机:computed页面加载自动执行;watch默认数据变化才执行,可开启immediate立即执行。七、前端工程化与性能优化1、webpack核心概念?详细答案:webpack是前端模块化打包工具,核心五大概念:1.入口entry:打包的入口文件,指定项目构建起点;2.输出output:打包后的文件输出路径、文件名;3.loader:处理非JS文件(css、less、图片、字体),转换为webpack可识别的模块;4.plugin:插件,扩展webpack功能(打包压缩、html生成、环境变量注入);5.模式mode:development开发模式(不压缩、热更新)、production生产模式(压缩代码、优化打包)。2、前端性能优化方案(面试最全版)?详细答案:1.加载优化:-资源压缩:JS、CS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论