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

Compose笔记(十四)--LazyColumn

        这一节了解一下Compose中的LazyColumn,在Jetpack Compose 中,LazyColumn 是一个用于高效显示长列表或可滚动垂直布局的组件。它类似于传统 Android 开发中的 RecyclerView,但专为 Compose 的声明式 UI 框架设计,能够显著优化性能,特别是在处理大量数据时。

特点

1 惰性加载(Lazy Loading)
LazyColumn 仅渲染当前屏幕上可见的列表项,未显示的部分不会被加载,从而减少内存占用和初始化时间。
2 高效性能
通过按需渲染和复用已加载的组件,LazyColumn 在处理大数据集时表现优异,避免了传统布局(如 Column)因一次性加载所有项而导致的性能问题。
3 声明式 API
使用 Compose 的声明式语法,开发者可以通过简单的代码定义列表项的布局和行为,无需手动管理适配器或视图持有者(ViewHolder)。

与RecyclerView的对比

LazyColumn一般场景
长列表或大数据集:如聊天记录、商品列表、新闻 feed 等。
动态内容更新:需要频繁更新列表项的场景。
复杂布局:需要嵌套其他 Compose 组件的列表。

栗子

import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable//显示简单列表
@Composable
fun SimpleListExample() {val itemsList = listOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")LazyColumn {items(itemsList) { item ->Text(text = item)}}
}
// 键值(Key)支持
//通过为每个项指定唯一的键值,可以优化列表更新时的性能。items(items, key = { it.id }) { item ->Text(text = item.name)
}
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp//带有头和尾的列表@Composable
fun ListWithHeaderAndFooterExample() {val itemsList = listOf("Item 1", "Item 2", "Item 3", "Item 4", "Item 5")LazyColumn {item {Text(text = "Header", modifier = Modifier.padding(16.dp))}items(itemsList) { item ->Text(text = item, modifier = Modifier.padding(16.dp))}item {Text(text = "Footer", modifier = Modifier.padding(16.dp))}}
}
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dpsealed class ListItem {data class TextItem(val text: String) : ListItem()data class HeaderItem(val title: String) : ListItem()
}//不同类型的列表项
@Composable
fun ListWithDifferentItemTypesExample() {val itemsList = listOf(ListItem.HeaderItem("Section 1"),ListItem.TextItem("Item 1"),ListItem.TextItem("Item 2"),ListItem.HeaderItem("Section 2"),ListItem.TextItem("Item 3"),ListItem.TextItem("Item 4"))LazyColumn {items(itemsList) { item ->when (item) {is ListItem.HeaderItem -> {Text(text = item.title, modifier = Modifier.padding(16.dp))}is ListItem.TextItem -> {Text(text = item.text, modifier = Modifier.padding(16.dp).padding(start = 32.dp))}}}}
}
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier//分页加载列表
@Composable
fun PaginationListExample() {var itemsList by remember { mutableStateOf((1..10).toList()) }val listState = rememberLazyListState()val loadMore = remember {derivedStateOf {val layoutInfo = listState.layoutInfoval totalItemsNumber = layoutInfo.totalItemsCountval lastVisibleItemIndex = (layoutInfo.visibleItemsInfo.lastOrNull()?.index ?: 0) + 1lastVisibleItemIndex > totalItemsNumber - 2}}LaunchedEffect(loadMore.value) {if (loadMore.value) {val newItems = (itemsList.last() + 1..itemsList.last() + 10).toList()itemsList = itemsList + newItems}}LazyColumn(state = listState) {items(itemsList) { item ->Text(text = "Item $item")}}
}
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp// 模拟数据类
data class Item(val name: String)// 分模块加载
@Composable
fun LazyColumnWithModules() {val moduleBData = listOf(Item("Item 1"),Item("Item 2"),Item("Item 3"))LazyColumn(contentPadding = PaddingValues(16.dp),verticalArrangement = Arrangement.spacedBy(16.dp)) {// 模块 Aitem {ModuleA()}// 模块 Bitem {ModuleB(moduleBData)}// 模块 Citem {ModuleC()}}
}@Composable
fun ModuleA() {Box(modifier = Modifier.fillMaxWidth().background(Color.LightGray).padding(16.dp)) {Text(text = "Module A")}
}@Composable
fun ModuleB(data: List<Item>) {Column(modifier = Modifier.fillMaxWidth().clip(RoundedCornerShape(16.dp)).background(Color.Gray).padding(16.dp),verticalArrangement = Arrangement.spacedBy(8.dp)) {data.forEach { item ->Box(modifier = Modifier.fillMaxWidth().background(Color.White).border(1.dp, Color.Black, RoundedCornerShape(8.dp)).padding(16.dp)) {Text(text = item.name)}}}
}@Composable
fun ModuleC() {Box(modifier = Modifier.fillMaxWidth().background(Color.LightGray).padding(16.dp)) {Text(text = "Module C")}
}

注意

1 避免过度嵌套
在 LazyColumn 中嵌套其他 LazyColumn 或复杂布局可能导致性能问题。
2 状态管理
如果列表项包含状态(如复选框、输入框等),建议将状态提升到外部以避免不必要的重组。

简单看一下LazyColumn源码

1. LazyColumn 函数定义
LazyColumn 本质上是一个 Composable 函数,其定义位于 androidx.compose.foundation.lazy 包下。下面是简化后的函数:

@Composable
fun LazyColumn(modifier: Modifier = Modifier,state: LazyListState = rememberLazyListState(),contentPadding: PaddingValues = PaddingValues(0.dp),reverseLayout: Boolean = false,verticalArrangement: Arrangement.Vertical = Arrangement.Top,horizontalAlignment: Alignment.Horizontal = Alignment.Start,flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),content: LazyListScope.() -> Unit
) {LazyList(modifier = modifier,state = state,contentPadding = contentPadding,reverseLayout = reverseLayout,verticalArrangement = verticalArrangement,horizontalAlignment = horizontalAlignment,flingBehavior = flingBehavior,orientation = Orientation.Vertical,content = content)
}

