我用AI学Android Jetpack Compose之入门篇(2)

news2025/1/7 19:54:54

我跑成功了第一个Compose应用,但我还是有很多疑问,请人工智能来解释一下吧。答案来自 通义千问

文章目录

  • 1.请解释一下Compose项目的目录结构。
      • 根目录
      • 模块目录(通常是`app`)
        • `app/build.gradle`
        • `app/src/main`
        • `app/src/main/ui`
        • `app/src/main/composables`
        • `app/src/debug`
        • `app/src/release`
      • 测试相关目录
      • 其他文件和目录
      • 示例目录结构
  • 2.解释一下下列代码,加上必要的注释
      • 代码解释
  • 3.这段代码我也不理解,帮我加上必要的注释。
      • 解释
  • 4.下面这段代码也解释一下,加上必要的注释。
      • 代码解释
  • 5.还有一段代码,帮忙解释一下,加上必要的注释。
      • 代码解释

1.请解释一下Compose项目的目录结构。

Jetpack Compose项目的目录结构与传统的Android项目相似,但有一些特定的文件和配置用于支持Compose UI。了解这个结构有助于更好地组织代码、资源和依赖项。以下是一个典型的Jetpack Compose项目的目录结构及其各个部分的作用:

根目录

  • build.gradle:根级别的构建脚本,通常包含所有子模块共享的配置和依赖管理。

  • gradle.properties:定义了Gradle的全局属性,例如版本号等。

  • settings.gradle:指定哪些模块是项目的一部分。

  • .gitignore:告诉Git哪些文件或目录应该被忽略,不纳入版本控制。

