当前位置: 首页 > news >正文

从零开始开发纯血鸿蒙应用之UI封装

从零开始开发纯血鸿蒙应用

  • 一、题引
  • 二、UI 组成
  • 三、UI 封装原则
  • 四、实现 lib_comps
    • 1、封装 UI 样式
      • 1.1、attributeModifier 属性
      • 1.2、自定义`AttributeModifier<T>`类
    • 2、封装 UI 组件
  • 五、总结

一、题引

在开始正文前,为了大家能够从本篇博文中,汲取到代码外的东西,即编程思想,我想问问每一个屏幕前的读者,一个问题,那就是:所谓UI,在你看来,可以划分成哪些组成?

二、UI 组成

UI,即 User Interface,译为用户界面,是一个应用提供给用户直接进行查看和操作的内容。
虽然,还不知道大家脑海中对于UI组成,都有什么样的看法?但我这里需要说的是,我认为一个合格的UI,当是由结构样式响应有机组合成的,而合格的UI封装也应该就此进行。

UI 实际上就像大家日常生活中居住的房子,一个住起来感到惬意的房间,必然先后经历房壳子和装潢后的房间,这两个截然不同的阶段;在装潢阶段,房间的墙壁或被贴上墙纸、或被刷上墙漆,墙壁上的某些位置上出现的各种插座、开关面板,则是早在搭建房壳子的时候一并完成的,然而它们实际会控制什么样的电器,则是在装潢阶段进行的。

三、UI 封装原则

再问大家一个问题:进行UI公共组件的封装时,是习惯于将结构、样式和响应,杂糅在一起进行封装,还是采用粒度更细化的方式进行呢?

我进行UI封装时,会有一个很明确的行为准则:单一职能原则,一个封装实现体(class或struct),应该只承担粒度从小到大顺序中的某一个职能,比如只负责确定结构、或只负责确定样式。
当然了,前提是所使用的UI开发框架支持相应的粒度抽取。

就鸿蒙应用SDK来说,最新版本的API里,样式已经允许与结构、响应独立,封装在不同的ets文件中,具体如何实现,后文细说;而对于结构和响应,就像造房子一样,墙壁上开关面板的走线管道,只能在墙壁完整造出来前布置好,UI结构封装时必须预留响应的载入通道,通常就是允许传入一个函数

四、实现 lib_comps

现在,开始对工程里面的 lib_comps 模块进行实现,先看一下该模块下的目录结构:
lib_comps模块目录结构
在 ets 源码目录下,我细分出 componentsstyle两个子目录,前者负责UI结构和响应载入通道的封装,后者负责UI样式的封装。

1、封装 UI 样式

进行网页实现的时候,大家经常会用到类似如下的代码:

<div class="container"><p class="normal-text">文本</p>
</div>

html 标签的 class 属性,用于将提前封装在CSS文件中的各种样式进行载入的位置,只有这样,才可能进行样式的独立封装。现在,我可以明确地告诉大家,鸿蒙API 12 之后也能如此进行了:
在这里插入图片描述

1.1、attributeModifier 属性

在我看来,该属性是相当重要而有用的,它让鸿蒙 UI 实现的灵活度得到了进一步的增强。
在这里插入图片描述
虽然,官方将其解释为“动态设置组件的属性方法”,但我却更愿意将其看待成鸿蒙组件的class属性,因为,在鸿蒙UI实现中,组件样式也是通过属性方法进行设置的,比如下面:

Row(){Text(this.fileName.split(".")[0]).fontSize(25).fontWeight(FontWeight.Regular)Text(this.fileName.split(".")[1]).fontSize(20).fontWeight(FontWeight.Lighter)Text('操作').fontSize(25).fontWeight(FontWeight.Regular).bindMenu(this.OptionMenu())}.width("100%").height("10%").alignItems(VerticalAlign.Center).justifyContent(FlexAlign.SpaceBetween)

那么,传入 attributeModifier 属性里面的自定义AttributeModifier<T>类里面,只设置样式相关的属性,那么,实际上对应的自定义AttributeModifier<T>类就相当是一个css了。