分析:
modifier:用于修饰 LazyColumn 的外观和行为,例如设置大小、边距、背景等。
state:LazyListState 类型,用于管理列表的滚动状态,如滚动位置、滚动偏移量等。
contentPadding:PaddingValues 类型,用于设置列表内容的内边距。
reverseLayout:布尔类型,若为 true,列表将从底部开始反向布局。
verticalArrangement:Arrangement.Vertical 类型,用于指定列表项在垂直方向上的排列方式,如顶部对齐、居中对齐等。
horizontalAlignment:Alignment.Horizontal 类型,用于指定列表项在水平方向上的对齐方式,如左对齐、居中对齐等。
flingBehavior:FlingBehavior 类型,用于定义列表在快速滑动时的滚动行为。
content:LazyListScope.() -> Unit 类型,这是一个作用域函数,用于定义列表的内容,即列表项的具体布局

2. LazyList 函数调用
LazyColumn内部调用了LazyList 函数,LazyList是一个更通用的列表组件,支持垂直和水平滚动。以下是 LazyList函数的简化:

@Composable
private fun LazyList(modifier: Modifier = Modifier,state: LazyListState = rememberLazyListState(),contentPadding: PaddingValues = PaddingValues(0.dp),reverseLayout: Boolean = false,verticalArrangement: Arrangement.Vertical = Arrangement.Top,horizontalAlignment: Alignment.Horizontal = Alignment.Start,flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),orientation: Orientation,content: LazyListScope.() -> Unit
) {// 实现逻辑
}

分析:
orientation:Orientation 类型,指定列表的滚动方向,LazyColumn 中传入的是 Orientation.Vertical。

3. 懒加载机制实现
LazyColumn 的核心特性是懒加载,即只有当列表项进入可视区域时才会进行渲染。这一机制主要通过 LazyListState 和 LazyListLayout 来实现。
3.1 LazyListState
LazyListState 用于管理列表的滚动状态,包括滚动位置、滚动偏移量等。它内部维护了一个 LayoutInfo 对象,用于记录列表项的布局信息。通过 LazyListState,可以实现滚动到指定位置、监听滚动事件等功能。
3.2 LazyListLayout
LazyListLayout 是 LazyColumn 的布局实现类,它继承自 Layout 组件。在 LazyListLayout 中,会根据当前的滚动状态和可视区域,计算需要渲染的列表项,并调用相应的 Composable 函数进行渲染。具体实现逻辑如下:
测量阶段:根据列表项的大小和滚动状态,计算需要渲染的列表项的数量和位置。
布局阶段:将需要渲染的列表项布局到可视区域内,并根据滚动状态进行偏移。

