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

Qt图表绘制(QtCharts)- 性能优化(13)

文章目录

    • 1 批量替换代替追加
      • 1.1 测试1
      • 1.2 测试2
      • 1.3 测试3
    • 2 开启OpenGL
      • 2.1 测试1
      • 2.2 测试2
      • 2.3 测试3
      • 2.4 测试4


更多精彩内容
👉内容导航 👈
👉Qt开发 👈
👉QtCharts绘图 👈
👉python开发 👈

1 批量替换代替追加

环境说明
系统windows10
python3.13
pyside66.8.3
性能分析工具line_profiler_pycharm
  • 如下所示,使用replace添加数据和使用append添加数据性能对比,单次添加数据越多,replace性能比append越强

  • 示例代码

    import random  # 导入random模块,用于生成随机数
    import sysfrom PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis  # 导入QtCharts模块,用于创建图表和轴
    from PySide6.QtCore import QTimer  # 导入QTimer,用于定时更新图表
    from PySide6.QtCore import Qt  # 导入Qt核心模块,用于设置对齐方式等
    from PySide6.QtGui import QPainter  # 导入QPainter,用于设置图表的渲染提示
    from PySide6.QtWidgets import QApplication, QMainWindow  # 导入PySide6的QApplication和QMainWindow类
    from line_profiler_pycharm import profile
    from PySide6.QtCore import QPointFclass MainWindow(QMainWindow):  # 定义MainWindow类,继承自QMainWindowdef __init__(self):super().__init__()  # 调用父类的构造函数self.setWindowTitle("PySide6 折线图示例")  # 设置窗口标题self.setGeometry(100, 100, 800, 600)  # 设置窗口的位置和大小self.timer = QTimer()  # 创建一个定时器self.timer.timeout.connect(self.update_chart)  # 连接定时器超时信号到update_chart方法self.timer.start(10)  # 设置定时器间隔为10毫秒,并启动定时器# print(help(QChart))  # 这行代码可以用于打印QChart类的帮助信息,目前被注释掉了self.chart_view = None  # 初始化图表视图为Noneself.series1 = QLineSeries()  # 创建一个折线序列对象self.series2 = QLineSeries()  # 创建一个折线序列对象# self.series1.setUseOpenGL(True)  # 设置折线序列使用OpenGL渲染# self.series2.setUseOpenGL(True)  # 设置折线序列使用OpenGL渲染self.init_chart()  # 调用初始化图表的方法def init_chart(self):  # 定义初始化图表的方法# 设置名称self.series1.setName("series1")  # 设置折线的名称self.series2.setName("series2")  # 设置折线的名称# 创建图表chart = QChart()  # 创建一个图表对象chart.addSeries(self.series1)  # 将折线序列添加到图表中chart.addSeries(self.series2)  # 将折线序列添加到图表中chart.setTitle("简单的折线图")  # 设置图表的标题# chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)  # 设置图表不使用动画# 创建x轴和y轴axis_x = QValueAxis()  # 创建一个数值型x轴axis_y = QValueAxis()  # 创建一个数值型y轴chart.addAxis(axis_x, Qt.AlignmentFlag.AlignBottom)  # 将x轴添加到图表底部chart.addAxis(axis_y, Qt.AlignmentFlag.AlignLeft)  # 将y轴添加到图表左侧self.series1.attachAxis(axis_x)  # 将折线序列附着到x轴self.series1.attachAxis(axis_y)  # 将折线序列附着到y轴self.series2.attachAxis(axis_x)  # 将折线序列附着到x轴self.series2.attachAxis(axis_y)  # 将折线序列附着到y轴# 创建图表视图self.chart_view = QChartView(chart)  # 创建一个图表视图对象,并将图表添加进去self.chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)  # 设置图表视图的渲染提示为抗锯齿# 设置主窗口的中心部件self.setCentralWidget(self.chart_view)  # 设置主窗口的中心部件为图表视图@profiledef update_chart1(self):  # 定义更新图表的方法"""使用append方法更新折线序列:return: """for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数self.series1.append(self.series1.count(), random_integer)  # 将新的点添加到折线序列中chart = self.chart_view.chart()  # 获取图表视图中的图表对象axis_x = chart.axes(Qt.Orientation.Horizontal)[0]  # 获取图表中的x轴对象axis_y = chart.axes(Qt.Orientation.Vertical)[0]  # 获取图表中的y轴对象axis_x.setRange(0, self.series1.count())  # 设置x轴的范围,使其从0到当前折线序列点的数量axis_y.setRange(0, 100)  # 设置y轴的范围,使其从0到100@profiledef update_chart2(self):  """使用replace方法更新折线序列:return: """data = self.series2.points()for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数data.append(QPointF(len(data), random_integer))  # 将新的点添加到折线序列中self.series2.replace(data)  # 替换折线序列中的点chart = self.chart_view.chart()  # 获取图表视图中的图表对象axis_x = chart.axes(Qt.Orientation.Horizontal)[0]  # 获取图表中的x轴对象axis_y = chart.axes(Qt.Orientation.Vertical)[0]  # 获取图表中的y轴对象axis_x.setRange(0, self.series2.count())  # 设置x轴的范围,使其从0到当前折线序列点的数量axis_y.setRange(0, 100)  # 设置y轴的范围,使其从0到100@profiledef update_chart(self):  # 定义更新图表的方法self.update_chart1()  # 调用更新图表的方法self.update_chart2()  # 调用更新图表的方法if __name__ == "__main__":  # 确保只有在直接运行此脚本时才会执行下面的代码app = QApplication(sys.argv)  # 创建一个QApplication对象window = MainWindow()  # 创建一个MainWindow对象window.show()  # 显示主窗口sys.exit(app.exec())  # 进入应用程序的主循环,并等待退出

