HarmonyOS鸿蒙应用开发——ArkTS的“内置组件 + 样式 + 循环和条件渲染”

news2025/3/18 23:21:18

一、内置组件是咩?

学过前端的都知道,一个组件就是由多个组件组成的,一个组件也可以是多个小组件组成的,组件就是一些什么导航栏、底部、按钮......啥的,但是组件分为【自定义组件】跟【内置组件】

【自定义组件】就是我们想要一个什么样的一块元素,就用一堆内置组件通过我们自己设置属性啥的,组合成一个【自定义组件】。

【内置组件】就是ArkTS原本就有的组件:图片、按钮、行元素、块元素、视频、音频.....

二、内置组件的简单写法

组件名( )

有的组件需要往“( )”里带参数,比如图片组件要带“路径参数”;有的就不用,但是不用参数也必须带上“( )”

然后如果要调整它的样式,就在【组件名( )】后.属性1( 值 ).属性2( 值 )......但是注意,有些属性是所有组件通用的,有些是各个组件自己特有的

例子:

三、各个内置组件

1、图片

图片组件【Image( )】,只需要往( )里传入图片路径即可用,但是有三种图片路径参数形式:

这里提示一下

我们的图片一般就放在【resources】目录下的【base.media】或【rawfile】

 $r() 一般对应【base.media】的图片,当然也可以是别的目录,写的时候就是【app.别的目录.图片名】

 $rawfile() 则是对应【rawfile】的图片,这个目录就不能改了,要真的用到【rawfile】里有的图片

示例:

第一种网络图片路径例子

但其实只是在这个模拟运行器里可以显示这个网络地址的图片,要是在真的模拟器或者手机上,就会显示不出来,这是因为没有申请网络访问权限

怎么申请网络访问权限?

官方文档:文档中心

找到在module.json5配置文件,在module下面复制这块配置代码(要了解为什么这么配置以后再说)

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  }
],

第二种少用,就不演示了;

第三种本地路径的例子:

然后我们会发现有时候图片放大会有矩尺模糊、不好看,就需要用到图片组件的一个【特有属性】:.interpolation( )

当然如果我们记不住这么多属性,可以查看鸿蒙的内置API文档

点击【Help】——>点击【API Reference】就出来了API文档

然后搜索组件名,点到【ArkTS】就能看到属性详情

看外边框能看出一点差别

2、文字

文字组件【Text( )】

然后这里先提一下【resouces】这个目录的文件结构

【base】可以理解为一个默认基础陌路

下面的【en_US(英文)】【zh_CN(中文)】就是限定词目录,根据我们有什么限定词目录,将来翻译一些文本文件时,就可以找到对应的限定词目录的json文件的对应的内容

然后【限定词目录】的string.json文件里有的变量,在【base】也必须要有

第一种静态文字例子:

第二种根据本地源文件的变量显示的文字例子:

那我们刚刚设置了MyName这个变量的英文版,怎么看英文版?看下图

3、输入框

输入框组件【TextInput】

其中.type()属性有以下属性值

(注意,这些属性只是输入的【约束】,而非【校验】,校验需要我们自己手动)

名称描述
InputType.Normal基本输入模式。支持输入数字、字母、下划线、空格、特殊字符
InputType.Password密码输入模式。支持输入数字、字母、下划线、空格、特殊字符
InputType.Email邮箱地址输入模式。支持数字,字母,下划线,以及@字符
InputType.Number纯数字输入模式
InputType.PhoneNumber电话号码输入模式。支持输入数字、+、-、*、#     长度不限

例子:

然后我们来做一个案例,用输入框输入的不同数字,当成一个变量,这个变量根据输入的数字来动态改变,同时还作为图片的宽度来控制图片大小

那么我们首先第一步:挂载、声明当前页面的这个变量

第二步:在用的地方 this.变量 就行了

看到这里,老铁们是不是觉得很熟悉,跟vue的data差不多

然后注意这里有个报错:输入的是一个string类型,不能让number类型的这个变量接收。可是我明明输入框的类型是数字啊

这是因为输入框其实一个“ 文本框 ”,即使输入的是数字,也只是字符串类型的数字,所以要把输入的 “ 字符串数字 ”转化成 “ 真数字 ” ,方法跟java的字符串转数字差不多【parseInt(字符串)】

还有,数字转字符串是 .toFix() ,括号里的参数值是保留的小数点位,0就是没有小数