4. 列表项管理
LazyColumn 通过 LazyListScope 来管理列表项。LazyListScope 提供了多个方法,用于添加不同类型的列表项,例如 items、item 等。
4.1 items 方法
items 方法用于添加一组相同类型的列表项,其简化如下:

fun <T> LazyListScope.items(items: List<T>,key: ((item: T) -> Any)? = null,contentType: ((item: T) -> Any)? = null,itemContent: @Composable LazyItemScope.(item: T) -> Unit
)

 分析:
items:列表数据,即需要显示的列表项集合。
key:可选参数,用于为每个列表项提供一个唯一的键,以提高列表的性能和稳定性。
contentType:可选参数,用于指定列表项的类型,以便在渲染时进行优化。
itemContent:Composable 函数,用于定义每个列表项的具体布局。

4.2 item 方法
item 方法用于添加单个列表项,其简化如下:

fun LazyListScope.item(key: Any? = null,contentType: Any? = null,content: @Composable LazyItemScope.() -> Unit
)

分析:
key:可选参数,用于为列表项提供一个唯一的键。
contentType:可选参数,用于指定列表项的类型。
content:Composable 函数,用于定义列表项的具体布局。

简单总结,LazyColumn 的源码主要围绕懒加载机制和列表项管理展开。通过 LazyListState 和 LazyListLayout 实现了懒加载,只有在列表项进入可视区域时才进行渲染,从而提高了性能。同时,通过 LazyListScope 提供的方法,可以方便地管理不同类型的列表项。

相关文章:

Compose笔记(十四)--LazyColumn

这一节了解一下Compose中的LazyColumn&#xff0c;在Jetpack Compose 中&#xff0c;LazyColumn 是一个用于高效显示长列表或可滚动垂直布局的组件。它类似于传统 Android 开发中的 RecyclerView&#xff0c;但专为 Compose 的声明式 UI 框架设计&#xff0c;能够显著优化性能&…...

CNN-SE-Attention-ITCN多特征输入回归预测(Matlab完整源码和数据)

CNN-SE-Attention-ITCN多特征输入回归预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-SE-Attention-ITCN多特征输入回归预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.一种适合光伏功率回归预测的高创…...

Spring Data JPA中的List底层:深入解析ArrayList的奥秘!!!

&#x1f31f; Spring Data JPA中的List底层&#xff1a;深入解析ArrayList的奥秘 &#x1f4a1; 你是否好奇过&#xff0c;为什么Spring Data JPA的查询方法返回的List<T>总是默认为ArrayList&#xff1f;本文将通过技术原理解析、验证实验和性能优化指南&#xff0c;为…...

redis高并发缓存架构与性能优化

Redlock实现原理 超过半数redis节点加锁成功才算成功加锁。 Redlock存在问题 如果主节点挂掉&#xff0c;还没有同步到从节点&#xff0c;重新选举出主节点&#xff0c;那加锁就没有加到这个新的主节点上。 如果增加redis主节点数&#xff0c;那么加锁的性能更差&#xff0c;要…...

解锁多邻国:全方位语言学习新体验

解锁多邻国&#xff1a;全方位语言学习新体验​ ​ 在数字化学习浪潮中&#xff0c;多邻国&#xff08;Duolingo&#xff09;凭借独特优势&#xff0c;成为全球超 5 亿用户的语言学习首选。这款 2012 年诞生于美国匹兹堡的应用&#xff0c;2019 年进入中国市场后&#xff0c;…...

Docker部署SeraXNG接入dify报错解决

报错&#xff1a; 设置授权 配置凭据后&#xff0c;工作区中的所有成员都可以在编排应用程序时使用此工具。 SearXNG base URL* 如何获取 PluginInvokeError: {"args":{},"error_type":"ToolProviderCredentialValidationError","message&q…...

Zookeeper的作用详解