1.2、自定义AttributeModifier<T>

实现时,要与目标组件的类型相一致,也就是说,如果是要为 column 组件的 attributeModifier 属性赋值,那么泛类型 T 对应的具体类型就是 ColumnAttribute。

通常,应用里面使用的 column 样式不会只有一种,所以,不妨把所有适用于 column 的样式封装,都放在同一份 ets 文件中,从而就有了前面 lib_comps 工程目录结构图里面的 ColumnStyles.ets 文件。

下面,以 RootTopColumn 类为例,讲解如何进行自定义AttributeModifier<T>类的封装:

export class RootTopColumn implements AttributeModifier<ColumnAttribute> {private columnColor: ResourceColor;constructor(columnColor: ResourceColor) {this.columnColor = columnColor;}applyNormalAttribute(instance: ColumnAttribute): void {instance.width("100%").height("100%").backgroundColor(this.columnColor).alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Start)}applyPressedAttribute(instance: ColumnAttribute): void {}applyFocusedAttribute(instance: ColumnAttribute): void {}applyDisabledAttribute(instance: ColumnAttribute): void {}applySelectedAttribute(instance: ColumnAttribute): void {}}

首先,自定义AttributeModifier<T>类和普通类一样,可以定义字段并通过构造函数进行初始化或赋值;其次,可以一次性封装5种不同的样式,用以针对组件的普通状态、按下状态、获焦状态、不可用状态和选择状态,不同的状态样式由各自对应的 applyXXXXAttribute 方法实现,这些方法统一接受一个 T 类型参数,对于 Column 组件来说,就是 ColumnAttribute;最后,在具体渲染时调用哪一个 applyXXXXAttribute 方法,由 UI 渲染引擎自行判断,开发者无需关心。

实现每个具体的 applyXXXXAttribute 方法时,可以从样式的如下几方面进行:

  • 尺寸:width 属性和 height 属性
  • 颜色:背景色 backgroundColor 属性,前景色foregroundColor属性
  • 对齐方式:alignItem 属性和 justifyContent 属性
  • 边距:外边距 margin 属性和内边距 padding 属性
  • 边框:boder 属性

当然了,鸿蒙 UI 组件支持的样式属性绝不止这些,只不过上面这些是比较常用的,基本足够应付大多数UI实现所需的样式了。

当对应的 自定义AttributeModifier<T>类,需要用在最外层的容器上,那么尺寸就应该是与屏幕尺寸相同,这里的 RootTopColumn 就是这样的,所以,我才会在 applyNormalAttribute 函数中,将尺寸都设置为百分百;同时,因为预期布局方式是水平居中、垂直局始,所以,只剩下背景色需要通过类构造函数进行传入。

2、封装 UI 组件

由于,鸿蒙API中,UI 结构和响应,没办法彻底解耦,所以,结构和响应就没有按照彻底独立的方式进行封装,而是直接上升到组件维度进行封装。

在组件中,按钮和对话框应该算得上是使用频率很高的组件了,所以,有必要为此封装相应的公共组件,以黑色背景的按钮来说,可以用类似如下的代码进行封装:

@Component
export struct BlackBtn {private buttonWidth: Length = "75%"private buttonHeight: Length = 55@Prop @Require text: ResourceStr = ""private textSize: string | number | Resource = 20private action?: () => void = () => {}private btnStyle: BlackButton = new BlackButton(this.buttonWidth, this.buttonHeight)build() {Button() {Text(this.text).WhiteText(this.textSize)}.attributeModifier(this.btnStyle).onClick(this.action)}
}

在鸿蒙UI中,所有的组件都是用注解了 Component 的 struct 体承担实现,并且该 struct 体中必须实现 build 方法,具体的 UI 内容实现放在 build 方法里,build 方法里不允许使用非UI表达式,除了少数允许的条件表达式外的一切逻辑表达式,都不允许直接放在 build 方法体里面。

