自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 彻底搞懂 pthread_join:从二级指针参数到返回值的本质(附常见坑总结)

永远不要把整数直接强制转成 void * 返回:虽然语法上合法,但语义完全错误,且极易导致段错误。如果需要返回整数,要么用动态分配内存,要么用全局变量。动态分配内存后必须释放:线程中malloc的内存,一定要在主线程成功后free,否则会造成内存泄漏。不需要等待线程时,使用 pthread_detach:如果不需要获取线程返回值,也不需要等待它结束,可以在线程创建后立即分离,线程退出时会自动释放所有资源:// 分离线程,无需join避免返回指向全局变量的指针。

2026-04-22 12:13:31 328

原创 Linux 线程常见函数超详细讲解

Linux 下的线程函数都属于 POSIX 线程库(pthread),绝大多数函数名以pthread_开头。编译链接:需加-lpthread选项(如错误处理:pthread 函数出错时不设置全局 errno,而是通过返回值直接返回错误码(读取返回值比读取线程内 errno 开销更小)。错误处理:始终检查 pthread 函数的返回值,不要依赖 errno;返回值内存管理:线程返回值若指向动态内存,主线程join后需free;避免局部变量返回或return的参数不能是线程栈局部变量;资源释放。

2026-04-22 12:13:02 543

原创 System V 共享内存:Linux 最高性能 IPC 的设计与实现

如果你需要简单、安全、低开发成本的通信,数据量小、频次低,命名管道是更好的选择,它的内置同步机制能帮你规避大部分并发问题;如果你需要极致的性能、大数据量传输、低延迟通信,或是多进程共享同一份大内存数据,System V 共享内存是 Linux 下的最优解。它的设计理念,本质是对 IPC 机制的极致优化:把内核从「数据的参与者」变成「资源的管理者」,把数据传输的控制权完全交给用户态,最大化减少内核干预,最终实现了零拷贝的极致性能。

2026-03-25 11:07:32 579

原创 C语言实现多态相关话题

/ 先声明父类// 定义函数指针类型:删除操作的函数指针// 父类结构体int key;// 【核心多态】:函数指针,指向具体的删除函数// --- 子类1:共享内存 ---// 继承父类// 特有属性// 共享内存专属的删除函数// 【关键】因为首地址相同,可以安全强转回子类指针printf("正在执行 [共享内存] 的专属删除逻辑...\n");printf(" -> 释放物理内存页: %zu bytes\n", shm->size);

2026-03-25 10:59:43 478

原创 进程间通信IPC---命名管道

命名管道(FIFO,先进先出):一种特殊的管道文件,存在于文件系统中,有明确的路径名;是半双工的进程间通信方式,支持无亲缘关系的任意进程通信。对比:匿名管道只能用于父子 / 兄弟等有亲缘关系的进程,命名管道解决了这个限制。IPC是进程间通信的统称,命名管道是最常用的轻量级 IPC 方式;命名管道 (FIFO):有文件名、支持任意进程通信、半双工、默认阻塞;单向通信、字节流、阻塞打开、内核管理缓冲区;mkfifo创建 →open打开 →read/write通信 →unlink删除。

2026-03-23 15:47:18 349

原创 从匿名管道到命名管道:Linux 无亲缘进程间通信的核心实现

匿名管道靠 fork () 继承文件描述符,解决了亲缘进程的通信问题;命名管道靠磁盘上的 FIFO 文件与唯一 inode,解决了任意进程的通信问题;两者的内核实现本质完全一致,都是内核中的循环缓冲区,遵循完全相同的读写规则;它们都完美契合了 Linux「一切皆文件」的设计思想,用文件操作的接口,实现了进程间的通信。

2026-03-23 15:40:26 401

原创 从匿名管道到 Master-Slave 进程池:Linux 进程间通信深度实践

管道本质是内核开辟的一段固定大小的内存缓冲区,它将一个进程的输出和另一个进程的输入连接起来,实现单向的数据流传输。匿名管道的「匿名」二字,意味着它没有磁盘上的文件实体,只能用于具有亲缘关系的进程(父子进程、兄弟进程)之间通信。调用pipe()时,内核会创建一个管道 inode,同时生成两个文件对象,分别对应读端和写端;两个文件对象通过文件描述符fd[0](读端)和fd[1](写端)暴露给用户态;数据写入写端,会进入内核的管道缓冲区,读端从缓冲区中读取数据,实现进程间数据传输。

2026-03-23 15:38:21 498

原创 Ext 系列文件系统---核心结构关联关系图

要找一个文件的数据,真正路径是这样:文件名↓(目录 data block:文件名 → inode 号)inode 号(逻辑 ID)↓(inode 表)inode 结构体↓(里面存:数据块号)数据块号(文件系统层)↓(文件系统计算:块号 → 扇区 LBA)LBA 扇区地址(硬件层)↓硬盘读写数据。

2026-03-20 07:00:00 332

原创 Linux 软、硬链接:从目录硬链接数 2 的本质,到 Ext 文件系统底层设计逻辑

硬链接是 Linux 文件系统中对文件实体的多文件名映射,通过ln 源文件 链接文件创建,核心是多个文件名(目录项)指向同一个 inode,共享文件的所有数据块和元数据。(类似于C++中的引用)核心特性:无主次之分,修改任一链接文件内容会同步到所有关联文件;仅支持普通文件,系统禁止手动为目录创建;无法跨分区 / 文件系统(inode 号仅在所属分区唯一);删除单个链接仅减少 inode 的硬链接数,只有当链接数降至 0 时,文件的 inode 和数据块才会被系统真正释放。

2026-03-20 06:30:00 561

原创 目录项(dentry)全面详解

内存 dentry 是对磁盘目录项的内存抽象,是内核运行时为了加速路径解析,对访问过的目录 / 文件构建的内存对象。所有被访问过的目录项,都会在内存中形成 dentry 实例,共同构建出内核视角下完整的文件系统目录树。核心字段作用d_inode指向该目录项对应的 inode 内存结构体,完成「文件名→inode」的核心关联d_parent指向父目录的 dentry 结构体,构建目录的父子层级关系,最终形成完整的目录树d_name目录项的文件名,用于快速路径匹配d_hashd_lrud_hash。

2026-03-20 06:30:00 402

原创 彻底搞懂 Linux IO:语言级缓冲区与内核缓冲区的本质区别

层级边界:语言级缓冲区在用户态,由 C 标准库的FILE结构体管理,核心是减少系统调用次数;内核级缓冲区在内核态,由操作系统管理,核心是减少磁盘 IO 次数。数据流转:用户代码→语言级缓冲区→write系统调用→内核级缓冲区→内核回写→物理磁盘,任何一个环节出问题,都会导致数据丢失。生命周期:语言级缓冲区随进程存在,进程崩溃则数据丢失;内核级缓冲区随系统存在,仅系统掉电会导致数据丢失。核心避坑:永远不要用close关闭fopen打开的文件,fclose才是 C 库缓冲区的正确收尾方式。

2026-03-06 07:30:00 542

原创 LangChain 工具调用全解析:从基础到实战,吃透 LLM 与外部工具的协同逻辑

在大语言模型(LLM)的应用中,纯文本生成已无法满足复杂场景需求 ——LLM 本身无法实时联网、精准计算或操作外部系统。LangChain 的工具调用能力正是为解决这一痛点而生,它让 LLM 能像人类一样「自主选择工具、传递参数、获取结果」,实现从「文本生成」到「任务执行」的跨越。本文结合实战代码、核心原理和常见问题,带你从零吃透 LangChain 工具调用的全流程。告诉 LangChain「这是工具调用请求」,区别于普通聊天;name指定工具、args传递参数、id绑定结果,缺一不可;

2026-03-06 07:15:00 716

原创 LangChain聊天模型进阶核心能力

聊天模型高阶能力是实现复杂应用的关键,包括四大核心方向。

2026-01-13 07:00:00 169

原创 LangChain聊天模型---工具调用简单介绍

LangChain 支持 3 种@tool这 3 种方式的核心目标都是生成 LangChain 标准的工具对象方式 1:简单直接,依赖 docstring;方式 2:灵活强大,依赖 Pydantic BaseModel;方式 3:简洁紧凑,依赖 Annotated 类型提示。

2026-01-12 20:54:51 577

原创 LangChain 聊天模型核心能力:从基础定义到进阶实战

作为 LangChain 生态的核心组件,聊天模型是连接大语言模型(LLM)与实际应用的桥梁。与传统纯文本补全模型不同,LangChain 中的聊天模型专门优化了对话交互能力,通过标准化的消息格式实现灵活调用,支持多模型切换、结构化输出、流式交互等高级功能。本文严格基于 LangChain 官方课件,结合实战代码与进阶知识点,带你从基础定义到核心能力,全面掌握聊天模型的使用方法。LLM:多数指纯文本补全模型,接受单个字符串提示作为输入,输出字符串补全结果(部分支持多模态);聊天模型。

2026-01-12 16:48:51 918

原创 2025数据结构实验八:排序

【代码】2025数据结构实验八:排序。

2025-12-26 21:12:13 380

原创 从 0 到 1 玩转大模型:新手入门 + 老手速查指南

作为 AI 技术布道师,经常被问 “大模型到底是什么?”“新手该从哪开始学?”“老手如何快速落地项目?这篇博客就像一本 “大模型实用手册”,既用大白话带新手入门,也为老手整理了核心技术和工具速查,让你既能懂原理,又能上手用。

2025-12-25 15:06:02 696

原创 大模型入门核心指南:概念、路径、技术与工具全解析

Transformer 是大模型的 “基础架构”,就像一栋房子的钢筋骨架,决定了。它的核心优势是 “”,能同时分析文本中不同词语的关联,而不是逐字逐句处理。例如,处理 “小明告诉小红,她喜欢的花是玫瑰” 时,Transformer 能快速识别 “她” 指的是 “小红”,而不是 “小明”,这是传统模型难以高效做到的。

2025-12-25 14:58:29 679

原创 一文搞懂 Linux 进程控制:从进程创建到进程程序替换的小白指南

/ 输出型参数:存储子进程退出状态返回值:成功返回被等待子进程 PID,失败返回 - 1;特性:阻塞等待任意一个子进程终止,若子进程已终止则立即返回;status 解析:通过宏判断是否正常终止,提取退出码()。函数名参数格式路径搜索(P)环境变量(E)核心说明execl列表否系统默认参数以NULL结尾(列表形式)execlp列表是(搜 PATH)系统默认无需写全路径(如execle列表否自定义最后参数为自定义环境变量数组execv数组否系统默认参数存于数组,数组以。

2025-12-06 18:45:09 818

原创 2025数据结构实验七:查找

【代码】2025数据结构实验七:查找。

2025-12-06 18:44:56 326 1

原创 KMP 算法超详细讲解笔记(含全概念 + 全题解题思路)

pi[i]:长度为 i 的前缀的最长 border 长度(最长真公共前后缀长度)。

2025-12-04 07:15:00 1524

原创 2025数据结构实验六:图

【代码】2025数据结构实验六:图。

2025-12-04 07:00:00 390 1

原创 Shell 脚本 + Makefile 核心语法:$ 用法与扩展逻辑

触发内容解析(变量值、命令输出、算术结果、函数返回值),无则为纯文本;Shell 中关注 “命令执行、算术运算、Shell 状态”,Makefile 中关注 “变量替换、规则上下文、内置函数”;

2025-11-25 07:00:00 807

原创 Linux 进程与虚拟地址空间

课本中常将进程描述为 “程序的一个执行实例”,而从 Linux 内核的视角来看,进程是 “担当分配系统资源(CPU 时间、内存)的实体”。进程 = 内核数据结构(task_struct) + 自己的程序代码和数据。程序本身只是存储在磁盘上的二进制文件(如),只有当操作系统将其加载到内存并创建对应的内核管理结构后,才成为可执行的进程。独立性:每个进程拥有独立的mm_struct和页表,虚拟地址空间隔离,数据修改互不影响。竞争性:进程数量远多于 CPU 数量,通过优先级竞争 CPU、内存等资源。并发性。

2025-11-25 07:00:00 791

原创 太原理工大学2025数据结构实验五-树

【代码】太原理工大学2025数据结构实验五-树。

2025-11-23 11:56:53 630 1

原创 太原理工大学2025数据结构实验四-字符串

【代码】太原理工大学2025数据结构实验四-字符串。

2025-11-23 11:36:24 337 1

原创 太原理工大学2025数据结构-栈和队列

【代码】太原理工大学2025数据结构-栈和队列。

2025-11-23 11:33:48 452 1

原创 笔试强训练习-8

判断区间使用前缀和可将 O(N)降为O(1),求出该区间到中点的最小线段和与K进行比较判断。选出一个区间后取中点(贪心,高中的多个点到一个点求线段和最短)无序数组求最小问题----必然排序 N*logn。枚举N^2个区间----使用滑动窗口---降为N。输出最大字典序 第一个当然是最大数n。核心:令aim尽量保持最大,判断后续输出。

2025-11-16 19:00:43 197

原创 深入理解 C++ 类型转换:从 C 语言兼容到 C++ 增强特性

类型转换是编程语言中数据交互的基础机制,用于解决不同类型数据间的赋值、传参等场景的类型匹配问题。C++ 作为兼容 C 语言的面向对象语言,不仅保留了 C 的类型转换方式,还针对类型安全和自定义类型扩展了全新特性,同时引入了规范化的显式强制转换运算符和运行时类型识别(RTTI)机制。本文将全面拆解 C++ 类型转换的核心知识点,结合所有示例代码逐句解析其原理与实践。C++ 为内置类型和自定义类型的双向转换提供了明确的支持机制,核心依赖构造函数和类型转换运算符。

2025-11-12 17:44:23 991

原创 深入讲解C++ 智能指针:原理、使用与实践

此处提供仿函数、函数指针、lambda 表达式// 1. 函数指针删除器// 2. 仿函数删除器public:// 3. 文件句柄删除器(仿函数)public:// 仿函数作为删除器(unique_ptr模板参数指定,shared_ptr构造函数传入)// 函数指针作为删除器// lambda表达式作为删除器// 管理文件句柄});return 0;当所有外部shared_ptr(如main中的n1n2)的生命周期结束后,对象之间的内部。

2025-11-12 17:44:14 1074

原创 C++ 异常详解:概念、使用与实践

C++ 异常机制是程序运行时错误处理的核心方案,它将问题的检测与解决分离,让程序模块间的错误通信更高效灵活。相比C 语言的错误码机制,异常通过对象传递更全面的错误信息,无需手动查询错误含义,大幅提升了代码的可读性和维护性。├── std::bad_alloc (内存分配失败)├── std::bad_cast (dynamic_cast类型转换失败)├── std::bad_typeid (typeid操作符作用于NULL指针)

2025-11-10 16:35:02 1058

原创 C++11 核心特性深度解析:可变参数模板、新类功能、lambda 与包装器

/ 名字// 价格// 评价{}int main(){"苹果", 2.1, 5},{"香蕉", 3.0, 4},{"橙子", 2.2, 3},{"菠萝", 1.5, 4}// 按价格升序排序(lambda替代仿函数)});// 按价格降序排序});// 按评价升序排序});return 0;

2025-11-10 07:00:00 948

原创 详解 C++ 模拟unordered_map 与 unordered_set 封装实现(基于哈希表)

public:// 普通迭代器:Ref=T&,Ptr=T*// 常量迭代器:Ref=const T&,Ptr=const T*// const版本的Begin()和End()++i) {// 其他接口...和的封装核心是「泛型复用」:基于通用哈希表,通过KeyOfT仿函数适配不同数据类型,通过迭代器实现遍历,通过 const 限定保证 key 不可修改,通过operator[]简化插入访问。

2025-11-06 11:16:12 1047

原创 C++完美转发概念篇

在 C++ 中,完美转发(Perfect Forwarding) 是指在泛型函数中,将参数传递给其他函数时,完全保留参数的原始属性(包括值类别 —— 左值 / 右值,以及 const/volatile 等限定符),既不额外产生不必要的拷贝,也不改变参数的语义,让目标函数能精准匹配对应的重载(如左值引用重载或右值引用重载)。在泛型编程中,若直接传递参数,会丢失原始值类别。例如:此时,即使传入右值(如),作为函数参数是左值,会调用左值引用重载,无法触发右值引用的移动语义,导致效率损失。完美转发依赖 C++

2025-11-06 07:00:00 263

原创 C++ 完美转发深度剖析:从原理到实战,彻底掌握std::forward的底层逻辑

万能引用T&&接收参数,通过模板推导和引用折叠适配左值、右值;根据显式指定的T,将参数还原为原始值类别;最终让目标函数(如Fun)精准匹配对应的重载,同时支持拷贝和移动语义。掌握完美转发,不仅能写出更高效的泛型代码,更能深刻理解 C++ 中 “值类别” 与 “引用” 的底层设计,是进阶 C++ 工程师的必经之路。

2025-11-05 18:22:24 759

原创 C++ 左值、右值与引用相关核心讲解

左值(lvalue)和右值(rvalue)是 C++ 中表达式的核心分类,核心区别在于是否可寻址、是否具有持久性。左值:可寻址、持久(如变量、引用);右值:临时,分纯右值(不可修改)和将亡值(可通过右值引用修改)。右值引用(T&&)绑定右值,但其具名变量本身是左值(需用std::move传递右值属性)。const保证只读性,mutable是合法例外,const_cast强制修改属于未定义行为。移动构造利用右值的临时性转移资源,右值引用是实现这一过程的关键工具。

2025-11-05 12:36:05 1104

原创 哈希表--哈希函数设计--冲突解决策略及代码实现讲解

不同的 Key 通过哈希函数计算后,得到相同的存储位置(如 Key1=63、Key2=31,若 M=16,63%16=1531%16=15),这种现象称为哈希冲突。冲突无法完全避免,需通过「优秀的哈希函数」减少冲突,再通过「冲突解决策略」处理已发生的冲突。开放定址法忘记状态标识:删除后直接设为 EMPTY,会导致后续冲突的 Key 查找失败,必须用 DELETE 标记。扩容时数据迁移错误:仅迁移 EXIST 状态的数据,避免迁移 EMPTY/DELETE 数据(之前代码曾踩坑:判断反为 EMPTY)。

2025-11-04 11:23:32 1022

原创 数论探秘:整数性质与算法精解

注意:此题N的范围较小,试除法的时间复杂度是O(n*根号n)将近1e6。该题中a的最大值由1e6位数字组成,只能使用string存储。注意:此题N的范围较大 ,故而换用更为巧妙的方法。题目:给个n,求1到n的所有数的约数个数的和~判断单个数是否为质数的时间复杂度。

2025-11-04 11:21:58 1214

原创 头歌作业2025数据结构实验二:链表

【代码】头歌作业2025数据结构实验二:链表。

2025-11-03 18:02:46 910

原创 太原理工大学头歌作业--2025数据结构实验一:顺序表

【代码】太原理工大学头歌作业--2025数据结构实验一:顺序表。

2025-11-03 17:58:44 545

Ext 系列文件系统-核心结构关联关系图

Ext 系列文件系统-核心结构关联关系图

2026-03-19

LangChain 聊天模型核心能力:从基础定义到进阶实战

LangChain 聊天模型核心能力:从基础定义到进阶实战

2026-01-12

C++右值引用理解,深入理解右值时的问题对话

深入理解右值引用变量,右值引用类型,右值对象的突出特点是临时性而非常性,广义上右值是可以修改的,但纯粹的右值是不能修改的(数字,字母等等)

2025-11-05

【算法提高篇】线段树核心机制解析:基于分治思想的高效区间操作与多场景应用

内容概要:本文系统介绍了线段树这一高效处理区间操作的树形数据结构,涵盖其基本构建、单点与区间查询、单点与区间修改(含懒标记机制)、多操作优先级处理、结合分治思想解决最大子段和问题、势能线段树(剪枝优化)、权值线段树配合离散化应用,以及与数学结合的方差和最大公约数等问题。文章通过多个经典题目实例,详细讲解了线段树在不同场景下的实现方式与核心技巧。; 适合人群:具备一定编程基础,熟悉二叉树、堆、递归与分治思想,有一定算法竞赛或刷题经验的学习者。; 使用场景及目标:①掌握线段树的基本结构与操作实现;②理解懒标记机制及其在区间修改中的关键作用;③学会将线段树应用于复杂问题如区间最值、连续段统计、数学推导等;④提升解决高频区间查询与修改类算法题的能力。; 阅读建议:学习时应结合文中提供的代码模板,动手在草稿纸上模拟建树与操作过程,深入理解每个函数(如pushup、pushdown、lazy)的设计意图,并通过大量练习巩固对不同变式的掌握,避免死记硬背。

2025-10-29

空空如也

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

TA关注的人

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