网站购物车实现,临沂市建设安全管理网站,试论述外贸网站建设应注意的问题,网站建设太金手指六六十一上一篇面试题链接#xff1a;https://mp.csdn.net/mp_blog/creation/editor/144685078
1. 鸿蒙简单介绍和发展历程
HarmonyOS 是新一代的智能终端操作系统#xff0c;为不同设备的智能化、互联与协同提供了统一的语言。带来简洁#xff0c;流畅#xff0c;连续#xff0…上一篇面试题链接https://mp.csdn.net/mp_blog/creation/editor/144685078
1. 鸿蒙简单介绍和发展历程
HarmonyOS 是新一代的智能终端操作系统为不同设备的智能化、互联与协同提供了统一的语言。带来简洁流畅连续安全可靠的全场景交互体验。
鸿蒙操作系统发展历程
2019年8月9日 鸿蒙1.0发布首次应用于华为荣耀智慧屏产品中标志着华为正式进军操作系统领域2020年9月10日 鸿蒙2.0在华为开发者大会上发布适用于部分手机、车机、智能电视等设备2022年7月27日 鸿蒙3.0在HarmonyOS3及华为全场景新品发布会上正式发布支持更多设备加入超级终端并提升了鸿蒙智联、万能卡片、流畅性能、隐私安全、信息无障碍等方面2023年8月4日 鸿蒙4.0在华为开发者大会上正式发布提供了强大的智能互联能力并在多屏跨设备投屏等方面实现突破2024年1月18日 鸿蒙Next开发者预览版本发布将不在兼容安卓应用
2. 鸿蒙使用网络资源的时候需要申请什么权限
使用网络资源时需要申请权限ohos.permission.INTERNET
在module.json5文件中加上(也就是在module下面加上requestPermissions) {module: {name: entry,type: entry,description: $string:module_desc,mainElement: EntryAbility,deviceTypes: [phone,tablet,2in1],requestPermissions:[{name : ohos.permission.INTERNET,reason: $string:reason,usedScene: {abilities: [FormAbility],when:inuse}}], 3. 自定义组件的创建和渲染流程
自定义组件的创建自定义组件的实例由ArkUI框架创建。初始化自定义组件的成员变量通过本地默认值或者构造方法传递参数来初始化自定义组件的成员变量初始化顺序为成员变量的定义顺序。如果开发者定义了aboutToAppear则执行aboutToAppear方法。在首次渲染的时候执行build方法渲染系统组件如果子组件为自定义组件则创建自定义组件的实例。在首次渲染的过程中框架会记录状态变量和组件的映射关系当状态变量改变时驱动其相关的组件刷新。
当应用在后台启动时此时应用进程并没有销毁所以仅需要执行onPageShow。
4. UiAbility页面启动的方式有哪些
singleton (单实例模式multiton多实例模式specified指定实例模式
4.1 singleton启动模式
singleton启动模式为单实例模式也是默认情况下的启动模式。 每次调用startAbility()方法时如果应用进程中该类型的UIAbility实例已经存在则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例即在最近任务列表中只存在一个该类型的UIAbility实例。 说明应用的UIAbility实例已创建该UIAbility配置为单实例模式再次调用startAbility()方法启动该UIAbility实例。由于启动的还是原来的UIAbility实例并未重新创建一个新的UIAbility实例此时只会进入该UIAbility的onNewWant()回调不会进入其onCreate()和onWindowStageCreate()生命周期回调。
使用方法如果需要使用singleton启动模式在module.json5配置文件中的launchType字段配置为singleton即可。
.multiton启动模式 multiton启动模式为多实例模式每次调用startAbility()方法时都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为multiton多实例模式。 使用方法multiton启动模式的开发使用在module.json5配置文件中的launchType字段配置为multiton即可。
.specified启动模式
specified启动模式为指定实例模式针对一些特殊场景使用例如文档应用中每次新建文档希望都能新建一个文档实例重复打开一个已保存的文档希望打开的都是同一个文档实例。
工作原理 假设应用有两个UIAbility实例即EntryAbility和SpecifiedAbility。EntryAbility以specified模式启动SpecifiedAbility。基本原理如下
EntryAbility调用startAbility()方法并在Want的parameters字段中设置唯一的Key值用于标识SpecifiedAbility。系统在拉起SpecifiedAbility之前会先进入对应的AbilityStage的onAcceptWant()生命周期回调获取用于标识目标UIAbility的Key值。系统会根据获取的Key值来匹配UIAbility。 如果匹配到对应的UIAbility则会启动该UIAbility实例并进入onNewWant()生命周期回调。如果无法匹配对应的UIAbility则会创建一个新的UIAbility实例并进入该UIAbility实例的onCreate()生命周期回调和onWindowStageCreate()生命周期回调。
使用方法在SpecifiedAbility中需要将module.json5配置文件的launchType字段配置为specified。 5. 常用的修饰符有哪些介绍一下
Entry- 修饰成为页面Component -修饰成为组件Preview - 让组件可预览State - 在组件内部定义响应式数据- 必须给初始值Prop- 接收父组件的响应式数据- 可以给初始值 也可以不给Builder- 声明轻量复用UIBuilderParam - 接收传入的轻量复用UI- 可以给初始值 也可以不给如果不给的话调用时需要判断CustomDialog- 修饰自定义弹层Styles- 修饰样式复用集合-不允许传参数Extend- 修饰某个特定组件的样式复用集合- 允许传参数Link- 可以实现父-子的双向绑定- 注意值得是组件内的双向绑定同样可以实现和Link绑定必须不能给初始值LocalStorageProp单向读取LocalStorage共享的属性必须给初始值LocalStorageLink 双向读取LocalStorage共享的属性 必须给初始值
. 页面栈最大容量是多少
页面栈的最大容量是32个页面
. 路由模式有几种
路由提供了两种不同的跳转模式
Standard无论之前是否添加过一直添加到页面栈默认Single如果目标页面已存在会将已有的最近同url页面移到栈顶看情况使用)
. 模块如何导出导入的
程序可划分为多组编译单元或模块。
每个模块都有其自己的作用域即在模块中创建的任何声明变量、函数、类等在该模块之外都不可见除非它们被显式导出。
与此相对从另一个模块导出的变量、函数、类、接口等必须首先导入到模块中。
导出可以使用关键字export导出顶层的声明。导入可以使用关键字import导入
. 说一下你做的这个项目开发鸿蒙项目的流程是什么
创建项目导入一些资源/色值创建一些公共目录-组件库-数据模型-工具类-请求-常量读写首选项工具类封装请求工具类使用泛行工具统一处理响应数据封装组件库-列表-加载-上传-日历-弹出时间-卡片。。。分包发布上线
10.鸿蒙的系统能力你用过哪些简单讲一下
弹窗路由跳转声音播放-av-player(Video)震动打电话定位需要用户授权发布通知ability通信-传参网络权限首选项文件选择后台订阅闹铃
11你项目中的权限是如何管理的
进入应用-判断token坑点-只能用首选项获取token- 跳转到主页/登录页销毁应用进入登录页- 获取token存储到持久化/首选项-跳到主页token超时- 销毁token销毁持久化/首选项-跳回登录页 12. H5和原生是怎么通信的
鸿蒙原生和h5通信有大概两种方式
.通过消息机制推送类似于前端的postMessage的跨域通信
首先通过原生端的webviewController进行创建通信端口 createMessagePorts, 该方法会创建两个端口一个用作原生端一个用作h5端然后通过webviewController将其中一个端口通过postMessage发送到h5端h5端用onmessage来接收该端口并全局缓存此时h5端用接收的端口发送消息给原生端原生端用自己剩余的端口进行onMessage接听消息此时就可以实现双向通信
.api调用的形式
原生端可以通过javascriptProxy给h5页面注入可用的sdk应用方法集合在h5完成初始化后可以直接调用原生的方法这是h5调用原生原生端也可以直接调用h5端的方法 runJavascript,在这个方法里面传入方法调用传参数就可以
需要注意的点 如果原生端的sdk方法是个异步方法在h5端无法及时得到结果此时需要再用原生反调h5进行传递结果
13. 鸿蒙云服务和微信小程序的区别是什么
本质上很像因为他们都遵循即用即走的模式都可以免安装轻量级的使用。
但是微信小程序本质上是在微信的安卓架构/ios架构上做了一层代码框架的机制也就是说本质上- 微信使用安卓/ios的开发语言完成小程序是微信自创的一套小程序的开发语言-类似于Vue的MVVM的框架然后微信进行了统一的代码编译和代码解释最终实现如今的小程序的效果
鸿蒙的元服务实现了代码大一统的效果也就是开发一个鸿蒙应用和鸿蒙元服务本质上都直接使用鸿蒙的arkTS和arkUI来进行调用通用能力和api方式一致并且把应用变成元服务变得非常简单只需要加个参数即可
14. 鸿蒙的刷新机制是怎么样的多层嵌套时是从build开始刷新吗
一个组件的渲染 aboutToAppear - build函数构建UI视图
当响应式数据发生变化builde的重新执行
所有的鸿蒙的响应式监测都只能监测到一层
多层嵌套时-执行的顺序 。洋葱圈模式- 一定是先最里面的组件渲染完毕然后最外层的组件最后渲染。
15.关于列表更新机制的问题
比较机制
列表比较-ForEach-有三个参数 第三个参数需要返回一个唯一的key, 如果不写系统会自动帮我们生成一个函数 规则 index_JSON.stringfy(item) { a: 1, b: 2 } { a: 2: b: 2 }
如果列表中key发生变化更新机制直接销毁该组件然后重新创建 但是反之你给的key如果没有发生变化但是数据变化了就会出现页面不更新现象。
16. 说一下全局存储状态用哪些方式
LocalStorage- 内存化存储- 局部可用AppStorage- 内存化存储- 全局可用PersitentStoreage- 写入磁盘沙箱 全局可用首选项- 写入磁盘- 全局可用关系型数据库- 写入磁盘
17你在项目中用过线程通信吗线程是怎么进行通信的
emitter和eventHub
都是基于事件总线的
区别是
eventHub:当前线程内通信,EventHub不是全局的事件中心不同的context对象拥有不同的EventHub对象事件的订阅、取消订阅、触发都作用在某一个具体的EventHub对象上因此不能用于虚拟机间或者进程间的事件传递emitter:同一进程不同线程间或同一进程同一线程内发送和处理事件的能力包括持续订阅事件、单次订阅事件、取消订阅事件以及发送事件到事件队列的能力
18你在项目中使用首选项主要用来做什么
存任何持久化的东西都可以比如token用户信息等。
首选项有长度限制 每一项的长度8192个字节
19组件通信的方式有哪些
父传子子传父跨层跨ability跨页面
20弹窗UI是怎么在页面UI中使用的
CustomtDialogController创建子窗口的形式创建弹层弹层bindSheet 半层bindContentCover 全层
21Builder和BuilderParams的区别
Builder是当前组件的UI复用结构BuilderParams是接收父组件传入的UI复用结构 传过来的类型是UI复用结构类型Builder传值 想要响应式必须是对象如果基础数据类型不具备响应式
22. 对于一些公共的样式你是怎么做的有没有什么优化的方式
封装组件抽提Builder抽提Styles和Extends
23共享库之间怎么进行页面跳转
import动态引入共享库的页面给共享库一个entry的name属性使用pushRouteName不要忘记导入依赖
24websocker用过吗说说你在项目中怎么用的
主要用在发消息和接消息用于客服模块的消息
用过和前端用法是一样的
const socket new WebSocket(url)socket.on(connect, () {})socket.on(message, () {})socket.on(disconnect, () {})socket.send()
25. 项目中有用到多线程嘛具体说一下多线程的作用如何使用的
用了因为我们要提高性能。
自定义组件创建完成之后在build函数执行之前将先执行aboutToAppear()生命周期回调函数。此时若在该函数中执行耗时操作将阻塞UI渲染增加UI主线程负担。因此应尽量避免在自定义组件的生命周期内执行高耗时操作。在aboutToAppear()生命周期函数内建议只做当前组件的初始化逻辑对于不需要等待结果的高耗时任务可以使用多线程处理该任务通过并发的方式避免主线程阻塞也可以把耗时操作改为异步并发或延后处理保证主线程优先处理组件绘制逻辑。 worker帮我们处理图片压缩处理完成之后再去执行其它任务
26什么是鸿蒙应用签名
指纹-就是一堆证明当然项目可被agc识别并允许调试到设备的说明文件
p12csrcerp7b
27如何引入本地的web页面
web({ src: $rawfile(index.html)controller: new weview.WebviewController() })
28Provide和Consume的使用中消费者修改了值提供者那边会变化吗
当然会因为都是双向的
29鸿蒙客户端怎么实现长登陆的再说说token的失效后是如何处理的
token是登录之后得到的如果失效应该去换取token还应有一个refreshToken,refreshToken换取一个新的token如果换取成功-替换原有token-重启发请求如果换取失败-删除token-删除refreshToken-跳转到登页