自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

牟同學的博客

日常干货分享俱乐部

  • 博客(78)
  • 收藏
  • 关注

原创 Linux网络高级玩法:多路由表与策略路由实现双路由冗余与分流

在网络应用中,保证连接的可靠性和高效性至关重要。传统单一路由的方式往往无法满足复杂场景的需求。本文将详细介绍如何使用Linux高级路由策略实现双路由冗余与分流。

2025-11-24 16:31:07 846

原创 内网环境下的救星:详解麒麟系统ISO镜像本地源搭建全攻略

在日常的系统运维中,我们经常会遇到这样的困境:生产服务器位于严格的内网环境,无法连接互联网,但急需安装某些软件包或依赖。这时候,一个可靠的本地软件源就显得尤为重要。

2025-11-22 15:54:44 819

原创 从 0 到 1 掌握 std::packaged_task:C++ 异步任务的 “隐形胶水“

在 C++ 并发编程中,`std::packaged_task` 是一个常常被提及但又容易被误解的组件。它不像 `std::thread` 那样直接关联线程,也不像 `std::future` 那样专注于结果获取,却是连接 “任务执行” 与 “结果回调” 的关键桥梁。本文将从实现原理、设计初衷、应用场景到与 `std::promise` 的对比,全方位解析 `std::packaged_task`,帮你彻底掌握这个异步编程利器。

2025-10-28 19:00:00 1960

原创 C++ 多线程必学:future/promise 从原理到 async 实战

在现实生活中,“承诺” 是一方对另一方的保证(比如 “我明天给你带一份文件”),而 “未来” 则是接收承诺的一方等待结果的过程。C++ 中的future/promise正是借鉴了这一逻辑,构建了线程间的 “结果传递协议”。:“承诺者”,负责在一个线程(通常是生产者线程)中生成结果(值或异常),并通过内部机制将结果 “传递” 给对应的future。:“未来者”,负责在另一个线程(通常是消费者线程)中获取promise生成的结果,支持阻塞等待或非阻塞检查。线程安全的结果传递。

2025-10-27 19:45:00 1508

原创 从 0 到 1 理解决策树分裂:用实例看透 “如何切分数据更聪明”

信息增益率 = 信息增益 ÷ 特征固有值(IV)。取值多的特征(如 ID)会有更大的 IV,导致增益率被 “压低”;取值少但有效的特征(如年龄)IV 较小,增益率更能体现其真实价值。分裂的本质是通过 “不纯度指标” 找到最优切分方式用信息熵(ID3)、信息增益率(C4.5)、基尼系数(CART)衡量纯度,选增益最大的特征。回归问题:用 MSE 衡量集中程度,选方差减少最多的特征和阈值。ID3:用信息增益,适合简单分类,但偏好多值特征。C4.5:用信息增益率,解决多值问题,支持连续特征。

2025-10-22 19:15:00 1269

原创 生产环境定时器陷阱:CLOCK_REALTIME与CLOCK_MONOTONIC的生死抉择

时间管理不当可能导致系统崩溃、数据不一致,甚至灾难性故障在生产环境中,定时器的正确使用是系统稳定性的基石。选择错误的时钟源可能导致难以调试的问题,尤其是在分布式系统和高并发场景下。本文将深入探讨两种关键时钟类型,并通过完整C++示例揭示最佳实践。

2025-10-20 16:59:19 416

原创 string_view:告别字符串拷贝,解锁C++性能新姿势!

是C++17中一个革命性的工具,它通过“零拷贝”理念极大优化了字符串处理性能。尽管需要谨慎管理生命周期,但在只读场景下,它是替代和的理想选择。使用场景推荐函数参数传递(只读字符串)解析文本或日志(频繁子串操作)高性能库开发(避免数据复制)

2025-10-17 16:58:40 371 1

原创 constexpr:让C++在编译期预知一切的神奇关键字!

constexprconstexpr是现代C++最重要的特性之一,它让"编译期编程"从复杂的模板元编程变成了直观的函数式编程。通过合理使用constexpr提升性能:零运行时开销增强安全:编译期错误检测改善代码:更清晰的表达意图拥抱现代化:为未来特性铺路扩展阅读建议constexpr与const的区别constexpr在模板元编程中的应用C++20的consteval和constinit编译期字符串处理技巧。

