前端面试题整理

一、懒加载核心逻辑是什么,如何实现?

核心逻辑:按需加载
1、条件加载
满足特定条件时加载,如列表分页、页面滚动特定位置加载图片、vue动态路由(使用某个路由之前,再将其添加进路由表)
2、动态导入
使用import()函数,返回一个Promise对象,根据Promise的状态判断导入是否成功

二、script标签的defer、async作用?

相同点:
1、defer、async都是用来异步加载外链script脚本的
不同点:
1、defer的script加载完会中断html解析,执行完毕后再继续html解析,如果html解析先完成,也会等待defer的script执行完毕,最后再执行DOMContentLoaded,所以defer的script内可以监听到DOMContentLoaded事件
2、async的script加载不会中断html解析,执行完毕可能在DOMContentLoaded之前或之后,所以有可能获取不到DOM

三、首屏加载性能优化?会出现哪些问题?

首屏加载的更快,核心思想就是:减少资源体积
性能优化方法:
1、压缩html、css、js代码
2、减少本地代码体积,将静态资源放到云上
3、减少本地图片体积,使用精灵图,但现在都是使用云服务获取图片
4、懒加载的方式:按需加载、动态导入
5、静态资源缓存,资源响应头的Cache-Control和Expires或Etag和Last-Modified一般都是服务器管理人员在nginx配置
会出现的问题:
1、动态导入在导入完成之前可能会存在页面空白现象,我们可以设置默认样式、过渡动画等

四、图片优化方式有哪些?webp格式兼容问题怎么解决?

1、图片压缩
2、多图合并成一个图
3、非首屏图片懒加载
4、选择webp格式,有更好的压缩率,更好的图片质量,并且支持透明和动画,但是不支持ie。可以通过canvas.toDataURL()判断兼容性,或者picture、source 标签

canvas.toDataURL()如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。

<picture>
  <!--  浏览器会检查是否支持WebP格式,如果不支持,会忽略source元素,并加载img标签中src属性为image.jpg的备用图片 -->
  <source srcset="image.webp" type="image/webp">
  <img src="image.jpg" alt="Alternate Image">
</picture>

五、浏览器输入一个url到页面呈现出内容,这之间发生了什么?

1、URL解析:解析协议、域名、端口、路径、参数
2、DNS解析:向DNS服务器发送请求获取真实服务器ip
3、建立TCP连接
4、发送HTTP请求
5、服务器响应
6、接收响应数据
7、解析和渲染
8、关闭连接

六、http和https的区别,https是如何进行加密的,原理是什么?

区别:
1、http是明文传输
2、https是加密传输,使用SSL协议或者TLS协议
https原理:
1、配置了https的服务器会发送证书给客户端
2、客户端校验证书合法性
3、客户端解析出公钥
4、客户端通过公钥生成加密信息传给服务器
5、服务器解密获取对称秘钥
6、后续通信使用秘钥加密解密

七、闭包是什么?举几个闭包的例子

1、闭包就是在一个函数的内部,创建一个内部函数,并通过内部函数访问外部函数的变量,并将内部函数作为外部函数的范围值
2、闭包常用在封装防抖、节流函数
3、可以通过将闭包函数的值设为null释放内存

八、时间复杂度和空间复杂度的概念

1、时间复杂度:算法运行时间,随着输入规模增长的增长率
2、空间复杂度:算法运行过程中所需的额外空间,随着输入规模增长的增长率

九、this指向有几种情况?

1、在全局作用域中指向window
2、在函数中,谁调用的函数就指向谁
3、使用call()和apply()方法:通过call()或apply()方法,可以显式地设置函数执行时的this值
4、使用bind()方法:bind()方法绑定了函数的this指向,并返回一个新的函数

十、Promise有哪些方法?

1、原型方法:then、catch、finally
2、构造函数方法:resolve、reject、all、allSettled、any、race

all 全部成功则反会结果数组,一个失败就停止,并返回失败原因。一般用来依赖关系的多个请求。
allSettled 全部执行完就返回结果数组,无论是成功还是失败。一般用来处理没有依赖关系的多个请求
any 一个成功则成功,全部失败才失败
race 一个完成就返回,不论成功或失败

十一、宏任务和微任务

宏任务有:
1、setTimeout和setInterval的回调函数
2、ajax和fetch等请求的回调函数
3、DOM事件的回调函数
微任务有:
1、Promise的then、catch、finally回调
2、async/await的await下方的代码

1、async函数返回一个Promise,注意这里是同步的,Promise中只有then、catch、finally是异步的,async函数返回值是return中的内容,如果在后面调用then,返回值就会当作then的参数传入
2、async函数内部可以使用try/catch捕获Promise的reject
3、await关键字会等待右边的表达式执行结束,如果是Promise则会等待Promise的resolve或reject
4、await关键字下方的代码,相当于放到了Promise.then中,所以await下方的代码才是微任务

十二、vue-router的核心是什么?

1、实现主要依赖于浏览器的History API或Hash模式
2、在History API中,vue-router通过拦截浏览器的导航事件,并根据配置的路由规则来动态地加载相应的组件
3、另一种模式是Hash模式,在URL中使用“#”来表示路由路径。vue-router会监听URL中hash的变化,当hash改变时,会触发对应的路由并加载对应的组件
4、beforeEach、beforeResolve和afterEach几个钩子
5、可以通过addRoutes动态插入路由信息
6、<router-view>,首先有一个路由映射表,在router-view组件中通过this.$parent递归判断当前router-view应该渲染当前路由映射表上的第几个组件

十三、vuex的核心是什么?

1、State(状态):用于存储应用程序的状态数据,使用方法mapState或者this.$store.state
2、Mutations(变化):改变状态数据,必须是同步,使用方法mapMutations或者this.$store.commit
3、Actions(动作):可以包含异步操作,可以触发 Mutations,使用方法mapActions或者this.$store.dispatch
4、Getters(获取器):类似计算属性,使用方法mapGetters或者this.$store.getter

十四、src和herf的区别?

1、使用herf的标签link、a,不会阻塞html、js的解析
2、使用src的标签script、img,阻塞html、css的解析

这就是link标签要放在script标签之前的原因

十五、assets和static的区别?

1、assets和static都是存放静态文件的
2、assets中静态文件打包时会被压缩,所以我们自己写的css可以放在这里。
3、static中的静态文件打包时不会被压缩,比如iconfont文件,本来就压缩过了,就可以放在这里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容