4、按钮

按钮组件【Button】

其中.type( ) 有一下几种值

名称描述
ButtonType.Capsule胶囊型按钮(圆角默认为高度的一半)
ButtonType.Circle圆形按钮
ButtonType.Normal普通按钮(默认不带圆角)

过于简单,直接看代码演示吧:

5、滑动条组件

这个玩意我们学HTML的时候就没有了,ArkTS特有的滑动条组件【Slider()】

示例:

注意一点,粗细不是靠高度来调的

完整的

8、行容器跟列容器

这个更简单,记住了【Column列容器】从上往下纵向排元素,【Row行容器】从左往右横向排元素

用HTML理解:【Column】=【div】,【Row】=【block】

用uniapp理解:【Column】=【view】,【Row】=【text】

然后调整这两个容器的布局通过下面这些属性:

这一看,老铁们熟悉得不能再熟悉了,对,就是CSS里面的【Flex弹性布局】啊!

就是有一点不同,主轴的属性值要FlexAlign.排列值(center、SpaceBetween、SpaceEvenly......)

然后交叉轴Column容器HorizontaAlign.排列值,Row容器VerticalAlign.排列值

【Column容器的主轴方向排列参数】

【Column容器的交叉轴方向排列参数】

【Row容器的主轴方向排列参数】

【Row容器的交叉轴方向排列参数】

示例:

这里强调一点!!!!!!

想要这些排列值生效必须必须必须!!!把要排列的方向设置好宽或者高

比如我希望一个Row容器里的元素自左往右均匀排列,那么我首先必须设置主轴的长度,也就是宽度!!这样才能根据宽度这个值来做参照,自动横向排列;

我希望一个Column容器里的元素自上往下均匀排列,我就要先设置好高,这样才能根据高度值做参照,自动纵向排列。

总结

四、样式

这个ArkTS的样式真是不想吐槽,对于我这种习惯了css、less、Vue......语法的人来说,真的麻烦得要死,大致上有些语法还是能用,但是还是有很多地方不一样:

像素单位

相信各位注意到了,我前面那么多例子里,没有出现过【px】、【vh】、【rpx】、【upx】这些常见单位

在ArkTS语法里,像素单位不需要写了,“组件()”这里取而代之的单位有两种形式:

  - 要么直接填数值

.height(100)

  - 要么填百分比,但是百分比形式必须要是字符串形式

.width('100%')

外边距、内边距

1、直接设置4个边的外边距的话,跟css一样直接写一个值就好

//内边距
.padding(20)

//外边距
.margin(20)

2、如果你只要设置一边的有边距,在css的写法是:margin-top: ...padding-left: ...、......

或者:margin:  上值 左值 下值 右值padding: 上值 左值 下值 右值......

但是在ArkTS的写法是往【.margin( )】传入个对象参数,要哪个方向的边距就在对象设置:{ 方向1:值 , 方向2:值 , ...... }

//左右有内边距
.padding({ left: 10 , right: 10 })

//上边有外边距
.margin({ top: 10 })

边框

css的写法贼鸡儿简单:

四边都有边框的话就是:border: 粗细  类型(虚线、实现...)  颜色

只要一边有边框就是:border-left: 粗细  类型(虚线、实现...)  颜色、border-top: 粗细  类型(虚线、实现...)  颜色 ......

但是ArkTS贼麻烦,记住了:

1、四边都有边框的话,颜色、粗细、类型啥的都有对应的属性名:

.borderWidth(1)                    //粗细
.borderColor('#afefef')            //颜色
.borderStyle(BorderStyle.Solid)    //线类型

当然也可以通过传对象的方式,把这些值全都放到一个对象传给【border( )

.border({style: BorderStyle.Solid, width: 1,color: Color.Gray })

2、只要一个边的话,按各个属性名的方式写的话,每个属性里都传一个对象参数,对象里是对应的方向

.borderWidth({ bottom: 1 })
.borderColor({ bottom: '#afefef' })
.borderStyle({ bottom: BorderStyle.Solid })

或者按第二种传对象的方式,每个对象的值还是对象

.border({
   style: { bottom: BorderStyle.Solid }, 
   width: { bottom: 1 },
   color: { bottom: Color.Gray }
})

3、然后圆角的话也是,四个角都是圆角的话就直接写一个值

.borderRadius(20)