2025-10-17 16:56:10 264 2

原创 数据预处理必看!Min-Max 归一化 vs Z-Score 标准化,用 1 个例子讲透核心差异

X:原始数据μ:该维度数据的均值(所有数据的平均值)σ:该维度数据的标准差(衡量数据 “离散程度” 的指标)对比维度Min-Max 归一化Z-Score 标准化结果范围固定(如 [0,1])不固定(通常 [-3,3])核心逻辑按 “最大值 - 最小值” 比例压缩按 “偏离均值的标准差倍数” 衡量对异常值敏感吗敏感(易被极端值带偏)不敏感(极端值影响小)计算依赖依赖 Min 和 Max依赖 μ(均值)和 σ(标准差)适用场景无异常值、需比例关系有异常值、需分布特征。

2025-10-17 11:28:47 1212 2

原创 拆解深度学习 “基石”:激活函数有啥用?z=wᵀx+b 怎样使用?

本质:激活函数引入非线性,使神经网络能拟合复杂函数作用:增加模型表达能力、控制输出范围、影响训练效率设计原则:非线性、可导、计算高效、梯度稳定常用函数。

2025-10-11 20:30:00 1496

原创 从 0 搞懂交叉熵:从信息量、编码逻辑到 log 的核心作用,一篇讲透(附c++程序示例)

对于离散分布pxp(x)px和qxq(x)qx,KL 散度DKLp∥qDKL​p∥qDKLp∥qEx∼plog⁡pxqxDKL​p∥qEx∼p​logqxpx​公式解读:对每个事件 x,计算 “真实分布的对数概率” 与 “近似分布的对数概率” 的差值,再以pxp(x)px为权重求平均。

2025-10-11 20:15:00 407

原创 梯度上升 ×MLE:从 “爬山寻顶” 到参数最优,彻底搞懂机器学习的核心寻优逻辑 (附C++代码)

在最大似然估计(Maximum Likelihood Estimation, MLE)中,梯度上升(Gradient Ascent)是一种核心的数值优化方法—— 当似然函数(或对数似然函数)形式复杂、无法通过 “求导令其为 0 后解析求解” 时,梯度上升通过 “沿对数似然函数梯度方向迭代更新参数”,逐步逼近使对数似然函数最大的参数值(即 MLE 估计值)。两者的关系可概括为:MLE 是 “目标”(找最优参数),梯度上升是 “手段”(实现目标的数值工具)。在理解关系前,需先区分 “目标” 与 “手段” 的本质

2025-10-10 20:00:00 883

原创 从崩溃到稳定:如何用<limits>头文件解决C++数值处理的核心痛点?

本文介绍了C++标准库中的<limits>头文件及其std::numeric_limits模板类,用于查询各种数值类型的属性。内容包括基本用法(如获取最大/最小值、是否有符号等)、常用属性详解(数值范围、类型特征、精度等)以及实际应用场景(如防止数值溢出的安全运算)。相比C语言的<climits>和<cfloat>,std::numeric_limits提供了更类型安全、一致的接口,是处理数据类型边界情况的理想工具。通过代码示例展示了如何利用这些特性进行数值运算的安全检查

2025-10-10 16:24:00 397

原创 从赌场到AI:期望值如何用C++改变世界?

期望值通常用 E(X) 或 μ 表示。是什么:期望是随机变量所有可能值按其发生概率加权后的“长期”平均值。怎么算:离散型用加权求和,连续型用积分。为什么重要:它提供了预测长期行为、进行理性决策(如投资、保险)的核心理论工具。它的线性性质使其在复杂计算中非常方便。局限:它不提供关于风险或波动性的任何信息。

2025-10-09 19:45:00 951

原创 矩阵运算:深度学习的数学基石与手工实现解析

数学基石:重新审视线性代数的核心概念,理解它们在深度学习中的真正含义

2025-09-30 16:38:49 386

