探索鸿蒙沉浸式:打造无界交互体验
一、鸿蒙沉浸式简介
在鸿蒙系统中,沉浸式是一种极具特色的设计理念,它致力于让用户在使用应用时能够全身心投入到内容本身,而尽可能减少被系统界面元素的干扰。通常来说,就是将应用的内容区巧妙地延伸到状态栏和导航栏所在的界面区域 ,从而达成一种浑然一体的视觉体验。
从用户体验的角度来看,沉浸式设计带来了诸多显著的提升。一方面,它能使页面与状态栏、导航栏的色调完美统一,避免出现色彩上的突兀感,进而为用户营造出更为和谐、舒适的视觉感受。就好比我们在使用视频播放应用时,开启沉浸式后,视频画面能够无缝衔接至屏幕边缘,整个屏幕都被视频内容所填满,让我们仿佛置身于一个专属的私人影院之中,极大地增强了观看的沉浸感和代入感。另一方面,这种设计还最大程度地利用了屏幕的可视区域,为页面提供了更广阔的布局空间,使得应用能够展示更多的内容,或者以更合理的方式组织界面元素。例如在阅读类应用中,沉浸式模式下文字能够铺满整个屏幕,减少了页面的留白,让我们可以专注于阅读,享受沉浸式的阅读乐趣,尽情沉浸在知识的海洋里,不受外界因素的打扰。
正是由于沉浸式设计在提升用户体验方面有着如此重要的作用,所以深入了解并掌握其在鸿蒙系统中的实现方法就显得尤为关键。接下来,我将详细介绍在鸿蒙系统中实现沉浸式效果的多种实用方法。
二、实现方式
(一)Window.setWindowLayoutFullScreen 方法
使用Window.setWindowLayoutFullScreen方法实现沉浸式效果,主要步骤如下:
- 获取应用主窗口:在UIAbility的onWindowStageCreate生命周期方法中,通过windowStage.getMainWindow()方法来获取应用的主窗口。这个方法返回一个Promise对象,我们可以使用then方法来处理获取成功后的逻辑。
- 设置窗口为全屏模式:在成功获取主窗口后,调用主窗口对象的setWindowLayoutFullScreen(true)方法,将窗口的布局设置为全屏模式,从而实现沉浸式效果。如果设置过程中出现错误,catch方法会捕获到错误信息并进行相应处理。
- 加载目标页面:完成上述步骤后,通过windowStage.loadContent("pages/Index", (err) => {... })方法为窗口加载对应的目标页面。如果加载过程中出现错误,会在回调函数中进行错误处理,打印错误信息;若加载成功,则打印成功信息。
以下是完整的代码示例:
import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';export default class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {// 1.获取应用主窗口let windowClass: window.Window | undefined = undefined;windowStage.getMainWindow().then(windowClass => {console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(windowClass));// 2.设置窗口全屏,实现沉浸式效果windowClass.setWindowLayoutFullScreen(true).then(() => {console.info('Succeeded in setting the window layout to full - screen mode.');}).catch((e: BusinessError) => {console.error('Failed to set the window layout to full - screen mode. Cause:' + JSON.stringify(e));});}).catch((err: BusinessError) => {console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));});// 3.为沉浸式窗口加载对应的目标页面windowStage.loadContent("pages/Index", (err) => {if (err.code) {console.error('Failed to load the content. Cause:' + JSON.stringify(err));return;}console.info('Succeeded in loading the content.');});}
}
这种方式实现的沉浸式效果是全局性的,即应用的所有页面都会处于沉浸式状态。如果某些页面不需要沉浸式效果,还需要在这些页面中通过获取window来关闭沉浸式,例如在aboutToAppear生命周期方法中使用window.getLastWindow(getContext()).then(win => { win.setWindowLayoutFullScreen(false) })来关闭当前页面的沉浸式效果 。
(二)expandSafeArea 属性
expandSafeArea属性是通过扩展组件的安全区域到状态栏和导航栏,从而实现沉浸式效果。其原理是在布局阶段,按照安全区范围大小进行 UI 元素布局;布局完成后,查看设置了expandSafeArea的组件边界(不包括margin)是否和安全区边界相交。如果相交,则根据expandSafeArea传递的属性进一步扩大组件绘制区域大小,覆盖状态栏、导航条这些非安全区域。这个过程仅改变组件自身绘制大小,不进行二次布局,也不影响子节点和兄弟节点的大小和位置。
expandSafeArea属性接受两个参数:
- 第一个参数types是一个Array<SafeAreaType>类型,用于配置扩展安全区域的类型,默认值为[SafeAreaType.SYSTEM, SafeAreaType.CUTOUT, SafeAreaType.KEYBOARD]。其中,SafeAreaType.SYSTEM表示系统区域(如状态栏、导航栏);SafeAreaType.CUTOUT表示挖孔区域(在未添加相关配置项时,该类型可能不生效);SafeAreaType.KEYBOARD表示键盘区域。
- 第二个参数edges是一个Array<SafeAreaEdge>类型,用于配置扩展安全区域的方向,默认值为[SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM, SafeAreaEdge.START, SafeAreaEdge.END] 。SafeAreaEdge.TOP表示顶部;SafeAreaEdge.BOTTOM表示底部;SafeAreaEdge.START表示起始边(对于从左到右的语言,通常是左边;对于从右到左的语言,通常是右边);SafeAreaEdge.END表示结束边(与START相反)。
以下是使用expandSafeArea属性实现沉浸式效果的示例代码:
@Entry
@Component
struct Example {build() {Column() {Row() {Text('Top Row').fontSize(40).textAlign(TextAlign.Center).width('100%')}.backgroundColor('#F08080')// 设置顶部绘制延伸到状态栏.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])Row() {Text('ROW2').fontSize(40)}.backgroundColor(Color.Orange).padding(20)Row() {Text('ROW3').fontSize(40)}.backgroundColor(Color.Orange).padding(20)Row() {Text('ROW4').fontSize(40)}.backgroundColor(Color.Orange).padding(20)Row() {Text('ROW5').fontSize(40)}.backgroundColor(Color.Orange).padding(20)Row() {Text('Bottom Row').fontSize(40).textAlign(TextAlign.Center).width('100%')}.backgroundColor(Color.Orange)// 设置底部绘制延伸到导航条.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM])}.width('100%').height('100%').alignItems(HorizontalAlign.Center).backgroundColor('#008000').justifyContent(FlexAlign.SpaceBetween)}
}
在上述示例中,通过为顶部和底部的Row组件分别设置expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])和expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]),使得顶部组件的绘制区域延伸到状态栏,底部组件的绘制区域延伸到导航条,从而实现了沉浸式效果。需要注意的是,当父容器是滚动容器(如Scroll)时,设置expandSafeArea属性可能不生效;并且设置该属性时,组件不能设置固定宽高尺寸(百分比除外) 。此外,使用expandSafeArea属性是按需设置的,只会对当前设置的组件生效,不会影响其他组件和页面。
三、应用案例分析
(一)阿维塔 11 鸿蒙座舱
阿维塔 11 鸿蒙座舱在多个场景中充分展现了鸿蒙沉浸式技术的魅力。在导航场景下,Petal Maps 为用户带来了前所未有的体验。它不仅实现了多个地图整合覆盖,让用户在选择路线时可享受地图应用间的无感切换 ,还提供 “人驾路线” 和 “智驾路线”。当用户在行车前选择 “智驾路线”,车辆开启智驾领航时,导航地图能自行切换为 “智驾地图”,无需手动操作,让用户能专注于驾驶正前方,减少操作分心,仿佛整个驾驶过程都有一位贴心的导航助手相伴,沉浸在安全、便捷的驾驶体验中。
音乐场景中,阿维塔 11 鸿蒙座舱延续了 HarmonyOS 在移动终端上的极致性能和流畅体验,采用智能后台管控和内存分配 VIP 调度方案,实现操作跟手性、界面的切换顺滑。用户在切换音乐、调节音量等操作时,感受不到丝毫卡顿,就如同置身于一个专属的音乐空间,尽情享受音乐带来的愉悦。而且,当用户在导航时打开音乐应用,导航界面会自动左移分屏,让用户更快捷地听歌选曲,实现了多任务的高效协同,提升了用户体验的沉浸感。
视频场景同样出色,全屏画面为用户提供了沉浸式的观影体验。底部常驻工具栏在视频场景下会自动隐藏,确保画面的沉浸感,让用户仿佛置身于电影院中。此外,新增的手机投屏功能,支持镜像模式、电脑模式、隐私模式三种投屏模式,用户可以将手机上的视频内容投屏到车机上,享受更大屏幕的观影盛宴,进一步增强了沉浸感 。
(二)其他应用场景案例
在游戏场景中,基于 HarmonyOS NEXT 方舟图形引擎能力,华为技术团队针对重载游戏场景进行了专门优化。以《苍翼:混沌效应》为例,启动速度提升 52%,借助端云编译技术,让玩家无需漫长等待,快速进入游戏世界。同时,基于鸿蒙视窗系统超分算法进行超采样、端云二进制优化,显著提升了设备的能效和温控表现,还原游戏内华丽的动作、特效表演,带给玩家流畅丝滑的游戏体验,使其全身心沉浸在紧张刺激的游戏对战中 。
视频播放应用充分利用了鸿蒙沉浸式技术,当用户播放视频时,通过设置沉浸式效果,视频画面能够延伸至整个屏幕,状态栏和导航栏被巧妙隐藏,避免了对视频内容的干扰。用户仿佛被视频内容完全包围,无论是观看电影、电视剧还是短视频,都能获得更加身临其境的感受,沉浸在精彩的视频情节中。
阅读应用也借助鸿蒙沉浸式技术为用户打造了优质的阅读环境。例如华为阅读升级了 “一镜到底” 阅读模式,用户打开精品书书籍时,能看到不同的 “微动效”,系统会依据所选书籍自动匹配合适的主题字体,还根据不同设备的尺寸为精品书籍设计不同的排版,视频动态、精美插图也能内置到书籍之中。这些设计让用户在阅读时仿佛置身于书籍所描绘的世界中,沉浸在知识的海洋里,享受纯粹的阅读乐趣。
四、适配与优化
(一)处理避让区域和页面内容的适配问题
在实现应用页面沉浸式效果后,由于避让区本身展示着电量、时间等系统信息,或者存在如导航条点击、上滑等手势交互,所以常常会与应用页面产生 UI 元素的遮挡、视觉违和或交互冲突等问题 。针对这些不同场景,开发者可以采取以下几种有效的适配方式:
- 设置系统栏显隐:使用Window.setWindowSystemBarEnable()方法或Window.setSpecificSystemBarEnabled()方法来设置状态栏和导航栏的显隐。例如在视频播放应用中,当进入全屏播放时,通过windowClass.setSpecificSystemBarEnabled('status', false)和windowClass.setSpecificSystemBarEnabled('navigationIndicator', false)将状态栏和导航栏隐藏,避免其对视频画面的遮挡,让用户能够专注于视频内容;而当退出全屏时,再将它们显示出来,方便用户进行其他操作 。
- 设置系统栏样式:利用Window.setWindowSystemBarProperties()方法可以设置状态栏和导航栏的样式。比如可以将状态栏的背景色设置为透明,内容颜色根据应用背景色进行调整,使状态栏与应用界面在视觉上更加融合。如在一个浅色背景的阅读应用中,将状态栏的背景色设置为透明statusBarColor: "#00ffffff",内容颜色设置为黑色statusBarContentColor: "#000000",这样既能保证用户能看到状态栏的信息,又不会破坏应用整体的视觉协调性 。
- 获取避让区域高度实现内容避让:调用Window.getWindowAvoidArea()方法能够获取避让区域的高度,然后根据这个高度设置应用页面内容的上下padding,从而实现对状态栏和导航栏的避让。例如在一个聊天应用中,获取到导航栏的高度后,给聊天输入框所在的容器底部设置相应高度的padding,防止输入框被导航栏遮挡,确保用户在输入消息时能够正常看到输入内容 。
- 获取挖孔区域信息实现挖孔区避让:通过Display.getCutoutInfo()方法可以获取挖孔区域的宽高和位置信息,然后设置对应避让元素的margin来实现挖孔区的避让。在一些游戏应用中,为了避免游戏中的关键元素(如生命值显示、技能按钮等)被挖孔区域遮挡,根据获取到的挖孔区域信息,给这些元素设置合适的margin,保证游戏界面的完整性和操作的便捷性 。
(二)不同设备和屏幕尺寸的适配要点
在不同设备上实现沉浸式效果时,确保布局和样式的一致性是非常重要的。由于鸿蒙系统应用需要适配手机、平板、智能穿戴设备、智慧屏等多种终端设备,这些设备的屏幕尺寸、分辨率和屏幕比例各不相同,所以在开发过程中需要注意以下几点:
- 使用弹性布局:采用弹性布局(如 Flex 布局)能够使界面元素根据屏幕大小自动调整位置和大小。在一个新闻应用中,使用 Flex 布局来排列新闻列表项,无论在手机的小屏幕还是平板的大屏幕上,新闻标题、图片和摘要等元素都能合理分布,保持良好的视觉效果。同时,避免使用固定像素值来设置元素的大小和位置,尽量使用百分比、vh(视口高度)、vw(视口宽度)等相对单位,以确保界面在不同屏幕尺寸下都能自适应 。
- 媒体查询:利用媒体查询(Media Query)可以根据设备的屏幕尺寸、分辨率等条件来应用不同的样式。比如当检测到设备是平板时,增大字体大小和元素间距,以适应大屏幕的显示;当检测到是手机时,采用更紧凑的布局,充分利用有限的屏幕空间。在一个电商应用中,通过媒体查询,在手机上展示商品列表时采用单列布局,而在平板上则采用双列布局,提高页面的信息展示效率 。
- 图片适配:针对不同设备的屏幕分辨率,提供不同分辨率的图片资源。使用image组件时,可以通过srcset属性指定多个不同分辨率的图片路径,让系统根据设备屏幕的实际情况选择最合适的图片进行加载。在一个旅游应用中,展示风景图片时,为高清屏幕的手机提供高分辨率的图片,在普通屏幕设备上则加载低分辨率图片,既能保证图片的清晰度,又能减少数据流量的消耗和加载时间 。
- 测试与优化:在各种不同类型和尺寸的设备上进行充分的测试,检查沉浸式效果的实现情况以及布局和样式的显示效果。通过测试发现并解决可能出现的问题,如元素错位、文字截断、颜色显示异常等,不断优化应用的适配性,为用户提供一致且优质的体验 。
五、未来展望
随着技术的不断发展和创新,鸿蒙沉浸式技术拥有着广阔的发展前景和巨大的潜力,有望在更多领域得到深度应用和拓展。
在智能汽车领域,鸿蒙沉浸式技术将进一步提升人车交互体验。未来的汽车座舱不仅仅是一个驾驶空间,更将成为一个智能生活的移动枢纽。通过与手机、智能家居等设备的无缝互联,实现多设备之间的信息共享和协同工作。例如,当用户从家中出发前往汽车时,手机上的导航信息可以自动同步到车机上,无需手动输入目的地;在驾驶过程中,用户可以通过语音指令控制家中的智能设备,如提前打开空调、关闭灯光等,真正实现 “人车家” 全场景互联,让用户在驾驶过程中享受到更加便捷、智能、沉浸式的体验。
在智能穿戴设备方面,鸿蒙沉浸式技术将为用户带来更加个性化、便捷的健康管理和运动监测体验。智能手表、手环等设备可以实时监测用户的心率、睡眠、运动步数等健康数据,并通过沉浸式的界面设计和交互方式,将这些数据以直观、易懂的方式呈现给用户。同时,结合人工智能技术,为用户提供个性化的健康建议和运动计划。例如,当用户在运动时,智能手表可以实时显示运动数据,并根据用户的运动状态和目标,提供实时的运动指导和建议,让用户仿佛拥有一个私人健身教练陪伴在身边。
在教育领域,鸿蒙沉浸式技术将助力打造更加生动、高效的学习环境。通过虚拟现实(VR)、增强现实(AR)等技术与教育内容的深度融合,为学生提供沉浸式的学习体验。例如,在历史、地理等学科的学习中,学生可以通过 VR 设备身临其境地感受历史事件的发生场景,或者探索世界各地的地理风貌,增强学习的趣味性和互动性;在实验教学中,AR 技术可以将虚拟实验设备与现实场景相结合,让学生在安全、便捷的环境下进行实验操作,提高学习效果。
在工业制造领域,鸿蒙沉浸式技术也将发挥重要作用。工程师可以通过智能终端设备,利用沉浸式界面实时监控和管理生产线上的设备运行状态、生产进度等信息。同时,借助虚拟现实技术,对产品设计、工艺流程进行虚拟仿真和优化,提前发现问题并解决,提高生产效率和产品质量。例如,在汽车制造过程中,工程师可以通过 VR 设备对汽车的设计方案进行沉浸式的评估和修改,确保设计的合理性和可行性;在生产线上,工人可以通过 AR 眼镜获取实时的操作指导和提示,提高工作效率和准确性。
鸿蒙沉浸式技术未来还可能在金融、医疗、旅游等众多领域得到广泛应用,为各行业的发展带来新的机遇和变革。它将不断拓展人们与数字世界交互的边界,为用户创造更加智能、便捷、沉浸式的生活和工作体验,推动整个社会向智能化、数字化方向加速迈进 。让我们共同期待鸿蒙沉浸式技术在未来绽放出更加绚烂的光彩,为我们的生活带来更多的惊喜和可能。
相关文章:
探索鸿蒙沉浸式:打造无界交互体验
一、鸿蒙沉浸式简介 在鸿蒙系统中,沉浸式是一种极具特色的设计理念,它致力于让用户在使用应用时能够全身心投入到内容本身,而尽可能减少被系统界面元素的干扰。通常来说,就是将应用的内容区巧妙地延伸到状态栏和导航栏所在的界面…...
Linux红帽:RHCSA认证知识讲解(十 三)在serverb上破解root密码
Linux红帽:RHCSA认证知识讲解(十 三)在serverb上破解root密码 前言操作步骤 前言 在红帽 Linux 系统的管理工作中,系统管理员可能会遇到需要重置 root 密码的情况。本文将详细介绍如何通过救援模式进入系统并重新设置 root 密码。…...
【网络安全】谁入侵了我的调制解调器?(一)
文章目录 我被黑了159.65.76.209,你是谁?黑客攻击黑客?交出证据三年后我被黑了 两年前,在我家里使用家庭网络远程办公时,遇到了一件非常诡异的事情。当时,我正在利用一个“盲 XXE 漏洞”,这个漏洞需要借助一个外部 HTTP 服务器来“走私”文件。为了实现这一点,我在 AW…...
阿里一面:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析)
对于Nacos大家应该都不太陌生,出身阿里名声在外,能做动态服务发现、配置管理,非常好用的一个工具。然而这样的技术用的人越多面试被问的概率也就越大,如果只停留在使用层面,那面试可能要吃大亏。 比如我们今天要讨论的…...
MySQL 慢查询日志深入分析与工具实战(mysqldumpslow pt-query-digest)
🎯 学习目标 • ✅ 熟悉慢查询日志结构与核心字段 • ✅ 掌握日志开启与 SQL 记录机制 • ✅ 使用 pt-query-digest 工具进行分析 • ✅ 解读分析结果并提出优化建议 📂 基本概念 项目 内容说明 功能 记录执行时间超过阈值的 SQL 启动参数…...
JVM:垃圾回收
一、垃圾回收概述 (1)垃圾回收主要解决的问题 内存溢出:当程序在运行过程中,所需的内存超出了 JVM 被分配到的内存空间时,就会发生内存溢出。垃圾回收会将不再被引用的对象进行回收,释放内存空间…...
与AI深度融合的Go开发框架sponge,解决使用cursor、trae等AI辅助编程工具开发项目时的部分痛点
摘要 AI 编程助手在近几年快速发展,帮助开发者提升了开发效率。然而,通用 AI 工具往往难以精准落地到具体业务与框架中。本文介绍了一款与 Go 框架深度融合的 AI 编程工具 —— sponge AI 助手。它不仅理解框架的结构,还能按照标准化流程自动…...
《AI大模型应知应会100篇》第21篇:Prompt设计原则:让大模型精准理解你的需求
第21篇:Prompt设计原则:让大模型精准理解你的需求 摘要 在与大模型交互时,如何高效地表达需求是决定输出质量的关键。本文将系统介绍高效Prompt设计的核心原则和方法论,并通过实战代码案例详细解释每个核心知识点,帮助…...
【更新完毕】2025泰迪杯数据挖掘竞赛A题数学建模思路代码文章教学:竞赛论文初步筛选系统
完整内容请看文末最后的推广群 基于自然语言处理的竞赛论文初步筛选系统 基于多模态分析的竞赛论文自动筛选与重复检测模型 摘要 随着大学生竞赛规模的不断扩大,参赛论文的数量激增,传统的人工筛选方法面临着工作量大、效率低且容易出错的问题。因此&…...
[Windows] 电脑自动备份插入的U盘数据
[Windows] 电脑自动备份U盘数据 链接:https://pan.xunlei.com/s/VONyazSEIqhnzZCHRlio9Vw2A1?pwdcmhc# [Windows] 电脑自动备份插入的U盘数据...
《JVM考古现场(二十一):奇点黎明·在事件视界编译时空曲率》
目录 楔子:事件视界警报 上卷时空曲率引擎 第一章:volatile场方程重构 第二章:synchronized黑洞能层 番外篇:时空涟漪观测站 中卷量子逃逸分析 第三章:柯西视界稳定性证明 第四章:白洞负熵连接 实战…...
list的一些常用接口
其实list的接口和前面的string和vector基本都是一样的,用法也基本类似,我们还是挑几个讲讲吧。 一.常用的接口 1.1 push_back 图中是一个空参构造加上一个push_back的使用,这两个接口的使用还是很简单的,看一下即可。下面是迭代器…...
芯洲SCT2434AQFPAR:3.6V-36V Vin, 3.5A, 高效率同步降压DCDC转换器
特性: AEC-Q100合格,结果如下:-器件温度等级1:-40C至125C环境工作温度范围宽输入电压范围:3.6V-36V持续输出电流3.5A 1V1%反馈参考电压集成60mΩ高侧功率MOSFET和36mΩ低侧功率MOSFET轻载PSM工作模式在睡眠模式下具有…...
单例模式:懒汉和饿汉
目录 一、关于设计模式 二、单例模式是什么 2.1 饿汉模式 2.2 懒汉模式 三、单例模式和多线程 3.1 饿汉模式 3.2 懒汉模式 一、关于设计模式 单例模式是一种设计模式,说它之前先来聊聊设计模式是什么。 设计模式,类似于于棋谱(大佬把…...
第八节:React HooksReact 18+新特性-React Server Components (RSC) 工作原理
• 与SSR区别:零客户端JS、服务端数据直出 • 搭配Next.js 14使用场景 React Server Components (RSC) 工作原理及 Next.js 14 应用场景解析 一、RSC 核心工作原理 React Server Components (RSC) 是 React 18 引入的颠覆性特性,其设计目标是 服务端与…...
Spark-SQL核心编程3
数据加载与保存 通用方式: SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API,根据不同的参数读取和保存不同格式的数据,SparkSQL 默认读取和保存的文件格式为parquet 数据加载方法: spark.read.lo…...
利用XShell 创建隧道(tunnel)在本地可视化远程服务器上的Visdom
1. 创建隧道 打开Xshell,选择你想要操作的终端,单击右键 -> 选择属性 打开属性对话框后,单击添加按钮。 在弹出的对话框中,先填写自己本地的浏览器的地址以及对应的端口号。然后呢,再填写autod远程服务器的地址和…...
React 高级特性与最佳实践
在掌握了 React 的基础知识后,我们可以进一步探索 React 的高级特性和最佳实践。这些特性将帮助你构建更高效、可维护和可扩展的 React 应用。本文重点介绍 Hooks、Context、Refs 和高阶组件等核心高级特性。 1. Hooks:函数组件的强大工具 Hooks 是 Rea…...
考研数据结构之图(一)(包含真题及解析)
考研数据结构之图的存储与基本操作:邻接矩阵、邻接表、十字链表、邻接多重表 图(Graph)是数据结构中的重要非线性结构,广泛应用于网络路由、社交关系分析等领域。本文将详细讲解图的四种主要存储方式——邻接矩阵法、邻接表法、十…...
Qt QML实现Windows桌面颜色提取器
前言 实现一个简单的小工具,使用Qt QML实现Windows桌面颜色提取器,实时显示鼠标移动位置的颜色值,包括十六进制值和RGB值。该功能在实际应用中比较常见,比如截图的时候,鼠标移动就会在鼠标位置实时显示坐标和颜色值&a…...
2025 年网络安全的挑战与机遇
2024 年是网络安全领域风云变幻的一年。从备受瞩目的勒索软件攻击所带来的影响,到人工智能工具日益商品化,挑战不断增加。 关键基础设施的漏洞变得极为明显,身份盗窃次数也达到了前所未有的程度。然而,在这一片混乱之中ÿ…...
Vue 3 中 ref和reactive的详细使用场景
一、核心区别 特性refreactive数据类型基本类型 对象/数组(自动解包)仅对象/数组响应式原理通过 .value 触发响应直接代理对象模板中使用自动解包(无需 .value)直接访问属性解构/传递保持响应性需用 toRefs 保持响应性 二、使用…...
react使用createFromIconfontCN,自定义iconfont 图标
记录reactantdesign项目中使用createFromIconfontCN,自定义iconfont 图标 效果图: import { createFromIconfontCN } from ant-design/icons;const MyIcon createFromIconfontCN({scriptUrl: //at.alicdn.com/t/font_8d5l8fzk5b87iudi.js, // 在 icon…...
危化品经营单位安全生产管理人员备考要点
危化品经营单位安全生产管理人员备考要点 📌 考试核心内容 ✅ 必考法规: 《危险化学品安全管理条例》重点条款(如经营许可条件) GB 18218-2018《重大危险源辨识》新标准 安全生产法律责任(罚款金额/刑事责任&…...
音频炼金术:Threejs 让 3D 场景「听」起来更真实
在 Three.js 中允许在场景中添加声音,将声音与 3D 对象关联,实现更丰富的交互体验。 Audio Three.js 中的Audio对象用于表示音频源,它是一个THREE.Object3D的子类,用于控制音频播放、暂停、是否循环等设置的对象,可以…...
【C++】Stack和Queue的底层封装和实现
目录 stack容器适配器stack的模拟实现 queue的模拟实现deque了解deque的结构deque的管理方式和遍历元素方式deque的缺陷为啥库里面的stack和queue使用deque end stack 容器适配器 Stack可以封装成前面三个变量的形式,但是这里我们提出一个概念叫容器适配器…...
Vue3 SSR 工程化实践:日常工作中的性能优化与实战技巧
一、流式渲染与分块传输(面向性能的关键优化) 1.1 流式响应基础实现 // Node.js Express 示例(Vite SSR同理)import { renderToWebStream } from vue/server-rendererapp.get(/, async (req, res) > { res.setHeader(Conten…...
【Python进阶】字符串操作全解与高效应用
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现(10个案例)案例1:基础操作案例2:高效格式化…...
LeetCode[28]找出字符串中第一个匹配项的下标(KMP版本)
思路: 一开始我使用暴力过的,但是感觉还是不完美,想学习一下KMP的写法,所以这篇笔记就来了,首先KMP算法就要先维护一个最长相等前后缀的一个数组(统称前缀表),那么这个数组为什么能找…...
Cesium实现雨、闪电、雪、雾天气效果
基于 Cesium 的三维地理信息场景,集成了天气效果后处理、3D 模型加载、水域渲染等功能。以下是详细功能总结: 1. 场景初始化与基础配置 三维地球初始化 创建 Cesium Viewer 实例,隐藏默认控件(时间轴、动画控件等)&…...
上门送水小程序区域代理模块框架设计
一、逻辑分析 代理申请流程: 潜在代理商通过小程序提交代理申请,需要填写个人或企业基本信息、联系方式、期望代理区域等。系统收到申请后,进行初步审核,检查信息的完整性和合规性。运营人员进行人工审核,根据公司政策…...
GIS开发笔记(6)结合osg及osgEarth实现半球形区域绘制
一、实现效果 输入中心点坐标及半径,绘制半球形区域,地下部分不显示。 二、实现原理 根据中心点及半径绘制半球形区域,将其挂接到地球节点。 三、参考代码 void GlobeWidget::drawSphericalRegion(osg::Vec3d point,double radius) {// 使…...
UE5在场景3D物体上播放本地视频(带声音)
UE5在场景3D物体上播放本地视频(带声音) 0.在Map中创建一个立方体,调整大小看起来像屏幕一样 1.创建文件夹Movies在根目录下 2.把准备的视频复制到Movies文件夹下 3.把Movies文件夹下的视频拖入到UE自己创建的文件夹下,此时会有个文件媒体源…...
安装部署RabbitMQ
一、RabbitMQ安装部署 1、下载epel源 2、安装RabbitMQ 3、启动RabbitMQ web管理界面 启用插件 rabbitmq数据目录 创建rabbitmq用户 设置为管理员角色 给用户赋予权限 4、访问rabbitmq...
STM32启动流程详解
STM32启动流程详解 本文档详细介绍STM32微控制器从上电到main函数执行的完整启动流程。 1. 上电与复位过程 当STM32芯片上电或复位时,硬件会执行以下步骤: 上电复位(POR)/低电平复位(PDR): 芯片接通电源或NRST引脚置低时触发初始PC值设置: 程序计数器…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——CPU温度CPU主频
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——CPU主频&…...
LVDS系列8:Xilinx 7系可编程输入延迟(一)
在解析LVDS信号时,十分重要的一环就是LVDS输入信号线在经过PCB输入到FPGA中后,本来该严格对齐的信号线会出现时延,所以需要在FPGA内部对其进行延时对齐后再进行解析。 Xilinx 7系器件中用于输入信号延时的组件为IDELAYE2可编程原语࿰…...
iotdb时序数据库使用
iotdb https://github.com/apache/iotdb.git 安装maven3.9.6以上版本执行编译 iotdb启动,使用安装包sbin目录下的start-standalone.bat sbin\start-standalone.bat 执行报错如果是内存问题,可以在对应的node配置中修改,如conf\datanode-ev…...
【Caddy】:现代化、自动 HTTPS 的 Web 服务器新星
🚀 Caddy:现代化、自动 HTTPS 的 Web 服务器新星! 在构建和部署 Web 应用时,你可能听说过或用过如 Nginx、Apache 等经典的 Web 服务器。但在今天,有一个越来越受欢迎的新选择——Caddy。 本文将带你认识 Caddy&…...
用 DeepSeek 精准解析,PDF 一键转电子书!
经常需要阅读大量的 PDF 文档,但在移动设备上阅读 PDF 通常体验极差。屏幕小、排版固定,需要不断放大缩小,眼睛容易疲劳,长时间阅读简直是一种折磨。 虽有不少 PDF 转换工具,但对扫描书籍支持不佳,经常丢失…...
【AIoT】智能硬件GPIO通信详解(二)
前言 上一篇我们深入解析了智能硬件GPIO通信原理(传送门:【AIoT】智能硬件GPIO通信详解(一))。接下来,我们将结合无人售货机控制场景,通过具体案例进一步剖析物联网底层通信机制的实际应用。 在智能零售领域,无人售货机通过AI技术升级为智能柜,其设备控制的底层通信…...
Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿
CPU负载突然飙升,如截图: 根本原因,大家从各种博主上已知晓,现在提供自己的解决办法,亲测有效 一、设置开机自动禁用温度管理守护进程 1.创建脚本文件 mkdir -p ~/Scripts touch ~/Scripts/disable_thermald.sh …...
镜舟科技助力某大型电网企业破解数据架构升级难题,打造国产化湖仓标杆
在 “十四五” 规划全面推进国产化替代的背景下,某大型电网企业联合镜舟科技与腾讯云,基于全球领先的开源分析型数据库 StarRocks 及腾讯 TBDS 大数据平台,构建电力行业国产化湖仓一体架构。该项目实现 PB 级电力数据的统一管理,为…...
Linux内核内存管理单元 详解Linux 内核伙伴系统(Buddy System)的快速路径分配函数get_page_from_freelist
一、函数核心作用 get_page_from_freelist 是 Linux 内核伙伴系统(Buddy System)的快速路径分配函数,负责从指定的内存区域(Zone)中高效分配连续的物理内存页。其核心逻辑是遍历允许的 Zone 列表,检查水位…...
网络原理 - 初识网络 2
目录 OSI 七层协议 TCP / IP 五层模型 网络设备所在分层 网络分层对应 封装和分用(网络传输数据过程中,最核心的流程) 用一个具体例子来梳理以下封装和分用的过程 封装 1. 应用层(应用程序) -- QQ 2. 传输层 …...
如何利用GM DC Monitor快速监控一台网络类设备
GM DC Monitor v2.0在网络类设备监控的效率非常高! 如果您需要管理运维大量的网络类设备,GM DC Monitor是个不错的选择。 如果您具备一定的采集脚本编写能力,可以在平台的定制属于自己的监控模板! 1)首先建立数据中…...
类和对象终
一、初始化列表 再谈构造函数 我们之前实现构造函数的时候,初始化成员变量在函数体内赋值的,构造函数还有一种初始化方式,就是初始化列表 我们先实现一个栈来举例: // 实现一个栈 typedef int DataType; class Stack { public:…...
教程:批量提取图片pdf固定位置文字然后保存为新的文件名,基于Python和阿里云的实现方案
一、项目背景 在实际工作和生活中,存在大量需要对图片或 PDF 进行批量处理的场景。例如,在档案管理中,工作人员可能会扫描大量文件,生成图片或 PDF 格式的档案资料。这些资料通常包含特定位置的关键信息,如文件编号、日期等。通过批量提取这些关键信息并将其作为文件名,…...
JVM:堆、方法区
一、堆 概念:堆用于存储对象和数组,主要分为新生代和老年代,新生代又细分为伊甸园区、幸存者 0 区(S0)和幸存者 1 区(S1)内存设置:可用 -Xmx 和 -Xms 设置堆内存大小,-X…...
JVM-基于Hotspot
前言 Java虚拟机(Java Virtual Machine简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,其主要任务为将字节码装载到内部,解释/编译为对应平台上的机器指令执行。 Java虚拟机规范定义了一个抽象的——…...