Kotlin MultiPlatform:构建跨平台应用的未来

Kotlin MultiPlatform:构建跨平台应用的未来

1 引言

1.1 Kotlin MultiPlatform简介

Kotlin MultiPlatform(简称KMP)是一种由JetBrains开发的跨平台开发解决方案,它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建适用于多个平台的应用程序,包括移动应用、后端服务和嵌入式系统等。KMP提供了共享代码的功能,同时也允许开发者编写平台特定的代码以满足不同平台的需求。

1.2 跨平台开发的需求和挑战

在当今快节奏的软件开发环境中,跨平台开发变得越来越重要。开发者希望能够通过最小的工作量在多个平台上发布他们的应用程序,并保持一致的用户体验和功能。然而,跨平台开发面临着一些挑战,包括:

  1. 平台差异性:不同的平台具有独特的API、界面和架构,开发者需要处理这些差异性并确保代码在各个平台上正常运行。

  2. 开发效率:为多个平台编写和维护不同的代码库可能会导致重复劳动和开发效率低下。

  3. 集成难度:跨平台开发需要在不同的开发环境和工具之间进行集成,这可能会增加复杂性和学习曲线。

Kotlin MultiPlatform通过提供一种统一的开发语言和共享代码的机制,帮助开发者克服了这些挑战,并为跨平台开发提供了一种灵活而高效的解决方案。

以下是一个示例代码,展示了Kotlin MultiPlatform的基本用法:

// 共享模块中的公共代码
expect fun platformSpecificFunction(): String

fun commonFunction(): String {
    return "This is a common function."
}

// Android平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the Android implementation."
}

// iOS平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the iOS implementation."
}

// 调用共享代码
fun main() {
    println(commonFunction())
    println(platformSpecificFunction())
}

在上面的示例中,我们定义了一个共享模块中的commonFunction()函数,它在所有平台上都是通用的。然后,我们通过expectactual关键字分别在Android和iOS平台上实现了platformSpecificFunction()函数,这个函数根据不同的平台返回不同的字符串。最后,在main()函数中,我们调用了commonFunction()platformSpecificFunction(),并打印出结果。

通过使用Kotlin MultiPlatform,开发者可以将通用的业务逻辑和功能放在共享模块中,而将平台特定的实现放在各个平台的代码中。这样一来,开发者可以实现代码的重用性,并根据不同平台的需求进行定制化开发,从而加快开发速度并提高效率。

总结起来,Kotlin MultiPlatform是一种强大的跨平台开发工具,它通过提供共享代码和平台特定的实现,帮助开发者构建适用于多个平台的应用程序。它解决了跨平台开发中面临的挑战,并为开发者提供了更高效和灵活的开发方式。

2. Kotlin MultiPlatform的基本概念

2.1 Kotlin语言简介

Kotlin是一种现代化的、静态类型的编程语言,它由JetBrains开发并于2011年首次公开发布。Kotlin语言旨在解决Java语言的一些痛点,并提供了许多新的功能和语法糖,使得开发者可以更轻松地编写高效、可维护的代码。

Kotlin具有以下特点:

  1. 与Java互操作性:Kotlin与Java语言高度兼容,可以无缝地与Java代码进行互操作,并且可以使用Java类库和框架。

  2. 简洁优雅:Kotlin简化了许多繁琐的Java语法,例如自动类型推断、空安全、扩展函数等,使得代码更简洁、易读、易于理解。

  3. 面向对象和函数式编程:Kotlin既支持面向对象编程的特性,如类、接口、继承等,也支持函数式编程的特性,如高阶函数、Lambda表达式等。

  4. 可空性:Kotlin引入了可空类型的概念,可以在编译时检测空指针异常,并提供了一套丰富的处理可空类型的语法。

2.2 Kotlin MultiPlatform的设计思想和原理

Kotlin MultiPlatform(KMP)旨在通过共享代码来简化跨平台开发,并为不同平台提供了灵活的实现机制。它基于Kotlin语言的特性和现有的Java虚拟机(JVM)、JavaScript引擎和原生编译器等技术,实现了跨平台共享代码的能力。