原创 C++ 模板递归遍历 Tuple 的黑科技

tuple 不能直接用 for 循环遍历,因为:- 每个元素类型可能不同,无法用统一的循环变量类型;- tuple 的长度是在编译期确定的,不是运行期。因此,我们需要一种**编译期循环**的方式,即**模板递归**。

2025-09-26 17:12:34 418

原创 C++ Erase-Remove 惯用法详解:高效删除容器元素的正确方式

在 C++ 开发中,从容器中删除特定元素是一项常见任务。许多开发者最初会尝试使用循环遍历和条件删除的方式,但这种方法往往效率低下且容易出错。Erase-Remove 惯用法是 C++ 标准库提供的一种高效、安全的元素删除技术,特别适用于顺序容器如std::deque和。本文将深入探讨 Erase-Remove 惯用法的原理、用法、优势以及实际应用场景,帮助您掌握这一重要的 C++ 编程技巧。int age;// 删除所有未成年人}),return 0;

2025-09-20 15:50:39 542 2

原创 Ubuntu 磁盘扩容与扩容失败问题解决( df -h 与 GParted 显示空间不一致的问题 -LVM)

本文详细说明了VMware怎样进行磁盘扩容,并说明了当磁盘为LVM2 pv时出现的,GParted 显示某个分区还有几十 GiB 可用,但 `df -h` 却提示该分区已接近满额,这种 “空间幻觉” 背后是系统存储管理的分层设计,本文将从原理到实践,带你彻底解决这个问题。

2025-09-17 19:30:00 1229

原创 C++与Lua交互:从原理到实践指南

Lua与C++交互的核心在于虚拟栈机制,该机制通过建立中立通信区解决两种语言在类型系统、内存管理等方面的差异。典型交互流程包括:初始化Lua环境、加载脚本、读取变量、调用函数等步骤,需严格遵守栈平衡原则。现代开发中可使用sol2等绑定库简化流程。最佳实践强调错误检查、类型验证和资源管理,避免栈不平衡、内存泄漏等常见问题。C++也可注册函数供Lua调用,实现双向交互。

2025-09-16 17:26:48 1146

原创 引爆性能!高效LRU缓存设计与实现:双向链表与哈希表的完美结合

LRU缓存通过双向链表+哈希表实现O(1)高效操作,是提升系统性能的利器。掌握这一设计范式,轻松解决缓存淘汰难题!

2025-09-11 15:45:00 756

原创 深入理解内存对齐:从一行神奇的位运算代码说起

深入理解 static size_t align_size(size_t size, size_t alignment = DEFAULT_ALIGNMENT) { return (size + alignment - 1) & ~(alignment - 1); }

2025-09-10 16:12:14 725

原创 为什么你的数据可能“白写了”?轻松掌握 fsync 与 fdatasync:原理、使用与实战指南

特性fsyncfdatasync同步范围数据 + 所有元数据数据 + 必需元数据安全性⭐⭐⭐⭐⭐ 极高⭐⭐⭐⭐ 高性能⭐⭐ 较低⭐⭐⭐⭐ 较高磁盘IO较多(至少2次:数据+元数据)较少(通常1次:数据)fsync和fdatasync追求绝对安全:选择fsync,它确保数据和元数据都安全落盘追求性能效率:选择fdatasync,它在保证数据安全的同时减少磁盘IO现代系统中:两者的性能差距缩小,但设计理念仍然值得借鉴记住,在计算机世界里,“保存成功”并不总是等于“数据安全”。合理使用fsync。

2025-09-09 20:21:42 689

原创 从竞态到原子:pread/pwrite 如何重塑高效文件 I/O?

本文深入探讨了Linux/Unix系统中的pread()和pwrite()系统调用,对比传统的read()/write()+lseek()组合,突出了其优势所在。在多线程环境下,传统方法因共享文件偏移量会导致竞争条件,需要额外加锁。而pread()和pwrite()通过将定位与读写合并为原子操作,既不改变文件偏移量,又保证了线程安全,特别适合多线程编程和随机I/O场景。文章通过代码示例展示了更简洁的使用方式,并总结了适用场景,建议在需要精确控制文件位置或并发访问时优先选用这两个系统调用。