1.1 测试1

  • 测试方法:定时器1秒刷新1次,每次在循环中添加10个点数据;
  • 测试结果:
    • 从整个函数看update_chart1耗时是update_chart2的6.5倍;
    • 从单行代码看append耗时是replace的11.3倍;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.2 测试2

  • 测试方法:定时器1秒刷新1次,每次在循环中添加1000个点数据;
  • 测试结果:
    • 从整个函数看update_chart1耗时是update_chart2的199倍;
    • 从单行代码看append耗时是replace的750倍;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.3 测试3

  • 测试方法:定时器10毫秒刷新1次,每次在循环中添加10个点数据;
  • 测试结果:
    • 从整个函数看update_chart1耗时是update_chart2的5.57倍;
    • 从单行代码看append耗时是replace的8.82倍;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2 开启OpenGL

环境说明
系统windows10
python3.13
pyside66.8.3
性能分析工具line_profiler_pycharm
  • 如下所示,对比开启OpenGL和开启OpenGL的性能区别;当使用appeng添加数据时,开启opengl和不开opengl的区别最大;

  • 示例代码:

    import random  # 导入random模块,用于生成随机数
    import sysfrom PySide6.QtCharts import QChart, QChartView, QLineSeries, QValueAxis  # 导入QtCharts模块,用于创建图表和轴
    from PySide6.QtCore import QTimer  # 导入QTimer,用于定时更新图表
    from PySide6.QtCore import Qt  # 导入Qt核心模块,用于设置对齐方式等
    from PySide6.QtGui import QPainter  # 导入QPainter,用于设置图表的渲染提示
    from PySide6.QtWidgets import QApplication, QMainWindow  # 导入PySide6的QApplication和QMainWindow类
    from line_profiler_pycharm import profile
    from PySide6.QtCore import QPointFclass MainWindow(QMainWindow):  # 定义MainWindow类,继承自QMainWindowdef __init__(self):super().__init__()  # 调用父类的构造函数self.setWindowTitle("PySide6 折线图示例")  # 设置窗口标题self.setGeometry(100, 100, 800, 600)  # 设置窗口的位置和大小self.timer = QTimer()  # 创建一个定时器self.timer.timeout.connect(self.update_chart)  # 连接定时器超时信号到update_chart方法self.timer.start(1000)  # 设置定时器间隔为10毫秒,并启动定时器self.chart_view = None  # 初始化图表视图为Noneself.series1 = QLineSeries()  # 创建一个折线序列对象self.series2 = QLineSeries()  # 创建一个折线序列对象self.series1.setUseOpenGL(True)  # 设置折线序列使用OpenGL渲染# self.series2.setUseOpenGL(True)  # 设置折线序列使用OpenGL渲染self.init_chart()  # 调用初始化图表的方法def init_chart(self):  # 定义初始化图表的方法# 设置名称self.series1.setName("series1")  # 设置折线的名称self.series2.setName("series2")  # 设置折线的名称# 创建图表chart = QChart()  # 创建一个图表对象chart.addSeries(self.series1)  # 将折线序列添加到图表中chart.addSeries(self.series2)  # 将折线序列添加到图表中chart.setTitle("简单的折线图")  # 设置图表的标题# chart.setAnimationOptions(QChart.AnimationOption.SeriesAnimations)  # 设置图表不使用动画# 创建x轴和y轴axis_x = QValueAxis()  # 创建一个数值型x轴axis_y = QValueAxis()  # 创建一个数值型y轴axis_y.setRange(0, 100)  # 设置y轴的范围,使其从0到100chart.addAxis(axis_x, Qt.AlignmentFlag.AlignBottom)  # 将x轴添加到图表底部chart.addAxis(axis_y, Qt.AlignmentFlag.AlignLeft)  # 将y轴添加到图表左侧self.series1.attachAxis(axis_x)  # 将折线序列附着到x轴self.series1.attachAxis(axis_y)  # 将折线序列附着到y轴self.series2.attachAxis(axis_x)  # 将折线序列附着到x轴self.series2.attachAxis(axis_y)  # 将折线序列附着到y轴# 创建图表视图self.chart_view = QChartView(chart)  # 创建一个图表视图对象,并将图表添加进去self.chart_view.setRenderHint(QPainter.RenderHint.Antialiasing)  # 设置图表视图的渲染提示为抗锯齿# 设置主窗口的中心部件self.setCentralWidget(self.chart_view)  # 设置主窗口的中心部件为图表视图@profiledef update_chart1(self):  # 定义更新图表的方法"""开启OpenGL渲染,使用append方法更新折线序列:return:"""for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数self.series1.append(self.series1.count(), random_integer)  # 将新的点添加到折线序列中@profiledef update_chart2(self):"""不开启OpenGL渲染,使用append方法更新折线序列:return:"""for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数self.series2.append(self.series2.count(), random_integer)  # 将新的点添加到折线序列中@profiledef update_chart(self):  # 定义更新图表的方法self.update_chart1()  # 调用更新图表的方法self.update_chart2()  # 调用更新图表的方法chart = self.chart_view.chart()  # 获取图表视图中的图表对象axis_x = chart.axes(Qt.Orientation.Horizontal)[0]  # 获取图表中的x轴对象max_x = self.series2.count()axis_x.setRange(0, max_x)  # 设置x轴的范围,使其从0到当前折线序列点的数量if __name__ == "__main__":  # 确保只有在直接运行此脚本时才会执行下面的代码app = QApplication(sys.argv)  # 创建一个QApplication对象window = MainWindow()  # 创建一个MainWindow对象window.show()  # 显示主窗口sys.exit(app.exec())  # 进入应用程序的主循环,并等待退出

