HarmonyOS4-学习入门知识总结

简单的组件学习:

/**
 * weip 自定义控件
 * 自定义构建函数也是需要充电的地方,分全局和局部的
 * 全局:需要添加function关键字  局部:不加function关键字
 * @Styles function 自定义公共样式 分全局和局部
 * @Extends(Text) 继承模式 只能写成全局的
 * export:导出组件
 */
@Component
export struct Header {
  private title: ResourceStr;
  build() {
    // 标题部分
    Row() {
      // 资源自行替换,返回icon
      Image($r('app.media.app_icon'))
        .width(30)
      Text(this.title)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
      Blank()
      // 资源自行替换,分享icon
      Image($r('app.media.app_icon'))
        .width(30)
    }
    .width('100%')
    .height(30)
  }
}

ImagesPage.ets:

引用header组件

/**
 * 导入head组件
 */
import { Header } from '../components/HeadComponents'

// 全局自定义构建函数  function:代表全局
@Builder function ItemCard() {
  
}

// 组件内的局部函数需要加this
// 自定义公共样式
@Styles function fillScreen() {
  .width('100%')
  .height('100%')
  .backgroundColor('#EFEFEF')
  .padding(20)
}

// 自定义字体样式 需使用Extend() 继承模式,只能写在全局位置
@Extend(Text) function priceText() {
  .fontSize(18)
  .fontColor('#F36')
}

@Entry
@Component
struct Index {
  @State imageWidth: number = 150

  // ForEach:循环遍历数组,根据数组内容渲染页面组件,超过屏幕的东西就看不到,也滑动不了,所以后面统一使用List组件
  build() {
    // 纵向布局 主轴/交叉轴,一般只设置主轴,不设置交叉轴
    Column() {
      // 标题
      Header({title: "图片详情"})
        .padding({left: 20, top: 20, right: 20, bottom: 20})

      // 横向布局 主轴/交叉轴,一般只设置主轴,不设置交叉轴
      Row(){
        Image($r('app.media.icon'))
          .width(this.imageWidth)
          .interpolation(ImageInterpolation.High)
      }
      .width('100%')
      .height(400)
      .justifyContent(FlexAlign.Center)

      // Row容器 放一行
      Row() {
        Text($r('app.string.width_label'))
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .fontColor('#663')

        TextInput({ placeholder: '请输入图片宽度', text:this.imageWidth.toFixed(0) })
          .width(150)
          .backgroundColor('#FFF')
          .type(InputType.Number)
          .onChange(value => {
            console.log(value)
            this.imageWidth = parseInt(value)
          })
      }
      .width('100%')
      .padding({left: 14,right: 14})
      .justifyContent(FlexAlign.SpaceBetween) // 中间留空

      // 分割线
      Divider()
        .width('91%')


      // 两个按钮
      Row(){
        Button('缩小')
          .width(80)
          .fontSize(20)
          .onClick(() => {
            if (this.imageWidth >= 10) {
              this.imageWidth -= 10;
            }
          })
        Button('放大')
          .width(80)
          .fontSize(20)
          .onClick(() => {
            if (this.imageWidth < 300) {
              this.imageWidth += 10;
            }
          })
      }
      .width('100%')
      .margin({top: 35, bottom: 35})
      .justifyContent(FlexAlign.SpaceEvenly)


      Slider({
        min: 100,
        max: 300,
        value: this.imageWidth,
        step: 10
      })
        .width('100%')
        .blockColor('#36D')
        .trackThickness(7)
        .showTips(true)
        .onChange(value => {
          // value:当前滑块值
          this.imageWidth = value;
        })
    }
    .width('100%')
    .height('100%')
  }
}

