当前位置: 首页 > news >正文

鸿蒙面试 2025-01-09

鸿蒙分布式理念?(个人认为理解就好)

鸿蒙操作系统的分布式理念主要体现在其独特的“流转”能力和相关的分布式操作上。在鸿蒙系统中,“流转”是指涉多端的分布式操作,它打破了设备之间的界限,实现了多设备间的联动。这种理念允许用户的应用程序在不同的设备上实现无缝流转,例如从手机到平板,或者从平板到电视,从而提供更加灵活和个性化的用户体验。

具体来说,鸿蒙的分布式理念包括以下几个关键方面:

  1. 设备互联 :鸿蒙系统通过分布式组网能力,使得不同的设备可以相互感知和连接,形成一个超级终端。这样,设备之间可以互相补充,共同为用户提供服务。

  2. 应用场景扩展 :分布式操作不仅限于设备之间的简单数据传输,还涵盖了多种复杂的场景,如跨设备编辑、多设备协同健身、多屏游戏等。这些场景都是通过设备间的紧密合作来实现的。

  3. 用户体验优化 :鸿蒙的分布式理念始终以用户为中心,通过提供更广泛的应用场景和产品视角,强化产品的优势,实现体验升级。例如,用户可以在一个设备上开始任务,在另一个设备上继续,无缝衔接。

  4. 开发者的机遇 :对于开发者而言,鸿蒙的分布式理念开辟了新的可能性。它允许开发者利用多设备协同的特点,开发出更为创新和有趣的应用,同时也提高了应用的可访问性和可用性。

总之,鸿蒙的分布式理念是通过其独特的技术和设计,实现多设备间的无缝协作,从而提升用户的日常生活和工作效率。这一理念正在推动智能设备行业向更加开放和互联的方向发展。


UIAbility的启动模式?

  1. Singleton(单实例模式)

    • 在这种模式下,系统中只存在一个UIAbility的实例 。即使多次调用startAbility()方法,系统也只会复用现有的实例,不会创建新的实例。这使得singleton模式适用于需要共享数据或资源的场景。
    • 配置方法:在module.json5配置文件中,将launchType字段设置为singleton 。
  2. Multiton(多实例模式) 

    • 与singleton模式相反,multiton模式允许每次调用startAbility()方法时都创建一个新的UIAbility实例。这适用于需要独立的数据隔离或频繁创建销毁实例的场景。
    • 配置方法:在module.json5配置文件中,将launchType字段设置为multiton
  3. Specified(指定实例模式)

    • 这种模式适用于需要精细控制实例行为的场景。例如,可以在应用中创建多个UIAbility实例,但希望重复打开同一实例时只使用同一个实例。
    • 配置方法:在module.json5配置文件中,将launchType字段设置为specified,并在启动UIAbility时在Want的parameters字段中设置唯一的Key值来标识实例 。


RPC通信?

UIAbility在鸿蒙(HarmonyOS)中可以通过RPC(Remote Procedure Call)进行进程间通信。以下是UIAbility进行RPC通信的具体方式:

  1. 建立连接 : UIAbility可以通过connectServiceExtensionAbility方法连接到一个服务。这个方法需要一个Want对象,该对象指定了要连接的服务的bundle名和ability名。例如: 

    let want: Want = {bundleName: "com.ohos.server",abilityName: "com.ohos.server.EntryAbility",
    };
    let connectionId = context.connectServiceExtensionAbility(want, connect);
    

    这里connect是一个包含了连接回调的选项对象,它定义了如何处理连接成功、断开连接和连接失败的情况。

  2. 通信过程 :

    • 在连接成功后,可以通过onConnect回调获取到远程对象的代理,这个代理可以用来调用远程服务的方法。
    • 如果需要监控远程服务的生死状态,可以注册死亡通知。这通过registerDeathRecipient方法实现,当远程服务消亡时,会调用onRemoteDied方法。
  3. 关闭连接 : 当不再需要与服务通信时,应该注销死亡通知,并断开与服务的连接。这可以通过调用unregisterDeathRecipient和断开连接来实现。

以上步骤展示了UIAbility如何通过RPC进行进程间通信的基本流程。这种方式允许UIAbility与其他应用或服务进行数据交换和功能调用,是实现复杂功能和交互的重要手段。

进程通信?

