前端常见面试题

45 阅读5分钟

一、vue生命周期

  1. beforeCreate(创建前)
  2. created (创建后)
  3. beforeMount (载入前)
  4. mounted (载入后)
  5. beforeUpdate (更新前)
  6. updated (更新后)
  7. beforeDestroy( 销毁前)
  8. destroyed (销毁后)

Vue每个生命周期的详细介绍:

beforeCreate(){}:Vue创建前,此阶段为实例初始化之后,this指向创建的实例,数据观察,数据监听事件机制都未形成,不能获得DOM节点。data,computed,watch,methods 上的方法和数据均不能访问,注:date和methods的数据都还未初始化。

Created(){}: Vue创建后,此阶段为实例初始化之后,data、props、computed的初始化导入完成, 注:要调用methods中的方法,或者操作data中的数据,最早只能在Created中操作

能访问 data computed watch methods 上的方法和数据,初始化完成时的事件写这个里面,

此阶段还未挂载DOM。

beforeMount(){}: Vue载入前,阶段执行时, 模板已经在内存中编译好了,但是未挂载到页面中,(页面还是旧的)

注:这个阶段是过渡性的,一般一个项目只能用到一两次。

Mounted(){}:Vue载入后,(完成创建vm.$el,和双向绑定); 只要执行完mounted,就表示整个Vue实例已经初始化完成了,此时组件已经脱离里了创建阶段, 进入到了运行阶段。

beforeUpdate(){}:Vue更新前, 当执行beforeUpdate的时候,页面中显示的数据还是旧的,此时date数据是最新的,页面尚未和最新数据数据保持同步。但是DOM中的数据会改变,这是vue双向数据绑定的作用,可在更新前访问现有的DOM,如手动移出添加的事件监听器。

Updated(){}:Vue更新后, Updated执行时数据已经保持同步了,都是最新的,

完成虚拟DOM的重新渲染和打补丁。 组件DOM已完成更新,可执行依赖的DOM操作。

注意:不要在此函数中操作数据(修改属性),否则就会陷入死循环。

beforeDestroy(){}:(Vue销毁前,可做一些删除提示,比如:您确定删除****吗?)

当执行beforeDestroy的时候,Vue实例就已经从运行阶段进入到销毁阶段了。实例上的所有date和methods以及过滤器和指令都是处于可用状态,此时还没有真正的执行销毁过程。

Destroyed(){}:Vue销毁后, 当执行到destroted函数的时候,组件已经完全销毁(渣都不剩),此时组件中的所有的数据,方法,指令,过滤器...都已经销毁(不可用了)。

二、深浅拷贝

  • 浅拷贝:复制对象的引用,内存只想同一个地址;改变数据时,所以引用的对象都会改变。
  • 深拷贝:开辟一块新的内存,存储数据。

JSON.stringify() ;(这个不推荐使用,有坑)

  • 对象内存在undefined或function时,会直接丢失
  • 当对象中有NaN、Infinity和-Infinity这三种值的时候 --- 会变成null

三、强缓存和协商缓存

  • 如果浏览器命中强缓存,则不需要给服务器发请求;而协商缓存最终由服务器来决定是否使用缓存,即客户端与服务器之间存在一次通信。
    在 chrome 中强缓存(虽然没有发出真实的 http 请求)的请求状态码返回是 200 (from cache);
  • 而协商缓存如果命中走缓存的话,请求的状态码是 304 (not modified)。 不同浏览器的策略不同,在 Fire Fox中,from cache 状态码是 304.

四、常见http状态码

详细点这里

  • 200:请求成功返回
  • 304:(接口缓存) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
  • 400:(错误请求) 服务器不理解请求的语法。
  • 401:(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
  • 404:(未找到) 服务器找不到请求的网页。
  • 500:(服务器内部错误) 服务器遇到错误,无法完成请求。
  • 503:(服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

五、vue父子组件通讯

  • 父组件通过属性的方式传递给子组件,子组件通过emit传递父组件,父组件通过v-on:(@)方式接受子组件抛出的数据。
  • 父组件通过ref直接使用子组件的变量和方法
  • 通过vuex的store统一方式

六、输入URL回车发生了啥

1.浏览器的地址栏输入URL并按下回车。
2.浏览器查找当前URL是否存在缓存,并比较缓存是否过期。
3.DNS解析URL对应的IP。
4.根据IP建立TCP连接(三次握手)。
5.HTTP发起请求。
6.服务器处理请求,浏览器接收HTTP响应。
7.渲染页面,构建DOM树。
9.关闭TCP连接(四次挥手)。

七、ES6+用过哪些特性

  • let、const
  • 箭头函数
  • ...(赋值解构)
  • promise
  • map
  • Set类型;唯一值集合,不会存在相同的值(强等)
  • Symbol数据类型;唯一值
  • filter过滤
  • some 返回唯一值,找到后直接返回,不会继续执行
  • Object.keys()、Object.values()
  • 模板字符串``

vue-router的hash和history模式区别

  • hash:域名后面会带有#号,请求时不会带上#号后面的路由。更新路由时不会重新加载页面;
  • history:需要处理定义的路由,不然请求会返回404。