KMP的设计思想和原理如下:

  1. 共享模块:KMP将可共享的代码放在一个或多个共享模块中,这些模块包含了通用的业务逻辑和功能,在各个平台上都可以使用。共享模块的代码可以包含类、接口、函数和属性等。

  2. 平台特定的实现:对于每个目标平台(如JVM、JavaScript或原生平台),KMP允许开发者提供平台特定的实现。这些实现通过使用expectactual关键字来声明,并分别在共享模块和平台特定的代码中定义。

  3. 编译和构建:KMP使用Gradle作为构建工具,使用Kotlin编译器来编译共享模块和平台特定的代码。开发者可以使用常规的Gradle任务来构建和运行KMP项目。

  4. 跨平台调用:在共享模块中,可以调用平台特定的实现。这样,开发者可以根据需要在不同平台上使用对应的实现逻辑。

以下是一个示例代码,演示了KMP的基本原理:

// 共享模块中的公共代码
expect fun platformSpecificFunction(): String

fun commonFunction(): String {
    return "This is a common function."
}

// Android平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the Android implementation."
}

// iOS平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the iOS implementation."
}

// 调用共享代码
fun main() {
    println(commonFunction())
    println(platformSpecificFunction())
}

在上述示例中,我们定义了一个共享模块中的commonFunction()函数,它在所有平台上都是通用的。使用expectactual关键字,我们分别在Android和iOS平台上实现了platformSpecificFunction()函数,该函数根据不同的平台返回不同的字符串。在main()函数中,我们调用了commonFunction()platformSpecificFunction(),并打印出结果。

通过使用Kotlin MultiPlatform,开发者可以利用共享代码和平台特定的实现,轻松地构建适用于多个平台的应用程序。这样可以提高开发效率、减少代码重复,并保持一致的用户体验和功能。

3. Kotlin MultiPlatform的优势

Kotlin MultiPlatform(KMP)是一种跨平台开发解决方案,它提供了许多优势和便利,使得开发者能够更加高效地构建适用于多个平台的应用程序。以下是KMP的几个主要优势:

3.1 代码重用性和共享模块

Kotlin MultiPlatform允许开发者将通用的业务逻辑和功能放在共享模块中,从而实现代码的重用。共享模块中的代码可以在不同平台上使用,这意味着开发者只需要编写一次代码,就可以在多个平台上运行。

共享模块中的代码可以包含类、接口、函数和属性等。开发者可以使用Kotlin语言的特性来编写高效、可维护的代码,并利用KMP提供的工具和框架来管理共享模块的依赖关系和构建过程。

以下是一个简单的示例,展示了如何在共享模块中定义和使用共享代码:

// 共享模块中的公共代码
expect fun platformSpecificFunction(): String

fun commonFunction(): String {
    return "This is a common function."
}

// Android平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the Android implementation."
}

// iOS平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the iOS implementation."
}

// 调用共享代码
fun main() {
    println(commonFunction())
    println(platformSpecificFunction())
}

在上述示例中,我们定义了一个共享模块中的commonFunction()函数,它在所有平台上都是通用的。通过使用expectactual关键字,在Android和iOS平台上分别实现了platformSpecificFunction()函数,该函数根据不同的平台返回不同的字符串。通过这种方式,我们可以通过共享模块的方式实现代码重用,并在不同平台上调用共享代码。

3.2 平台特定的UI和逻辑处理

尽管KMP提供了代码重用的能力,但在实际应用中,不同平台往往需要具有特定的用户界面(UI)和逻辑处理。KMP允许开发者为每个平台提供平台特定的实现,以满足不同平台的需求。

通过使用expectactual关键字,开发者可以在共享模块和平台特定的代码中分别定义和实现功能。这样,即使在跨平台开发过程中需要处理不同平台的特性和限制,开发者仍然可以保持一致的代码结构和逻辑。