如果是只要单独某几个角,而不是四个角,还是传对象值

.borderRadius({ 
   topLeft: 20,
   topRight: 20,
   bottomLeft: 20,
   bottomRight: 20
})

然后圆角的值也可以作为对象值,直接传入【border( )

属性值

还有,注意一些属性值,跟我们css理解的属性值不一样,比如:

颜色,单词类型的不是:blueblackwhiteyellow......,而是Color.BlueColor.BlackColor.WhiteColor.Yellow......

边框的线的类型不是: soliddotteddashed,而是BorderStyle.SolidBorderStyle.DottedBorderStyle.Dashed

主轴排列justifyContent也不是:centerstartendspaceBetweenspaceAroundspaceEvenly,而是FlexAlign.Center FlexAlign.StartFlexAlign.EndFlexAlign.SpaceBetweenFlexAlign.SpaceAroundFlexAlign.SpaceEvenly

这里只说常见的,还有很多我就不一一列举了,以后用到的时候翻阅文档就知道了

五、循环

也很简单,就是Vue里面的v-for,只不过Vue是在<标签>里用v-for绑定数组名,它这个直接用ForEach()循环包住整个要循环的元素,也没问题,转换一下思维就好理解了

然后呢这玩意其实就是v-key

做个简单示例:

首先定义一个简单类

然后定义一个成员都是这个“ Item ”对象的数组

接下来直接循环它

有点难看,我们再调整一下样式,根据前面学的【Column】、【Row】,我们把 “ 图片 ” 和 “ 文字 ” 放到一个【Row容器】里左右排列,然后把文字部分的 “ item.name手机名字 ” 和  “ item.price手机价格 ” 放到一个【Column容器】里上下排列,然后再加点背景颜色、边框、外边距啥的,就nice了

但是还有问题!其实我们的元素是在整个页面居中排列的,现在是因为数组的成员多才撑到了顶

我们去掉几个元素,就会发现它是居中排列的

可是咱们要的是从页面顶部自上往下排列啊,那就要设置整个包住中间这些元素的Column容器,沿着主轴方向从开头排列【FlexAlign.Start】

用List()跟ListItem组件让页面可滑动

还没完......我们发现写完这个案例,没办法拖动屏幕看下面挡住的内容

就要加一个【List( )】这个组件包住【循环】,【List()】这个组件就是把这一块作为可滑动的区域。然后这个【List( )】里面必须必须必须包含有一个【ListItem( )】组件,这两组件暂时了解这么多够了

说白了【List( )】就是代替【Column容器】

完整样例代码:

//ArkTS的类的定义方法
class Item {
  //定义变量成员
  name: string
  imgUrl: string
  price: number
  discount: number
  //构造函数
  //换成java的写法:public Item(String name,String imgUrl,Int price)
  //discount: number = 0的意思是,可以不传这个参数,不传的话就默认是0
  constructor(name: string, imgUrl: string, price: number, discount: number = 0) {
    this.name = name
    this.imgUrl = imgUrl
    this.price = price
    this.discount = discount
  }
}
@Entry
@Component
struct Goods{
  private List: Array<Item> = [
    new Item('华为','https://gd-hbimg.huaban.com/a6d955ef4df395c734766c2ac56581123756c9c738a84-Jy0kKX_fw480webp',6999,500),
    new Item('苹果','https://gd-hbimg.huaban.com/6b9a7c00dc59e3d60aad6d714556414597ba8a1889ad8d-ECDC3P_fw480webp',7900),
    new Item('黄金手机','https://gd-hbimg.huaban.com/4569250f8d17c98d95a22914a2ca3a2e6edbb64b53233-J8uXwa_fw480webp',10000),
    new Item('小米','https://gd-hbimg.huaban.com/49626e33a18e743dd935d21f80c503917e14a4c612f5c-3wjWTv_fw480webp',2000),
    new Item('黑莓','https://gd-hbimg.huaban.com/cfa621505f7b96b05f66851639bf6c0b941f0e3e2c24e-b4Y08n_fw480webp',3450),
    new Item('诺基亚','https://gd-hbimg.huaban.com/dbce23ae86918485a72c3b568d2827e1fa77087cddca-UJdsZc_fw480webp',6000)
  ]
  build() {
      Column({space: 20}) {
        Text('岑梓铭黑心手机店')
          .width('100%')
          .height(40)
          .fontSize(34)
          .fontWeight(500)
          .margin({top: 20,left: 70})

        List({ space: 10 }){
            ForEach(
                this.List,
                (item:Item , index:Number) => {
                  ListItem(){
                      Row({space: 30}){
                        Image(item.imgUrl)
                          .height(120)
                          .width(80)
                          .margin({
                            left: 30
                          })

                        Column(){
                              Text(item.name).fontSize(28)

                              Text('$ '+item.price.toFixed(0)).fontSize(23).fontColor(Color.Red)

                        }
                        .height(130)
                        .justifyContent(FlexAlign.SpaceEvenly)
                      }

                  }
                  .backgroundColor("#efefef")
                  .width('90%')
                  .borderRadius(20)
                  .borderWidth(1)
                  .borderColor('#afefef')
                  .borderStyle(BorderStyle.Solid)
                  .borderRadius(20)

                  .border({
                    style: BorderStyle.Solid,
                    width: 1,
                    color: Color.Gray,
                    radius: 20
                  })
                }
            )
        }
        .width('100%')
        //List按比例配高度,不写它的情况下就默认是0,那就默认自己配多高height就是多高
        //如果是1,那么就按比例,上面的元素是0,那么下面所有的高度都属于这个配了.layoutWeight(1)的元素
        .layoutWeight(1)
        .alignListItem(ListItemAlign.Center)

      }
      .width('100%')
      //【第一】要想以Column的纵向排列,就必须设置高度,这样才能根据高度来排列
      .height('100%')
      //【第二】然后现在就可以根据Column的主轴的纵向,通过FlexAlign.Start从上往下排列了
      .justifyContent(FlexAlign.Start)
      .backgroundColor('#afafaf')
  }
}