在鸿蒙(HarmonyOS)中,UIAbility可以通过多种方式与其他Ability或服务进行进程间通信(IPC)。以下是一些主要的通信方式:

  1. 公共事件(Common Events) :

  • UIAbility可以通过发送和接收公共事件来与其他Ability或服务进行通信。这适用于不需要即时响应的广播类型通信。
  • 示例代码 :
    import { commonEventManager } from '@kit.BasicServicesKit';
    function publishEventWithData() {let options: commonEventManager.CommonEventPublishData = {code: 1,data: "ContactData"  // 带敏感数据发送};commonEventManager.publish("MyCommonEvent", options, (err) => {if (err.code) {console.error("publish event error: " + err.code + ", " + err.message + ", " + err.name + ", " + err.stack);} else {console.info("publish event with data Succeeded");}});
    }
    
  1. 文件描述符传递(File Descriptor Passivation) :
  • 在某些情况下,UIAbility可能需要与子进程进行通信,这时可以通过传递文件描述符来共享数据或资源。
  • 示例代码 :
    import { ChildProcessArgs, childProcessManager } from '@kit.AbilityKit';
    import fs from '@ohos.file.fs';
    let context = getContext(this) as common.UIAbilityContext;
    let path = context.filesDir + "/test.txt";
    

    以上两种方式都可以实现在不同的Ability或服务之间的通信,选择哪种方式取决于具体的应用需求和开发者的偏好。请注意,在使用公共事件时,应确保敏感数据的安全性,避免因权限设置不当导致的数据泄露。

线程通信?

鸿蒙操作系统中,线程间通信是一个关键的并发编程特性。在鸿蒙的ArkTS环境中,主要通过以下几种方式支持线程间通信:

  1. TaskPool 和 Worker :这两种机制都允许数据在不同的Worker线程之间进行通信。TaskPool 自行管理线程数量,适合执行耗时操作,并支持调度优先级和负载均衡 。Worker线程也用于执行耗时操作,但其生命周期由开发者自行维护 。这两种方式都可以通过消息传递来进行线程间的通信。
  2. EventHub :这是一个用于线程内数据通信的机制,允许组件如UIAbility和UI组件在同一主线程中进行数据同步 。它支持事件的订阅、取消订阅和触发,从而实现线程内的数据交换。
  3. Emitter :这是一种事件驱动的线程间通信方式,允许应用程序在不同线程或同一线程内订阅、发布和取消事件。通过维护一个事件队列,Emitter能够异步地分发事件给订阅者,支持通过设置不同的回调方法来处理各种事件 。

这些通信机制各有特点,适用于不同的应用场景和需求,开发者可以根据实际需要选择最适合的通信方式来优化应用的性能和响应速度。


项目怎么做性能优化的?

在鸿蒙(HarmonyOS)项目中进行性能优化是一个系统性的过程,主要包括以下几个关键步骤:

  1. 现场复现 :这是性能优化的第一步,需要在具体的运行环境中复现存在的问题,如应用卡顿、响应迟缓等,以便更准确地捕捉和分析问题。

  2. 问题分析 :通过使用各种性能分析工具,如DevEco Profiler和HiDumper,收集和分析数据,以定位引起性能问题的代码部分。例如,可以使用DevEco Profiler中的Frame Profiler工具来分析应用卡顿的原因,或使用HiDumper来查看内存和CPU的使用情况 。

  3. 确定解决方案 :根据问题分析的结果,制定具体的优化方案 。这可能涉及到代码的修改、资源的优化配置或是算法的改进。(可能相听这个)

  4. 性能测试 :优化实施后,需要对应用进行性能测试,确保优化措施有效提高了应用的性能 。可以使用DevEco Profiler或其他性能测试工具来验证优化效果 。

在整个优化过程中,开发者需要注意监控和分析应用的性能指标,如帧率、内存使用、CPU占用等,这些指标可以帮助开发者更好地理解应用的运行状态和性能瓶颈 。此外,合理的使用缓存管理和组件复用技术,也可以显著提升应用的性能,比如通过设置LazyForEach的cachedCount来优化长列表的加载性能。

通过上述步骤和技术的应用,可以在鸿蒙项目中有效地进行性能优化,提升应用的响应速度和稳定性,从而改善用户体验。


后台任务类型?对应的使用场景?

以下是鸿蒙系统中主要的后台任务类型:

  1. 短时任务 :

    • 概念 :适用于实时性要求高、耗时不长的任务,如小文件下载、缓存、信息发送等。
    • 应用场景 :当应用短暂切换到后台时,可以通过申请短时任务来避免进程被挂起 。
    • 实现方式 :通过ApplicationContext.on('applicationStateChange')注册应用前后台变化的监听,当应用退至后台时,触发onApplicationBackground()回调函数,在此回调函数中申请短时任务 。
  2. 长时任务 :

    • 概念 :适用于长时间运行在后台的任务,如数据传输、音频播放、录音等。
    • 应用场景 :需要在后台持续执行的任务,如数据处理、软件更新等。
    • 实现方式 :在应用的后台服务中申请长时任务,确保任务在应用退至后台后仍能继续运行。
  3. 延迟任务 :

    • 概念 :适用于实时性要求不高的任务,可以延迟执行,如数据处理、信息收集等。
    • 应用场景 :适用于不需要即时响应的后台处理任务。
    • 实现方式 :设置延迟任务的触发条件,当条件满足时,系统会将任务放入执行队列,根据系统资源情况统一调度执行。
  4. 代理提醒 :

    • 概念 :系统代理应用做出相应的提醒,如闹钟、倒计时、日历等。
    • 应用场景 :适用于需要系统级提醒的服务,如会议提醒、服药提醒等。
    • 实现方式 :在应用中设置提醒服务,当达到预设时间或条件时,系统代理应用执行提醒操作。

每种后台任务类型都有其适用的场景和相应的实现方式,开发者可以根据应用的具体需求选择合适的后台任务类型,以确保应用在后台的稳定运行和高效执行。


HAP、HAR、HSR三种包的区别?

HAP、HAR和HSP是鸿蒙操作系统中用于应用开发和部署的三种不同类型的包,它们各有特定的功能和使用场景。

  1. HAP(Harmony Ability Package) 

    • HAP是应用安装和运行的基本单元,可以独立安装和运行 。它主要包括代码、资源、第三方库和配置文件等。
    • HAP分为entry和feature两种类型:entry作为应用的入口,提供基础功能;feature则作为应用能力的扩展,可根据用户需求和设备类型进行选择性安装。
    • 在单HAP场景中,应用可以直接由一个entry包构成;而在多HAP场景中,可以由一个entry包和多个feature包组成,以应对更复杂的功能需求。
  2. HAR(HarmonyOS Archive)

    • HAR是一种静态共享包,主要用于编译态复用,支持应用内的共享以及发布后供其他应用使用 。
    • HAR适用于作为二方库或三方库发布到不同的仓库中,供公司内部或其他应用使用。
    • 编译HAR时,建议开启混淆能力以保护代码资产。多包引用相同的HAR时,会导致应用包大小的增加。
  3. HSP(HarmonyOS Shared Package)

    • HSP是动态共享包,主要用于运行时复用。当多包同时引用同一个共享包时,使用HSP可以避免HAR造成的多包间代码和资源的重复拷贝,从而减小应用包大小 。
    • HSP不支持循环依赖,也不支持依赖传递 。

总结来说,HAP是应用的功能模块,可以独立安装和运行;HAR和HSP则是分别为编译态和运行时设计的共享包,用于代码和资源的复用 2。开发者可以根据实际的应用需求和性能考虑,选择合适的包类型进行开发和部署。


多线程的区别,TaskPool和Worker?

TaskPool和Worker都是多线程并发解决方案,旨在提高应用程序的性能和响应能力 。它们都允许程序在多个线程上执行耗时任务,从而避免阻塞主线程。以下是TaskPool和Worker在实现特点和适用场景上的对比:

实现特点对比

  • 参数传递 :
    • TaskPool:支持直接传递参数,无需封装,默认进行transfer 。
    • Worker:需要消息对象作为唯一参数,要求开发者自行封装。
  • 方法调用 :
    • TaskPool:可以直接将方法传入调用。
    • Worker:在Worker线程中进行消息解析并调用对应方法 。
  • 返回值 :
    • TaskPool:异步调用后默认返回 。
    • Worker:需要在onmessage中解析赋值 。
  • 生命周期管理 :
    • TaskPool:自行管理生命周期,无需关心任务负载高低 。
    • Worker:开发者自行管理Worker的数量及生命周期 。
  • 任务执行特性 :
    • TaskPool:支持任务优先级设置、任务取消、任务延时执行和设置任务依赖关系 。
    • Worker:不支持这些高级特性。

适用场景对比

  • TaskPool :由于支持自动扩缩容和任务优先级设置,适合需要高度管理和优化的环境,如大型应用的多个模块包含多个耗时任务。
  • Worker :适合执行长时间占据线程的任务,如后台进行长时间的预测算法训练等CPU密集型任务。

总结来说,TaskPool提供了更多的管理功能和灵活性,适合复杂的多任务管理场景;而Worker则更适合执行单一的、长时间的任务。开发者可以根据实际的应用需求和性能考量选择合适的多线程解决方案。


Navigational和router的区别?

Navigation和Router是HarmonyOS中支持的两种不同的路由机制,它们在易用性、功能和性能上有明显的区别 。以下是这两者的主要对比:

易用性

  • Navigation :具有天然的标题、内容和回退按钮的功能联动,页面由组件构成,易于实现共享元素的转场 。
  • Router :需要开发者自行定义上述功能,页面配置在单独的page中,通过@Entry进行标识 。

功能

  • Navigation :支持一多跳转,没有路由数量限制,可以获取路由栈NavPathStack,并可以在模态对话框中定义路由 。开发者可以自定义复杂的动效和属性设置 。
  • Router :不支持一多跳转,路由数量限制为32个,页面使用@Entry进行修饰,不支持模态框中的路由定义 。

性能

  • Navigation :传递参数性能更优,通过引用传递,可以配合动态加载实现组件动态加载 。
  • Router :通过深拷贝完成参数传递,页面在当前模块加载时会生成全量页面 。

结构和能力对比

  • Navigation :每个页面承载在一个page里,通过NavDestination容器实现基于组件的页面跳转 。支持跳转指定页面、跳转HSP和HAR中页面、跳转传参、获取指定页面参数等 。
  • Router :每个页面配置在一个单独的page中,支持跳转指定页面、跳转HSP和HAR中页面、跳转传参等,但不支持获取指定页面参数 。

根据您的应用场景和需求,您可以选择更适合的路由方案。一般来说,Navigation由于其更高的灵活性和扩展性,被推荐为首选的路由框架。


LazyForEach的工作原理?

LazyForEach是一种用于实现数据懒加载的技术,主要用于大规模数据集的处理,如长列表或网格。它的基本原理是在需要的时候才加载数据或资源,而不是一次性加载所有数据,从而优化性能和提升用户体验 。

工作原理

  1. 数据按需加载 :LazyForEach允许开发者根据用户的交互(如滚动页面)动态加载数据。这意味着只有进入屏幕可视区域的数据才会被加载,这大大减少了内存的使用和提升了应用性能。
  2. 组件树挂载和页面渲染 :当数据被加载时,LazyForEach会根据数据动态创建和销毁组件,从而减轻了页面初次加载时的负担 。这种动态组件管理也有助于提高应用的响应速度。

关键组件

  • 数据源(DataSource) :开发者需要提供一个数据源,这是一个IDataSource类型的对象,用于存储和管理数据。
  • 键值生成函数(KeyGenerator) :这是一个用于为每个数据项生成唯一键值的函数,帮助LazyForEach跟踪和管理组件。
  • 子组件生成函数(ItemGenerator) :这个函数根据键值和数据源为每个数据项创建组件 。

性能优化

  • 缓存策略 :LazyForEach可以通过设置cachedCount来指定缓存的组件数量,这样可以减少因频繁创建和销毁组件而导致的性能损耗。
  • 组件复用 :LazyForEach支持组件复用,即在数据项从屏幕中消失后,其对应的组件不会立即被销毁,而是被存储在缓存池中,以便再次使用。

通过这些机制,LazyForEach能够在保证应用性能的同时,提供流畅的用户体验。特别是在处理大量数据时,能够显著减少内存使用和提升应用响应速度。


H5是如何跟鸿蒙通信的?

在鸿蒙(HarmonyOS)系统中,H5页面与原生应用的通信主要通过“Native PostWebMessage”机制实现。这种机制允许H5页面和原生应用在不同的运行时环境中进行通信,而无需进行环境切换,从而提高了通信的效率和应用的响应速度。

通信机制

“Native PostWebMessage”是一种基于消息的通信方式,它允许消息的发送和接收在非UI线程上运行,这样可以避免UI阻塞,确保用户体验的流畅性。目前,该机制支持的数据类型包括string和buffer。

应用场景

这种通信方式特别适用于那些使用ArkTS和C++混合开发的应用,或者那些架构类似于小程序的应用。通过使用ArkWeb在Native侧提供的APIs,如ArkWeb_ControllerAPI、ArkWeb_WebMessageAPI和ArkWeb_WebMessagePortAPI,开发者可以实现在C++环境中与H5页面的直接通信。

实现步骤

  1. 绑定ArkWeb组件 :在ArkTS侧,开发者需要声明一个ArkWeb组件,并通过Node-API将一个唯一的webTag传递到应用的C++侧 1。这个webTag将用于标识ArkWeb组件,以便在Native侧进行通信 。

  2. 获取API结构体 :在C++侧,开发者需要首先获取API结构体,这是通过函数OH_ArkWeb_GetNativeAPI实现的。根据类型的 different,可以获取不同的函数指针结构体,这些结构体包含了实现PostWebMessage功能所需的Native API。

通过上述步骤,H5页面就能够与鸿蒙系统的原生应用进行有效的数据交换和事件处理,实现了丰富的交互体验和高效的数据处理能力。


沉浸式是如何实现的?

沉浸式页面开发在鸿蒙操作系统中主要通过两种方法实现:设置窗口全屏模式和扩展组件安全区域 1。这两种方法都可以实现将应用页面延伸到状态栏和导航栏的效果,从而提供更大的视觉空间和更好的用户体验。

方案一:设置窗口全屏模式

这种方法通过使用 Window.setWindowLayoutFullScreen() 方法来实现。它将窗口设置为全屏模式,使得应用界面能够占据整个屏幕,包括状态栏和导航栏区域 1。这样,用户可以看到更多的内容,而不会被系统栏所遮挡。

// 设置窗口全屏,实现沉浸式效果
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));
});

