Skip to content

Latest commit

 

History

History
389 lines (270 loc) · 10.5 KB

微信小程序面试大全.md

File metadata and controls

389 lines (270 loc) · 10.5 KB

微信小程序面试大全

1.请谈谈微信小程序主要目录和文件的作用?

  • project.config.json 项目配置文件,用得最多的就是配置是否开启https校验;
  • App.js 设置一些全局的基础数据等;
  • App.json 底部tab, 标题栏和路由等设置;
  • App.wxss 公共样式,引入iconfont等;
  • pages 里面包含一个个具体的页面;
  • index.json (配置当前页面标题和引入组件等);
  • index.wxml (页面结构);
  • index.wxss (页面样式表);
  • index.js (页面的逻辑,请求和数据处理等);

2.请谈谈wxml与标准的html的异同?

  • 都是用来描述页面的结构;
  • 都由标签、属性等构成;
  • 标签名字不一样,且小程序标签更少,单一标签更多;
  • 多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式
  • WXML仅能在微信小程序开发者工具中预览,而HTML可以在浏览器内预览
  • 组件封装不同, WXML对组件进行了重新封装,
  • 小程序运行在JS Core内,没有DOM树和window对象,小程序中无法使用window对象和document对象。

3.请谈谈WXSS和CSS的异同?

  • 都是用来描述页面的样子;
  • WXSS 具有 CSS 大部分的特性,也做了一些扩充和修改;
  • WXSS新增了尺寸单位,WXSS 在底层支持新的尺寸单位 rpx;
  • WXSS 仅支持部分 CSS 选择器;
  • WXSS 提供全局样式与局部样式

4. 你是怎么封装微信小程序的数据请求的?

  • 在根目录下创建utils目录及api.js文件和apiConfig.js文件;
  • 在apiConfig.js 封装基础的get, post 和 put, upload等请求方法,设置请求体,带上token和异常处理等;
  • 在api中引入apiConfig.js封装好的请求方法,根据页面数据请求的urls, 设置对应的方法并导出;
  • 在具体的页面中导入;

5. 小程序页面间有哪些传递数据的方法?

  • 使用全局变量实现数据传递
  • 页面跳转或重定向时,使用url带参数传递数据
  • 使用组件模板 template传递参数
  • 使用缓存传递参数
  • 使用数据库传递数据

6. 请谈谈小程序的双向绑定和vue的异同?

大体相同,但小程序直接this.data的属性是不可以同步到视图的,必须调用this.setData()方法!

7.请谈谈小程序的生命周期函数?

  • onLoad() 页面加载时触发,只会调用一次,可获取当前页面路径中的参数。
  • onShow() 页面显示/切入前台时触发,一般用来发送数据请求;
  • onReady() 页面初次渲染完成时触发, 只会调用一次,代表页面已可和视图层进行交互。
  • onHide() 页面隐藏/切入后台时触发, 如底部 tab 切换到其他页面或小程序切入后台等。
  • onUnload() 页面卸载时触发,如redirectTo或navigateBack到其他页面时。

8. 简述微信小程序原理?

  • 小程序本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口;
  • 它的架构,是数据驱动的架构模式,它的UI和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现;
  • 它从技术讲和现有的前端开发差不多,采用JavaScript、WXML、WXSS三种技术进行开发;
  • 功能可分为webview和appService两个部分;
  • webview用来展现UI,appService有来处理业务逻辑、数据及接口调用;
  • 两个部分在两个进程中运行,通过系统层JSBridge实现通信,实现UI的渲染、事件的处理等。

9.请谈谈原生开发小程序、wepy、mpvue 的对比?

  • 个人认为,如果是新项目,且没有旧的 h5 项目迁移,则考虑用小程序原生开发,好处是相比于第三方框架,坑少。
  • 而如果有 老的 h5 项目是 vue 开发 或者 也有 h5 项目也需要小程序开发,则比较适合 wepy 或者 mpvue 来做迁移或者开发,近期看wepy几乎不更新了,所以推荐美团的mpvue。
  • 而如果如果团队前端强大,自己做一套框架也没问题。

一.简单描述下微信小程序的相关文件类型?

1、 ①.wxml 模板文件,是框架设计的一套标签语言,结合基础组件、事件系统、可以构建出页面的结构

​ ②.wxss 样式文件,是一套样式语言,用于描述WXML的组件样式

​ ③.js 脚本逻辑文件,逻辑处理网络请求

​ ④.json 配置文件,小程序设置,如页面注册,页面标题及tabBar

2、 app.json 整个小程序的全局配置,包括:

​ pages:[所有页面路径]

​ 网络设置(网络超时时间)

​ 界面表现(页面注册)

​ window:{背景色、导航样式、默认标题}

底部tab等

3、app.js 监听并处理小程序的生命周期函数、声明全局变量

