位置: IT常识 - 正文

前端面试常问的题目(持续更新中)(前端面试常问的项目问题)

编辑:rootadmin
前端面试常问的题目(持续更新中)

推荐整理分享前端面试常问的题目(持续更新中)(前端面试常问的项目问题),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:前端面试必问的问题,前端面试常见问题及回答技巧,前端面试常问的话题,前端常问面试题,前端面试常问的问题,前端面试常问的话题,前端常问面试题,前端面试常问的问题,内容如对您有帮助,希望把文章链接给更多的朋友!

1、闭包问题 什么是闭包?答:“闭包就是能够读取其他函数内部变量的函数 造成闭包的原因?答: 解决方法?答:可以使用let、立即执行函数 闭包可以实现什么?可以访问局部变量、可以保护变量不受污染

2、ajax、axios 前后端通信的过程(原生的ajax怎么写) 原生ajax请求步骤get: 1.创建核心的对象(new xhrhttprequest对象) 2.编写回调函数(判断是否请求成功 状态码等于4或者等于200) 3.调用open方法 设置请求方式和请求路径 4.调用send方法 发送 post:要多设置一个请求头setrequestheader(在发送的前面)

3、跨域问题(具体实现) 答:跨域解决方式: 1.jsonp(script这个标签本来就有跨域的能力,然后将ajax中datatype中类型改为jsonp)缺点只支持get 2.利用cors设置头 允许跨域(头有哪些)优点:支持get和post两种 使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理 3.利用proxy代理(具体实现不管是否跨域,在自己服务器上中转一次,让它允许跨域,类似于一个中转站的意思)

4、浏览器的渲染流程

这个问题应该就是输入url到页面呈现问题的变种,只不过此时的侧重点是获取完数据之后进行的渲染流程。

根据李兵老师的浏览器工作原理一节做如下回答:

第一步,HTML转换成DOM

第二步,CSS转换成浏览器可理解的styleSheets,然后计算DOM节点的样式

第三步,创建布居树,计算元素的布局信息

第四步,对布居树进行分层,构建分层树

第五步,为每个图层生产绘制列表,并将其提交到合成线程

第六步,合成线程将图层转化为图块,进而将图块转化成位图

第七步,合成线程发送绘制命令给浏览器

第八步,浏览器根据绘制命令生成页面,并显示到显示器上。  

5、deffer和async的区别

浏览器脚本,在普通的情况下,是会依次执行。但是我们可以用deffer和async关键字来让脚本异步执行。

但是,deffer是按照加载顺序执行DOMContentLoaded之前执行,但是async则是脚本加载完毕之后立即执行(不考虑依赖以及DOM的加载状态),一般来说,deffer要比async好一点。

6、map和forEach的区别

forEach返回undefined,map会返回新的数组。

forEach没办法中止循环,但是map可以通过返回false或者出错来中止。

7、call、apply以及bind的区别。

三者都是改变this执行,不同的是,call和apply是直接生成了函数调用,而bind则是返回了一个函数,你需要再次执行才会达到相同的效果。

call和apply又是因为参数的传递方式不一样,apply传递的是数组,call传递的单个参数的陈列。

bind则是以函数调用参数的方式传递参数。

8、事件循环。

JavaScript是单线程执行模型,执行的时候将会区分为主线程和任务队列。主线程执行完毕,会从任务队列中读取新的任务放入主线程进行执行,这个读取过程是循环读取,所以也叫事件循环。

任务队列分为宏任务和微任务,同层次,先执行微任务,再执行宏任务。

微任务:promise.then()、process.nextTick()

宏任务:setTimeOut()、setInterval()

9、get和post请求区别 GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET产生一个TCP数据包;POST产生两个TCP数据包。

前端面试常问的题目(持续更新中)(前端面试常问的项目问题)

GET与POST都有自己的语义,不能随便混用。

10、双向绑定原理 vue数据双向绑定是通过数据劫持结合发布者-订阅者模式的方式来实现的

我们已经知道实现数据的双向绑定,首先要对数据进行劫持监听,所以我们需要设置一个监听器Observer,用来监听所有属性。如果属性发上变化了,就需要告诉订阅者Watcher看是否需要更新。因为订阅者是有很多个,所以我们需要有一个消息订阅器Dep来专门收集这些订阅者,然后在监听器Observer和订阅者Watcher之间进行统一管理的。接着,我们还需要有一个指令解析器Compile,对每个节点元素进行扫描和解析,将相关指令(如v-model,v-on)对应初始化成一个订阅者Watcher,并替换模板数据或者绑定相应的函数,此时当订阅者Watcher接收到相应属性的变化,就会执行对应的更新函数,从而更新视图。

11、Async和Await原理

async、await从字面上理解,async就是异步的意思,await就是等待的意思,而两者的用法上也是这样的,async用于申明一个function是异步的,而await用于等待一个异步方法执行完成