模块目录(通常是app

这是你主要的应用程序代码所在的地方。对于大多数项目来说,这里会有一个名为app的模块,它包含了应用程序的所有源代码和资源。

app/build.gradle
  • 模块级别的构建脚本,包含特定于该模块的配置,如插件、依赖项、签名配置等。对于Jetpack Compose项目,你会在这里看到对Compose库的依赖声明。
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

android {
    ...
    buildFeatures {
        compose true // 启用 Jetpack Compose
    }
    composeOptions {
        kotlinCompilerExtensionVersion '1.4.0' // 使用最新的版本号
    }
    ...
}

dependencies {
    implementation "androidx.compose.ui:ui:1.4.0" // 或者更新到最新版本
    implementation "androidx.compose.material:material:1.4.0"
    implementation "androidx.compose.ui:ui-tooling-preview:1.4.0"
    debugImplementation "androidx.compose.ui:ui-tooling:1.4.0"
    ...
}
app/src/main

这是应用程序的主要源码和资源目录。

  • java/kotlin:存放应用程序的Java或Kotlin源代码。对于Jetpack Compose项目,推荐使用Kotlin,并且大部分UI逻辑将位于这里的Composable函数中。

  • res

    • drawable:存放图片和其他可绘制资源。
    • layout:尽管Jetpack Compose不再需要XML布局文件,但某些情况下可能仍然会有遗留的XML布局资源。
    • mipmap:应用图标资源。
    • values:字符串、颜色、尺寸等资源文件。
    • xml:其他XML配置文件,如权限配置等。
  • resources:可以存放额外的资源文件,如字体、着色器等。

  • AndroidManifest.xml:应用程序的清单文件,定义了组件和服务等信息。

app/src/main/ui

这是一个常见的组织方式,专门用于存放与UI相关的代码。虽然这不是强制性的,但它有助于保持代码的整洁和易于维护。在这个目录下,你可以创建多个子目录来进一步分类你的UI组件:

  • components:基础UI组件,如按钮、文本框等。
  • screens:每个屏幕或页面的顶级组合函数。
  • themes:主题和样式定义,如颜色、字体等。
  • utils:辅助函数和工具类。
app/src/main/composables

另一个常见的组织方式是直接在src/main下创建一个composables文件夹,用来存放所有的Composable函数。这种方式适用于较小规模的项目,或者当你的UI逻辑相对简单时。

app/src/debug
  • 这个目录用于存放仅在调试构建中使用的代码和资源,例如特殊的调试工具或日志记录功能。
app/src/release
  • 类似地,这个目录用于存放仅在发布构建中使用的代码和资源,如不同的API密钥或优化后的资源文件。

测试相关目录

  • app/src/androidTest:存放仪器测试代码,这些测试是在真实设备或模拟器上运行的。
  • app/src/test:存放单元测试代码,这些测试是在主机(即开发者的电脑)上运行的。

其他文件和目录

  • .idea:包含IDE特定的配置文件,如编码设置、版本控制集成等。
  • build:由Gradle生成的输出文件,如编译后的APK、缓存等。通常不需要手动修改这个目录中的内容。
  • captures:有时用于存储性能分析捕捉数据或其他临时文件。

示例目录结构

MyComposeApp/
├── app/
│   ├── build.gradle
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   ├── kotlin/
│   │   │   │   └── com/
│   │   │   │       └── example/
│   │   │   │           └── mycomposeapp/
│   │   │   │               ├── MainActivity.kt
│   │   │   │               ├── ui/
│   │   │   │               │   ├── components/
│   │   │   │               │   ├── screens/
│   │   │   │               │   ├── themes/
│   │   │   │               │   └── utils/
│   │   │   ├── res/
│   │   │   │   ├── drawable/
│   │   │   │   ├── layout/
│   │   │   │   ├── mipmap/
│   │   │   │   ├── values/
│   │   │   │   └── xml/
│   │   │   └── AndroidManifest.xml
│   │   ├── androidTest/
│   │   └── test/
│   ├── src/debug/
│   └── src/release/
├── build.gradle
├── gradle.properties
├── settings.gradle
└── .gitignore

通过这种结构化的方式,你可以更清晰地管理和扩展Jetpack Compose项目。当然,具体的目录布局可以根据项目的复杂性和团队的偏好进行调整。重要的是选择一种能够帮助你高效工作并保持代码整洁的方法。

我还看不懂代码,让Ai解释一下吧

2.解释一下下列代码,加上必要的注释

当然,下面是对这段Jetpack Compose代码的详细解释,并加上了必要的注释来帮助理解每个部分的功能和作用:

package cn.edu.jssvc.myapplication

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import cn.edu.jssvc.myapplication.ui.theme.MyApplicationTheme

// 定义主活动类,继承自ComponentActivity,这是Jetpack Compose推荐的基类
class MainActivity : ComponentActivity() {
    // 重写onCreate方法,在这里设置应用的内容视图(UI)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 使用setContent来定义Composable函数作为应用程序的主要UI内容
        setContent {
            // 应用程序的主题,通常包含颜色、字体等样式信息
            MyApplicationTheme {
                // Surface组件用于提供一个背景色并容纳其他子组件
                // 这里使用fillMaxSize修饰符让Surface占据整个屏幕
                // 并使用MaterialTheme中的background颜色作为背景色
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    // 调用Greeting函数显示欢迎消息
                    Greeting("Android")
                }
            }
        }
    }
}

// 定义一个Composable函数,它接受一个字符串参数name和一个可选的Modifier参数
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
    // Text组件用于显示文本,这里是动态地显示传入的名字
    Text(
        text = "Hello $name!", // 动态生成的问候语
        modifier = modifier // 可选的修饰符,默认为无修饰
    )
}

// 定义一个预览函数,用于在Android Studio中预览Greeting组件的样子
@Preview(showBackground = true) // 显示背景以便更好地查看UI效果
@Composable
fun GreetingPreview() {
    // 在预览中应用主题,以确保预览与实际运行时一致
    MyApplicationTheme {
        // 预览Greeting组件,传入"Android"作为名字
        Greeting("Android")
    }
}