2025-09-03 21:30:00 1184

原创 别再让分散 IO 拖慢性能!struct iovec:高效处理聚集 IO 的底层利器

`struct iovec` 本身不直接实现零拷贝,但它是**零拷贝技术处理 “分散数据” 时的关键载体**。其核心价值体现在...

2025-09-02 21:00:00 977

原创 SCP 高效安全实战指南:远程传文件不泄露、不卡顿,运维必备

SCP凭借其安全、简单、高效的特性,成为系统管理员、开发者和IT专业人员在不同主机间传输文件的得力助手。掌握其基础命令和高级技巧,能让你在日常工作中更加游刃有余。无论是简单的单文件传输,还是复杂的自动化脚本,SCP都能可靠地完成任务。下次需要在服务器间移动数据时,不妨试试SCP吧!

2025-09-01 21:15:00 1244

原创 一文读懂 Qwen2.5:从模型特性到多框架部署全指南

《Qwen2.5大模型部署全攻略》 阿里巴巴推出的Qwen2.5系列大模型在知识储备、代码能力、数学推理等五大核心维度实现全面升级,提供从0.5B到72B的多参数版本选择。本文详细介绍了四种部署方案: ModelScope本地部署:适合开发者调试,提供从环境配置到模型测试的完整流程,包括CUDA版本检查、PyTorch安装等关键步骤。 ModelScope线上部署:零硬件门槛方案,通过阿里云免费算力快速体验模型性能。 Ollama轻量部署:支持Windows/Linux/Mac多平台,提供一键式运行命令,适

2025-08-28 21:15:00 1514

原创 CPU 卡顿时必看!mpstat:堪比瑞士军刀的性能工具,精准定位负载问题

它是 Linux 系统上 Sysstat 工具包中的一个组件,能提供详尽到每个 CPU 核心的性能数据,是系统管理员和运维工程师进行性能排查的必备工具。它就像一个专业的汽车仪表盘,不仅告诉你车速(整体CPU使用率),还告诉你发动机转速(%usr)、变速箱状态(%sys)、是否在等待燃油喷射(%iowait)以及是否有外部阻力(%steal)。的输出,看所有核心的利用率是否大致均匀。如果负载不均,可能意味着应用的线程调度或任务分配算法有待优化,或者需要考虑进行 CPU 绑核(CPU affinity)设置。

2025-08-28 19:00:00 597

原创 拒绝 “重量级” 冗余!ifstat:轻量却能打,搞定网络流量监控就靠它

在日常的服务器运维、应用性能排查或仅仅是好奇自己的电脑网络状况时,我们常常需要快速回答一个简单的问题:**我的网络接口每秒到底在传输多少数据?**虽然 `iftop` 可以显示详细的连接信息,`iperf` 擅长进行带宽测试,但它们有时显得“太重”了。今天,我们来认识一个轻巧、简洁而直接的网络监控工具—— **`ifstat`**。它就像网络世界的速度表,专注于一件事:实时报告每个网络接口的发送和接收速率。

2025-08-28 14:08:41 653

原创 别再只会看 top!vmstat 才是系统监控的 “隐藏王者”,一文吃透性能排查

在日常的系统运维、开发调试乃至性能测试中,我们经常会遇到这样的问题:服务器突然变慢了,应用响应延迟,但根源在哪里?是CPU饱和了?内存耗尽了?还是磁盘I/O成了瓶颈?此时,一个轻量级但功能强大的命令行工具——`vmstat`,就成了我们定位问题的首选利器。

2025-08-27 21:15:00 1860

原创 为什么 “int& &&” 会变成 “int&”?C++ 引用折叠的原理与本质详解

引用折叠规则是C++模板元编程和完美转发中的核心概念,它定义了当引用类型嵌套时会发生什么。理解这个规则对于掌握现代C++特性至关重要。

2025-08-27 21:00:00 401

原创 深入理解C++ std::forward:完美转发的原理与应用

