前端基础知识

  1. vue双向数据绑定如何实现?vue2和vue3实现区别?

vue.js是才用数据劫持介个发布-订阅者模式的方法,通过object.defineProperty()来劫持各个属性的setter和getter,在数据变动时发布消息给订阅者,触发相应的监听回调。

  1. 请描述一下cookies,sessionStorage和localStorage的区别?

一、存储的时间有效期不同

1、cookie的有效期是可以设置的,默认的情况下是关闭浏览器后失效

2、sessionStorage的有效期是仅保持在当前页面,关闭当前会话页或者浏览器后就会失效

3、localStorage的有效期是在不进行手动删除的情况下是一直有效的

二、存储的大小不同

1、cookie的存储是4kb左右,存储量较小,一般页面最多存储20条左右信息

2、localStorage和sessionStorage的存储容量是5Mb(官方介绍,可能和浏览器有部分差异性)

三、与服务端的通信

1、cookie会参与到与服务端的通信中,一般会携带在http请求的头部中,例如一些关键密匙验证等。

2、localStorage和sessionStorage是单纯的前端存储,不参与与服务端的通信

四、读写操作的便捷程度

1、cookie的相关操作,cookie操作起来较为繁琐,并且部分数据不可以读取操作

  1. 闭包是什么,它有什么特点?

在js中,变量到的作用域属于函数作用域,在函数执行后作用域会被清除、内存也会随之被回收,但是由于闭包是建立在一个函数内部的子函数,由于其可访问上级作用域的原因,即使上级函数执行完,作用域也不会随之销毁,这时的子函数---也就是闭包,也就形成了闭包,便拥有了访问上级作用域中的变量权限,即使上级函数执行完后,作用域内的值也不会被销毁。

闭包的作用:

1.形成不被销毁的执行空间,延长变量声明周期,容易引起内存泄露

2.外部可以访问内部函数的变量,变量作用域扩展,内部函数访问外部函数

3.形成块作用域定义私有变量

  1. 数组和对象有哪些原生的方法?

数组:map,push,pop,splice,slice,

  1. route和router的区别?

$route 是“路由信息对象”,而$router 是“路由实例”对象

  1. 模块化开发的优点?

解决⽂件之间的依赖关系

避免命名冲突 、解决全局变量级全局函数泛⽤的现象

解决代码的复杂性

按需加载

(1)开发效率高:方便代码重用,对于别人开发好的模块功能可以直接拿过来使用,不需要重复开发类似的功能。

(2)维护成本低:软件开发周期中,由于需求经常发生变化,最长的阶段并不是开发阶段,而是维护阶段,使用模块化开发的方式更容易维护。

  1. 浏览器的内核有哪些?举例说明哪种浏览器在用哪种内核。

trident    ie   

gecko   火狐

webkit   谷歌

  1. 怎么理解事件循环(事件轮询)?

  1. 什么是单页应用(SPA)?

  1. 描述一下this指向

  1. 请描述CSS里面display:none与visibility:hidden的区别是什么?

  1. http协议是什么?它为什么叫超文本传输协议?它的特点是什么?

  1. get和post的区别?

  1. 怎么理解vue单向数据流?

  1. vue组件之间传值,组件通信的方式有哪些?

  1. v-if和v-for的优先级

在vue2中,v-for的优先级高于v-if;在vue3中,v-if的优先级高于v-for。在vue中,永远不要把v-if和v-for同时用在同一个元素上,会带来性能方面的浪费(每次渲染都会先循环再进行条件判断);

  1. 什么是虚拟dom

虚拟DOM(Virtua1DOM)本质上是JS和DOM之间的一个映射缓存,它在形

态上表现为一个能够描述D0M结构及其属性信息的JS对象。它主要存储在内存

中。主要来说:虚拟dom是一个s对象,存储在内存之中。虚拟dom能够描述真

实dom(存在一个对应关系)当数据变化的时候,生成新的DOM,对比新旧虚拟DOM

的差异,将差异更新到真实DOM上。

  1. React受控组件和非受控组件

组件操作的时候,组件有一些内部数据,操作内部状态state的就是受控组件,非受控数据是获取dom节点改变控制的

  1. useEffect和useLayoutEffect有什么区别

相同点:

处理副作用:函数组件内不允许操作副作用。比如:改变D0M、设置订阅、操

作定时器等。底层都是调用ountEffect1mpl方法,基本上可以替换使用

不同点:

useEffect在像素变化之后异步调用,改变屏幕内容可能会造成页面的闪烁

useLayoutEffect在像素变化之前同步调用,可能会造成页面延迟显示,但

是不会闪烁:主要用于处理D0M操作、调整样式、避免页面闪烁等。因为是同步

执行,所以要避免做大量计算,从而避免造成阻塞。

useLayoutEffect先于useEffect执行

什么是事件流? 什么是事件冒泡? 什么是事件捕获?

当⼀个HTML元素产⽣⼀个事件时,该事件会在元素节点与根节点之间的路径传播,路径所经过的节点都会收到该事件,这个传播的过程叫做DOM事件流

元素触发事件时,事件的传播过程称为事件流,过程分为捕获和冒泡两种