代码解释

  1. 包声明

    • package cn.edu.jssvc.myapplication:指定代码所在的包名,这有助于组织和管理项目中的不同模块。
  2. 导入语句

    • 导入了必要的库和工具,包括Android操作系统、Jetpack Compose的基础组件、布局修饰符、主题支持等。
  3. MainActivity类

    • 继承自ComponentActivity,这是Jetpack Compose推荐的基类。
    • 重写了onCreate方法,其中调用了setContent来定义应用的主要UI内容。
    • 使用了MyApplicationTheme来应用应用程序的主题样式。
    • 包含了一个Surface组件,设置了填充整个屏幕的修饰符,并指定了背景颜色。
    • 调用了Greeting函数来显示一条欢迎消息。
  4. Greeting函数

    • 是一个Composable函数,意味着它可以用来构建UI。
    • 接受一个字符串参数name,用于定制化问候语。
    • 内部使用Text组件来显示文本,支持传递一个可选的Modifier参数以进一步定制其行为或外观。
  5. GreetingPreview函数

    • 通过@Preview注解标记为预览函数,允许开发者在不运行应用程序的情况下查看UI的效果。
    • showBackground = true参数确保预览窗口中有背景色,从而更真实地反映最终的应用界面。
    • 应用了MyApplicationTheme以确保预览时使用的主题与实际应用一致。
    • 调用了Greeting函数,传入固定的文本"Android"作为示例。

通过这种方式,你可以创建一个简单的Jetpack Compose应用程序,它会在启动时显示一条带有特定文本的问候消息。同时,提供的预览功能使得开发者可以在IDE中快速查看UI效果,而无需每次都要编译和部署应用。

3.这段代码我也不理解,帮我加上必要的注释。

当然可以。这段代码定义了一些颜色常量,这些颜色通常用于应用程序的主题配置中。以下是带有详细注释的版本,帮助你理解每个部分的作用:

package cn.edu.jssvc.myapplication.ui.theme

import androidx.compose.ui.graphics.Color

// 定义了一系列颜色值,使用Color类创建特定的颜色对象。
// 这些颜色将被用于应用程序的主题,例如背景色、文本颜色等。

// 主色调(Primary Colors)
// 紫色80 (Purple80) - 较浅的紫色,适用于强调色或次要元素
val Purple80 = Color(0xFFD0BCFF)

// 紫灰80 (PurpleGrey80) - 带有灰色调的浅紫色,适合用作分隔线或背景
val PurpleGrey80 = Color(0xFFCCC2DC)

// 粉色80 (Pink80) - 较浅的粉色,可以用于按钮或其他交互元素
val Pink80 = Color(0xFFEFB8C8)

// 次要色调(Secondary Colors)
// 紫色40 (Purple40) - 较深的紫色,通常作为主色调,如工具栏背景或标题文字
val Purple40 = Color(0xFF6650a4)

// 紫灰40 (PurpleGrey40) - 深紫色带灰色调,可用于图标或文本颜色
val PurpleGrey40 = Color(0xFF625b71)

// 粉色40 (Pink40) - 较深的粉色,适合用作警告信息或重要提示的颜色
val Pink40 = Color(0xFF7D5260)

解释

  1. 包声明

    • package cn.edu.jssvc.myapplication.ui.theme:指定了代码所在的包名,确保这些颜色资源能够被项目中的其他模块正确引用。
  2. 导入语句

    • import androidx.compose.ui.graphics.Color:导入了Jetpack Compose库中的Color类,它用于表示和操作颜色。
  3. 颜色常量定义

    • 这里定义了六种颜色,每种颜色都由一个十六进制的颜色码表示。这些颜色分为两个类别:
      • 主色调(Primary Colors):较浅的颜色,通常用于界面中的强调色或次要元素。
      • 次要色调(Secondary Colors):较深的颜色,适合作为主色调,如背景、标题文字等。
  4. 颜色用途说明

    • 对于每个颜色变量,添加了简短的注释解释其可能的应用场景。这有助于开发者在选择颜色时更好地理解它们的预期用途。

通过这种方式,你可以为应用程序创建一个统一且协调的颜色方案,从而提升用户体验的一致性和美观度。当需要在应用的不同部分使用这些颜色时,只需引用相应的变量即可。例如,在定义主题或设置UI组件的颜色属性时,你可以直接使用Purple80Purple40等变量来确保整个应用的颜色风格一致。

4.下面这段代码也解释一下,加上必要的注释。

