HarmonyOS学习

一,DevEoc Studio基本内容学习

项目工程目录

entry 默认的项目入口模块

ets 界面相关文件(目前都放入pages文件内即可)

resource资源文件,配置文件

index.est默认文件

        ’ @ ‘开头的一般为装饰器,修饰功能,来约定后面代码的功能

        Entry项目入口

        @Component 约定下方代码为组件

(鸿蒙中,界面中能看到的都是组件)

        @State约定后面的代码为状态,数据变视图,自动更新(数据驱动视图)

        bulid()构建界面,文字等等 

        系统组件:RelativeContainer     Text

@Entry
@Component
struct Index {@State message: string = 'Hello HM';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})}.height('100%').width('100%')}
}

二,ArkTs学习

1.变量和类型

使用变量存储不同类型的数据:状态信息(布尔类型boolean),文字信息(字符串类型string),数字信息(数字类型number)

any不确定类型(只能在TS中使用,不能在ArkTS中使用)

变量:存储数据的容器

存储方式:【    let  变量名:数据类型 = 值     】

*在日志中输出小括号中的内容

console.log()

测试:在日志中查看输出信息

日志并不会自动清空,右键清空

//注释:crtl+/
//声明变量,保存数据  string字符串类型
let title:string='创意橘子花瓶'
//日志输出
console.log('商品标题是',title)let count:number=1
console.log('购买数量',count )let isSelect:boolean=true
console.log('订单选中了吗?',isSelect)

2.数组

数组:一次性保存多个同类型数据

数组也是容器,用来存储多个数据

数组:[数据1,数据2,......]

表示方法: let   数组名 : 类型[]  =  [数据1,数据2,数据3,.......]

找到对应的数据:数组名[索引]    (索引0,1,2,...)

let titles:string[]=['创意','橘子','花瓶']
console.log('数组是',titles)
console.log('产品1',titles[0])

3.对象

对象:可以一次性存多个不同类型的数据

*数组存的是相同类型的数据,对象存的是不同类型的数据

***使用接口来约定对象的结构和类型

【用接口来定义对象中变量的类型,(接口中有什么是哪种类型,对象中也要有对应的内容)】

定义接口【interface 接口名{}】

定义对象【let 对象名:接口名={}】

//定义接口->约定对象的数据类型(接口名Goods)
interface Goods{title:stringprice:number
}//定义对象【 属性名:属性值->键值对->键值对之间用逗号隔开 】(继承接口,要和接口的数据相对应)
let vase:Goods={title:'创意句子花瓶',price:12.99
}
//查找数据 对象名.属性名
console.log('商品标题是',vase.title)
console.log('商品价格是',vase.price)
console.log('对象是',vase)//得到[object Object],隐藏数据的内容

练习

interface People{name:stringage:numberheight:numberlisten:boolean
}let ren:People={name:'王铁锤',age:20,height:180,listen:true
}
console.log('人名',ren.name)
console.log('年龄',ren.age)
console.log('身高',ren.height)
console.log('成年没',ren.listen)

4.函数

使用函数封装代码,提升代码复用性(一次定义,多次使用)

*定义函数

function calc(){                         function   函数名(参数1:类型,参数2:类型,...){

                                                 return 返回值(返回到函数调用的位置)

}                                               }

*调用函数

calc()                                       函数名()

例子:计算圆的周长

//计算任意半径圆的周长 2*3.14*半径
function calc(r:number){console.log('半径为',r)return 2*3.14*r;
}//真实数据->实参
let c1:number=calc(10)
console.log('圆的周长',c1)let c:number=calc(100)
console.log('圆的周长',c)

没有参数没有返回值

//没有参数没有返回值的函数
function printInfo(){console.log('函数里面的输出语句')
}
printInfo();

定义函数->function 函数名(参数列表){}    形参

调用函数->函数名(数据列表)                       实参

5.箭头函数

使用箭头函数封装代码,提升代码复用性

