2024现代Android开发趋势

2024现代Android开发趋势

在当今的Android开发领域,我们看到了许多令人兴奋的技术和趋势,这些技术和趋势正在改变着应用程序的开发方式和用户体验。让我们一起深入探讨2024年现代Android开发的主要方向和关键技术。

无处不在的Kotlin

Kotlin已经成为Android开发的主流语言,并且在2024年,我们迎来了Kotlin 2.0版本。Kotlin的简洁性、表现力和与Java的互操作性使其成为开发者们的首选。此外,随着Jetpack Compose的推出,Kotlin将继续扮演着至关重要的角色。

https://kotlinlang.org/docs/home.html

K2编译器是Kotlin2.0的重要组成部分,K2的加持进一步增强了Kotlin的性能及Kotlin语言的快速推广。

Jetpack Compose

Jetpack Compose是一个现代化、声明式的UI工具包,它使开发者能够以更直观、更简单的方式构建用户界面。通过使用Compose,开发者可以快速构建交互式和可定制的UI组件,提升用户体验。
Jetpack Compose 是 Android Jetpack 库的一部分,利用 Kotlin 编程语言轻松创建原生用户界面,并与其他 Android Jetpack 库(如 LiveData 和 ViewModel)集成,使构建响应式和易于维护的 Android 应用程序变得更加简单。

Jetpack Compose 的关键特性包括:

  • 使用声明式 UI 构建界面。
  • 提供可定制的小部件。
  • 轻松集成现有代码(包括旧视图系统)。
  • 实时预览功能。
  • 改进了性能表现。

https://developer.android.com/jetpack/compose
https://github.com/androidx/androidx/blob/androidx-main/compose/docs/compose-component-api-guidelines.md

Android Jetpack

Android Jetpack是一套库和工具集,旨在帮助开发者构建高质量、健壮的Android应用程序。Jetpack提供了各种组件,如ViewModel、LiveData、Room等,以支持现代化的应用程序架构和开发实践。
常用的Jetpack工具包如下:

  • ViewModel
  • Room
  • DataStore
  • WorkManager
  • Navigation
  • CameraX
  • Compose
  • Media3
  • Glance

需要进一步了解相关内容,请参考如下链接:

https://developer.android.com/jetpack

Material You / Material Design

Material You是Google推出的一种个性化设计系统,允许用户根据自己的喜好调整应用程序的外观和感觉。与传统的Material Design相比,Material You更加注重用户体验和个性化。

https://m3.material.io/
https://developer.android.com/codelabs/jetpack-compose-theming#0

Splash screens API

Splash screens API是一个新的API,用于管理应用程序的启动画面。借助这个API,开发者可以更好地控制启动过程,提升应用程序的启动体验。

https://developer.android.com/develop/ui/views/launch/splash-screen

清洁架构(Clean Architecture)

Clean Architecture是一种软件架构模式,旨在实现代码的可维护性、可测试性和可扩展性。通过将应用程序分解为清晰的层次,开发者可以更好地管理代码逻辑和业务规则。

Clean Architecture 是由 Robert C. Martin 提出的概念,通过将软件划分为不同层次来实现责任的分离。其特点包括独立于框架、可测试、独立于用户界面、独立于数据库以及独立于任何外部机构。关键规则是依赖规则,要求源代码依赖只能指向内部,内部代码不应知晓外部内容。
在 Android 中应用 Clean Architecture 分为三个层次:表现层(Presentation)、领域层(Domain)和数据层(Data)。表现层包括 Activities、Composables、Fragments、View Models 等;领域层包括 Use Cases、Entities、Repositories 等;数据层包括 Repository 实现、Mappers、DTO 等。

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

分层架构模式(Architecture Patterns for Presentation Layer)

在现代Android开发中,选择合适的架构模式对于构建可靠的应用程序至关重要。常见的架构模式包括MVP、MVVM、MVI等,开发者可以根据项目需求选择最适合的模式。
架构模式是一种高层级策略,旨在帮助设计软件架构,具有在可重用框架内解决常见架构问题的特点。
架构模式类似于设计模式,但规模更大,涉及更广泛的问题,如系统的整体结构、组件之间的关系以及数据管理方式。

https://developer.android.com/topic/architecture

依赖注入(Dependency Injection)