例如,在Android平台上,我们可以使用Android Studio和Android框架来设计和实现特定的UI界面;而在iOS平台上,我们可以使用Xcode和iOS框架来实现对应的UI界面。通过KMP的灵活机制,我们可以在共享模块中调用平台特定的实现,并根据需要进行适配和优化。

3.3 快速迭代和开发效率提升

KMP的另一个优势是快速迭代和开发效率的提升。通过共享代码和平台特定的实现,KMP使得开发者可以更加高效地进行代码编写、测试和调试。

由于KMP基于Kotlin语言和现有的开发工具,开发者可以使用熟悉的开发环境和工作流程进行跨平台开发。这样可以减少学习成本和切换开发环境的复杂性,提高开发效率。

此外,KMP还提供了一些工具和框架,用于管理依赖关系、构建和部署应用程序。开发者可以使用常规的构建工具(如Gradle)和版本控制系统(如Git)来管理KMP项目,并支持持续集成和自动化测试等开发实践。这些功能可以帮助开发者更好地组织和管理代码,加速开发周期。

总之,Kotlin MultiPlatform是一种强大的跨平台开发解决方案,它具有代码重用性和共享模块、平台特定的UI和逻辑处理以及快速迭代和开发效率提升等优势。通过使用KMP,开发者可以更加高效地构建适用于多个平台的应用程序,并减少代码重复和维护成本。无论是在移动端、Web端还是桌面端的开发中,KMP都是一个值得考虑的选择。

4. Kotlin MultiPlatform的应用场景

4.1 移动应用开发

移动应用开发是Kotlin MultiPlatform的一个主要应用场景。通过KMP,开发者可以同时为Android和iOS平台开发应用程序,实现代码的重用和共享。

  1. Android和iOS平台的代码共享
    KMP允许开发者将通用的业务逻辑和功能放在共享模块中,从而避免在不同平台上重复编写相同的代码。开发者可以使用Kotlin语言的特性来编写跨平台的代码,并通过共享模块在Android和iOS平台上使用。

例如,我们可以在共享模块中定义网络请求和数据处理的功能,并在Android和iOS平台上调用这些功能。这样,我们只需要编写一次代码,就可以在多个平台上运行应用程序。

以下是一个简单示例,展示了如何在共享模块中定义和使用共享代码:

// 共享模块中的公共代码
expect fun platformSpecificFunction(): String

fun commonFunction(): String {
    return "This is a common function."
}

// Android平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the Android implementation."
}

// iOS平台的实现
actual fun platformSpecificFunction(): String {
    return "This is the iOS implementation."
}

// 调用共享代码
fun main() {
    println(commonFunction())
    println(platformSpecificFunction())
}

在上述示例中,我们定义了一个共享模块中的commonFunction()函数,该函数在所有平台上都是通用的。通过使用expectactual关键字,在Android和iOS平台上分别实现了platformSpecificFunction()函数,该函数根据不同的平台返回不同的字符串。通过这种方式,我们可以在共享模块中实现代码重用,并在不同平台上调用共享代码。

  1. UI适配和平台差异处理
    尽管KMP提供了代码重用的能力,但在移动应用开发中,不同平台往往需要具有特定的用户界面(UI)和逻辑处理。KMP允许开发者为每个平台提供平台特定的实现,以满足不同平台的需求。

通过使用expectactual关键字,开发者可以在共享模块和平台特定的代码中分别定义和实现功能。这样,即使在跨平台开发过程中需要处理不同平台的特性和限制,开发者仍然可以保持一致的代码结构和逻辑。

例如,在Android平台上,我们可以使用Android Studio和Android框架来设计和实现特定的UI界面;而在iOS平台上,我们可以使用Xcode和iOS框架来实现对应的UI界面。通过KMP的灵活机制,我们可以在共享模块中调用平台特定的实现,并根据需要进行适配和优化。

4.2 后端开发

KMP也适用于后端开发,特别是构建跨平台的API和服务。通过使用KMP,开发者可以共享业务逻辑和数据模型,实现后端代码的重用和一致性。

  1. 构建跨平台的API和服务
    KMP允许开发者在共享模块中定义和实现跨平台的API和服务。这些API和服务可以处理不同平台的请求和响应,并提供统一的接口和功能。

