【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)
【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下)
【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)


文章目录

  • 系列文章目录
  • 前言
  • 一、ArkTs布局代码位置和写法规则
  • 二、ArkTS 常见布局介绍
  • 三、ArkTS 组件通用信息
    • (1)通用事件:
    • (2)通用属性
    • (3)手势处理
  • 四、常见布局详细使用
    • (1)线性布局(Row、Column)
      • 1.1、Row\Column 入参:
      • 1.2、Row\Column自带属性
      • 示例1:
      • 示例2:
      • 示例3:
      • 示例4:
      • 示例5:
    • (2)层叠布局(Stack)
      • 1、 通过如下示例理解层叠布局效果:
      • 2、Stack 入参
      • 3、改变示例里面显示位置看看所有枚举值渲染情况
        • (1)TopStart
        • (2)Top
        • (3)TopEnd
        • (4)Start
        • (5)Center
        • (6)End
        • (7)BottomStart
        • (8)Bottom
        • (9)BottomEnd
      • 4、搭配通用属性position和translate实现css绝对布局效果
        • 示例1:
        • 示例2:
    • (3)弹性布局(Flex)
      • 入参:
      • 示例1:
      • 示例2:
      • 示例3:
        • 总结
      • Flex布局和线性布局(Row、Column)区别和优劣选择:
  • 四、总结
  • 五、未完待更


前言

HarmonyOS NEXT(鸿蒙应用)开发快速入门教程之布局篇,基于HarmonyOS NEXT Beta1版本(api 12)讲解。

本文将从前端开发者角度来学习鸿蒙的布局语法,通过类比鸿蒙布局和web css布局相似之处,帮助大家快速掌握鸿蒙布局开发。鸿蒙的布局方式跟css非常相似,主要还是以flex布局为基调,搭配相对、绝对、层叠布局实现大部分场景。鸿蒙自带的系统组件更为丰富,扩展的属性很多,功能更强大,像衍生出的布局类组件有Swiper(轮播)、Tabs(选项卡)、List(列表)、Grid(网格)有着丰富的配置来满足各种定制化需求。


一、ArkTs布局代码位置和写法规则

在这里插入图片描述

从HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)这篇博文知道布局主要在build函数里面写入,父子组件标签嵌套的方式写布局,跟html一样。组件的属性和事件跟jq一样通过链式调用。build函数内只能有一个根组件,跟vue2 template一样。


二、ArkTS 常见布局介绍

声明式UI提供了以下9种常见布局:

1、线性布局(Row、Column)
线性布局就是子元素按照水平或者垂直2种方向按顺序排列,其中Row为水平方向容器,Column为垂直方向容器,最常用布局方式,没有之一。

2、层叠布局(Stack)
层叠布局类似css绝对布局或‌Fixed布局,在Stack容器内子元素依次入栈,后一个子元素覆盖前一个子元素上面,子元素可以叠加,也可以设置相对父容器位置。不会占用或影响同容器内其子组件的布局空间。

3、弹性布局(Flex)
相当于css flex布局,用法几乎一样,也和线性布局类似,区别在于弹性布局默认能够使子组件压缩或拉伸。在子组件需要计算拉伸或压缩比例时优先使用此布局,可使得多个容器内子组件能有更好的视觉上的填充容器效果。

4、相对布局(RelativeContainer)
跟安卓相对布局类似,设置兄弟组件或父组件为锚点,基于锚点做相对位置布局。相对布局面对复杂的界面可以减少多层次组件嵌套,有效的提升性能,减少时间开销。

5、栅格布局(GridRow、GridCol)
跟elementUI el-row el-col相似,将空间分割为有规律的栅格。栅格不同于网格布局固定的空间划分,它可以实现不同设备下不同的布局

6、媒体查询(@ohos.mediaquery)
跟css媒体查询类似,可根据不同设备类型或同设备不同状态修改应用的样式。

7、列表(List)
官方归为布局之一,实际上就是一个 列表组件

8、网格(Grid)
网格组件,类似css网格布局

