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

针对WPF的功耗优化(节能编程)

一、UI渲染优化

1. 减少不必要的视觉元素

<!-- 避免过度使用复杂效果 -->
<Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 -->
</Border><!-- 而不是 -->
<Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><Border.Effect><DropShadowEffect BlurRadius="10" ShadowDepth="3"/></Border.Effect>
</Border>

2. 优化动画使用

// 仅在必要时运行动画
private void StartAnimationIfNeeded()
{if (SystemParameters.PowerLineStatus == PowerLineStatus.Online || BatteryStatus.HasPowerSource){// 只有在外接电源或电量充足时运行动画
        BeginAnimation();}
}

二、 线程和定时器优化

1. 线程

优先使用线程池,避免随意创建新线程    

  • 原理:创建/销毁线程开销巨大(触发CPU调度,很耗电)。线程池维护一组可重用的工作线程,避免了这种开销。
  • 做法:使用 Task.Run(...) 或 Task.Factory.StartNew(...) 默认就使用了线程池。
// 糟糕!直接创建新线程,成本高且难以管理
for (int i = 0; i < 100; i++)
{// 非常耗电new Thread(() => DoWork(i)).Start(); 
}
------------------------------------------------------------------------
// 优秀!使用线程池(通过Task API)
for (int i = 0; i < 100; i++)
{// 高效、节能Task.Run(() => DoWork(i)); 
}
// 或者使用Parallel.For,它内部也使用线程池并进行优化
Parallel.For(0, 100, i => DoWork(i));

