ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染

一、组件基础

1.什么是ArkTS

ArkTS是HarmoyOS优选的助力应用开发的语言,ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步的扩展,继承了TS所有的特性,是TS的超集。

在这里插入图片描述

扩展的能力如下:

  • 基本语法
    • 定义了声明式UI、自定义组件、动态扩展UI元素
    • 提供了ArkUI系统组件、提供了组件事件、方法和属性
    • 共同构建UI开发主体
  • 状态状态
    • 组件状态、组件数据共享、应用数据的共享、设备共享
  • 渲染控制
    • 条件渲染、循环循环、数据懒加载
-- 声明式UI
通过一段HTML标签展示出对应的页面,还是通过使用document.createElement('tag')创建标签方便呢?
显示HTML,其实HTML本身就是声明式的,通过描述的方式取声明UI界面
一些前端框架也是用声明式UI,如:Vue使用template模板
再例如SwiftUI等app开发技术也是声明式的

2.组件结构

在这里插入图片描述

在这里插入图片描述

!在这里插入图片描述

ArkTS通过装饰器@Entry@Component装饰器 struct关键字声明的数据结构,构成了一个自定义组件

自定义组件中提供一个builde函数,开发者需要在函数内部用链式调用的方式进行基本的UI描述

UI描述方法可以参考UI描述规范

如:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-common-components-text-display-V5

3.自定义组件

component 自定义组件的存放位置如下

在这里插入图片描述

在这里插入图片描述

Footer.ets

@Component
export default struct Footer{build() {Text('这是页脚');}
}

MyPage.ets


//导入自定义组件
import Footer from '../compnonents/Footer'
@Entry
@Component
struct MyPage{build() {Column(){Text("蔡徐坤篮球打的很好").fontSize(50).fontColor(Color.Red).fontWeight(FontWeight.Bold)Footer();}}
}

4.系统组件(ArkUI)

常用的系统组件:

  • Text
  • Column
  • Row
  • Button
  • TextInput

文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-build-layout-V5

在这里插入图片描述