六、条件渲染

vue里的条件渲染是在<标签元素>里绑定 【v-if】、【v-else】、【v-show】

而ArkTS这里是直接在循环里写if-else,比较符合普通的编程语言的条件判断

那么我们在上面的案例增加一个条件渲染:当有折扣的时候,显示折扣,没有就照常按原样显示

修改后的完整代码:

//ArkTS的类的定义方法
class Item {
  //定义变量成员
  name: string
  imgUrl: string
  price: number
  discount: number
  //构造函数
  //换成java的写法:public Item(String name,String imgUrl,Int price)
  //discount: number = 0的意思是,可以不传这个参数,不传的话就默认是0
  constructor(name: string, imgUrl: string, price: number, discount: number = 0) {
    this.name = name
    this.imgUrl = imgUrl
    this.price = price
    this.discount = discount
  }
}
@Entry
@Component
struct Goods{
  private List: Array<Item> = [
    new Item('华为','https://gd-hbimg.huaban.com/a6d955ef4df395c734766c2ac56581123756c9c738a84-Jy0kKX_fw480webp',6999,500),
    new Item('苹果','https://gd-hbimg.huaban.com/6b9a7c00dc59e3d60aad6d714556414597ba8a1889ad8d-ECDC3P_fw480webp',7900),
    new Item('黄金手机','https://gd-hbimg.huaban.com/4569250f8d17c98d95a22914a2ca3a2e6edbb64b53233-J8uXwa_fw480webp',10000),
    new Item('小米','https://gd-hbimg.huaban.com/49626e33a18e743dd935d21f80c503917e14a4c612f5c-3wjWTv_fw480webp',2000),
    new Item('黑莓','https://gd-hbimg.huaban.com/cfa621505f7b96b05f66851639bf6c0b941f0e3e2c24e-b4Y08n_fw480webp',3450),
    new Item('诺基亚','https://gd-hbimg.huaban.com/dbce23ae86918485a72c3b568d2827e1fa77087cddca-UJdsZc_fw480webp',6000)
  ]
  build() {
      Column({space: 20}) {
        Text('岑梓铭黑心手机店')
          .width('100%')
          .height(40)
          .fontSize(34)
          .fontWeight(500)
          .margin({top: 20,left: 70})

        List({ space: 10 }){
            ForEach(
                this.List,
                (item:Item , index:Number) => {
                  ListItem(){
                      Row({space: 30}){
                        Image(item.imgUrl)
                          .height(120)
                          .width(80)
                          .margin({
                            left: 30
                          })

                        Column(){
                          //当有discount这个成员时,显示折扣价这些
                          if( item.discount ){
                              Text(item.name).fontSize(28)

                              Text('原价:$ ' + item.price.toFixed(0))
                                .fontSize(19).fontColor(Color.Gray)
                                //这是添加删除横线,TextDecorationType还有下划线、去掉线......
                                .decoration({type: TextDecorationType.LineThrough})

                              Text('折扣价:$ ' + (item.price - item.discount).toFixed(0))
                                .fontSize(23).fontColor(Color.Red)

                              Text('补贴:$ ' + item.discount.toFixed(0))
                                .fontSize(20)
                          }else{
                              Text(item.name).fontSize(28)

                              Text('$ '+item.price.toFixed(0)).fontSize(23).fontColor(Color.Red)
                          }

                        }
                        .height(130)
                        .justifyContent(FlexAlign.SpaceEvenly)
                      }

                  }
                  .backgroundColor("#efefef")
                  .width('90%')
                  .borderRadius(20)
                  .borderWidth(1)
                  .borderColor('#afefef')
                  .borderStyle(BorderStyle.Solid)
                  .borderRadius(20)

                  .border({
                    style: BorderStyle.Solid,
                    width: 1,
                    color: Color.Gray,
                    radius: 20
                  })
                }
            )
        }
        .width('100%')
        //List按比例配高度,不写它的情况下就默认是0,那就默认自己配多高height就是多高
        //如果是1,那么就按比例,上面的元素是0,那么下面所有的高度都属于这个配了.layoutWeight(1)的元素
        .layoutWeight(1)
        .alignListItem(ListItemAlign.Center)

      }
      .width('100%')
      //【第一】要想以Column的纵向排列,就必须设置高度,这样才能根据高度来排列
      .height('100%')
      //【第二】然后现在就可以根据Column的主轴的纵向,通过FlexAlign.Start从上往下排列了
      .justifyContent(FlexAlign.Start)
      .backgroundColor('#afafaf')
  }
}

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

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