当然,下面是对这段Jetpack Compose代码的详细解释,并加上了必要的注释来帮助理解每个部分的功能和作用:

package cn.edu.jssvc.myapplication.ui.theme

import android.app.Activity
import android.os.Build
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.dynamicDarkColorScheme
import androidx.compose.material3.dynamicLightColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalView
import androidx.core.view.WindowCompat

// 定义深色模式下的颜色方案,使用之前定义的颜色常量
private val DarkColorScheme = darkColorScheme(
    primary = Purple80, // 主色调(例如:工具栏背景)
    secondary = PurpleGrey80, // 次要色调(例如:按钮或图标)
    tertiary = Pink80 // 第三色调(例如:强调色)
)

// 定义浅色模式下的颜色方案,同样使用之前定义的颜色常量
private val LightColorScheme = lightColorScheme(
    primary = Purple40, // 主色调
    secondary = PurpleGrey40, // 次要色调
    tertiary = Pink40 // 第三色调

    /* Other default colors to override
    background = Color(0xFFFFFBFE), // 背景颜色
    surface = Color(0xFFFFFBFE), // 表面颜色(如卡片)
    onPrimary = Color.White, // 主色调上的文本颜色
    onSecondary = Color.White, // 次要色调上的文本颜色
    onTertiary = Color.White, // 第三色调上的文本颜色
    onBackground = Color(0xFF1C1B1F), // 背景上的文本颜色
    onSurface = Color(0xFF1C1B1F), // 表面上的文本颜色
    */
)

// 定义一个Composable函数MyApplicationTheme,用于设置应用程序的主题
@Composable
fun MyApplicationTheme(
    darkTheme: Boolean = isSystemInDarkTheme(), // 是否启用暗黑模式,默认跟随系统设置
    dynamicColor: Boolean = true, // 是否启用动态颜色(仅Android 12及以上版本支持),默认启用
    content: @Composable () -> Unit // 接受一个Composable内容块作为参数
) {
    // 根据条件选择合适的颜色方案
    val colorScheme = when {
        // 如果启用了动态颜色且设备API级别为Android 12及以上,则使用动态颜色方案
        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
            val context = LocalContext.current // 获取当前上下文
            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)
        }
        // 否则根据是否启用暗黑模式选择预定义的颜色方案
        darkTheme -> DarkColorScheme
        else -> LightColorScheme
    }

    // 获取当前视图
    val view = LocalView.current
    // 如果不是在编辑模式下(即不是在设计时预览),应用一些额外的效果
    if (!view.isInEditMode) {
        SideEffect {
            // 获取当前窗口
            val window = (view.context as Activity).window
            // 设置状态栏颜色为主色调
            window.statusBarColor = colorScheme.primary.toArgb()
            // 设置状态栏图标颜色是否为亮色(根据是否是暗黑模式)
            WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme
        }
    }

    // 应用MaterialTheme,传递选定的颜色方案、排版规则以及实际的内容
    MaterialTheme(
        colorScheme = colorScheme,
        typography = Typography, // 使用预定义的排版规则
        content = content // 插入传入的内容
    )
}

代码解释

  1. 包声明

    • package cn.edu.jssvc.myapplication.ui.theme:指定代码所在的包名,确保这些主题配置能够被项目中的其他模块正确引用。
  2. 导入语句

    • 导入了必要的库和工具,包括Android操作系统、Jetpack Compose的基础组件、颜色方案、排版规则等。
  3. 颜色方案定义

    • DarkColorSchemeLightColorScheme 分别定义了深色模式和浅色模式下的颜色方案。它们指定了主色调、次要色调和第三色调,以及其他可能需要覆盖的颜色属性。
  4. MyApplicationTheme函数

    • 是一个Composable函数,用于设置整个应用程序的主题。
    • 接受三个参数:
      • darkTheme:布尔值,指示是否启用暗黑模式,默认情况下跟随系统的设置。
      • dynamicColor:布尔值,指示是否启用动态颜色(仅适用于Android 12及以上版本),默认启用。
      • content:接受一个Composable内容块作为参数,表示应用程序的实际UI内容。
    • 根据dynamicColorBuild.VERSION.SDK_INT判断是否使用动态颜色方案。如果启用了动态颜色并且设备支持,则根据是否启用暗黑模式选择相应的动态颜色方案;否则,选择预定义的颜色方案。
    • 使用SideEffect副作用函数,在非编辑模式下应用额外的效果,如设置状态栏颜色和状态栏图标颜色。
    • 最后,通过MaterialTheme应用选定的颜色方案、排版规则以及实际的内容。
  5. 状态栏颜色和图标颜色设置

    • SideEffect中,获取当前窗口并设置其状态栏颜色为主色调的颜色值。
    • 根据是否启用暗黑模式设置状态栏图标颜色是否为亮色,以确保与主题一致。
  6. MaterialTheme应用

    • 将选定的颜色方案和排版规则应用于整个应用程序的主题中,并插入传入的UI内容。