Zookeeper作为分布式协调服务&#xff0c;在分布式系统中承担核心协调角色&#xff0c;其作用可归纳为以下核心功能模块&#xff1a; 一、分布式协调与同步 分布式锁管理 提供独占锁和共享锁&#xff0c;通过创建临时顺序节点实现锁的公平竞争。例如&#xff0c;客户端在/distr…...

高频面试题(含笔试高频算法整理)基本总结回顾34

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

Dify 与 n8n 对比分析:AI 应用开发与自动化工作流工具的深度比较

Dify 与 n8n 对比分析&#xff1a;AI 应用开发与自动化工作流工具的深度比较 摘要 本文对比分析了 Dify 和 n8n 两款工具的核心定位、功能特点、适用场景及技术门槛。Dify 专注于 AI 应用开发&#xff0c;适合快速搭建智能客服、知识库检索等场景&#xff1b;n8n 则定位于通用…...

Systemd构建容器化微服务集群管理系统

实训背景 你是一家云计算公司的 DevOps 工程师&#xff0c;需为某客户设计一套基于 Docker 的微服务集群管理系统&#xff0c;需求如下&#xff1a; 容器自启管理&#xff1a;确保三个服务&#xff08;webapp、api、redis&#xff09;在系统启动时自动运行。依赖顺序控制&…...

手搓多模态-04 归一化介绍

在机器学习中&#xff0c;归一化是一个非常重要的工具&#xff0c;它能帮助我们加速训练的速度。在我们前面的SiglipVisionTransformer 中&#xff0c;也有用到归一化层&#xff0c;如下代码所示&#xff1a; class SiglipVisionTransformer(nn.Module): ##视觉模型的第二层&am…...

nano 编辑器的使用

nano 编辑器的使用 1. 启动 nano2. 编辑文本3. 基本操作4. 保存和退出5. 其他常用快捷键6. 高级用法 nano 是一个简单易用的文本编辑器&#xff0c;适合初学者使用&#xff1a; 1. 启动 nano 在终端中输入 nano 命令&#xff0c;后面可以跟上你想要编辑的文件的名称。如果文件…...

如何搞定学习人工智能所需的数学?

一、明确AI所需的数学核心领域 AI的数学需求并非泛泛而谈&#xff0c;而是集中在几个核心领域。以下是按优先级排序的关键知识点&#xff1a; 线性代数 核心概念&#xff1a;向量、矩阵、特征值分解、奇异值分解&#xff08;SVD&#xff09;。应用场景&#xff1a;图像处理&a…...

TCP/IP五层协议

目录 1. 五层模型结构 2. 各层核心功能与协议 (1) 应用层&#xff08;Application Layer&#xff09; (2) 传输层&#xff08;Transport Layer&#xff09; (3) 网络层&#xff08;Network Layer&#xff09; (4) 数据链路层&#xff08;Data Link Layer&#xff09; (5…...

解决Opencv:TypeError: points is not a numerical tuple

最近刚开始学习Opencv&#xff0c;跟着b站阿婆主敲代码的时候&#xff0c;又又又又&#xff0c;又出现了bug&#xff0c;下面听我娓娓道来~~ --------------------------------------------------------------------------&#xff08;手动分界线&#xff09; 首先描述一下当时…...

LLM-大语言模型浅谈

目录 核心定义 典型代表 核心原理 用途 优势与局限 未来发展方向 LLM&#xff08;Large Language Model&#xff09;大语言模型&#xff0c;指通过海量文本数据训练 能够理解和生成人类语言的深度学习模型。 核心定义 一种基于深度神经网络&#xff08;如Transformer架…...

LeetCode第132题_分割回文串II

LeetCode 第132题&#xff1a;分割回文串 II 题目描述 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是回文。 返回符合要求的 最少分割次数 。 难度 困难 题目链接 点击在LeetCode中查看题目 示例 示例 1&#xff1a; 输入&#xf…...

【Leetcode 每日一题】368. 最大整除子集

问题背景 给你一个由 无重复 正整数组成的集合 n u m s nums nums&#xff0c;请你找出并返回其中最大的整除子集 a n s w e r answer answer&#xff0c;子集中每一元素对 ( a n s w e r [ i ] , a n s w e r [ j ] ) (answer[i], answer[j]) (answer[i],answer[j]) 都应当…...