例如,在共享模块中,我们可以定义一个处理用户认证的API,并在后端服务器上实现该API的具体逻辑。无论是从Android、iOS还是其他平台进行请求,后端服务器都可以使用共享模块中的代码来处理请求,并返回一致的响应。

  1. 共享业务逻辑和数据模型
    KMP还允许开发者在共享模块中定义和实现通用的业务逻辑和数据模型。这些业务逻辑和数据模型可以用于不同平台的后端代码,从而实现代码的重用和一致性。

例如,在共享模块中,我们可以定义一个用户模型和一些常见的业务逻辑,如用户验证、数据加密等。这样,在后端开发中,我们可以直接使用共享模块中的代码来操作用户数据和处理业务逻辑,而无需重复编写相同的代码。

4.3 IoT和嵌入式系统

KMP也适用于IoT和嵌入式系统的开发。通过使用KMP,开发者可以实现跨设备和平台的硬件驱动开发,并共享通信协议和业务逻辑。

  1. 跨设备和平台的硬件驱动开发
    KMP允许开发者在共享模块中定义和实现通用的硬件驱动代码。这些硬件驱动代码可以在不同的设备和平台上使用,实现跨设备和平台的兼容性。

例如,在共享模块中,我们可以定义一个处理传感器数据的驱动程序,并在不同的设备上实现该驱动程序的具体逻辑。这样,我们只需要编写一次驱动代码,就可以在多个设备和平台上使用。

  1. 共享通信协议和业务逻辑
    KMP还允许开发者在共享模块中定义和实现共享的通信协议和业务逻辑。这些通信协议和业务逻辑可以用于不同设备和平台之间的通信和数据处理。

例如,在共享模块中,我们可以定义一个处理设备之间通信的协议,并在不同的设备上实现该协议的具体逻辑。这样,无论是在嵌入式系统还是在IoT场景中,不同设备之间可以使用共享模块中的代码进行通信和数据处理。

总之,Kotlin MultiPlatform适用于多种应用场景,包括移动应用开发、后端开发以及IoT和嵌入式系统开发。通过KMP,开发者可以实现代码的重用和一致性,提高开发效率和维护性。无论是在移动端、后端还是物联网领域,KMP都是一个强大的工具,值得开发者们进一步探索和应用。

5. Kotlin MultiPlatform的实践经验和案例研究

5.1 成功的跨平台应用案例分享

Kotlin MultiPlatform(KMP)已经被广泛应用于各种跨平台应用的开发中。以下是一些成功的跨平台应用案例,展示了KMP的实际应用价值。

  1. Square的Kotlin MultiPlatform项目
    Square是一家知名的科技公司,他们使用KMP来开发多个跨平台的应用程序。其中最著名的是他们的Kotlin MultiPlatform项目,该项目允许开发者使用KMP来构建在Android、iOS和Web上运行的应用程序。通过使用KMP,Square能够实现代码的重用,并提供一致的用户体验。

  2. JetBrains的Kotlin Native项目
    JetBrains是Kotlin语言的创造者和主要开发者,他们自己也在使用KMP来开发多个跨平台应用。特别是他们的Kotlin Native项目,该项目允许开发者使用KMP来构建原生的桌面应用程序。这使得开发者可以使用Kotlin语言进行桌面应用开发,并将代码共享到其他平台。

5.2 开发团队的经验教训和最佳实践

在实践中,开发团队积累了一些经验教训和最佳实践,以确保KMP项目的成功和高效开发。

  1. 精心设计共享模块
    共享模块是KMP项目的核心,其中包含了可在不同平台上使用的共享代码。为了确保共享模块的稳定性和一致性,开发团队应该精心设计共享模块的API和功能,避免过度依赖平台特定的功能和限制。

  2. 灵活处理平台差异
    尽管KMP提供了代码重用的能力,但不同平台往往具有特定的特性和限制。开发团队需要灵活地处理平台差异,并为每个平台提供特定的实现。通过使用expectactual关键字,开发团队可以在共享模块和平台特定的代码中分别定义和实现功能。

  3. 测试和调试跨平台应用
    跨平台应用的测试和调试是一个挑战,因为需要同时考虑多个平台的差异。开发团队应该建立完善的测试和调试策略,包括编写针对不同平台的单元测试和集成测试,并使用适当的工具和技术进行调试。

  4. 持续学习和分享经验
    KMP是一个相对新的技术,开发团队应该保持持续学习和分享经验的态度。团队成员可以参加KMP相关的培训和研讨会,与其他开发者交流经验,并积极参与社区讨论和贡献。

