小程序面试题
一、小程序基本概念
1、简单描述下微信小程序的相关文件类型?
答:微信小程序项目结构主要有四个文件类型,如下:
WXML (WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,可以构建出页面的结构。内部主要是微信自己定义的一套组件。
WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式,
js 逻辑处理,网络请求
json 小程序设置,如页面注册,页面标题及tabBar。
app.json
必须要有这个文件,如果没有这个文件,项目无法运行,因为微信框架把这个作为配置文件入口,整个小程序的全局配置。包括页面注册,网络设置,以及小程序的window背景色,配置导航条样式,配置默认标题。
app.js
必须要有这个文件,没有也是会报错!但是这个文件创建一下就行 什么都不需要写以后我们可以在这个文件中监听并处理小程序的生命周期函数、声明全局变量。
app.wxss
小程序的公共样式
2、小程序与原生App哪个好?
答: 小程序除了拥有公众号的低开发成本、低获客成本低以及无需下载等优势,在服务请求延时与用户使用体验是都得到了较大幅度 的提升,使得其能够承载跟复杂的服务功能以及使用户获得更好的用户体验。
区别
优点:
缺点
3、简述微信小程序原理?
答:
小程序的页面主要由四部分组成,分别是wxml、wxss、js、json。wxml用于构建用户界面,wxss用于编写界面的样式,js用于编写界面逻辑,json用于界面的配置。
微信的架构,是数据驱动的架构模式,它的 UI 和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现
小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端(下文中也会采用Native来代指微信客户端)做中转,逻辑层发送网络请求也经由Native转发。
4、分析下微信小程序的优劣势?
答:
优势:
劣势:
5、微信小程序与H5的区别?
答:
第一条是运行环境的不同
传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览器,是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对小程序专门做了优化,配合自己定义的开发语言标准,提升了小程序的性能。
第二条是开发成本的不同
只在微信中运行,所以不用再去顾虑浏览器兼容性,不用担心生产环境中出现不可预料的奇妙BUG
第三条是获取系统级权限的不同
系统级权限都可以和微信小程序无缝衔接
第四条便是应用在生产环境的运行流畅度
长久以来,当HTML5应用面对复杂的业务逻辑或者丰富的页面交互时,它的体验总是不尽人意,需要不断的对项目优化来提升用户体验。但是由于微信小程序运行环境独立
6、小程序的双向绑定和vue哪里不一样?
答:
小程序直接this.data的属性是不可以同步到视图的,必须调用setData
7、 bindtap和catchtap的区别是什么?
答:
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡
8、wxss和css的异同?
9、请谈谈wxml与标准的html的异同?
10、请谈谈小程序的生命周期函数?
app:
属性 |
说明 |
onLaunch |
生命周期回调——监听小程序初始化。 |
onShow |
生命周期回调——监听小程序启动或切前台。 |
onHide |
生命周期回调——监听小程序切后台。 |
页面:
属性 |
说明 |
onLoad |
生命周期回调—监听页面加载 |
onShow |
生命周期回调—监听页面显示 |
onReady |
生命周期回调—监听页面初次渲染完成 |
onHide |
生命周期回调—监听页面隐藏 |
onUnload |
生命周期回调—监听页面卸载 |
component:
定义段 |
描述 |
最低版本 |
created |
组件生命周期函数-在组件实例刚刚被创建时执行,注意此时不能调用 setData ) |
|
attached |
组件生命周期函数-在组件实例进入页面节点树时执行) |
|
ready |
组件生命周期函数-在组件布局完成后执行) |
|
moved |
组件生命周期函数-在组件实例被移动到节点树另一个位置时执行) |
|
detached |
组件生命周期函数-在组件实例被从页面节点树移除时执行) |
|
lifetimes |
组件生命周期声明对象,参见 组件生命周期 |
2.2.3 |
pageLifetimes |
组件所在页面的生命周期声明对象,参见 组件生命周期 |
2.2.3 |
二、小程序开发过程中的常见问题
1、怎么解决小程序的异步请求问题?
答:
2、你使用过哪些方法,来提高微信小程序的应用速度?
答:
三、小程序的具体操作
1、简述一下小程序的开发流程
答:
2、你是怎么封装微信小程序的数据请求的?
答:
3、如何给方法传值?
答:
通过设置标签的data-*属性,在方法中通过e.currentTarget.dataset获取到数据
4、常见的路由跳转有哪些,请简述区别?
答:
打开新页面:调用 API wx.navigateTo 或使用组件 < navigator open-type="navigateTo"/>
页面重定向:调用 API wx.redirectTo 或使用组件 <navigator open-type="redirectTo"/>
页面返回:调用 API wx.navigateBack 或使用组件<navigator open-type="navigateBack">或用户按左上角返回按钮
Tab 切换:调用 API wx.switchTab 或使用组件 <navigator open-type="switchTab"/> 或用户切换 Tab
重启动:调用 API wx.reLaunch 或使用组件 <navigator open-type="reLaunch"/>
5、如何绑定事件?
答:
事件绑定的写法和组件属性一致,以key="value"的形式,其中:
6、如何实现事件的下拉刷新?
答:
监听用户下拉刷新事件。
7、小程序常用的接口请求
HTTPS 请求(wx.request)
上传文件(wx.uploadFile)
下载文件(wx.downloadFile)
WebSocket 通信(wx.connectSocket)
8、小程序如何进行登录
9、小程序页面跳转如何传递参数
答:
onLoad(option){
// 通过这个参数可以获取到地址参数
}
如果被问到taro框架传递参数,在taro组件的生命周期函数中都可以通过this.$router.params 获取到参数
10、微信小程序使用npm的步骤(外部依赖)
答:
11、微信小程序有哪些方式可以隐藏界面元素,有什么区别?
答:
区别:wx:if会把这个元素从dom树中移除,hidden是设置display为none
12、小程序中如何使用组件
答:
13、小程序中如何定义组件以及组件间的通信
答:
组件和页面一样包括js、wxss、wsml、json这个几个文件,不同的是组件的构造器使用的是Component。
组件间的基本通信方式有以下几种。
14、组件的事件
自定义组件触发事件时,需要使用 triggerEvent 方法,指定事件名、detail对象和事件选项:
var myEventDetail = {} // detail对象,提供给事件监听函数
var myEventOption = {} // 触发事件的选项
this.triggerEvent(事件名, myEventDetail, myEventOption)
触发事件的选项
选项名 |
类型 |
是否必填 |
默认值 |
描述 |
bubbles |
Boolean |
否 |
false |
事件是否冒泡 |
composed |
Boolean |
否 |
false |
事件是否可以穿越组件边界,为false时,事件将只能在引用组件的节点树上触发,不进入其他任何组件内部 |
capturePhase |
Boolean |
否 |
false |
事件是否拥有捕获阶段 |
15、组件的生命周期:
生命周期 |
参数 |
描述 |
最低版本 |
created |
无 |
在组件实例刚刚被创建时执行 |
1.6.3 |
attached |
无 |
在组件实例进入页面节点树时执行 |
1.6.3 |
ready |
无 |
在组件在视图层布局完成后执行 |
1.6.3 |
moved |
无 |
在组件实例被移动到节点树另一个位置时执行 |
1.6.3 |
detached |
无 |
在组件实例被从页面节点树移除时执行 |
1.6.3 |
error |
Object Error |
每当组件方法抛出错误时执行 |
2.4.1 |