@Entry
@Component
struct LoginPage {build() {Column(){  //垂直方向布局Row(){ //水平方向布局Text('手机号:')TextInput();  //输入框}Row(){ //水平方向布局Text('验证码:')TextInput();}Row(){Button('登录').backgroundColor(Color.Green)Button('重置').backgroundColor(Color.Red)}}}
}

二.状态管理

@State 可以定义状态变量

1.组件变量,不具备驱动UI更新能力

@Entry
@Component
struct StatePage {count = 100;  //变量build() {//Text只可以放String或者是ResourceText(this.count.toString()).onClick(() => {this.count++;//count的值加1})}
}

2 .状态变量加上@State 装饰器

加上@state装饰器后变量必须声明数据类型和赋值

但是给的类型不能是any,undefined,null,以及不建议给复杂类型和联合类型

@Entry
@Component
struct StatePage {@State count:number = 100;  //变量build() {//Text是可以放String或者是ResourceText(this.count.toString()).onClick(() => {this.count++;  //count的值加1})}
}

在鸿蒙开发中的页面调试建议:

import promptAction from '@ohos.promptAction';promptAction.showToast({message: this.count.toString(),  //弹出的内容duration:5000  //持续的时间,单位是毫秒  1秒=1000毫秒
})

3.练习案例

实现登录表单数据手机、重置、模拟提交

import promptAction from '@ohos.promptAction';
@Entry
@Component
struct LoginPage2 {@State mobile:string = '';//手机号@State password:string = '';//密码build() {Column(){ //垂直布局Row(){ //水平布局Text('手机号')TextInput().onChange((value) => {this.mobile = value; //将输入框中输入的内容给到变量mobile// promptAction.showToast({//   message: value,//   duration: 2000// })})}Row(){ //水平布局Text('密码')TextInput().onChange((value)=>{this.password = value;//将密码框中输入的内容赋值给password})}Row(){ //水平布局Button('重置')Button('登录').onClick(() => {//只要手机号和密码不为空if(this.mobile && this.password){promptAction.showToast({message:`${this.mobile} 登录成功`,duration:5000})} else {promptAction.showToast({message:`请输入手机号或密码`,duration:5000})}})}}}
}

三.样式处理

1. 样式语法(链式 & 枚举)

ArkTS中以声明方式组合和扩展组件来描述应用程序的UI

同时还提供了基本的属性、事件和子组件配置方法,帮助我们开发者实现应用交互逻辑

2. 样式属性

属性方法是以 .链式调用方式配置系统组件的样式和其它属性建议每个属性方法单独写一行

@Entry@Component
struct StylePage1 {build() {Text('演示').backgroundColor(Color.Orange) //背景颜色.fontSize(50) //字体大小,在鸿蒙中单位默认是vp.width('100%') //宽度.height(200) //高度.textAlign(TextAlign.Center) //文本水平对其方式}
}

3. 枚举值

枚举:有限的列举

对于系统组件,ArkUI还未属性预定义了一些枚举类型

官网:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-appendix-enums-V5

@Entry
@Component
struct StylePage1 {build() {Text('演示').backgroundColor(Color.Orange) //背景颜色.fontSize(50) //字体大小,在鸿蒙中单位默认是vp.width('100%') //宽度.height(200) //高度.textAlign(TextAlign.Center) //文本水平对其方式}
}

4. VP

在鸿蒙开发中,单位默认是vp

什么是VP

virtual pixel: 虚拟像素

屏幕密度相关像素:根据屏幕像素转换成物理像素,当数值不带单位,默认的单位就是vp

在实际像素为1440物理像素的屏幕上。1vp约等于3px(物理像素)

在这里插入图片描述

import promptAction from '@ohos.promptAction'@Entry
@Component
struct VpPage {build() {Text('演示').backgroundColor(Color.Red) //背景颜色.fontSize(50)  //默认是vp,字体的大小.width('100%').height(200)  //行高.textAlign(TextAlign.Center) //文本水平对其方式.fontColor(Color.White) //文本颜色.onAreaChange((oldArea,newArea)=>{//屏幕大小发生改变的时候触发promptAction.showToast({message:newArea.width.toString()})})}
}

不同的设备屏幕的宽度vp是不一致的,那怎么适配呢?

5. 适配

采用的是伸缩布局、网格布局、栅格系统进行布局适配

伸缩

layoutWeight(flex:number) 占剩余空间的多少份,可以理解成css中flex:1

@Entry
@Component
struct LayoutPage {build() {Row(){Text('left').backgroundColor('red').layoutWeight(1) //layoutWeight伸缩,占剩余空间的多少份Text('right').backgroundColor('green').layoutWeight(2)}.width('100%')}
}

等比例

设置元素宽高比: aspectRatio(ratio:number)

在这里插入图片描述

@Entry
@Component
struct LayoutPage {build() {Column(){Row(){Text('left').backgroundColor(Color.Red).width('50%').aspectRatio(1)  //宽高等比例}.width('100%')}}
}

vp:是鸿蒙默认单位,和屏幕的像素有关(1vp ≈ 3px),最终表现视觉大小在任何设备一致

鸿蒙一般是以伸缩layoutWeight、网格、栅格进行适配布局的,如果要等比例缩放可以设置宽高等比

6.练习

设计稿一般是1080px

  • Nav
  • 左侧返回按钮24vp宽高,背景颜色#f5f5f5,图标12vp尺寸,颜色是#848484
  • 标题18vp
  • Comment
  • 头像尺寸32vp宽高、右侧间距10vp
  • 标题15vp,颜色默认
  • 内容16vp,颜色#565656
  • 底部12vp,颜色#c3c4c5

鸿蒙图标库:https://developer.huawei.com/consumer/cn/design/harmonyos-icon/

在这里插入图片描述

@Entry
@Component
struct PoePage {build() {Column(){//导航Row(){Image($r('app.media.chevron_left')).width(24).aspectRatio(1) //宽高等比//.fillColor('blue') //svg图标可以使用填充颜色Text('评论回复').layoutWeight(1) //占据剩余的部分.textAlign(TextAlign.Center) //文本居中.padding({right:24  //距离右边内边距24})}.height(40)//评论部分Row(){Image($r('app.media.kun')).width(32).aspectRatio(1) //等比缩放.borderRadius(16) //圆角Column(){Text('坤坤').width('100%')Text('篮球打得很好').width('100%')Row(){Text('10.21.*.*  IP属于湖北武汉').fontSize(12).fontColor('#c3c4c5')}}}}.width('100%').height('100%')}
}

7. 样式复用

在开发过程中会出现大量代码在进行重复的样式设置,可以通过@Styles实现样式的复用

在组件内和组件外均可

7.1 Styles

