鸿蒙面试高频题:元服务和传统应用有什么区别?10个元服务面试题+详细解答

news2026/5/15 17:24:53
鸿蒙NEXT开发实战系列| 第30篇 | 面试篇 适合人群准备鸿蒙开发面试的开发者 ⏰阅读时间约15分钟 | 开发环境DevEco Studio 5.0导航 系列目录 上一篇性能优化篇 下一篇分布式篇 目录面试题1什么是元服务它和传统HarmonyOS应用有什么区别面试题2元服务和微信小程序有什么不同面试题3如何配置元服务的卡片面试题4FormExtensionAbility的作用是什么面试题5FormBindingData的使用方式是什么面试题6卡片如何实现动态更新面试题7元服务如何实现跨设备分布式同步面试题8元服务的上架流程是怎样的面试题9元服务的包体积有哪些限制如何优化面试题10元服务开发中有哪些常见的性能问题如何解决总结面试题1什么是元服务它和传统HarmonyOS应用有什么区别❓ 问题请解释什么是元服务Atomic Service它与传统的HarmonyOS应用有哪些核心区别✅ 答案元服务是鸿蒙系统提供的一种轻量级应用形态用户无需安装即可使用通过卡片、搜索等方式快速触达。核心区别对比对比维度传统HarmonyOS应用元服务安装方式需要下载安装无需安装即用即走包体积限制无严格限制基础包≤10MB入口形式桌面图标卡片、搜索、扫码等UIAbility支持不支持使用FormExtensionAbility分发方式应用市场服务中心、负一屏等生命周期完整生命周期卡片生命周期为主 代码示例元服务module.json5配置{ module: { name: atomicService, type: entry, deliveryWithInstall: false, installationFree: true, pages: $profile:main_pages, extensionAbilities: [ { name: MyFormExtension, srcEntry: ./ets/entryability/MyFormExtension.ets, type: form } ] } }传统应用配置对比{ module: { name: traditionalApp, type: entry, deliveryWithInstall: true, installationFree: false, pages: $profile:main_pages, abilities: [ { name: MainAbility, srcEntry: ./ets/entryability/MainAbility.ets, type: page } ] } } 面试官追问点元服务的installationFree字段设置为true有什么意义元服务是否可以有多个卡片元服务能否访问网络和本地存储面试题2元服务和微信小程序有什么不同❓ 问题元服务和微信小程序都是轻量级应用它们有什么本质区别✅ 答案本质区别对比维度元服务微信小程序运行环境鸿蒙系统原生微信容器内开发语言ArkTSJavaScript/WXML系统能力可调用全部系统API受限于微信开放的API跨设备原生支持分布式仅限单设备分发渠道服务中心、负一屏微信内搜索、扫码离线能力强支持本地缓存弱依赖网络性能接近原生应用受限于WebView性能核心优势系统级集成元服务可直接调用相机、蓝牙、NFC等硬件能力分布式能力支持跨设备无缝流转和数据同步原生渲染使用ArkUI声明式UI性能更优智能推荐基于场景的智能卡片推荐 面试官追问点元服务相比小程序在性能上有哪些具体优势元服务如何实现比小程序更强的离线能力两者在开发效率上有什么差异面试题3如何配置元服务的卡片❓ 问题请详细说明元服务卡片的配置流程包括哪些必要文件✅ 答案卡片配置需要以下文件module.json5- 模块配置文件form_config.json- 卡片配置文件卡片页面文件- 布局和逻辑 代码示例1. form_config.json配置{ forms: [ { name: weather_card, description: 天气卡片, src: ./ets/widget/pages/WeatherCard.ets, uiSyntax: arkts, window: { designWidth: 720, autoDesignWidth: true }, isDefault: true, colorMode: auto, supportDimensions: [ 2*2, 2*4, 4*4 ], defaultDimension: 2*2, updateEnabled: true, scheduledUpdateTime: 06:00, updateDuration: 1, formConfigAbility: pages/FormConfig } ] }2. module.json5引用配置{ extensionAbilities: [ { name: WeatherFormAbility, srcEntry: ./ets/entryability/WeatherFormAbility.ets, type: form, metadata: [ { name: ohos.extension.form, resource: $profile:form_config } ] } ] }3. 卡片页面实现Entry Component struct WeatherCard { StorageLink(weatherData) weather: WeatherModel new WeatherModel() build() { Column() { Text(this.weather.city) .fontSize(16) .fontWeight(FontWeight.Bold) Text(${this.weather.temperature}°C) .fontSize(32) .margin({ top: 8 }) Text(this.weather.description) .fontSize(14) .fontColor(#666666) .margin({ top: 4 }) } .width(100%) .height(100%) .padding(16) .backgroundColor(#FFFFFF) } } 面试官追问点supportDimensions支持哪些卡片尺寸如何实现卡片的自适应布局卡片配置文件放在哪个目录下面试题4FormExtensionAbility的作用是什么❓ 问题请解释FormExtensionAbility在元服务中的作用和生命周期。✅ 答案FormExtensionAbility是元服务的核心组件负责管理卡片的生命周期和数据。核心职责创建和销毁卡片实例响应卡片的创建、更新、销毁事件提供卡片数据生命周期方法方法触发时机用途onCreate卡片首次创建初始化数据onUpdate卡片需要更新刷新数据onDestroy卡片被删除清理资源onEvent收到卡片事件处理用户交互onAcquireFormState查询卡片状态返回当前状态 代码示例import { formInfo, formProvider } from kit.FormKit; export default class WeatherFormAbility extends FormExtensionAbility { // 卡片创建时调用 onCreate(want: Want): formInfo.FormBindingData { console.info(WeatherFormAbility onCreate); // 初始化卡片数据 const formData { city: 北京, temperature: 25, description: 晴朗 }; // 返回卡片绑定数据 return formProvider.createFormBindingData(formData); } // 卡片更新时调用 onUpdate(formId: string): void { console.info(WeatherFormAbility onUpdate); // 获取最新天气数据并更新 this.fetchWeatherData().then(data { const formBindingData formProvider.createFormBindingData(data); formProvider.updateForm(formId, formBindingData); }); } // 卡片销毁时调用 onDestroy(formId: string): void { console.info(WeatherFormAbility onDestroy, formId: formId); // 清理资源 } // 处理卡片事件 onEvent(formId: string, message: string): void { console.info(WeatherFormAbility onEvent, message: message); if (message refresh) { this.onUpdate(formId); } } // 查询卡片状态 onAcquireFormState(want: Want): formInfo.FormState { return formInfo.FormState.READY; } // 获取天气数据 private async fetchWeatherData(): Promiseobject { // 模拟网络请求 return { city: 北京, temperature: 28, description: 多云 }; } } 面试官追问点onCreate方法返回值的类型是什么多个卡片实例时formId如何区分FormExtensionAbility是否支持多线程操作面试题5FormBindingData的使用方式是什么❓ 问题FormBindingData在卡片数据绑定中扮演什么角色如何使用它✅ 答案FormBindingData是卡片数据绑定的核心类用于将数据从FormExtensionAbility传递到卡片页面。核心特性支持基本数据类型和复杂对象数据变化时自动触发UI更新支持嵌套数据结构 代码示例import { formProvider, formBindingData } from kit.FormKit; // 1. 创建FormBindingData export function createFormData(): formBindingData.FormBindingData { const data: Recordstring, Object { title: 今日天气, temperature: 25, city: 上海, weatherList: [ { time: 08:00, temp: 20 }, { time: 12:00, temp: 28 }, { time: 18:00, temp: 22 } ] }; return formProvider.createFormBindingData(data); } // 2. 更新FormBindingData export async function updateFormData(formId: string): Promisevoid { const newData { title: 今日天气, temperature: 30, city: 上海, updateTime: new Date().toLocaleTimeString() }; const formBindingData formProvider.createFormBindingData(newData); await formProvider.updateForm(formId, formBindingData); } // 3. 卡片页面使用数据 Entry Component struct WeatherCard { StorageLink(title) title: string StorageLink(temperature) temperature: number 0 StorageLink(city) city: string build() { Column() { Text(this.title) .fontSize(14) .fontColor(#999999) Text(this.city) .fontSize(18) .fontWeight(FontWeight.Bold) .margin({ top: 8 }) Text(${this.temperature}°C) .fontSize(36) .margin({ top: 12 }) } .width(100%) .height(100%) .justifyContent(FlexAlign.Center) } } 面试官追问点FormBindingData支持哪些数据类型数据更新时UI如何自动刷新如何处理大数据量的卡片数据面试题6卡片如何实现动态更新❓ 问题元服务的卡片支持哪些更新机制如何实现实时数据刷新✅ 答案卡片更新机制更新方式触发条件适用场景定时更新scheduledUpdateTime配置天气、新闻等定期刷新周期更新updateDuration配置倒计时、股票等手动更新用户点击触发刷新按钮主动更新应用侧主动调用消息推送、数据变化 代码示例1. 定时更新配置{ forms: [ { name: stock_card, scheduledUpdateTime: 09:30, updateEnabled: true } ] }2. 周期更新配置{ forms: [ { name: countdown_card, updateDuration: 1, updateEnabled: true } ] }3. 主动更新实现import { formProvider } from kit.FormKit; import { Want } from kit.AbilityKit; export class FormUpdateService { // 主动更新指定卡片 static async updateForm(formId: string, data: object): Promisevoid { try { const formBindingData formProvider.createFormBindingData(data); await formProvider.updateForm(formId, formBindingData); console.info(卡片更新成功); } catch (error) { console.error(卡片更新失败:, error); } } // 更新所有卡片 static async updateAllForms(moduleName: string): Promisevoid { try { const formIds await formProvider.getAllFormsByModule(moduleName); for (const formId of formIds) { const data await this.fetchLatestData(); await this.updateForm(formId, data); } } catch (error) { console.error(批量更新失败:, error); } } private static async fetchLatestData(): Promiseobject { // 获取最新数据 return { content: 最新内容, timestamp: Date.now() }; } }4. 卡片页面触发更新Entry Component struct NewsCard { StorageLink(content) content: string build() { Column() { Text(this.content) Button(刷新) .onClick(() { // 通过postCardAction触发更新 postCardAction(this, { action: refresh, params: { time: Date.now().toString() } }); }) .margin({ top: 12 }) } .width(100%) .height(100%) .padding(16) } } 面试官追问点定时更新和周期更新有什么区别如何避免频繁更新导致的性能问题更新失败时如何处理面试题7元服务如何实现跨设备分布式同步❓ 问题元服务如何利用鸿蒙的分布式能力实现跨设备数据同步✅ 答案分布式同步机制分布式数据管理使用distributedKVStore实现跨设备数据同步分布式文件通过distributedFile实现文件跨设备访问远程调用支持跨设备方法调用 代码示例1. 分布式KV存储实现import { distributedKVStore } from kit.DistributedServiceKit; export class DistributedDataManager { private kvStore: distributedKVStore.SingleKVStore | null null; // 初始化分布式存储 async init(context: Context, storeId: string): Promisevoid { const kvManager distributedKVStore.createKVManager({ bundleName: com.example.atomicservice, context: context }); const options: distributedKVStore.Options { createIfMissing: true, encrypt: false, backup: false, kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION }; this.kvStore await kvManager.getKVStore(storeId, options); this.registerDataChangeListener(); } // 写入数据 async putData(key: string, value: string): Promisevoid { if (!this.kvStore) { throw new Error(KVStore未初始化); } await this.kvStore.put(key, value); } // 读取数据 async getData(key: string): Promisestring | undefined { if (!this.kvStore) { throw new Error(KVStore未初始化); } const entry await this.kvStore.get(key); return entry?.value.toString(); } // 注册数据变化监听 private registerDataChangeListener(): void { if (!this.kvStore) return; this.kvStore.on(dataChange, distributedKVStore.SubscribeType.SUBSCRIBE_TYPE_ALL, (data: distributedKVStore.ChangeNotification) { console.info(数据变化:, data); this.handleDataChange(data); } ); } // 处理数据变化 private handleDataChange(data: distributedKVStore.ChangeNotification): void { // 更新本地UI或触发其他操作 const entries data.insertEntries.concat(data.updateEntries); for (const entry of entries) { console.info(Key: ${entry.key}, Value: ${entry.value}); } } }2. 在元服务中使用分布式同步import { DistributedDataManager } from ./DistributedDataManager; export default class SyncFormAbility extends FormExtensionAbility { private dataManager: DistributedDataManager new DistributedDataManager(); async onCreate(want: Want): PromiseformInfo.FormBindingData { // 初始化分布式存储 await this.dataManager.init(this.context, form_sync_store); // 获取同步数据 const syncData await this.dataManager.getData(user_settings); return formProvider.createFormBindingData({ settings: syncData || {}, syncTime: new Date().toLocaleString() }); } async onUpdate(formId: string): Promisevoid { // 从分布式存储获取最新数据 const latestData await this.dataManager.getData(latest_content); const formData { content: latestData, updateTime: Date.now() }; await formProvider.updateForm(formId, formProvider.createFormBindingData(formData)); } } 面试官追问点分布式KVStore支持哪些数据类型如何处理网络不稳定时的同步问题数据冲突时如何解决面试题8元服务的上架流程是怎样的❓ 问题请详细说明元服务从开发到上架的完整流程。✅ 答案元服务上架流程开发阶段 → 调试测试 → 打包签名 → 提交审核 → 发布上架详细步骤阶段步骤说明1. 开发准备注册开发者账号在AppGallery Connect注册2. 创建应用创建元服务项目选择Atomic Service类型3. 开发测试编写代码并测试使用DevEco Studio4. 打包签名生成HAP/App包配置签名证书5. 提交审核上传到AGC填写应用信息6. 发布审核通过后发布设置分发区域 代码示例1. build-profile.json5签名配置{ app: { signingConfigs: [ { name: default, type: OpenHarmony, material: { certpath: signature/default.cer, storePassword: ******, keyAlias: debugKey, keyPassword: ******, profile: signature/default.p7b, signAlg: SHA256withECDSA, storeFile: signature/default.p12 } } ], products: [ { name: default, signingConfig: default, compatibleSdkVersion: 5.0.0, runtimeOS: HarmonyOS } ] } }2. 元服务配置文件{ app: { bundleName: com.example.myatomicservice, vendor: example, versionCode: 1000000, versionName: 1.0.0, icon: $media:app_icon, label: $string:app_name, distributedNotificationEnabled: true } }3. 发布检查清单// 发布前检查工具 export class ReleaseChecker { static check(appConfig: AppConfig): CheckResult { const issues: string[] []; // 1. 检查包体积 if (appConfig.packageSize 10 * 1024 * 1024) { issues.push(基础包体积超过10MB限制); } // 2. 检查必要配置 if (!appConfig.bundleName) { issues.push(缺少bundleName配置); } // 3. 检查图标资源 if (!appConfig.icon) { issues.push(缺少应用图标); } // 4. 检查隐私政策 if (!appConfig.privacyPolicy) { issues.push(缺少隐私政策声明); } return { passed: issues.length 0, issues: issues }; } } interface AppConfig { bundleName: string; packageSize: number; icon: string; privacyPolicy: string; versionCode: number; } interface CheckResult { passed: boolean; issues: string[]; } 面试官追问点元服务和应用的审核标准有什么不同如何获取调试证书和发布证书审核被拒常见原因有哪些面试题9元服务的包体积有哪些限制如何优化❓ 问题元服务对包体积有什么要求有哪些优化策略✅ 答案包体积限制类型限制说明基础包≤10MB必须满足否则无法上架资源包≤20MB按需下载的资源总体积≤100MB包含所有资源优化策略代码优化Tree-shaking、代码压缩资源优化图片压缩、使用矢量图按需加载懒加载、动态导入资源外置大资源放云端 代码示例1. 代码分割和懒加载// 使用动态import实现代码分割 export class ModuleLoader { // 懒加载功能模块 static async loadChartModule(): Promiseany { try { const chartModule await import(./modules/ChartModule); return chartModule.default; } catch (error) { console.error(模块加载失败:, error); return null; } } // 按需加载组件 static async loadComponent(name: string): Promiseany { const componentMap: Recordstring, () Promiseany { DatePicker: () import(./components/DatePicker), RichText: () import(./components/RichText), MediaPlayer: () import(./components/MediaPlayer) }; const loader componentMap[name]; if (loader) { return await loader(); } return null; } }2. 图片资源优化// 图片资源管理 export class ImageOptimizer { // 使用矢量图替代位图 static getIcon(name: string): Resource { // 优先使用svg矢量图 return $r(app.media.svg.${name}); } // 图片懒加载 static lazyLoadImage(src: string): Image { return Image(src) .onComplete(() { console.info(图片加载完成); }) .onError(() { // 加载失败时使用占位图 console.info(图片加载失败使用占位图); }) .width(100%) .aspectRatio(1.5); } }3. 资源文件配置{ resources: { base: { media: { app_icon: $media:icon.svg } }, rawfile: { config.json: $rawfile:config.json } } }4. 构建配置优化{ buildOption: { strictMode: { caseSensitiveCheck: true, useNormalizedOHMUrl: true }, arkOptions: { obfuscation: { ruleOptions: { enable: true, files: [./obfuscation-rules.txt] } } } } } 面试官追问点如何分析和查看包体积哪些资源适合放到云端代码混淆如何配置面试题10元服务开发中有哪些常见的性能问题如何解决❓ 问题元服务开发中常见的性能瓶颈有哪些如何进行优化✅ 答案常见性能问题及解决方案问题原因解决方案卡片加载慢首屏数据加载阻塞预加载、缓存内存泄漏资源未释放及时清理、弱引用频繁更新卡片刷新过于频繁合并更新、节流UI卡顿主线程耗时操作异步处理 代码示例1. 卡片数据预加载和缓存import { formProvider } from kit.FormKit; import { util } from kit.ArkTS; export class FormPerformanceOptimizer { private static cache: Mapstring, any new Map(); private static readonly CACHE_KEY form_data_cache; // 预加载数据 static async preloadData(): Promisevoid { try { // 尝试从本地缓存读取 const cachedData this.getFromCache(); if (cachedData) { return cachedData; } // 异步获取新数据 const freshData await this.fetchFromNetwork(); this.saveToCache(freshData); return freshData; } catch (error) { console.error(预加载失败:, error); return null; } } // 缓存到本地 private static saveToCache(data: any): void { try { const jsonString JSON.stringify(data); // 使用Preferences存储 const preferences util.createPreferences({ name: form_cache, context: getContext() }); preferences.then(prefs { prefs.put(this.CACHE_KEY, jsonString); prefs.flush(); }); } catch (error) { console.error(缓存保存失败:, error); } } // 从缓存读取 private static getFromCache(): any { // 实现缓存读取逻辑 return this.cache.get(this.CACHE_KEY); } private static async fetchFromNetwork(): Promiseany { // 网络请求 return { data: fetched data }; } }2. 卡片更新节流export class FormUpdateThrottler { private static lastUpdateTimes: Mapstring, number new Map(); private static readonly UPDATE_INTERVAL 60000; // 1分钟 // 节流更新 static async throttledUpdate(formId: string, data: object): Promisevoid { const now Date.now(); const lastUpdate this.lastUpdateTimes.get(formId) || 0; // 检查是否达到更新间隔 if (now - lastUpdate this.UPDATE_INTERVAL) { console.info(更新过于频繁跳过本次更新); return; } try { const formBindingData formProvider.createFormBindingData(data); await formProvider.updateForm(formId, formBindingData); this.lastUpdateTimes.set(formId, now); } catch (error) { console.error(更新失败:, error); } } // 清理过期缓存 static clearExpiredCache(): void { const now Date.now(); for (const [key, value] of this.lastUpdateTimes.entries()) { if (now - value 3600000) { // 1小时过期 this.lastUpdateTimes.delete(key); } } } }3. 内存管理优化export class MemoryManager { private static observers: Mapstring, any new Map(); // 注册监听器并管理生命周期 static registerObserver(id: string, observer: any): void { this.observers.set(id, observer); } // 及时释放资源 static releaseObserver(id: string): void { const observer this.observers.get(id); if (observer observer.release) { observer.release(); } this.observers.delete(id); } // 清理所有资源 static releaseAll(): void { for (const [id, observer] of this.observers.entries()) { if (observer.release) { observer.release(); } } this.observers.clear(); } // 内存使用监控 static getMemoryUsage(): MemoryInfo { return { usedMemory: performance.memory?.usedJSHeapSize || 0, totalMemory: performance.memory?.totalJSHeapSize || 0, limit: performance.memory?.jsHeapSizeLimit || 0 }; } } interface MemoryInfo { usedMemory: number; totalMemory: number; limit: number; } 面试官追问点如何监控卡片的性能指标什么情况下会导致内存泄漏如何使用DevEco Studio的性能分析工具总结 核心要点回顾面试题关键知识点元服务概念无需安装、轻量级、卡片化与小程序对比系统级集成、分布式能力、原生性能卡片配置form_config.json、尺寸配置、更新策略FormExtensionAbility生命周期、数据管理、事件处理FormBindingData数据绑定、类型支持、自动刷新卡片更新机制定时更新、周期更新、主动更新分布式同步KVStore、跨设备、数据一致性上架流程开发、签名、审核、发布包体积优化代码分割、资源压缩、按需加载性能优化缓存、节流、内存管理 面试建议理解核心概念元服务的本质特征和设计理念掌握API使用FormExtensionAbility、FormBindingData等核心API了解最佳实践性能优化、包体积控制等工程实践熟悉开发流程从开发到上架的完整流程 扩展学习鸿蒙官方文档 - 元服务开发鸿蒙官方文档 - 卡片开发标签鸿蒙面试元服务面试题HarmonyOS卡片开发系列文章鸿蒙NEXT开发实战系列目录面试篇 - ArkUI面试题10道面试篇 - 性能优化面试题10道鸿蒙NEXT开发实战系列| 持续更新中 关注我获取更多鸿蒙开发技术分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2612022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…