通过这种方式,你可以创建一个灵活且响应式的设计主题,它可以根据用户的偏好(如是否启用暗黑模式)和设备特性(如是否支持动态颜色)自动调整。这不仅提升了用户体验的一致性和美观度,还减少了开发者手动管理不同主题变体的工作量。

5.还有一段代码,帮忙解释一下,加上必要的注释。

当然,下面是对这段Jetpack Compose代码的详细解释,并加上了必要的注释来帮助理解每个部分的功能和作用:

package cn.edu.jssvc.myapplication.ui.theme

import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp

// 定义一个Typography对象,用于配置应用程序中的文本样式。
// Typography是Material Design中定义的一组预设文本样式,可以确保应用内的文字排版一致且美观。

val Typography = Typography(
    // bodyLarge:用于正文内容的主要文本样式
    bodyLarge = TextStyle(
        fontFamily = FontFamily.Default, // 使用默认字体系列
        fontWeight = FontWeight.Normal, // 字体粗细为正常(普通)
        fontSize = 16.sp, // 字体大小为16sp(缩放独立像素)
        lineHeight = 24.sp, // 行高为24sp,确保多行文本有足够的间距
        letterSpacing = 0.5.sp // 字符间距为0.5sp,增加字符之间的可读性
    ),
    
    /*
    // 下面是其他可以覆盖的默认文本样式,可以根据需要取消注释并调整:
    
    titleLarge = TextStyle(
        fontFamily = FontFamily.Default, // 使用默认字体系列
        fontWeight = FontWeight.Normal, // 字体粗细为正常(普通)
        fontSize = 22.sp, // 字体大小为22sp
        lineHeight = 28.sp, // 行高为28sp
        letterSpacing = 0.sp // 字符间距为0sp
    ),
    
    labelSmall = TextStyle(
        fontFamily = FontFamily.Default, // 使用默认字体系列
        fontWeight = FontWeight.Medium, // 字体粗细为中等
        fontSize = 11.sp, // 字体大小为11sp
        lineHeight = 16.sp, // 行高为16sp
        letterSpacing = 0.5.sp // 字符间距为0.5sp
    )
    */
)

代码解释

  1. 包声明

    • package cn.edu.jssvc.myapplication.ui.theme:指定了代码所在的包名,确保这些排版配置能够被项目中的其他模块正确引用。
  2. 导入语句

    • 导入了必要的库和工具,包括Material Design的排版规则、文本样式、字体系列、字体粗细以及单位转换(如sp)。
  3. Typography对象定义

    • val Typography = Typography(...):创建了一个名为Typography的对象,它包含了一组预设的文本样式。这个对象将用于整个应用程序的文本排版设置,以确保一致性。
  4. bodyLarge文本样式

    • bodyLarge:这是用于正文内容的主要文本样式,适用于段落文本或长篇内容。
      • fontFamily = FontFamily.Default:使用默认字体系列,即设备系统字体。
      • fontWeight = FontWeight.Normal:字体粗细为正常(普通),适用于大多数正文文本。
      • fontSize = 16.sp:字体大小为16sp,这是一个常见的正文文本大小。
      • lineHeight = 24.sp:行高为24sp,确保多行文本有足够的间距,提高可读性。
      • letterSpacing = 0.5.sp:字符间距为0.5sp,轻微增加字符之间的空间,有助于提升阅读体验。
  5. 其他文本样式(注释掉的部分)

    • 这里列出了其他一些可以自定义的文本样式,例如titleLargelabelSmall,它们分别用于较大的标题和较小的标签文本。
    • 每个样式都包含了类似的属性:字体系列、字体粗细、字体大小、行高和字符间距。
    • 如果你需要在应用程序中使用这些样式,可以取消注释并根据需要进行调整。