9、轮播(Swiper)
官方归为布局之一,实际上就是一个轮播组件


三、ArkTS 组件通用信息

组件通用信息指的是所有组件(或大部分组件)都共有的一些信息特性,包括通用事件、通用属性、手势处理三种类型。

(1)通用事件:

比如点击事件、触摸事件,所有组件都能触发,都可以绑定监听事件

例如:

  build() {Column() {}.onClick((event: ClickEvent) => {console.log('点击事件')}).onTouch((event: TouchEvent) => {console.log('触摸事件')})}

所有通用事件如下:
在这里插入图片描述
详细介绍可查阅官方文档:通用事件

(2)通用属性

组件通用属性跟组件布局关系比较大,通用属性大部分类似css属性,可以对组件布局进行控制,例如组件宽高、边框、背景等设置。

例如:

  build() {Column() {}.width(500) //宽.height(200) //高.backgroundColor(Color.Black) //背景色.border({ width: 1, color: Color.Red }) //边框.borderRadius(10) //圆角.opacity(0.5) //透明度.visibility(Visibility.Visible) //是否可见}

所有通用属性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
详细介绍可查阅官方文档:通用属性

(3)手势处理

一些手势操作监听处理,比如长按、双击、拖拽、捏合等,具体可看:手势处理官方文档


四、常见布局详细使用

(1)线性布局(Row、Column)

线性布局是日常开发最常用的一种布局方式。可以看成简化版flex布局,支持设置子组件在主轴方向上的对齐方式. justifyContent()和垂直轴方向上的对齐方式.alignItems(),且性能优于flex布局,所以也是最优先选择的布局方式。

Row:主轴为水平方向,子元素从左到右或从右向左依次排列的容器,相当于html 中设置了 display: flex; flex-direction: row 的div
Column :主轴为垂直方向,子元素从上到下或从下向上依次排列的容器,相当于html 中设置了 display: flex; flex-direction: column的div

1.1、Row\Column 入参:

Row\Column(value?:{space?: number | string }):设置主轴方向上子元素之间的间距

例如:

  build() {Column({ space: 10 }) {Button('按钮1')Button('按钮2')Button('按钮3')}}

在这里插入图片描述

注意:
justifyContent设置为FlexAlign.SpaceBetween、FlexAlign.SpaceAround、FlexAlign.SpaceEvenly时不生效,默认值:0,单位vp

1.2、Row\Column自带属性

  • alignItems(value: VerticalAlign) 设置子组件在相对主轴垂直方向上的对齐方式

  • value值支持如下枚举值:
    在这里插入图片描述
    默认值VerticalAlign.Center

  • justifyContent(value: FlexAlign) 设置子组件在主轴方向上的对齐方式

  • value值支持如下枚举值:
    在这里插入图片描述
    默认值FlexAlign.Start

  • reverse(isReversed: Optional) 设置子组件在主轴上的排列是否反转.(相当于css flex-direction: row-reverse(column-reverse);)

配合上通用属性——flexBasis、flexGrow、flexShrink、alignSelf就是个简化版的flex

通过上面表格可以看出justifyContent可选值跟css flex justifyContent一样而alignItems可选值就有区别只有3个而且名称由start变成top end变成bottom。

示例1:

justifyContent(FlexAlign.SpaceBetween)

@Entry
@Component
struct Demo {build() {Column() {Row() {Image($r('app.media.arrow_left')).width(28)Text('商品详情')Image($r('app.media.icon_share3')).width(28)}.width('100%').height(50).justifyContent(FlexAlign.SpaceBetween).padding({top:0,bottom:0,left:15,right:15})}}
}

运行效果:
在这里插入图片描述
说明:上述示例三段式常见的布局方式

示例2:

.alignItems(HorizontalAlign.Center) 、 .justifyContent(FlexAlign.Center)、.alignSelf(ItemAlign.Start) 、.alignSelf(ItemAlign.End)

/*** 自定义Row通用样式*/
@Extend(Row)
function customRow() {.width(300).height(100).justifyContent(FlexAlign.Center).backgroundColor(Color.Orange).borderRadius(20)
}@Entry
@Component
struct Demo {build() {Column({ space: 20 }) {Row({space:30}) {Text('A')Text('B')}.customRow()Row({space:30}) {Text('A')Text('B')}.customRow()Row({space:30}) {Text('A')Text('B')}.customRow().alignSelf(ItemAlign.Start)Row({space:30}) {Text('A')Text('B')}.customRow().alignSelf(ItemAlign.End)}.width('100%').alignItems(HorizontalAlign.Center).padding(20)}
}

运行效果:
在这里插入图片描述

说明:上图示例中父组件设置了 .alignItems(HorizontalAlign.Center),子组件默认在水平方向上居中对齐,通过设置alignSelf(),可以单独设置某个子组件对齐方式,如示例所示第三、第四个Item就分别单独设置了居左(ItemAlign.Start)和居右(ItemAlign.End)显示。

示例3:

.flexGrow(1)、justifyContent(FlexAlign.SpaceBetween)

@Entry
@Component
struct Demo {build() {Column() {Row({space:10}) {Text('地址:').fontSize(14).fontWeight(600)Text('福建省厦门市思明区').height('100%').fontSize(14).fontColor('#666').flexGrow(1).textAlign(TextAlign.End).backgroundColor('#F0F0F0')Image($r('app.media.arrow_right')).width(22)}.width('100%').height(50).justifyContent(FlexAlign.SpaceBetween).border({width: {bottom: 1}, color: '#dedede'})}.padding({top:10,left:18,right:18})}
}

运行效果:
在这里插入图片描述

说明:上述示例中省市区文字的组件Text通过设置flexGrow(1)拉伸占满父容器剩余水平方向上所有空间。

示例4:

.justifyContent(FlexAlign.SpaceEvenly)、.justifyContent(FlexAlign.SpaceAround)、.justifyContent(FlexAlign.SpaceBetween)

@Entry
@Component
struct Demo {
//自定义item@Builder customItem(icon:Resource,label:string){Column({space:5}){Image(icon).width(40)Text(label)}}build() {Column({space:30}) {Row(){this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')}.width('100%').justifyContent(FlexAlign.SpaceEvenly)Row(){this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')}.width('100%').justifyContent(FlexAlign.SpaceAround)Row(){this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')this.customItem($r('app.media.tabbar11'),'首页')}.width('100%').justifyContent(FlexAlign.SpaceBetween)}.padding({top:20})}
}

运行效果:

在这里插入图片描述
说明:.justifyContent(FlexAlign.SpaceEvenly)、.justifyContent(FlexAlign.SpaceAround)、.justifyContent(FlexAlign.SpaceBetween)每种值呈现的效果对比,item之间的间距依次变大。

三者区别:
FlexAlign.SpaceEvenly:item之间的间距相等,且第一个item与最后一个item与父容器间距等于item之间的间距
FlexAlign.SpaceAround:item之间的间距相等,且第一个item与最后一个item与父容器间距等于item之间的间距的一半
FlexAlign.SpaceBetween:item之间的间距相等,且第一个item与最后一个item与父容器间距为0

示例5:

css和ArkTS写法对照

css:

 .div{display: flex;flex-direction: column;justify-content: center;align-items: center;align-self: center;flex-grow: 1;flex-shrink: 0;flex-basis: 100px;}

等价于
ArkTs:

   Column() {}.justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center).alignSelf(ItemAlign.Center).flexGrow(1).flexShrink(0).flexBasis('100px')}

