[跳槽必备] 面试题

184 阅读3分钟

一、手写swiper左右切换原理

 

二、promise执行顺序

 

 

三、vue组件之间传值有几种

l 父子通信 (1)(2)(5)(6)

l 兄弟通信 (3)(4)

l 跨级通信 (3)(4)(6)(7)

(1)父->子 props

(2)子->父 $emit

(3)兄弟 bugs事件总线

(4)vuex 状态管理

(5)parentparent,children 或 $refs访问组件实例

(6)多层父子组件通信provide / inject

(7)attrs/attrs / listeners

四、数组去重(至少2种)

  1)循环+indexOf

let arr = [1,3,6,6,9,3,3,5,5,5,7];

        let temp = [];

        for(var i=0; i<arr.length;i++){

            if(temp.indexOf(arr[i])== -1){

                temp.push(arr[i])

            }

        }

        console.log(temp)

2)Set去重

 // Set数据结构,它类似于数组,其成员的值都是唯一的

        // 利用Array.from将Set结构转换成数组

        function format(array){

          return Array.from(new Set(array))

        }

        let arr = format([1,3,6,6,9,3,3,5,5,5,7])

        console.log(arr) 

 

五、css优先级

  用权重值计算

!import>内联(1000)>id选择器(100)>(属性选择器=class选择器=伪类选择器)(10)> 元素选择器(1) > 通配符*

 

六、css垂直水平居中(至少2种)

<div class="center">垂直水平居中</div>

1)宽高已知

.center {

    background: #ccc;

    width: 100px;

    height: 100px;

    position: absolute;

    top: 0;

    bottom: 0;

    left: 0;

    right: 0;

    margin: auto;

  }

或者

.center {

    background: red;

    width: 100px;

    height: 100px;

    position: absolute;

    top: 50%;

    left: 50%;

    margin: -50px 0 0 -50px;

  }

2)宽高未知

.center {

    color: red;

    position: absolute;

    top: 50%;

    left: 50%;

    transform: translate(-50%,-50%);

  }

 

3)使用flex布局

<div class="wrap">

  <div class="item">test</div>

</div>

.wrap {

    width: 100%;

    height: 100vh;

    display: flex;

    align-items: center;

    justify-content: center;

  }

.item {

    color: red;

}
 

七、微信小程序授权失败如何处理

 

 

 

八、实现一个三列布局,第一列是150px,第三列是第二列的一半

 

 

九、微信小程序生命周期

  App 应用生命周期

1)onLaunch:初始化小程序时触发,全局只触发一次

2)onShow:小程序初始化完成或用户从后台切换到前台显示时触发

3)onHide: 用户从前台切换到后台隐藏时触发

4)onError: 小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息

Page 页面生命周期

1)onLoad:首次进入页面加载时触发,可以在 onLoad 的参数中获取打开当前页面路径中的参数

2)onShow:加载完成后、后台切到前台或重新进入页面时触发

3)onReady:页面首次渲染完成时触发

4)onHide:从前台切到后台或进入其他页面触发

5)onUnload:页面卸载时触发
⻚⾯⽣命周期的执行过程:

⼩程序注册完成后,加载⻚⾯,触发onLoad⽅法

⻚⾯载⼊后触发onShow⽅法,显示⻚⾯

⾸次显示⻚⾯,会触发onReady⽅法,渲染⻚⾯元素和样式,⼀个⻚⾯只会调⽤⼀次

当⼩程序后台运⾏或跳转到其他⻚⾯时,触发onHide⽅法

当⼩程序有后台进⼊到前台运⾏或重新进⼊⻚⾯时,触发onShow⽅法

当使⽤重定向⽅法 wx.redirectTo() 或关闭当前⻚返回上⼀⻚wx.navigateBack(),触发onUnload
当存在也应用生命周期和页面周期的时候,相关的执行顺序如下:

打开小程序:(App)onLaunch --> (App)onShow --> (Pages)onLoad --> (Pages)onShow --> (pages)onRead

进入下一个页面:(Pages)onHide --> (Next)onLoad --> (Next)onShow --> (Next)onReady

返回上一个页面:(curr)onUnload --> (pre)onShow

离开小程序:(App)onHide

再次进入:小程序未销毁 --> (App)onShow(执行上面的顺序),小程序被销毁,(App)onLaunch重新开始执行.

image.png  

十、微信小程序跳转传值

 

 <view bindtap="onPostClick"></view>

wx.navigateTo({

  url: '../groupWriteTalk/groupWriteTalk?project_id=' + this.data.id

 })

onLoad: function (options) {

 var that = this;

 that.setData({

  project_id: options.id

 })

},

 

十一、vue2与vue3的区别

 

 

 

十二、路由全局守卫的作用

 

 

 

十三、call bind apply区别

作用:重新定义this指向,改变作用域

区别:就是 call/apply 绑定后是立即执行,而 bind 绑定后是返回引用待调用