表示形式:  ( ) =>{

                     }   

可以将箭头函数存到一个函数名中

*定义函数

(函数名sum)

let sum = (num1: number,num2:number)=>{

        return num1+num2

}

*调用函数

sum(1,2)

//计算任意两个数的和
let sum=(num1:number,num2:number)=>{console.log('参数的数据是',num1,num2)return num1+num2
}
console.log('箭头函数的返回值是',sum(1,2))
console.log('箭头函数的返回值是',sum(10,20))

练习:计算圆的周长

let cun=(r:number)=>{return 2*3.14*r
}
console.log('圆的周长是',cun(2))

三,ArkUI

ArkUI(方舟开发框架):构建鸿蒙应用界面的框架

1.组件基础

组件:界面构建与显示的最小单位

*掌握组件写法,使用组件布局界面

**容器组件:布局

写法:组件名(){}

        Colume(){}        (内容竖着排)

        Row(){}        (内容横着排)

**内容组件:内容

写法:组件名()

        Text('内容')要求内容都是字符串类型的

*****注意:先布局,再内容        (在bulid()中写代码)

Column换行排列

Row横向排列

@Entry
@Component
struct Index {build() {// Column(){//   Text('大壮')//   Text('大壮')//   Text('大壮')// }Row(){Text('大壮')Text('大壮')Text('大壮')}}
}

***build唯一的容器组件:用嵌套来解决

2.通用属性

使用属性美化组件

写法:   组件

                .属性(值)

属性名作用属性值
width宽度数值(默认单位vp)
height高度数值(默认单位vp)
backgroundColor背景色色值(内置颜色或十六进制色值)

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){Text('大锤')//给Text组件添加宽高背景色//Color E->Enum 枚举.backgroundColor(Color.Blue).width(100).height(50)Row(){}//满屏尺寸为360vp或者100%//.width(360).width('100%').height(100).backgroundColor('#ff6600')}}
}

3,文本属性

属性名作用属性值
fontSize字体大小数值(默认单位fp)
fontColor文字颜色色值(内置颜色或十六进制颜色)
fontWeight字体粗细100~900

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){Text('大锤')//this.自定义构建函数名(数据列表1)//this.自定义构建函数名(数据列表2).fontSize(30).fontColor(Color.Blue).fontWeight(800)}}
}

练习:新闻列表

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){Text('在千年').fontSize(18).width(320)Text('新华社').fontSize(12).fontColor('#999999').width(320)Text('扩大开发对象').fontSize(18).width(320)Text('央视新闻').fontSize(12).fontColor('#999999').width(320)}}
}

4,图像组件

使用图像组件Image为界面添加图像资源

Image(图像资源路径)

支持本地图和网络图

路径写法:本地图    Image($r('app.media.xx'))

                  网络图    Image('https:xxx')

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){//添加本地图片Image($r('app.media.startIcon')).width(200)//添加网络图片Image('https://p5.ssl.qhimgs1.com/sdr/400__/t013c8c9997c4ffb6af.jpg').width(200)}}
}

5,内外边距

使用内,外边距调整组件及内容的位置

内边距padding   外边距margin

*希望内容和组件之间有间距用padding

*希望两个组件之间有间距用margin

***四个方向间距相同     写法:

                                组件

                                       .padding(数值)

                                        .margin(数值)

***四个方向间距不同        写法:

                                组件

                                        .padding({top:10,botton:20,left:30,right:40})

                                        .margin({top:10,botton:20,left:30,right:40})

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){Button('登录').width('100%').margin({bottom:20})Button('注册').width('100%').backgroundColor(Color.Green)}.backgroundColor('#DDDDDD').padding(10).padding({left:10,top:20,right:30,bottom:30})}
}

内边距:拉开内容与组件边缘的距离

外边距:拉开两个组件的距离

单值:四个方向间距相同

对象:四个方向间距不同

6,边框属性border