2.1 测试1

  • 测试方法:定时器1秒刷新1次,每次在循环中添加10个点数据;
  • 测试结果:
    • 从整个函数看update_chart2耗时是update_chart1的9.7倍;
    • 从单行代码看append添加数据不开启opengl耗时是开启opengl的21.3倍;

在这里插入图片描述

2.2 测试2

  • 测试方法:定时器1秒刷新1次,每次在循环中添加1000个点数据;
  • 测试结果:
    • 从整个函数看update_chart2耗时是update_chart1的123倍;
    • 从单行代码看append添加数据不开启opengl耗时是开启opengl的169倍;

在这里插入图片描述

2.3 测试3

  • 测试方法:定时器10毫秒刷新1次,每次在循环中添加10个点数据;
  • 测试结果:
    • 从整个函数看update_chart2耗时是update_chart1的72.5倍;
    • 从单行代码看append添加数据不开启opengl耗时是开启opengl的113倍;

在这里插入图片描述

2.4 测试4

  • 测试方法:将使用append添加数据改为使用replace添加数据,定时器10毫秒刷新1次,每次在循环中添加10个点数据;

  • 测试结果:

    • 从整个函数看update_chart2耗时是update_chart1的1.84倍;
    • 从单行代码看replace添加数据不开启opengl耗时是开启opengl的11倍;
  • 测试代码:

        @profiledef update_chart1(self):  # 定义更新图表的方法"""开启OpenGL渲染,使用append方法更新折线序列:return:"""data = self.series1.points()for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数data.append(QPointF(len(data), random_integer))  # 将新的点添加到折线序列中self.series1.replace(data)  # 替换折线序列中的点@profiledef update_chart2(self):"""不开启OpenGL渲染,使用append方法更新折线序列:return:"""data = self.series2.points()for i in range(10):  # 循环10次random_integer = random.randint(1, 100)  # 生成一个1到100之间的随机整数data.append(QPointF(len(data), random_integer))  # 将新的点添加到折线序列中self.series2.replace(data)  # 替换折线序列中的点
    