过程就是: 1,async就是一个async函数,而await只能在这个函数中使用 2,await表示这里等待await后面的操作执行完毕,再执行下一句代码 3,await后面紧跟的最好是一个定时操作或者一个异步操作async和await的优点 1,解决了回调地狱的问题 2,支持并发执行 3,可以添加返回值 return xxx 4,可以在代码中添加try/catch捕获错误

12、webpack工作原理 1、核心概念

(1)entry:一个可执行模块或者库的入口。

(2)chunk:多个文件组成一个代码块。可以将可执行的模块和他所依赖的模块组合成一个chunk,这是打包。

(3)loader:文件转换器。例如把es6转为es5,scss转为css等

(4)plugin:扩展webpack功能的插件。在webpack构建的生命周期节点上加入扩展hook,添加功能

2、webpack构建流程(原理)

从启动构建到输出结果一系列过程:

(1)初始化参数:解析webpack配置参数,合并shell传入和webpack.config.js文件配置的参数,形成最后的配置结果。

(2)开始编译:上一步得到的参数初始化compiler对象,注册所有配置的插件,插件监听webpack构建生命周期的事件节点,做出相应的反应,执行对象的 run 方法开始执行编译。

(3)确定入口:从配置的entry入口,开始解析文件构建AST语法树,找出依赖,递归下去。

(4)编译模块:递归中根据文件类型和loader配置,调用所有配置的loader对文件进行转换,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理。

(5)完成模块编译并输出:递归完事后,得到每个文件结果,包含每个模块以及他们之间的依赖关系,根据entry配置生成代码块chunk。

(6)输出完成:输出所有的chunk到文件系统。

注意:在构建生命周期中有一系列插件在做合适的时机做合适事情,比如UglifyPlugin会在loader转换递归完对结果使用UglifyJs压缩覆盖之前的结果

13、webpack的loader和plugin区别 【Loader】:用于对模块源码的转换,loader描述了webpack如何处理非javascript模块,并且在buld中引入这些依赖。loader可以将文件从不同的语言(如TypeScript)转换为JavaScript,或者将内联图像转换为data URL。比如说:CSS-Loader,Style-Loader等。

loader的使用很简单:

在webpack.config.js中指定loader。module.rules可以指定多个loader,对项目中的各个loader有个全局概览。

loader是运行在NodeJS中,可以用options对象进行配置。plugin可以为loader带来更多特性。loader可以进行压缩,打包,语言翻译等等。

loader从模板路径解析,npm install node_modules。也可以自定义loader,命名XXX-loader。

语言类的处理器loader:CoffeeScript,TypeScript,ESNext(Bable),Sass,Less,Stylus。任何开发技术栈都可以使用webpack。

【Plugin】:目的在于解决loader无法实现的其他事,从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务。webpack提供了很多开箱即用的插件:CommonChunkPlugin主要用于提取第三方库和公共模块,避免首屏加载的bundle文件,或者按需加载的bundle文件体积过大,导致加载时间过长,是一把优化的利器。而在多页面应用中,更是能够为每个页面间的应用程序共享代码创建bundle。

14、promise 与 async await async/await是写异步代码的新方式,以前的方法有回调函数和Promise。   async/await是基于Promise实现的,它不能用于普通的回调函数。   async/await与Promise一样,是非阻塞的。   async/await使得异步代码看起来像同步代码,这正是它的魔力所在

函数前面多了一个aync关键字。await关键字只能用在aync定义的函数内。async函数会隐式地返回一个promise,该promise的reosolve值就是函数return的值。(示例中reosolve值就是字符串”done”)

为什么Async/Await更好?

1)使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。

2) 错误处理:     Async/Await 让 try/catch 可以同时处理同步和异步错误。在下面的promise示例中,try/catch 不能处理 JSON.parse 的错误,因为它在Promise中。我们需要使用 .catch,这样错误处理代码非常冗余。并且,在我们的实际生产代码会更加复杂

​ 3) 使用async/await的话,代码会变得异常简单和直观。

4)错误栈     如果 Promise 连续调用,对于错误的处理是很麻烦的。你无法知道错误出在哪里。

async/await中的错误栈会指向错误所在的函数。在开发环境中,这一点优势并不大。但是,当你分析生产环境的错误日志时,它将非常有用。这时,知道错误发生在makeRequest比知道错误发生在then链中要好。

5)调试     async/await能够使得代码调试更简单。2个理由使得调试Promise变得非常痛苦:

《1》不能在返回表达式的箭头函数中设置断点    《2》如果你在.then代码块中设置断点,使用Step Over快捷键,调试器不会跳到下一个.then,因为它只会跳过异步代码。

使用await/async时,你不再需要那么多箭头函数,这样你就可以像调试同步代码一样跳过await语句。

