版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web工程师面试题及详细答案(实操版)本次面试题贴合一线企业真实招聘场景,适配初级、中级Web前端工程师岗位,涵盖HTML、CSS、JavaScript、浏览器原理、网络协议、工程化、性能优化、实战场景问题八大模块,答案偏向工作实操,摒弃理论化空洞表述。一、HTML基础模块1、HTML5新增哪些常用标签?实际项目中常用的有哪些?参考答案:HTML5新增了语义化标签、媒体标签、表单标签等,项目中高频使用的核心标签如下:1.语义化结构标签:header(页面头部)、nav(导航栏)、main(主体内容)、section(内容区块)、article(独立文章/模块)、aside(侧边栏)、footer(页脚),替代了传统div布局,提升代码可读性和SEO友好度;2.媒体标签:audio(音频播放)、video(视频播放),无需依赖插件即可实现音视频渲染;3.表单增强标签:input新增email、tel、number、date等类型,搭配required、placeholder、maxlength等属性,简化表单校验开发;4.其他实用标签:canvas(画布绘图)、svg(矢量图形),用于可视化、图表、图标开发。2、语义化标签的核心作用是什么?为什么不全部用div开发?参考答案:核心作用主要有三点:1.代码可读性更强:通过标签名就能区分页面模块,新人接手项目可以快速看懂页面结构,不用逐行解读样式和逻辑;2.优化SEO:搜索引擎爬虫可以精准识别页面头部、导航、主体、侧边栏等核心内容,提升页面收录和搜索权重,纯div布局爬虫无法区分模块优先级;3.适配无障碍访问:屏幕阅读器可以精准解析语义标签,帮助残障用户正常浏览页面,符合项目合规要求。div是无语义通用容器,仅用于布局嵌套,大量使用会导致代码臃肿、结构混乱,不利于维护和优化。二、CSS核心模块1、CSS选择器优先级规则是什么?如何计算?参考答案:CSS优先级遵循权重叠加、高位优先原则,权重从高到低排序:!important>行内样式>ID选择器>类/伪类/属性选择器>标签选择器>通配符选择器>继承样式。具体权重计算(无进位机制,高位权重永远大于低位叠加):1.!important:权重最高,强制覆盖所有样式,项目中尽量少用,避免样式难以维护;2.行内样式(style):1000;3.ID选择器(#id):100;4.类、伪类、属性选择器(.class、:hover、[type]):10;5.标签、伪元素选择器(div、p、::before):1;6.通配符、继承样式:0。优先级相同时,后写样式覆盖先写样式。2、flex弹性布局常用属性及实战用法参考答案:flex是目前项目主流布局方案,适配移动端、自适应场景,分为父容器属性和子元素属性:父容器常用属性:1.display:flex:开启弹性布局;2.flex-direction:设置主轴方向,row(水平默认)、column(垂直);3.justify-content:主轴对齐方式,center居中、space-between两端对齐、space-around均匀分布;4.align-items:侧轴对齐方式,center垂直居中、flex-top顶部对齐;5.flex-wrap:wrap:子元素自动换行,解决溢出问题。子元素常用属性:1.flex:1:平分剩余空间,常用自适应模块布局;2.align-self:单独设置自身侧轴对齐方式;3.order:调整子元素排列顺序,数值越小越靠前。3、CSS盒模型区别?标准盒模型和怪异盒模型如何切换?参考答案:盒模型由内容区、内边距padding、边框border、外边距margin四部分组成,核心区别是宽高计算规则:1.标准盒模型(content-box):元素设置的width/height仅为内容区尺寸,整体元素宽度=width+padding+border+margin;2.怪异盒模型(border-box):元素设置的width/height包含内容区、padding、border,整体宽度=设定width+margin,不会因为内边距、边框撑大元素。项目中统一使用怪异盒模型,全局设置:*{box-sizing:border-box;},可以避免布局错位、尺寸溢出问题。三、JavaScript核心模块(高频重点)1、var、let、const的区别?参考答案:1.作用域不同:var是函数作用域,let、const是块级作用域({}、if、for内部有效);2.变量提升不同:var存在变量提升,声明前访问值为undefined;let、const存在暂时性死区,声明前访问直接报错;3.重复声明:var允许重复声明变量,let、const禁止重复声明;4.赋值规则:var、let可重复赋值;const声明常量,不可重新赋值(引用类型可修改内部属性);项目规范:优先使用const,需修改变量用let,禁止使用var。2、JS数据类型有哪些?如何判断数据类型?参考答案:JS共8种数据类型,分为基本类型和引用类型:1.基本类型(7种):String、Number、Boolean、Undefined、Null、Symbol、BigInt;2.引用类型(1种):Object(包含数组、对象、函数、正则等)。常用判断方法(项目实操):1.typeof:适合判断基本类型,typeofnull返回object(bug),无法区分数组和对象;2.Array.isArray():专门判断数组;3.Ototype.toString.call():精准判断所有类型,是项目最通用的判断方式,可区分null、数组、普通对象、函数等。3、闭包的概念、作用及优缺点,项目中哪里用到过?参考答案:概念:一个函数嵌套另一个内部函数,内部函数访问外部函数的变量,且外部函数执行结束后,变量不会被销毁,这个组合就是闭包。核心作用:1.实现变量私有化,避免全局变量污染;2.保留函数执行上下文,缓存变量值;3.实现模块化开发。优缺点:优点:隔离作用域、缓存数据、实现私有方法;缺点:会造成内存常驻,使用过多容易导致内存泄漏,需手动释放变量。项目应用场景:防抖节流函数、定时器回调、模块化封装、数据缓存、事件监听。4、原型和原型链的理解?参考答案:1.原型prototype:每个函数都有prototype属性,是一个公共对象,存放所有实例可以共享的方法和属性,避免重复创建方法,节省内存;2.原型链__proto__:每个实例对象都有__proto__属性,指向构造函数的prototype,当访问对象的属性/方法时,自身没有就会顺着__proto__向上查找,直到找到Ototype,这条查找链路就是原型链;3.顶层原型是Ototype,再往上为null,原型链终止。项目作用:实现方法共享、继承、扩展原生方法(如数组自定义工具方法)。5、异步JS宏任务、微任务区别?执行顺序是什么?参考答案:JS是单线程语言,异步任务分为宏任务和微任务,执行遵循先同步、后微任务、再宏任务的规则。分类:1.微任务(优先级高):Promise.then/catch/finally、async/await、queueMicrotask;2.宏任务(优先级低):setTimeout、setInterval、AJAX请求、DOM事件。完整执行顺序:1.执行所有同步代码;2.清空当前所有微任务队列;3.执行一个宏任务;4.重复第二步、第三步,循环执行(事件循环EventLoop)。6、Promise的理解?三种状态及常用方法参考答案:Promise是解决异步回调地狱的方案,用于统一管理异步请求、异步操作,让异步代码扁平化、可维护。三种状态(不可逆):1.pending:初始等待状态;2.fulfilled:成功状态,触发then回调;3.rejected:失败状态,触发catch回调。常用核心方法:1.then():处理成功结果,支持链式调用;2.catch():捕获异步错误、异常;3.finally():无论成功失败都会执行,常用于关闭加载状态;4.Promise.all():批量执行异步请求,全部成功才返回结果,任意一个失败直接报错;5.Promise.race():竞速执行,返回第一个完成的异步结果。四、浏览器与网络原理1、从输入网址到页面渲染完成,全过程流程参考答案:1.DNS解析:将域名解析为服务器IP地址,优先读取本地缓存,无缓存则向DNS服务器请求;2.TCP三次握手:客户端与服务器建立可靠连接;3.发送HTTP请求:客户端携带请求头、参数、cookie等信息向服务器发送请求;4.服务器处理请求:后端接收请求、校验参数、查询数据,返回HTTP响应结果;5.关闭TCP连接(四次挥手):数据传输完成后断开连接;6.页面解析渲染:浏览器解析HTML生成DOM树、解析CSS生成CSSOM树,合成渲染树,完成布局、绘制、重排重绘,最终展示页面;7.加载执行资源:加载JS、图片、字体等静态资源,执行页面交互逻辑。2、HTTP1.0、HTTP1.1、HTTP2.0区别参考答案:1.HTTP1.0:短连接,每次请求都需要建立、断开TCP连接,无缓存机制,资源请求效率极低;2.HTTP1.1(主流):默认长连接,一次连接可多次请求资源;新增缓存策略(强缓存、协商缓存);支持断点续传;缺点是存在请求队列阻塞,同一域名并发请求数量有限;3.HTTP2.0:支持多路复用,一个连接可并发多个请求,解决队列阻塞;头部压缩,减少请求体积;支持服务器主动推送资源,大幅提升页面加载速度。3、浏览器缓存机制(强缓存、协商缓存)参考答案:浏览器缓存是前端性能优化核心,分为强缓存和协商缓存,优先级:强缓存>协商缓存。1.强缓存:通过Cache-Control、Expires控制,缓存未过期时,直接读取本地资源,不向服务器发送请求,状态码200(fromcache);2.协商缓存:强缓存失效后,携带资源标识向服务器校验,通过Last-Modified/If-Modified-Since、ETag/If-None-Match实现;资源未更新返回304,继续使用本地缓存;资源更新则返回新资源。4、重排和重绘的区别?如何优化?参考答案:1.重绘:元素样式改变(颜色、透明度、背景),不改变尺寸和位置,浏览器重新绘制元素,开销较小;2.重排(回流):元素尺寸、位置、布局改变,会导致整个页面布局重新计算,开销极大,重排一定会触发重绘,重绘不会触发重排。优化方案:1.批量修改DOM样式,避免逐行修改;2.使用类名统一修改样式,替代单独修改style属性;3.频繁操作的元素设置绝对定位,脱离文档流,避免影响整体布局;4.开启硬件加速,使用transform、opacity实现动画,不触发重排。五、前端工程化与框架基础(Vue为主)1、Vue2和Vue3核心区别参考答案:1.响应式原理不同:Vue2基于Object.defineProperty,无法监听新增、删除属性和数组下标修改;Vue3基于Proxy,完美支持全场景响应式监听;2.API风格:Vue2以选项式API为主,代码分散;Vue3支持组合式API,逻辑聚合,适合大型项目;3.性能优化:Vue3支持按需编译、虚拟DOM重构、打包体积更小、渲染速度更快;4.生命周期:Vue3部分生命周期更名,废弃beforeCreate、created,改用setup函数替代;5.支持TS:Vue3原生适配TS,类型校验更完善,适合大型团队项目。2、Vue双向绑定原理参考答案:双向绑定核心是数据劫持+视图更新,v-model是语法糖,本质是:value绑定数值+@input监听输入事件。1.Vue2:通过Object.defineProperty劫持数据的getter/setter,数据修改时触发setter,更新页面视图;视图修改时通过事件监听更新数据;2.Vue3:通过Proxy代理整个对象,监听数据变化,结合Reflect实现数据响应式,解决Vue2响应式缺陷。3、Vue组件通信方式有哪些?适用场景参考答案:1.父子组件:父传子props,子传父$emit,适合简单父子交互;2.跨层级/非父子:provide/inject(深层嵌套传值)、全局状态管理(Vuex/Pinia,全局数据、多组件共享);3.简单跨组件:事件总线$bus,适合小型项目简单通信;4.页面路由传值:$route.query/$route.params,页面跳转传参。4、Vue生命周期常用钩子及使用场景参考答案:1.onMounted/mounted:组件挂载完成,页面DOM生成,常用于发送接口请求、初始化DOM操作、绑定事件监听;2.onUpdated/updated:数据更新、视图更新完成,用于数据更新后的DOM操作;3.onUnmounted/beforeDestroy:组件销毁前/销毁后,用于清除定时器、移除事件监听、取消接口请求,防止内存泄漏;4.onBeforeRouteLeave:路由离开前,用于页面跳转前校验、保存表单数据。六、实战场景与性能优化1、页面加载速度慢,如何排查并优化?参考答案:排查思路:通过浏览器Network面板查看资源加载耗时、接口响应速度、资源体积大小,定位瓶颈(大文件、慢接口、冗余代码)。优化方案:1.资源优化:图片压缩、使用webp格式、懒加载图片和路由、静态资源CDN部署;2.代码优化:代码压缩打包、去除冗余代码、路由懒加载、组件按需引入;3.接口优化:接口缓存、合并重复请求、分页加载、减少无效请求;4.渲染优化:减少重排重绘、避免频繁DOM操作、使用虚拟列表处理长列表数据;5.缓存优化:合理配置浏览器缓存、本地缓存localStorage/sessionStorage。2、防抖和节流的区别及项目应用场景参考答案:两者都是限制高频事件触发的优化手段,核心区别是执行时机不同:1.防抖:触发事件后,延迟一段时间执行,若期间再次触发,重新计时,只执行最后一次;场景:搜索框输入联想、窗口resize调整、表单输入校验;2.节流:固定时间内只执行一次,定时匀速执行,无视期间多次触发;场景:页面滚动监听、按钮频繁点击、鼠标移动监听、上拉加载更多。3、前端常见内存泄漏场景及解决办法参考答案:1.定时器未清除:组件销毁前未clearInterval/clearTimeout,解决:onUnmounted中手动清除定时器;2.事件监听未移除:绑定的scroll、resize事件未销毁,解决:组件销毁时移除对应事件;3.全局变量过多:未及时释放无用全局变量,解决:按需定义变量,用完置空;4.闭包常驻内存:闭包引用变量未释放,解决:合理使用闭包,避免滥用;5.未取消接口请求:组件销毁后接口仍在请求,解决:组件销毁时取消pending状态的请求。七、手写代码高频面试题1、手写防抖函数参考答案:javascript
functiondebounce(fn,delay=300){
lettimer=null;
returnfunction(...args){
//每次触发清除之前的定时器
if(timer)clearTimeout(timer);
timer=setTimeout(()=>{
fn.apply(this,args);
timer=null;
},delay);
}
}2、手写节流函数(时间戳版)参考答案:javascript
functionthrottle(fn,delay=300){
letlastTime=0;
returnfunction(...args){
constnowTime=Date.now();
if(nowTime-lastTime>=delay){
fn.apply(this,args);
lastTime=nowTime;
}
}
}3、手写简单Promise参考答案:javascript
classMyPromise{
constructor(executor){
this.status='pending';
this.value=null;
this.reason=null;
this.resolveCallback=[];
this.rejectCallback=[];
constresolve=(value)=>{
if(this.status==='pending'){
this.status='fulfilled';
this.value=value;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 办公黑科技软件课件
- 办公礼仪素质培训课件
- 2026年护士交班模拟试卷(含答案)
- 2026年重型车辆模拟试卷目带答案
- 2026年机电学霸模拟试卷目带答案
- 办公楼宣传课件
- 2026年汽车工程师岗位技能考核模拟试卷及参考答案
- 2026年儿童康复考试模拟试卷(含答案)
- 2026年机动车检测人员上岗证模拟试卷带答案
- 2026年小学英语模拟试卷及参考答案
- EB病毒感染实验室诊断及临床应用专家共识
- 防爆电气设备安全检查与维护全流程培训
- 旋转导向钻井施工方案
- 企业社会稳定风险评估与防控体系
- 医院神经内科护理常规管理制度
- 北科大冶金工程实验指导
- 第十五章 轴对称 数学活动 课件 2025-2026学年人教版数学八年级上册
- 2025年10月自考13683管理学原理中级试题及答案
- 有源医疗器械风险管理分析报告-2024年-42062-2022,9706.1-2020
- 奶茶店食品安全规章制度
- 第14课 明至清中叶的经济与文化 课件 中外历史纲要(上)
评论
0/150
提交评论