  • 当前Styles仅仅支持通用属性和通用事件
    • 通用属性文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/5_2_u901a_u7528_u5c5e_u6027-V5
  • 支持全局定义和组件内定义,同时存在组件内覆盖全局生效
import promptAction from '@ohos.promptAction'//组件外
@Styles
function functionName(){.backgroundColor('red').height(200).padding({left:20}).onClick(() => {promptAction.showToast({message:'ok'})})
}@Entry
@Component
struct StylesPage {//组件内// @Styles// functionName(){//   .backgroundColor('red')//   .height(200)//   .padding({left:20})//   .onClick(() => {//     promptAction.showToast({//       message:'ok'//     })//   })// }build() {Column(){Text('Text1').functionName()Text('Text2').functionName()}}
}

7.2 Styles练习

需求:有一个Text和一个按钮,背景颜色都是绿色,并且点击的时候都加1

// @Styles
// function sameStyle(){
//   .backgroundColor('green')
//   .onClick(()=>{
//     this.count++;
//   })
// }@Entry
@Component
struct StlyesDemoPage {@State count:number = 1;@StylessameStyle(){.backgroundColor('green').onClick(()=>{this.count++;})}build() {Row(){Column(){Text(this.count.toString()).sameStyle()Button('+1').sameStyle()}}}
}

7.3 Extends

@Extends:用于扩展原生组件样式,通过传入参数提供更加灵活的样式复用

  • 使用@Extends 装饰器的函数只能是全局的
  • 函数可以进行传参,如果参数是状态变量,状态更新后会刷新UI
  • 且参数可以是一个函数,实现复用事件且可处理不同逻辑
  • 只能放在组件外

在这里插入图片描述

import promptAction from '@ohos.promptAction';
@Extend(Text) function myExtend(color:string,callbck:()=>void){.backgroundColor(color) //颜色参数传入.width(100).height(100).textAlign(TextAlign.Center).borderRadius(10).onClick(() => callbck())
}@Entry
@Component
struct ExtendsPage {@State color:string = '#ccc';build() {Column(){Text('Text1').myExtend(this.color, () => {this.color = '#069'})Text('Text2').myExtend('blue',() => {promptAction.showToast({message:'做其他的事情'})})}}
}

7.4 样式多态

stateStyles() 可以依据组件的内部状态不同,快速的设置不同的样式

stateStyles是属性方法,可以根据UI内部装填来设置样式,类似于css的伪类,但是语法不一样的。

ArkUI提供了四种状态

