【整理二】

简介: 【整理二】

1.SPA(单页应用)首屏加载速度慢怎么解决?

减小入口文件体积

静态资源本地存储

UI框架按需加载

图片资源的压缩

组件重复打包

开启Gzip压缩

使用SSR


2.Vue中自定义指令的理解,应用场景有哪些?

在Vue2.0中,代码复用和抽象主要形式是组件,

然而有的情况下,仍然需要对普通DOM元素进行底层操作,

这时候就需要使用到自定义指令

应用场景:表单防止重复提交、图片懒加载、一键copy的功能


3.说说javascript内存泄漏的几种情况?

意外使用全局变量(比如函数内部使用全局变量)

定时器不清除,一直占用内存,得不到释放

或者在定时器内调用外部函数,得不到释放

闭包,内部函数引用外部函数变量,得不到释放

不清理dom元素的引用

监听事件的解除,监听的时候addEventListener,在不监听的时候要使用


4.大文件如何做断点续传?

断点续传指的是在下载或上传时,将下载或上传任务人为的划分为几个部分

每一个部分采用一个线程进行上传或下载,如果碰到网络故障,

可以从已经上传或下载的部分开始继续上传下载未完成的部分,

而没有必要从头开始上传下载,可以节省时间,提高速度

一般实现方式有两种:服务器端返回,浏览器端自行处理

上传过程中将文件在服务器写为临时文件,等文件上传完,将临时文件重命名为正式文件

如果中途上传中断过,下次上传的时候根据当前临时文件大小,

作为在客户端读取文件的偏移量,从此位置继续读取文件数据块,上传到服务器从此偏移量继续写入文件

拿到文件,保存文件唯一性标识,切割文件,分段上传,

每次上传一段,根据唯一性标识判断文件上传进度,直到文件的全部片段上传完毕


5.原生js如何实现上拉加载下拉刷新?

上拉加载的本质是页面触底,或者快要触底时的动作

scrollTop:滚动视窗的高度距离window顶部的距离,它会随着往上滚动而不断增加,初始值是0

clientHeight:一个定值,表示屏幕可视区域的高度

scrollHeight:页面不能滚动时是不存在的,body长度超过window时才会出现,所表示body所有元素的长度

简单实现


let clientHeight = document.documentElement.clientHeight; //浏览器高度
let scrollHeight = document.body.scrollHeight;
let scrollTop = document.documentElement.scrollTop;
let distance = 50; //距离视窗还用50的时候,开始触发;
if ((scrollTop + clientHeight) >= (scrollHeight - distance)) {
    console.log("开始加载数据");
}

下拉刷新的本质是页面本身置于顶部时,用户下拉时需要触发的动作

监听原生touchstart事件,记录其初始位置的值,e.touches[0].pageY

监听原生touchmove事件,记录并计算当前滑动的位置值与初始位置值的差值,大于0表示向下拉动,

并借助CSS3的translateY属性使元素跟随手势向下滑动对应的差值,同时也应设置一个允许滑动的最大值

监听原生touchend事件,若此时元素滑动达到最大值,则触发callback,同时将translateY重设为0,元素回到初始位置


6.说说设备像素、css像素、设备独立像素、dpr、ppi之间的区别?

CSS像素: 适用于web编程,在 CSS 中以 px 为后缀,是一个长度单位

设备像素又称为物理像素,指设备能控制显示的最小物理单位,不一定是一个小正方形区块,

也没有标准的宽高,只是用于显示丰富色彩的一个“点”而已

设备独立像素:与设备无关的逻辑像素,代表可以通过程序控制使用的虚拟像素


7.谈谈你对BFC的理解?

BFC全称Block Formatting Context,即块级格式化上下文,

它是页面中的一块渲染区域,并且有一套属于自己的渲染规则

内部的盒子会在垂直方向上一个接一个的放置

对于同一个BFC的两个相邻的盒子的margin会发生重叠,与方向无关

每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此

BFC的区域不会与float的元素区域重叠

计算BFC的高度时,浮动子元素也参与计算

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然

BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素


8.说说TCP为什么需要三次挥手和四次握手?

三次挥手其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包

主要作用就是为了确认双方得接受能力和发送能力是否正常,

指定自己得初始化序列号为后面得可靠性传送做准备


tcp终止一个连接,需要经过四次挥手

