自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LangChain(四万字全网最详细攻略):彻底搞懂原理并亲手搭建 RAG 应用

本文系统介绍了大模型与LangChain框架的核心概念及应用。主要内容包括: 1. 大模型基础(介绍 + 接入方式) 2. LangChain框架 (了解 + 安装 + 上手)3.聊天模型核心能力 (调用工具、结构化输出、流式输出)4.核心组件 (消息、提示词模板、少样本提示、输出解析器、文档加载器、文本分割器、文本向量、检索器)4.实际应用

2026-03-27 09:54:38 646

原创 1.消息队列(Message Queue)笔记

消息队列是一种跨进程/跨服务的异步通信机制。它允许应用程序通过“发送消息”和“接收消息”的方式解耦彼此,实现可靠、高效的数据传递。核心思想生产者 → 队列 → 消费者生产者(Producer)负责发送消息;队列(Queue/Topic)作为中间缓冲区存储消息;消费者(Consumer)从队列中拉取消息并处理。消息队列是构建高可用、高扩展性系统的“润滑剂”。掌握其原理与实践,能让你在微服务、高并发、事件驱动架构中游刃有余。

2026-01-29 00:41:57 601

原创 Protobuf:从入门到精通的学习笔记(含 3 个项目及避坑指南)

Protocol Buffers(简称Protobuf)是Google开源的一种高效、跨语言、可扩展的结构化数据序列化格式,广泛应用于微服务通信、数据存储、RPC框架等场景。相比于JSON、XML,Protobuf具有体积更小、解析更快、兼容性更强的优势。本文将从环境配置、语法细节、实战项目到高级特性,全方位、超详细记录Protobuf的学习过程,结合3个递进式通讯录项目,帮助读者从零基础到熟练运用Protobuf。message是Protobuf中定义结构化数据的核心单元,类似C/C++的struct。

2025-12-30 16:10:01 973

原创 【算法篇】单调栈的学习

单调栈(Monotonic Stack)是一种特殊的栈结构,其内部元素始终保持或的顺序。它在算法设计中非常有用,尤其适用于解决最近。

2025-12-24 23:16:03 756

原创 今日刷题记录:两数相加 + 最近请求次数(C++ )

两数相加:锻炼链表操作与边界处理能力,尤其是进位逻辑;最近请求次数:展示了队列在滑动时间窗口问题中的天然优势。

2025-12-22 17:59:01 889

原创 Git 从入门到协作:开发者必备的版本控制指南

本文系统介绍Git在软件开发中的核心功能与应用场景。

2025-12-20 11:59:23 682

原创 2073. 买票需要的时间 和 LCR 099. 最小路径和

摘要: 买票问题:模拟循环队列处理购票过程,每次购票时间+1秒,直到目标人物完成购票。时间复杂度O(n×max(tickets)),空间O(1)。 最小路径和:动态规划解决,状态转移方程为dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]),直接修改原数组优化空间。时间复杂度O(mn),空间O(1)。 核心优化:避免DFS的指数复杂度,通过DP递推高效求解网格路径问题,边界初始化是关键。 (字数:150)

2025-12-19 13:01:07 601

原创 2500. 删除每行中的最大值 和 128.最长连续序列

文章摘要 删除每行中的最大值:题目要求每次操作删除矩阵每行的最大值并累加全局最大值。解法是对每行排序后,按列取最大值求和,时间复杂度O(mnlogn)。 最长连续序列:需在未排序数组中找到最长连续数字序列的长度。通过哈希集合O(1)查询特性,仅从序列起点扩展统计,实现O(n)复杂度。关键点跳过非起点元素避免重复计算。 两题均通过预处理(排序/哈希)优化操作,分别解决矩阵操作和序列查找问题。

2025-12-18 12:44:51 989

原创 深入理解软硬链接

硬链接不是独立的文件,没有独立的inode,硬链接本质就是一组文件名和已经存在的文件的映射关系。同理,如果我在communication文件夹下创建3个文件夹,那么communication目录就会有5个硬链接数,因为../指向上一级目录。2.硬链接,inode结构体中的count会减一,但是文件数据块不会被删除。硬链接还是可以使用。1.软链接,空有原文件的地址,找不到原文件,软链接失效。软链接有独立的inode,软链接内容上,保存的是目标文件的路径。2.硬链接,本质是多个文件名共用一个inode。

2025-02-06 22:54:43 563

原创 深入理解linux中的文件(下)

在Unix/Linux文件系统中,每个文件都有一个对应的inode,它存储了文件的元数据(如权限、所有权、大小等)以及指向文件数据块的指针。当我们获得了某个文件的inode编号(例如13425),接下来需要定位并读取该inode的具体信息来访问文件的内容和属性。每一个数据块是4KB大小,里面存放文件的内容,当然,数据块,也会存放指针。这些指针指向其他的数据块,也就是一个数据块有1KB的指针。:一旦找到了正确的inode结构体,我们就可以使用其中的信息来定位文件的数据块,进而读取文件的实际内容及其属性。

2025-02-06 22:11:30 1202