方案二:扩展组件安全区域

第二种方法是通过设置组件的 expandSafeArea 属性来扩展组件的安全区域到状态栏和导航栏 。这种方法只影响特定的组件,而不影响页面上的其他组件。它允许开发者更精细地控制哪些部分 of 应用应该延伸到系统栏下。

@Column
@Component
struct Example {build() {Column() {Row() {Text('Top Row').fontSize(40).textAlign(TextAlign.Center).width('100%')}.backgroundColor('F08080')// 设置顶部绘制延伸到状态栏.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP])}}
}

Want显式与隐式的区别?

显式Want和隐式Want是HarmonyOS中用于启动Ability的两种不同方式,它们的主要区别在于如何指定待启动的Ability以及使用的场景。

显式Want

显式Want是指在Want对象中明确指定了待启动Ability的bundleNameabilityNamemoduleName 1。这种方式可以直接匹配到指定的Ability,适用于已知具体Ability信息的场景。显式Want的优点是安全性较高,因为它确保了只能启动预设的Ability,但缺点是灵活性较低,不适用于动态或不确定Ability信息的场景。

  • 显式Want 
import Want from '@ohos.application.Want';
let want: Want = {'deviceId': '','bundleName': 'com.example.myapplication','abilityName': 'EntryAbility',
};

隐式Want

隐式Want则是在Want对象中不直接指定具体的Ability名称,而是通过actionentities等字段来描述待启动Ability应执行的操作和应具备的特性。隐式Want适用于不知道具体Ability名称或者需要动态匹配Ability的场景。它的优点是灵活性高,可以匹配多个符合特定条件的Ability,但缺点是如果系统中存在多个匹配的Ability,可能会导致不确定性。

