- 博客(277)
- 收藏
- 关注
原创 节点小宝:告别公网IP,重塑你的远程连接体验
它采用了自研P2P技术,实现了设备间的点对点连接,有效避免了中间环节可能存在的风险。它省去了公网IP的租赁费用,简化了网络配置的成本,让普通用户也能以极低的门槛享受到专业级的远程互联服务。这意味着,你可以在手机上轻松访问家里的NAS文件,在公司电脑上管理家里的智能设备,真正实现**“一端在手,万物互联”**。,让你无需公网IP也能轻松实现内网穿透,直接连接到你的设备,无论是家中的NAS还是办公室的电脑,都能像本地操作一样流畅。,解锁你设备的全部潜力,真正实现**“你的设备,随处可达”**的自由境界!
2025-06-29 16:44:37
17752
16
原创 引爆AI生产力革命!揭秘Chatbox AI:你的桌面AI超级大脑来了!
用户可以根据自己的使用习惯和专业需求,调整模型参数、设置快捷指令,打造专属的AI工作流。更重要的是,Chatbox AI在。
2025-06-21 10:17:44
16508
80
原创 【QT】:QT(介绍、下载安装、认识 QT Creator)
1.1 什么是 QT🔥QT是一个跨平台的 C++ 图形用户界面应用程序框架。它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展。QT为开发者提供了一种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应用程序,同时也可以使用C++语言进行高级开发。所谓框架其实是一个“半成品”,帮助项目搭建“骨架”,并提供丰富的组件库,开发人员只需增加一些内容或调用一些提供好的组件就可以完成系统。
2024-12-08 09:31:43
28635
125
原创 【Java】java 集合框架(详解)
📃个人主页:island1314⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞🔥 Java集合框架 提供了一系列用于存储和操作对象组的接口和类。这些工具是为了解决不同数据结构通用操作的需求而设计的。集合框架主要包括两种类型的容器:🌈 集合分为几个接口,主要有List、Set和 Queue常用接口的实现类如下:注意:Collection 是集合中的最基本接口,一般不直接使用该接口Map接口提供键到值的映射,不能包含重复的键,每个键最多只能映射到一个值。💦集合类中,如ArrayL
2024-10-26 15:03:20
18073
110
原创 【Java】String 类详解:字符串操作的必备知识
这篇博客主要讲了String的基本性质以及常量池的概念、 String 字符串的操作方法、还有 StringBuffer和String 的在特定场景下的使用
2024-10-07 10:41:28
11956
104
原创 【Docker#4】Docker Registry 镜像仓库详述
Docker Registry 概述 Docker Registry是用于存储、管理和分发Docker镜像的核心组件,提供镜像仓库管理、用户认证和索引功能。 主要特点 镜像管理:Registry管理多个Repository,每个Repository包含不同版本的镜像(通过Tag区分) 分类: 公共仓库(如Docker Hub) 私有仓库(如Harbor) 赞助/供应商仓库 功能类比:类似图书馆系统,Registry是图书馆总部,Repository是图书系列,Tag是版本号 应用场景 公共仓库适合开源项目和
2025-12-19 23:29:32
324
1
原创 【C++现代#13】C++17 三大核心库特性详解:std::string_view、文件系统库(<filesystem>)与并行算法
📃个人主页:island1314。
2025-12-03 15:30:03
837
原创 【C++现代#12】C++17 三大值语义容器详解:std::optional、std::variant 与 std::any
是 C++17 引入的一种类型安全的联合体(Union),它允许可变类型的数据存储在一个统一的类型中。传统联合体(union)的问题:C风格或 C++的普通 union 不是类型安全的。我们需要自己记住当前存储的是哪种类型,如果访问错了(比如在一个存储 int 的 union 上读取 float),会导致未定义行为,而且它无法处理非平凡类型(如 std::string)std::variant 的优势是它解决了所有这些问题。
2025-12-03 15:23:52
684
原创 【C++现代#11】C++17 核心新特性全解析(续):__has_include、标准化属性体系、求值顺序规则革新
📃个人主页:island1314⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞C++17 引入了预处理器指令,用于 在编译期检查某个头文件是否存在。如果指定的头文件存在,返回,否则返回。语法使用场景和优势示例注意与的区别:用于检查是否定义了某个宏,而专门用于检查头文件是否存在。属性是为代码实体(变量、函数、类等)添加额外信息的一种机制,这些信息可以帮助编译器进行优化、生成警告或错误,以及指导静态分析工具。属性的通用规则在 C++11 之前,各编译器使用自己的语法。11.1 C+
2025-12-03 15:19:46
744
原创 【C++现代#10】C++17 核心新特性全解析(续):if constexpr、折叠表达式、类模板参数推导、非类型模板参数与嵌套命名空间
折叠表达式是 C++17 引入的一种新特性,它允许对模板参数包进行递归操作,能够优雅且高效地处理可变参数模板中的参数。这种表达式可以应用于对参数包的每个元素执行相同的计算或比较操作。语法格式(一)一元右折叠:语法形式为,其中init是初始值,op是操作符,params是参数包。计算顺序是从右到左。// 利用一元右折叠计算数组元素的总和// 输出 15return 0;在这个示例中,表示将数组中的每个元素依次与前面的累加结果相加,从右向左折叠计算。(二)一元左折叠:语法形式为,其中op是操作符,
2025-12-03 15:18:04
799
原创 【C++现代#9】C++17 四大核心新特性详解:结构化绑定、inline 变量、if/switch 初始化与强制拷贝省略
强制省略拷贝是指编译器必须省略某些情况下的拷贝或移动构造函数的调用,从而提升性能。这种优化在 C++17 中成为强制性的,而不是以往的可选优化。拷贝省略(Copy Elision)是编译器的一种优化技术,目的是避免创建不必要的临时对象,从而提升性能。最常见的拷贝省略形式就是 **返回值优化(unnamedreturn value optimization,URVO)**和命名返回值优化(NamedReturn Value Optimization, NRVO)在哪些情况下会应用强制省略拷贝?
2025-12-03 15:15:16
901
原创 谷歌Nano Banana 2实测:推理式AI绘图碾压全场,中文长文本渲染与DeepSider国内直连方案详解
Nano Banana 2不仅会自动推理,思考用户给出的提示词,还会自动补完用户的深层次需求,并根据自己的最新知识库进行填充。你可以一边在网页上刷视频,一边让DeepSider的各个模型在旁边替你画图、写代码、解析文档,非常便捷。相对其他方法,DeepSider一个插件就能体验多款热门AI大模型,对国内用户来说更流畅、更方便。装完插件后,在任何网页上点击右上角的DeepSider图标,就能打开侧边栏选择你需要的模型。欢迎大家分享你的Nano Banana 2生成结果哦,一起来探索更多好玩实用的案例吧~
2025-11-26 19:01:43
620
原创 汇编语言程序设计(第二版) 刘慧婷 王庆生主编 -- 期末速成
数据段 (Data Segment):存放程序使用的数据。代码段 (Code Segment):存放程序的指令。堆栈段 (Stack Segment):存放堆栈数据(可选,有时由系统分配)。附加段 (Extra Segment):额外的数据段(可选)。基本结构定义数据段,段名为 DATA;数据定义,如: VAR1 DB 10, 20DATA ENDS;数据段结束定义堆栈段 (可选);堆栈空间定义,如: DW 100H DUP(?STACK ENDS;堆栈段结束定义代码段,段名为 CODE。
2025-11-25 22:44:43
685
原创 算子的“消失”艺术:揭秘CANN中的算子融合与性能跃迁
摘要:本文深入探讨了CANN中的算子融合技术,该技术通过将多个连续算子自动合并为单一"超级算子",有效解决神经网络模型中频繁的Kernel启动和内存读写开销问题。文章分析了典型计算流程的性能瓶颈,详细阐述了算子融合的工作原理及其带来的性能优势,介绍了模式匹配与图改写的关键技术,并为开发者提供了编写融合友好型算子的最佳实践建议。最后指出开发者需要转变思维,从单一算子优化转向配合编译器实现全局自动优化,以达到最佳性能效果。
2025-11-18 12:18:29
289
原创 当CANN算子输出一片“乱码”:我的首次NPU硬件调试实战笔记
后一块数据的结果,不断地覆盖前一块的结果。对于我们开发者来说,最可怕的不是满屏的红色报错,而是一切看起来都正常——程序顺利编译、成功运行——但最终输出的结果却是一堆毫无意义的“乱码”。它不仅会教你如何“写”代码,更重要的是,它会提供工具和平台,让你在实践中学会如何“改”代码,这才是开发者真正的成长之路。预期的结果是一系列清晰的浮点数,而我的算子吐出来的,是一堆“NaN” (Not a Number) 和混乱的0。有了这个强大的工具,我的角色从一个瞎猜的“旁观者”,变成了一个手持“显微镜”的“侦探”。
2025-11-18 12:15:07
454
原创 沉默的性能杀手:揭秘并解决CANN算子中的内存银行冲突
如果一条向量指令需要同时读取32个数据,而这32个数据恰好位于32个不同的银行中,那么这次访问在一个周期内就能完成。内部访存瓶颈(Bank Conflict)**之后,我们的CANN算子,才算真正意义上实现了对硬件能力的极致压榨。是32,那么访问任何一列,都会导致所有32次访问全部集中在一个bank上,性能会急剧下降到无冲突情况的1/32!我们可以在矩阵的每一行末尾,手动添加几个“哑”元素,人为地改变矩阵的宽度。例如,在32个银行的系统中,地址。如果你的算法主要是列访问,一个根本的解决方案是,在将数据从。
2025-11-18 12:10:04
343
原创 超越算子:CANN中的异步编程与流管理,实现图级性能优化
用Profiler一分析,我们会看到一幅熟悉的、令人不安的画面:在两个算子执行的间隙,存在着明显的“空白期”。这些空白,通常是CPU(Host侧)与NPU(Device侧)之间的数据拷贝(H2D/D2H)、或者Host侧准备下一个算子任务所花费的时间。这就像CEO把任务A的指令发给1号车间后,立刻回到办公室,马上开始准备任务B、C、D的指令,让设备和自己都保持忙碌。利用这两个特性,我们就可以设计出经典的**“三流并行”流水线**,来最大化地重叠(Overlap)数据拷贝和计算任务。
2025-11-18 12:09:29
385
原创 超越单核:CANN算子开发中的多核并行与任务切分
当我们掌握了多核并行,我们就打通了从算法到底层硬件的全链路,能够将NPU的澎湃算力,真正、彻底地释放出来。它将我们的角色从一个精雕细琢的“工匠”(优化单核),提升为了一个运筹帷幄的“指挥家”(调度所有核心)。这不再是优化一个“工人”的效率,而是要学会如何成为一个“工厂主管”,将任务合理地分配给所有“工人”,让他们同时开工。这篇文章,我们将踏出单核优化的“舒适区”,进入一个更宏大、性能提升也更显著的领域——,学习如何将一个庞大的任务,分发给NPU上所有的计算核心,实现真正的“全员加速”。
2025-11-18 12:08:07
386
原创 CANN赋能工业视觉:ResNet模型量化加速实践与性能评估
面对工业质检等场景对AI推理实时性的极致要求,我将目光投向了华为CANN(Compute Architecture for Neural Networks)计算架构。本文以经典的图像分类模型ResNet-50为例,详细展示了如何利用CANN的**离线模型转换(ATC)**和**后训练量化(PTQ)**能力,将模型精度损失控制在1%以内,同时在昇腾AI处理器上实现了超过4倍的推理加速。这一实践证明了CANN在简化部署流程、释放自主创新AI硬件潜能方面的核心价值。
2025-11-17 18:12:54
25321
原创 Qoder 降价,立即生效!首购 2 美金/月
其次,在上下文工程能力方面,Qoder 提供最强的上下文工程能力,可一次检索 10 万个代码文件,结合全球顶尖的大模型能力与 Agent,对大规模代码进行深度语义检索与持续上下文理解,将复杂、多阶段的开发任务拆解并由智能体迭代完成,以“仓库级理解 + 任务化执行”正面应对真实工程的复杂度。自上线开始,Qoder 持续通过技术升级,比如:工程检索准确率提升、智能体工具并行化优化、上下文智能压缩等能力,在保证效果的前提下持续优化单任务的 token 消耗,让开发真切感受到 Credits 越来越耐用。
2025-11-12 14:22:18
403
1
原创 【C++现代#8】深入浅出 C++14 新特性与实践
C++11及以后版本允许用户定义自己的字面量后缀,用于创建自定义的字面量类型(这是通过重载。
2025-11-08 18:22:55
968
原创 【C++现代#7】模板元编程
作用:模板特化是处理泛型编程中“特殊情况”的关键工具。它让我们能够为特定的数据类型提供更高效、更安全或逻辑上更正确的实现。函数重载 vs. 函数模板特化:虽然有时可以使用函数重载来达到类似目的,但特化提供了更细粒度的控制,它仍然是同一个模板家族的成员,只是行为被定制。而重载则是定义一个全新的、独立的函数。在某些情况下,编译器选择重载函数比选择特化版本更复杂,因此通常推荐使用特化来处理特定类型。为什么函数模板不支持偏特化?这是C++标准委员会的一个设计决策。
2025-11-07 16:49:12
610
1
原创 【C++现代#7】泛型编程
背景auto让编译器替我们推导出类型。它既是一次“解放键盘”的语法糖,也是现代 C++ 泛型编程、模板元编程、函数式编程的基石之一。示例// int// double// std::string(C++14 字面量)必须初始化,否则编译器无答案可抄。不是“动态类型”,类型一旦推导完就静态固定,跟手写类型一样快。注意:C++11:只能推导“表达式类型”it!= v.end();省去冗长。配合decltype注意auto不是“动态类型”,而是编译期类型推导基本语法与语义int x = 0。
2025-11-06 09:54:56
795
原创 【C++现代#6】详解 constexpr
const保证变量在初始化之后不会被修改。核心作用编译器会检查所有对const变量的赋值或修改企图,并在编译阶段报错。告诉代码阅读者,这个值是固定不变的。语法作用:把对象或指针声明成“只读”,编译器禁止后续赋值。两类常见写法// 变量本身只读// 指向的内容只读(指针可变)示例// 基本用法// 初始化后,MAX_USERS 永远是 100// 运行时初始化:const 可以在运行时确定值// 假设从用户或文件读取一个值return 42;
2025-11-03 22:02:01
620
原创 【C++现代#5】C++11并发支持库 -- 异步 future
想象你在主线程启动了一个耗时的计算任务(比如在一个新线程中),就是主线程用来查询和接收这个任务结果的信封。异步任务(在新线程中运行),负责计算结果并将结果或异常放入一个共享状态。对象(在主线程中),负责访问共享状态中的结果。共享状态 (Shared State)对象不直接存储结果,而是引用一个共享状态。任务的结果(如果任务有返回值)。任务执行过程中可能抛出的异常。任务是否已经完成的状态信息。std::async简化了传统的“手动创建+ 手动创建。
2025-11-02 16:43:25
868
原创 【C++现代#4】C++11并发支持库 --条件变量 <condition_variable>
条件变量是C++多线程编程中的重要同步机制,用于实现线程间的协调通信。本文介绍了条件变量的核心概念、成员函数及其应用场景,包括: 基本使用方法:wait()、notify_one()和notify_all() 典型应用案例:两线程交替打印奇偶数 生产消费者模型实现 必须使用std::unique_lock的原因 条件变量通常与互斥量(std::mutex)和共享数据配合使用,有效解决线程同步问题,避免了忙等待的资源浪费。通过示
2025-11-02 16:40:50
605
原创 【C++现代#3】C++11并发支持库 -- atomic 原子操作与无锁编程
std::atomic 是 C++ 提供的模板类,用于实现线程安全的原子操作。其核心特性包括: 原子性保证 - 确保对共享变量的操作不可中断,避免数据竞争 高效实现 - 相比互斥锁(mutex)开销更低,通常通过硬件指令实现 关键操作: 基础操作:load()、store()、exchange() 算术操作:fetch_add()、fetch_sub() 比较交换(CAS):compare_exchange_weak/strong() 与互斥锁的主要区别:atomic适
2025-11-02 16:39:10
686
原创 【C++现代#2】C++11 并发支持库 -- 互斥量(Mutex)及锁机制 (<mutex>)
本文介绍了C++中的互斥量(Mutex)及锁机制,重点解析了std::mutex在多线程环境下保护共享数据的作用。通过实例演示了数据竞争问题及其解决方案,对比了不同锁类型的特点: 核心问题:++gtx操作在多线程环境下可能引发数据竞争,导致结果不准确 解决方案:使用std::mutex保护临界区,确保操作的原子性 锁类型对比: std::mutex:基础互斥锁 std::lock_guard:RAII封装,自动管理锁生命周期 std::unique_lock:更灵活的RAII封装 std::recur
2025-11-02 16:36:42
736
原创 【Rust 编程】深度解析 Rust Tokio 异步运行时中的 IO 循环机制
Tokio 的 IO 循环是 Rust 异步运行时复杂而精巧的核心组件。它通过对操作系统事件多路复用 API 的高效利用,结合 Rust 零成本的。
2025-10-30 13:10:24
752
1
原创 【Rust 编程】工作窃取(Work-Stealing)调度算法
Rust 异步运行时中的工作窃取调度算法,是其高性能并发模型的核心驱动力。它通过将调度逻辑分散到各个核心的本地队列,结合不对称的访问模式(本地 LIFO,远程 FIFO),巧妙地将性能优化与内存安全相结合。这种机制不仅消除了传统集中式调度器的竞争瓶颈,更利用缓存局部性最大限度地榨取了现代多核处理器的性能。理解工作窃取,就是理解 Rust 如何在零成本抽象的框架下,实现高性能并发的专业秘密。
2025-10-30 13:07:42
594
原创 Rust 零成本抽象原理:性能与安全性的编译期融合
零成本抽象(Zero-Cost Abstraction)这一概念由 Bjarne Stroustrup(C++ 创建者)推广,但在 Rust 中得到了更彻底的实践。不为未使用付费 (You don’t pay for what you don’t use):如果代码没有使用某个特性,编译后的产物中就不会包含与之相关的代码或数据结构。等价性能 (Performance Equivalence)
2025-10-30 13:04:42
997
原创 Waker 与任务唤醒机制深度解析
这是最见功力的地方。我们需要实现中的四个函数,它们都接收一个*const ()裸指针,我们必须将其安全地转换回Arc<Task>。// 将 Arc<Task> 转换为 RawWaker,以便 Waker 可以在其内部存储 Task 指针// Arc::into_raw 增加引用计数,返回裸指针// RawWakerVTable 定义了 Waker 的行为unsafe {ptr,clone_raw,wake_raw,drop_raw,),))
2025-10-30 12:25:17
1417
原创 汇编语言设计 -- 操作数的寻址方式
📃个人主页:island1314⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞汇编语言程序由 指令序列 构成,指令的操作对象是 数据。在一条指令中通常要指出数据所存放的地址,因此指令构成如下:一条指令通常由 **操作码字段 **和 操作数字段 两部分组成。指令地址数: 操作数字段可以有一个、两个或三个,对应指令称为一地址、二地址或三地址指令。80x86 指令约定在 80x86 汇编语言中,二地址指令的一般格式通常是:指令助记符目的操作数,源操作数\text{指令助记符} \qua
2025-10-20 18:30:29
344
1
原创 汇编程序实例及DOS 熟悉
机器语言(MachineLanguage)汇编语言(Assembly Language)高级语言(High Level Language)。
2025-10-20 11:00:43
671
1
原创 【GoLang# 8】:方法
Golang 方法总是绑定对象实例,并隐式将实例作为第一实参 (receiver)。只能为当前包内命名类型定义方法。参数 receiver 可任意命名。如方法中未曾使用 ,可省略参数名。参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接口或指针。不支持方法重载,receiver 只是参数签名的组成部分。可用实例 value 或 pointer 调用全部方法,编译器自动转换。理解。
2025-10-15 15:14:29
1063
2
原创 【GoLang #7】:结构体学习
结构体是一种用户自定义的数据类型,它可以包含多个不同类型的字段(属性 field)。结构体是 Go 语言中实现面向对象编程的主要方式。
2025-10-13 13:08:22
361
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