/**
 * struct:自定义组件 可复用的UI单元
 * 装饰器:用来装饰类结构、方法、变量
 * @Component:标记自定义组件
 * @Entry:标记当前组件是入口组件
 * @State:标记一个变量是状态变量,值变化时会触发UI更新
 * build():UI描述,其内部以声明式方式描述UI结构
 * 内置组件:ArkUI提供的组件,比如容器组件如Row、Column
 * 基础组件:自带样式和功能的页面元素,如Text
 * 属性方法:设置组件的UI样式
 * 事件方法:设置组件的事件回调
 * 组件通用属性、特有属性(图片插值)
 */

Index.ets:

一般是应用程序的入口

@Entry  // 入口組件
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .fontColor('#36D')
          .onClick(() => {
            this.message = 'Hello ArkTS!';
          })

        // Image('https://bkimg.cdn.bcebos.com/pic/bd315c6034a85edf8db139b7db031e23dd54564edf55?x-bce-process=image/format,f_auto/quality,Q_70/resize,m_lfit,limit_1,w_536')
        //   .width('50%')
        // 引用本地图片资源地址
        Image($r('app.media.icon'))
          .width(250)
          .interpolation(ImageInterpolation.High)
      }
      .width('100%')
    }
    .height('100%')
  }
}

/**
 * struct:自定义组件 可复用的UI单元
 * 装饰器:用来装饰类结构、方法、变量
 * @Component:标记自定义组件
 * @Entry:标记当前组件是入口组件
 * @State:标记一个变量是状态变量,值变化时会触发UI更新
 * build():UI描述,其内部以声明式方式描述UI结构
 * 内置组件:ArkUI提供的组件,比如容器组件如Row、Column
 * 基础组件:自带样式和功能的页面元素,如Text
 * 属性方法:设置组件的UI样式
 * 事件方法:设置组件的事件回调
 * 组件通用属性、特有属性(图片插值)
 */

PropPage.ets:
/**
 * 自定义任务类
 */
class Task {
  // 静态变量,所有对象共享变量
  static id: number = 1
  // 任务名称   半角:``
  name: string = `任务${Task.id++}`
  // 任务状态:是否完成
  finished: boolean = false
}

// 统一的卡片样式
@Styles function card() {
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4})
}

