小程序面试
基础知识
什么是微信小程序?它的基本架构是怎样的?
- 答:微信小程序是由微信团队提供的一种新的开放能力,开发者可以快速开发一个小程序。小程序的基本架构包括以下几个部分:
- 页面:由WXML(视图层)、WXSS(样式层)和JavaScript(逻辑层)组成。
- App:整个小程序的入口文件,包含
app.json
(全局配置)、app.js
(全局逻辑)、app.wxss
(全局样式)。 - 配置文件:
project.config.json
,用于项目的配置。 - 其他文件:如图片、字体、其他静态资源等。
小程序的生命周期有哪些?每个阶段的主要作用是什么?
- 答:
- App生命周期:
onLaunch
:小程序初始化时触发,全局只触发一次。onShow
:小程序启动或从后台进入前台显示时触发。onHide
:小程序从前台进入后台时触发。
- 页面生命周期:
onLoad
:页面加载时触发。onShow
:页面显示时触发。onReady
:页面初次渲染完成时触发。onHide
:页面隐藏时触发。onUnload
:页面卸载时触发。
- App生命周期:
小程序的页面通信方式有哪些?
- 答:小程序页面之间的通信方式包括:
- 全局变量:在App实例上存储数据。
- 事件订阅/发布模式:使用全局事件总线(event bus)。
- 页面参数:通过URL参数传递数据。
- 本地存储:使用
wx.setStorageSync
和wx.getStorageSync
进行数据存储和读取。 - 自定义组件:通过
properties
和data
进行数据传递。
开发技术
如何使用
setData
更新数据?setData
有什么需要注意的地方?- 答:
setData
用于将数据从逻辑层发送到视图层,同时改变对应的this.data
。需要注意:- 数据更新是异步的,尽量不要在
setData
后立即访问this.data
。 - 避免频繁调用
setData
,尽量合并多次更新以提升性能。 - 数据量不宜过大,否则会影响性能。
- 数据更新是异步的,尽量不要在
- 答:
小程序中如何进行条件渲染和列表渲染?
- 答:
- 条件渲染使用
wx:if
、wx:elif
、wx:else
。 - 列表渲染使用
wx:for
,支持数组和对象遍历。
- 条件渲染使用
- 答:
小程序如何实现组件化开发?自定义组件的基本使用方法是什么?
- 答:小程序通过
Component
方法创建自定义组件,基本使用方法包括:- 创建组件:
component.js
文件使用Component
方法定义组件。 - 使用组件:在页面的
json
配置文件中注册组件,并在wxml
中引用。
- 创建组件:
- 答:小程序通过
如何进行小程序的事件绑定和事件处理?
- 答:使用
bindtap
、catchtap
等事件绑定属性在wxml
中绑定事件,事件处理函数在页面的js
文件中定义。
- 答:使用
API使用
微信小程序中如何进行网络请求?有哪些常用的API?
- 答:使用
wx.request
进行网络请求,常用的API有wx.uploadFile
、wx.downloadFile
、wx.connectSocket
等。
如何使用小程序的缓存机制?常用的缓存API有哪些?
- 答:使用
wx.setStorage
和wx.getStorage
进行异步缓存操作,wx.setStorageSync
和wx.getStorageSync
进行同步缓存操作。
如何调用微信小程序的支付功能?需要注意哪些安全问题?
- 答:使用wx.requestPayment
调用微信支付功能,注意:
- 需要在后台服务器生成支付参数,前端调用。
- 支付参数要妥善保管,避免泄露。
- 确保数据在传输过程中的安全性。
性能优化
小程序的性能优化有哪些常见手段?
- 答:
- 减少setData
调用次数和传输数据量。
- 使用wx.createSelectorQuery
替代document.querySelector
。
- 合理使用lazyLoad
属性进行图片懒加载。
- 尽量使用原生组件。
如何进行图片的优化?
- 答:使用合适的图片格式和压缩工具,合理设置图片大小,使用image
组件的mode
属性进行裁剪,使用lazy-load
属性进行懒加载。
小程序中如何减少setData
的频繁调用?
- 答:合并多次更新,尽量一次性传递所有需要更新的数据;对于需要频繁更新的数据,使用局部变量存储,最终一次性更新。
项目实战
描述一个你参与开发的小程序项目,遇到的主要挑战是什么,如何解决的?
- 答:描述项目背景、技术栈、遇到的问题(如性能问题、网络请求问题、复杂交互逻辑等),以及解决方案(如使用缓存、优化请求、使用组件化开发等)。
如何实现小程序的分包加载?
- 答:在
app.json
中配置subPackages
,将大型项目拆分成多个子包,减少主包体积,提高初始加载速度。
- 答:在
在小程序中如何实现用户登录和会话管理?
- 答:使用
wx.login
获取用户临时登录凭证,通过后端接口换取会话信息,使用wx.setStorageSync
保存会话信息,定期刷新会话。
- 答:使用
其他
如何在小程序中使用第三方库或插件?
- 答:通过小程序的插件机制,在app.json
中注册插件,使用requirePlugin
加载插件。
小程序和H5的区别有哪些?
- 答:
- 运行环境不同:小程序运行在微信环境中,H5运行在浏览器中。
- 开发框架不同:小程序使用微信提供的开发框架,H5使用前端开发框架如Vue、React等。
- 访问权限不同:小程序可以调用微信提供的API,如支付、获取用户信息等,H5不能直接调用这些API。
如何在小程序中处理地图、音视频等多媒体功能?
- 答:使用小程序提供的<map>
、<video>
、<audio>
等组件,结合相应的API(如wx.createMapContext
、wx.createVideoContext
等)进行操作。