在C++模板编程中,我们经常遇到一个棘手问题:如何将参数原封不动地传递给另一个函数?这里的"原封不动"包括参数的值类别(value category)——即到底是左值还是右值。

2025-08-27 20:45:00 1064

原创 超越函数指针:深入理解与灵活运用 std::function 和 std::bind

这是一篇关于 `std::function` 和 `std::bind` 的详细博客分享,旨在帮助读者深入理解并灵活运用这两个强大的 C++11 工具。

2025-08-26 19:53:47 365

原创 掌握C++ std::invoke_result_t:类型安全的函数返回值提取利器

在C++模板元编程和泛型编程中,我们经常需要知道一个可调用对象(函数、函数指针、lambda表达式、函数对象等)的返回类型。传统的`decltype`虽然强大,但在处理复杂情况时显得力不从心。C++17引入的`std::invoke_result_t`为我们提供了一种类型安全、表达清晰的方式来获取可调用对象的返回类型。

2025-08-25 20:45:00 599

原创 深入解析 std::enable_if:原理、用法与现代 C++ 实践

本文深入解析了C++中的std::enable_if机制,主要内容包括: 理论基础:介绍了SFINAE(替换失败非错误)原则,这是std::enable_if实现的核心机制; 实现原理:剖析了std::enable_if的模板实现,展示了如何通过条件特化控制类型成员的存在性; 核心用法:详细讲解了在函数返回类型、参数、模板参数及构造函数中使用std::enable_if的多种方式; 实战应用:提供了安全数据访问函数等实际案例,演示如何基于类型特性选择不同实现。 std::enable_if是C++模板元编程

2025-08-24 13:42:38 1209

原创 深入理解 C++ SFINAE:从编译技巧到现代元编程的演进

这是一篇关于 C++ SFINAE 技术的详细博客文章。我们将从基本概念出发,逐步深入到高级用法和现代替代方案。

2025-08-23 17:56:48 817

原创 Traceroute命令使用大全:从原理到实战技巧

Traceroute的核心价值在于精准定位网络路径故障。掌握其协议切换(-I-T)、参数调优(-q-m)和结果解析能力,可高效解决跨网段延迟、防火墙拦截及节点宕机等问题。结合pingmtr等工具,构建完整的网络诊断体系,大幅提升运维效率🚀。扩展阅读Wireshark协议分析。

2025-08-13 19:00:00 1524

原创 C++锁的艺术:如何优雅地实现线程安全swap操作?

互斥锁(mutex):保证临界区互斥访问的基本同步原语锁守卫(lock_guard)RAII包装器,确保锁的释放不可复制/移动,严格作用域绑定死锁避免固定锁定顺序同时锁定(std::lock)超时机制(try_lock)异常安全即使swap抛出异常,锁也能正确释放没有资源泄漏风险。

2025-08-12 19:43:40 1302

原创 内存顺序、CAS和ABA:std::atomic的深度解析

是一个模板类,位于<atomic>头文件中,用于封装基本类型(整数、指针等)并提供原子操作。其核心特点是保证操作的原子性可见性和顺序性。// 声明一个原子整型变量虽然int y;// 可能使用内部锁可平凡复制(TriviallyCopyable)无用户定义拷贝/移动操作使用检查是否真正无锁✅简单共享状态(标志位、计数器)✅无锁数据结构(队列、栈、链表)✅性能关键区的轻量级同步✅跨线程信号传递❌ 需要保护多个相关变量❌ 需要等待特定条件❌ 操作涉及复杂业务逻辑。

2025-08-12 19:37:58 1213

原创 深入解析std::atomic的exchange与compare_exchange操作

线程1读取值A线程2修改值为B线程3修改值为A线程1的CAS操作成功(值仍为A),但数据结构已改变ABA问题详细介绍exchange当需要无条件设置新值并获取旧值时使用适合标志位切换、所有权转移在循环中更新值时首选无锁数据结构的核心高性能要求的场景当需要单次尝试时避免虚假失败的场景简化错误处理逻辑“选择正确的原子操作,如同选择正确的锁——它决定了并发性能的边界。” - C++并发艺术。

2025-08-12 19:33:39 1128

