微信小程序面试题

微信小程序面试题

1.小程序登录流程
1.wx.login获取临时登录凭证code

2.发送code给后端,后端通过code,appid,appsecret调用微信接口,返回openid和session-key;

3.后端通过openid和session-key生成token返回给前端

4.前端把后端返回的token缓存起来
2.微信小程序双向绑定和vue的异同?
小程序 直接使用this.data.key = value 是不能更新到视图当中的。

必须使用this.setData({ key :value })来更新值。
3.小程序应用的生命周期
onLaunch() 用户首次打开小程序触发(全局只触发一次)

onShow() 小程序初始化完成后触发,小程序从后台进入前台也会触发

onHide() 小程序从前台进入后台触发

onError() 小程序发生脚本错误或者API调用失败时触发
4.小程序应用的生命周期函数
onLoad() 页面加载时触发,只会调用一次,可获取当前页面路径中的参数。

onShow() 页面显示/切入前台时触发,一般用来发送数据请求;

onReady() 页面初次渲染完成时触发, 只会调用一次,代表页面已可和视图层进行交互。

onHide() 页面隐藏/切入后台时触发, 如底部 tab 切换到其他页面或小程序切入后台等。

onUnload() 页面卸载时触发,如redirectTo或navigateBack到其他页面时。
5.应用与页面生命周期触发的顺序
首次进入小程序会触发应用生命周期

应用(app)onLaunch -> 应用(app)onShow -> 页面(page)-> onLoad -> 页面(page)onShow -> 页面(page)onReady
6.简述微信小程序原理
小程序本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口;

它的架构,是数据驱动的架构模式,它的UI和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现;

它从技术讲和现有的前端开发差不多,采用JavaScript、WXML、WXSS三种技术进行开发;

功能可分为webview和appService两个部分;

webview用来展现UI,appService有来处理业务逻辑、数据及接口调用;

两个部分在两个进程中运行,通过系统层JSBridge实现通信,实现UI的渲染、事件的处理等。
7.哪些方法可以用来提高微信小程序的应用速度
1、提高页面加载速度

2、用户行为预测

3、减少默认 data 的大小

4、组件化方案
8.webview中的页面怎么跳回小程序中?
主要是通过navigateTo

wx.miniProgram.navigateTo({
   url: '/pages/login/login'+'$params'
 })
9.如何实现下拉刷新?
方案一:
首先在全局 config 中的 window配置 enablePullDownRefresh,在 Page 中定义onPullDownRefresh 钩子函数,到达下拉刷新条件后,该钩子函数执行,发起请求方法 请求返回后,调用wx.stopPullDownRefresh停止下拉刷新。

方案二:
scroll-view :使用该滚动组件 自定义刷新,通过 bindscrolltoupper  属性, 当滚动到顶部/左边,会触发 scrolltoupper事件,所以我们可以利用这个属性,来实现下拉刷新功能。
10.小程序的事件
1、事件分类

冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。

非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

2、事件的绑定

事件绑定的写法同组件的属性,以 key、value 的形式。

key 以bind或catch开头,然后跟上事件的类型,如bindtap、catchtouchstart。

value 是一个字符串,需要在对应的 Page 中定义同名的函数。不然当触发事件的时候会报错。

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

3、如何实现下拉刷新

监听用户下拉刷新事件。

需要在app.json的window (opens new window)选项中或页面配置中开启enablePullDownRefresh。

可以通过wx.startPullDownRefresh (opens new window)触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。

当处理完数据刷新后,wx.stopPullDownRefresh (opens new window)可以停止当前页面的下拉刷新。
11.小程序的路由方式
打开新页面:调用 API wx.navigateTo

页面重定向:调用 API wx.redirectTo

页面返回:调用 API wx.navigateBack

Tab 切换:调用 API wx.switchTab

重启动:调用 API wx.reLaunch
12.小程序页面间有哪些传递数据的方法
1.全局变量之中传递参数数据 
	微信小程序初始化时,首先会加载app.json全局样式配置文件和全局变量文件,例如下面的globalData变量。在app.js定义全局变量后,可以在各页面间直接加载全局变量,小程序提供了getApp()方法,可以直接获取到App({...})这个全局实例对象。

2.使用本地缓存的方法保存全局变量
	本地缓存是有存储限制的,所以建议手动删除不再需要的缓存数据。wx.setStorage

3.通过在跳转、重定向等转变页面时候,可以直接通过url来传送数据
	wx.navigateTo({ url: 'test?id=1' }) 在要接收上一页面传递过来的数据的页面通过onLoad事件的options参数里面包含了上一页面所有传递过来的参数数据 onLoad:function(options){}
13.用过云开发吗?简述其功能
云开发有三个基础能力:

·云函数:运行在微信服务器上的函数,处理微信相关操作有天然优势,如获得用户信息异常方便(以前服务端解析很麻烦)

·数据库:一个小程序可以直接操作的JSON数据库,可以直接操作数据库,不在需要服务端了。