依赖注入是一种重要的设计模式,可以提高代码的可测试性和可维护性。在2024年的Android开发中,像Hilt、Dagger、Koin等依赖注入框架将继续发挥重要作用。

https://developer.android.com/training/dependency-injection/hilt-android
https://insert-koin.io/
https://dagger.dev/

模块化(Modularization)

模块化是一种将应用程序拆分为独立的模块或组件的方法,可以提高代码的重用性和可维护性。通过模块化设计,开发团队可以更好地协作,并实现更高效的开发流程。
模块化的好处包括:

  • 可重用性:独立的模块可以在应用程序的不同部分甚至其他应用程序中重复使用。
  • 严格的可见性控制:模块使您能够轻松控制对代码库其他部分的暴露内容。
  • 可定制交付:Play Feature Delivery 利用应用程序包的高级功能,允许您有条件地或按需交付应用程序的某些功能。
  • 可扩展性:通过独立的模块,可以添加或删除功能而不影响应用程序的其他部分。
  • 易于维护:通过将应用程序划分为具有独立功能和责任的独立模块,更容易理解和维护代码。
  • 易于测试:通过独立的模块,可以单独测试它们,从而更容易检测和修复错误。
  • 架构改进:模块化有助于改进应用程序的架构,提高代码的组织和结构。
  • 提高协作:具有独立模块,开发人员可以同时在应用程序的不同部分工作,互不干扰。
  • 构建时间:一些 Gradle 功能,如增量构建、构建缓存或并行构建,可以利用模块化来提高构建性能。

https://developer.android.com/topic/modularization

网络Network

在处理网络请求时,使用优秀的网络库是至关重要的。OkHttp、Retrofit和Ktor等网络库可以帮助开发者轻松处理网络通信,实现高效的数据交换。

https://square.github.io/okhttp/
https://square.github.io/retrofit/
https://ktor.io/

序列化Serialization

数据序列化是将数据转换为特定格式以便在不同平台之间传输的过程。Moshi、Kotlin Serialization等序列化库可以帮助开发者轻松处理数据的序列化和反序列化。

  1. Moshi 和 Kotlin Serialization 是用于 Kotlin 和 Java 的两个序列化/反序列化库,允许您将对象转换为 JSON 或其他序列化格式,反之亦然。
  2. 两者均提供了针对在移动设备和桌面应用程序中使用而优化的用户友好接口。
  3. Moshi 主要专注于 JSON 序列化,而 Kotlin Serialization 支持多种序列化格式,包括 JSON。

https://github.com/square/moshi
https://github.com/Kotlin/kotlinx.serialization

图片加载Image Loading

在应用程序中加载和显示图片是常见的需求,而优秀的图片加载库可以提高应用程序的性能和用户体验。Coil、Glide等图片加载库可以帮助开发者实现快速、流畅的图片加载功能。
图片加载库为您做了很多繁重的工作;它们处理缓存(这样您就不会多次下载图像)和网络逻辑,以下载图像并在屏幕上显示它。

https://github.com/coil-kt/coil#jetpack-compose
https://bumptech.github.io/glide/int/compose.html
https://developer.android.com/jetpack/compose/graphics/images/loading

响应式编程Reactivity / Thread Management

在处理异步操作和多线程任务时,选择合适的响应式编程和线程管理工具至关重要。协程和RxJava等工具可以帮助开发者编写简洁、高效的异步代码。

  1. Kotlin 协程在响应式编程和异步处理方面表现出色,其悬挂函数和 Flow 机制具有独特优势。
  2. 然而,在 Android 应用程序开发中,承认 RxJava 的价值是至关重要的。
  3. 尽管协程和 Flow 的使用不断增加,但 RxJava 在多个项目中仍然是一个强大且受欢迎的选择。

https://github.com/Kotlin/kotlinx.coroutines
https://github.com/ReactiveX/RxJava

本地存储Local Store

在应用程序中存储本地数据是常见的需求,而使用合适的本地存储方案可以提高数据的安全性和可靠性。除了传统的SharedPreferences外,DataStore、EncryptedSharedPreferences等新型本地存储方式也备受开发者关注。下面是SharedPreferences、Preferences DataStore及Proto DataStore三种框架特征对比:

https://developer.android.com/topic/libraries/architecture/datastore
https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences

通过深入了解并灵活运用上述技术和趋势,我们可以更好地构建现代化、高效的Android应用程序,提升用户体验并满足不断变化的市场需求。愿我们在2024年的Android开发之路上取得更大的成功和突破!

Testing 🕵🏼

在软件开发中,测试是确保产品质量的重要环节。下面是一些常用的测试框架,请根据需要详细了解。

  • JUnit 5

https://junit.org/junit5/

  • Mockk

https://mockk.io/

  • Kotest
  • Kluent
  • Turbine
  • Espresso

https://developer.android.com/training/testing/espresso

  • Robolectric
  • Maestro

UI测试 📸

Android中的截图测试涉及自动捕获应用程序中各种UI元素的屏幕截图,并将其与基准图像进行比较,以检测任何意外的视觉变化。这有助于确保应用程序在不同版本和配置下具有一致的UI外观,在开发过程的早期发现视觉回归问题。

  • Paparazzi

https://github.com/cashapp/paparazzi

  • Roborazzi

https://github.com/takahirom/roborazzi

R8 优化

R8是一种Java字节码优化器,用于优化应用程序的体积和性能。

  1. R8 是默认的编译器,将项目的 Java 字节码转换为在 Android 平台上运行的 DEX 格式。它是一个工具,帮助我们通过缩短类和属性名称、消除项目中未使用的代码和资源来混淆和减少应用程序的代码量。
  2. 可以通过查看 Android 文档了解有关收缩、混淆和优化应用程序的更多信息。此外,还可以通过 ProGuard 规则文件禁用特定任务或自定义 R8 的行为。
  3. 功能包括:代码收缩、资源收缩、混淆、优化。
  4. 第三方工具:DexGuard。

https://developer.android.com/studio/build/shrink-code

Play Feature Delivery

Google Play的应用程序提供模型称为动态交付,使用Android应用程序捆绑包为每个用户的设备配置生成和提供优化的APK文件,因此用户只下载他们运行应用程序所需的代码和资源。

Adaptive layouts自适应布局

随着不同形态的移动设备的使用增长,我们需要工具来适应不同类型屏幕的Android应用程序。因此,Android为我们提供了窗口大小类,以便以简单的方式将屏幕格式分为三大组:兼容、中等和扩展。通过这种方式,我们避免了考虑太多屏幕设计而将可能性减少到了3个组之内。
Windows Size Classes

另一个重要资源是规范布局(Canonical Layouts),这些是预定义的屏幕设计,可用于 Android 应用程序中的大多数场景,并指导我们如何将它们调整适配到大屏幕上。

https://developer.android.com/guide/topics/large-screens/support-different-screen-sizes
https://developer.android.com/courses/pathways/jetpack-compose-for-android-developers-5

本地化 🌎

本地化涉及将产品调整到满足不同地区多样化受众的需求。这包括翻译文本、调整格式和考虑文化方面。其优势包括进入全球市场、增强用户体验、提高客户满意度、在全球市场上保持竞争力以及遵守当地法规。

https://developer.android.com/training/basics/supporting-devices/languages
https://developer.android.com/guide/topics/resources/localization
https://developer.android.com/guide/topics/resources/app-languages

性能 🔋⚙️

在我们为Android开发应用程序时,我们必须确保用户体验不仅在应用程序开始时更好,而且在整个执行过程中也更好。因此,有一些工具可以帮助我们进行预防性分析和对可能影响应用程序性能的案例进行持续监控。
官方性能优化包含以下主题:

  • Benchmark
  • Baseline Profiles
  • App Startup
  • Firebase Performance Monitoring
  • JankStats库

https://developer.android.com/topic/performance

应用内更新


当用户在其设备上保持应用程序更新时,他们可以尝试新功能,并受益于性能改进和错误修复。虽然一些用户在其设备连接到非计量网络时启用后台更新,但其他用户可能需要提醒他们安装更新。应用内更新是Google Play核心库的一项功能,它提示活跃用户更新您的应用程序。

https://developer.android.com/guide/playcore/in-app-updates

应用内评论

Google Play应用内评论API允许您提示用户提交Play商店评分和评论,而无需离开您的应用程序或游戏。通常情况下,可以在用户应用程序的整个使用过程中随时触发应用内评论流程。在流程中,用户可以使用1至5星评级系统对您的应用程序进行评分,并添加可选评论。提交后,评论将发送到Play商店并最终显示。