python三大库之---pandas(二)

python三大库之—pandas&#xff08;二&#xff09; 文章目录 python三大库之---pandas&#xff08;二&#xff09;六&#xff0c;函数6.1、常用的统计学函数6.2重置索引 六&#xff0c;函数 6.1、常用的统计学函数 函数名称描述说明count()统计某个非空值的数量sum()求和mea…...

消防车调度问题:基于Matlab的优化求解

摘要 本文聚焦消防车调度问题&#xff0c;介绍如何将其转化为数学模型并利用Matlab进行求解。通过建立损失矩阵&#xff0c;以总损失最小为目标构建线性规划模型&#xff0c;并针对模型求解结果可能出现的不合理情况&#xff0c;增加消防车到达先后次序约束条件。 关键词&…...

批量将 Markdown 转换为 Word/PDF 等其它格式

在工作当中&#xff0c;我们经常会接触到 Markdown 格式的文档。这是一种非常方便我们做记录&#xff0c;做笔记的一种格式文档。现在很多互联网编辑器都是支持 Markdown 格式的&#xff0c;编辑起文章来更加的方便简介。有时候&#xff0c;我们会碰到需要将 Markdown 格式的文…...

C语言学习笔记-9

九、结构体 构造类型&#xff1a; 不是基本类型的数据结构也不是指针类型&#xff0c; 它是若干个相同或不同类型的数据构成的集合 结构体类型&#xff1a; 结构体是一种构造类型的数据结构&#xff0c;是一种或多种基本类型或构造类型的数据的集合。 1.结构体类型定义 定…...

LLM 部署(1)——LLM 部署框架对比

1 Ollama 一个专注于简化大型语言模型&#xff08;LLM&#xff09;在本地部署和运行的开源框架。 简化部署&#xff1a;Ollama使用Docker容器技术来简化LLM的部署过程 捆绑模型组件&#xff1a;Ollama将模型权重、配置和数据捆绑到一个包中&#xff0c;称为Modelfile&#xf…...

Qt坐标体系,控件坐标的设置

Qt窗口坐标体系---平面直角坐标系&#xff08;笛卡尔坐标系&#xff09; 以左上角为0&#xff0c;0坐标原点 给Qt的某个控件&#xff0c;设置位置&#xff0c;就需要指定坐标&#xff0c;对应这个控件来说&#xff0c;坐标系原点就是相对于父控件的 如&#xff1a; QPushButt…...

大数据系列之:Kerberos

大数据系列之&#xff1a;Kerberos 基本概念工作流程安全特性应用场景总结加密原理Kerberos认证流程更改您的密码授予账户访问权限票证管理Kerberos 票据属性使用 kinit 获取票据使用 klist 查看票据使用 kdestroy 销毁票据.k5identity 文件描述 Kerberos 是一种网络认证协议&a…...

【力扣hot100题】(059)单词搜索

这道题给我最大的启示就是不要什么时候都用哈希表&#xff0c;偶尔也要用用数组…… 是这样&#xff0c;一开始还沾沾自喜的以为知道了哈希表的自己一定可以比以前傻傻用数组的我要节省空间&#xff0c;结果发现哈希表不能存储pair用编号存储会时间超限用数组只需要7*7的空间。…...

Java全栈面试宝典:锁机制与Spring生命周期深度解析

目录 一、synchronized锁状态机全解析 &#x1f525; 问题5&#xff1a;synchronized四态转换与性能对比 锁状态转换流程图 锁特性对比表 CAS操作示例 二、ReentrantLock与synchronized深度对比 &#x1f525; 问题6&#xff1a;两大锁机制对比 核心差异矩阵 生产级Re…...

15分钟完成Odoo18.0安装与基本配置

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo18发行已半年有余&#xff0c;不少企业也已上至生产环境进行使用了。今天我们来看看 Odoo18的安装。 本次安装我们介绍通过阿里云服务器安装Odoo18社区版。 1.服务器准备 1.1操作系统 操作系统使用ubuntu22.04&#xff…...