·存储:用来存储文件和图片
14.小程序怎么跟随事件传值
在页面标签上通过 绑定 dataset-key = value , 然后绑定点击通过e.currentTarget.dataset.key来获取标签上绑定的值。
15.小程序 WXSSCSS 的区别
wxss 背景图片只能引入外链,不能使用本地图片

小程序样式使用 @import 引入 外联样式文件,地址为相对路径。

尺寸单位为rpx , rpx是响应式像素,可以根据屏幕宽度进行自适应
16.bindtapcatchtap 区别
相同点: 都是点击事件

不同点: bindtap 不会阻止冒泡,catchtap 可以阻止冒泡。
17.小程序 wx:ifhidden 的区别
wx:if :  有更高的切换消耗。
hidden : 有更高的初始渲染消耗。

使用:
频繁切换使用 hidden,  运行时条件变化使用wx: if
18. 如何封装小程序请求
封装 wx.request  请求传递需要的参数( url ,  data ,   method , success 成功回调    , fail 失败回调 )  , 封装常用方法 POST ,  GET  , DELETE , PUT  ....  最后导出这些方法

然后新建一个 api.js  文件,导入封装好的方法,然后调取相应的方法,传递数据。

wx.request 封装

var app = getApp(); //获取小程序全局唯一app实例
var host = '******************'; //接口地址
 

 
//POST请求
function post(url, data, success,fail) {
  request(url, postData, "POST", doSuccess, doFail);
}
 
//GET请求
function get(url, data, success, fail) {
  request(url, postData, "GET", doSuccess, doFail);
}
 
function request(url, data, method, success, fail) {
  wx.showLoading({
    title: "正在加载中...",
  })
  wx.request({
    url: host + url, //请求地址
    method: method, //请求方法
    header: { //请求头
      "Content-Type": "application/json;charset=UTF-8"
    },
    data: data, //请求参数    
    dataType: 'json', //返回数据格式
    responseType: 'text', //响应的数据类型
    success: function(res) {
      wx.hideLoading();
      //成功执行方法,参数值为res.data,直接将返回的数据传入
      success(res.data);
    },
    fail: function() {
      //失败执行方法
      fail();
    },
  })
}
module.exports = {
  postRequest: post,
  getRequest: get,
}

组件使用封装好的请求

var http = require('../../utils/request.js'); //相对路径


var params = {//请求参数
  id:this.data.userId
}
http.postRequest("user/delUser", params, function(res) {
  console.log("修改成功!");
  
}, function(res) {
  console.log("修改失败!!!")
})
19.小程序运行机制
热启动:假如用户已经打开了某个小程序,在一定时间内再次打开小程序的话,这个时候我们就不再需要重新启动了,这需要把我们的后台打开的小程序切换到前台来使用。
冷启动:用户首次打开小程序或被微信主动销毁再次打开的情况,此时小程序需要重新加载启动。
20.小程序什么时候会主动销毁?
小程序在进入后台之后,客户端会帮我们在一定时间内维持我们的一个状态,超过五分钟后,会被微信主动销毁.

官方也没有明确说明 什么时候销毁, 在不同机型表现也不一样,
2019年开发时:时间官方文档没有说明,但是经过询问一般指5分钟内

2020年开发时:时间官方文档没有说明,实测安卓没有固定时间,内存足够情况下,有时候一天了还在,有时候几分钟就没了。
21.小程序授权过程?
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Uniapp 是一个跨平台的开发框架,可以在不同的平台上实现一次编码,多端部署,非常适合开发微信小程序。以下是 Uniapp 微信小程序面试题的答案: 1. Uniapp 是什么? Uniapp 是一个跨平台的开发框架,可以基于 Vue.js 做开发,实现一次编码多端部署,包括微信小程序、H5、APP(安卓和 IOS)、快应用等。 2. 与传统微信小程序开发的区别是什么? 与传统微信小程序开发相比,Uniapp 开发更加高效,可以大大减少开发时间,同时也可以让开发者更加便捷地实现一次编码多端部署。 3. Uniapp 微信小程序如何实现多端适配? Uniapp 可以使用自动适配方案,在不同机型上自动调整组件大小和布局。如果需要自定义适配方案,可以根据不同平台的 CSS 尺寸单位和样式特性定义不同的样式来实现多端适配。 4. 如何添加微信小程序原生组件? 可以在 Uniapp 项目中使用相应的组件,然后在微信小程序中进行适配。如果需要使用微信小程序原生组件,可以使用插件的形式将原生组件导入 Uniapp 项目中使用。 5. 如何进行微信小程序支付? 可以使用 uni.request 接口向自己服务端请求支付的相关参数,然后调用 uni.requestPayment 接口发起支付请求,支付成功后进行相应的处理。在开发过程中需要注意安全性和用户体验,避免出现支付问题。 总之,Uniapp 微信小程序的开发让开发者更加容易实现一次编码多端部署,提高开发效率,也让用户体验更加顺畅。在开发过程中需要根据不同的需求和平台特性进行适配,保证产品的质量和用户体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了衣李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值