https://developer.android.com/guide/playcore/in-app-review

确保应用程序的质量和安全性对于开发人员来说至关重要。以下是一些关键提示,可帮助您提高应用程序的用户体验和保护用户数据的安全性。

性能监测 👀

在竞争激烈的应用生态系统中,及时检测和解决问题是确保应用程序稳定性的关键。以下工具和方法可帮助您实现这一目标:

  • 利用 Google Analytics 和 Android Vitals 来识别应用程序中的问题区域。
  • 使用 Firebase Crashlytics 提供的自定义崩溃报告,深入了解问题根本原因。
  • 使用 Firebase Performance Monitoring 监控应用程序性能,及时发现并解决性能问题。

https://developer.android.com/topic/performance/vitals
https://firebase.google.com/docs/crashlytics

辅助功能


辅助功能是确保所有用户都能方便地访问和使用应用程序的重要特性。以下是一些建议,可帮助您改善应用程序的辅助功能:

  • 确保文本具有足够的对比度,并提供可调整大小的文本选项。
  • 使用大型简单的控件,并为每个 UI 元素提供描述。
  • 查看 Android 文档以获取更多关于辅助功能的指南和最佳实践。

https://developer.android.com/guide/topics/ui/accessibility

安全性 🔐

保护用户数据和应用程序安全对于建立用户信任至关重要。以下是一些安全性建议,可帮助您提高应用程序的安全性:

  • 使用凭据管理器安全地管理用户签入信息。
  • 加密敏感数据和文件,例如使用 EncryptedSharedPreferences 和 EncryptedFile。
  • 实施基于签名的权限控制,确保应用之间的安全数据共享。
  • 避免将敏感信息硬编码在应用程序中,而是将其存储在安全的位置,如 local.properties 文件中。
  • 强烈建议实施 SSL Pinning 来加强应用程序与远程服务器之间的通信安全性。
  • 考虑实施 Runtime Application Self Protection (RASP) 技术,以在运行时保护应用程序免受攻击和漏洞。

通过遵循这些建议并使用相应的工具和技术,您可以提高应用程序的质量、用户体验和安全性。

https://developer.android.com/privacy-and-security/security-tips

版本目录(Version Catalogs)


Gradle提供了一种集中管理项目依赖项的标准方法,称为版本目录;它在7.0版本中试验性地引入,并在7.4版本中正式发布。
优势:

  • 每个目录都会生成类型安全的访问器,这样您可以在 IDE 中轻松地使用自动完成来添加依赖项。
  • 所有项目都可以看到每个目录。这是一个中心位置,用于声明依赖项的版本,并确保对该版本的更改适用于每个子项目。
  • 目录可以声明依赖项捆绑包,其中包含常常一起使用的“依赖项组”。
  • 目录可以将依赖项的组和名称与其实际版本分开,并使用版本引用,从而可以在多个依赖项之间共享版本声明。

https://docs.gradle.org/current/userguide/platforms.html

日志记录器(Logger)


日志记录器是一种软件工具,用于记录程序执行的信息;重要事件、错误调试消息和其他可能对诊断问题或理解程序运行方式有用的信息。日志记录器可以配置为将消息写入不同的位置,如日志文件、控制台、数据库,或通过将消息发送到日志服务器来实现。

  • Klogging

https://klogging.io/

  • Timber

https://github.com/JakeWharton/timber

代码检查器 / 静态代码分析器(Linter / Static Code Analyzer)


代码检查器是一种用于分析程序源代码以查找代码中潜在问题或错误的编程工具。这些问题可以是语法问题、不当的代码风格、缺乏文档、安全问题等,它们可能会影响代码的质量和可维护性。

  • Android Lint

https://medium.com/swlh/what-is-android-lint-17fa0d87abb2

  • Detekt ⏫

https://detekt.dev/

  • Ktlint ⏫

https://pinterest.github.io/ktlint/

  • Konsist

https://github.com/LemonAppDev/konsist

Google Play Instant


Google Play Instant 可让原生应用和游戏在运行 Android 5.0(API 级别 21)或更高版本的设备上启动,而无需安装。您可以使用 Android Studio 构建这些类型的体验,称为即时应用和即时游戏。通过允许用户运行即时应用或即时游戏,即提供即时体验,可以提高您的应用或游戏的发现度,帮助吸引更多活跃用户或安装量。