  • 隐式Want :
import Want from '@ohos.application.Want';
let want: Want = {'action': 'view','entities': ['browser']
};

Axios实现图片上传的?

在使用Axios进行图片上传时,通常需要将图片数据封装在FormData中,然后通过Axios发送POST请求。以下是基本的实现步骤:

  1. 创建FormData对象 :首先创建一个FormData实例,并将图片文件添加到这个对象中。通常,可以通过HTML的input元素获取用户选择的图片文件。
    const formData = new FormData();
    formData.append('image', file); //假设file是用户选择的图片文件
    
  2. 配置Axios请求 :使用Axios发送POST请求,将FormData作为请求体发送。需要注意设置请求头的Content-Typemultipart/form-data,这是因为图片文件需要在这种类型的数据中传输。
    import axios from 'axios';const config = {headers: {'Content-Type': 'multipart/form-data'}
    };axios.post('/api/upload', formData, config).then(response => {console.log('图片上传成功');}).catch(error => {console.error('图片上传失败', error);});
    

音视频的开发使用过那些API?分别有那些状态?

AVRecorder(音视频录制器)

AVRecorder主要用于视频的录制,它集成了音频捕获、音频编码、视频编码和音视频封装功能 。开发者可以通过AVRecorder的state属性来获取当前状态,或者使用on('stateChange')方法来监听状态变化 。

状态包括:

  • started :录制开始状态。
  • paused :录制暂停状态。
  • resumed :录制恢复状态。
  • stopped :录制停止状态。

开发者应该严格遵循状态机的要求,例如只能在started状态下调用pause()接口,只能在paused状态下调用resume()接口 。

AVPlayer(音视频播放器)

AVPlayer则用于播放流媒体 。在使用前,需要声明ohos.permission.INTERNET权限,并且使用支持的播放格式与协议 。

主要操作包括:

  • prepare():准备播放,进入prepared状态,此时可以获取duration,设置音量 。
  • play():开始播放。
  • pause():暂停播放。
  • seek():跳转到视频的特定位置。
  • stop():停止播放。
  • release():销毁实例,退出播放 。

此外,AVPlayer还支持监听缓冲状态和码率切换,帮助开发者优化播放体验。

通过这些API和状态的管理,开发者可以在鸿蒙系统上实现丰富的音视频功能。


信息仅供参考,如有更优方案,欢迎评论,谢谢

相关文章:

鸿蒙面试 2025-01-09

鸿蒙分布式理念?(个人认为理解就好) 鸿蒙操作系统的分布式理念主要体现在其独特的“流转”能力和相关的分布式操作上。在鸿蒙系统中,“流转”是指涉多端的分布式操作,它打破了设备之间的界限,实现了多设备…...

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架,它提供了一种方式将 XML Schema (XSD) 映射到 Java 类,从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...

基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪

案例来源:https://spectacularai.github.io/docs/sdk/wrappers/oak.html 适配相机:带IMU的 OAK-D 系列相机 基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪 ~~~~~~~(分界线)~~~~~…...

MySQL--》理解锁机制中的并发控制与优化策略

锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中除了传统的计算机资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突…...

2、第一个GO 程序

引言 接下里我们就用Go Land 工具,开发第一个GO程序。大家也可以用其他的开发工具,例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 (不要有中文)。 第二个是你的Go的编译器的安装地址。 选择完毕后,就点击 …...

解决nginx多层代理后应用部署后访问发现css、js、图片等样式加载失败

一般是采用前后端分离部署方式,被上一层ng代理后,通过域名访问报错,例如:sqx.com.cn/应用代理路径。 修改nginx配置,配置前端页面的路径: location / {proxy_pass http://前端页面所在服务器的IP:PORT;pro…...

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一,简介二,操作方法三,总结 一,简介 在使用beyoundcompare软件进行对比的时候,常常会出现一些无关紧要的地方,且所在行的内容是变化的,不方便进行比较&…...

Python的秘密基地--[章节11] Python 性能优化与多线程编程

第11章:Python 性能优化与多线程编程 在开发复杂系统时,性能优化和并发编程是不可忽视的重点。Python 提供了多种工具和技术用于优化代码性能,并通过多线程、多进程等方式实现并发处理。本章将探讨如何在 Python 中提升性能,并实…...

【Unity3D】利用IJob、Burst优化处理切割物体

参考文章: 【Unity】切割网格 【Unity3D】ECS入门学习(一)导入及基础学习_unity ecs教程-CSDN博客 【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor_unity ijobparallelfor-CSDN博客 工程资源地址&…...

初学stm32 --- ADC模拟/数字转换器工作原理

目录 常见的ADC类型 并联比较型工作示意图 逐次逼近型工作示意图 ADC的特性参数 STM32各系列ADC的主要特性 ADC框图简介 参考电压/模拟部分电压 输入通道( F1为例) 转换序列(F1为例) 规则组和注入组执行优先级对比 规则…...

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…...

BM25(Best Match 25):信息检索的排序函数;稠密矩阵检索技术:RoBERTa

BM25(Best Match 25):信息检索的排序函数 常用于搜索引擎等场景,以下是关于它检索的内容及举例说明: 一、BM25检索的内容 文本数据: 文档集合:可以是大量的网页、学术论文、新闻文章、书籍内容等各种形式的文本集合。例如,一个学术搜索引擎可能会使用BM25对包含数百万…...

高级软件工程-复习

高级软件工程复习 坐标国科大,下面是老师说的考试重点。 Ruby编程语言的一些特征需要了解要能读得懂Ruby程序Git的基本命令操作知道Rails的MVC工作机理需要清楚,Model, Controller, View各司什么职责明白BDD的User Story需要会写,SMART要求能…...

Java常用设计模式

单例模式 单例模式就是: 在程序运行期间, 某些类有且最多只有一个实例对象 饿汉模式(静态常量) 饥饿模式又称为饿汉模式, 指的是JVM在加载类的时候就完成类对象的创建 //饿汉式(静态常量) public class Singleton1 {//构造器私有化,外部不能newprivate Singleto…...

29.Java 集合线程安全(ArrayList 类线程安全问题处理方案、HashSet 、HashMap 类线程安全问题处理方案)

一、ArrayList 类线程安全问题 1、概述 ArrayList 类存在线程安全问题 2、异常演示 ListNoSafeTest.java,演示 ArrayList 类线程安全问题 package com.my.listsafe;import java.util.ArrayList; import java.util.UUID;public class ListNoSafeTest {public st…...

解锁企业数字化转型新力量:OpenCoze(开源扣子)

在当今数字化浪潮席卷之下,企业对于高效管理和协同运作的需求愈发迫切,而开源技术正逐渐成为众多企业破局的关键利器。今天,想给大家介绍一款极具潜力的开源项目 ——OpenCoze,中文名称 “开源扣子”。 一、OpenCoze 是什么&…...

Docker 使用Dockerfile创建镜像

创建并且生成镜像 在当前目录下创建一个名为Dockerfile文件 vi Dockerfile填入下面配置 # 使用 CentOS 作为基础镜像 FROM centos:7# 设置工作目录 WORKDIR /app# 复制项目文件到容器中 COPY bin/ /app/bin/ COPY config/ /app/config/ COPY lib/ /app/lib/ COPY plugin/ /a…...

linux网络 | https前置知识 | 数据加密与解密、数据摘要

前言:本节内容讲述https的相关内容。 https博主会着重讲解https如何让一个请求和一个响应能够安全的进行交互。 https博主将用两篇文章进行讲解。本篇是两篇中第一篇。会把http的安全问题引出来, 然后说一下https的基本解决方法。 下面废话不多说, 开始我…...

01 Oracle自学环境搭建(Windows系统)

1 Oracle12C安装 1.1 下载 官网地址:https://www.oracle.com/ 进入官网→Resource→Customer Downloads 如果没有登录,会提示登录后后才能下载 选择适合自己的版本(我电脑是Windows系统 64位) 选择需要的安装包进行下载 双击下载…...

负载均衡原理及算法

什么是负载均衡? 负载均衡 指的是将用户请求分摊到不同的服务器上处理,以提高系统整体的并发处理能力以及可靠性。负载均衡服务可以有由专门的软件或者硬件来完成,一般情况下,硬件的性能更好,软件的价格更便宜&#x…...

STM32第5章、IWDG

一、简介 IWDG:全称是Independent watchdog,即独立看门狗。本质上是一个能产生系统复位信号的计数器。 特性: 是一个递减计数器。 时钟信号由独立的RC振荡器提供,可在待机和停止模式下运行。 看门狗被激活后,当递减计…...

[python3]Uvicorn库

Uvicorn 是一个用于运行 ASGI(Asynchronous Server Gateway Interface)应用程序的轻量级服务器。ASGI 是 Python Web 应用程序接口的一种扩展,它不仅支持传统的同步 Web 请求处理,还支持异步请求处理、WebSockets 以及 HTTP/2。 h…...

openEuler 22.04使用yum源最快速度部署k8s 1.20集群

本文目的 openEuler的官方源里有kubernetes 1.20,使用yum源安装是最快部署一个k8s集群的办法 硬件环境 主机名系统架构ipmasteropenEuler release 22.03 (LTS-SP2)arm192.168.3.11edgeopenEuler release 22.03 (LTS-SP2)arm192.168.3.12deviceopenEuler release 22.…...

【深度学习】数据预处理

为了能用深度学习来解决现实世界的问题,我们经常从预处理原始数据开始, 而不是从那些准备好的张量格式数据开始。 在Python中常用的数据分析工具中,我们通常使用pandas软件包。 像庞大的Python生态系统中的许多其他扩展包一样,pan…...

Oracle:ORA-00904: “10“: 标识符无效报错详解

1.报错Oracle语句如下 SELECT YK_CKGY.ID,YK_CKGY.DJH,YK_CKGY.BLRQ,YK_CKGY.ZBRQ,YK_CKGY.SHRQ,YK_CKGY.YT,YK_CKGY.ZDR,YK_CKGY.SHR,YK_CKGY.BZ,YK_CKGY.JZRQ,YK_CKGY.ZT,YK_CKGY.CKLX,(case YK_CKGY.CKLXwhen 09 then药房调借when 02 then科室退药when 03 then损耗出库when…...

CentOS 7 下 Nginx 的详细安装与配置

1、安装方式 1.1、通过编译方式安装 下载Nginx1.16.1的安装包 https://nginx.org/download/nginx-1.16.1.tar.gz 下载后上传至/home目录下。 1.2、通过yum方式安装 这种方式安装更简单。 2、通过编译源码包安装Nginx 2.1、安装必要依赖 sudo yum -y install gcc gcc-c sudo…...

Vue.js:现代前端开发的灵活框架

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…...

VideoPlayer插件的功能和用法

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…...

GPT-SoVITS学习01

1.什么是TTS TTS(Text-To-Speech)这是一种文字转语音的语音合成。类似的还有SVC(歌声转换)、SVS(歌声合成)等。 2.配置要求 GPT-SoVITS对电脑配置有较高的要求。 训练:对于Windows电脑&#…...

C语言程序环境和预处理详解

本章重点: 程序的翻译环境 程序的执行环境 详解:C语言程序的编译链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 程序的翻译环境和执行环…...

DBeaver执行本地的sql语句文件避免直接在客户端运行卡顿

直接在客户端运行 SQL 语句和通过加载本地文件执行 SQL 语句可能会出现不同的性能表现,原因可能包括以下几点: 客户端资源使用: 当你在客户端界面直接输入和执行 SQL 语句时,客户端可能会消耗资源来维护用户界面、语法高亮、自动完…...

【Linux】5.Linux常见指令以及权限理解(3)

文章目录 3. Linux指令如何把自己的公网IP配置到XShell里面日志3.9 时间相关的指令3.10 Cal指令3.11 find指令:(灰常重要)3.12 grep指令3.13 zip/unzip指令:3.14 tar指令(重要):打包/解包&#…...

QT鼠标、键盘事件

一、鼠标 鼠标点击 mousePressEvent 鼠标释放 mouseReleaseEvent 鼠标移动 mouseMoveEvent 鼠标双击 mouseDoubleClickEvent 鼠标滚轮 QWheelEvent 二、键盘 键盘按下 keyPressEvent 键盘松开keyReleaseEvent 一、鼠标 #include <QMouseEvent> 鼠标点击 mouse…...

LabVIEW启动时Access Violation 0xC0000005错误

问题描述 在启动LabVIEW时&#xff0c;可能出现程序崩溃并提示以下错误&#xff1a;Error 0xC0000005 (Access Violation) ​ Access Violation错误通常是由于权限不足、文件冲突或驱动问题引起的。以下是解决此问题的全面优化方案&#xff1a; 解决步骤 1. 以管理员身份运行…...

WPF中组件之间传递参数的方法研究

在 WPF (Windows Presentation Foundation) 中&#xff0c;组件&#xff08;或称为控件&#xff09;之间传递参数的方法有很多种。不同的传递方式适用于不同的应用场景&#xff0c;具体选择取决于应用需求、性能、可维护性等因素。以下是几种常见的传递参数的方法&#xff0c;并…...

本地大模型工具哪家强?对比Ollama、LocalLLM、LM Studio

前言 对于AIGC的初学者&#xff0c; 你一定想尝试在本地搭建一个私有的开源大模型&#xff0c;比如常见的chatglm、llama或者qwen。在实践过程你会发现&#xff0c;每个模型单独配置环境&#xff0c;下载模型文件&#xff0c;还要确保它们互不干扰。这不仅耗时耗力&#xff0c…...

dify 常见问题总结 2025 持续更新

任何 Dify 问题评论区留言。 问题总结 Q&#xff1a;模型在回答时出现异常情况该如何处理&#xff1f; A&#xff1a; 可以通过记录异常情况并分析其原因来进行处理。通常可以调整提示词、重新训练模型或增加异常处理机制来改进模型的表现。 关键词&#xff1a;提示词、模型、…...

贪心算法笔记

贪心算法笔记 大概内容 贪心就是对于一个问题有很多个步骤,我们在每一个步骤中都选取最优的那一个,最后得出答案。就是在一些函数中可行,但是有些比如二次函数,因为它的转折点不一定最优,就是不可行的。那么如何判断贪心呢?有这么几种 看时间复杂度,一般的就是 O ( n…...

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法&#xff0c;其优势是减少插值误差(特别是龙格现象&#xff1a;表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。 1. 切比雪夫节点 切比雪夫插值的核心是使用切比雪夫节点作为插值点。切比雪夫节点是切…...

西电-神经网络基础与应用-复习笔记

此为24年秋研究生课程复习笔记 导论 神经网络的研究方法分为 连接主义&#xff0c;生理学派&#xff0c;模拟神经计算。高度的并行、分布性&#xff0c;很强的鲁棒和容错性。便于实现人脑的感知功能(音频图像的识别和处理)。符号主义&#xff0c;心理学派&#xff0c;基于符号…...

【面试题】简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势

云原生&#xff08;Cloud Native&#xff09; 定义&#xff1a;云原生是一种构建和运行应用程序的方法&#xff0c;旨在充分利用云计算的优势。它涵盖了一系列技术和理念&#xff0c;包括容器化、微服务架构、自动化部署与管理等。特点&#xff1a;云原生应用程序被设计为可弹性…...

Vue 3 Diff 算法过程及基本实现方式

Vue 3 的 Diff 算法 Vue 3 使用的是一种高效的 DOM Diff 算法&#xff0c;主要用于在虚拟 DOM 树发生变化时&#xff0c;计算最小的操作以更新真实 DOM。相比 Vue 2&#xff0c;Vue 3 的 Diff 算法做了很多优化。 Diff 算法的背景与目的 虚拟 DOM 树的对比&#xff1a;在 Vue…...

EasyCVR视频汇聚平台如何配置webrtc播放地址?

EasyCVR安防监控视频系统采用先进的网络传输技术&#xff0c;支持高清视频的接入和传输&#xff0c;能够满足大规模、高并发的远程监控需求。平台支持多协议接入&#xff0c;能将接入到视频流转码为多格式进行分发&#xff0c;包括RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、W…...

PowerApps助力PowerBI实现数据写回

原文发布日期: 2019-08-01 06:03:50 0000 注&#xff1a;本文旨在介绍Power BI如何利用PowerApps实现用户在前端对数据源进行增删查改&#xff0c;关于此&#xff0c;你也可以在Google上找到更详细但较零散的资料 正文 在SSAS多维数据集中&#xff0c;开发者可以给数据开启&q…...

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做&#xff0c;Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合&#xff0c;用来确定两个元素是否同属一个集合等&#xff0c;是效率最高的常见数据结构之一。 Wiki链接&#xff1a;https://en…...

React 元素渲染

React 元素渲染 React 是一个用于构建用户界面的 JavaScript 库&#xff0c;它允许开发人员创建大型应用程序&#xff0c;这些应用程序可以随着时间的推移而高效地更新和渲染。React 的核心概念之一是元素渲染&#xff0c;它描述了如何将 JavaScript 对象转换为 DOM&#xff0…...

【Leetcode 每日一题】3270. 求出数字答案

问题背景 给你三个 正 整数 n u m 1 num_1 num1​&#xff0c; n u m 2 num_2 num2​ 和 n u m 3 num_3 num3​。 数字 n u m 1 num_1 num1​&#xff0c; n u m 2 num_2 num2​ 和 n u m 3 num_3 num3​ 的数字答案 k e y key key 是一个四位数&#xff0c;定义如下&…...

eNSP之家----ACL实验入门实例详解(Access Control List访问控制列表)(重要重要重要的事说三遍)

ACL实验&#xff08;Access Control List访问控制列表&#xff09;是一种基于包过滤的访问控制技术&#xff0c;它可以根据设定的条件对接口上的数据包进行过滤&#xff0c;允许其通过或丢弃。访问控制列表被广泛地应用于路由器和三层交换机。 准备工作 在eNSP里面部署设备&a…...

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…...

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…...