Tencent Tinker:移动应用热修复的未来之路

news2024/10/6 18:35:42

Tencent Tinker:移动应用热修复的未来之路

1 引言

移动应用热修复是一项在移动应用开发领域中日益重要的技术,它可以帮助应用程序开发者快速修复线上应用的bug、漏洞和功能问题,而无需重新发布整个应用。这种能力对于提高用户体验、降低用户流失率以及快速响应市场需求非常关键。

作为移动应用热修复领域的一项重要技术,Tencent Tinker在这方面发挥着重要的作用。Tencent Tinker是一个灵活、高效的热修复框架,由腾讯公司开发并开源。它提供了一套强大的工具和机制,使开发者能够在不影响用户体验的情况下进行实时修复和功能更新。

移动应用热修复是指在应用程序已经上线运行后,通过代码补丁的方式对应用程序进行实时修复和更新。它的重要性主要体现在以下几个方面:

  1. 快速修复:移动应用的bug和漏洞可能会导致应用崩溃、功能异常或数据安全问题。通过热修复,开发者可以及时修复这些问题,避免用户体验受损和用户流失。

  2. 功能更新:移动应用市场变化迅速,用户对新功能的需求也在不断演变。通过热修复,开发者可以快速推出新功能和改进,保持应用的竞争力和吸引力。

  3. 提高用户体验:热修复能够及时修复用户反馈的问题,提高应用的稳定性和性能。这有助于提升用户满意度和留存率。

Tencent Tinker作为一种移动应用热修复框架,能够帮助开发者满足快速修复和功能更新的需求,从而提高移动应用的质量和用户体验。

Tencent Tinker作为一种灵活且高效的热修复框架,具有以下几个重要的作用和意义:

  1. 实时修复:Tencent Tinker允许开发者在应用线上运行时实时修复bug和漏洞。开发者可以通过生成补丁文件,将其传递给用户设备并动态加载,实现即时修复,无需重新发布整个应用。

  2. 高可靠性:Tencent Tinker能够确保热修复过程的可靠性。它通过校验补丁文件的合法性并提供具有完整性校验的补丁验证机制,以确保修复过程的准确性和安全性。

  3. 兼容性:Tencent Tinker支持在不同版本的应用之间进行热修复。开发者可以通过Tinker框架生成兼容性补丁,使得旧版本应用也能够获得最新修复和功能更新的好处。

  4. 灵活性:Tencent Tinker提供了灵活的修复策略和资源替换机制。开发者可以根据应用的需求,选择部分修复或整体修复,以及替换资源文件,实现更加精细化的修复和更新。

2 什么是Tencent Tinker

Tencent Tinker是腾讯公司开发的一款移动应用热修复框架,旨在帮助开发者快速修复线上应用的bug、漏洞和功能问题。它提供了一套强大的工具和机制,使得开发者能够在不影响用户体验的情况下进行实时修复和功能更新。Tencent Tinker的出现解决了传统应用修复需要重新发布整个应用的痛点,有效提升了开发效率和用户体验。

2.1 Tinker的特点和优势

  1. 实时修复:Tencent Tinker允许开发者在应用线上运行时实时修复bug和漏洞,无需重新发布整个应用。这种能力大大缩短了修复时间,减少了用户使用受限的情况,提高了用户满意度和留存率。

  2. 高可靠性:Tencent Tinker通过校验补丁文件的合法性和提供完整性校验的补丁验证机制,确保修复过程的准确性和安全性。开发者可以放心地使用Tencent Tinker进行热修复,而不用担心引入新的问题。

  3. 兼容性:Tencent Tinker支持在不同版本的应用之间进行热修复。开发者可以通过Tinker框架生成兼容性补丁,使得旧版本应用也能够获得最新修复和功能更新的好处。这种兼容性能力在保证用户体验的同时,也提高了开发者的灵活性。

  4. 灵活性:Tencent Tinker提供了灵活的修复策略和资源替换机制。开发者可以根据应用的需求,选择部分修复或整体修复,并且可以替换资源文件,实现更加精细化的修复和更新。这种灵活性使得开发者能够更好地控制修复的范围和效果。