相关文章

微信小程序毕业设计-智慧旅游平台系统项目开发实战(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【Python】【Scrapy 爬虫】理解HTML和XPath

为了从网页中抽取信息&#xff0c;必须对其结构有更多了解。我们快速浏览HTML、HTML的树状表示&#xff0c;以及在网页上选取信息的一种方式XPath。 HTML、DOM树表示以及XPath 互联网是如何工作的&#xff1f; 当两台电脑需要通信的时候&#xff0c;你必须要连接他们&#xff…

【数据结构与算法篇】二叉树链式结构及实现

【数据结构与算法篇】二叉树链式结构及实现 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 4. 二叉树链式结构的实现 4.1 前置说明 4.2 二叉树的遍历 4.2.1 前序、中序以及…

材料物理 笔记-9

原内容请参考哈尔滨工业大学何飞教授&#xff1a;https://www.bilibili.com/video/BV18b4y1Y7wd/?p12&spm_id_frompageDriver&vd_source61654d4a6e8d7941436149dd99026962 或《材料物理性能及其在材料研究中的应用》&#xff08;哈尔滨工业大学出版社&#xff09; ——…

C++:List的使用和模拟实现

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers …

【算法】前缀和算法——和为k的子数组之和

题解&#xff1a;和为k的子数组之和(前缀和算法) 目录 1.题目2.题解思路2.1前缀和 哈希表&#xff0c;算法步骤&#xff1a;2.2细节如下&#xff1a;2.3参考代码&#xff1a; 3.总结及思考 1.题目 题目链接&#xff1a;LINK 2.题解思路 暴力求解自然不用多说&#xff0c;时…

七大经典排序算法——冒泡排序

文章目录 &#x1f4d1;冒泡排序介绍&#x1f324;️代码实现&#x1f324;️做个简单的优化&#x1f324;️复杂度和稳定性分析☁️结语 &#x1f4d1;冒泡排序介绍 冒泡排序是一种简单但效率较低的排序算法。它重复地比较相邻的两个元素&#xff0c;如果顺序不对则交换它们&…

刷题之路径总和Ⅲ(leetcode)

路径总和Ⅲ 这题和和《为K的数组》思路一致&#xff0c;也是用前缀表。 代码调试过&#xff0c;所以还加一部分用前序遍历数组和中序遍历数组构造二叉树的代码。 #include<vector> #include<unordered_map> #include<iostream> using namespace std; //Def…

著名书法家王杰宝做客央视频《笔墨写人生》艺坛人物经典访谈节目

印象网北京讯&#xff08;张春兄、冯爱云&#xff09;展示艺术风采&#xff0c;构建时代精神。5月25日&#xff0c;著名书法家、羲之文化传承人王杰宝&#xff0c;做客央视频《笔墨写人生》艺坛人物经典访谈节目&#xff0c;与中央电视台纪录频道主持人姚文倩一起&#xff0c;分…

web前端框架设计第十课-组件

web前端框架设计第十课-组件 一.预习笔记 组件&#xff1a;Vue最强大的功能之一 1.局部组件注册 注意事项&#xff1a;template标签中只能有一个根元素 2.全局组件的注册 注意事项&#xff1a;组件名的大小写需要注意&#xff08;实践&#xff09; 3.案例&#xff08;查询框…

解决 Failed to parse remote port from server output【Remote-SSH】【VSCode】

描述 一早起来&#xff0c;发现remote-ssh无法进入服务器容器&#xff0c;本地使用git bash进行ssh可正常连接服务器&#xff0c;基本确定是vscode工具本身的问题。重装本地用户的.vscode相关目录清空&#xff0c;vscode重装均无果&#xff0c;不建议尝试。弹窗信息为Could no…

SpringBoot高级原理详解

文章目录 1 SpringBoot自动化配置原理01-SpringBoot2高级-starter依赖管理机制02-SpringBoot2高级-自动化配置初体验03-SpringBoot2高级-底层原理-Configuration配置注解04-SpringBoot2高级-底层原理-Import注解使用105-SpringBoot2高级-底层原理-Import注解使用206-SpringBoot…

【ARM 裸机】按键输入

本节学习按键输入&#xff0c;先拷贝上一节工程文件&#xff0c; 1、驱动编写 新建 key 的 .h 和 .c 文件&#xff1b; 再查看一下硬件原理图如下&#xff1b; 由此可知&#xff0c;KEY0 按键接在 UART1_CTS 引脚上&#xff0c;默认情况下为高电平&#xff0c;按键按下为…

AI大模型探索之路-基础篇5:GLM-4解锁国产大模型的全能智慧与创新应用

目录 前言一、GLM4大模型总体概述二、GLM4和GPT4功能对比三、GLM4和GPT4性能对比1、基础能力&#xff08;英文&#xff09;2、指令跟随能力3、对齐能力4、长文本能力5、多模态-文生图 四、GLM-4 ALL Tools1、文生图2、代码解释器3、网页浏览4、Function Call5、多工具自动调用 …

CHI dataless 传输——CHI(4)

上篇介绍了read的操作类型&#xff0c;本篇我们来介绍一下dataless 目录 一、dataless操作概览 二、Non-CMO (Non-Cache Maintenance Operation) 1、CleanUnique 2、StashOnce and StashOnceSep 3、Evict 三、CMO (Cache Maintenance Operation) 一、dataless操作概览 名…

洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)

洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t &#xff08;树形 d p &#xff09; \Huge{洛谷P3574 [POI2014] FAR-FarmCraft&#xff08;树形dp&#xff09;} 洛谷P3574[POI2014]FAR−FarmCraft&#xff08;树形dp&#xff09; 文章目录 题意题目说明 思路标程 题目…

使用git生成SSH公钥,并设置SSH公钥

1、在git命令行里输入以下命令 ssh-keygen -t rsa 2、按回车&#xff0c;然后会看到以下字眼 Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa) 例&#xff1a; 3、继续回车&#xff0c;然后会看到以下字眼 Enter…

等保三级云防火墙正版--免费部署满足要求

正版授权内部部署配置授权免费 1、超时退出 2、病毒防护 3、防火墙策略 4、密码复杂度和登录失败处理 5、特征库 点赞关注 私信获取 获取授权 Q 8-5-0-3-4-7-3-3-5

Python--面向对象

面向对象⭐⭐ 1. 面向对象和面向过程思想 面向对象和面向过程都是一种编程思想,就是解决问题的思路 面向过程&#xff1a;POP(Procedure Oriented Programming)面向过程语言代表是c语言面向对象&#xff1a;OOP(Object Oriented Programming)常见的面向对象语言包括:java c g…

C++初阶之模板进阶

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.非类型模板参数 二.模板的特化 2.1引入 2.2全特化 2.3…