15、重绘和汇流有什么区别 什么是回流,什么是重绘,有什么区别? html 加载时发生了什么: 在页面加载时,浏览器把获取到的HTML代码解析成1个DOM树,DOM树里包含了所有HTML标签,包括display:none隐藏,还有用JS动态添加的元素等。 浏览器把所有样式(用户定义的CSS和用户代理)解析成样式结构体 DOM Tree 和样式结构体组合后构建render tree, render tree类似于DOM tree,但区别很大,因为render tree能识别样式,render tree中每个NODE都有自己的style,而且render tree不包含隐藏的节点(比如display:none的节点,还有head节点),因为这些节点不会用于呈现,而且不会影响呈现的,所以就不会包含到 render tree中。我自己简单的理解就是DOM Tree和我们写的CSS结合在一起之后,渲染出了render tree。 什么是回流: 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建render tree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程成为重绘。

什么是重绘: 当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。

区别: 他们的区别很大: 回流必将引起重绘,而重绘不一定会引起回流。比如:只有颜色改变的时候就只会发生重绘而不会引起回流 当页面布局和几何属性改变时就需要回流 比如:添加或者删除可见的DOM元素,元素位置改变,元素尺寸改变——边距、填充、边框、宽度和高度,内容改变

扩展: 浏览器的帮忙 所以我们能得知回流比重绘的代价要更高,回流的花销跟render tree有多少节点需要重新构建有关系 因为这些机制的存在,所以浏览器会帮助我们优化这些操作,浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。

自己的优化 靠浏览器不如靠自己,我们可以改变一些写法减少回流和重绘 比如改变样式的时候,不去改变他们每个的样式,而是直接改变className 就要用到cssText 但是要注意有一个问题,会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。 为了解决这个问题,可以采用cssText累加的方法,但是IE不支持累加,前面添一个分号可以解决。 还有添加节点的时候比如要添加一个div里面有三个子元素p,如果添加div再在里面添加三次p,这样就触发很多次回流和重绘,我们可以用cloneNode(true or false) 来避免,一次把要添加的都克隆好再appened就好了,还有其他很多的方法就不依依说了

本文链接地址:https://www.jiuchutong.com/zhishi/299246.html 转载请保留说明!

上一篇:【JavaScript】五个常用功能/案例:计时器 | 流程控制 | 闭包应用 | arguments剩余参数 | 二次封装函数(javascriptj)

