移动开发面试题 -uniapp和小程序面试题
移动开发面试题 -uniapp和小程序面试题
实际问题:
1. uniapp 安卓苹果端适配
html5+ 以及 native.js https://www.html5plus.org/doc/zh_cn/android.html
iOS安全区 解决方案一:使用原生占位(仅App端支持)
manifest.json 文件 app-plus 节点下配下 safearea
"safearea": {
"background": "#CCCCCC",
"bottom": {
"offset": "auto"
}
}
iOS安全区 解决方案二:不使用原生占位(非App端可以不配置manifest)
manifest.json 文件 app-plus 节点下配下 safearea
"safearea": {
"bottom": {
"offset": "none"
}
}
然后在需要适配的页面内使用 css 常量 constant(safe-area-inset-bottom)、env(safe-area-inset-bottom) 来适配,参考:为iPhoneX设计网站。微信小程序模拟器不支持,以真机为准。
比如为列表底部添加内边距避开安全区,在 iPhoneX 上列表底部会有内边距,在其他设备上没有内边距:
<style>
.list {
padding-bottom: 0;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
style>
注意:使用了pages.json里的原生tabbar,不管manifest里安全区设置如何,在tabbar下方都会留出空隙。
判断是否为刘海屏的方法
使用5+ API (plus.navigator.hasNotchInScreen)可查询当前设备是否为刘海屏。
安卓底部虚拟按键背景色修改方式
使用Native.js修改:
var Color = plus.android.importClass("android.graphics.Color");
plus.android.importClass("android.view.Window");
var mainActivity = plus.android.runtimeMainActivity();
var window_android = mainActivity.getWindow();
window_android.setNavigationBarColor(Color.GREEN);
3. h5和原生App通讯
1、H5必须用原生,试过很多,只能用原生。这里是官方的demo链接
2、uniapp 中的那个需要做交互的文件必须是nvue.
<web-view @message="message" src="https://uniapp.dcloud.io/static/web-view.html"></web-view>
message(event){
console.log('接收到消息',event.detail.data)
}
3、H5中加入事件监听
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<script>
document.addEventListener('UniAppJSBridgeReady', function() {
uni.postMessage({
data: {
action: '这是我传送的消息'
}
});//传递的消息信息,必须写在 data 对象中。
});
</script>
复制(为作者贡献原力分)
4. h5跳小程序

<template>
<view class="wx" v-html="html"> </view>
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'
import { SystemApi } from '@global/api/SystemApi'
@Component({
name: 'Test',
})
export default class Test extends Vue {
html: any = ''
onReady() {
this.buildHtml()
}
async buildHtml() {
await SystemApi.getWxReady()
this.html = `
`
}
}
</script>
5.weex、nvue 和 vue区别
1.区别
weex(we except,自己的理解)支持原生和vue并写,原生渲染,但是组件库不完善,仅支持编写app。
nvue嵌入了weex引擎,又有uniapp丰富的组件库,相当于dcloud写的weex升级版。
在uniapp中支持使用nvue和vue编写多端应用,唯一的不同是nvue使用原生的(和weex及react native类似)的渲染方式。
vue是使用webview的方式渲染,性能可能有些差距。
nvue样式方面: 布局只支持flex布局,然后css有限制。
nvue数据共享方面: 支持vuex,支持uni.store,支持globalData。支持和vue页面相互通讯。
2.什么时候使用
套用uniapp官方文档的一句话:
如果您是web前端,不熟悉原生放置,那么建议您仍然以vue页面为主,在App端某些vue页面表现不佳的场景下使用nvue作为强化补充。具体场景及其他使用注意见官方文档:
知识点:
1.uniapp进行条件编译的两种方法?小程序端和H5的代表值是什么?
通过 #ifdef、#ifndef 的方式 H5 : H5 MP-WEIXIN : 微信小程序
2.uniapp的配置文件、入口文件、主组件、页面管理部分
pages.json 配置文件 main.js 入口文件 App.vue 主组件 pages 页面管理部分
3.uniapp上传文件时用到api是什么 格式是什么?
uni.uploadFile({
url: '要上传的地址',
fileType:'image',
filePath:'图片路径',
name:'文件对应的key',
success: function(res){
console.log(res)
},
})
4.uniapp获取地理位置的API是什么?
uni.getLocation
5.rpx、px、em、rem、%、vh、vw的区别是什么?
rpx 相当于把屏幕宽度分为750份,1份就是1rpx
px 绝对单位,页面按精确像素展示
em 相对单位,相对于它的父节点字体进行计算
rem 相对单位,相对根节点html的字体大小来计算
% 一般来说就是相对于父元素
vh 视窗高度,1vh等于视窗高度的1%
vw 视窗宽度,1vw等于视窗宽度的1%
6.uniapp如何监听页面滚动?
使用 onPageScroll 监听
7.如何让图片宽度不变,高度自动变化,保持原图宽高比不变?
给image标签添加 mode=‘widthFix’
8.uni-app的优缺点
优点:
a. 一套代码可以生成多端
b. 学习成本低,语法是vue的,组件是小程序的
c. 拓展能力强
d. 使用HBuilderX开发,支持vue语法
e. 突破了系统对H5条用原生能力的限制
缺点:
a. 问世时间短,很多地方不完善
b. 社区不大
c. 官方对问题的反馈不及时
d. 在Android平台上比微信小程序和iOS差
e. 文件命名受限
9.分别写出jQuery、vue、小程序、uni-app中的本地存储数据和接受数据是什么?
jQuery:
存: .cookie(
′
key
′
,
′
value
′
)取:.cookie(‘key’)
vue:
存储:localstorage.setItem(‘key’,‘value’)
接收:localstorage.getItem(‘key’)
微信小程序:
存储:通过wx.setStorage/wx.setStorageSync写数据到缓存
接收:通过wx.getStorage/wx.getStorageSync读取本地缓存,
uni-app:
存储:uni.setStorage({key:“属性名”,data:“值”})
接收:uni.getStorage({key:“属性名”,success(e){e.data//这就是你想要取的token}})
10.jq、vue、uni-app、小程序的页面传参方式
1、 jq传参
通过url拼接参数进行传参。
2、 vue传参
一、 vue可以通过标签router-link跳转传参,通过path+路径,query+参数
二、 也可以通过事件里的this.$router.push({})跳转传参
3、 小程序传参
通过跳转路径后面拼接参数来进行跳转传参
11.vue , 微信小程序 , uni-app绑定变量属性
vue和uni-app动态绑定一个变量的值为元素的某个属性的时候,会在属性前面加上冒号":";
小程序绑定某个变量的值为元素属性时,会用两个大括号{undefined{}}括起来,如果不加括号,为被认为是字符串。
12.vue,小程序,uni-app的生命周期
vue:
beforeCreate(创建前)
created(创建后)
beforeMount(载入前),(挂载)
mounted(载入后)
beforeUpdate(更新前)
updated(更新后)
beforeDestroy(销毁前)
destroyed(销毁后)
小程序,uni-app:
1. onLoad:首次进入页面加载时触发,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
2. onShow:加载完成后、后台切到前台或重新进入页面时触发
3. onReady:页面首次渲染完成时触发
4. onHide:从前台切到后台或进入其他页面触发
5. onUnload:页面卸载时触发
6. onPullDownRefresh:监听用户下拉动作
7. onReachBottom:页面上拉触底事件的处理函数
8. onShareAppMessage:用户点击右上角转发
13.git是什么?git的五个命令,git和svn的区别
git是什么
git是目前世界上最先进的分布式管理系统。
git的常用命令
1、 git init 把这个目录变成git可以管理的仓库
2、 git add README.md 文件添加到仓库
3、 git add 不但可以跟单一文件,也可以跟通配符,更可以跟目录。一个点就把当前目录下所有未追踪的文件全部add了
4、 git commit -m ‘first commit’把文件提交到仓库
5、 git remote add origin git@github.com:wangjiax9/practice.git //关联远程仓库
6、 git push -u origin master //把本地库的所有内容推送到远程库上
Git和SVN的区别
1. Git是分布式版本控制工具 , SVN是集中式版本控制工具
2. Git没有一个全局的版本号,而SVN有。
3. Git和SVN的分支不同
4. git吧内容按元数据方式存储,而SVN是按文件
5. Git内容的完整性要优于SVN
6. Git无需联网就可使用(无需下载服务端),而SVN必须要联网(须下载服务端)因为git的版本区就在自己电脑上,而svn在远程服务器上。
14. Git项目如何配置,如何上传至GitHub。描述其详细步骤
1、 注册登录github
2、 创建github仓库
3、 安装git客户端
4、 绑定用户信息
5、 设置ssh key
6、 创建本地项目以及仓库
7、 关联github仓库
8、 推送项目到github仓库