.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:16px;overflow-x:hidden;color:#252933}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{line-height:1.5;margin-top:35px;margin-bottom:10px;padding-bottom:5px}.markdown-body h1{font-size:24px;line-height:38px;margin-bottom:5px}.markdown-body h2{font-size:22px;line-height:34px;padding-bottom:12px;border-bottom:1px solid #ececec}.markdown-body h3{font-size:20px;line-height:28px}.markdown-body h4{font-size:18px;line-height:26px}.markdown-body h5{font-size:17px;line-height:24px}.markdown-body h6{font-size:16px;line-height:24px}.markdown-body p{line-height:inherit;margin-top:22px;margin-bottom:22px}.markdown-body img{max-width:100%}.markdown-body hr{border:none;border-top:1px solid #ddd;margin-top:32px;margin-bottom:32px}.markdown-body code{word-break:break-word;border-radius:2px;overflow-x:auto;background-color:#fff5f5;color:#ff502c;font-size:.87em;padding:.065em .4em}.markdown-body code,.markdown-body pre{font-family:Menlo,Monaco,Consolas,Courier New,monospace}.markdown-body pre{overflow:auto;position:relative;line-height:1.75}.markdown-body pre>code{font-size:12px;padding:15px 12px;margin:0;word-break:normal;display:block;overflow-x:auto;color:#333;background:#f8f8f8}.markdown-body a{text-decoration:none;color:#0269c8;border-bottom:1px solid #d1e9ff}.markdown-body a:active,.markdown-body a:hover{color:#275b8c}.markdown-body table{display:inline-block!important;font-size:12px;width:auto;max-width:100%;overflow:auto;border:1px solid #f6f6f6}.markdown-body thead{background:#f6f6f6;color:#000;text-align:left}.markdown-body tr:nth-child(2n){background-color:#fcfcfc}.markdown-body td,.markdown-body th{padding:12px 7px;line-height:24px}.markdown-body td{min-width:120px}.markdown-body blockquote{color:#666;padding:1px 23px;margin:22px 0;border-left:4px solid #cbcbcb;background-color:#f8f8f8}.markdown-body blockquote:after{display:block;content:""}.markdown-body blockquote>p{margin:10px 0}.markdown-body ol,.markdown-body ul{padding-left:28px}.markdown-body ol li,.markdown-body ul li{margin-bottom:0;list-style:inherit}.markdown-body ol li .task-list-item,.markdown-body ul li .task-list-item{list-style:none}.markdown-body ol li .task-list-item ol,.markdown-body ol li .task-list-item ul,.markdown-body ul li .task-list-item ol,.markdown-body ul li .task-list-item ul{margin-top:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-top:3px}.markdown-body ol li{padding-left:6px}.markdown-body .contains-task-list{padding-left:0}.markdown-body .task-list-item{list-style:none}@media (max-width:720px){.markdown-body h1{font-size:24px}.markdown-body h2{font-size:20px}.markdown-body h3{font-size:18px}}.markdown-body pre,.markdown-body pre>code.hljs{color:#333;background:#f8f8f8}.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:700}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:700}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:700}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:700}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
最近有幸拜读到前端双越老师的文章 《【万字总结】2025 前端+大前端+全栈 知识体系》
前端双越老师相信做个前端的小伙伴都会接触到,wangeditor的开源作者,花费了很多年时间开发和维护的wangeditor富文本编辑器,慕课上录制过了高质量的视频课程,这一两年在带领小伙伴从0到1做 划水AI项目。。。 这篇涵盖计算机基础、数据结构和算法、编程模式、前端基础、网络 HTTP 协议等方面。包括计算机组成、操作系统等原理,常见数据结构与算法,OOP 等编程模式,以及 HTML、CSS、JS 等前端基础知识和网络协议相关内容,强调体系化思维的重要性。 很难得前端双越老师站在这个角度给很多开发者以全面的视角分享全栈知识。 目前还联合精英博主,打造前端面试派,提供了高质量的面试题、大厂面试流程和金牌简历计划。
::: details
:::
::: details
:::
::: details
:::
::: details
录音可以通过 AVRecorder 和 AudioCapturer 来实现。两者区别主要在支持录制声音的格式不同和控制录音文件的细小粒度不同上。AVRecorder 会简单一些,AudioCapturer 会复杂一些-还可以搭配 ai 语音功能使用
AVRecorder 主要有以下这些状态:
类型说明'idle'闲置状态。'prepared'参数设置完成'started'正在录制。'paused'录制暂停。'stopped'录制停止。'released'录制资源释放。'error'错误状态。
:::
::: details
:::
::: details
做过相册图片的上传(如果是沙箱内的图片只需要 1 个步骤即可,直接上传),流程主要有 3 个步骤,基于 photoAccessHelper 、CoreFileKit、NetworkKit 来实现的
图片处理,旋转、缩放、图片保存主要基于 Image Kit 来实现。它提供有
其中压缩图片是通过 一个 ImageKit 的 packing 函数,传入压缩比例(0-100)来是实现的。值越小体积越小
:::
::: details
:::
::: details
一般直接看 AppScope 中的字段就行
:::
::: details
:::
::: details
跨域存在于不同源的浏览器和服务器的网络通信中,因为鸿蒙端嵌套了 web 组件,理解成就是一个浏览器,因此也会存在跨域
为了提高安全性,ArkWeb 内核不允许 file 协议或者 resource 协议访问 URL 上下文中来自跨域的请求。因此,在使用 Web 组件加载本地离线
资源的时候,Web 组件会拦截 file 协议和 resource 协议的跨域访问。
主要有两种解决方案
:::
::: details
可以通过申请长时任务,实现在后台长时间运行。长时任务支持的类型,包含数据传输、音视频播放、录制、定位导航、蓝牙相关、多设备互联、WLAN 相关、音视频通话和计算任务
开发步骤如下:
:::
::: details
需要企业资质、需要在 AGC 平台上开通服务。
:::
::: details
HarmonyOS 中的生命周期
::: details
页面生命周期
组件生命周期独有的
UIAbility 生命周期
:::
::: details
:::
::: details
HarmonyOS 中有三种类型的包:HAP(HarmonyOS Ability Package)、HAR(Harmony Archive)、HSP(Harmony Shared Package)。
:::
::: details
:::
::: details
HarmonyOS 提供了多种动画能力,包括属性动画、显式动画、转场动画、路径动画和粒子动画。
:::
::: details
在 HarmonyOS 中,可以通过 router.pushUrl 方法跳转到目标页面,并携带参数。在进入被分享页面时,通过 router.getParams()来获取
传递的数据。此外,还可以使用 LocalStorage 等在页面间共享状态。
:::
::: details
ArkTS 是 HarmonyOS 优选的主力应用开发语言,它保持了 TypeScript 的基本风格,同时通过规范定义强化开发期静态检查和分析,提升程序执行稳定性和性能。ArkTS 与 TS 的主要区别在于 ArkTS 是静态类型的,而 TS 支持动态类型。ArkTS 在编译时进行类型检查,有助于在代码运行前发现和修复错误。
// 一元运算符`+`只能作用于数值类型:
let t = +42; // 合法运算
let s = +'42'; // 编译时错误
:::
::: details
:::
::: details
:::
::: details
业务场景 | Navigation | Router |
---|---|---|
一多能力 | 支持,Auto 模式自适应单栏跟双栏显示 | 不支持 |
跳转指定页面 | pushPath & pushDestination | pushUrl & pushNameRoute |
跳转 HSP 中页面 | 支持 | 支持 |
跳转 HAR 中页面 | 支持 | 支持 |
跳转传参 | 支持 | 支持 |
获取指定页面参数 | 支持 | 不支持 |
传参类型 | 传参为对象形式 | 传参为对象形式,对象中暂不支持方法变量 |
跳转结果回调 | 支持 | 支持 |
跳转单例页面 | 支持 | 支持 |
页面返回 | 支持 | 支持 |
页面返回传参 | 支持 | 支持 |
返回指定路由 | 支持 | 支持 |
页面返回弹窗 | 支持,通过路由拦截实现 | showAlertBeforeBackPage |
路由替换 | replacePath & replacePathByName | replaceUrl & replaceNameRoute |
路由栈清理 | clear | clear |
清理指定路由 | removeByIndexes & removeByName | 不支持 |
转场动画 | 支持 | 支持 |
自定义转场动画 | 支持 | 支持,动画类型受限 |
屏蔽转场动画 | 支持全局和单次 | 支持 设置 pageTransition 方法 duration 为 0 |
geometryTransition 共享元素动画 | 支持(NavDestination 之间共享) | 不支持 |
页面生命周期监听 | UIObserver.on('navDestinationUpdate') | UIObserver.on('routerPageUpdate') |
获取页面栈对象 | 支持 | 不支持 |
路由拦截 | 支持通过 setInercption 做路由拦截 | 不支持 |
路由栈信息查询 | 支持 | getState() & getLength() |
路由栈 move 操作 | moveToTop & moveIndexToTop | 不支持 |
沉浸式页面 | 支持 | 不支持,需通过 window 配置 |
设置页面标题栏(titlebar)和工具栏(toolbar) | 支持 | 不支持 |
模态嵌套路由 | 支持 | 不支持 |
:::
::: details
:::
::: details
:::
::: details
鸿蒙发送网络请求有两套方案
:::
::: details mote-communication-httpresume-V5)
:::
::: details
用于验证服务端和客户端之间的身份和数据完整性,确保通信的安全性。
导入远场通信模块和文件读写模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { fileIo } from '@kit.CoreFileKit';
使用文件读写模块 读取存在客户端的证书
// 读取
fileIo.read(file.fd
// 存到字符串 content中
// 将读取的数据转换为字符串
let content = String.fromChar
然后调用给远场通信的 configuration 方法设置到 security.certificate.content 属性中
request.configuration = {
security: {
certificate: {
content: content,
:::
::: details
Preferences
或数据库缓存首页数据,下次启动先展示缓存再刷新。Worker
线程,防止主线程卡顿。onPageHide
里的释放逻辑。:::
::: details
:::
::: details
LazyForEach
需要与实现了 IDataSource
接口的数据源(如 LazyDataSource
)绑定。当数据源发生变化(增、删、改)时,框架会自动触发更新。DataChangeListener
通知 LazyForEach
数据变更。只有实际变化的项会触发局部更新,而非重新渲染整个列表。:::
::: details
:::
::: details
:::
::: details
:::
::: details
对比维度 | 自动签名 | 手动签名 |
---|---|---|
适用场景 | 单设备调试(单真机可用) | 多设备调试、断网环境调试 |
签名证书管理 | 由 DevEco Studio 自动生成签名证书并绑定当前设备 UDID | 需在AGC控制台申请调试证书****、注册调试设备 UDID、配置调试 Profile |
安装限制 | 仅允许当前绑定的设备安装 | 支持注册的所有调试设备安装 |
权限支持 | 不支持受限开放权限(如健康服务) | 支持受限权限(需通过 AGC 审核并提交场景说明) |
发布用途 | 禁止用于发布 | 可生成与发布版本一致的签名包(需替换为正式证书) |
受限服务依赖 | 无法使用部分依赖签名的开放能力(如 Health Kit) | 支持所有开放能力 |
公钥指纹管理 | 自动生成调试指纹,需在发布前手动更新为发布指纹 | 需手动维护调试和发布的指纹 |
:::
::: details