4、app.wxss 全局配置的样式文件

10.怎么封装微信小程序的数据请求?

将所有的接口放在统一的js文件中并导出

2、在app.js中创建封装请求数据的方法

3、在子页面中调用封装的请求数据

1、在根目录下创建utils目录及api.js文件和apiConfig.js文件;

2、在appConfig.js封装基础的get\post\put\upload等请求方法,设置请求体,带上token和异常处理等;

3、在api.js中引入apiConfig.js封装好的请求方法,根据页面数据请求的urls,设置对应的方法并导出;

4、在具体页面导入;

11.微信小程序有哪些传值(传递数据)方法?

1、给html元素添加data-*属性来传递值,然后通过e.currentTarget.dataset或onload的param参数获取。

注:data-名称不能有大写字母、不可以存放对象

2、设置id的方法标识来传值,通过e.currentTarget.id获取设置的id的值,然后通过设置全局对象的方式来传递数值

3、在navigator中添加参数数值

1、使用全局变量实现数据传递

2、页面跳转或重定向时,使用url带参数传递数据

3、使用组件模板template传递参数

4、使用缓存传递参数

5、使用数据库传递参数

12.四.哪些方法来提高微信小程序的应用速度?

1、提高页面的加载速度

2、用户行为预测

3、减少默认data的大小

4、组件化方案

13.微信小程序的原理?

微信小程序采用JavaScript、wxml、wxss三种技术进行开发,与现有前端开发的区别:

①JavaScript的代码是运行在微信APP中的,因此一些h5技术的应用需要微信APP提供对应的API支持;

②wxml微信自己基于xml语法开发的,因此在开发时只能使用微信提供的现有标签,html的标签是无法使用的;

③wxss具有css的大部分特性,但并不是所有都支持没有详细文档(wxss的图片引入需使用外链地址,没有body,样式可直接使用import导入)。

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

小程序功能分为webview和APPservice,webview主要用来展示UI,appservice用来处理业务逻辑、数据及接口调用。它们在两个进程中进行,通过系统层JSBridge实现通信,实现UI的渲染、事件处理。

14.分析微信小程序的优劣势?

优势:

①容易上手,基础组件库比较全,基本上不需要考虑兼容问题;

②开发文档比较完善,开发社区比较活跃,支持插件式开发;

③良好的用户体验:无需下载,通过搜索和扫一扫就可以打开,打开速度快,安卓上可以添加到桌面,与原生APP差不多;

④开发成本比APP要低;

⑤为用户提供良好的安全保障(小程序发布 严格的审查流程)

劣势:

①限制较多,页面大小不能超过1M,不能打开超过5个层级的页面;

②样式单一,部分组件已经是成型了的,样式不可修改,例如:幻灯片、导航

③推广面窄,不能分享朋友圈,只能通过分享给朋友,附近小程序推广

④依托于微信,无法开发后台管理功能

⑤后台调试麻烦,因为api接口必须https请求且公网地址

⑥真机测试,个别功能安卓和苹果表现迥异,例如安卓的定位功能加载很慢

15.微信小程序与H5的区别?

①运行环境不同(小程序在微信运行,h5在浏览器运行);

②开发成本不同(h5需要兼容不同的浏览器);

③获取系统权限不同(系统级权限可以和小程序无缝衔接);

④应用在生产环境的运行流畅度(h5需不断对项目优化来提高用户体验);

16.小程序关联微信公众号如何确定用户的唯一性?

使用wx.getUserInfo方法 withCredentials为true时,可获取encryptedData,里面有union_id.后端需要进行对称解密。

17.使用webview直接加载要注意哪些事项?

①必须要在小程序后台使用管理员添加业务域名;

②h5页面跳转至小程序的脚步必须是1.3.1以上;

③微信分享只可以是小程序的主名称,如要自定义分享内容,需小程序版本在1.7.1以上;

④h5的支付不可以是微信公众号的appid,必须是小程序的appid,而且用户的openid也必须是用户和小程序的

18.小程序调用后台接口遇到哪些问题?

①数据的大小限制,超过范围会直接导致整个小程序崩溃,除非重启小程序;

②小程序不可以直接渲染文章内容这类型的html文本,显示需借助插件

19.微信小程序如何实现下拉刷新?

用view代替scroll-view,设置onPullDownRefresh函数实

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

40.

41.

42.

43.

44.

45.

46.

47.

48.

49.

50.

51.

52.

53.

54.

55.

56.

57.

58.

59.

60.

61.

62.

63.

64.

65.

67.

68.

69.

70.

71.

72.

73.

74.

75.

76.

77.

78.

79.

80.

81.

82.

83.

84.

85.

86.

87.

88.

89.

90.

91.

92.

93.

94.

95.

96.

97.

98.

99.

100

.