使用高效的同步机制,避免“忙等待”(Busy Waiting)  https://www.cnblogs.com/LXLR/p/17659144.html

  • 原理:忙等待(如 while(flag) {})会使CPU核心在该循环中持续以100%的占用率空转,极度耗电且毫无意义。
  • 做法:使用基于内核事件的同步原语,如 AutoResetEvent, ManualResetEvent, Semaphore, Monitor (C# lock), Mutex。这些原语会在等待时让线程阻塞(Block),线程会被移出调度队列,CPU核心可以立即去执行其他任务或进入空闲状态。
// 糟糕!忙等待,CPU核心疯狂空转
private volatile bool _isDataReady = false;
public void BusyWaitMethod()
{    while (!_isDataReady) { } //极度耗电!
    ProcessData();
}
-------------------------------------------------------------------------------------------
// 优秀!使用事件等待,线程阻塞,CPU可休息
private readonly AutoResetEvent _dataReadyEvent = new AutoResetEvent(false);
public void EfficientWaitMethod()
{_dataReadyEvent.WaitOne(); // 线程在此挂起,不消耗CPU时间
    ProcessData();
}
// 另一个线程在数据准备好后调用 _dataReadyEvent.Set() 来唤醒它

2. 定时器  https://www.cnblogs.com/LXLR/p/17696125.html

特性
DispatcherTimer
System.Timers.Timer
System.Threading.Timer
线程模型
UI 线程
线程池工作线程 (可通过 SynchronizingObject 封送到 UI 线程)
线程池工作线程
是否便于更新 UI
是 (天然在 UI 线程执行)
需通过 SynchronizingObject 或 Dispatcher.Invoke
需通过 Dispatcher.Invoke
节能程度
相对较低 (会阻止 UI 线程进入空闲状态)
较高
通常最高 (对 UI 线程干扰最小)
适用场景
需要频繁更新 UI 元素的低频操作
一般后台任务,可能需要与 UI 交互
纯后台任务、资源清理、低频心跳
精度
依赖 UI 消息循环,精度较低
较高
较高 (但受线程池调度影响)
是否需要处理跨线程访问
是 (当需要更新 UI 时)
是 (当需要更新 UI 时)
为何 System.Threading.Timer 通常更节能
  • 基于线程池(ThreadPool):System.Threading.Timer 和 System.Timers.Timer 的回调方法都在.NET线程池的工作线程上执行,而不是专用的线程。线程池能有效控制和重用线程,避免了频繁创建和销毁线程的开销。
  • 最小化UI线程干扰:因为它们不直接占用UI线程,UI线程可以更自然地进入空闲或低功耗状态。而 DispatcherTimer 的 Tick 事件总是在UI线程触发,这意味着即使任务简单,也会唤醒并占用UI线程,可能会阻止系统进入更深层次的空闲状态。
选择定时器与节能建议:
  • 需要更新UI元素:优先选用 DispatcherTimer。
  • 执行后台任务、无需更新UI:优先选用 System.Threading.Timer。
  • 需要与UI交互的后台任务:可考虑 System.Timers.Timer。
无论选择哪种定时器,这些做法都有助于降低能耗:
  • 使用尽可能长的间隔:将 Interval 设置为业务逻辑允许的最大值。频繁触发(如100ms)相比低频触发(如2000ms)能耗差异巨大。
  • 及时停止和清理:在窗口关闭、页面卸载或不再需要定时器时,务必调用:
    • DispatcherTimer: .Stop() 方法
    • System.Timers.Timer: .Stop() 和 .Dispose() 方法 (或设置 Enabled = false)
    • System.Threading.Timer: .Change(Timeout.Infinite, Timeout.Infinite) 和 .Dispose() 方法
  • 避免在回调中执行繁重操作:尤其在 DispatcherTimer 中,长时间的计算会阻塞UI线程,消耗更多资源,造成界面卡顿。应考虑将耗时操作异步化或移至工作线程。
  • 考虑使用单个定时器处理多个任务:与其为每个任务创建一个定时器,不如使用一个定时器,在其回调中遍历处理所有需要定期执行的任务集合。
  • 对于高频或精确计时需求:评估是否有更高效的替代方案,如 Rx.NET 的 Observable.Timer 或基于帧渲染的 CompositionTarget.Rendering 事件(适用于UI动画)。

三、 数据结构优化

核心原则是:没有绝对最优的数据结构,只有针对特定场景最合适的数据结构。
主要需求
避免
推荐
快速查找(是否存在)
List<T>
O(n)
O(1)
键值对快速查找
List<KeyValuePair<K,V>>
O(n)
Dictionary<K, V>
O(1)
需要有序性 & 快速查找
N.A
N.A
SortedDictionary<K, V>、SortedList<K, V>
O(log n)
频繁在首/尾增删元素
List<T>
O(n)
LinkedList<T>
O(1)
先进先出(FIFO)队列
List<T>
在首部删除非常低效
Queue<T>
O(1)
后进先出(LIFO)栈
List<T>
在尾部操作高效,但语义不专一
Stack<T>
O(1)
需要快速获取最大/最小元素
每次遍历查找
O(n)
PriorityQueue<T> (.NET 6+)
O(log n)

经典场景与代码示例

1. 场景:检查用户名是否已被注册

  • 低效做法: 使用 List<string>
List<string> registeredUsers = GetUsersFromDB(); // 假设有10万个用户// 每次检查都要遍历10万条数据 -> O(n)
bool isTaken = registeredUsers.Contains("newUsername");
  • 高效做法: 使用 HashSet<string>
// 从数据库获取后,直接放入HashSet。构建过程是O(n),但只做一次。
HashSet<string> registeredUsersSet = new HashSet<string>(GetUsersFromDB());// 后续每次检查都是近乎即时的 -> 平均O(1)
bool isTaken = registeredUsersSet.Contains("newUsername");   

 

2. 场景:通过产品ID快速获取产品信息

  • 低效做法: 使用 List<Product>
List<Product> products = GetProducts();
// 需要遍历整个列表查找 -> O(n)
Product desiredProduct = products.FirstOrDefault(p => p.Id == targetId);
  • 高效做法: 使用 Dictionary<int, Product>
// 以ID为键,产品对象为值构建字典
Dictionary<int, Product> productDictionary = GetProducts().ToDictionary(p => p.Id);// 直接通过键获取,无需遍历 -> O(1)
if (productDictionary.TryGetValue(targetId, out Product desiredProduct))
{// 找到了
}

 

3. 场景:处理需要按优先级执行的任务

  • 高效做法: 使用 PriorityQueue<T>
// 定义一个任务类,实现IComparable接口或提供IComparer来比较优先级
PriorityQueue<WorkTask, int> taskQueue = new PriorityQueue<WorkTask, int>();// 入列任务,优先级数字越小通常表示优先级越高(可根据需求调整)
taskQueue.Enqueue(new Task("Low importance"), priority: 3);
taskQueue.Enqueue(new Task("Critical!"), priority: 1);
taskQueue.Enqueue(new Task("Medium"), priority: 2);// 按优先级顺序处理任务(Critical -> Medium -> Low)
while (taskQueue.TryDequeue(out WorkTask task, out int priority))
{ProcessTask(task); // 每次Dequeue操作是O(log n)
}

四、电源状态感知

public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();SystemEvents.PowerModeChanged += OnPowerModeChanged;}private void OnPowerModeChanged(object sender, PowerModeChangedEventArgs e){switch (e.Mode){case PowerModes.StatusChange:AdjustForBatteryMode();break;case PowerModes.Resume:ResumeOperations();break;case PowerModes.Suspend:ReduceActivity();break;}}private void AdjustForBatteryMode(){// 切换到电池模式时的优化if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Offline){ReduceAnimations();IncreaseUpdateIntervals();DisableNonEssentialFeatures();}}
}