https://developer.android.com/topic/google-play-instant/overview

新设计中心(New Design Hub)


Android 团队提供了一个新的设计中心,帮助创建美观、现代的 Android 应用程序,这是一个集中了解多种形态设计的地方。

http://d.android.com/design/ui

人工智能(AI)


由谷歌开发的两款最先进的人工智能(AI)模型Gemini和PalM 2,正准备改变 Android 应用程序开发的格局。这些模型提供了一系列优势,将推动应用程序的效率、用户体验和创新。

  • Gemini
  • PalM 2

https://ai.google.dev/
https://ai.google/discover/palm2/

AI 编码助手工具

Studio Bot

Studio Bot 是您在 Android 开发中的编码伴侣。它是在 Android Studio 中进行对话式体验,通过回答 Android 开发问题帮助您提高生产力。它由人工智能驱动,可以理解自然语言,因此您可以用简单的英语提出开发问题。Studio Bot 可以帮助 Android 开发人员生成代码,找到相关资源,学习最佳实践,并节省时间。

https://developer.android.com/studio/preview/studio-bot

GitHub Copilot

GitHub Copilot 是一款 AI 对编程助手。您可以使用 GitHub Copilot 在编辑器内获取整行或整个函数的建议。

https://github.com/features/copilot

Amazon CodeWhisperer

这是亚马逊提供的一项服务,根据您当前代码的上下文生成代码建议。它可以帮助您编写更高效和安全的代码,发现新的 API 和工具。

https://aws.amazon.com/codewhisperer/

Kotlin 跨平台 🖥 📱⌚️ 🚀

最后,同样重要的是,今年的重要发现是 Kotlin 跨平台 🎉。它成为跨平台应用程序开发领域的一个强大竞争者。虽然我们的主要关注点可能在于 Android 应用程序开发,但 Kotlin 跨平台为我们提供了灵活性,使我们能够利用 KMP 框架打造完全原生的 Android 应用程序。这一战略举措不仅为我们的项目未来保驾护航,还为我们提供了顺利过渡到多平台环境所需的基础设施,如果我们选择追求的话。🚀

(Kotlin Multiplatform) https://www.jetbrains.com/kotlin-multiplatform/

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

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

相关文章

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有

202435读书笔记|《半小时漫画中国史》——读点经济学与历史,生活更美好,趣味烧脑土地制度、商鞅变法、华丽丽的丝绸之路这里都有 1. 土地政策、度量衡及税收2. 商鞅变法3. 西汉经济4. 西汉盐铁大辩论5. 西汉丝绸之路 《半小时漫画中国史:经济…

吸猫毛空气净化器哪个好?推荐除猫毛效果好宠物空气净化器品牌

当下有越来越多的家庭选择养宠物!尽管家里变得更加温馨,但养宠可能会带来异味和空气中的毛发增多可能会带来健康问题,这是一个大问题! 不想家里弥漫着异味,特别是来自宠物便便的味道,所以需要一款能够处理…

打印100-200之间的素数

#include <stdio.h>int prime(int n){int i 1;for(i 2;i < n;i){if(n % i 0)return 0;}return 1; } //打印100-200之间的素数 int main() {int n 0;int j 100;for(j 100;j < 200;j){if(prime(j)){printf("%d是素数\n",j);n;}}printf("100-200…

【center-loss 中心损失函数】 原理及程序解释(更新中)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码&#xff08;center_loss.py&#xff09;原理程序解释 代码运用 如何梯度更新首先了解一下基本的梯度下降算法然后 补充&#xff1a;外围知识模型 前言 学习一下&#xff1a; 中心损失函…

【刷题】位运算