pom导包成功,但是就是无法使用相关类,同时报错:Library:Maven ‘xxx‘ has broken path

开发环境&#xff1a;Intellij 2023 一、问题记录 在maven工程的pom文件导入如下某一依赖(JGit)。没有显示导包的错误&#xff0c;同时在maven仓库里面找到对应的包是正常下载到相应jar的。 但是就是无法引入相关的类。打开Project Structure&#xff0c;在Dependencies中发现…...

Cocos Creator 进行 Web 发布后,目录结构解析

在使用 Cocos Creator 进行 Web 发布后&#xff0c;生成的目录结构通常包含以下内容&#xff0c;下面为你详细介绍&#xff1a; 1. index.html 这是 Web 项目的入口 HTML 文件&#xff0c;它会加载所需的 JavaScript 文件和资源&#xff0c;从而启动游戏或应用程序。示例代码…...

Linux-磁盘管理

文章目录 1、查看磁盘和文件&#xff08;夹&#xff09;使用情况2、磁盘分区1&#xff09;查看分区情况2&#xff09;MBR分区3&#xff09;GPT分区 3、磁盘分区格式化4、磁盘挂载1&#xff09;挂载2&#xff09;卸载挂载点3&#xff09;永久挂载 1、查看磁盘和文件&#xff08;…...

P1149 [NOIP 2008 提高组] 火柴棒等式(DFS)

题目描述 给你 n 根火柴棍&#xff0c;你可以拼出多少个形如 ABC 的等式&#xff1f;等式中的 A、B、C 是用火柴棍拼出的整数&#xff08;若该数非零&#xff0c;则最高位不能是 0&#xff09;。用火柴棍拼数字 0∼9 的拼法如图所示&#xff1a; 注意&#xff1a; 加号与等号…...

机器学习新范式:Kubernetes + Kubeflow,解锁模型训练与部署的高效密码

一、Kubernetes在机器学习模型训练与部署中的作用 Kubernetes作为一个强大的容器编排平台&#xff0c;为机器学习模型的训练与部署提供了以下核心支持&#xff1a; 分布式训练支持&#xff1a;Kubernetes能够自动化部署和管理PyTorch等机器学习框架的分布式训练任务。通过利用…...

testflight上架ipa包-只有ipa包的情况下如何修改签名信息为苹果开发者账户对应的信息-ipa苹果包如何手动改签或者第三方工具改签-优雅草卓伊凡

testflight上架ipa包-只有ipa包的情况下如何修改签名信息为苹果开发者账户对应的信息-ipa苹果包如何手动改签或者第三方工具改签-优雅草卓伊凡 直接修改苹果IPA包的签名和打包信息并不是一个推荐的常规做法&#xff0c;因为这可能违反苹果的开发者条款&#xff0c;并且可能导致…...

SpringSecurity框架入门

简介 官网 Spring Security是一个Java框架&#xff0c;用于保护应用程序的安全性。它提供了一套全面的安全解决方案&#xff0c;包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念&#xff0c;可以轻松地集成到任何基于Spring的应用程序中。它支持多种…...

AIDD-人工智能药物设计-双扩散模型结合多目标优化策略助力3D小分子药物设计

Adv. Sci. | 双扩散模型结合多目标优化策略助力3D小分子药物设计 药物发现中,如何精准且高效地设计具有理想物理化学性质的潜在药物分子,对当前的研究水平来说仍然是一项重大挑战。近年来,基于深度学习的全新分子生成(de novo molecular generation)方法取得了显著进展,…...

Python面向对象编程 - 接口隔离原则(ISP)

1. 原则定义 接口隔离原则(Interface Segregation Principle, ISP) 是SOLID原则中的"I"&#xff0c;核心思想是&#xff1a; 客户端不应该被迫依赖它们不使用的接口 即&#xff1a;多个特定功能的接口比一个通用接口更好 2. 核心思想 将臃肿的接口拆分为更小、更具…...

mac安装浏览器闪退处理

安装 Chrome或edge后打开浏览器出现闪退&#xff0c;是因为权限不够。 以下是针对edge的处理方法。 sudo chown -R $(whoami) ~/Library/Application\ Support/Microsoft\ Edge sudo chmod -R 755 ~/Library/Application\ Support/Microsoft\ Edge 原因分析&#xff1a; 在…...