下一篇:2023 年值得关注的 7 大人工智能 (AI) 技术趋势(2023 年值得关注的 9 个 Web3 发展趋势)

  • 删除app和卸载app有什么区别(删除app和卸载app哪个更干净)

    删除app和卸载app有什么区别(删除app和卸载app哪个更干净)

  • 华为荣耀30耳机如何使用(华为荣耀30耳机设置在哪)

    华为荣耀30耳机如何使用(华为荣耀30耳机设置在哪)

  • vivoiqoo支不支持无线充电(vivoiqoo支不支持nfc)

    vivoiqoo支不支持无线充电(vivoiqoo支不支持nfc)

  • win10自带播放器叫什么(win10自带播放器怎么打开)

    win10自带播放器叫什么(win10自带播放器怎么打开)

  • 微信红包封面怎么设置(微信红包封面怎么免费领取)

    微信红包封面怎么设置(微信红包封面怎么免费领取)

  • 淘宝换主图要等12点吗(淘宝换主图会影响什么)

    淘宝换主图要等12点吗(淘宝换主图会影响什么)

  • 华为mate x什么时候出

    华为mate x什么时候出

  • 快手怎么加群(快手怎么加群?)

    快手怎么加群(快手怎么加群?)

  • 手机qq怎么查看屏蔽的人(手机qq怎么查看别人撤回的消息)

    手机qq怎么查看屏蔽的人(手机qq怎么查看别人撤回的消息)

  • airpods2用什么充电头(airpods2用什么充电器充电)

    airpods2用什么充电头(airpods2用什么充电器充电)

  • 苹果手机怎么看zip视频(苹果手机怎么看国行还是美版)

    苹果手机怎么看zip视频(苹果手机怎么看国行还是美版)

  • 微信视频点赞怎么取消(微信视频点赞怎么取消不让别人看见)

    微信视频点赞怎么取消(微信视频点赞怎么取消不让别人看见)

  • 如何安装sd卡(怎样装sd卡)

    如何安装sd卡(怎样装sd卡)

  • 小米手环4充满电能用多久(小米手环4充满电才能开机吗)

    小米手环4充满电能用多久(小米手环4充满电才能开机吗)

  • 书旗怎么取消自动续费(书旗怎么取消广告)

    书旗怎么取消自动续费(书旗怎么取消广告)

  • 苹果11呼吸灯怎么设置(苹果呼吸灯怎么开启)

    苹果11呼吸灯怎么设置(苹果呼吸灯怎么开启)

  • 苹果usb-c是什么意思(苹果usbc是什么接口)

    苹果usb-c是什么意思(苹果usbc是什么接口)

  • 闪电盒子怎么解除绑定(闪电盒子自刷教程)

    闪电盒子怎么解除绑定(闪电盒子自刷教程)

  • vrv空调系统工作原理(vrv空调系统组成)

    vrv空调系统工作原理(vrv空调系统组成)

  • 微博怎么查找微信好友(微博怎么查找微博)

    微博怎么查找微信好友(微博怎么查找微博)

  • 华为lndtl40什么型号(华为lnd-al40)

    华为lndtl40什么型号(华为lnd-al40)

  • ios12请求更新不动(苹果手机请求更新没反应)

    ios12请求更新不动(苹果手机请求更新没反应)

  • 如何修改强提醒时间(强提醒怎么换铃声)

    如何修改强提醒时间(强提醒怎么换铃声)

  • 怎么恢复手机电话图标(怎么恢复手机电池健康)

    怎么恢复手机电话图标(怎么恢复手机电池健康)

  • msi是什么主板(msi主板是什么意思)

    msi是什么主板(msi主板是什么意思)

  • 电脑硬件检测维修的方法(电脑硬件检修)

    电脑硬件检测维修的方法(电脑硬件检修)

  • JavaScript基础_1

    JavaScript基础_1

  • 帝国CMS列表页中怎么获取当前信息所属专题名称(帝国cms简介标签)

    帝国CMS列表页中怎么获取当前信息所属专题名称(帝国cms简介标签)

  • 全国增值税发票查询平台 手机版
  • 以前年度多缴纳的企业所得税退还
  • 利润分配会计处理例题及解析
  • 银行汇票用什么账户核算
  • 高速公路通行费发票怎么开
  • 营改增之前的工程造价怎么算
  • 小规模普票冲红原票要退回吗
  • 定期定额自行申报表填表说明
  • 应税劳务和应税服务不合理列支的有哪些
  • 房地产企业汇算清缴
  • 可转换公司债券属于哪一类金融资产
  • 税收优惠形式包括
  • 领料投入生产会计分录
  • 期末账项调整的类型
  • 贷款 保险费
  • 调拨入库的固定资产是否缴税?
  • 每个行业都能赚钱吗
  • 房屋交易税费的计算
  • 同期对比和同比增长
  • 退车辆保险费如何计算
  • 现金支票丢了
  • 融资租赁增值税优惠政策
  • 借用别人的公司经营
  • 空调安装费计入什么科目
  • 当月进项留抵如何做账
  • 穿越火线真人版宣传片
  • 差错更正未来适用法
  • 房地产开发企业资质证书
  • 固定资产已提完折旧,但仍在使用,需要定期清理吗?
  • 公司股东内部转让需要人脸识别吗
  • 转让专利权的会计处理结果
  • 保险公司的展业方式
  • 微信php开发教程
  • 学生兼职收入按什么交个税
  • 以土地投资溢价的公司
  • uni-app开发教程
  • 小规模纳税人增值税免税政策
  • php过滤sql注入
  • php忘记密码功能
  • 最通俗易懂的电动力学教材
  • php 文件目录
  • php websocket教程
  • 进项税额转出是好事还是坏事
  • 用友u8反结账反记账的操作步骤
  • 织梦怎么调用当前栏目下的文章
  • 转增资本属于什么会计科目
  • 公司主营业务怎么介绍
  • 银行汇票和银行承兑汇票的区别
  • 个体户开票超过10万怎么交税
  • 总分公司汇总申报计算
  • 差旅费报销金额大于实际发生金额
  • 其他应付款贷方正数表示什么意思
  • 小微怎么开专票
  • 银行存款 会计科目
  • 企业出售房屋
  • 外贸常用的付款方式有哪些
  • 其他单位无偿过账合法吗
  • 运输费用增值税税率9%
  • 搬迁所得
  • 公交卡充值发票怎么开
  • 生产企业消防设施管理规定
  • 联营企业和子公司哪个好
  • 暂估的进项税额怎么抵扣
  • 电焊工劳保用品有哪些
  • 收到投资款怎么做凭证
  • mysql数据库数据备份
  • windows怎么彻底删除
  • 下载windows vista
  • win10预览版好吗
  • win8 怎么样
  • python opencv
  • 浏览器兼容的方法
  • 简单实现多彩慕斯蛋糕淋面的方法
  • python3.9爬取网页教程
  • python module import
  • jQuery formValidator表单验证
  • python asyncio
  • 贴现再贴现转贴现的联系
  • 我是一般纳税人对方给我开的普票
  • 民族贸易产生的原因
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设