服务端在收到客户端断开连接Fin报文后,并不会立即关闭连接,

而是先发送一个ACK包先告诉客户端收到关闭连接的请求,

只有当服务器的所有报文发送完毕之后,才发送FIN报文断开连接


9.前端性能优化的手段有哪些?

加载优化(减少http请求数)、图片优化、使用CDN、开启Gzip(代码压缩)、

样式表和JS文件的优化、减少不必要的Cookie、脚本优化、前端代码结构的优化、SEO优化


10.最少说出三种前端清除浮动的方法?

额外标签法:在需要清除浮动的元素前面加空 div 并设置 clear 为 both

浮动引起的父元素高度塌陷时,设置父元素 overflow 属性为hidden或auto

after 伪元素清除法浮动


11.什么是强缓存和协商缓存?

浏览器首次请求资源后,需要再次请求时,浏览器会首先获取该资源缓存的header信息,

然后根据Cache-Control和expires来判断该资源在本地缓存否过期

没过期:直接从本地缓存中获取资源信息,浏览器就不再向服务器重新请求资源,

过期:需重新发送请求,重新缓存资源,更新缓存时间

强缓存是利用http请求头中的Expires和Cache-Control两个字段来进行控制,用来表示资源的缓存时间


协商缓存是服务器用来确定缓存资源是否可用过期

因为服务器需要向浏览器确认缓存资源是否可用,二者要进行通信,

而通信的过程就是发送请求,所以在header中就需要有专门的标识来让服务器确认请求资源是否可以缓存访问,

所以就有了两组header字段

Etag和If-None-Match

Last-Modified和If-Modified-Since


12.React render方法的原理,在什么时候会触发?

render函数里面可以编写JSX,转化成createElement这种形式,

用于生成虚拟DOM,最终转化成真实DOM

在React 中,类组件只要执行了 setState 方法,就一定会触发 render 函数执行,

函数组件使用useState更改状态不一定导致重新render

组件的props 改变了,不一定触发 render 函数的执行


13.说说你对栈、队列的理解?应用场景?

栈又称堆栈,它是一种运算受限的线性表,

限定仅在表尾进行插入和删除操作的线性表,

表尾这一端被称为栈顶,相反地另一端被称为栈底,

向栈顶插入元素被称为进栈、入栈、压栈,从栈顶删除元素又称作出栈


队列:跟栈十分相似,队列是一种特殊的线性表,

特殊之处在于它只允许在表的前端(front)进行删除操作,

而在表的后端(rear)进行插入操作

进行插入操作的端称为队尾,进行删除操作的端称为队头

当队列中没有元素时,称为空队列

在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队

因为队列只允许在一端插入,在另一端删除

只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出


栈应用场景:借助栈的先进后出的特性,可以简单实现一个逆序数处的功能,

首先把所有元素依次入栈,然后把所有元素出栈并输出

队列应用场景:当需要按照一定的顺序来处理数据,而数据量在不断地变化的时候,

则需要队列来帮助解题,队列的使用广泛应用在广度优先搜索种,

例如层次遍历一个二叉树的节点值


14.说说你对git rebase 和git merge的理解?区别?

这两种方法之间的最大区别在于,合并保留了作品的完整历史记录,包括按时间顺序排列,

而Rebase使提交变得整洁,仅与分支上的作品相关

合并具有较高的可追溯性

Rebase可以使PR整洁,干净且相关,而不会产生嘈杂的提交

Merge具有更高的可追溯性,而Rebase则更整洁且易于审核

相关文章
|
7月前
|
Web App开发 存储 缓存
【整理九】
【整理九】
80 1
|
7月前
|
缓存 JavaScript 前端开发
【整理七】
【整理七】
61 0
|
7月前
|
JavaScript 前端开发 网络协议
【整理四】
【整理四】
71 0
|
7月前
|
JavaScript 前端开发 数据库
【整理八】
【整理八】
55 0
|
7月前
|
存储 缓存 前端开发
【整理五】
【整理五】
77 0
|
7月前
|
JavaScript 前端开发 API
【整理六】
【整理六】
83 0
|
缓存 前端开发 JavaScript
【整理三】
【整理三】
65 0
|
JavaScript 前端开发 算法
【整理一】
【整理一】
79 0
专业课知识整理-外科
专业课知识整理-外科
68 0