  • focused:获取焦点状态
  • normal:正常状态
  • pressed:按压状态
  • disabled:不可用状态
import promptAction from '@ohos.promptAction';@Entry
@Component
struct StateStylesPage {@State disabled:boolean = false;@State focused:boolean = false;build() {Column(){Text('toggle disabled --->' + this.disabled).onClick(() => {//!表示取反this.disabled = !this.disabled;})Text('toggle focused ---> ' + this.focused).onClick(() => {this.focused = ! this.focused;})Text('clickMe').enabled(!this.disabled) //如果将enabled设置为false,则表示不允许点击.focusable(true).onClick(() => {promptAction.showToast({message:'click'})})}}
}

四. class语法

在鸿蒙的开发中关于对象状态范式,采用class方式,后续组件传值遇到深层对象嵌套要利用class

1. class创建对象和class类型

class Person{age:numbername:stringconstructor(name:string,age:number) {this.name = name;this.age = age;}
}//创建对象
//当类型使用和构造函数使用
//有构造很函数了可以直接new
const p:Person = new Person('jack',20);//当类型使用这种后续比较多,我们使用字面量对象
//没有构造函数需要用字面量的方式
// const p1:Person = {
//   name:'tom',
//   age:18
// }

2. implements 和interface接口

// 定义了一个接口
import promptAction from '@ohos.promptAction'interface IPerson{name:string,age:number,say:() => void
}//实现接口.实现接口后,必须给属性初始值和实现方法
class Person implements IPerson{name:string = "";age:number = 0;say(){promptAction.showToast({message:this.name})}
}

3. extends继承

// 定义了一个接口
import promptAction from '@ohos.promptAction'interface IPerson{name:string,age:number,say:() => void
}//实现接口.实现接口后,必须给属性初始值和实现方法
class Person implements IPerson{name:string = "";age:number = 0;say(){promptAction.showToast({message:this.name})}
}class HelloPerson extends Person {}

4. 复杂对象

当装饰器的数据类型为class或者是Object的时候,可以观察到自身的赋值的变化,和其属性值的变化

5. 对象类型状态

//对象模型
class User{name?:stringage?:number
}@Entry
@Component
struct ClassDemoPage {@State user:User = {name:'jacklove',age:18} as Userbuild() {Column(){Text(this.user.name)Text(this.user.age?.toString())Button('年龄加1').onClick(() => {//let age = this.user.age as number; //断言不是undefined是number//this.user.age = age + 1this.user.age = this.user.age as number;this.user.age++;})}}
}

6. 嵌套对象类型状态

//对象模型
class User{name:string = ''age:number = 0
}
class UserData{code:number = 0message:string = ''//嵌套一个对象data:User = {name:'',age:0}
}
@Entry
@Component
struct ClassDemo2Page {@Stateres:UserData = {code:1000,message:'获取用户信息成功',data: {name:'tom',age:20}}build() {Column(){Text(this.res.data.name)Text(this.res.data.age.toString())Button('年龄加1').onClick(() => {//this.res.data.age++ //这样不行const user = this.res.data;//替换属性,触发UI更新this.res.data = {name:user.name,age:user.age + 1}})}}
}

7. 对象数组类型状态

//对象模型
class User{name:string = ''age:number = 0
}@Entry
@Component
struct ClassDemo2Page {@Statelist:User[] = [{name:'jack',age:18},{name:'tom',age:20}]build() {Column(){Text(JSON.stringify(this.list[0]))Text(JSON.stringify(this.list[1]))Button('年龄加1').onClick(() => {//this.list[0].age++const user = this.list[0];this.list[0] = {name:user.name,age:user.age + 1}})}}
}

嵌套对象和对象数组,采用赋值的方式进行更新,可以更新UI

五、界面渲染

1.条件渲染

条件渲染可以根据应用的不同状态,使用if…else 和 else…if 渲染对应的状态下的UI内容

  • 条件渲染,是根据状态数据进行判断展示不同的UI
  • 条件渲染,会销毁和创建组件,组件状态将不会保留

1.1 使用if…else 实现loading效果

@Entry
@Component
struct LoadingPage {@State loading:boolean = false;build() {Column(){if(this.loading){LoadingProgress().width(100).aspectRatio(1)//.color('red')} else {Text('后台数据')Text('后台数据')Text('后台数据')}Button('更新数据').onClick(() => {this.loading = true//2秒后将loading的值设置为falsesetTimeout(() => {this.loading = false},2000)})}}
}

1.2 添加渲染会销毁和重新创建组件,组件的状态不会保留

在这里插入图片描述


@Component
struct  CounterComp{@State count:number = 0;build() {Text(this.count.toString()).onClick(() => {this.count ++;})}
}@Entry
@Component
struct Demo2Page {@State show:boolean = true;build() {Column(){if(this.show){CounterComp();}Button('toggle').onClick(() => {this.show = !this.show})}}
}

2.循环渲染

foreach 接口 基于数组类型进行循环渲染,需要与容器配置使用

语法:

ForEach(arr:Array<Object>,   //数据源itemGenerator:(item: Object, index: number) => void, //组件生成函数keyGenerator?:(item: Object, index: number) => string //键值生成函数。
)
class MyUser{id:string = ''name:string = ''age:number = 0
}@Entry
@Component
struct ForeachPage {@State userList:MyUser[] = [{id:'1',name:'2年半的练习生',age:26},{id:'2',name:'坤坤',age:26}]build() {Column(){//循环渲染ForEach(//1.数据源this.userList,//2.组件生成函数(item:MyUser,index:number) => {//内容Text(`${item.id} - ${item.name} - ${item.age}`).width('100%').height(20)})//Button('加载更多...').onClick(() => {const arr:MyUser[] = [];//新数组中产生10个对象for(let index = 0; index < 10; index++){arr.push({id:Math.random().toString(),name:'jacklove',age:19})}//将新的数组添加到userList中this.userList.push(...arr)})}.width('100%').height('100%')}
}

循环渲染,需要与容器配置使用

语法:

ForEach(arr:Array<Object>,   //数据源itemGenerator:(item: Object, index: number) => void, //组件生成函数keyGenerator?:(item: Object, index: number) => string //键值生成函数。
)
class MyUser{id:string = ''name:string = ''age:number = 0
}@Entry
@Component
struct ForeachPage {@State userList:MyUser[] = [{id:'1',name:'2年半的练习生',age:26},{id:'2',name:'坤坤',age:26}]build() {Column(){//循环渲染ForEach(//1.数据源this.userList,//2.组件生成函数(item:MyUser,index:number) => {//内容Text(`${item.id} - ${item.name} - ${item.age}`).width('100%').height(20)})//Button('加载更多...').onClick(() => {const arr:MyUser[] = [];//新数组中产生10个对象for(let index = 0; index < 10; index++){arr.push({id:Math.random().toString(),name:'jacklove',age:19})}//将新的数组添加到userList中this.userList.push(...arr)})}.width('100%').height('100%')}
}

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

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

相关文章

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前&#xff0c;我们先来了解一下搜索 1 搜索是什么 ① 概念&#xff1a;用户输入想要的关键词&#xff0c;返回含有该关键词的所有信息。 ② 场景&#xff1a; ​ 1互联网搜索&#xff1a;谷歌、百度、各种新闻首页&#xff1b; ​ 2 站内搜索&#xff…

大众汽车合肥社招入职笔试测评SHL题库:综合能力、性格问卷、英语口语真题考什么?

大众汽车合肥社招入职笔试测评包括综合能力测试、性格问卷和英语口语测试。以下是各部分的具体内容&#xff1a; 1. **综合能力测试**&#xff1a; - 这部分测试需要46分钟完成&#xff0c;建议准备计算器和纸笔。 - 测试内容涉及问题解决能力、数值计算能力和逻辑推理能力。 -…

Docker-软件容器平台

一、容器 1、什么是容器 容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署 容器镜像是轻量的、可执行的独立软件包 &#xff0c;包含软件运行所需的所有内容&#xff1a;代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows…

Spring Boot集成Access DB实现数据导入和解析

1.什么是Access DB&#xff1f; microsoft office access是由微软发布的关联式 数据库管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点&#xff0c;是一种关系数据库工具。它在很多地方得到广泛使用&#xff0c;例如小型企业&#xff0c;大公司的部…

WSL开发--利用Git连接远程仓库(详细步骤)

这篇文章主要介绍了如何将本地项目推送到 GitLab 上&#xff0c;并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版&#xff1a; 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…

快消零售行业企业员工培训的数字化转型

在快速消费品&#xff08;FMCG&#xff09;行业中&#xff0c;员工培训对于保持企业的竞争力至关重要。随着电子商务的兴起和消费者行为的变化&#xff0c;快消零售行业需要不断适应新的市场趋势。数字化转型为员工培训提供了新的机遇&#xff0c;尤其是在构建在线培训知识库方…

java的体系结构

1. 题记&#xff1a; 其实很早就打算来写java的体系结构这一文章&#xff0c;但是有诸多担忧就一直搁置。其一担心自己水平有限&#xff0c;恐不能讲得太透彻&#xff0c;因为java的体系结构宏大精深。其二不知道怎么去把控文章的难度及深度&#xff0c;因为需要给大部分看&am…

基于STM32的实时时钟(RTC)教学

引言 实时时钟&#xff08;RTC&#xff09;是微控制器中的一种重要功能&#xff0c;能够持续跟踪当前时间和日期。在许多应用中&#xff0c;RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能&#xff0c;通过示例代码实现当前时间的读取和显示。 环…

探索开放资源上指令微调语言模型的现状

人工智能咨询培训老师叶梓 转载标明出处 开放模型在经过适当的指令调整后&#xff0c;性能可以与最先进的专有模型相媲美。但目前缺乏全面的评估&#xff0c;使得跨模型比较变得困难。来自Allen Institute for AI和华盛顿大学的研究人员们进行了一项全面的研究&#xff0c;探索…

使用k8s管理应用以及java案例

使用k8s管理应用 制作镜像控制器管理podpod数据持久化创建service四层代理创建ingress规则对外发布应用日志与监控应用案例(因无开发代码&#xff0c;最终跑不起来)编写java代码编写 Dockerfile构建 Docker 镜像在 Kubernetes 上运行应用程序创建 Kubernetes 服务service创建in…

【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection

1.论文介绍 CamoFormer: Masked Separable Attention for Camouflaged Object Detection CamoFormer&#xff1a;用于隐藏目标检测的掩蔽可分离注意力 TPAMI 2024 Paper Code 2.摘要 如何从背景中识别和分割隐藏的对象是一个挑战。受transformer中多头自注意的启发&#xf…

【从零开始的LeetCode-算法】3254. 长度为 K 的子数组的能量值 I

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为&#xff1a; 如果 所有 元素都是依次 连续 且 上升 的&#xff0c;那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的子数组的能量值。 请你返回一个长度为 n - k 1…

LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略

LLMs之PDF&#xff1a;zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本&#xff1a; 安装 使用方法 使用文件 URL&#xff1a; 使用本地路径&…

qt QStandardItemModel详解

1、概述 QStandardItemModel是Qt框架中提供的一个基于项的模型类&#xff0c;用于存储和管理数据&#xff0c;这些数据可以以表格的形式展示在视图控件&#xff08;如QTableView、QTreeView等&#xff09;中。QStandardItemModel支持丰富的数据操作&#xff0c;包括添加、删除…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术&#xff0c;把国产笔…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴&#xff0c;上来就是使用现有的sklearn机器学习包&#xff0c;写两行代码&#xff0c;调调参数就能跑起来&#xff0c;看似方便&#xff0c;实则有时不利于个人能力发展&#xff0c;要知道现在公司需要的算法工程师&#xff0c;不仅仅只是会调参&#x…

这款Chrome 插件,使浏览器页面快速滑动到最底部和最顶部,并且还能...

前言 前几日我在使用谷歌浏览器&#xff0c;也就是chrome的时候&#xff0c;浏览一个内容很长的页面&#xff0c;由于页面上的内容有前后关联&#xff0c;所以我必须不停地切换到上面和下面。这非常不方便。使我非常抓狂。后来&#xff0c;我灵机一动&#xff0c;去谷歌浏览器…

汉诺塔问题代码分享及思路分享(c基础)

可以先自己尝试&#xff0c;只要看见过递归即可写。&#xff08;我自己是&#xff09;希望能自己尝试出来。 两种方法迭代比递归快很多.(不发代码的原因是想让你自己动手) 1 递归 2 迭代 猜数游戏是自己写的第一个有互动的程序。对我很有意义。 我绑定资源了的&#xff0c;大…

第9章 Apache WEB服务器企业实战

万维网 (WORLD WIDE WEB,WWW)服务器,也称之为WEB服务器,主要功能是提供网上信息浏览服务。WWW是 Internet的多媒体信息查询工具,是Internet上飞快发展的服务,也是目前用的最广泛的服务。正是因为有了WWW软件,才使得近年来 Internet 迅速发展。 目前主流的WEB服务器软件包…

第10章 MYSQL服务器企业实战

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 本章介绍关系型数据库特…