在这里插入图片描述



相关文章:

Qt图表绘制(QtCharts)- 性能优化(13)

文章目录 1 批量替换代替追加1.1 测试11.2 测试21.3 测试3 2 开启OpenGL2.1 测试12.2 测试22.3 测试32.4 测试4 更多精彩内容👉内容导航 👈👉Qt开发 👈👉QtCharts绘图 👈👉python开发 &#x1f…...

[逆向工程]DebugView捕获WPS日志?解析未运行WPS时Shell扩展加载的原因与解决方案(二十五)

[逆向工程]DebugView捕获WPS日志?解析未运行WPS时Shell扩展加载的原因与解决方案(二十五) 引言:一个“幽灵”般的日志问题 你是否在使用 DebugView 排查系统问题时,发现日志中频繁出现 WPS 相关模块(如 k…...

【打破信息差】萌新认识与入门算法竞赛

阅前须知 XCPC萌新互助进步群2️⃣:174495261 博客主页:resot (关注resot谢谢喵) 针对具体问题,应当进行具体分析;并无放之四海而皆准的方法可适用于所有人。本人尊重并支持每位学习者对最佳学习路径的自主选择。本篇所列训练方…...

Ai Agent革命:不是流程驱动,而是模型为魂

前言:AI 智能体的未来:模型才是“主旋律”,工作流只是“插曲” 在 AI 智能体的未来舞台上,模型本身才是永恒的“主旋律”,而工作流不过是短暂的“插曲”。以 Manus 为例,其基于“预先编排好的提示词与工具…...

使用CherryStudio +SiliconFlow 部署独立的deepseek+知识库

deepseek知识库,独立的deepseek 首先我们先了解 CherryStudio?SiliconFlow? CherryStudio是一个支持多平台的AI客户端,我们致力于让更多人能够享受到AI带来的便利。 简单来说,它是一个能让普通人轻松用上AI 的「万能工…...

【leetcode】94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出…...

OpenCV阈值处理完全指南:从基础到高级应用

引言 阈值处理是图像处理中最基础、最常用的技术之一,它能够将灰度图像转换为二值图像,为后续的图像分析和处理奠定基础。本文将全面介绍OpenCV中的各种阈值处理方法,包括原理讲解、代码实现和实际应用场景。 一、什么是阈值处理&#xff1…...

源码与二进制包区别

文章目录 源码包与二进制包的区别及选择建议概述核心区别对比1. 内容组成2. 安装复杂度3. 灵活性4. 依赖管理5. 安全性 选择建议适合使用**源码包**的场景:适合使用**二进制包**的场景: 总结 源码包与二进制包的区别及选择建议 概述 在常见的Linux安装…...

NAT转换和ICMP

NAT nat原理示意 nat实现 ICMP ICMP支持主机或路由器: 差错或异常报告网络探寻 2类icmp报文: 差错报告报文(5种) 目的不可达源抑制--拥塞控制超时&超期--TTL超时参数问题--问题报文丢弃重定向--不应该由这个路由器转发&a…...

No module named‘serial‘解决办法

jksjks-VMware-Virtual-Platform:~/gx$ sudopython3py.py Traceback (most recent call last): File "py.py",line 1, in <module> import serial.tools.list_ports ModuleNotFoundError: No module namedserial 这个报错意思是缺少serial模块 解决方法也很简…...

用 Gensim 实现 Word2Vec 古诗生成

向量操作。我们将借助它完成从语料处理到古诗生成的全流程。 6.1 环境搭建与库导入 首先安装 Gensim 及依赖库&#xff1a; bash pip install gensim numpy pandas 导入必要模块&#xff1a; python 运行 from gensim.models import Word2Vec # 核心词向量模型 from r…...

【图像生成1】Latent Diffusion Models 论文学习笔记

一、背景 本文主要记录一下使用 LDMs 之前&#xff0c;学习 LDMs 的过程。 二、论文解读 Paper&#xff1a;[2112.10752] High-Resolution Image Synthesis with Latent Diffusion Models 1. 总体描述 LDMs 将传统 DMs 在高维图像像素空间&#xff08;Pixel Space&#x…...

MapReduce Shuffle 全解析:从 Map 端到 Reduce 端的核心数据流​

一、Shuffle 的本质定位&#xff1a;MapReduce 的核心枢纽​ Shuffle 过程涵盖 MapTask 的后半程与 ReduceTask 的前半程&#xff0c;具体指从 map 方法输出到 reduce 方法输入之间的整个数据处理链路。它承担着三大核心使命&#xff1a;​ 数据分区&#xff1a;决定数据归属…...

架构与UML4+1视图

简单对比分析 架构41视图 架构41视图是由Philippe Kruchten提出的&#xff0c;用于描述软件系统的架构。它包括以下五个视图&#xff1a; 逻辑视图&#xff1a;描述系统的功能需求&#xff0c;展示系统的静态结构&#xff0c;通常使用类图、对象图等。开发视图&#xff1a;…...

nosqlbooster pojie NoSQLBooster for MongoDB

测过可用&#xff0c;注意 asar的安装使用报错改用 npx asar extract app.asar app 路径 C:\Users{computerName}\AppData\Local\Programs\nosqlbooster4mongo\resources npm install asar -g asar extract app.asar app 打开shared\lmCore.js 修改MAX_TRIAL_DAYS3000 修改…...

UI自动化测试中,一个完整的断言应所需要考虑的问题

在UI自动化测试中,一个完整的断言应全面覆盖用户界面(UI)的功能性、交互性和视觉正确性。以下是断言需要包含的核心内容及详细说明: 一、基础元素验证 存在性断言 验证元素存在于DOM中示例代码(Python + Selenium):assert driver.find_element(By.ID, "submit_btn&…...

电脑出故障驱动装不上?试试驱动人生的远程服务支持

在日常工作或学习中&#xff0c;驱动问题时常成为电脑用户的一大困扰。尤其是在更换硬件、重装系统、驱动冲突等情况下&#xff0c;许多用户往往手足无措&#xff0c;不知道从何下手。而“驱动人生”作为国内领先的驱动管理工具&#xff0c;一直以高效、便捷、智能著称。现在&a…...

机器学习第十五讲:决策树全面讲解:像玩“20个问题“游戏猜身份[特殊字符]

机器学习第十五讲&#xff1a;决策树全面讲解&#xff1a;像玩"20个问题"游戏猜身份&#x1f3ae; 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&…...

基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)

参数结构体模块 在src目录下新建params文件夹 在params文件夹下依次新建req.rs、resp.rs、result_parse.rs、mod.rs 目录结构如下&#xff1a; project |—src |—params //封装参数结构体模块 |—req.rs //封装请求参数结构体 |—resp.rs //封装返回数据结构体 |—resu…...

Centos7系统(最小化安装)安装zabbix7版本详细文章、nginx源代码配置、php源代码、mysql-yum安装

zabbix官网链接下载zabbix源代码安装包 选择zabbix版本&#xff08;此文章使用zabbix7.0版本&#xff09; 安装之前由于是最小化安装centos7安装一些开发环境和工具包 文章使用国内阿里源 cd /etc/yum.repos.d/;curl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -…...

rocketmq 环境配置[python]

因本人是 python 开发&#xff0c;macbook 开发。windows 可以采取配置远程 linux 解释器或者 pycharm 专业版的 docker 解释器进行开发 M1 芯片 本地运行 rocketmq rocketmq Python 开源地址&#xff1a; https://github.com/apache/rocketmq-client-python 因为需要 linu…...

前端学习(4)—— JavaScript(基础语法)

目录 一&#xff0c;介绍 1.1 是什么 1.2 组成 1.3 书写形式 1.4 输入输出 二&#xff0c;变量的使用 2.1 基本用法 2.2 动态类型 三&#xff0c;基本数据类型 3.1 数字类型 3.2 字符串类型 3.3 布尔类型 3.4 未定义数据类型 3.5 空值类型 四&#xff0c;运算符…...

简单介绍C++中线性代数运算库Eigen

Eigen 是一个高性能的 C 模板库&#xff0c;专注于线性代数、矩阵和向量运算&#xff0c;广泛应用于科学计算、机器学习和计算机视觉等领域。以下是对 Eigen 库的详细介绍&#xff1a; 1. 概述 核心功能&#xff1a;支持矩阵、向量运算&#xff0c;包括基本算术、矩阵分解&…...

原生小程序+springboot+vue+协同过滤算法的音乐推荐系统(源码+论文+讲解+安装+部署+调试)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统背景 在数字音乐产业迅猛发展的当下&#xff0c;Spotify、QQ 音乐、网易云音乐等音乐平台的曲…...

[特殊字符] 如何优雅地避免 SQL 多表 LEFT JOIN 造成的笛卡尔积放大问题?

在实际项目开发中&#xff0c;我们经常需要从多个数据表中统计和聚合项目相关数据。但如果处理不当&#xff0c;多表 LEFT JOIN 容易造成 数据行数异常放大 的问题&#xff0c;也就是我们常说的“笛卡尔积放大”。 本文通过一个简单示例&#xff0c;直观讲清问题产生的原因&am…...

哈希表实现(1):

1. 哈希&#xff1a; 之前我们的红黑数的查找是由于左边小右边大的原则可以快速的查找&#xff0c;我们这里的哈希表呢&#xff1f; 这里是用过哈希函数把关键字key和存储位置建立一个关联的映射。 直接定址法&#xff08;函数函数定义的其中一种&#xff09;&#xff1a; 直…...

【流程控制结构】

流程控制结构 流程控制结构1、顺序结构2、选择结构if基本选择结构if else语法多重if语法嵌套if语法switch选择结构 3、循环结构循环结构while循环结构程序调试for循环跳转语句区别 流程控制结构 1、顺序结构 流程图 优先级 2、选择结构 if基本选择结构 单if 语法 if&…...

敏捷-第二章 敏捷宣言与原则

敏捷宣言与原则之间的关系 将敏捷明确表述为一种思维模式&#xff0c;它由《敏 捷宣言》的价值观所界定&#xff0c;受敏捷原则指导&#xff0c; 4通过各种实践实现敏捷不是指某一种具体的方法论、过程或框架&#xff0c;而是一组价值观和原则。 敏捷宣言(Manifesto)的4大价值…...

UAI 2025重磅揭晓:录取数据公布(附往届数据)

近日&#xff0c;第41届UAI公布了论文录用结果。本次大会共收到 750篇有效论文投稿&#xff0c;最终录用230篇&#xff0c;录用率为30.7%。录取率较去年&#xff08;UAI 2024&#xff09;相比有所上升&#xff08;录取率&#xff1a;26.88%&#xff09;。 会议概览 人工智能不…...

京东方10.1寸工业液晶屏GV101WXM-N80

第一篇&#xff1a;规格参数总览 产品标称 京东方(BOE) GV101WXM-N85 工业级显示单元 核心应用方向 教学终端设备&#xff5c;工业便携装置&#xff5c;车载控制系统 面板属性 非晶硅TFT液晶技术&#xff5c;全视角显示模式联合常暗配置 物理规格 对角线长度25.7cm&…...

实例分割AI数据标注 ISAT自动标注工具使用方法

文章目录 🌕ISAT安装和启动方法🌕下载和使用AI分割模型🌙SAM模型性能排行🌙手动下载sam模型 & sam模型下载路径🌕使用方法🌙从file中导入图片🌙点击左上角的图标进入分割模式🌙鼠标左键点击画面中的人则自动标注🌙点击右键该区域不标注🌙一个人一个人的…...

软件架构风格系列(4):事件驱动架构

文章目录 前言一、从“用户下单”场景看懂事件驱动核心概念&#xff08;一&#xff09;什么是事件驱动架构&#xff1f;&#xff08;二&#xff09;核心优势&#xff1a;解耦与异步的双重魔法 二、架构设计图&#xff1a;三要素构建事件流转闭环三、Java实战&#xff1a;从简单…...

软件架构风格系列(2):面向对象架构

文章目录 引言一、什么是面向对象架构风格1. 定义与核心概念2. 优点与局限性二、业务建模&#xff1a;用对象映射现实世界&#xff08;一&#xff09;核心实体抽象1. 员工体系2. 菜品体系 &#xff08;二&#xff09;封装&#xff1a;隐藏实现细节 三、继承实战&#xff1a;构建…...

python打卡day27

函数装饰器 知识点回顾&#xff1a; 装饰器的思想&#xff1a;进一步复用函数的装饰器写法注意内部函数的返回值 日常ctrl点进某个复杂的项目&#xff0c;发现函数定义上方有一个xxx,它就是装饰器。装饰器本质上是一个 Python 函数&#xff0c;可以在不修改原函数代码的情况下&…...

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖

智能AI在工地安全中的应用&#xff1a;从监测到救援的全流程实践 一、背景&#xff1a;高温作业下的工地安全挑战 随着夏季高温持续&#xff0c;工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常&#xff08;如晕厥、抽搐、跌倒&#xff09;频发…...

gflags 安装及使用

目录 引言 安装 如何用 gflags 库写代码 如何用命令行使用 gflags 库 gflags 库的其他命令行参数 引言 gflags 是 Google 开发的一个开源库&#xff0c;用于 C 应用程序中命令行参数的声明、定义 和解析。 gflags 库提供了一种简单的方式来添加、解析和文档化命令行标…...

金融问答系统:如何用大语言模型打造高精度合规的金融知识引擎

假如我现在向大模型提问&#xff0c;我的问题是&#xff1a;请查询在2021年度&#xff0c;68**38股票涨停天数&#xff1f; 或者我问&#xff1a;湖南*****科股份有限公司变更设立时作为发起人的法人有哪些&#xff1f; 大模型巴拉巴拉给我一个答案&#xff0c;那怎么让我信任大…...

Spring WebFlux与Quarkus实战:云原生微服务开发的两大主流框架深度解析

简介 云原生与微服务架构已成为企业数字化转型的核心驱动力,而Spring WebFlux和Quarkus作为两大主流框架,各自提供了独特的解决方案来应对高并发、低延迟和快速启动的挑战。本文将从零开始,详细讲解如何使用这两个框架构建高性能的云原生微服务,并通过实际案例展示它们在企…...

成功案例丨从草图到鞍座:用先进的发泡成型仿真技术变革鞍座制造

案例简介 在鞍座制造中&#xff0c;聚氨酯泡沫成型工艺是关键环节&#xff0c;传统依赖实验测试的方法耗时且成本高昂。为解决这一问题&#xff0c;意大利自行车鞍座制造商 Selle Royal与Altair合作&#xff0c;采用Altair Inspire PolyFoam软件进行发泡成型仿真。 该工具帮助团…...

学习日志09 java

我要(ง •_•)ง&#xff01;&#xff01; 1 面向对象里面的编程的属性&#xff0c;其实就是变量啦 在面向对象编程里&#xff0c;“属性”&#xff08;Attribute&#xff09;也被叫做 “成员变量” 或者 “字段”&#xff08;Field&#xff09;&#xff0c;指的是类中用来存…...

深入解析Spring Boot与微服务架构:从入门到实践

深入解析Spring Boot与微服务架构&#xff1a;从入门到实践 引言 随着云计算和分布式系统的普及&#xff0c;微服务架构已成为现代软件开发的主流模式。Spring Boot作为Java生态中最受欢迎的框架之一&#xff0c;为开发者提供了快速构建微服务的强大工具。本文将深入探讨Spri…...

25考研经验贴(11408)

声明&#xff1a;以下内容都仅代表个人观点 数学一&#xff08;130&#xff09; 25考研数学一难度介绍&#xff1a;今年数学一整体不难&#xff0c;尤其是选填部分&#xff0c;大题的二型线面和概率论大题个人感觉比较奇怪&#xff0c;其他大题还是比较容易的。.26如何准备&a…...

Linux运行时的参数、命令、网络、磁盘参数和日志监控

一、监控 1. free 功能&#xff1a;用于查看系统内存使用情况&#xff0c;包括物理内存总量、已用内存、空闲内存、缓冲区&#xff08;buffer&#xff09;和缓存&#xff08;cache&#xff09;占用&#xff0c;以及交换内存&#xff08;swap&#xff09;的使用与剩余情况。常…...

Spring Boot循环依赖的陷阱与解决方案:如何打破“Bean创建死循环”?

引言 在Spring Boot开发中&#xff0c;你是否遇到过这样的错误信息&#xff1f; The dependencies of some of the beans in the application context form a cycle 这表示你的应用出现了循环依赖。尽管Spring框架通过巧妙的机制解决了部分循环依赖问题&#xff0c;但在实际开…...

如何打造MVP(最小可行性产品)(MVP=核心功能+快速验证+用户反馈+持续迭代)

文章目录 **一、MVP的核心原则**1. **聚焦核心价值**2. **快速迭代**3. **低成本验证** **二、MVP的打造步骤****1. 定义目标用户和核心需求****2. 确定MVP的核心功能**- **筛选关键功能**&#xff1a;1. 用户是否愿意为这个功能付费&#xff1f;2. 实现该功能的技术难度和成本…...

conda init执行了还是不好用

按照gpt的方法&#xff0c;还是方法一&#xff1a;以管理员身份运行 PowerShell 并设置执行策略 好用 你遇到的问题是典型的 Conda 环境激活失败 错误&#xff0c;提示如下&#xff1a; CondaError: Run conda init before conda activate但你已经运行了 conda init&#xff…...

crontab 定时任务不执行问题排查

*/5 * * * * sh /data03/jq/sparkjob.sh 定时任务不执行&#xff01; Cron默认丢弃输出&#xff0c;错误信息无法查看。 将输出和错误重定向到日志文件&#xff1a; /bin/sh /data03/jq/sparkjob.sh >> /tmp/sparkjob.log 2>&1 检查日志文件 /tmp/sparkjob.log 定…...

require/exports 或 import/export的联系和区别,各自的使用场景

以下是 require/exports&#xff08;CommonJS&#xff09;与 import/export&#xff08;ES6 Modules&#xff09;的对比分析及使用场景说明&#xff1a; 一、核心联系‌ ‌模块化目标‌ 两者都用于实现代码模块化&#xff0c;解决全局作用域污染和依赖管理问题。 ‌跨环境适配‌…...

如何更改远程桌面连接的默认端口?附外网访问内网计算机方法

远程连接端口根据协议和场景不同有所差异&#xff0c;以下是常见远程连接端口的设置及修改方法&#xff0c;同时附外网访问内网计算机操作。 一、Windows远程桌面默认端口 ‌默认端口‌&#xff1a;3389&#xff08;TCP协议&#xff09;&#xff0c;用于Windows远程桌面服务&…...

模拟jenkins+k8s自动化部署

参考 Jenkins+k8s实现自动化部署 - 掘金 手把手教你用 Jenkins + K8S 打造流水线环境 - 简书 安装插件 调整插件升级站点 (提高插件下载速度) 默认地址 https://updates.jenkins.io/update-center.json 新地址 http://mirror.xmission.com/jenkins/updates/update-center.json …...