408 计算机网络 知识点记忆(5)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

Java面试黄金宝典38

1. TIME_WAIT 和 CLOSE_WAIT 的区别 定义 TIME_WAIT:是主动发起关闭连接操作的一方,在发送最后一个 ACK 确认包之后进入的状态。此状态存在的意义在于确保对端能收到最后一个 ACK 包,同时让网络中可能残留的旧数据包自然消逝,防止其干扰后续相同四元组(源 IP、源端口、目…...

【算法】筛质数

目录 埃氏筛法算法原理代码 欧拉筛法算法原理代码 埃氏筛法 算法原理 算法思想就像"筛子"一样&#xff0c;把合数筛掉&#xff0c;剩下的就是质数&#xff1a; 从2开始&#xff0c;依次检查每个数如果当前数未被标记为合数&#xff0c;它就是质数然后把这个质数的…...

【IDEA】✈️自定义模板,自动生成类和方法注释

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…...

笔试专题(六)

文章目录 最长无重复子数组&#xff08;滑动窗口&#xff09;题解代码 重排字符串&#xff08;贪心 构造&#xff09;题解代码 牛牛冲钻五&#xff08;模拟&#xff09;题解代码 最长无重复子数组&#xff08;滑动窗口&#xff09; 题目链接 题解 1. 滑动窗口 2. 什么时候…...

【算法实践】跳跃游戏——计算到达终点的最小跳数

问题描述 给定一个非负数数组 arr[]&#xff0c;每个元素表示从该位置最多可向前跳跃的步数。 示例&#xff1a; 若 arr[i] 3&#xff0c;则可以从位置 i 跳跃到 i1、i2 或 i3。若 arr[i] 0&#xff0c;则无法从该位置向前跳跃。 任务&#xff1a;找到从数组第一个位置移动…...

sklearn的Pipeline

Pipeline类 介绍:Pipeline 可以将多个数据处理步骤和机器学习模型组合成一个序列,其中每个步骤都是一个变换器(Transformer)或者估计器(Estimator),并且Pipeline中的最后一个必须为估计器,其它的必须为变换器,如果Pipeline中的估计器为为分类器则整个Pipeline就作为分…...

Unity3D仿星露谷物语开发34之单击Drop项目

1、目标 当在道具栏中选中一个Item时&#xff0c;点击地面就可以实现Item的drop操作&#xff0c;每点击一次就drop一次&#xff0c;直到道具栏中Item数量不够。 这样的好处&#xff1a;避免每次Drop都从道具栏中拖拉Item&#xff0c;通过点击这种操作可以更加高效。 方法&am…...

每日一题(小白)回溯篇4

深度优先搜索题&#xff1a;找到最长的路径&#xff0c;计算这样的路径有多少条&#xff08;使用回溯&#xff09; 分析题意可以得知&#xff0c;每次向前后左右走一步&#xff0c;直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围&#xff0c;不能重复之前的路径。…...

Day16——路由2

路由独有的两个生命周期钩子 作用&#xff1a;用于捕获路由组件的激活状态 具体名字&#xff1a; activated 路由组件被激活时触发 deactivated 路由组件失活时触发 现在在缓存路由组件的基础上,想要使h2中的文字透明度不断变化&#xff0c;在切换到别的组件时销毁控制文字不…...

iproute2 工具集使用详解

目录 一、iproute2 核心命令&#xff1a;ip二、常用功能详解1. 管理网络接口&#xff08;link 对象&#xff09;2. 管理 IP 地址&#xff08;address 对象&#xff09;3. 管理路由表&#xff08;route 对象&#xff09;4. 管理 ARP 和邻居缓存&#xff08;neigh 对象&#xff0…...

C++学习之套接字并发服务器

目录 1.昨天套接字服务器的弊端 2.如何通过多进程方式实现服务器并发 3.多进程服务器-1 4.多进程服务器-2 5.多进程版程序-回收子进程被信号中断的处理 6.多线程版TCP服务处理思路 7.多线程并发服务器编写 8.为什么不能把文件描述符地址传到子线程中 9.多线程程序测试 …...