五、后台任务优化

1. 合并与批量处理任务

  • 原理:类似于网络请求的合并。CPU从休眠到激活有一次“唤醒成本”,处理100个任务唤醒1次,远比处理100次任务唤醒100次要省电得多。
  • 做法:使用生产者-消费者模式,将零散产生的任务放入一个队列或缓冲区,然后由一个或少数几个后台线程以固定间隔批量处理。
  • 示例:日志记录、数据采集、文件写入等场景非常适合此策略。
// 一个简单的生产者-消费者示例
private readonly BlockingCollection<LogMessage> _logQueue = new BlockingCollection<LogMessage>();// 启动一个消费者线程
public void StartLogger()
{Task.Run(async () =>{var batch = new List<LogMessage>();while (true){// 等待第一条日志var message = _logQueue.Take();batch.Add(message);// 尝试在短时间内收集一批日志,而不是来一条写一条while (_logQueue.TryTake(out message, timeout: 50)) // 等待50ms看还有没有新日志
            {batch.Add(message);}await WriteLogBatchToFile(batch); // 批量写入文件
            batch.Clear();}});
}// 生产者(应用线程)
public void Log(string text)
{_logQueue.Add(new LogMessage(text));
}

 

2. 优化算法和数据结构,减少计算量

  • 原理:这是最根本的省电方式。CPU执行指令越少,耗电自然越少。
  • 做法:
    • 选择时间复杂度更低的算法(O(n) vs O(n²))。
    • 使用更高效的数据结构(HashSet<T> 用于查找 vs List<T>)。
    • 避免在循环中进行不必要的计算、资源分配(如创建对象)和密集的I/O操作。
    • 使用缓存(Cache)来存储昂贵计算的结果。

相关文章:

针对WPF的功耗优化(节能编程)

一、UI渲染优化 1. 减少不必要的视觉元素<!-- 避免过度使用复杂效果 --> <Border Background="LightGray" CornerRadius="5" Margin="5" Padding="10"><!-- 使用简单样式代替复杂模板 --> </Border><!-- 而…...

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解

Docker 清理完整指南:释放磁盘空间的最佳实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monos…...

微算法科技(NASDAQ: MLGO)开发Rollup技术,探索区块链扩展性解决方案

随着区块链技术的广泛应用,其扩展性问题逐渐成为制约行业发展的核心瓶颈。传统区块链架构在高频交易场景下,因链上资源有限,导致交易确认时间长、手续费高昂,难以满足商业级应用需求。为解决这一痛点,微算法科技(NASDAQ: MLGO)基于状态通道技术积累,进一步研发Rollup技…...

征稿倒计时3天/武汉科技大学主办/医学人工智能/现可享优惠

📢大数据与智慧医学国际学术会议(BDIMed 2025) 📮武汉科技大学主办|高层次嘉宾出席报告| IEEE出版EI/Scopus/IEEE Xplore检索|高录用、快见刊 📆征稿范围广:数字健康技术|智能医疗与可穿戴智能|物联网与智慧健康|医学成像和信息学 等方向均可投递 🔥参会多元化:投稿…...

生成更智能,调试更轻松,SLS SQL Copilot 焕新登场!