通过这种方式,你可以为应用程序创建一组统一的文本样式,从而确保整个应用的文字排版风格一致。这不仅提升了用户体验的一致性和美观度,还减少了开发者手动管理不同文本样式的复杂性。当需要在UI组件中应用这些样式时,只需引用相应的Typography属性即可,例如Typography.bodyLargeTypography.titleLarge

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

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

相关文章

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

go项目zero框架中用gentool解决指定MYSQL表生成结构体被覆盖的解决方案

在使用 GoZero 框架进行项目开发时,gentool 是一个非常方便的工具,它可以根据数据库表结构自动生成 Go 语言结构体和其他相关文件。然而,在使用 gentool 生成结构体时,可能会遇到一个问题:如果多次运行 gentool&#x…

深入Android架构(从线程到AIDL)_11 线程之间的通信架构

目录 5、 线程之间的通信架构 认识Looper与Handler对象 主线程丢信息给自己 子线程丢信息给主线程 替子线程诞生Looper与MQ 5、 线程之间的通信架构 认识Looper与Handler对象 当主线程诞生时,就会去执行一个代码循环(Looper),以便持续监视它的信息…

今日自动化编辑部今日自动化杂志社2024年第19期部分目录

智能控制技术 无人机视觉支持下的输电线路安全距离巡检系统探究 贺凌飞 王骋昊1-2,36 基于虚拟现实技术的安全警示系统设计 黄奇 李光辉 徐奎 许兆辉3-5 火焰自动焊接技术对泄漏率的影响研究 孙天鸽5-7 PLC在闸门自动化控制系统中的应用 黎芳8-9,23 智能控制算法在二次供水系统…

【双层模型】考虑供需双侧的综合能源双层优化模型

目录 主要内容 内容研究 1.模型简介 2 程序释义 部分代码 运行结果 下载链接 主要内容 该程序实现一个综合能源系统的优化调度双层模型,上下层分别采用差分进化算法和规划算法进行求解。模型考虑了多种能源设备,包括燃气轮机、燃气锅炉、风电…

单片机-串转并-74HC595芯片

1、74HC595芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器,其中并行输出为三态输出(即高电平、低电平和高阻抗)。 15 和 1 到 7 脚 QA--QH:并行数据输出 9 脚 QH 非:串行数据输出 10 脚 SCLK 非&#x…

(框架漏洞)

1.Thinkphp 1.Thinkphp5x远程命令执⾏及getshell 搭建靶场环境 vulhub/thinkphp/5-rce docker-compose up -d #启动环境 ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system&vars[1][]whoami ?s/Index/\think\app/invokefunctio…

[SMARTFORMS] 输出文本变量绑定

在SMARTFORMS表单中的表格接口的"导入"页签处添加导入参数IV_EBELN 参数IV_EBELN为采购凭证编号,并为该参数添加默认值 在SMARTFORMS表单中的全局定义中的"全局数据"页签定义变量 结构ZSPO_HEADER_437、ZSPO_ITEM_437与表类型ZTPO_ITEM_437的定…

【DevOps】Jenkins部署

Jenkins部署 文章目录 Jenkins部署资源列表基础环境一、部署Gilab1.1、安装Gitlab1.2、修改配置文件1.3、加载配置文件1.4、访问Gitlab1.5、修改root登录密码1.6、创建demo测试项目1.7、上传代码1.8、验证上传的代码 二、部署Jenkins所需软件2.1、部署JDK2.2、部署Tomcat2.3、部…

