2020前端面试题

198 阅读3分钟

前言: 此文章仅记录自己最近面试中遇到的面试题

  • vue 中的set方法?

    因为vue 无法对数组或对象后添加的属性进行监听,所以需要借助 vue封装的set方法 触发;

  • 路由传参的几种方式?

params >>>>页面刷新时 参数会消失
query >>>> 地址栏显示 刷新页面不失效

  • 父子组件中的传参方式?

emit,props,eventBus,vuex<br>emit,props ,eventBus ,vuex<br> attrs:接收父组件中除开props 属性; $listerners 里存放的是父组件中绑定的非原生事件。需要配置inheritAttrs :false,
.sync 用于子组件修改父组件的值

例如:
  // 子组件中:
	 data:{
            text:'',
        },
        props:['name'],
        <input v-model='text'/>
        this.$emit('update:name',text);
  // 父组件中
   <div> 
     <login :name.sync='username'></login>
   </div>
  • vuex四种状态?

    state 存储变量
    getter:state的计算属性
    mutation:提交更新数据的(同步的) 使用$commit 进行提交
    action:直接提交的mutation,而不是直接更改状态,(异步的) 使用dispatch 方式进行提交 modules:模块化用自己的state,getter,action...

  • HTTP 的状态?

区分状态码
1XX Informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

常见状态码
200 - 请求成功,Ajax 接受到信息了
400 - 服务器不理解请求
401 - 服务器不理解参数
403 - 服务器拒绝请求
404 - 请求页面错误
500 - 服务器内部错误,无法完成请求

  • 水平垂直居中至少四种?

    行内元素 父元素设置text-align:center;
    子元素设置其line-height:等于父元素高度;
    display布局
    position

  • vue 中的首屏加载问题如何解决?

	大方面:
        骨架屏
        ssr 渲染
    小方面:
          异步路由>按需加载
          图片懒加载
          使用cdn资源>>大文件使用cdn vue element-ui echarts加载 然后再webpack 配置文件中剔除对应文件  externals
          压缩文件 CompressionPlugin
  • promise和async await 的区别?

什么是Async/Await?
  async/await是写异步代码的新方式,以前的方法有回调函数和Promise。
  async/await是基于Promise实现的,它不能用于普通的回调函数。
  async/awaitPromise一样,是非阻塞的。
  async/await使得异步代码看起来像同步代码。
  简单来说:
  就是async和promise都是异步方法,区别是async生成的结果是promise对象,async是promise的终结版。
  await只能在async中使用,await是阻塞的意思,就是暂停,你一起调用2个接口,第一个执行完,不输出结果,要等最第二个接口执行完,
  
  例如:
  
    请求的对象1
    function nvm(num){
      return new Promise((resolve, reject)=>{
        setTimeout(()=>{
          resolve(num*2)
        },2000)
      })
    }
    请求的对象2

    function nvm2(num){
      return new Promise((resolve, reject)=>{
        setTimeout(()=>{
          resolve(num*2)
        },3000)
      })
    }
    在这写一个async方法

    async function timi(res){
      let a=await nvm(2)    //这里执行2s //await后面可以跟任何方法,对象
      let b=await nvm2(2) //这里执行3s
      let c=await nvm(2)  //这里再执行2s
      console.log(a,b,c)  //你等7s,才打印出结果
    }
    timi() //执行async方法
    
    后面面试官还问了我一个 await 后面可以是什么类型?  
    
     await 后面可以跟任何的JS 表达式。虽然说 await 可以等很多类型的东西,
     但是它最主要的意图是用来等待 Promise 对象的状态被 	resolved。
     如果await后面是 promise对象会造成异步函数停止执行并且等待 promise 的解决,
     如果await后面是 正常的表达式则立即执行。
    
  • 什么是闭包?

函数嵌套函数
函数内部可以引用函数外部的参数和变量
参数和变量不会被垃圾回收机制回收
函数内部的函数,能让函数外部访问内部变量成为可能,

  • 路由懒加载?

vue异步组件>>>并非懒加载<br>
   { path: '/home', name: 'home', component: resolve => require(['@/components/home'],resolve) },
es提案的import()
    const Index = () => import('@/components/index')
webpack的require,ensure()
    { path: '/about', name: 'about', component: r => require.ensure([], () => r(require('@/components/about')), 'demo-01') }
  • 继承的几种方式

  es5 中的 使用call 和bind  方法 
  es6 中 使用 super 调用父 方法或者属性