本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构设计与核心技术积淀。作者:执少 对,这是一篇你明知道怎么回事儿,但还是会点进来看的文章! 本文是阿里云日志服务(SLS)首次对外系统性地揭秘 SLS SQL Copilot 背后的产品理念、架构…...

NOI linux使用教程

一、配置NOI linux环境为中文 1. 桌面右键setting 2.下拉找到地区&语言,点击Manage Installed Languages 3. 选择安装其他语言包Install / Remove Languages 4. 勾选简体中文Chinese (simplified) 5. 输入密码后确认 6. 等待安装即可 7. 安装完后,选择语言下拉选项中的中…...

springboot 文件处理框架

-------------------------------------------------------------------------------------------Apache POI 是一款常用的 Excel 处理工具,但在一些场景下,存在内存占用高、处理速度慢等问题。以下是一些比 POI 更具优势的轻量级 Excel 处理工具:EasyExcel:是阿里巴巴开源…...

Docker:龙晰系统(Anolis)更新yum源下载docker

一、配置Docker的yum库 1. 查看系统版本 # 查看系统版本 cat /etc/os-release2. 配置系统yum源 这里可以看我的另一篇文章: 3. 卸载旧版docker与podman 重点:podman与docker冲突!!龙蜥Anolis Linux默认安装Podman作为容器管理工具,这是由于Podman是Red Hat(龙蜥的开发者之…...

针对单输入单输出、多输入多输出及三阶系统带约束的模型预测控制的实现

针对单输入单输出(SISO)、多输入多输出(MIMO)及三阶系统带约束的模型预测控制(MPC)的实现 一、SISO系统MPC实现 1. 系统建模与离散化 % 传递函数定义(二阶惯性环节) s = tf(s); G = 1/(s^2 + 2*s + 1); Ts = 0.1; % 采样时间 Gd = c2d(G, Ts, zoh); % 离散化关键参数:…...

vue3中父子组件数据同步的默认方式update:xxx

update:xxx 是Vue 3中实现自定义v-model的约定。它的工作原理是: 子组件通过emit(update:propName, newValue)通知父组件需要更新某个属性父组件可以通过v-model:propName="data"或@update:propName="data = $event"来接收这个更新 父组件:<template&…...

解决 C# 当另一个read操作挂起时不能调用read方法的问题

life runs on code作者: zhaotianff转载请注明出处...

AI辅助编程_工具和方式

AI编程AI 编程 这个时代的方式定义问题、建构系统、引导协作 方式 1. Copilot 模式:你写头它写尾 2. Agent 模式:你说话,它写程序 “氛围感编程” 产品形态插件和IDE两种 模式 :问答模式(Ask)、文件编辑模式(Edit)、智能体模式(Agent) 国内百度 腾讯: https://c…...

[完结10章]Java大模型工程能力必修课,LangChain4j 入门到实践

在人工智能技术飞速发展的今天,大型语言模型(LLM)已成为推动创新的核心驱动力。对于Java开发者而言,掌握大模型工程能力不再是一种选择,而是一种必需。LangChain4j作为专为Java开发者设计的工具库,正在成为连接传统Java工程与大模型应用的重要桥梁。参考资料:/s/1kSb5z5…...

k8s源码分析——kubectl命令行交互

Cobra库 k8s各组件的cli部分都使用Cobra库实现,Cobra 中文文档 - 掘金 (juejin.cn),获取方式如下:go get -u github.com/spf13/cobra@latestcobra库中的Command结构体的字段,用于定义命令行工具的行为和选项。它们的作用如下:Use: 命令名称。Aliases: 命令的别名。Suggest…...

将 seata 2.5 发布到私服

将 seata 2.5 发布到私服1.概述 我们在使用seata 做分布式事务的时候,有时需要将 seata 发布到私服中,方便 修改和调整。 2.实现过程 2.1 在根目录下的pom.xml 中 增加发布配置 <distributionManagement><repository><id>jpaas-release</id><url&…...

一些感悟

1. 突破分型 50分 2. 驱动浪 30分 3. 驱动浪突破分型 80分 4. 驱动浪突破分型 回调61.8% 或 80% 做单 100分 其中突破分型是做单前提 重中之重!...

五款免费低代码平台深度横评:斑斑、简道云、宜搭、氚云、织信如何选?