Redis(二)value 的五种常见数据类型简述

目录 一、string(字符串) 1、raw 2、int 3、embstr 二、hash(哈希表) 1、hashtable 2、ziplist 三、list(列表) ​编辑 1、linkedlist 2、ziplist 3、quicklist(redis 3.2后的列表内…

PyQt实战——将pcm文本数据转换成.pcm的二进制文件

系类往期文章: PyQt5实战——多脚本集合包,前言与环境配置(一) PyQt5实战——多脚本集合包,UI以及工程布局(二) PyQt5实战——多脚本集合包,程序入口QMainWindow(三&…

Word2Vec解读

Word2Vec: 一种词向量的训练方法 简单地讲,Word2Vec是建模了一个单词预测的任务,通过这个任务来学习词向量。假设有这样一句话Pineapples are spiked and yellow,现在假设spiked这个单词被删掉了,现在要预测这个位置原本的单词是…

STM32F1学习——编码器接口

一、编码器接口 编码器接口可以接收正交编码器的信号,根据编码器旋转产生的正交信号脉冲,通过硬件自动控制CNT值的自增或自减,从而指出编码器的位置、旋转方向和旋转速度。 每个高级定时器和通用定时器都有一个编码器接口,他们会占…

什么是网关路由

1.认识网关 网关(Gateway)和路由(Router)是两个相关但不同的概念。 一、网关(Gateway) 定义 网关是一个网络节点,它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”&#xf…

S32K144 UDSdoCAN 升级刷写实现笔记

文章目录 1. 摘要2. 开发环境搭建2.1 开发板2.2 IDE 安装2.3 更新扩展包2.4 烧录仿真测试2.4.1 新建工程2.4.2 导入已有工程2.4.3 编译工程2.4.4 硬件连接2.4.5 Debug2.4.6 添加 .c .h 文件2.5 串口配置2.5.1 时钟2.5.2 GPIO2.5.3 定时器2.5.4 uart 工程2.5.5 烧录验证3. 升级原…

第十八周:Faster R-CNN论文阅读

Faster R-CNN论文阅读 摘要Abstract文章简介1. 引言2. Faster R-CNN 框架2.1 RPN2.2 损失函数2.3 RPN的训练细节 3. Faster R-CNN的训练4. 优缺点分析总结 摘要 本篇博客介绍了 Faster R-CNN,这是一种双阶段的目标检测网络,是对 Fast R-CNN 的改进。为了…

Day28下 - 大模型微调:酒店评论情感分析

一、前置准备 1. 下载 LLaMA Factory https://github.com/hiyouga/LLaMA-Factory.git 搭建过程详见:https://blog.csdn.net/CSBLOG/article/details/144584581 2. 选择 预训练模型 和 prompt指令模型 预训练阶段在实际工作中,一般是用不上的&#xff…

【网络安全 | 漏洞挖掘】JS Review + GraphQL滥用实现管理面板访问

未经许可,不得转载。 正文 在映射目标范围后,我发现了一个用于管理的控制台界面,但没有注册功能。 于是我开始尝试: 1、模糊测试注册端点 -> 失败 2、在请求中将登录替换为注册 -> 再次失败 尝试均未奏效后,我决定冷静下来,重新思考方法并利用技术手段。 我观察…

数据库管理-第278期 开年综艺,第七届中国PG数据库生态大会有感(20250105)

数据库管理278期 20245-01-05 数据库管理-第278期 开年综艺,第七届中国PG数据库生态大会有感(20250105)1 走后门的可观测性2 社区VS商业3 从O来到PG去4 现场集锦5 IF CLUB社区总结 数据库管理-第278期 开年综艺,第七届中国PG数据库…

Docker 安装Elasticsearch搜索引擎 搜索优化 词库挂载 拼音分词 插件安装

介绍 允许用户快速索引和搜索大量的文本数据。通过使用倒排索引,它能够在海量数据中高效检索相关信息。提供灵活的查询语言,可以做全文搜索、模糊搜索、数据统计等,用来代替MYSQL的模糊搜索,MYSQL的模糊搜索不支持使用索引从而导…