2.2 Tinker在移动应用开发中的应用场景

  1. Bug修复:移动应用的bug可能导致应用崩溃、功能异常或数据安全问题。Tencent Tinker可以帮助开发者快速修复这些问题,无需重新发布整个应用,从而提高用户体验和应用质量。

  2. 功能更新:移动应用市场变化迅速,用户对新功能的需求也在不断演变。通过Tencent Tinker,开发者可以快速推出新功能和改进,保持应用的竞争力和吸引力。

  3. 灰度发布:通过Tencent Tinker,开发者可以实现应用的灰度发布,即先将修复或更新应用的部分用户,再逐步扩大范围。这种方式可以帮助开发者尽早发现潜在问题,并有效控制风险。

总之,Tencent Tinker作为一种灵活、高效的移动应用热修复框架,在bug修复、功能更新和灰度发布等方面具有重要的应用价值。它提供了实时修复、高可靠性、兼容性和灵活性等优势,帮助开发者提高开发效率、用户体验和应用质量。随着移动应用市场的不断发展,Tencent Tinker将在移动应用热修复领域发挥更大的作用,成为开发者的得力助手。

3 快速入门

  1. 在项目的根目录下的main build.gradle文件中添加tinker-gradle-plugin作为依赖项:
buildscript {
    dependencies {
        classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.9.1')
    }
}

然后,你需要通过在app/build.gradle文件中添加以下行来"apply"插件并添加依赖项。

dependencies {
    // 可选项,帮助生成最终应用程序
    provided('com.tencent.tinker:tinker-android-anno:1.9.1')
    // Tinker的主要Android库
    compile('com.tencent.tinker:tinker-android-lib:1.9.1')
}
/

apply plugin: 'com.tencent.tinker.patch'
  1. 如果你的应用程序有一个继承android.app.Application的类,则你需要修改该类,并将所有实现移动到SampleApplicationLike而不是Application:
-public class YourApplication extends Application {
+public class SampleApplicationLike extends DefaultApplicationLike {

现在,你应该更改你的Application类,使其成为TinkerApplication的子类。从其API中可以看出,它是一个抽象类,没有默认构造函数,所以你必须定义一个无参构造函数:

public class SampleApplication extends TinkerApplication {
    public SampleApplication() {
      super(
        // tinkerFlags,支持的类型
        // 仅dex,仅library,全部支持
        ShareConstants.TINKER_ENABLE_ALL,
        // 这是以字符串形式传递的,因此shell应用程序不会对ApplicationLifeCycle类有二进制依赖。
        "tinker.sample.android.app.SampleApplicationLike");
    }
}

推荐使用tinker-android-anno来生成你的Application,你只需要为SampleApplicationLike类添加一个注解:

@DefaultLifeCycle(
application = "tinker.sample.android.app.SampleApplication",             // 生成的应用程序名称
flags = ShareConstants.TINKER_ENABLE_ALL)                                // 上述的tinkerFlags
public class SampleApplicationLike extends DefaultApplicationLike
  1. 关于混淆(proguard),我们已经自动进行了混淆配置,并且Tinker还会为你生成multiDex保留的混淆文件。

更多Tinker配置,请参考示例app/build.gradle文件。

https://github.com/Tencent/tinker/blob/master/tinker-sample-android/app/build.gradle

4 Ark支持

如何在Ark上运行Tinker?构建补丁

只需使用以下命令:

bash build_patch_dexdiff.sh old=xxx new=xxx

old表示具有错误的Android APK(并非由Ark编译)的绝对路径
new表示修复后的Android APK(并非由Ark编译)的绝对路径

补丁文件将以APK的形式打包。

在Ark中编译

目前通过Ark编译器团队进行编译。生成的补丁仍然以APK格式打包,但没有签名。

打包补丁

对于tinker-cli,请在你的tinker_config.xml中添加以下行。否则,将使用默认配置。

<issue id="arkHot">
   <path value="arkHot"/>         // 补丁的路径
   <name value="patch.apk"/>      // 补丁的名称
</issue>

对于gradle,请在你的app/build.gradle中添加以下行。否则,将使用默认配置。

ark {
   path = "arkHot"         // 补丁的路径
   name = "patch.apk"      // 补丁的名称
}

补丁由Ark编译,并放置在上述路径上。所有后续操作与tinker-cligradle相同。

最终的补丁APK由两个补丁文件组成:

Android的classes.dex
带有Ark的so文件的patch.apk。

5 Tinker的工作原理

5.1 Patch文件生成与加载

Tencent Tinker的核心机制是通过生成和加载Patch补丁文件来实现热修复。下面将详细介绍Patch文件的生成与加载过程。

  1. Patch文件生成:开发者使用Tinker框架提供的工具,根据应用的代码变更生成Patch补丁文件。这些补丁文件包含了需要修复或更新的代码片段,以及对应的资源文件。

示例代码:

TinkerPatch.Builder builder = new TinkerPatch.Builder(context);
builder.appKey(APP_KEY)
       .supportHotplug(true)
       .build()
       .patch();
  1. Patch文件加载:一旦Patch补丁文件生成,开发者可以将其传输到线上服务器,并通过Tinker框架提供的API在应用中加载补丁文件。

示例代码:

TinkerInstaller.onReceiveUpgradePatch(context, patchFile.getAbsolutePath());

5.2 基于ClassLoader的热修复机制

Tencent Tinker基于ClassLoader的热修复机制是实现热修复的关键。它通过动态加载Patch补丁文件并创建新的ClassLoader来实现代码的修复和更新。

  1. 动态加载补丁文件:Tencent Tinker会在应用启动时检查是否有新的补丁文件可用。如果有,它会下载补丁文件并在运行时动态加载。

  2. 创建新的ClassLoader:通过创建新的ClassLoader,Tencent Tinker能够加载补丁文件中的修复代码,并替换掉原有的代码逻辑。这样,应用就能够在不重新启动的情况下应用新的修复和更新。

5.3 资源替换和修复

除了修复代码,Tencent Tinker还支持资源文件的替换和修复。这使得开发者能够在修复过程中对应用的资源文件进行精细化控制和更新。

  1. 资源替换:通过Patch补丁文件,开发者可以将新的资源文件替换掉旧版本应用的资源文件。这种资源替换机制可以实现一些视觉效果的改变或者修复存在的问题。

  2. 资源修复:如果应用的资源文件存在问题,Tencent Tinker也可以通过修复补丁文件来修复这些资源文件。开发者只需要将修复后的资源文件打包到补丁中,然后通过Tinker框架加载即可。

Tencent Tinker的工作原理基于Patch文件的生成与加载、基于ClassLoader的热修复机制以及资源替换和修复。开发者通过生成补丁文件并加载到应用中,实现了快速修复和更新功能。借助于动态加载和新的ClassLoader,Tencent Tinker能够在应用运行时实时修复和更新代码。同时,它还支持资源文件的替换和修复,使得开发者能够更加灵活地控制应用的修复范围和效果。

6 Tinker的功能和特性

Tencent Tinker作为一款优秀的热修复框架,不仅实现了快速修复和更新,还有许多其他强大的功能和特性。下面将详细介绍Tinker的功能和特性。

6.1 实时修复和快速发布

Tencent Tinker的核心功能是实时修复和快速发布。通过Tinker框架提供的动态加载和替换机制,开发者可以在不重新安装应用或者重新启动应用的情况下实现代码的修复和更新。这种实时修复和快速发布的功能使得开发者能够快速响应用户反馈和市场需求,提高应用的稳定性和用户体验。

示例代码:

TinkerInstaller.onReceiveUpgradePatch(context, patchFile.getAbsolutePath());

6.2 高度定制化的修复策略

Tencent Tinker支持高度定制化的修复策略。开发者可以根据应用的需求,选择不同的修复策略来实现最优的修复效果。Tencent Tinker提供了以下几种常见的修复策略:

  1. 全量修复:全量修复是一种将所有代码都替换成新版本的修复策略。这种修复策略适合修复较大的问题或者进行全面升级。

  2. 增量修复:增量修复是一种只替换发生变化的代码的修复策略。这种修复策略适合修复小问题,减少网络流量和用户下载的时间。

  3. 组合修复:组合修复是一种将全量修复和增量修复结合起来的修复策略。开发者可以根据具体情况选择不同的修复策略来实现最优的修复效果。

示例代码:

TinkerManager.builder(context)
             .patchDirectory(patchDirectoryFile)
             .upgradePatch(new UpgradePatch())
             .patchListener(new TinkerPatchListener())
             .build();

6.3 支持多种资源类型的修复

除了支持代码的修复和更新,Tencent Tinker还支持多种资源类型的修复。这包括图片、音频、视频等各种资源文件。开发者可以通过Tinker框架提供的资源替换和修复机制,实现对应用资源文件的精细化控制和更新。

示例代码:

TinkerResourcePatcher resourcePatcher = new TinkerResourcePatcher(context);
resourcePatcher.setDrawablePatchEnabled(true);
resourcePatcher.setStringPatchEnabled(true);
resourcePatcher.setLibraryPatchEnabled(true);
resourcePatcher.patchResourceOnly(patchFile.getAbsolutePath());

总之,Tencent Tinker作为一款优秀的热修复框架,不仅实现了快速修复和更新,还支持高度定制化的修复策略和多种资源类型的修复。通过Tinker框架提供的动态加载和替换机制,开发者能够快速响应用户反馈和市场需求,提高应用的稳定性和用户体验。同时,它也支持多种修复策略和资源类型,使得开发者能够根据具体情况选择最优的修复方案。

7 Tinker的应用案例

7.1 大规模应用更新和修复

Tencent Tinker作为一款强大的热修复框架,广泛应用于大规模应用的更新和修复。通过Tinker框架提供的实时修复和快速发布的功能,开发者可以在不重新安装应用或者重新启动应用的情况下实现代码的修复和更新。这使得开发团队能够快速响应用户反馈和市场需求,提高应用的稳定性和用户体验。

示例场景1:假设一款电商应用出现了购物车计算错误的问题,影响了用户的购物体验。使用Tencent Tinker,开发团队可以立即修复这个问题,将修复后的代码作为补丁发布给用户,用户无需重新下载整个应用,只需下载该补丁并应用即可解决问题。

示例场景2:一款社交应用需要新增一个功能,例如添加朋友推荐模块。使用Tencent Tinker,开发团队可以在不中断用户使用的情况下,将新增功能的代码作为补丁发布给用户,用户可以及时获得新功能的体验,无需等待应用的完整升级。

7.2 动态性能优化和体验改进

除了应用的更新和修复,Tencent Tinker还可以用于动态性能优化和体验改进。通过Tinker框架的动态加载和替换机制,开发者可以针对性地优化应用的性能,提高用户的体验。

示例场景1:假设一款新闻应用在加载新闻列表时存在性能问题,导致用户等待时间过长。使用Tencent Tinker,开发团队可以优化新闻列表加载的代码,并将优化后的代码作为补丁发布给用户,从而减少用户等待时间,提升用户体验。

示例场景2:一款游戏应用需要提高游戏画面的流畅度,降低卡顿现象。使用Tencent Tinker,开发团队可以对游戏引擎的核心代码进行优化,并将优化后的代码作为补丁发布给用户,从而提升游戏的性能和流畅度。

7.3 应对紧急漏洞修复和安全更新

Tencent Tinker还可以用于应对紧急漏洞修复和安全更新的场景。通过Tinker框架提供的实时修复功能,开发者可以快速响应漏洞报告,修复应用中的安全漏洞,并向用户发布补丁以确保应用的安全性。

示例场景1:假设一款移动银行应用中发现了一个严重的安全漏洞,可能导致用户的账户信息泄露。使用Tencent Tinker,开发团队可以迅速修复该漏洞,并将修复后的代码作为补丁发布给用户,确保用户的账户安全。

示例场景2:一款即时通讯应用发现了一个影响用户隐私的漏洞,可能导致用户的聊天记录被泄露。使用Tencent Tinker,开发团队可以立即修复漏洞,并向用户推送补丁,保护用户的隐私和安全。

Tencent Tinker作为一款强大的热修复框架,在大规模应用更新和修复、动态性能优化和体验改进、紧急漏洞修复和安全更新等方面都有广泛的应用。通过Tinker框架提供的实时修复和快速发布功能,开发者能够快速响应市场需求和用户反馈,提高应用的稳定性、性能和用户体验。

8 与其他热修复方案的对比

8.1Tinker与传统发布方式的优劣对比

传统的应用发布方式通常需要重新打包整个应用并进行全量更新,这会造成用户需要重新下载整个应用,占用用户的流量和时间。而Tencent Tinker作为一款热修复框架,具有以下优点:

  1. 高效的补丁发布:Tinker可以将应用更新和修复的代码以补丁的形式发布给用户,用户只需下载补丁而非整个应用,大大减少了用户的流量消耗和等待时间。

  2. 实时修复能力:Tinker的实时修复机制可以让开发者快速响应用户反馈和市场需求,及时修复应用中的问题,无需等待完整的应用更新周期。

  3. 无需重启应用:Tinker可以在不重新启动应用的情况下进行代码的修复和更新,用户可以无缝地继续使用应用,提高了用户体验。

示例代码:

// 示例代码展示了如何使用Tinker发布补丁

// Step 1: 构建补丁包
TinkerPatch.Builder builder = new TinkerPatch.Builder(context);
builder.appId(appId)
       .appVersion(appVersion)
       .tinkerEnableDebug(true) // 是否开启调试模式
       .build();

// Step 2: 加载补丁包
TinkerPatch.with(builder).fetchPatchUpdateAndPollWithInterval();

// Step 3: 应用补丁
TinkerPatch.with(builder).applyPatch();

8.2Tinker与其他热修复框架的比较

在市场上还存在其他热修复框架,如AndFix、Robust等。与这些框架相比,Tencent Tinker具有以下优势:

  1. 功能丰富:Tinker提供了更多的功能,包括实时修复、动态性能优化和安全更新等。开发者可以根据不同的需求选择合适的功能来解决问题。

  2. 易于集成:Tinker提供了简单易用的接口和文档,使得开发者可以快速集成并使用。同时,Tinker支持多种开发环境和应用框架,具有较好的兼容性和扩展性。

  3. 社区支持:Tencent Tinker拥有庞大的用户社区和开发者生态圈,提供了丰富的文档、教程和示例代码等资源。开发者可以通过社区的互动和共享,获得更多的帮助和支持。

示例代码:

// 示例代码展示了如何使用AndFix进行热修复

// Step 1: 初始化AndFix
PatchManager patchManager = new PatchManager(context);
patchManager.init(appVersion);

// Step 2: 加载补丁文件
patchManager.loadPatch();

// Step 3: 应用补丁
patchManager.patch();

总之,Tencent Tinker相较于传统的发布方式和其他热修复框架,具有更高效的补丁发布、实时修复能力和无需重启应用的优势。同时,Tinker还提供了丰富的功能和易于集成的特点,得到了广泛的应用和社区支持。开发者可以根据自身需求选择合适的热修复方案,提升应用的稳定性和用户体验。

9 Tinker的未来展望

9.1 持续改进和新功能的加入

作为一款广泛应用于移动应用热修复的框架,Tencent Tinker将会持续改进并引入新的功能,以满足不断变化的市场需求和开发者的期望。

  1. 性能优化:Tinker将致力于提升补丁加载和应用修复的性能,以减少用户等待时间和资源消耗。通过优化算法和技术手段,Tinker将进一步提高补丁的加载速度和修复效率。

  2. 安全更新:Tinker将加强对补丁安全性的保障,确保补丁的来源可信、内容完整,并防止恶意代码的注入。通过加密、验签等手段,Tinker将提供更高的安全性和可靠性。

  3. 功能拓展:Tinker将逐步引入更多的功能,如资源修复、插件化等,以满足开发者对更全面的热修复需求。通过灵活的接口设计和扩展机制,Tinker将提供更多选择和自定义的空间。

示例代码:

// 示例代码展示了Tinker在未来引入资源修复功能的使用

// Step 1: 构建资源补丁包
TinkerResourcePatch.Builder builder = new TinkerResourcePatch.Builder(context);
builder.appId(appId)
       .appVersion(appVersion)
       .build();

// Step 2: 加载资源补丁包
TinkerResourcePatch.with(builder).fetchPatchUpdateAndPollWithInterval();

// Step 3: 应用资源补丁
TinkerResourcePatch.with(builder).applyResourcePatch();

9.2 与其他技术的整合和拓展

Tencent Tinker将积极与其他相关技术进行整合和拓展,以提供更全面、更灵活的解决方案。

  1. 云端支持:Tencent Tinker将与云服务提供商合作,提供云端的热修复解决方案。通过将补丁文件存储在云端,实现快速的补丁发布和动态修复,进一步提升用户体验。

  2. AI辅助:Tencent Tinker将结合人工智能技术,提供智能化的热修复方案。通过分析用户行为和应用数据,Tinker可以主动检测问题并给出相应的修复建议,提高修复效率和准确性。

  3. 兼容性优化:Tencent Tinker将不断优化对不同操作系统版本和硬件设备的兼容性,提供更广泛的支持范围。同时,Tinker将与各大移动应用框架进行集成,提供更便捷的接入和使用方式。

9.3 开源社区的贡献和发展

Tencent Tinker将继续致力于开源社区的贡献和发展,与开发者共同推动Tinker的进步和创新。

  1. 文档和示例:Tencent Tinker将继续完善和更新官方文档,提供更详尽的使用说明和示例代码。同时,鼓励开发者分享自己的经验和实践,丰富社区的资源和知识。

  2. Bug修复和功能优化:Tencent Tinker欢迎开发者提交Bug报告和功能建议,并积极响应和解决。通过与开发者的互动和反馈,Tinker将不断改进和优化,提供更稳定和可靠的热修复框架。

  3. 社区活动和交流:Tencent Tinker将组织和参与各类开源社区活动和技术交流会议,与开发者面对面地交流和分享。通过促进开放合作和知识共享,Tinker的社区将更加蓬勃和有活力。

10 结论

Tencent Tinker作为一款强大的移动应用热修复框架,在提升用户体验、降低开发成本和快速响应市场需求方面发挥着重要作用。其高效的补丁发布、实时修复能力以及与其他技术的整合,使得开发者可以快速修复应用中的问题,并在不干扰用户的情况下进行功能更新。

Tencent Tinker将持续改进和引入新功能,提升性能和安全性,并与其他技术进行整合和拓展。同时,Tinker将积极贡献于开源社区,与开发者共同推动框架的进步和创新。相信在不久的将来,Tencent Tinker将在移动应用热修复领域发挥更加重要的作用,为开发者和用户带来更好的体验和服务。

以上是关于Tencent Tinker的未来展望,展示了其持续改进和发展的方向,以及与其他技术和开源社区的合作。作为一款成熟且受欢迎的移动应用热修复框架,Tencent Tinker将继续为开发者提供稳定、高效和可靠的解决方案,助力移动应用行业的发展。

11 项目地址

https://github.com/Tencent/tinker

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

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

相关文章

卸载Ubuntu双系统

卸载Ubuntu双系统 我们卸载Ubuntu双系统&#xff0c;可能出于以下原因&#xff1a; 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足&#xff0c;直接扩区较为复杂 3、以后不再使用Ubuntu&#xff0c;清理留出空间 123无论出于哪种原因&#xff0c;我们都是要…

vue项目在public中编写一个json文件 并用http请求获取 模仿数据接口

我们前后端分离是经常存在 前端已经开发到需要接口 但后端还没开始的情况的 如果直接在js中写假数据 后面还要改不少东西 多少有点麻烦 我们可以 直接在 public 静态资源目录下创建一个json文件 这里 我取名叫 city.json 大家可以根据自己喜好给json文件命名 我这个json文件的…

LEETCODE 170. 交易逆序对的总数

class Solution { public:int reversePairs(vector<int>& record) {if(record.size()<1)return 0;//归并 递归int left,right;left0;rightrecord.size()-1;int nummergeSort(left,right,record);return num;}int mergeSort(int left,int right, vector<int>…

WordPress可以做企业官网吗?如何用wordpress建公司网站?

我们在国内看到很多个人博客网站都是使用WordPress搭建&#xff0c;但是企业官网的相对少一些&#xff0c;那么WordPress可以做企业官网吗&#xff1f;如何用wordpress建公司网站呢&#xff1f;下面boke112百科就跟大家简单说一下。 WordPress是一款免费开源的内容管理系统&am…

前端JavaScript篇之对对象与数组的解构的理解、如何提取高度嵌套的对象里的指定属性?

目录 对对象与数组的解构的理解如何提取高度嵌套的对象里的指定属性&#xff1f; 对对象与数组的解构的理解 对象与数组的解构是一种通过模式匹配的方式&#xff0c;从对象或数组中提取值&#xff0c;并将其赋给变量的过程。它可以让我们以一种简洁的方式访问和使用对象或数组…

flask基于大数据的旅游景区推荐可视化大屏系统 juj13-vue

本论文分为六个章节。 第一章&#xff0c;绪论&#xff0c;其包含课题背景及意义&#xff0c;现国内外的发展现状&#xff0c;本课题要研究的内容&#xff0c;所使用开发工具的描述等信息。 第二章&#xff0c;主要介绍了系统的开发技术。 第三章&#xff0c;先讲述功能需求分析…

留学生怎么合理使用ChatGPT ?还有哪些同类工具可以使用?

一篇篇相关于ChatGPT的文章陆陆续续铺天盖地的出现在我们面前。今天我们来看看怎么使用这个宝藏工具&#xff01; 文章主要内容为&#xff1a; 1.它是什么&#xff1f; 2.它能做什么&#xff1f; 3.作为留学生我们怎么使用它&#xff1f; 4.其他同类工具推荐 5.个人观点 一…

第 8 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…

市场复盘总结 20240202

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 昨日主题投资 连板进级率 6/30 20% 二进三…

vue全家桶之路由管理Vue-Router

一、前端路由的发展历程 1.认识前端路由 路由其实是网络工程中的一个术语&#xff1a; 在架构一个网络时&#xff0c;非常重要的两个设备就是路由器和交换机。当然&#xff0c;目前在我们生活中路由器也是越来越被大家所熟知&#xff0c;因为我们生活中都会用到路由器&#…

基于最新koa的Node.js后端API架构与MVC模式

Koa 是一个由 Express 原班人马打造的现代 Web 框架&#xff0c;用于 Node.js。它旨在提供一个更小、更富有表现力和更强大的基础&#xff0c;用于 Web 应用和 API 开发。Koa 不捆绑任何中间件&#xff0c;它提供了一个优雅的方法以组合不同的中间件来处理请求和响应。 Koa 的核…

【QT】坐标系统和坐标变换

目录 1 坐标变换函数 1.1 坐标平移 1.2 坐标旋转 1.3 缩放 1.4 状态保存与恢复 2 坐标变换绘图实例 2.1 绘制3个五角星的程序 2.2 绘制五角星的PainterPath的定义 3 视口和窗口 3.1 视口和窗口的定义与原理 3.2 视口和窗口的使用实例 4 绘图叠加的效果 1 坐标变换函数 QPainter…

链表与二叉树-数据结构

链表与二叉树-数据结构 创建叶子node节点建立二叉树三元组&#xff1a;只考虑稀疏矩阵中非0的元素&#xff0c;并且存储到一个类&#xff08;三元组&#xff09;的数组中。 创建叶子node节点 class Node{int no;Node next;public Node(int no){this.nono;} } public class Lb…

24.云原生ArgoCD高级之数据加密seale sealed

云原生专栏大纲 文章目录 数据加密之seale sealedBitnami Sealed Secrets介绍Bitnami Sealed Secrets工作流程安装sealed-secrets和kubeseal安装sealed-secrets-controller安装kubeseal通过kubeseal将sealed-secrets公钥拿出来通过kubeseal加密secrets替换kustomize下secret为…

Leetcode 热门百题斩(第二天)

介绍 针对leetcode的热门一百题&#xff0c;解决大多数实习生面试的基本算法题。通过我自己的思路和多种方法&#xff0c;供大家参考。 1.两数之和&#xff08;题号&#xff1a;1) 方法一 最先想到的就是两个for去遍历匹配。 class Solution {public int[] twoSum(int[]…

DPVS 多活部署架构部署

一、目标 利用DPVS部署一个基于OSPF/ECMP的提供HTTP服务的多活高可用的测试环境。 本次部署仅用于验证功能&#xff0c;不提供性能验证。 配置两台DPVS组成集群、两台REAL SERVER提供实际HTTP服务。 注&#xff1a;在虚拟环境里面&#xff0c;通过在一台虚拟服务器上面安装FR…

Linux - iptables 防火墙

一. 安全技术和防火墙 1.安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全…

阿里云如何找回域名,进行添加或删除?

权威域名管理介绍说明&#xff0c;包含添加域名、删除域名、找回域名、域名分组等操作介绍。 一、添加域名 非阿里云注册域名或子域名如需使用云解析DNS&#xff0c;需要通过添加域名功能&#xff0c;将主域名或子域名添加到云解析控制台&#xff0c;才可以启用域名解析服务。…

Redis -- hash哈希

马行软地易失蹄&#xff0c;人贪安逸易失志。 目录 关于Redis的hash hash命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hash计数 hincrby hincrbyfloat 小结 关于Redis的hash 几乎所有的主流编程语言都提供了哈希&#xff08;hash&a…

基于极大似然法和最小二乘法系统参数辨识matlab仿真,包含GUI界面

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 1.极大似然法系统参数辨识 2. 最小二乘法系统参数辨识 5.完整程序 1.程序功能描述 分别对比基于极大似然法的系统参数辨识以及基于最小二乘法的系统参数辨识&#xff0c;输出起参数辨识收敛…