// 任务完成样式
@Extend(Text) function finishedTask() {
  .decoration({type: TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}

// 任务统计信息的实体类【c】
class StaticInfo {
  totalTask: number = 0;
  finishTask: number = 0;
}

@Entry
@Component
struct PropPage {
  // 总任务数量
  @State totalTask: number = 0

  // 已完成任务数量
  @State finishTask: number = 0

  build() {
    Column({space: 10}){
      // 任务进度卡片 子组件
      TaskStatistics({finishTask:this.finishTask, totalTask: this.totalTask})

      // 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用
      TaskList({finishTask:$finishTask, totalTask: $totalTask})
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }
}

@Component
struct TaskList {
  // 总任务数量
  @Link totalTask: number

  // 已完成任务数量
  @Link finishTask: number

  // 任务数组
  @State tasks: Task[] = []

  handleTaskChange(){
    // 更新任务总数量
    this.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.finishTask = this.tasks.filter(item => item.finished).length
  }

  build() {
    Column() {
      // 2、新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(() => {
          // 新增任务数据
          this.tasks.push(new Task())
          // 更新任务总数量
          this.handleTaskChange()
        })

      // 3、任务列表
      List({space: 10}) {
        ForEach(
          this.tasks,
          (item: Task, index) => {
            ListItem() {
              Row() {
                // 任务名
                Text(item.name)
                  .fontSize(20)
                // 任务复选框
                Checkbox()
                  .select(item.finished)
                  .onChange(isSelected => {
                    // 任务状态发生变更,更新当前任务状态
                    item.finished = isSelected
                    // 更新已完成任务数量
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end: this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .layoutWeight(1)
      .alignListItem(ListItemAlign.Center)
    }
  }

  @Builder DeleteButton(index: number) {
    Button(){
      Image($r('app.media.icon'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(() => {
      // 从角标开始删 删1个
      this.tasks.splice(index, 1)
      this.handleTaskChange()
    })
  }
}

/**
 * 任务进度卡片 子组件
 * 子组件是TaskStatistics  此时父组件是PropPage.ets
 * Prop:变量不能初始化 单向同步【父组件-->子组件】
 * Link:支持传对象 Prop:不支持传对象
 * provider 跨组件传输
 * consume 跨组件传输
 */
@Component
struct TaskStatistics {
  // 总任务数量
  @Prop totalTask: number

  // 已完成任务数量
  @Prop finishTask: number
  build() {
    Row() {
      // 任务进度
      Text('任务进度')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)

      // 堆叠容器
      Stack() {
        // 进度条
        Progress({
          value: this.finishTask,
          total: this.totalTask,
          type: ProgressType.Ring
        })

        // 1/5
        Row() {
          Text(this.finishTask.toString())
            .fontSize(24)
            .fontColor('#36D')
          Text(' / ' + this.totalTask.toString())
            .fontSize(24)
        }
      }
    }
    .card()
    .margin({top: 20, bottom: 20})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}

预览效果图:

注解的学习:

/**
 * 自定义任务类
 */
class Task {
  // 静态变量,所有对象共享变量
  static id: number = 1
  // 任务名称   半角:``
  name: string = `任务${Task.id++}`
  // 任务状态:是否完成
  finished: boolean = false
}

// 统一的卡片样式
@Styles function card() {
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4})
}

// 任务完成样式
@Extend(Text) function finishedTask() {
  .decoration({type: TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}

// 任务统计信息的实体类
class StatInfo {
  totalTask: number = 0;
  finishTask: number = 0;
}

/**
 * 父组件
 */
@Entry
@Component
struct PropPage {
  // 统计信息  【父亲】
  @State stat: StatInfo = new StatInfo()


  build() {
    Column({space: 10}){
      // 任务进度卡片 子组件
      TaskStatistics({finishTask:this.stat.finishTask, totalTask: this.stat.totalTask})

      // 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用
      TaskList({stat:$stat})
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }
}

@Component
struct TaskList {
  // 统计信息【儿子】  Link可以传对象
  @Link stat: StatInfo

  // 任务数组
  @State tasks: Task[] = []

  handleTaskChange(){
    // 更新任务总数量
    this.stat.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.stat.finishTask = this.tasks.filter(item => item.finished).length
  }

  build() {
    Column() {
      // 2、新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(() => {
          // 新增任务数据
          this.tasks.push(new Task())
          // 更新任务总数量
          this.handleTaskChange()
        })

      // 3、任务列表
      List({space: 10}) {
        ForEach(
          this.tasks,
          (item: Task, index) => {
            ListItem() {
              Row() {
                // 任务名
                Text(item.name)
                  .fontSize(20)
                // 任务复选框
                Checkbox()
                  .select(item.finished)
                  .onChange(isSelected => {
                    // 任务状态发生变更,更新当前任务状态
                    item.finished = isSelected
                    // 更新已完成任务数量
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end: this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .layoutWeight(1)
      .alignListItem(ListItemAlign.Center)
    }
  }

  @Builder DeleteButton(index: number) {
    Button(){
      Image($r('app.media.icon'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(() => {
      // 从角标开始删 删1个
      this.tasks.splice(index, 1)
      this.handleTaskChange()
    })
  }
}

/**
 * 任务进度卡片 子组件
 * 子组件是TaskStatistics  此时父组件是PropPage.ets
 * Prop:变量不能初始化 单向同步【父组件-->子组件】
 * Link:支持传对象 Prop:不支持传对象
 * provider 跨组件传输
 * consume 跨组件传输
 */
@Component
struct TaskStatistics {
  // 总任务数量
  @Prop totalTask: number

  // 已完成任务数量
  @Prop finishTask: number
  build() {
    Row() {
      // 任务进度
      Text('任务进度')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)

      // 堆叠容器
      Stack() {
        // 进度条
        Progress({
          value: this.finishTask,
          total: this.totalTask,
          type: ProgressType.Ring
        })

        // 1/5
        Row() {
          Text(this.finishTask.toString())
            .fontSize(24)
            .fontColor('#36D')
          Text(' / ' + this.totalTask.toString())
            .fontSize(24)
        }
      }
    }
    .card()
    .margin({top: 20, bottom: 20})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}

跨组件传输数据:

@Provider @Consume

这种相对比较费内存,非跨组件不建议使用

/**
 * 自定义任务类
 */
class Task {
  // 静态变量,所有对象共享变量
  static id: number = 1
  // 任务名称   半角:``
  name: string = `任务${Task.id++}`
  // 任务状态:是否完成
  finished: boolean = false
}

// 统一的卡片样式
@Styles function card() {
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4})
}

// 任务完成样式
@Extend(Text) function finishedTask() {
  .decoration({type: TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}

// 任务统计信息的实体类
class StatInfo {
  totalTask: number = 0;
  finishTask: number = 0;
}

/**
 * 父组件
 */
@Entry
@Component
struct PropPage {
  // 统计信息  【父亲】
  @Provide stat: StatInfo = new StatInfo()


  build() {
    Column({space: 10}){
      // 任务进度卡片 子组件
      TaskStatistics()

      // 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用
      TaskList()
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }
}

@Component
struct TaskList {
  // 统计信息【儿子】  Link可以传对象
  @Consume stat: StatInfo

  // 任务数组
  @State tasks: Task[] = []

  handleTaskChange(){
    // 更新任务总数量
    this.stat.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.stat.finishTask = this.tasks.filter(item => item.finished).length
  }

  build() {
    Column() {
      // 2、新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(() => {
          // 新增任务数据
          this.tasks.push(new Task())
          // 更新任务总数量
          this.handleTaskChange()
        })

      // 3、任务列表
      List({space: 10}) {
        ForEach(
          this.tasks,
          (item: Task, index) => {
            ListItem() {
              Row() {
                // 任务名
                Text(item.name)
                  .fontSize(20)
                // 任务复选框
                Checkbox()
                  .select(item.finished)
                  .onChange(isSelected => {
                    // 任务状态发生变更,更新当前任务状态
                    item.finished = isSelected
                    // 更新已完成任务数量
                    this.handleTaskChange()
                  })
              }
              .card()
              .justifyContent(FlexAlign.SpaceBetween)
            }
            .swipeAction({end: this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .layoutWeight(1)
      .alignListItem(ListItemAlign.Center)
    }
  }

  @Builder DeleteButton(index: number) {
    Button(){
      Image($r('app.media.icon'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(() => {
      // 从角标开始删 删1个
      this.tasks.splice(index, 1)
      this.handleTaskChange()
    })
  }
}

/**
 * 任务进度卡片 子组件
 * 子组件是TaskStatistics  此时父组件是PropPage.ets
 * Prop:变量不能初始化 单向同步【父组件-->子组件】
 * Link:支持传对象 Prop:不支持传对象
 * provider 跨组件传输
 * consume 跨组件传输
 */
@Component
struct TaskStatistics {
  // 统计信息
  @Consume stat: StatInfo

  build() {
    Row() {
      // 任务进度
      Text('任务进度')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)

      // 堆叠容器
      Stack() {
        // 进度条
        Progress({
          value: this.stat.finishTask,
          total: this.stat.totalTask,
          type: ProgressType.Ring
        })

        // 1/5
        Row() {
          Text(this.stat.finishTask.toString())
            .fontSize(24)
            .fontColor('#36D')
          Text(' / ' + this.stat.totalTask.toString())
            .fontSize(24)
        }
      }
    }
    .card()
    .margin({top: 20, bottom: 20})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}

// bind(this)

/**
 * 自定义任务类
 */
@Observed
class Task {
  // 静态变量,所有对象共享变量
  static id: number = 1
  // 任务名称   半角:``
  name: string = `任务${Task.id++}`
  // 任务状态:是否完成
  finished: boolean = false
}

// 统一的卡片样式
@Styles function card() {
  .width('95%')
  .padding(20)
  .backgroundColor(Color.White)
  .borderRadius(15)
  .shadow({radius: 6, color: '#1F000000', offsetX: 2, offsetY: 4})
}

// 任务完成样式
@Extend(Text) function finishedTask() {
  .decoration({type: TextDecorationType.LineThrough})
  .fontColor('#B1B2B1')
}

// 任务统计信息的实体类
class StatInfo {
  totalTask: number = 0;
  finishTask: number = 0;
}

/**
 * 父组件
 */
@Entry
@Component
struct PropPage {
  // 统计信息  【父亲】
  @Provide stat: StatInfo = new StatInfo()


  build() {
    Column({space: 10}){
      // 任务进度卡片 子组件
      TaskStatistics()

      // 任务列表,包含新增任务 @Link totalTask:$finishTask:变量的引用
      TaskList()
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#F1F2F3')
  }
}

@Component
struct TaskList {
  // 统计信息【儿子】  Link可以传对象
  @Consume stat: StatInfo

  // 任务数组
  @State tasks: Task[] = []

  handleTaskChange(){
    // 更新任务总数量
    this.stat.totalTask = this.tasks.length
    // 更新已完成任务数量
    this.stat.finishTask = this.tasks.filter(item => item.finished).length
  }

  build() {
    Column() {
      // 2、新增任务按钮
      Button('新增任务')
        .width(200)
        .onClick(() => {
          // 新增任务数据
          this.tasks.push(new Task())
          // 更新任务总数量
          this.handleTaskChange()
        })

      // 3、任务列表
      List({space: 10}) {
        ForEach(
          this.tasks,
          (item: Task, index) => {
            ListItem() {
              // bind(this)  绑定父组件的this
              TaskItem({item: item, onTaskChange: this.handleTaskChange.bind(this)})
            }
            .swipeAction({end: this.DeleteButton(index)})
          }
        )
      }
      .width('100%')
      .layoutWeight(1)
      .alignListItem(ListItemAlign.Center)
    }
  }

  @Builder DeleteButton(index: number) {
    Button(){
      Image($r('app.media.icon'))
        .fillColor(Color.White)
        .width(20)
    }
    .width(40)
    .height(40)
    .type(ButtonType.Circle)
    .backgroundColor(Color.Red)
    .margin(5)
    .onClick(() => {
      // 从角标开始删 删1个
      this.tasks.splice(index, 1)
      this.handleTaskChange()
    })
  }
}

/**
 * 自定义任务的item项
 * 方法传递
 */
@Component
struct TaskItem {
  @ObjectLink item: Task
  // 变量的类型是个函数类型
  onTaskChange: () => void

  build() {
    Row() {
      // 任务名 如果完成,需要变灰
      if (this.item.finished) {
        Text(this.item.name)
          .fontSize(20)
          .finishedTask()
      } else {
        Text(this.item.name)
          .fontSize(20)
      }
      // 任务复选框
      Checkbox()
        .select(this.item.finished)
        .onChange(isSelected => {
          // 任务状态发生变更,更新当前任务状态
          this.item.finished = isSelected
          // 更新已完成任务数量
          //this.handleTaskChange()
          this.onTaskChange()
        })
    }
    .card()
    .justifyContent(FlexAlign.SpaceBetween)
  }
}

/**
 * 任务进度卡片 子组件
 * 子组件是TaskStatistics  此时父组件是PropPage.ets
 * Prop:变量不能初始化 单向同步【父组件-->子组件】
 * Link:支持传对象 Prop:不支持传对象
 * provider 跨组件传输
 * consume 跨组件传输
 */
@Component
struct TaskStatistics {
  // 统计信息
  @Consume stat: StatInfo

  build() {
    Row() {
      // 任务进度
      Text('任务进度')
        .fontSize(30)
        .fontWeight(FontWeight.Bold)

      // 堆叠容器
      Stack() {
        // 进度条
        Progress({
          value: this.stat.finishTask,
          total: this.stat.totalTask,
          type: ProgressType.Ring
        })

        // 1/5
        Row() {
          Text(this.stat.finishTask.toString())
            .fontSize(24)
            .fontColor('#36D')
          Text(' / ' + this.stat.totalTask.toString())
            .fontSize(24)
        }
      }
    }
    .card()
    .margin({top: 20, bottom: 20})
    .justifyContent(FlexAlign.SpaceEvenly)
  }
}

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

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

相关文章

蚂蚁集团CodeFuse 发布“图生代码”功能,支持产品设计图一键生成代码

4月11日&#xff0c;蚂蚁集团自研的智能研发平台CodeFuse推出“图生代码”新功能&#xff0c;支持开发人员用产品设计图一键生成代码&#xff0c;大幅提升前端页面的开发效率。目前相关功能正在内测。 和很多互联网公司一样&#xff0c;蚂蚁集团正在内部全面推行AI编程&#x…

Ubuntu-22.04安装Virtualbox并安装Windows10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Virtualbox是什么&#xff1f;二、安装Virtualbox1.关闭Secure Boot2.安装 三、安装Windows101.新装虚拟机基本配置2.新装虚拟机核心配置 总结 前言 虚拟机…

2023图灵奖得主揭晓!史上首位计算机和数学最高奖“双料王”诞生

重磅消息&#xff01;北京时间4月10日下午5点整&#xff0c;ACM宣布把2023年图灵奖颁给Avi Wigderson&#xff0c;以表彰Wigderson对计算理论和随机性做出的奠基性贡献。 ACM图灵奖通常被称为“计算机领域的诺贝尔奖”&#xff0c;奖金为100万美元&#xff0c;通常颁发给计算机…

优思学院|过程能力指数CPK是谁发明的?

CPK指数的发明并没有明确归功于某个特定的个人。 它是质量管理和统计过程控制领域中的一个概念&#xff0c;是在多年的实践和研究中逐渐发展形成的。Cpk作为衡量过程性能的工具之一&#xff0c;其理论基础主要来源于统计过程控制&#xff08;SPC&#xff09;和质量管理的原理&…

软件建模与设计 —— 入门

序言 对于软件建模与设计&#xff0c;非科班出身的同学可能和我一样比较陌生&#xff0c;虽然日常开发中也涉及到建模&#xff0c;但是并没有系统的学习过软件建模设计。类似于设计模式&#xff0c;软件建模与设计也有一套三板斧。 设计模式 创建型模式提供了创建对象的机制…

基于GAN的多变量时间序列污染训练集异常检测

论文地址&#xff1a;https://ieeexplore.ieee.org/document/9618824 论文源码&#xff1a;https://github.com/sxxmason/FGANomaly 期刊&#xff1a;IEEE Transactions on Knowledge and Data Engineering 多元时间序列异常检测在结构健康监测、智能运维、量化交易等诸多实际…

【C++】模版

目录 一、泛型编程二、函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三、类模板3.1 类模板的定义格式3.2 类模板的实例化 四、非类型模板参数五、模板的特化5.1 概念5.2 函数模板特化5.3 类模板特化5.3.1 全特化5.3…

google map POI获取

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、需求背景 因业务发展&#xff0c;需获取全美(或任意国家)所有POI(标记点)信息&#xff0c;包括mark_id、mark_name、address、numb…

JavaThread线程

目录 程序--进程--线程 程序&#xff1a; 进程&#xff1a; 线程&#xff1a; 进程和线程的关系 创建线程 单线程模式 代码 图解 运行 代码 运行 创建线程 方式一 代码 运行 方式二 代码 运行 总结&#xff1a; Thread类中常用的方法 1、 代码 运行…

python统计分析——一般线性回归模型

参考资料&#xff1a;python统计分析【托马斯】 当我想用一个或多个其他的变量预测一个变量的时候&#xff0c;我们可以用线性回归的方法。 例如&#xff0c;当我们寻找给定数据集的最佳拟合线的时候&#xff0c;我们是在寻找让下式的残差平方和最小的参数(k,d)&#xff1a; 其…

YooAsset快速入门

文章目录 YooAsset快速入门指南&#xff1a;YooAsset学习核心要掌握的要点主要包括以下几个方面&#xff1a;基于YooAsset进行游戏资源管理的应用实例 YooAsset快速入门指南&#xff1a; YooAsset是一款专为游戏开发设计的资产管理和分发系统&#xff0c;它能够帮助开发者高效…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan&#xff0c;定时任务解决 挖矿病毒会隐藏chattr的操作权限&#xff0c;让我们无法删除病毒文件&#xff0c;杀掉病毒进程。所以要去下载chattr.c的文件&#xff0c;编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

Redis Pipelining 底层原理分析及实践

作者&#xff1a;vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务。在遇到批处理命令执行时&#xff0c;Redis提供了Pipelining(管道)来提升批处理性能。本文结合实践分析了Spring Boot框架下Redis的Lettuce客户端和Redisson客户端对P…

openlayers 入门教程(六):controls 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

curl: (60) Peer‘s Certificate issuer is not recognized curl请求报错

此种情况多发生在自签名的证书或者证书和域名不对&#xff0c;报错含义是签发证书机构未经认证&#xff0c;无法识别。解决办法就是替换证书&#xff08;补充证书机构&#xff09;文件就好&#xff0c;如果没有可用的证书可以去Gworg申请一个。

从零到部署指南:Ubuntu上安装Boost和Crow库

1.安装boost 在安装Crow之前&#xff0c;需要确保您的系统中已经安装了Boost库。以下是Boost库安装步骤&#xff1a; 首先&#xff0c;从Boost官方网站或通过特定的链接下载Boost的源码&#xff0c;boost源码具体可参看这个链接&#xff1a; https://blog.csdn.net/duan199201…

Mongodb入门--头歌实验MongoDB 数据库基本操作

MongoDB 中聚合( aggregate )主要用于处理数据(诸如统计平均值,求和等)&#xff0c;并返回计算后的数据结果&#xff0c;通常由聚合管道操作符和聚合表达式组合&#xff0c;完成数据处理。功能有点类似 Sql 语句中的 sum()、agv() 等。 一、聚合管道操作符将文档定制格式输出&…

如何在 MySQL 中开启日志记录并排查操作记录

在数据库管理中&#xff0c;能够追踪和审查操作记录是至关重要的。这不仅有助于识别和分析正常的数据库活动&#xff0c;还可以在数据泄露或未经授权的更改发生时进行调查和响应。本文将介绍如何在 MySQL 中开启通用日志记录&#xff0c;并如何排查操作记录。 开启 MySQL 通用…

使用 EFCore 和 PostgreSQL 实现向量存储及检索

随着 ChatGPT 的兴起及其背后的 AIGC 产业不断升温,向量数据库已成为备受业界瞩目的领域。FAISS、Milvus、Pinecone、Chroma、Qdrant 等产品层出不穷。市场调研公司 MarketsandMarkets 的数据显示,全球向量数据库市场规模预计将从 2020 年的 3.2 亿美元增长至 2025 年的 10.5…

机器学习—无量纲化和降维(四)

什么是特征预处理&#xff1f; 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化&#xff1a; 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化&#xff1f; 特征的单位或者大小相差较大…