说明:从上述示例可以看出ArkTs的线性布局跟css中flex设计机制、属性作用几乎一样,甚至连命名都一样,只不过换了种调用形式。

ps:友情提示属性入参都是系统定义好的枚举值例如FlexAlign.Center,这些枚举值无须去记忆,只要把鼠标放置属性上有语法提示

线性布局更多示例说明可以查阅官方文档


(2)层叠布局(Stack)

Stack容器内的子元素会脱离文档流,默认只相对于父容器(上下左右中)某个方向对齐显示而无关兄弟元素影响。后置元素层级越高,就叠在最上面所以也称层叠布局,配合通用属性position、translate使用跟css绝对布局或Fixed布局有异曲同工之妙。

1、 通过如下示例理解层叠布局效果:

示例1:

@Entry
@Component
struct Demo {build() {Stack(){Column(){}.width(200).height(200).backgroundColor(Color.Red)Column(){}.width(100).height(100).backgroundColor(Color.Orange)Column(){}.width(50).height(50).backgroundColor(Color.Blue)}.width(300).height(400).border({width:1,color:Color.Black}).margin({top:30,left:30})}
}

运行效果:
在这里插入图片描述

说明:默认居中显示


示例2:

@Entry
@Component
struct Demo {build() {Stack({alignContent:Alignment.TopStart}){Column(){}.width(200).height(200).backgroundColor(Color.Red)Column(){}.width(100).height(100).backgroundColor(Color.Orange)Column(){}.width(50).height(50).backgroundColor(Color.Blue)}.width(300).height(400).border({width:1,color:Color.Black}).margin({top:30,left:30})}
}