原创 深入理解linux中的文件(上)

1.前置知识:(1)文章 = 内容 + 属性(2)访问文件之前,都必须打开它(打开文件,等价于把文件加载到内存中)如果不打开文件,文件就在磁盘中(3)谁会去访问一个文件,进程。进程被加载启动之后,运行到fopen,才会打开一个文件(4)手绘的进程和文件系统之间的交互图mode。

2025-02-02 00:00:23 1079

原创 vscode远程连接linux云服务器(包含自己的输入密码一直显示不对的解决办法)

本篇内容是我自己在使用vscode远程连接云服务器中出现的问题和解决办法,希望我的这篇文章可以帮助到你!

2025-02-01 23:27:56 532

原创 实现日期类

日期类的实现,实现日期的相加减和比较两个日期的大小和差值

2024-08-17 19:40:28 492 1

原创 认识vim编辑器 (含配置vim编辑器的教程)

认识Linux下的vim编辑器

2024-07-29 20:22:37 778

原创 【C++】优先级队列与仿函数

优先级队列是什么、怎么用,以及它的模拟实现。仿函数是什么,有什么用?

2024-05-13 13:52:24 1211 1

原创 【C++】stack和queue 适配器

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作empty:判空操作back:获取尾部元素操作。

2024-05-12 21:09:12 1038 1

原创 【C++】list的使用与模拟实现

纯干货!!!本篇文章包括C++中的list的介绍,接口函数的讲解,模拟实现list !!!

2024-05-10 20:29:25 1262 1

原创 深入了解C/C++的内存区域划分

C/C++的内存区域划分:栈区,堆区,数据段(全局数据,静态数据),代码段(可执行程序,只读常量)

2024-05-06 23:08:28 1195 2

原创 电话号码的字母组合 【C++】【力扣刷题】

本题思想:多叉树,递归,回溯,遍历

2024-05-03 15:31:55 667 8

原创 深入理解vector 【C++】

本篇文章是关于vector的定义、用法和迭代器失效的问题。还请各位大佬看看,指点一下。

2024-05-03 09:57:30 1503 4

原创 求解结构体的大小(简单易懂)

你真的了解结构体吗?

2024-05-01 23:05:54 339 4

原创 【C++】深入理解string类

你真的了解string类吗?

2024-05-01 12:05:38 1594 8

原创 对6个默认成员函数的总结

六大默认成员函数:构造函数,析构函数,拷贝构造,赋值重载,取地址重载,const取地址重载

2024-04-27 16:47:24 595 2

原创 C的内存区域:栈区,堆区,代码区,静态区,常量区

其实不然,这里表示的char类型的数组会在栈区开辟5个字节的空间,然后把在常量区的字符串“abcd\0”拷贝到数组中。存放在哪里,看它定义的时候是局部变量还是全局变量,有没有static关键字,有没有malloc函数在堆区空间开辟空间,是不是常量。*pChar3指向的是常量区的字符串“abcd\0”,所以*pChar3表示字符串的首元素a,a是存放在常量 区的。选项:A、栈区 B、堆区 C、静态区 D、常量区。*ptr1,是对ptr1指针解引用,就是堆区的那一块空间。

2024-04-08 20:44:33 715 2

原创 C++ 运算符重载

大家好,本篇章节我们来学习运算符重载,希望对大家有所帮助。

2024-04-01 23:54:14 1623 16

原创 初识C++(四)深入了解拷贝构造函数

在这个代码中,由于 Time 类中没有显式定义一个无参数的默认构造函数(只定义了一个拷贝构造函数),而 Date 类的实现依赖于 Time 类的这个默认构造函数来初始化其 _t 成员,所以编译器将尝试调用 Time 类的默认构造函数时会失败,因为找不到合适的构造函数来初始化 _t。这个默认的拷贝构造函数会逐个拷贝 Date 类中的所有成员变量,包括基本类型和自定义类型的成员。Date 对象的默认构造函数调用:当 Date 类的对象被创建时,它的默认构造函数(编译器自动生成的,因为没有显式定义)会被调用。

2024-03-30 21:42:14 1647 8

原创 初识C++(三)构造函数和析构函数

默认生成的构造函数:内置类型的成员不做处理 ---- C++这里没有处理好,就会导致有数据的随机值自定义类型的成员做处理。

2024-03-25 20:44:33 1115 9

原创 指针和引用的权限

指针和引用的权限问题

2024-03-24 19:57:09 324 2

原创 初识C++(二)引用,内联函数,auto

接收的是引用的返回值的拷贝,从而避免直接持有悬空引用,但 func 函数的设计本身是有问题的,因为它返回了对局部变量的引用(局部变量已经被销毁)以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。在本例中,当TestFunc2被调用,并且以A&(结构体A的引用)作为参数时,它实际上是直接操作原有的对象a,而不是创建一个新的拷贝。

2024-03-24 18:24:47 1579 1

原创 初识C++(一)啥是C++,关键字,命名空间 ,输入输出,缺省函数