由于注解了 Component 的 struct 体,跟类一样,允许从外部传入参数,所以,具体的内容和样式参数,都可以从外部传入;当然了,也可以为它们都设置初始化值;如果某个属性值必须要外部传入,可以在相应的字段前用 Require 注解。

对话框的封装,也是差不多的形式:
在这里插入图片描述
从上面的代码可以看出,封装UI组件的时候,可以根据内容的多寡,决定是否继续划分出更小的组件。

五、总结

受限于篇幅,我这里并没有将 lib_comps 模块的全部实现代码贴出来,大家不妨前往lib_comps仓库,查看具体的实现代码。

总而言之,在封装UI的时候,应当在遵循单一职能的基础上,按粒度从小到大的形式进行内容拆分和实现,一块砖一块砖地码,万里长城才能码得稳、码得好!

相关文章:

从零开始开发纯血鸿蒙应用之UI封装

从零开始开发纯血鸿蒙应用 一、题引二、UI 组成三、UI 封装原则四、实现 lib_comps1、封装 UI 样式1.1、attributeModifier 属性1.2、自定义AttributeModifier<T>类 2、封装 UI 组件 五、总结 一、题引 在开始正文前&#xff0c;为了大家能够从本篇博文中&#xff0c;汲…...

0101java面经

1.Java 中有哪些垃圾回收算法? 标记 - 清除算法&#xff08;Mark - Sweep&#xff09; 基本原理&#xff1a;标记 - 清除算法是最基础的垃圾回收算法之一。它分为两个阶段&#xff0c;首先是标记阶段&#xff0c;从根对象&#xff08;如栈帧中的局部变量、静态变量等引用的对…...

逐行讲解大模型流式输出 streamer 源码

目录 简介TextStreamer 基础流式输出TextIterateStreamer 迭代器流式输出本地代码模型加载并前端展示streamlit 输出显示gradio 输出显示 vllm 部署模型并前端展示streamlit 输出显示gradio 输出显示 备注 简介 本文详细讲解了大模型流式输出的源码实现&#xff0c;包括TextSt…...

springboot533图书管理系统(论文+源码)_kaic

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;图书信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…...

Dell服务器升级ubuntu 22.04失败解决

ubuntu系统原版本20.04&#xff0c;服务器dell T40. 执行apt update后&#xff0c;再执行apt upgrade。 apt update执行成功&#xff0c;但apt upgrade执行中断&#xff0c;提示如下&#xff1a; Checking package manager Reading package lists... Done Building dependen…...

sql列转行 行转列

列转行 在 SQL 中&#xff0c;转换数据以按列排列的值成为按行排列的值&#xff08;即所谓的“列转行”或“列转行”&#xff09;是常见的数据操作需求。这个操作在不同的数据库管理系统中可以通过不同的技术手段来实现。以下是几种常见的数据库系统中实现列转行的方法&#x…...

【在Python中生成随机字符串】

在Python中生成随机字符串&#xff0c;你可以使用random模块结合字符串操作来实现。以下是一个简单的例子&#xff0c;展示了如何生成一个指定长度的随机字符串&#xff0c;该字符串可以包含字母&#xff08;大写和小写&#xff09;以及数字&#xff1a; import random import…...

Qt解决可执行程序的图标问题(CMake)

通常情况下&#xff0c;我们编译生成的可执行程序的图标长这个样子&#xff1a; 可以看到他的图标非常丑陋。。。 要想改变图标&#xff0c;你需要通过以下方式&#xff1a; CMakeLists.txt : cmake_minimum_required(VERSION 3.10)project(CountCode VERSION 1.0 LANGUAGE…...

婴儿四维影像生成AI人脸照片-大模型 Agent(智能体)实践

婴儿四维影像生成AI人脸照片-大模型 Agent(智能体)实践 在当今科技飞速发展的时代,大模型 Agent(智能体)作为一种创新的技术范式,正逐渐崭露头角。它依托强大的大模型能力,通过可视化设计与流程编排,以无代码或低代码的方式,为开发者提供了构建各种功能性应用程序的便…...