使用border属性为组件添加边框效果:设置边框,圆角,粗细,等等

写法:        组件

                        .border({

                                width:粗细

                                color:颜色

                                style:线条样式

                                radius:圆角

                          })

@Entry
@Component
struct Index {//build 里面要有唯一的容器和组件build() {Column(){Text('+状态').width(100).height(60).backgroundColor(Color.Brown)//文本水平居中.textAlign(TextAlign.Center).border({width:3,color:Color.Blue,style:BorderStyle.Dotted,radius:10})}.padding(20)}
}

四,界面布局

1.歌曲列表

使用组件及属性方法布局歌曲列表

***先整体,再布局

***先布局,再内容,后美化

******List容器组件,里面加ListItem

        写法:List(){

                        ListItem(){...}

                        ListItem(){...}

                        }

******scrollBar滚动条   BarState滚动条状态  

设置不显示滚动条 .scrollBar(BarState.Off)

******扩充组件的安全区expandSafeArea      扩充到顶部SafeAreaEdge.TOP,底部SafeAreEdge.BOTTOM

组件(){}

.expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM])

******.layoutWeight(数字)      将外层组件剩余尺寸分成指定份数,当前组件占用对应的份数

******图片.svg(支持用代码,用属性改变图片颜色)  用   .fillColor('')    改变图片颜色

import { EditableLeftIconType } from '@kit.ArkUI'@Entry
@Component
struct Index {build() {Column(){Text('猜你喜欢').fontColor('#fff').width('100%').margin({bottom:10})//容器组件List,支持滑动,加ListItemList(){ListItem(){Row(){//图Image($r('app.media.1')).width(80).height(80).border({radius:8}).margin({right:5,left:5})//字Column(){Text('直到世界镜头').fontColor('#F3F3F3').width('100%').fontWeight(700).margin({bottom:15,left:10})Row(){Text('VIP').fontColor('#9A8E28').border({radius:8,color:'#9A8E28',width:1}).padding({left:5,right:5,top:3,bottom:3}).margin({right:8,left:8}).fontSize(10)Text('凤凰传奇').fontColor('#696969').fontSize(12)}.width('100%')}.layoutWeight(1)//占用剩余的所有空间//图标//*图片.svg(支持用代码,用属性改变图片颜色)用.fillColor('')Image($r('app.media.4')).width(20).margin({right:5})}.width('100%').height(80)//.backgroundColor(Color.Pink).margin({bottom:10})}ListItem(){Row(){//图Image($r('app.media.1')).width(80).height(80).border({radius:8}).margin({right:5,left:5})//字Column(){Text('直到世界镜头').fontColor('#F3F3F3').width('100%').fontWeight(700).margin({bottom:15,left:10})Row(){Text('VIP').fontColor('#9A8E28').border({radius:8,color:'#9A8E28',width:1}).padding({left:5,right:5,top:3,bottom:3}).margin({right:8,left:8}).fontSize(10)Text('凤凰传奇').fontColor('#696969').fontSize(12)}.width('100%')}.layoutWeight(1)//占用剩余的所有空间//图标//*图片.svg(支持用代码,用属性改变图片颜色)用.fillColor('')Image($r('app.media.4')).width(20).margin({right:5})}.width('100%').height(80)//.backgroundColor(Color.Pink).margin({bottom:10})}}//折叠滚动条:  滚动条scrollBar   滚动条状态BarState   关闭Off.scrollBar(BarState.Off)}.width('100%').height('100%').backgroundColor('#131313').padding({left:10,right:10})//扩充组件的安全区,扩充到顶部SafeAreaEdge.TOP,底部SafeAreEdge.BOTTOM.expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM])}
}

2,if分支语句

根据逻辑条件结果,执行不同语句