消失的两个数字 消失的两个数字 “单身狗”进阶版思路 class Solution { public:vector<int> missingTwo(vector<int>& nums) {int ret 0;int n nums.size();for(int i 0; i < n; i){ret ^ (nums[i] ^ i);}ret ^ (n ^ (n 1) ^ (n 2));// 按位异或的…

94. 递归实现排列型枚举 刷题笔记

思路 依次枚举 每个位置用哪个数字 要求按照字典序最小来输出 而每次搜索下一层时i都是从1开始 也就是说 如果有小的数可以填上 那么该方案会填上这个数字 例如 当n等于3 第一次搜索 1 2 3输出后返回 返回后此时i3 第二个位置填3 1 3 2 输出后返回 此时返回到第一层…

如何用Python检查时间序列数据是否平稳?

时间序列数据通常以其时间性质为特征。这种时间性质为数据增加了趋势或季节性&#xff0c;使其与时间序列分析和预测兼容。如果时间序列数据不随时间变化或没有时间结构&#xff0c;则称其为静态数据。因此&#xff0c;检查数据是否平稳是非常必要的。在时间序列预测中&#xf…

基于粒子群优化算法的图象聚类识别matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于粒子群优化算法的图象聚类识别。通过PSO优化方法&#xff0c;将数字图片的特征进行聚类&#xff0c;从而识别出数字0~9. 2.测试软件版本以及运行结果展示 M…

智能咖啡厅助手:人形机器人 +融合大模型,行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛)

智能咖啡厅助手&#xff1a;人形机器人 融合大模型&#xff0c;行为驱动的智能咖啡厅机器人(机器人大模型与具身智能挑战赛) “机器人大模型与具身智能挑战赛”的参赛作品。的目标是结合前沿的大模型技术和具身智能技术&#xff0c;开发能在模拟的咖啡厅场景中承担服务员角色并…

Flutter中的三棵树

Widget Tree&#xff1a; 页面配置信息。 Element Tree&#xff1a; Widget tree的实例化对象&#xff0c;创建出renderObject&#xff0c;并关联到element.renderobject属性上&#xff0c;最后完成RenderObject Tree的创建。 RenderObject Tree&#xff1a;完成布局和图层绘制…

自测-1 打印沙漏

文章预览&#xff1a; 题目算法代码 题目 算法 以前做过这个&#xff0c;那次是c语言写的&#xff0c;一点一点处理一层一层完成&#xff0c;这次我换了一种语言用了另一种思想使用递归去写&#xff0c;还是我们要先求出应该有多少层这个很容易&#xff0c;中间输出部分我们算…

STM32标准库——(14)I2C通信协议、MPU6050简介

1.I2C通信 I2C 通讯协议(Inter&#xff0d;Integrated Circuit)是由Phiilps公司开发的&#xff0c;由于它引脚少&#xff0c;硬件实现简单&#xff0c;可扩展性强&#xff0c; 不需要USART、CAN等通讯协议的外部收发设备&#xff0c;现在被广泛地使用在系统内多个集成电路(IC)间…

睡眠问题大揭秘:中医如何轻松解决?

睡眠问题是现代社会普遍存在的难题&#xff0c;它的影响不仅仅局限于个体的疲惫和神经紧张&#xff0c;更深远的是对整体健康的长期威胁。根据世界卫生组织的数据&#xff0c;全球约有三分之一的人口遭受着不同程度的睡眠问题&#xff0c;其中包括失眠、入睡困难、多梦、易醒等…

flutter旋转动画,Android彻底组件化方案实践方法

Android基础 & 常用 针对Android基础&常用知识&#xff0c;我认为对于初级开发者来说&#xff0c;按照优先级最主要的知识点主要包括&#xff1a;四大组件、布局使用、多线程 & 动画&#xff1b;具体介绍如下&#xff1a; 2. Android进阶 针对Android进阶知识&am…

幸运星数(爷再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

NVMe开发——PCIe复位

简介 PCIe中有4种复位机制&#xff0c;早期的3种被称为传统复位(Conventional Reset)。传统复位中的前2种又称为基本复位(Fundamental Resets)&#xff0c;分别为冷复位(Cold Reset)&#xff0c;暖复位(Warm Reset)。第3种复位为热复位(Hot Reset)。第4种复位被称为功能级复位…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

面经 | Java创建线程的三种方式

利用JUC包创建线程的三种方式&#xff1a; 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章&#xff0c;文章中引入注目的是利用条件限制条件&#xff0c;不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题&#xff0c;其实如果单独去使用一些关键词去搜索&a…

若依前后端分离版本-自动生成代码

听说若依挺好用的&#xff0c;所以来学习一下。 1.下载项目&#xff0c;配置redis,配置mysql,安装npm&#xff08;版本一定要低于16&#xff09; 2.执行sql脚本数据库相关信息 3.启动后端ruoyi-admin的ruoyiApplication 4启动前端 选择terminal 进入ruoyi-ui&#xff0c;执…