XIAO Esp32 S3 网络摄像头——3音视频监控

1、介绍 之前分别介绍了音频和视频的接收,本文是整合了前2篇文章,实现了音视频的同时获取。 效果: 用xiao esp35 s3自制一个网络摄像头 2、适用场景广泛 家庭安防 无论是门前监控,还是室内安全,自制摄像头可以让你轻松把握每个角落,实时查看视频流,防止任何潜在风险。…...

【GIS教程】高程点制作DEM并使用ArcgisPro发布高程服务Elevation Layer

文章目录 应用场景数据源操作步骤1、数据加载2、创建TIN3、TIN转栅格4、发布高程服务 应用场景 我有高程点和等高线数据&#xff0c;我需要将其发布成高程服务&#xff0c;在 Portal 中直接使用&#xff0c;或者通过 Javascript API 进行调用。 数据源 数据源为dwg格式的地形…...

C++设计模式:状态模式(自动售货机)

什么是状态模式&#xff1f; 状态模式是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态发生改变时&#xff0c;动态改变其行为。通过将状态相关的逻辑封装到独立的类中&#xff0c;状态模式能够将状态管理与行为解耦&#xff0c;从而让系统更加灵活和可维护。 通…...

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之11 方案再探之2 项目文件(修改稿1)

(以下内容是第二次重建项目&#xff08;“方案再探”&#xff09;时的项目附件。) 为AI聊天工具添加一个知识系统 Part1 人性化&去中心化 前情提要 这一次我们暂时抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接将这些思维方式和方法论 运…...

Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法

Android 系统 Activity 系统层深度定制的方法、常见问题以及解决办法 目录 引言Activity 系统层概述Activity 系统架构图Activity 系统层深度定制的方法 4.1 自定义 Activity 生命周期4.2 自定义 Activity 启动流程4.3 自定义 Activity 转场动画4.4 自定义 Activity 窗口管理4…...

java并发之BlockingQueue

种类 类名特性ArrayBlockingQueue由数组结构组成的有界阻塞队列LinkedBlockingQueue由链表结构组成的有界的阻塞队列&#xff08;有界&#xff0c;默认大小 Integer.MAX_VALUE&#xff0c;相当于无界&#xff09;PriorityBlockingQueue支持优先级排序的无界阻塞队列DelayQueue…...

Python AI 教程之五: 强化学习

强化学习 强化学习:概述 强化学习 (RL) 是机器学习的一个分支,专注于在特定情况下做出决策以最大化累积奖励。与依赖具有预定义答案的训练数据集的监督学习不同,强化学习涉及通过经验进行学习。在强化学习中,代理通过执行操作并通过奖励或惩罚获得反馈来学习在不确定、可…...

uniapp——App下载文件,打开文档(一)

uniapp如何下载文件、打开文件 文章目录 uniapp如何下载文件、打开文件下载文件下载文件成功返回数据格式 打开文档处理 iOS 打开文件可能失败问题 相关API&#xff1a; uni.downloadFileuni.openDocument 注意&#xff1a; 只支持 GET 请求&#xff0c;需要 POST的&#xff…...

【信息系统项目管理师】高分论文:论信息系统项目的沟通管理(监控更新改造项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、制定沟通管理计划2、管理沟通3、监督沟通论文 2017年8月,我作为项目经理参加了某省委党校校园监控更新改造项目的建设,该项目投资共500万元人民币,建设工期为3个月,通过该项目的建设,实现了安全防…...

鸿蒙应用开发(1)

可能以为通过 鸿蒙应用开发启航计划&#xff08;点我去看上一节&#xff09; 的内容&#xff0c;就足够了&#xff0c;其实还没有。 可是我还是要告诉你&#xff0c;你还需要学习新的语言 -- ArkTS。 &#xff0c;ArkTS是HUAWEI开发的程序语言。你需要学习这门语言。这会花费你…...

基于JavaWeb的汽车维修保养智能预约系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…...

CAN总线波形中最后一位电平偏高或ACK电平偏高问题分析

参考&#xff1a;https://zhuanlan.zhihu.com/p/689336144 有时候看到CAN总线H和L的差值波形的最后一位电平会变高很多&#xff0c;这是什么原因呢&#xff1f; 实际上这是正常的现象&#xff0c;最后一位是ACK位。问题描述为&#xff1a;CAN总线ACK电平偏高。 下面分析下原因…...

高等数学学习笔记 ☞ 无穷小与无穷大

1. 无穷小 1. 定义&#xff1a;若函数当或时的极限为零&#xff0c;那么称函数是当或时的无穷小。 备注&#xff1a; ①&#xff1a;无穷小描述的是自变量的变化过程中&#xff0c;函数值的变化趋势&#xff0c;绝不能认为无穷小是一个很小很小的数。 ②&#xff1a;说无穷小时…...

Docker Compose编排

什么是 Docker Compose? Docker Compose 是 Docker 官方推出的开源项目&#xff0c;用于快速编排和管理多个 Docker 容器的应用程序。它允许用户通过一个 YAML 格式的配置文件 docker-compose.yml 来定义和运行多个相关联的应用容器&#xff0c;从而实现对容器的统一管理和编…...

Node.js 处理 GeoPackage 数据的开源库:@ngageoint/geopackage介绍

使用 Node.js 处理 GeoPackage 数据的开源库:@ngageoint/geopackage 随着地理信息系统(GIS)和空间数据的广泛应用,OGC 的 GeoPackage 格式因其轻量、跨平台和高性能的特点,成为处理地理空间数据的重要工具。而对于 Node.js 开发者来说,@ngageoint/geopackage 是一个功能…...

21.<基于Spring图书管理系统②(图书列表+删除图书+更改图书)(非强制登录版本完结)>

PS&#xff1a; 开闭原则 定义和背景 开闭原则&#xff08;Open-Closed Principle, OCP&#xff09;&#xff0c;也称为开放封闭原则&#xff0c;是面向对象设计中的一个基本原则。该原则强调软件中的模块、类或函数应该对扩展开放&#xff0c;对修改封闭。这意味着一个软件实体…...

MySQL日志体系的深度解析:功能与差异

优质博文&#xff1a;IT-BLOG-CN 一、binlog binlog记录数据库表结构和表数据变更&#xff0c;比如update/delete/insert/truncate/create&#xff0c;它不会记录select。存储着每条变更的SQL语句和XID事务Id等等。binlog日志文件如下&#xff1a; [root192.168.10.11]# mysq…...

电商项目-数据同步解决方案(四)商品下架同步更新ES索引库数据

商品下架索引库删除数据 一、 需求分析和业务逻辑 商品下架后将商品从索引库中移除。 主要应用技术有&#xff1a; 消息队列-RabbitMQ &#xff0c;分布式搜索引擎-ElasticSearch&#xff0c;Eureka&#xff0c;Canal&#xff0c;Feign远程调用 &#xff08;1&#xff09;在…...

Kafka

目录 一、什么是Kafka 核心组件 特性 使用场景 安装与配置 二、Kafka的使用 安装 ZooKeeper 和 Kafka 安装 ZooKeeper 安装 Kafka 配置 ZooKeeper 和 Kafka 配置 ZooKeeper 配置 Kafka 启动 ZooKeeper 和 Kafka 创建 Topic 编写生产者代码 编写消费者代码 运行…...

SAP SD学习笔记22 - VF04,VF06,VF24 等一括请求处理

上一篇学习了请求传票&#xff08;发票&#xff09;的拷贝管理。 SAP SD学习笔记21 - 请求传票的数据流&#xff08;拷贝管理&#xff09;-CSDN博客 本章继续学习 SAP SD的内容。 目录 1&#xff0c;VF04 - 一括请求处理&#xff08;开票到期清单&#xff09; 2&#xff0c…...

JR-RLAA系20路模拟音频多功能编码器

JR-RLAA系20路模拟音频多功能编码器 产品特色 (1)工业级19英寸标准设备&#xff0c;内置双电源 (2)内嵌Web Server&#xff0c;支持远程Web页面登陆后的统一配置操作 (3)支持20路音频输入 (4)支持Dolby Digital(AC-3) &#xff0c;MPEG-2&#xff0c;AAC-LC/HE-AAC&#x…...

数据结构复习 (二叉查找树,高度平衡树AVL)

1.二叉查找树: 为了更好的实现动态的查找(可以插入/删除),并且不超过logn的时间下达成目的 定义: 二叉查找树&#xff08;亦称二叉搜索树、二叉排序树&#xff09;是一棵二叉树&#xff0c;其各结点关键词互异&#xff0c;且中根序列按其关键词递增排列。 等价描述: 二叉查找…...

深入浅出梯度下降与反向传播

文章目录 1. 前言2. 基本概念2.1 一元函数的导数2.2 偏导数2.3 方向导数2.4 梯度2.5 均方误差 3. 梯度下降3.1 梯度下降的公式3.2 梯度下降的类型&#xff08;优化器&#xff09; 4. 反向传播4.1 反向传播的基本步骤4.2 反向传播的数学推导 5. 实战5.1 手动求导5.2 自动求导5.3…...

PLC(01)

一.职业规划 电路----------------->电工------------------>电气-------------------plc---------------------DCS--------------------> 机器人 二.交流电直流电的概念 1.交流电AC alternating current 大小方向随时间发生周期性变化 2.直流电 Direct current…...

如何通过本地部署的DIFY辅助学习算法(PS可以辅助帮你学习任何想学习的资料)

如何通过本地部署的DIFY辅助学习算法(PS可以辅助帮你学习任何想学习的资料 一 提升知识库的大小容量1.1 调大知识库的基础配置修改.env文件1.2 通过docker compose 重启加载最新配置1.3 重新上传知识库 二 搭建算法知识库的学习助手2.1 text embedding 模型对比2.1.1 如何选择合…...

深入探讨服务器虚拟化:架构、技术与应用

1. 引言 在现代IT基础设施中&#xff0c;服务器虚拟化已成为一种不可或缺的技术。它不仅提高了资源利用率&#xff0c;还增强了系统的灵活性和可管理性。随着企业对高效、灵活和可扩展IT环境的需求不断增加&#xff0c;服务器虚拟化技术的应用愈发广泛。本文将深入探讨服务器虚…...

C++笔记之尾后迭代器

C笔记之尾后迭代器 code review! 参考笔记 1.C笔记之尾后迭代器 2.C笔记之迭代器失效问题处理 在C中&#xff0c;尾后迭代器&#xff08;通常称为 past-the-end iterator&#xff09;是指指向容器中最后一个元素之后的位置的迭代器。它并不指向任何有效的元素&#xff0c;而是…...

2024年总结【第五年了】

2024年总结 北国绕院扫雪&#xff0c;南方围炉烹茶&#xff0c;且饮一杯无? 执笔温暖不曾起舞日子里的点点滴滴&#xff0c;誊写一段回忆&#xff0c;还以光阴一段副本。 那么你要听一支新故事吗&#xff1f;第五年总结的片碎。 衣单天寒&#xff0c;走趟流星孤骑&#xf…...

EasyExcel(环境搭建以及常用写入操作)

文章目录 EasyExcel环境搭建1.创建模块 easyexcel-demo2.引入依赖3.启动类创建 EasyExcel写1.最简单的写入1.模板2.方法3.结果 Write01.xlsx 2.指定字段不写入Excel1.模板2.方法3.结果 Write02.xlsx 3.指定字段写入excel1.模板2.方法3.结果 Write03.xlsx 4.按照index顺序写入ex…...

JVM类加载器

什么是类加载器 类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。 类加载器只参与加载过程中的字节码获取并加载到内存这一部分 类加载器的分类 类加载器分为两类&#xff0c;一类是Java代码中实现的&#xff0…...

druid连接池参数配置

最近发现生产环境经常有数据库连接超时的问题&#xff0c;排查发现是druid连接池参数设置不合理导致 总结问题如下&#xff1a; 为了防止僵尸连接&#xff0c;k8s ipvs做了连接超时限制&#xff0c;如果TCP连接闲置超过900s(15分钟)&#xff0c;客户端再尝试通过这个连接去发起…...

【机器学习】Kaggle实战信用卡反欺诈预测(场景解析、数据预处理、特征工程、模型训练、模型评估与优化)

构建信用卡反欺诈预测模型 建模思路 本项目需解决的问题 本项目通过利用信用卡的历史交易数据&#xff0c;进行机器学习&#xff0c;构建信用卡反欺诈预测模型&#xff0c;提前发现客户信用卡被盗刷的事件。 项目背景 数据集包含由欧洲持卡人于2013年9月使用信用卡进行交的…...

Linux(Ubuntu)下ESP-IDF下载与安装完整流程(2)

接前一篇文章:Linux(Ubuntu)下ESP-IDF下载与安装完整流程(1) 本文主要看参考官网说明,如下: 快速入门 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 Linux 和 macOS 平台工具链的标准设置 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 一、安装准备 1. Linux用...

SpringBoot3 快速启动框架

文章目录 1 SpringBoot3 介绍 1.1 SpringBoot3 简介1.2 快速入门1.3 入门总结 2 SpringBoot3 配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 3 SpringBoot 整合 springMVC 3.1 实现过程3.2 web相关配置3.3…...

Enum枚举类,静态常量类,静态类的区别

Enum枚举类&#xff0c;静态常量类&#xff0c;静态类的区别 Enum枚举类静态常量类静态类Enum枚举类&#xff0c;静态常量类&#xff0c;静态类的区别 Enum枚举类 Enum枚举类的结构组成和用法使用可以查阅 Enum枚举类与静态变量和静态数组的区别 静态常量类 public class St…...

解锁专利世界的钥匙 ——famiwei 网

在知识经济的时代,专利作为创新成果的重要体现,无论是对于企业、科研人员乃至整个社会的发展都具有举足轻重的意义。而在众多的专利网站中,famiwei 网为用户提供了一个全面、精准且高效的专利信息交流与服务的舞台。 一、卓越功能,开启专利探索之门 famiwei 网拥有一套强大的专…...

金融租赁系统的创新与发展推动行业效率提升

金融租赁系统的技术升级与创新 在当今快速发展的金融市场中&#xff0c;金融租赁系统的技术升级与创新充满了无限可能。想象一下&#xff0c;传统的租赁方式就像一位沉闷的老师&#xff0c;而新兴技术就如同一位活泼的学生&#xff0c;不断追求新鲜事物。通过自动化、人工智能…...

SQL-Server链接服务器访问Oracle数据

SQL Server 链接服务器访问 Oracle 离线安装 .NET Framework 3.5 方法一&#xff1a;使用 NetFx3.cab 文件 下载 NetFx3.cab 文件&#xff0c;并将其放置在 Windows 10 系统盘的 C:Windows 文件夹中。 以管理员身份运行命令提示符&#xff0c;输入以下命令并回车&#xff1a; …...

Sonic:开源Go语言开发的高性能博客平台

Sonic&#xff1a;一个用Go语言开发的高性能博客平台 简介 Sonic&#xff0c;一个以其速度如声速般快速而命名的博客平台&#xff0c;是一个用Go语言开发的高性能博客系统。正如其名字所暗示的&#xff0c;Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...

【react】常见的性能优化 1

目录 常见的 React 性能优化手段 1. 使用 useMemo 和 useCallback 缓存数据和函数 2. 使用 React.memo 缓存组件 3. 组件懒加载 4. 合理使用 key 5. 在组件销毁时清除定时器/事件 6. 使用 Suspense 和 Lazy 拆分组件 7. 使用 Fragment 避免额外标记 8. 避免使用内联函…...

SpringCloud源码-openFeign

LoadBalancer默认只有nacos服务发现器 openFeign与springcloud loadbalancer的结合点...