冒泡事件:微软提出的 事件由⼦元素传递到⽗元素的过程,叫做冒泡

捕获事件:⽹景提出的 事件由⽗元素到⼦元素传递的过程,叫做事件捕获

谈谈你对事件监听的理解

事件分为DOM 0级事件和Dom 2级事件,DOM2级事件也叫做事件监听。DOM 0级事件的缺点是如果事件相同 后者的事件会覆盖前者的事件,DOM2级事件可以解决这个问题

2、DOM2级事件的⽅法是

addEventListener()

参数1:事件类型 不需要加on

参数2:回调函数

参数3:布尔值 true代表捕获 false代表冒泡

解绑事件⽅法:removeEventListener()

IE浏览器下⽤:attachEvent()

参数1:事件类型 需要加on

参数2:回调函数

解绑事件⽅法:detachEvent()

请说出call、apply、bind的区别

bind:bind绑定完this的指向后会返回⼀个新的函数体,不会被⽴即调⽤

call&apply:绑定完this的指向后会⽴即调⽤

call与apply的区别:

call:第⼀个参数是this的指向,第⼆个以及后⾯的所有参数需要⼀个个进⾏传递

apply:第⼀个参数是this的指向,第⼆个参数是⼀个数组

js里面的垃圾回收机制

什么是重绘和回流

1.重绘

简单来说就是重新绘画,当给一个元素更换颜色、更换背景,虽然不会影响页面布局,但是颜色或背景变了,就会重新渲染页面,这就是重绘。

2.回流

当增加或删除dom节点,或者给元素修改宽高时,会改变页面布局,那么就会重新构造dom树然后再次进行渲染,这就是回流。

总结

重绘不会引起dom结构和页面布局的变化,只是样式的变化,有重绘不一定有回流。

回流则是会引起dom结构和页面布局的变化,有回流就一定有重绘。

不管怎么说都是会影响性能。

怎么进行优化或减少?

1.多个属性尽量使用简写,例如:boder可以代替boder-width、boder-color、boder-style

2.创建多个dom节点时,使用documentfragment创建

3.避免使用table布局

4.避免设置多层内联样式,避免节点层级过多

5.避免使用css表达式

6.将频繁重绘或回流的节点设置为图层,图层能够阻止该节点的渲染行为影响到别的节点(例:will-change\video\iframe等标签),浏览器会自动将该节点变为图层

浏览器渲染页面的主要步骤

浏览器渲染页面主要是以下几个步骤:

1. 解析html代码,生成DOM tree

2. 解析css代码,生成CSSOM tree

3. 通过DOM tree 和 CSSOM tree 生成 Render tree

4. Layout(布局),计算Render tree中各个节点的位置及精确大小

5. Painting(绘制),将render tree渲染到页面上

https是如何加密的

https 的加密手段是以安全为目标的 http 通道,简单讲是 http 的安全版,即 http 下加入 SSL 层,https 的安全基础是 SSL,因此加密的详细内容就需要 SSL。https 协议的主要作用可以分为两种:一种是简历一个信息安全通道,来保证数据传输的安全;另一种是确认网站的真实性。

加密方式

  • 对称加密:

对称密钥加密,又称为对称加密、私钥加密、共享秘钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。

  • 非对称加密:

公开秘钥加密,也称为非对称加密,一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,是某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥,不公开的密钥为私钥。

1. href

href:是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

标识超文本引用,用在link和a等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系

<link href="common.css" rel="stylesheet"/>当浏览器解析到这一句的时候会识别该文档为css文件,会下载并且不会停止对当前文档的处理,这也是为什么建议使用link方式来加载css而不是使用@import。

2. src

src:是指向外部资源的位置,指向的内部会迁入到文档中当前标签所在的位置;在请求src资源时会将其指向的资源下载并应用到当前文档中,例如js脚本,img图片和frame等元素。

表示引用资源,表示替换当前元素,用在img,script,iframe上,src是页面内容不可缺少的一部分。

<script src="js.js"></script>当浏览器解析到这一句的时候会暂停其他资源的下载和处理,直至将该资源加载,编译,执行完毕,图片和框架等元素也是如此,类似于该元素所指向的资源嵌套如当前标签内,这也是为什么要把js饭再底部而不是头部。

3. src和href的区别:

1. 当浏览器遇到href会并行下载资源并且不会停止对当前文档的处理。(同时也是为什么建议使用 link 方式加载 CSS,而不是使用 @import 方式)

2. 当浏览器解析到src ,会暂停其他资源的下载和处理,直到将该资源加载或执行完毕。(这也是script标签为什么放在底部而不是头部的原因)

页面导入样式时,使用link和@import有什么区别

1)从属关系的区别:link属于XHTML标签,而@import是CSS提供的语法规则,link除了加载CSS,还可以定义RSS,定义rel连接属性等,@import就只能加载CSS

2)加载顺序的区别:页面加载时,link会同时被加载,而@import引用的CSS会等页面被加载完后再加载。

3)兼容性的区别:@import只有IE5以上才能被识别,而link是XHTML标签,无兼容问题。

4)DOM可控性区别:通过js操作DOM,可以插入link标签来改变样式;由于DOM方法是基于文档的,无法使用@import方式插入样式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值