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

18 HarmonyOS NEXT UVList组件开发指南(五)

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

第五篇:UVList组件最佳实践与实际应用案例

文章目录

    • 第五篇:UVList组件最佳实践与实际应用案例
      • 1. 最佳实践总结
        • 1.1 组件设计最佳实践
        • 1.2 代码组织最佳实践
      • 2. 实际应用案例
        • 2.1 电商应用商品列表
        • 2.2 社交应用消息列表
      • 3. 性能优化实践
        • 3.1 大数据量列表优化
        • 3.2 列表刷新与加载更多
        • 3.3 列表动画优化
      • 4. 扩展与定制
        • 4.1 主题定制
        • 4.2 自定义列表项类型
      • 5. 总结

1. 最佳实践总结

1.1 组件设计最佳实践

在开发UVList组件的过程中,我们遵循了以下设计原则,这些原则也适用于其他组件的开发:

  1. 职责单一原则:UVList和UVListItem各自负责不同的功能,保持了代码的清晰和可维护性
  2. 接口优先设计:先定义清晰的接口(ListProps和ListItemProps),再基于接口实现功能
  3. 组合优于继承:通过组合不同的组件实现复杂功能,而非通过继承
  4. 默认值设计:为属性提供合理的默认值,减少使用时的配置负担
  5. 条件渲染:根据条件渲染不同的内容,提高组件的灵活性和性能
1.2 代码组织最佳实践
// 接口定义(interfaces.ets)
export interface ListItemProps { /* ... */ }
export interface ListProps { /* ... */ }// 列表容器组件(UVList.ets)
@Component
struct UVList {private props: ListProps = {} as ListProps;build() { /* ... */ }
}// 列表项组件(UVListItem.ets)
@Component
struct UVListItem {private item: ListItemProps = {} as ListItemProps;private showIcon: boolean = true;// 其他属性...build() { /* ... */ }
}

代码组织建议:

  1. 分离接口定义:将接口定义放在单独的文件中,便于复用和维护
  2. 组件职责明确:每个组件只负责单一的功能,避免过于复杂的组件
  3. 合理的文件结构:相关的文件放在一起,便于查找和维护

2. 实际应用案例