在当今数字化转型的浪潮中,低代码开发平台以其可视化、拖拽式的开发模式,极大地降低了企业应用开发的门槛和成本,成为企业提升效率、快速响应市场变化的重要工具。对于预算有限的中小企业、初创团队或业务部门而言,免费的低代码平台是绝佳的入门选择。本文将为您客观评析五…...

ubuntu历史版本下载

https://old-releases.ubuntu.com/releases/LTS版本:...

读书笔记:数据库索引的智能优化:反向键与降序索引

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。本文为个人学习《Expert Oracle Database Architecture Techniques and…...

代码随想录算法训练营第十天| 232.用栈实现队列、 225. 用队列实现栈、20. 有效的括号 、1047. 删除字符串中的所有相邻重复项

232.用栈实现队列 题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/ 解题思路:用两个栈实现队列,一个入栈,把入栈里面的元素全部放入出栈 代码实现:点击查看代码def __init__(self):self.stack_in = [] #入栈,主要负责pushself.stack_o…...

零成本搭建企业系统:五款免费低代码平台推荐

概述 在数字化转型的背景下,低代码平台正成为企业快速构建信息系统的重要工具。它们通过可视化、组件化的方式,大幅降低了开发门槛和时间成本,即使没有编程背景的业务人员也能参与系统搭建。本文将为大家推荐五款值得尝试的免费低代码平台,帮助中小团队或个人实现零成本高效…...

故障处理:access$表在数据库丢失的恢复

我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。故障处理:access$表在数据库丢失的恢复 下面是测试一把access$基表丢失…...

从需求出发:教你判断选斑斑还是织信

斑斑低代码以免费、私有化部署优势,适合中小企业;织信则提供高端解决方案,适合中大型企业,两者各有特色。​在数字化转型的浪潮中,低代码开发平台正成为企业降本增效的利器。在众多国产平台中,斑斑低代码和织信无疑是受关注的两个选择。本文将从多个维度深入分析这两款平…...

PLC结构化文本设计模式——建造者模式(Builder Pattern)

PLC Structured Text Design Patterns PLC结构化文本设计模式——建造者模式(Builder Pattern) 介绍 建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。 建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离…...

C++ - STL - 迭代器

什么是迭代器?🤔 想象一下,你有一排整齐的书架,上面放着很多书。你现在想从第一本开始,一本一本地看书名。你怎么做呢? 你会用手指指着第一本书,看完书名后,手指移动到下一本书,再看书名,这样一直指到最后一本书。 在C++的STL中,迭代器就是你的"手指"!它…...

MATLAB的智能扫地机器人工作过程仿真

MATLAB的智能扫地机器人工作过程仿真,结合环境建模、路径规划、避障算法和动态清扫流程一、代码 %% 环境建模(20x20网格地图) mapSize = [20,20]; obstacleDensity = 0.2; % 障碍物密度% 生成随机障碍物地图 envMap = ones(mapSize); obstacles = randi([1,mapSize(1)], cei…...

linux redis 8.2.1软件开机启动redis.service与etc下的rc.local配置2种方式

### 2025-9-8 linux redis 8.2.1软件开机启动```linux 软件开机启动第一种:写服务1、sudo vim /etc/systemd/system/redis.service 内容如redis.service.txt下:[Unit]Description=Redis In-Memory Data StoreAfter=network.target [Service]User=redisGroup=redisExecStart=…...

在GA中添加Tag-GetDynamicSpecSourceTags().AddTag(NewTag)

GetDynamicSpecSourceTags().AddTagexample:FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass,1);AbilitySpec.GetDynamicSpecSourceTags().AddTag(NewTag);其中AbilityClass是GA的Class...

python如何在函数中使用全局变量?

在 Python 中,全局变量是定义在函数外部的变量。要在函数中使用全局变量,需要根据具体情况使用 global 关键字,以下是详细说明和示例: 1. 只读全局变量(无需声明) 如果只是在函数中读取全局变量的值,不需要任何特殊声明,直接使用即可: # 定义全局变量 global_var = &q…...

296、贾生

