04-阶段三微信小程序面试题

180 阅读8分钟

■ 符号说明

💘 课题

🌟 常见重要

🌛 需要有印象的

💘 01-微信小程序-页面布局(简介、分包、传参、UI组件、导航tabBar、商城项目布局

🌟 【简介】小程序项目超过2M怎么解决?

可以分包,通过修改全局的配置文件page.json加subpackages键

🌟 【简介】有没有开发过跨平台项目,如何开发的

之前通过uniapp开发过夸平台的项目

🌟 【简介】有开发过快应用、或者支付宝小程序吗

没有,公司有需要也可以开发,因为之前有用过uniapp所以没问题

🌟 【视图层】谈谈你对分包的理解

当小程序项目超过2M就可以分包,避免无法上线

🌟 【视图层】谈谈你对编译模式的理解,&好处

默认编译运行小程序访问page.json第一个路由,

通过编译模式可以访问指定路由,避免每次保存后需要重新打开开发页面,

从而加快项目开发

🌟 【视图层】小程序中如何通过事件传递参数

首先标签上加【data-参数名】然后通过事件对象获取

🌛 【视图层】你有封装过组件吗,怎么封装的

有,为了高保证实现UI设计稿,loading、弹框都有进行封装,主要通过自定义组件封装。

🌛 【视图层-内置组件】小程序能随意写HTML吗,如何不能如何解决

不能,可以通过内置rich-text富文本组件或第三方插件 wxParse

🌟 【视图层-内置组件】小程序中如何实现声明式导航

通过内置组件navigator就行

语法:

navigate 保留当前页,跳转非tabBar 可以跳转小程序 redirect 不保留当前页,跳转非tabBar switchTab 跳转tabBar,关闭所有非tabBar

🌟 【视图层-内置组件】声明式导航跳转方式有几种

挺多的,例如

navigate  保留当前页,跳转非tabBar   可以跳转小程序
redirect  不保留当前页,跳转非tabBar
switchTab 跳转tabBar,关闭所有非tabBar

🌟 【视图层-内置组件】声明式导航如何传递参数&获取

直接用get形式传递参数,然后再生命周期onload中获取

onLoad(options){
  console.log(options)	//正常打印出 options 值
}

其他生命周期钩子函数

// 获取当前小程序的页面栈
let pages = getCurrentPages();
// 数组中索引最大的页面--当前页面
let currentPage = pages[pages.length-1];
// 打印出当前页面中的 options
console.log(currentPage.options)		//正常打印出 options 值

🌛 【视图层-内置组件】有用过web-view吗,哪里用的

没有,了解过主要用来加载第三方网页 类似于iframe

🌛 【视图层-UI组件库】用过哪些小程序UI框架

weui、vantui等等

🌛 【视图层-UI组件库】小程序UI框架的原理

主要通过自定义组件库语法,然后结合官方提供的框架,发布到npm上即刻;

🌟 【视图层-布局】谈谈你对px、rpx、em、rem理解和区别

都是布局单位

px 固定像素

rem相对于html绕开了复杂的层级关系,其原理就是根据html的font-size适配

em相对父麻烦

vw可视窗口1%

rpx是小程序自适应单位。 1px = 750/设计稿宽度 rpx

💘 02-微信小程序-后端交互(商城项目接口、配置文件、分页、mock数据

🌟 【逻辑层】谈谈你对编程式导航的理解&有哪些?

wx.navigateTo 保留当前页,跳转非tabBar
wx.redirectTo 不保留当前页,跳转非tabBar wx.switchTab 跳转tabBar,关闭所有非tabBar

🌟 【逻辑层】如何实现小程序的数据存储

以前:H5存储、COOKIE
现在:小程序都有自己的存储语法

localStorage.setItem(键,值)
let 变量名 = localStorage.getItem(键)


同步存:wx.setStorageSync(键,值)
同步取:let 变量名 = wx.getStorageSync(键)

异步存:wx.setStorage({  key:键, data: 值 }
异步取:
wx.getStorage({
  key: 'key',
  success (res) {
    console.log(res.data)
  } 
})

🌟 【逻辑层】小程序如何使用mock数据

  • 有哪些
Mock.js(缺点:数据都是动态的假数据,无法真实模拟增删改查的情况)
第三方接口管理工具rap2/moco/yapi:(是什么:基于mockjs开发的平台  缺点:同Mock.js)
本地node服务器json-server:(优点:香  秒启Rest Api Server、真实模拟增删改查)
  • 如何用:利用json-server + mockjs 搭建mock数据服务器,启动之后 直接请求

🌟 【逻辑层】小程序如何发送请求

通过wx.request,然后实现项目中会在utils/request.js通过promise封装一下

🌟 【逻辑层】小程序分页如何实现

通过内置钩子函数onPullDownRefresh实现下拉,

通过ReachBottom实现上啦刷新。

💘 03-微信小程序-各种功能(堵车么项目布局:地图、定位、客服、分享、意见反馈、录音等)

🌟 如何实现tabBar功能

直接修改package.json增加tabBar键就可以

🌟 如何在小程序中使用阿里字体图表

1、生成iconfont并下载

2、复制iconfont.css图标样式到utils/font.wxss

3、后期谁要使用通过 @Import '路径' 导入即可使用

🌟 如何实现地图功能

直接通过map组件就可以

🌟 如何在地图上打点

通过map组件的属性 具体忘了,公司有需要在看下手册没问题

参考:

www.zyiz.net/tech/detail…

www.cnblogs.com/jiangwenxin…

blog.csdn.net/Crazy_GirlL…

其他:如果面试官问的比较深就加一句,之前做项目也就是实现简单的地图加标注点,线,面,定位等并没有太复杂。

🌟 高德地图安居客如何实现的

链接: pan.baidu.com/s/1uP1qRFBc…

提取码: m3h0

手册

lbs.amap.com/demo/javasc…

develop.smaryun.com:81/API/JS/OL3I…

🌟 如何实现定位功能

首先修改配置文件允许授权

在app.json中添加:
“permission”: {
  “scope.userLocation”: {
  	“desc”: “你的位置信息将用于小程序位置接口的效果展示”
  }
},

然后通过wx.getLocation获取用户坐标

💘 04-微信小程序-各种功能(堵车么项目接口:微信登陆、手机登陆、openid、多图上传、预览、上线等)

🌟 谈谈你对https的理解

HTTP(HyperText Transfer Protocol),超文本传输协议,是一个基于TCP实现的应用层协议。

HTTPS 是最流行的 HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和 服务器都支持此协议。

使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。 HTTPS 在 HTTP 下面提供了一个传输级的密码安全层——可以使用 SSL,也可以使用其后继者—— 传输层安全(Transport Layer Security,TLS)。由于 SSL 和 TLS 非常类似,所以我们不太严格地用术语 SSL 来表示 SSL 和 TLS。


http 80 都是基于底层 tcp 协议

https 443 都是基于底层 tcp 协议 + ssh协议 安全

问 :你们接口时什么协议的

答:https

问:怎么搞得

答:后端给我的、 推荐还是说一说 就是去腾讯云、阿里云申请整数,然后服务器配置就可以了

大概是这个流程,然后之前公司小程序项目 因为平时我喜欢专研技术,所以我就自己研究了一把

当时用了腾讯云免费证书

问:具体怎么弄的 可以说说看

答:因为当时是好奇 感兴趣 弄了一下 也实现了 但是现在好长时间了 具体说实话给忘了 但是公司有需求我在百度下 也没问题。

🌛 计算两点之间的距离

主要先准备好两个坐标,然后通过官方提供的方法进行计算两点之间的距离

🌟 谈谈你对openid的理解

openid是用户和小程序之间唯一标识,类似于开发中token的

🌟 登录如何实现的

🌟 如何实现图片上传功能

通过weui的mp-uploader组件实现多图上传功能

然后接口官方的 wx.chooseImage拍照或选择图片,

最后wx.uploadFile上传即刻


      wx.chooseImage({
          sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
          sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
          success: res=> {
              // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
              that.setData({
                  files: this.data.files.concat(res.tempFilePaths)
              });
          }
      })


     wx.uploadFile({
       url: 'https://kg.zhaodashen.cn/v2/upload.php',  
       name: 'file',//根据后端接口开发文档的要求填写
       filePath: res.tempFilePaths[0],
       success: result => {
         let res = JSON.parse(result.data)
         if (res.meta.state === 201)
         {
           // console.log(res.data.url+'/'+res.data.img)
           let imgs = this.data.imgs.concat(res.data.url+'/'+res.data.img)
           this.setData({
             imgs
           })
         }
       },  
       fail: function(err){  
         // console.log(err)
         return 
       }
     })  

💘 05-微信小程序-全栈APP开发(uniapp 混合app开发)

其他

问6:问7:问8:小程序如何上线 问9:小程序https是如何配置的 问10:定位如何实现的 问11:微信登陆怎么实现的 问12:手机登陆怎么实现的 问13:知道openid吗,干嘛的,怎么用 问14:图片上传图和实现的 问15: 问16:自己写的功能怎么实现。

技术栈

利用flex+rpx+view+swiper+tabBar+scroll-view等微信组件进行页面布局
利用UI组件库实现页面布局
基于promise封装wx.request实现接口,增强接口可扩展性、可读性
利用登陆api实现登陆功能,获取用户唯一标识openid
通过模版推送api实现手机定制、下单成功通知,给用户推送信息
使用广告接口在小程序内投放banner广告
通过腾讯云https证书&配置nginx实现接口https协议
通过七牛云对象存储,统一存放项目壁纸等图片
通过cdn、懒加载技术加速静态资源访问速度
利用mock生成测试数据或利用rap2网站生成mock 数据