C++,一门充满可能性的经典编程语言。无论是游戏、系统还是嵌入式设备,它都扮演着重要角色。探索C++的历史和功能,挑战编程的奥秘,开启精彩的编程之旅!

2024-03-22 18:41:24 1349 12

原创 深入了解:二叉树(最详细,约10000字)

二叉树,是一种重要的数据结构,每个节点最多有两个子节点:左子节点和右子节点。这种简洁而灵活的结构,被广泛运用在算法和数据处理中。本篇文章将通过深入解释二叉树的概念和操作,你将掌握解决复杂问题的利器,拓展编程技能的边界。让我们一同探索二叉树的神秘世界,挑战数据结构的极致魅力,开启编程之旅的精彩探索!

2024-03-21 20:44:00 1459 4

原创 十大排序算法(冒泡排序、插入排序、选择排序、希尔排序、堆排序、快排、归并排序、桶排序、计数排序、基数排序)

十大排序算法(冒泡排序、插入排序、选择排序、希尔排序、堆排序、快排、归并排序、桶排序、计数排序、基数排序)十大排序的思想和代码的实现!!!

2024-03-10 19:50:01 55076 41

原创 循环队列的实现与优势

循环队列是一种常见的数据结构,通过在数组中实现循环移动的方式解决了普通队列的空间浪费问题。本文将探讨循环队列的实现原理、操作方法以及其在实际应用中的优势。

2024-03-06 18:31:29 1274

原创 快速排序(左右指针法),在写代码的时候会有陷阱

左右指针法和挖坑法大同小异,都是从右边找比key小的数,在左边找key大的数。只是不需要挖坑。我为什么还要提左右指针法呢?因为我在写这个代码的时候遇到了两个坑。

2024-02-28 19:31:44 523

原创 排序算法之快速排序(挖坑法)

挖坑法的思想:记第一个数为key,要调整key的位置,使得左边的都要比key的小,右边的数都比key的大。再从左边begin找大于28(key)的数,把那个数放在hole中,然后让hole==begin。让end找到小于28(key)的数,把那个数放到hole坑中,然后让hole==end。记录下关键字key==begin,把28那个位置挖坑hole==begin。然后arr[hole]=key;用到分治递归,就要改变函数的参数,要有left和right。再分治思想,分成左边和右边。

2024-02-27 23:11:50 655

原创 排序算法--冒泡排序

(2)3,-1,9,10,20 ----9比 -1大,所以9跟 -1交换。(1)-1,3,9,10,20 ----3比 -1大,进行交换。(3)3,-1,9,10,20 ----9跟10比较,不交换。(1)-1,3,9,10,20 ----3和-1比较,不交换。(1)-1,3,9,10,20 ----3和-1比较,不交换。(1)3,9,-1,10,20 ----3跟9比较,不交换。(1)总计需要进行(n-1)轮排序,也就是(n-1)次大循环。

2024-02-27 12:53:52 703

原创 排序算法--堆排序

用到向下调整算法,比较两个孩子的大小,选出大的孩子,与父亲比较,如果孩子大于父亲,交换。把第一个最大的数与最后一个数交换,然后把最后一个数踢出堆,继续向下调整算法,再交换次大的数。用小堆的坏处:交换之后踢出第一个数,会导致堆的错位,要重新建堆,时间复杂度O(N^2)1.堆的概念:堆一般指的是二叉堆,顾名思义,二叉堆是完全二叉树或者近似完全二。4.建堆的时间复杂度是O(N)-->(粗略的了解原理,记住结论就行)堆排序的时间复杂度是O(N*logN),优于选择排序O(N^2)2.堆的性质:①完全二叉树。

2024-02-27 10:54:30 754

原创 深入理解--指针

前面学习函数学到,函数参数可以为 int、char、float 等,但是在操作时,这些参数只作为形参,所有操作都只在函数体内有效(除对指针的操作外),那么今天来学习一下指针作为函数参数。指针运算符*(间接寻址符):与&为逆运算,作用是通过操作对象的地址,获取存储的内容。例:x = &i,x 为 i 的地址,*x 则为通过 i 的地址,获取 i 的内容。如上面,p(p + 0)指向 nums[0]、p + 1 指向 nums[1]、、、类推可得,p+i 指向 nums[i],由此可以准确操作指定位置的元素。

2024-02-21 22:00:03 1300

原创 简易版--扫雷

简易版扫雷

2024-02-18 11:58:41 510 1

原创 qsort函数---用快速排序的原理

/函数指针--指针指向的函数是用来比较数组中的两个元素。sqort函数的头文件是#include ,需要自己写一个比较函数(比较的方式)通过指针的移动来实现排序,排序的结果放到原数组中。void qsort ( void * base,//任意类型的指针,指向了要排序的数组的第一个元素。size_t num,//数组中的元素个数。比较函数的传参,要加const,因为只读,不修改*p。比较函数的内部,需要强制类型转换p1和p2的类型。要把两个元素的比较,抽离出来,变成一个比较函数。

2024-01-31 20:56:49 420 1

空空如也

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

TA关注的人

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