296、贾生296、贾生 唐●李商隐 宣室求贤访逐臣,贾生才调更无伦。 可怜夜半虚前席,不问苍生问鬼神。【现代诗意译】 汉文帝 在宣室求贤访能 召见贾谊 这个被贬逐臣子 他的才华无与伦比皇帝半夜移膝向前 认真求教 可惜不问人民疾苦 问的是鬼神!小学生C++...

ubuntu 24.04部署mysql8.0.41(glibc2.17)

环境Os:ubuntu 24.04 desktop桌面版mysql:8.0.41 glibc2.17查看操作系统信息root@hxl-VirtualBox:/# uname -aLinux hxl-VirtualBox 6.14.0-29-generic #29~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Aug 14 16:52:50 UTC 2 x86_64 x86_64 x86_64 GNU/Linuxroot@hxl-VirtualBox:…...

C++ - STL - 键值对pair

键值对——pair STL中的pair是一个模板类,用于将两个可能类型不同的值组合成一个单元,常用于存储键值对或函数返回多个值的场景。 创建上面尖括号里面,是用来指定类型的。这种指定类型的方式STL会一直使用的。 更准确的应该是叫泛型,用到的技术是模板。 使用pair的元素 pai…...

第四天学习:LSTM

流水不争先,争的是滔滔不绝—— 每日渐进,终抵远方LSTM(Long Short-Term Memory,长短期记忆网络) 他的前身是RNN(循环神经网络),为啥我们拿着好端端的RNN不用,非要寻找其他的网络算法呢? 这是因为RNN本身存在缺陷:RNN的初衷:处理序列数据(如句子、语音、时间序列)…...

MATLAB的稀疏自编码器实现

一、核心实现代码 %% 数据准备(以MNIST手写数字为例) [XTrain, YTrain] = digitTrain4DArrayData; % 加载MNIST训练数据 XTest = digitTest4DArrayData; % 加载测试数据% 数据预处理(归一化+向量化) XTrain = double(reshape(XTrain, [], 28 * 28)) / 255; XTe…...

题解:P2157 [SDOI2009] 学校食堂

题目传送门 题目大意 有 \(n\) 个学生,每个学生有一个时间 \(t_i\),所花费的真实时间为 \(t_i\) 异或上前一个吃饭的同学的 \(t_i\)。每个学生有一个忍耐度,最多可以让后面 \(b_i\) 个同学比自己先吃饭。问在不违反忍耐度的条件下,让所有同学吃饭的最小时间。 解题思路 首先…...

LLM 应用开发中的常见模式

以下内容根据AI对话生成,如有雷同,纯属巧合1. 链式调用 (Chaining) 这是最基本也是最常见的模式。它指的是将多个 LLM 调用、数据处理步骤或工具调用按顺序连接起来,形成一个连贯的工作流。前一个步骤的输出是后一个步骤的输入。要解决的问题:单一 LLM 调用无法完成复杂任务…...

vue3 与 element-plus

Vue,Vite>> 安装 vue/cli 脚手架最新牍的cli脚本架为 5.0.9 版本, 在高版本的 Node 中安装脚手架时,会提示 版本不匹配; 主要适配 8~22版本的Node, 另外 Vue Cli 已进入维护模式,官方推荐新项目使用 vite 构建工具>> 切换到 22.18.0 版本重新安装 Vue/cli 不会出…...

可爱的二维数据结构们

前置知识 相信大家都学过了:树套树、二维树状数组; 四分树; K-D Tree;正文 给你一个 \(n\times n\) 二维平面,支持单点修改,矩形查询。这是我们树套树、二维树状数组能解决的,时间复杂度 \(\mathcal{O}(n\log^2n)\)。 那如果我们需要支持区间修改呢?此时不太能树套树,…...

网络安全相关职业

1、安全分析师是构建跨组织安全措施、保护公司免受攻击的关键人物。他们负责探索和评估公司网络,以发现可操作的数据和建议,供工程师制定预防措施。该职位需要与各利益相关方合作,以了解安全需求和安全形势。 2、安全工程师利用威胁和漏洞数据(通常来自安全团队)开发和实施…...

202005_CTFHUB_Redis流量

Redis流量分析Tags:流量分析,REDIS 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202005_CTFHUB_Redis.zip 0x01. WP 1. 用Wireshark打开流量包,过滤关键字flag 找到后半部分的flag及前半部分的参数名,过滤…...