总之,Kotlin MultiPlatform已经在各种跨平台应用中取得了成功,并受到许多开发团队的青睐。通过精心设计共享模块、灵活处理平台差异、测试和调试跨平台应用以及持续学习和分享经验,开发团队可以更好地利用KMP的优势,实现高效的跨平台开发。随着KMP技术的不断发展和完善,我们可以期待更多创新的跨平台应用的出现。

6. Kotlin MultiPlatform的未来展望

6.1 Kotlin MultiPlatform与其他跨平台开发框架的比较

Kotlin MultiPlatform(KMP)是一种新兴的跨平台开发框架,它的出现在一定程度上填补了跨平台开发领域的空白。与其他常见的跨平台开发框架相比,KMP具有以下优势:

  1. 更好的性能和稳定性:KMP使用原生代码实现跨平台开发,可以获得更好的性能和稳定性。

  2. 更好的开发体验:KMP提供了一致的API和工具链,使得开发者可以在不同平台上使用相同的工具和语言进行开发。

  3. 更好的代码重用性:KMP支持共享代码模块,可以在不同平台上重用相同的代码,减少了开发成本和周期。

  4. 更好的生态系统:KMP得到了Kotlin社区和JetBrains公司的支持,拥有庞大的用户群体和丰富的库和工具。

6.2 Kotlin MultiPlatform在技术和生态方面的发展趋势

在未来,Kotlin MultiPlatform在技术和生态方面将继续发展和完善。以下是一些可能的发展趋势:

  1. 更好的平台支持:KMP将会支持更多的平台,包括桌面、服务器、嵌入式等领域。

  2. 更好的工具支持:KMP将会提供更好的开发工具和集成环境,包括编辑器、调试器和构建工具等。

  3. 更好的生态系统:KMP将会拥有更丰富的库和工具,以满足不同应用领域的需求。

  4. 更好的性能和稳定性:KMP将会优化底层实现,提高性能和稳定性。

7. 结论

Kotlin MultiPlatform是一种新兴的跨平台开发框架,具有良好的性能、稳定性和开发体验,可以帮助开发者快速开发跨平台应用。随着KMP技术的不断发展和完善,我们可以期待更多创新的跨平台应用的出现,并将KMP作为一种重要的跨平台开发框架。

跨平台开发已经成为软件开发的一个重要趋势,可以帮助开发者更快、更好、更便捷地开发应用。我们鼓励开发者尝试和探索跨平台开发的可能性,学习和使用Kotlin MultiPlatform等跨平台开发框架,为未来的跨平台应用开发做好准备。

8. 参考链接及资源

以下是一些参考资料和资源,供您进一步了解和深入学习:

  1. Kotlin官方网站: Kotlin官方网站是一个全面介绍Kotlin语言和相关工具的资源中心,包括Kotlin MultiPlatform的文档、教程和示例代码等。您可以在官方网站上找到最新的KMP资料和开发者指南。

    网站链接:https://kotlinlang.org/

  2. Kotlin MultiPlatform文档: Kotlin官方提供了专门的文档,详细介绍了Kotlin MultiPlatform的概念、原理和用法,以及使用KMP进行跨平台开发的最佳实践。

    文档链接:https://kotlinlang.org/docs/reference/multiplatform.html

  3. Kotlin MultiPlatform示例项目: 官方提供了一些示例项目,涵盖了不同平台上的KMP开发案例,可以帮助您更好地理解和应用Kotlin MultiPlatform。

    示例链接:https://github.com/Kotlin/kmm-samples

  4. Kotlin论坛和社区: Kotlin有一个活跃的开发者社区,您可以在论坛上与其他开发者交流、分享经验和寻求帮助。论坛是一个宝贵的资源,可以获取到关于KMP的最新动态、问题解答和技术建议。

    论坛链接:https://discuss.kotlinlang.org/c/kotlin-multiplatform

  5. Kotlin MultiPlatform博客: Kotlin官方博客经常发布关于KMP的最新动态、案例分析和技术文章。阅读博客可以帮助您了解KMP的最新进展和应用场景。

    博客链接:https://blog.jetbrains.com/kotlin/

  6. 第三方教程和文章: 在网络上有很多第三方开发者撰写的Kotlin MultiPlatform教程和文章,提供了更多的学习资源和实用技巧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ELK日志解决方案

