前端面试常见问题小总结2(更新中)

1.如何触发 BFC

1、根元素(<html>

2、浮动元素(元素的 float 不是 none)

3、绝对定位元素(元素的 position 为 absolute 或 fixed)

4、行内块元素(元素的 display 为 inline-block)

5、表格单元格(元素的 display 为 table-cell,HTML 表格单元格默认为该值)

6、overflow 不等于 visible

7、更多的触发方法参考 MDN

2.BFC 的特性

1、同一个 BFC 下上下外边距会合并

2、清除浮动(BFC 可以包含浮动的元素)

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

3.你如何理解HTML结构的语义化

   1.HTML结构的语义化:   更符合W3C统一的规范标准,是技术趋势

   2.HTML结构的语义化:   没有样式时浏览器的默认样式也能让页面结构很清晰

   3.HTML结构的语义化:   对SEO友好

4.谈谈set 、 map 是什么?

set 是es6 提供的一种新的数据结构,它类似于数组,但是成员的值都是唯一的。

map 是es6 提供的一种新的数据结构,它类似于对象,也是键值对的集合,但是键的范围不仅限于字符串,各种类型的值都可以当做键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。

5.什么是递归,递归有哪些优点或缺点?

递归:如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解:函

           数内部自己调用自己, 这个函数就是递归函数

优点:结构清晰、可读性强

缺点:效率低、调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的               栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。->性能

6.谈谈你平时都用了哪些方法进行性能优化?

      1.减少http请求次数、

      2.打包压缩上线代码、

      3.使用懒加载、

      4.使用雪碧图、

      5.动态渲染组件、

      6.CDN加载包。

7.什么是深拷贝、什么是浅拷贝?

浅拷贝

创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。

深拷贝:  

它会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。拷贝前后两个对象互不影响。

8.js的执行机制是怎么样的?

js是一个单线程、异步、非阻塞I/O模型、 event loop事件循环的执行机制

所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

9.清除浮动的方法有哪些?

为什么要清除浮动,因为浮动的盒子脱离标准流,如果父盒子没有设置高度的话,下面的盒子就会撑上来。

1.额外标签法(在最后一个浮动标签后,新加一个标签,给其设置clear:both;)(不推荐)

2.父级添加overflow属性(父元素添加overflow:hidden)(不推荐)

3.使用after伪元素清除浮动(推荐使用)

4.使用before和after双伪元素清除浮动

10.vue中computed 和watch 的区别是什么?

computed计算属性就是为了简化template里面模版字符串的计算复杂度、防止模版太过冗余。它具有缓存特性

computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;

watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象,一般用于监控路由,input输入框的值特殊处理等等,它比较是和的场景是一个数据影响多个数据,它不具有缓存性

watch: 监测的是属性值,只要属性值发生变化,其都会触发执行回调函数来执行一系列操作.

computed:监测的是依赖值,依赖值不变的情况下 其会直接读取缓存进行复用,变化的情况下才会重新计算

除此之外,有点很重要的区别是:计算属性不能执行异步任务,计算属性必须同步执行。也就是说计算属性不能向服务器请求或者执行异步任务。如果遇到异步任务,就交给侦听属性。watch也可以检测computed属性。

11.什么vuex ,谈谈你对它的理解?

  1. 首先vuex的出现是为了解决web组件化开发的过程中,各组件之间传值的复杂和混乱的问题

  2. 将我们在多个组件中需要共享的数据放到store中,

  3. 要获取或格式化数据需要使用getters,

  4. 改变store中的数据,使用mutation,但是只能包含同步的操作,在具体组件里面调用的方式this.$store.commit('xxxx')

  5. Action也是改变store中的数据,不过是提交的mutation,并且可以包含异步操作,在组件中的调用方式this.$store.dispatch('xxx'); 在actions里面使用的commit('调用mutation')

12.call、apply、bind三者的异同

共同点 : 都可以改变this指向; 不同点: call 和 apply 会调用函数, 并且改变函数内部this指向. call 和 apply传递的参数不一样,call传递参数使用逗号隔开,apply使用数组传递 bind 不会调用函数, 可以改变函数内部this指向. 应用场景

  1. call 经常做继承.

  2. apply经常跟数组有关系. 比如借助于数学对象实现数组最大值最小值

  3. bind 不调用函数,但是还想改变this指向. 比如改变定时器内部的this指向

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值