        if(逻辑条件){

                条件成立执行的代码

        }else{

                条件不成立执行的代码

        }

*if成立时

let age:number=20
if(age>=18){console.log('成年了')
}@Entry
@Component
struct Index {build() {Column() {}}
}

*if不成立,执行else

let age:number=10
if(age>=18){console.log('成年了')
}else{console.log('未成年')
}@Entry
@Component
struct Index {build() {Column() {}}
}

根据逻辑条件结果,执行不同语句

        if(条件1){

                条件1成立执行的代码

        }else if(条件2){

                条件2成立执行的代码

        }else{

                以上条件都不成立执行的代码

        }

let score:number=90
if(score>=80){console.log('A')
}else if (score>=70){console.log('B')
}else if(score>=60){console.log('C')
}else {console.log('D')
}

3.条件表达式

根据逻辑条件结果,执行不同的表达式,得到不同结果

写法:    条件?条件成立的表达式:条件不成立的表达式

let num1:number=10
let num2:number=20
num1>num2?console.log('num1大'):console.log('num2大')

4.条件渲染

根据逻辑条件结果,渲染不同的UI内容

写法:

        if(条件1){

                组件1

        }else if(条件2){

                组件2

        }else{

                组件 else

        }

*** “  ===  ”严格等号,判断数值+类型

let num1:number=1@Entry
@Component
struct Index {build() {Column() {if(num1==1){Text('文本1')}else if(num1==2){Text('文本2')}else{Text('文本else')}}}
}

五,ArkTS核心

1.循环渲染

根据数组数据重复渲染UI内容

写法:         ForEach(数组名字,箭头函数)

ForEach(数组,(item:类型,index:number)=>{

                组件

})

*item数组中的数据项        index索引

let names:string[]=['Tom','Kit','Dog']@Entry
@Component
struct Index {build() {Column() {ForEach(names,(item:string,index:number)=>{//字符串之间的‘+’,表示拼接Text(item+index)})}.padding(10)}
}

2.状态管理(V2)

应用的运行时的状态是参数,当参数改变时,UI渲染刷新

状态变量:使用装饰器装饰,状态变量数据改变会引起UI的渲染刷新

//V2状态管理

@ComponentV2

struct Index{

        @Local num:number=1

        ......

}

*注意:

        (1).状态必须设置数据类型

        (2).状态必须设置初始值  

//.onClick点击事件

组件

        .onClick(()=>{

                this.num++

                this.num--

        })

@Entry
//进入V2状态
@ComponentV2
struct Index {//num状态@Local num:number=0build() {Column() {Row(){Text('-').width(40).height(40).textAlign(TextAlign.Center).border({width:1,radius:{topLeft:3,bottomLeft:3},color:'#999'})//添加点击事件,修改状态.onClick(()=>{if(this.num>1){this.num--}})//状态设置进来,将num的类型转换为stringText(this.num.toString()).width(40).height(40).textAlign(TextAlign.Center).border({width:{top:1,bottom:1},color:'#999'})Text('+').width(40).height(40).textAlign(TextAlign.Center).border({width:1,radius:{topRight:3,bottomRight:3},color:'#999'})//添加点击事件,修改状态.onClick(()=>{this.num++})}.padding(20)}}
}

3.@Builder自定义构建函数

使用@Builder装饰的函数也称为“自定义构建函数”

@Builder装饰的函数作用:封装UI元素,提升复用性

*定义方法:

@Builder

自定义构建函数名(参数列表){

        要复用的组件结构

}

*调用方法

this.自定义构建函数名(数据列表1)

this.自定义构建函数名(数据列表2)

*自定义构建函数可以写在组件的里面

@Entry
@Component
struct Index {//封装自定义构建函数    传入参数@BuildertitleBuilder(title:string){Row(){Text(title).fontColor('#fff').fontWeight(700).layoutWeight(1)Image($r('app.media.1')).width(22)}.width('100%').height(50)}build() {Column() {this.titleBuilder('每日推荐')this.titleBuilder('推荐歌单')}.width('100%').height('100%').expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM]).backgroundColor('#131313').padding({left:10,right:10})}
}

六,歌单交互效果

1.  ForEach循环渲染歌单

数组里面包对象,可以叫做对象数组

interface Music{image:stringname:stringauthor:string
}@Entry
@Component
struct Index {songs:Music[]=[{image:'https://img2.baidu.com/it/u=2614416695,3021245428&fm=253&fmt=auto&app=138&f=JPEG?w=504&h=500',name:'美美美',author:'xiao田'},{image:'https://img0.baidu.com/it/u=1717687967,3764228590&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=579662994,16903855&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img0.baidu.com/it/u=2960273897,2797347908&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=3259094038,2675463443&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=3745915620,3856927535&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=182231357,1062845046&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=2431701095,4189347457&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=2894005634,1549621335&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=2578316366,3430436350&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'}]build() {Column() {Text('猜你喜欢').fontColor('#fff').width('100%').margin({bottom:10})List(){ForEach(this.songs,(item:Music,index:number)=>{ListItem(){Row(){//tuImage(item.image).width(80).border({radius:5}).margin({right:5,top:10,bottom:10})//ziColumn(){Text(item.name).fontColor('#fff').fontSize('14').margin({left:20,bottom:10}).width('100%')Row(){Text('VIP').fontColor('#fff').fontSize(12).margin(10).border({radius:8,width:1,color:'#fff'})Text(item.author).fontColor('#fff').fontSize(12)}.width('100%')}.layoutWeight(1)//fuImage($r('app.media.4')).width(10).margin(5)}}})}.scrollBar(BarState.Off)}.padding(20).width('100%').height('100%').backgroundColor('#131313').expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM])}
}

2.播放状态

层叠组件Stcak()

interface Music{image:stringname:stringauthor:string
}@Entry
@ComponentV2
struct Index {@Local playIndex:number=-1songs:Music[]=[{image:'https://img2.baidu.com/it/u=2614416695,3021245428&fm=253&fmt=auto&app=138&f=JPEG?w=504&h=500',name:'美美美',author:'xiao田'},{image:'https://img0.baidu.com/it/u=1717687967,3764228590&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=579662994,16903855&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img0.baidu.com/it/u=2960273897,2797347908&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=3259094038,2675463443&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=3745915620,3856927535&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=182231357,1062845046&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img1.baidu.com/it/u=2431701095,4189347457&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=2894005634,1549621335&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'},{image:'https://img2.baidu.com/it/u=2578316366,3430436350&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',name:'美美美',author:'xiao田'}]build() {Column() {Text('猜你喜欢').fontColor('#fff').width('100%').margin({bottom:10})List(){ForEach(this.songs,(item:Music,index:number)=>{ListItem(){Row(){//tuStack(){Image(item.image).width(80).border({radius:5}).margin({right:5,top:10,bottom:10})if(this.playIndex===index){Image($r('app.media.1')).width(10)}}//ziColumn(){Text(item.name).fontColor('#fff').fontSize('14').margin({left:20,bottom:10}).width('100%')Row(){Text('VIP').fontColor('#fff').fontSize(12).margin(10).border({radius:8,width:1,color:'#fff'})Text(item.author).fontColor('#fff').fontSize(12)}.width('100%')}.layoutWeight(1)//fuImage($r('app.media.4')).width(10).margin(5)}.onClick(()=>{this.playIndex=index})}})}.scrollBar(BarState.Off)}.padding(20).width('100%').height('100%').backgroundColor('#131313').expandSafeArea([SafeAreaType.SYSTEM],[SafeAreaEdge.TOP,SafeAreaEdge.BOTTOM])}
}

循环渲染数据的思路:

数组数据------>ForEach------>替换数据

控制播放状态的思路:

播放状态组件(层叠)--->状态变量@Local播放索引--->条件渲染,播放状态组件--->点击事件修改状态变量

层叠布局组件:

Stack容器组件


依据:【全网首套鸿蒙5.0零基础入门到项目实战开发全套视频教程,原生鸿蒙正式版项目实战从ArkTS+AI到V2应用状态管理,鸿蒙API16应用开发全掌握】https://www.bilibili.com/video/BV1gSZvYzEdZ?p=25&vd_source=9e0031c99b0b852d596960307c0f094d

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

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

相关文章

【大前端】Vue 和 React 主要区别

Vue 与 React 的主要区别 在前端开发领域,Vue 和 React 是两大最受欢迎的框架/库。尽管它们都可以帮助我们构建现代化的 Web 应用,但在设计理念、开发方式、生态系统等方面有许多不同。本文将从多个角度对两者进行对比。 目录 框架与库的定位核心理念…

高级RAG策略学习(五)——llama_index实现上下文窗口增强检索RAG

LlamaIndex上下文窗口实现详解 概述 本文档详细讲解基于LlamaIndex框架实现的上下文窗口RAG系统,重点分析关键步骤、语法结构和参数配置。 1. 核心导入与环境配置 1.1 必要模块导入 from llama_index.core import Settings from llama_index.llms.dashscope import …

Doris 数据仓库例子

基于 Apache Doris 构建数据仓库的方案和具体例子。Doris 以其高性能、易用性和实时能力,成为构建现代化数据仓库(特别是 OLAP 场景)的优秀选择。一、为什么选择 Doris 构建数据仓库?Doris(原名 Palo)是一个…

WebRTC进阶--WebRTC错误Failed to unprotect SRTP packet, err=9

文章目录 原因分析 SRTP Anti-Replay 机制 客户端源码 err=9 的定义: 为什么会触发 replay_fail ✅ 解决方向 原因分析 SRTP Anti-Replay 机制 SRTP 收包时会用一个 Replay Window(64/128个序列号大小)检查 seq 是否合理。 如果你构造的恢复包 recover_seq 比当前接收窗口…

Web服务与Nginx详解

文章目录前言一、Web 概念1.1 Web 的基本概念1.1.1 特点1.2 B/S 架构模型1.3 Web 请求与响应过程1.4 静态资源与动态资源1.5 Web 的发展阶段1.6 实验:搭建最小 Web 服务1.6.1 实验目标1.6.2 实验步骤1.7 小结二、HTTP 与 HTTPS 协议2.1 HTTP 与 HTTPS 的区别2.2 HTT…

CC-Link IE FB 转 DeviceNet 实现欧姆龙 PLC 与松下机器人在 SMT 生产线锡膏印刷环节的精准定位控制

案例背景在电子制造行业,SMT(表面贴装技术)生产线对设备的精准控制要求极高。某电子制造企业的 SMT 生产线中,锡膏印刷机、SPI(锡膏厚度检测仪)等前段设备采用了基于 CC-Link IE FB 主站的欧姆龙 NJ 系列 P…

IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯

IP5326 是一款集成升压转换器、锂电池充电管理、电池电量指示的多功能电源管理 SOC,为移动电源提供完整的电源解决方案。得益于 IP5326 的高集成度与丰富功能,使其在应用时仅需极少的外围器件,并有效减小整体方案的尺寸,降低 BOM 成本。IP532…

若依基础学习

若依基础学习 1.修改数据库密码以及连接名: RuoYi-Vue-master\ruoyi-admin\src\main\resources\application-druid.yml2.各个文件作用: ruoyi-admin (主启动)├── ruoyi-framework (框架核心)│ ├── ruoyi-common (通用工具)│ └── ruoyi-sy…

靶向肽Dcpep

名称:靶向肽Dcpep三字母序列:NH2-Phe-Tyr-Pro-Ser-Tyr-His-Ser-Thr-Pro-Gln-Arg-Pro-OH单字母序列:NH2-FYPSYHSTPQRP-OH分子式:C69H94N18O19分子量:1479.62备注:仅供科研,不用于人体简述&#x…

华为在国内搞的研发基地有多野?标杆游学带你解锁“研发界顶流”

宝子们!原来华为在国内有这么多“宝藏研发基地”,之前总觉得遥不可及走进深圳坂田总部——1.3平方公里的园区,走进去就像进了“科技版大观园”,21层研发主楼看着就很有气势,天鹅湖边的路全用科学家名字命名&#xff0c…

linux缺页中断频繁怎么定位

1,怎么看内存是否有缺页中断 查看日志: dmesg | grep “do fault” perf record -e page-faults -g -p <PID> 系统级监控: 使用 vmstat 查看全局缺页中断(si/so 表示换入/换出页数) vmstat 1 # 每秒刷新,观察 si/so 列 iostat显示磁盘使用情况,举例iostat -x …

06-Hadoop生态系统组件(2)

4. 数据查询组件 4.1 Apache Hive详解 from typing import Dict, List, Any, Optional, Tuple, Union from dataclasses import dataclass from enum import Enum from datetime import datetime import re import jsonclass HiveTableType(Enum):"""Hive表类型…

【自动化实战】Python操作Excel/WORD/PDF:openpyxl与docx库详解

在现代办公环境中&#xff0c;我们经常需要处理各种文档格式&#xff0c;如Excel表格、Word文档和PDF文件。手动处理这些文档不仅耗时&#xff0c;而且容易出错。Python提供了多个强大的库来实现文档处理的自动化&#xff0c;本文将重点介绍如何使用openpyxl和docx库来操作Exce…

构建安全的自动驾驶:软件测试中的编码规范与AI验证

自动驾驶不再只是未来想象&#xff0c;它正在以惊人的速度走向现实。但这一变革也带来了软件开发的全新命题。与传统车辆不同&#xff0c;自动驾驶依赖复杂的AI模型、传感系统和车载决策单元&#xff0c;必须应对更多现实环境的不确定性。在强监管、高风险、快节奏的背景下&…

2025高教社数学建模国赛C题 - NIPT的时点选择与胎儿的异常判定(完整参考论文)

基于机器学习与统计模型的NIPT检测优化与异常判定问题研究 摘要 非侵入性产前检测(NIPT)作为一种无创安全的胎儿染色体异常筛查技术,在现代产前医疗中发挥着重要作用,其准确性与检测时机及异常判定的科学性直接影响临床决策。然而,男胎Y染色体浓度受孕周数、孕妇BMI等多…

一种基于注解与AOP的Spring Boot接口限流防刷方案

1. 添加Maven依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupI…

代码随想录二刷之“贪心算法”~GO

简单题目 1.455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)index : 0for i : 0;i<len(s);i{if index < len(g) && g[index] < s[i]{index}}return index }感悟&#xff…

Pod自动重启问题排查:JDK 17 EA版本G1GC Bug导致的应用崩溃

Pod自动重启问题排查:JDK 17 EA版本G1GC Bug导致的应用崩溃 问题背景 在生产环境中,我们遇到了一个严重的稳定性问题:应用Pod频繁自动重启,导致服务不稳定。通过深入分析JVM崩溃日志,最终定位到是JDK 17 EA版本中G1GC的一个已知Bug导致的。 问题现象 1. Pod重启表现 应…

HTML文本格式化标签

HTML提供了多种标签用于文本的格式化&#xff0c;这些标签可以改变文本的外观&#xff08;如粗细、斜体&#xff09;或赋予文本特定的含义&#xff08;如强调、引用&#xff09;。1. 基本文本样式标签&#xff08;1&#xff09;粗体文本使用<b>或<strong>标签可以使…

数据结构之单链表和环形链表的应用(二)-

目录一、相交链表二、环形链表I三、环形链表II总结一、相交链表 相交链表 首先理解什么是链表相交&#xff0c;相交即存在共用的节点&#xff0c;链表相交有三种情况&#xff0c; 中间位置相交头部就开始相交尾部相交 如图pcurA和pcurB就都有一个next指针指向同一个节点 这…