ELK日志解决方案 ELK套件日志系统应该是Elasticsearch使用最广泛的场景之一了,Elasticsearch支持海量数据的存储和查询,特别适合日志搜索场景。广泛使用的ELK套件(Elasticsearch、Logstash、Kibana)是日志系统最经典的案例,使用Logstash和Be…

力扣hot100 最小栈 变种栈

Problem: 155. 最小栈 文章目录 思路💖 Stack 自定义 Node🍻 Code 思路 👩‍🏫 甜姨 💖 Stack 自定义 Node 时间复杂度: O ( 1 ) O(1) O(1) 空间复杂度: O ( n ) O(n) O(n) 🍻 Code class MinS…

基于Matlab/Simulink直驱式风电储能制氢仿真模型

接着还是以直驱式风电为DG中的研究对象,上篇博客考虑的风电并网惯性的问题,这边博客主要讨论功率消纳的问题。 考虑到风速是随机变化的,导致风电输出功率的波动性和间歇性问题突出;随着其应用规模的不断扩大以及风电在电网中渗透率…

【无标题】Gateway API 实践之(五)FSM Gateway 的会话保持功能

网关的会话保持功能是一种网络技术,旨在确保用户的连续请求在一段时间内被定向到同一台后端服务器。这种功能在需要保持用户状态或进行连续交互的场景中特别重要,例如在维护在线购物车、保持用户登录状态或处理多步骤事务时。 会话保持通过提供一致的用…

数据结构总结

数据结构总结 数据结构系列的文章从基本数据类型到数据结构,涵盖整型、布尔值、字符串、列表、元组、字典、集合、堆、栈、链表、树和图,以及队列和环等相关内容。 这里再补充一点:树和图都有更高阶的“玩法”,那就是加权——为每…

(Java企业 / 公司项目)微服务Sentinel限流如何使用?

1. Sentinel限流降级: 一个接口一个方法流量大限制流量,有些接口流量通过了有的没有通过所以就出现了降级操作 2. Sentinel熔断降级:A调用B B自身原因响应不稳定等,A觉得不稳定所以就断开就像保险丝一样 3. Sentinel nacos组合&…

Python魔法函数和迭代器

文章目录 引入魔法函数 和for循环原理iter和next函数 刷完这60个标准库模块,成为Python骨灰级玩家 引入 每个Pythoner对for...in这种循环都很熟悉,其使用方法如下 for i in [1,2,3,4,5]:print(i)输出如下 1 2 3 4 5 1\\2\\3\\4\\5 12345 上述代码非常…

未发表!基于主从博弈的多主体微网/综合能源系统利益分摊与能量管理程序代码!

适用平台:MatlabYalmipCplex 程序首先建立了综合能源运营商、新能源用户、电动汽车充电商的多主体园区,分析了三种市场交易主体的属性和市场交易机制。其次建立基于主从博弈的三方市场主体能量管理与收益分摊方案,利用改进粒子群算法进行求解…

【GitHub项目推荐--十六进制编辑器】【转载】

一款名为 ImHex 的十六进制编辑器获得了 15.3k 的 Star。十六进制编辑器可以让你以十六进制的形式查看或编辑文件的二进制数据,并用较为友好的界面来编辑二进制数据,和常见的十六进制编辑器 GNOME Hex Editor 等不一样,ImHex 功能非常强大&am…