2.1 电商应用商品列表
// 商品列表项接口
interface ProductItemProps extends ListItemProps {price: string;originalPrice?: string;sales?: string;rating?: number;
}@Component
struct ProductList {@State products: Array<ProductItemProps> = [];@Builderprivate renderProductItem(item: ProductItemProps) {Row() {// 商品图片Image(item.icon).width(80).height(80).objectFit(ImageFit.Cover).borderRadius(4).margin({ right: 12 })// 商品信息Column() {// 商品标题Text(item.title).fontSize(16).fontWeight(FontWeight.Medium).width('100%').textAlign(TextAlign.Start)// 商品描述if (item.note) {Text(item.note).fontSize(14).fontColor('#999').width('100%').textAlign(TextAlign.Start).margin({ top: 4 })}// 价格和销量Row() {// 价格Text(`¥${item.price}`).fontSize(16).fontColor('#ff6b00').fontWeight(FontWeight.Bold)// 原价if (item.originalPrice) {Text(`¥${item.originalPrice}`).fontSize(12).fontColor('#999').decoration({ type: TextDecorationType.LineThrough }).margin({ left: 4 })}// 销量if (item.sales) {Text(`已售${item.sales}`).fontSize(12).fontColor('#999').margin({ left: 8 })}}.width('100%').margin({ top: 4 })}.layoutWeight(1).alignItems(HorizontalAlign.Start)}.width('100%').padding(12).backgroundColor(Color.White).borderRadius(8).onClick(() => {if (item.onClick) {item.onClick();}})}build() {List() {ForEach(this.products, (item: ProductItemProps) => {ListItem() {this.renderProductItem(item)}.padding({ left: 16, right: 16, top: 4, bottom: 4 })})}.width('100%').divider({ strokeWidth: 1, color: '#f5f5f5', startMargin: 16, endMargin: 16 })}
}
2.2 社交应用消息列表
// 消息列表项接口
interface MessageItemProps extends ListItemProps {avatar?: string | Resource;time?: string;unread?: number;
}@Component
struct MessageList {@State messages: Array<MessageItemProps> = [];@Builderprivate renderMessageItem(item: MessageItemProps) {Row() {// 头像if (item.avatar) {Image(item.avatar).width(48).height(48).borderRadius(24).margin({ right: 12 })}// 消息内容Column() {// 标题和时间Row() {Text(item.title).fontSize(16).fontWeight(FontWeight.Medium).layoutWeight(1)if (item.time) {Text(item.time).fontSize(12).fontColor('#999')}}.width('100%')// 消息内容和未读数Row() {Text(item.note || '').fontSize(14).fontColor('#999').layoutWeight(1).maxLines(1).textOverflow({ overflow: TextOverflow.Ellipsis })if (item.unread && item.unread > 0) {Text(`${item.unread > 99 ? '99+' : item.unread}`).fontSize(12).fontColor(Color.White).backgroundColor('#ff5252').borderRadius(10).padding({ left: 6, right: 6, top: 2, bottom: 2 })}}.width('100%').margin({ top: 4 })}.layoutWeight(1)}.width('100%').padding(12).backgroundColor(Color.White).onClick(() => {if (item.onClick) {item.onClick();}})}build() {List() {ForEach(this.messages, (item: MessageItemProps) => {ListItem() {this.renderMessageItem(item)}})}.width('100%').divider({ strokeWidth: 1, color: '#f5f5f5' })}
}

3. 性能优化实践

3.1 大数据量列表优化

当列表数据量较大时,可以采用以下优化策略:

// 数据源类定义
class ListDataSource implements IDataSource {private dataArray: Array<ListItemProps> = [];private listener: DataChangeListener = null;constructor(data: Array<ListItemProps>) {this.dataArray = data;}totalCount(): number {return this.dataArray.length;}getData(index: number): ListItemProps {return this.dataArray[index];}registerDataChangeListener(listener: DataChangeListener): void {this.listener = listener;}unregisterDataChangeListener(): void {this.listener = null;}// 更新数据updateData(data: Array<ListItemProps>): void {this.dataArray = data;if (this.listener) {this.listener.onDataReloaded();}}
}// 使用LazyForEach实现高性能列表
@Component
struct OptimizedList {@State private dataSource: ListDataSource = new ListDataSource([]);aboutToAppear() {// 初始化数据this.loadData();}private loadData() {// 模拟加载大量数据const data: Array<ListItemProps> = [];for (let i = 0; i < 1000; i++) {data.push({title: `列表项 ${i}`,note: `这是第 ${i} 个列表项的描述`,onClick: () => console.info(`点击了第 ${i}`)});}this.dataSource = new ListDataSource(data);}build() {List() {LazyForEach(this.dataSource, (item: ListItemProps, index: number) => {ListItem() {UVListItem({item: item,showIcon: false})}.padding({ left: 16, right: 16, top: 4, bottom: 4 })}, item => item.title) // 使用标题作为唯一键}.width('100%').divider({ strokeWidth: 1, color: '#f5f5f5', startMargin: 16, endMargin: 16 })}
}
3.2 列表刷新与加载更多

实现下拉刷新和上拉加载更多功能:

@Component
struct RefreshableList {@State listItems: Array<ListItemProps> = [];@State refreshing: boolean = false;@State loading: boolean = false;@State page: number = 1;@State hasMore: boolean = true;aboutToAppear() {this.loadData();}private async loadData(refresh: boolean = false) {if (refresh) {this.refreshing = true;this.page = 1;} else {this.loading = true;}try {// 模拟网络请求await new Promise(resolve => setTimeout(resolve, 1000));const newData = [];for (let i = 0; i < 10; i++) {const index = (this.page - 1) * 10 + i;newData.push({title: `列表项 ${index}`,note: `这是第 ${index} 个列表项的描述`});}if (refresh) {this.listItems = newData;} else {this.listItems = [...this.listItems, ...newData];}this.hasMore = this.page < 5; // 模拟只有5页数据this.page++;} finally {this.refreshing = false;this.loading = false;}}build() {Column() {// 使用Refresh组件实现下拉刷新Refresh({refreshing: this.refreshing,onRefresh: () => {this.loadData(true);}}) {// 列表内容List() {ForEach(this.listItems, (item: ListItemProps) => {ListItem() {UVListItem({item: item})}})// 加载更多if (this.hasMore) {ListItem() {Row() {if (this.loading) {LoadingProgress().width(24).height(24).margin({ right: 8 })}Text(this.loading ? '加载中...' : '点击加载更多').fontSize(14).fontColor('#999')}.width('100%').justifyContent(FlexAlign.Center).padding(16).onClick(() => {if (!this.loading) {this.loadData();}})}} else {ListItem() {Text('没有更多数据了').fontSize(14).fontColor('#999').width('100%').textAlign(TextAlign.Center).padding(16)
}}}.width('100%').divider({ strokeWidth: 1, color: '#f5f5f5', startMargin: 16, endMargin: 16 })}}}
}
3.3 列表动画优化

为列表项添加动画效果,提升用户体验:

@Component
struct AnimatedListItem {private item: ListItemProps;@State private opacity: number = 0;@State private translateY: number = 50;aboutToAppear() {// 延迟执行动画,错开多个列表项的动画时间setTimeout(() => {animateTo({duration: 300,curve: Curve.EaseOut,}, () => {this.opacity = 1;this.translateY = 0;});}, 50);}build() {UVListItem({item: this.item}).opacity(this.opacity).translate({ y: this.translateY })}
}// 在列表中使用动画列表项
ForEach(this.listItems, (item: ListItemProps) => {ListItem() {AnimatedListItem({ item: item })}
})

4. 扩展与定制

4.1 主题定制

支持主题切换的UVList组件:

// 主题接口
interface ListTheme {backgroundColor: ResourceColor;textColor: ResourceColor;secondaryTextColor: ResourceColor;dividerColor: ResourceColor;iconBackgroundColor: ResourceColor;disabledBackgroundColor: ResourceColor;disabledTextColor: ResourceColor;
}// 预定义主题
const LightTheme: ListTheme = {backgroundColor: Color.White,textColor: '#333',secondaryTextColor: '#999',dividerColor: '#f5f5f5',iconBackgroundColor: '#f5f5f5',disabledBackgroundColor: '#fafafa',disabledTextColor: '#bdbdbd'
};const DarkTheme: ListTheme = {backgroundColor: '#1e1e1e',textColor: '#e0e0e0',secondaryTextColor: '#a0a0a0',dividerColor: '#333333',iconBackgroundColor: '#333333',disabledBackgroundColor: '#2d2d2d',disabledTextColor: '#666666'
};// 支持主题的列表项组件
@Component
struct ThemedListItem {private item: ListItemProps;private theme: ListTheme = LightTheme;build() {Row() {// 左侧图标区域if (this.item.icon) {Row() {if (typeof this.item.icon === 'string') {Text(this.item.icon).fontSize(16).fontColor(this.theme.textColor)} else {Image(this.item.icon).width(24).height(24).objectFit(ImageFit.Contain)}}.width(40).height(40).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center).margin({ right: 12 }).borderRadius(4).backgroundColor(this.theme.iconBackgroundColor)}// 中间内容区域Column() {Text(this.item.title).fontSize(16).fontWeight(FontWeight.Medium).fontColor(this.item.disabled ? this.theme.disabledTextColor : this.theme.textColor).width('100%').textAlign(TextAlign.Start)if (this.item.note) {Text(this.item.note).fontSize(14).fontColor(this.item.disabled ? this.theme.disabledTextColor : this.theme.secondaryTextColor).width('100%').textAlign(TextAlign.Start).margin({ top: 4 })}}.layoutWeight(1).alignItems(HorizontalAlign.Start)// 右侧区域Row() {if (this.item.rightText) {Text(this.item.rightText).fontSize(14).fontColor(this.item.disabled ? this.theme.disabledTextColor : this.theme.secondaryTextColor).margin({ right: 4 })}if (this.item.showArrow !== false) {Image($r('app.media.ic_arrow_right')).width(16).height(16).objectFit(ImageFit.Contain).opacity(this.item.disabled ? 0.3 : 1)}}.alignItems(VerticalAlign.Center)}.width('100%').padding({ left: 16, right: 16, top: 12, bottom: 12 }).backgroundColor(this.item.disabled ? this.theme.disabledBackgroundColor : this.theme.backgroundColor).borderRadius(8).onClick(() => {if (!this.item.disabled && this.item.onClick) {this.item.onClick();}})}
}
4.2 自定义列表项类型

扩展列表项类型,支持更多场景:

// 开关列表项接口
interface SwitchListItemProps extends ListItemProps {checked: boolean;onCheckedChange: (checked: boolean) => void;
}// 开关列表项组件
@Component
struct SwitchListItem {private item: SwitchListItemProps;build() {Row() {// 左侧图标if (this.item.icon) {// 图标渲染代码...}// 中间内容Column() {Text(this.item.title).fontSize(16).fontWeight(FontWeight.Medium).width('100%').textAlign(TextAlign.Start)if (this.item.note) {Text(this.item.note).fontSize(14).fontColor('#999').width('100%').textAlign(TextAlign.Start).margin({ top: 4 })}}.layoutWeight(1).alignItems(HorizontalAlign.Start)// 右侧开关Toggle({ type: ToggleType.Switch, isOn: this.item.checked }).onChange((isOn: boolean) => {if (!this.item.disabled && this.item.onCheckedChange) {this.item.onCheckedChange(isOn);}}).enabled(!this.item.disabled)}.width('100%').padding({ left: 16, right: 16, top: 12, bottom: 12 }).backgroundColor(this.item.disabled ? '#fafafa' : Color.White).borderRadius(8)}
}

5. 总结

通过本系列教程,我们深入讲解了UVList组件的设计思路、接口定义、实现细节、使用方法和性能优化。UVList组件作为一个功能强大的列表组件,可以满足大多数应用场景的需求,并且具有高度的可定制性和扩展性。

在实际开发中,我们可以根据具体需求对UVList组件进行定制和扩展,以满足不同应用场景的需求。同时,我们也可以借鉴UVList组件的设计思路和实现方式,开发其他高质量的组件,提升应用的用户体验和开发效率。

希望本系列教程能够帮助你更好地理解和使用UVList组件,构建出更优秀的HarmonyOS NEXT应用!

相关文章:

18 HarmonyOS NEXT UVList组件开发指南(五)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 第五篇&#xff1a;UVList组件最佳实践与实际应用案例 文章目录 第五篇&#xff1a;UVList组件最佳实践与实际应用案例1. 最佳实践总结1.1 组件设计…...

vue3组合式API怎么获取全局变量globalProperties

设置全局变量 main.ts app.config.globalProperties.$category { index: 0 } 获取全局变量 const { appContext } getCurrentInstance() as ComponentInternalInstance console.log(appContext.config.globalProperties.$category) 或是 const { proxy } getCurrentInstance…...

华为机试牛客刷题之HJ14 字符串排序

HJ14 字符串排序 描述 对于给定的由大小写字母混合构成的 n 个单词&#xff0c;输出按字典序从小到大排序后的结果。 从字符串的第一个字符开始逐个比较&#xff0c;直到找到第一个不同的位置&#xff0c;通过比较这个位置字符对应的&#xff08;A<⋯<Z<a<⋯<…...

CPU 负载 和 CPU利用率 的区别

简单记录下 top 命令中&#xff0c;CPU利用率核CPU负载的概念&#xff0c; &#xff08;1&#xff09;CPU利用率&#xff1a;指在一段时间内 表示 CPU 实际工作时间占总时间的百分比。表示正在执行进程的时间比例&#xff0c;包括用户空间和内核空间程序的执行时间。通常包含以…...

SSM框架

SSM 框架是 Java Web 开发中广泛使用的经典组合&#xff0c;由 Spring、Spring MVC 和 MyBatis 三个开源框架整合而成&#xff0c;适用于构建中大型企业级应用。 1. SSM框架组成 框架作用核心特性Spring管理业务层&#xff08;Service&#xff09;和持久层&#xff08;DAO&am…...

maven无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1

解决流程 1.修改maven仓库库地址 2.删除本地的maven仓库 maven插件一直加载有问题: 无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1 开始以为maven版本有问题&#xff0c;重装了maven&#xff0c;重装了idea工具。结果问题还是没解决。研究之后发现&#xf…...

如何修复“RPC 服务器不可用”错误

远程过程调用&#xff08;Remote Procedure Call&#xff0c; RPC&#xff09;是允许客户端在不同计算机上执行进程的众多可用网络进程之一。本文将深入探讨RPC如何在不同的软件系统之间实现无缝消息交换&#xff0c;同时重点介绍与RPC相关的常见错误的一些原因。 什么是远程过…...

晋升系列4:学习方法

每一个成功的人&#xff0c;都是从底层开始打怪&#xff0c;不断的总结经验&#xff0c;一步一步打上来的。在这个过程中需要坚持、总结方法论。 对一件事情长久坚持的人其实比较少&#xff0c;在坚持的人中&#xff0c;不断的总结优化的更少&#xff0c;所以最终达到高级别的…...

单链表-代码精简版

单链表核心知识详解 单链表是一种动态存储的线性数据结构&#xff0c;其特点是逻辑上连续&#xff0c;物理上非连续&#xff0c;每个节点包含数据域和指向下一个节点的指针域。以下是核心知识点与完整实现代码&#xff1a; 一、单链表的结构定义 单链表节点通过结构体自引用…...

关于前后端整合和打包成exe文件的个人的总结和思考

前言 感觉有很多东西&#xff0c;不知道写什么&#xff0c;随便写点吧。 正文 前后端合并 就不说怎么开发的&#xff0c;就说点个人感觉重要的东西。 前端用ReactViteaxios随便写一个demo&#xff0c;用于CRUD。 后端用Django REST Framework。 设置前端打包 import { …...

基于muduo+mysql+jsoncpp的简易HTTPWebServer

一、项目介绍 本项目基于C语言、陈硕老师的muduo网络库、mysql数据库以及jsoncpp&#xff0c;服务器监听两个端口&#xff0c;一个端口用于处理http请求&#xff0c;另一个端口用于处理发送来的json数据。 此项目在实现时&#xff0c;识别出车牌后打包为json数据发送给后端服务…...

Java/Kotlin逆向基础与Smali语法精解

1. 法律警示与道德边界 1.1 司法判例深度剖析 案例一&#xff1a;2021年某游戏外挂团伙刑事案 犯罪手法&#xff1a;逆向《王者荣耀》通信协议&#xff0c;修改战斗数据包 技术细节&#xff1a;Hook libil2cpp.so的SendPacket函数 量刑依据&#xff1a;非法经营罪&#xff…...

C++:入门详解(关于C与C++基本差别)

目录 一.C的第一个程序 二.命名空间&#xff08;namespace&#xff09; 1.命名空间的定义与使用&#xff1a; &#xff08;1&#xff09;命名空间里可以定义变量&#xff0c;函数&#xff0c;结构体等多种类型 &#xff08;2&#xff09;命名空间调用&#xff08;&#xf…...

CI/CD—GitLab钩子触发Jenkins自动构建项目

GitLab钩子简介&#xff1a; 项目钩子 项目钩子是针对单个项目的钩子&#xff0c;会在项目级别的特定事件发生时触发。这些事件包括代码推送、合并请求创建、问题创建等。项目钩子由项目管理员或具有相应权限的用户进行配置&#xff0c;仅对特定项目生效。 使用场景&#xff1a…...

RPA 职业前景:个人职场发展的 “新机遇”

1. RPA职业定义与范畴 1.1 RPA核心概念 机器人流程自动化&#xff08;RPA&#xff09;是一种通过软件机器人模拟人类操作&#xff0c;自动执行重复性、规则性任务的技术。RPA的核心在于其能够高效、准确地处理大量数据和流程&#xff0c;减少人工干预&#xff0c;从而提高工作…...

【CSS3】金丹篇

目录 标准流概念元素类型及排列规则块级元素行内元素行内块元素 标准流的特点打破标准流 浮动基本使用清除浮动额外标签法单伪元素法双伪元素法&#xff08;推荐&#xff09;overflow 法 Flex 布局Flex 组成主轴对齐方式侧轴对齐方式修改主轴方向弹性盒子伸缩比弹性盒子换行行对…...

Git(一)

一、介绍 二、Git代码托管服务 三、Git常用命令 全局设置&#xff1a; 获取Git仓库&#xff1a; 工作区、暂存区、版本库概念&#xff1a; Git工作区文件的状态&#xff1a; 本地仓库操作&#xff1a; 远程仓库操作&#xff1a; 分支操作&#xff1a; 标签操作&#xff1a; 四…...

Python大数据可视化:基于spark的短视频推荐系统的设计与实现_django+spider

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 热门视频界面 用户界面 用户反馈界面 论坛交流界面 系统…...

面试题之react useMemo和uesCallback

在面试中&#xff0c;关于 React 中的 useMemo 和 useCallback 的区别 是一个常见的问题。 useMemo 和 useCallback 的区别 1. 功能定义 useMemo&#xff1a; 用于缓存计算结果&#xff0c;避免在每次组件渲染时重新计算复杂的值。它接受一个计算函数和一个依赖数组&#xff0…...

K8S学习之基础十九:k8s的四层代理Service

K8S四层代理Service 四层负载均衡Service 在k8s中&#xff0c;访问pod可以通过ip端口的方式&#xff0c;但是pod是由生命 周期的&#xff0c;pod在重启的时候ip地址往往会发生变化&#xff0c;访问pod就需要新的ip地址&#xff0c;这样就会很麻烦&#xff0c;每次pod地址改变就…...

C++:string容器(下篇)

1.string浅拷贝的问题 // 为了和标准库区分&#xff0c;此处使用String class String { public :/*String():_str(new char[1]){*_str \0;}*///String(const char* str "\0") // 错误示范//String(const char* str nullptr) // 错误示范String(const char* str …...

sudo systemctl restart docker 重启docker失败

一般会使用如下命令&#xff0c;进行docker重启。 sudo systemctl daemon-reload sudo systemctl restart docker 重启失败时&#xff0c;会提示&#xff1a;Job for docker.service failed because the control process exited with error code. See "systemctl status…...

Linux基本操作指令3

1、wget: 这是一个用于从网络上下载文件的命令行工具。它支持 HTTP、HTTPS 和 FTP 协议。 wget http://download.qt.io/archive/qt/5.12/5.12.9/qt-opensource-linux-x64-5.12.9.run 2、下载完成后&#xff0c;你可以通过以下命令使文件可执行并运行安装程序&#xff1a; ch…...

React:类组件(上)

kerwin老师我来了 类组件的创建 class组件&#xff0c;js里的类命名首字符大写&#xff0c;类里面包括构造函数&#xff0c;方法 组件类要继承React.Component才有效 必须包含render方法 import React from react class App extends React.Component{render() {return <…...

sqli-lab靶场学习(七)——Less23-25(关键字被过滤、二次注入)

前言 之前的每一关&#xff0c;我们都是在末尾加上注释符&#xff0c;屏蔽后面的语句&#xff0c;这样我们只要闭合了区间之后&#xff0c;差不多就是为所欲为的状态。但如果注释符不生效的情况下&#xff0c;又该如何呢&#xff1f; Less23&#xff08;注释符被过滤&#xff…...

虚函数和虚表的原理是什么?

虚函数是一个使用virtual关键字声明的成员函数&#xff0c;在基类中声明虚函数&#xff0c;在子类中可以使用override重写该函数。虚函数根据指针或引用指向的实际对象调用&#xff0c;实现运行时的多态。 虚函数表&#xff08;虚表&#xff09;是一个用于存储虚函数地址的数组…...

RReadWriteLock读写锁应用场景

背景 操作涉及一批数据&#xff0c;如订单&#xff0c;可能存在多个场景下操作&#xff0c;先使用读锁&#xff0c;从redis缓存中获取操作中数据 比如 关闭账单&#xff0c; 发起调账&#xff0c; 线下结算&#xff0c; 合并支付 先判断当前操作的数据&#xff0c;是否在…...

【面试】MySQL

MySQL 1、数据库三范式2、什么是关系型数据库&#xff0c;什么是非关系型数据库3、什么是数据库存储引擎4、MySQL5.x和8.0有什么区别5、char 和 varchar 的区别6、in 和 exists 的区别7、MySQL 时间类型数据存储建议8、drop、delete 与 truncate 区别9、一条 Sql 的执行顺序10、…...

Trae AI 开发工具使用手册

这篇手册将介绍 Trae 的基本功能、安装步骤以及使用方法&#xff0c;帮助开发者快速上手这款工具。 Trae AI 开发工具使用手册 Trae 是字节跳动于 2025 年推出的一款 AI 原生集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在通过智能代码生成、上下文理解和自动化任务…...

表格columns拼接两个后端返回的字段(以umi框架为例)

在用组件对前端项目进行开发时&#xff0c;我们会遇到以下情况&#xff1a;项目原型中有取值范围这个表字段&#xff0c;需要存放最小取值到最大取值。 而后端返回给我们的数据是返回了一个最小值和一个最大值&#xff0c; 在columns中我们需要对这两个字段进行拼接&#xff0…...

常见的算法题python

字符串倒序 def func1(str):return str[::-1] def func2(str):new_str ""for i in str:new_str inew_strreturn new_str if __name____main__:str"linda"print(func2(str))合并两个有序的列表 def func3(list1,list2):for i in list1:list2.append(i)li…...

linux学习(十)(磁盘和文件系统(索引节点,文件系统,添加磁盘,交换,LVM公司,挂载))

Linux 磁盘文件系统 Linux 使用各种文件系统来允许我们从计算机系统的硬件&#xff08;例如磁盘&#xff09;存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。 每个文件系统都有自己的…...

k8s v1.28.15部署(kubeadm方式)

k8s部署&#xff08;kubeadm方式&#xff09; 部署环境及版本 系统版本&#xff1a;CentOS Linux release 7.9.2009 k8s版本&#xff1a;v1.28.15 docker版本&#xff1a;26.1.4 containerd版本&#xff1a;1.6.33 calico版本&#xff1a;v3.25.0准备 主机ip主机名角色配置1…...

Python开发Scikit-learn面试题及参考答案

目录 如何用 SimpleImputer 处理数据集中的缺失值? 使用 StandardScaler 对数据进行标准化的原理是什么?与 MinMaxScaler 有何区别? 如何用 OneHotEncoder 对类别型特征进行编码? 解释特征选择中 SelectKBest 与 VarianceThreshold 的应用场景。 如何通过 PolynomialFe…...

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一&#xff1a;海量数据的分布式计算 场景二&#xff1a;实时决策的毫秒级响应 场景三&#xff1a;弹性扩展与容错机制 技术隐喻&#xff1a; 二、车载信息系统&#xff08;IVI&#xff09;的交互 场景一&#xff1a;Android Automo…...

蓝队第三次

1.了解什么是盲注 盲注&#xff08;Blind SQL Injection&#xff09;是SQL注入的一种形式&#xff0c;攻击者无法直接通过页面回显或错误信息获取数据&#xff0c;而是通过观察页面的布尔状态&#xff08;真/假&#xff09;或时间延迟来间接推断数据库信息。例如&#xff0c;通…...

Element Plus中的树组件的具体用法(持续更新!)

const defaultProps {//子树为节点对象的childrenchildren: children,//节点标签为节点对象的name属性label: name, } 属性 以下是树组件中的常用属性以及作用&#xff1a; data&#xff1a;展示的数据&#xff08;数据源&#xff09; show-checkbox&#xff1a;节点是否可…...

nodejs使用WebSocket实现聊天效果

在nodejs中使用WebSocket实现聊天效果&#xff08;简易实现&#xff09; 安装 npm i ws 实现 创建 server.js /*** 创建一个 WebSocket 服务器&#xff0c;监听指定端口&#xff0c;并处理客户端连接和消息。** param {Object} WebSocket - 引入的 WebSocket 模块&#xff0c…...

通领科技冲刺北交所

高质量增长奔赴产业新征程 日前&#xff0c;通领科技已正式启动在北交所的 IPO 进程&#xff0c;期望借助资本市场的力量&#xff0c;加速技术升级&#xff0c;推动全球化战略布局。这一举措不仅展现了中国汽车零部件企业的强大实力&#xff0c;也预示着行业转型升级的新突破。…...

利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)

研究背景 研究问题:如何准确预测旋转机械(如轴承)的剩余使用寿命(RUL),这对于设备可靠性和减少工业系统中的意外故障至关重要。研究难点:该问题的研究难点包括:训练和测试阶段数据分布不一致、长期RUL预测的泛化能力有限。相关工作:现有工作主要包括基于模型的方法、数…...

comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置

第一部分&#xff1a; BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …...

Django工程获取请求参数的几种方式

在 Django 中获取请求参数的完整方法如下&#xff1a; 一、GET 请求参数获取 def view_func(request):# 获取单个参数&#xff08;推荐方式&#xff09;name request.GET.get(name, default) # 带默认值age request.GET.get(age, 0)# 获取多个同名参数&#xff08;如复选框…...

使用Qt调用HslCommunication(C++调用C#库)

使用C/CLI 来调用C#的dll 任务分解&#xff1a; 1、实现C#封装一个调用hsl的dll&#xff1b; 2、实现C控制台调用C#的dll库&#xff1b; 3、把调用C#的dll用C再封装为一个dll&#xff1b; 4、最后再用Qt调用c的dll&#xff1b; 填坑&#xff1a; 1、开发时VS需要安装CLI项目库…...

C++中的构造函数

目录 一、什么是构造函数&#xff1a; 二、构造函数的特性和使用&#xff1a; 1、构造函数的特性&#xff1a; 2、构造函数的重载&#xff1a; 三、默认生成的构造函数&#xff1a; 一、什么是构造函数&#xff1a; 在C中&#xff0c;当创建一个对象之后&#xff0c;就会自…...

MySQL知识点(第一部分)

MySQL 基础&#xff1a; 1、SQL语句的分类&#xff1a; DDL&#xff1a;用于控制数据库的操作DML&#xff1a;用于控制表结构的字段&#xff0c;增、删、修DQL&#xff1a;用于查询语句DCL&#xff1a;用于管理数据库&#xff0c;用户&#xff0c;数据库的访问 权限。 2、M…...

Lua怎么学?Lua编程实战:从基础语法到高级特性

朋友们&#xff0c;大家好&#xff0c;我是袁庭新。我的《Lua编程实战&#xff1a;从基础语法到高级特性》教程上线了&#xff01;这是一套从零掌握Lua编程&#xff0c;涵盖基础到高级&#xff0c;以实战驱动&#xff0c;快速上手Lua开发的精品教程&#xff01; 我为什么要研发…...

Qt常用控件之 纵向列表QListWidget

纵向列表QListWidget QListWidget 是一个纵向列表控件。 QListWidget属性 属性说明currentRow当前被选中的是第几行。count一共有多少行。sortingEnabled是否允许排序。isWrapping是否允许换行。itemAlignment元素的对齐方式。selectRectVisible被选中的元素矩形是否可见。s…...

Manus无需邀请码即可使用的平替方案-OpenManus实测

文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...

git如何解除远程仓库 改变远程仓库地址

这三个命令通常一起使用来更改项目的远程仓库地址&#xff1a; 查看当前远程仓库配置&#xff1a;git remote -v移除旧的远程仓库配置&#xff1a;git remote remove origin添加新的远程仓库配置&#xff1a;git remote add origin 新的远程仓库地址 要解除当前项目的远程仓库…...

VSCode 配置优化指南:打造高效的 uni-app、Vue2/3、JS/TS 开发环境

VSCode 配置优化指南,适用于 uni-app、Vue2、Vue3、JavaScript、TypeScript 开发,包括插件推荐、设置优化、代码片段、调试配置等,确保你的开发体验更加流畅高效。 1. 安装 VSCode 如果你还未安装 VSCode,可前往 VSCode 官网 下载最新版并安装。 2. 安装推荐插件 (1) Vue…...