langchain学习之路

以下内容是根据与AI对话完成的学习规划,如果有雷同,纯属巧合纯AI生成,阶段一:筑基入门 (1-2周) 这个阶段的目标是理解 LangChain 解决的核心问题、基本概念和核心组件。 学习目标:理解 LLM 应用开发中的常见模式(如链式调用、代理)。 熟悉 LangChain 的核心模块(Models…...

通义灵码产品演示: 数据库设计与数据分析

作者:了哥 演示主题:AI 进行数据库设计以及做数据分析 演示目的 演示通义灵码对于数据库的设计能力以及数据分析能力。 演示准备准备数据库,这里为了简单实用 sqlite3brew install sqlite3使用 vscode,同时安装好通义灵码的插件安装 uvxpip install uvx这里需要注意 python…...

win10安装mysql,MySQL5.7详细教程

还在为Windows10安装MySQL折腾得焦头烂额?作为全球最受欢迎的开源数据库,MySQL在开发环境搭建中必不可少。本文将手把手带你完成从下载到配置的全过程,避开安装过程中的各种"坑"。 下载MySQL安装包 首先访问MySQL官网下载专区,选择社区版(Community)的5.7.22版本…...

第二周作业

问题一 1.1 changeStr:尝试将x赋值为“xyz” changeArr:遍历string数组,把数组的每个元素都接上他们的索引 1.2 main方法里的x没有被改变,因为x的类型是string,非可变对象 1.3 改变了 因为这里对数组进行更改 是可变的 可影响原数组 1.4 来自于命令行参数 如果是命令行就在…...

ubuntu 24编译安装libssl.so.1.0.0

环境: Os:ubuntu 24.04在使用xtrabackup 8.0(percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz)备份数据库的时候报错误 /opt/xtrabackup-8.0.35-31/bin/xtrabackup --defaults-file=/home/middle/mysql8/conf/my.cnf --user=root --password=mysql -P13306 --sock…...

9月8-13日小记 - L

本周主要学习内容:背包DP以及其他DP杂题。 9月8日 大地彩绘,爽读《1984》。 9月9日 1. P8742 [蓝桥杯 2021 省 AB] 砝码称重 (1) bitset法 开一个bitset b,其中b[j]表示重量j能否称到。 边界显然是b[0]=1。 对于每一个w[i],b的每一位都应左移w[i]位,表示某一位所代表的砝码…...

Task2:利用 Basnet 将Task1中的所有图片转化为显著性图片

Task2:利用 Basnet 将Task1中的所有图片转化为显著性图片 1. 什么是显著性检测? 显著性检测的目的是识别图像中最吸引人注意的区域(显著性区域)。对于你的任务,就是将普通图片转换为突出主要对象的显著性图。 输入:普通图片 → 输出:显著性热力图(黑白或彩色) 2. BASNe…...

代码随想录算法训练营第一天| 704.二分查找、27.移除元素、977.有序数组的平方

704.二分查找 题目链接:https://leetcode.cn/problems/binary-search/ 解题思路:定义一个中间索引middle,如果nums[middle]>target,则更新左区间的右边界,如果target>nums[middle],则更新右区间的左边界 注意点!!!始终按照[left,right]左闭右闭的区间定义 代码实现…...

让天下没有难查的故障:2025 阿里云 AI 原生编程挑战赛正式启动

在云原生与 AI 原生架构加速演进的今天,系统复杂性已远超传统边界。运维与可观测不再只是“看日志、查指标、盯告警”,AI 大模型为 Operation Intelligence 实践指明了新方向。在云原生与 AI 原生架构加速演进的今天,系统复杂性已远超传统边界。运维与可观测不再只是“看日志…...

kuka机器人程序备份

注意: 开始以下步骤前,请确保已经切换到专家模式下,否则将无法识别到 U 盘。 1、将 U 盘插入到机器人控制柜上,在示教器上确认是否识别到 U 盘 。 2、按下示教器的主菜单键,在弹出菜单中依次选择 文件 ‣ 存档 ‣ USB控制柜 ‣ 所有 ,并在弹窗的对话框中单击“ 是 ”。3、…...