HTML5和CSS3的新特性

HTML5的新特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等 1&#xff0c;HTML5新增的语义化标签 <header> 头部标签 <nav> 导航标签 <article> …

AtCoder Beginner Contest 338D - Island Tour【枚举】

原题链接&#xff1a;https://atcoder.jp/contests/abc338/tasks/abc338_d Time Limit: 2 sec / Memory Limit: 1024 MB Score: 425 points 问题陈述 AtCoder 群岛由 N 座岛屿组成&#xff0c;这些岛屿由 N 座桥梁连接。这些岛屿的编号从1到N&#xff0c;i(1≤i≤N−1)桥双…

Qt WebEngine模块使用(开发环境安装和程序开发)

一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎&#xff0c;可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML&#xff0c;XHTML和SVG文档的C 类和QML类型&#xff…

(南京观海微电子)——OLED生产与技术

一、OLED的分类 以下是几种OLED&#xff1a;被动矩阵OLED、 主动矩阵OLED、透明OLED、顶部发光OLED、可折叠OLED、白光OLED等。 每一种OLED都有其独特的用途。接下来&#xff0c;我们会逐一讨论这几种OLED。首先是被动矩阵和主动矩阵OLED。 被动矩阵OLED(PMOLED) 被动矩阵OLED结…

【新书推荐】3.6 enum枚举类型

本节必须掌握的知识点&#xff1a; 示例十一 代码分析 汇编解析 3.6.1 示例十一 enum定义枚举类型&#xff0c;它本质是一种整数类型&#xff08;等同int&#xff09;。所谓枚举就是一一列举的意思。在实际应用中&#xff0c;一个星期有七天&#xff0c;一年有十二个月等。如果…

java 基础学习1

目录 一.注释 二.关键字 三.字面量 四.变量和标识符 五.键盘录入 六.运算符 一.注释 1.单行注释&#xff1a;//注释信息 2.多行注释&#xff1a;/* 注释信息*/ 3.文档注释&#xff1a;/** 注释信息*/ 注:文档注释暂时用不上 二.关键字 关键字: 被Java赋予了特定…

AcWing 1015.摘花生(DP路线问题)(图解)

[路线问题] Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。 地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经过一株花生苗就能摘走该它上面所…

obsidian阅读pdf和文献——与zotero连用

参考&#xff1a; 【基于Obsidian的pdf阅读、标注&#xff0c;构建笔记思维导图&#xff0c;实现笔记标签化、碎片化&#xff0c;便于检索和跳转】 工作流&#xff1a;如何在Obsidian中阅读PDF - Eleven的文章 - 知乎 https://zhuanlan.zhihu.com/p/409627700 操作步骤 基于O…

简单了解AJAX

文章目录 1、什么是AJAX2、AJAX快速入门3、Axios异步框架3.1、Axios 快速入门3.2、Axios 请求方式别名 1、什么是AJAX 概念&#xff1a;AJAX(Asynchronous JavaScript And XML)&#xff1a;异步的 JavaScript 和 XML AJAX作用&#xff1a; 与服务器进行数据交换&#xff1a;通…

2024獬豸杯完整Writeup

文章目录 手机手机基本信息- 1、IOS手机备份包是什么时候开始备份的。&#xff08;标准格式&#xff1a;2024-01-20.12:12:12)手机基本信息- 2、请分析&#xff0c;该手机共下载了几款即时通讯工具。&#xff08;标准格式&#xff1a;阿拉伯数字&#xff09;手机基本信息- 3、手…

go 实现暴力破解数独

一切罪恶的来源是昨晚睡前玩了一把数独&#xff0c;找虐的选了个最难的模式&#xff0c;做了一个多小时才做完&#xff0c;然后就睡不着了..........程序员不能受这委屈&#xff0c;今天咋样也得把这玩意儿破解了 破解思路&#xff08;暴力破解加深度遍历&#xff09; 把数独…