运行效果:
在这里插入图片描述
说明:可通过入参alignContent设置显示位置


示例3:

通过zIndex属性调整层叠顺序

@Entry
@Component
struct Demo {build() {Stack(){Column(){}.width(200).height(200).backgroundColor(Color.Red)Column(){}.width(100).height(100).backgroundColor(Color.Orange).zIndex(9)Column(){}.width(50).height(50).backgroundColor(Color.Blue)}.width(300).height(400).border({width:1,color:Color.Black}).margin({top:30,left:30})}
}

在这里插入图片描述

说明:可通过zIndex控制层叠显示顺序,数值越大越上面(离眼睛越近),不设置默认为0


2、Stack 入参

Stack(value?: { alignContent?: Alignment })

在这里插入图片描述
可设置有如下9种位置枚举值,不传默认横向纵向居中
在这里插入图片描述

3、改变示例里面显示位置看看所有枚举值渲染情况

(1)TopStart

在这里插入图片描述

(2)Top

在这里插入图片描述

(3)TopEnd

在这里插入图片描述

(4)Start

在这里插入图片描述

(5)Center

在这里插入图片描述

(6)End

在这里插入图片描述

(7)BottomStart

在这里插入图片描述

(8)Bottom

在这里插入图片描述

(9)BottomEnd

在这里插入图片描述

4、搭配通用属性position和translate实现css绝对布局效果

通用属性position和translate跟css position和translate使用类似,具体使用可查阅官方文档,这里不过多介绍

示例1:

html\css写法:

<template><div class="parent"><div class="child-left">child-left</div><div class="child-right">child-righ</div></div>
</template><style >.parent{height: 300px;width: 300px;position: relative;border: 1px solid #000; }.child-left{height: 100px;width: 100px;background-color: red;position: absolute;left:0;top:50%;transform: translateY(-50%);}.child-right{height: 100px;width: 100px;background-color: red;position: absolute;right:0;top:50%;transform: translateY(-50%);}
</style>

等价于ArkTs写法:

@Entry
@Component
struct Demo {build() {Stack({alignContent:Alignment.Start}){Column(){Text('child-left')}.width(100).height(100).backgroundColor(Color.Red)Column(){Text('child-right')}.width(100).height(100).backgroundColor(Color.Red).position({right:0,top:'50%'}).translate({x:0,y:'-50%'})}.width(300).height(400).border({width:1,color:Color.Black}).margin({top:10,left:10})}
}

运行效果:
在这里插入图片描述

说明:由于Stace入参只能设置一个方向,默认所有子组件对齐方式是固定的,而在css绝对布局中我们可以灵活设置子元素任意位置,想实现css这种效果,需要配合position属性单独设置某个子组件对齐方向和距离并通过translate平移到居中位置。

示例2:

实现一个悬浮按钮场景:

@Entry
@Component
struct Demo {@State list:number[]=[]aboutToAppear(): void {this.list=new Array(20).fill('')}build() {Stack({ alignContent: Alignment.BottomEnd }) {//页面内容Column() {List(){ForEach(this.list,(item:string,index:number)=>{ListItem(){Text(`${index}`)}.width('100%').height(60).border({width:1,color:'#eee'})},(index:number)=>index.toString())}}//悬浮按钮Column() {Image($r('app.media.top')).width(20)}.width(50).height(50).borderRadius(25).backgroundColor('#eee').justifyContent(FlexAlign.Center).position({right: 20,bottom: 50})}.width('100%').height('100%')}
}

运行效果:
在这里插入图片描述

更多的Stack示例和介绍请查看官方文档


(3)弹性布局(Flex)

弹性布局(Flex)跟css flex使用和命名上几乎完全一样,最大不同于线性布局在于写法上,Flex的设置全部是入参形式,而Row/Column通过属性。

入参:

Flex(value?: { direction?: FlexDirection, wrap?: FlexWrap, justifyContent?: FlexAlign, alignItems?: ItemAlign, alignContent?: FlexAlign })

在这里插入图片描述

示例1:

@Entry
@Component
struct Demo {build() {Flex({alignItems: ItemAlign.Center}) {//头像Image($r('app.media.app_icon')).width(50).borderRadius(25)//昵称+手机号Flex({direction: FlexDirection.Column,justifyContent: FlexAlign.Center}) {Text('昵称')Text('1555555555555').margin({ top: 4 })}.margin({ left: 10 }).flexGrow(1)//箭头图标Image($r('app.media.arrow_right')).width(25)}.width('100%').height(100).padding(20).backgroundColor('#f2f2f2')}
}

运行效果:

在这里插入图片描述

示例2:

通过wrap: FlexWrap.Wrap实现网格布局效果

@Entry
@Component
struct Demo {@State list: number[] = []aboutToAppear(): void {this.list = new Array(7).fill(0)}//自定义item@BuildercustomItem(index: number) {Flex({direction: FlexDirection.Column,alignItems: ItemAlign.Center,justifyContent: FlexAlign.Center}) {Image($r('app.media.sport')).width(40)Text(`标签${index}`).fontSize(13).margin({ top: 4 })}.height(75).constraintSize({minWidth: '25%'})}build() {Column() {Flex({direction: FlexDirection.Row,wrap: FlexWrap.Wrap,justifyContent: FlexAlign.Start}) {ForEach(this.list, (item: number, index: number) => {//itemthis.customItem(index)}, (index: number) => index.toString())}.padding(10).backgroundColor('#ffffff').borderRadius(10)}.height('100%').width('100%').backgroundColor('#f2f2f2').padding(20)}
}

运行效果:

在这里插入图片描述

ps:当Flex容器主轴为垂直方向时需要设置具体高度值,不然Flex会继承父元素100%高度无法自动高度

示例3:

css有个缩写属性

flex:1

它是

flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
或
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;

的缩写,作用是使得所有子元素平均分配父元素空间

css效果:
在这里插入图片描述

换成ArkTs写法试试效果:

ArkTs没有flex:1缩写形式只能3个分开写

@Entry
@Component
struct Demo {build() {Column({ space: 50 }) {Flex() {Text('2344343454').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Orange)Text('23').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Green)Text('234434').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Red)}.width('100%')}}
}

运行效果:
在这里插入图片描述

通过运行效果看,没有达到预期效果,子元素没有平均分配父元素空间,而是平均分配剩余空间。
猜想可能是flexBasis(0)没有生效,flexBasis是设置元素基准宽度, 只有所有子元素基准宽度相同通过扩大或缩小相同比例所有子元素才能均等分。
与css 不一样的是flexBasis不支持百分比

我们改成flexBasis(1)试试

@Entry
@Component
struct Demo {build() {Column({ space: 50 }) {Flex() {Text('2344343454').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Orange)Text('23').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Green)Text('234434').flexGrow(1).flexBasis(0).flexShrink(1).backgroundColor(Color.Red)}.width('100%')}}
}

运行效果:
在这里插入图片描述
是我们想要的效果,结果也验证了flexBasis(0)无效。

总结