原创 并发编程中的 ABA 问题:从原理到实战解决方案

一个值从 A 变成 B,又变回 A,此时 CAS 操作会误认为 “值没变” 而成功执行,但中间的状态变化可能已经导致逻辑错误。ABA 问题的本质是 “状态表象相同但历史不同”,其危害在于隐蔽性强(99% 场景不触发)、破坏性大(直接导致内存错误)。不让 “旧状态” 被误认为 “未变”—— 无论是通过 GC 阻止内存重用、危险指针标记使用中对象,还是标签指针跟踪版本变化,本质都是打破 “A→B→A” 的迷惑性。在实际开发中,建议优先使用语言自带的并发工具(如 Java 的。

2025-08-12 19:29:14 864

C++实现:梯度下降求解MLE

该代码实现了基于梯度上升的最大似然估计(MLE)框架,核心目标是通过观测数据估计概率分布的参数。整体采用面向对象设计,通过抽象基类定义接口,派生类实现具体分布,再结合优化器和数据生成器完成端到端的参数估计。 主要模块包括: 概率分布抽象层:定义所有分布需实现的核心接口(对数似然、梯度等)。 具体分布实现:正态分布和指数分布的参数计算逻辑。 MLE 优化器:通过梯度上升算法最大化对数似然,求解最优参数。 数据生成器:生成已知参数的模拟数据,用于验证 MLE 算法的正确性。 演示程序:对比解析解与数值解,展示样本量对估计精度的影响。

2025-10-10

基于 poll 的 TCP 多客户端通信程序

一套基于 Linux 系统的 TCP 客户端 / 服务端通信程序,采用 poll 进行 I/O 多路复用,实现了多客户端之间的消息广播功能。服务端支持最多 5 个客户端同时连接,客户端发送的消息会被转发给其他所有在线客户端,适用于简单的局域网聊天场景。 程序包含两个主要部分: 1. 服务端程序:负责监听连接、管理客户端、转发消息 2. 客户端程序:负责与服务端建立连接、发送用户输入消息、接收其他客户端消息

2025-08-10

一段基于 C 语言实现的非阻塞 TCP 连接代码

该代码的核心功能是(有配套介绍文档,可以免费下载学习):创建一个带有超时控制的非阻塞 TCP 连接。具体来说,它能在指定的超时时间内尝试与目标服务器建立 TCP 连接,若连接成功则返回 socket 描述符;若超时或连接失败则返回错误,避免程序因阻塞等待连接而陷入无响应状态。

2025-08-09

下面我将实现一个基于 C++11 的高性能定时器,具备定时执行、周期执行、任务管理、线程安全等特性 这个实现采用了优先级队列管理任务,使用条件变量等待超时,支持任务的添加、删除和取消

这个定时器实现具有以下特点: 功能完整: 1、支持一次性定时任务(addOnce) 2、支持周期性定时任务(addPeriodic) 3、支持取消单个任务(cancel)和取消所有任务(cancelAll) 4、提供获取当前任务数量的接口 线程安全: 1、使用互斥锁(mutex)保护共享数据 2、使用条件变量(condition_variable)实现高效等待 3、所有公共接口都进行了同步处理 高效性能: 1、使用优先级队列(priority_queue)管理任务,快速获取最近要执行的任务 2、采用条件变量的 wait_until 等待机制,避免忙等待 3、任务执行时解锁,允许同时添加新任务 健壮可靠: 1、捕获任务执行中的异常,避免定时器线程崩溃 2、完善的任务状态管理,正确处理已取消的任务 3、资源管理清晰,避免内存泄漏 易用接口: 1、使用 std::chrono 作为时间接口,支持各种时间单位 2、通过 TimerId 标识任务,方便管理 3、直观的函数命名,易于理解和使用 使用时只需包含 timer.h,创建 Timer 对象,然后调用相应的方法添加任务即可。示例代码展示了三种常见用法:一次性任务、周期性任务和取消任务。 这个实现可以满足大多数场景下的定时需求,并且可以根据具体需要进行扩展,如添加任务优先级、线程池执行任务等功能。

2025-08-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除