Flex布局或者线性布局(Row\Column)想要让子元素均等分父元素空间可以使用如下写法:

子组件().flexGrow(1).flexShrink(1).flexBasis(1)

Flex布局和线性布局(Row、Column)区别和优劣选择:

1、写法上一个入参形式、一个属性形式,从代码美观和可读性看线性布局写法比较优雅。

2、Flex配置更丰富,alignItems支持Baseline、Stretch等6种类型值,并且包含direction、wrap、alignContent等入参设置更加靠近css 的flex使用习惯,能实现更多复杂的布局需求。

3、Flex组件主轴默认不设置时撑满父容器,Column、Row组件主轴不设置时默认是跟随子节点大小,这点Flex使用比较麻烦必须时刻注意设置主轴方向的宽或高。

4、Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替

更多Flex布局示例说明请看官方文档


四、总结

从上述讲解中我们能发现ArkTS布局几乎是借鉴css,相似度很高,该有的东西基本都有只是写法不一样罢了,这对于前端开发人员来说几乎没难度可以快速衔接上手,当然ArkTS有着更丰富的系统组件,属性、入参和事件也非常多,对于系统组件需要多花点时间学习。

五、未完待更

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

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

相关文章

Python画笔案例-066 绘制橙子

1、绘制橙子 通过 python 的turtle 库绘制 橙子,如下图: 2、实现代码 绘制 橙子,以下为实现代码: """橙子.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小化,然后…

教师工作量在线管理服务

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

springAOP和spring事务

AOP 1.简介 Aop面向切面编程&#xff1a;在开发中我们不能直接对已经设计好的代码进行修改&#xff08;开放-封闭原则&#xff0c;对扩展开放&#xff0c;对修改封闭&#xff09;&#xff0c;解耦 AOP的底层实现为动态代理 * Target&#xff08;目标对象&#xff09;&#…

专业网站建设必备

专业网站建设不仅仅是简单的页面搭建&#xff0c;更是一项综合性的工程&#xff0c;需要结合行业特性、用户体验和技术创新&#xff0c;打造一个符合企业需求、独具特色的线上空间。 第一印象至关重要 一个企业网站就如同公司的数字名片&#xff0c;第一印象往往决定了用户是否…

衡石分析平台系统管理手册-功能配置之全局 JS 设置

全局 JS 设置​ 衡石系统提供了全局 JS 设置功能&#xff0c;用户可以通过自定义 JS 代码实现系统的个性化需求&#xff0c;如使用第三方统计工具对系统平台的 PV 、UV 进行监测。 使用场景​ 场景1&#xff1a;增加百度统计​ 下图示例中使用 js 代码引用了百度网站统计功…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司&#xff0c;专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造&#xff0c;立足于香港这一国际金融中心&#xff0c;放眼全球&#xff0c;汇聚了华…

部分监督多器官医学图像分割中的标记与未标记分布对齐|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Labeled-to-unlabeled distribution alignment for partially-supervised multi-organ medical image segmentation 部分监督多器官医学图像分割中的标记与未标记分布对齐 01 文献速递介绍 多器官医学图像分割&#xff08;Mo-MedISeg&#xff09;是医学图像分析…

『功能项目』下载Mongodb【81】

下载网址&#xff1a;Download MongoDB Community Server | MongoDB 点击安装即可 选择Custom 此时安装已经完成 桌面会创建图标 检查是否配置好MongoDB 输入cmd命令行 Windows键 R 打开命令行 输入cmd 复制安装路径 复制data路径 如果输出一大串代码即配置mongdb成功

LeetCode 面试经典150题 172.阶乘后的零

题目&#xff1a;给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 思路&#xff1a; 代码&#xff1a; class Solution {public int trailingZeroes(int n) {return n 0 ? 0 : n / 5 trailingZeroes(n / 5);}…

央企办医布局智慧医康养,环球医疗(2666.HK)让养老有“医”靠

投资传奇查理芒格说&#xff1a;“我给自己设定的目标是追求平常人没有的常识。”只有挖掘出市场潜移默化的趋势&#xff0c;才能抓住投资机遇。 当下&#xff0c;资本市场一个被低估的产业趋势是&#xff0c;医疗健康行业大并购时代悄然开启&#xff0c;头部上市公司对并购产…

【Python快速学习笔记01】下载解释器/环境变量配置/PyCharm下载/第一个代码

目录 1.下载python解释器 2.第一个python程序 3.配置解释器环境变量 4.下载开发工具 PyCharm 4.通过PyCharm编写第一个python程序 1.下载python解释器 官网下载&#xff0c;但是下载太慢了&#xff0c;所以直接百度搜了下载了个 Welcome to Python.org 1.官网下载 2.直…

香港科技大学数据建模MSc(DDM)硕士学位项目25/26招生宣讲会-西安专场

香港科技大学数据建模MSc(DDM)硕士学位项目25/26招生宣讲会-西安专场 &#x1f559;时间&#xff1a;2024 年10 月12日&#xff08;周六&#xff09; 16:00 &#x1f3e0;地点&#xff1a; 西安交大南洋大酒店(交通大学青龙寺店) 行政会议室 &#x1f9d1;‍&#x1f393;嘉宾…

VS code 使用 Jupyter Notebook 时显示 line number

VS code 使用 Jupyter Notebook 时显示 line number 引言正文引言 有些时候,我们在 VS code 中必须要使用 Jupyter Notebook,但是默认情况下,Jupyter Notebook 是不显示 Line number 的,这对于调试工作的定位是不友好的,这里我们将介绍如何让 Jupyter Notebook 显示 Line…

反问面试官:如何实现集群内选主

面试官经常喜欢问什么zookeeper选主原理、什么CAP理论、什么数据一致性。经常都被问烦了&#xff0c;我就想问问面试官&#xff0c;你自己还会实现一个简单的集群内选主呢&#xff1f;估计大部分面试官自己也写不出来。 本篇使用 Java 和 Netty 实现简单的集群选主过程的示例。…

为何上海我店平台 能够三年突破两百亿销售额?

在当前全球经济环境充满挑战&#xff0c;消费者普遍持谨慎态度的背景下&#xff0c;我店——这家总部位于上海的创新企业&#xff0c;却以惊人的速度崛起&#xff0c;成为市场中的一股清流。 自2021年8月成立以来&#xff0c;我店凭借其独特的环保积分系统&#xff0c;在短短两…

日本IT-正社员、契约社员、个人事业主该如何选?

正社員&#xff1a;就是「正规社员」的意思&#xff0c;按照公司的规定而直接雇用&#xff0c;而且没有制定雇用期间&#xff0c;基本上是以终身雇用至退休年龄&#xff08;70岁&#xff09;为前提。而被雇用的一方需要听从公司的业务命令&#xff0c;包括职位或职场的调迁&…

Go语言开发后台框架不能只有CRUD还需有算法集成基础功能-GoFly框架集成了自然语言处理(NLP)分词、关键词提取和情感分析

前言 Go语言开发框架&#xff0c;我们要把Go的优势体现在框架中&#xff0c;不仅CRUD常规操作&#xff0c;还要把常用即有算力自己集成到框架中&#xff0c;而不是去购买第三方提供服务接口。作为开发者可以拓宽自己代码面&#xff0c;获取更多成就感&#xff0c;同时也提供自…

c++反汇编逆向还原——for循环(笔记)

c反汇编逆向还原代码for循环的实现&#xff0c;for循环和while循环在逆向还原的区别 一、汇编 mov &#xff1a;将源操作数复制到目的操作数 lea &#xff1a;与mov类似 mov a&#xff0c;b 表示将b赋值给a 若是 mov a&#xff0c;[b] 这是将b的地址赋值给a&#xff0c;相…

【数据结构中的哈希】

泛黄的春联还残留在墙上.......................................................................................................... 文章目录 前言 一、【哈希结构的介绍】 1.1【哈希结构的概念】 1.2【哈希冲突】 1.3【哈希函数的设计】 1.4【应对哈希冲突的办法】 一、…