自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】一套代码如何同时支撑 set 和 map?哈希桶泛型封装与跨桶迭代器全解析

这篇笔记接着上一篇的哈希桶,把它改造成能同时支撑 unordered_set 和 unordered_map 的泛型结构。我按顺序讲清楚三件事:用 K、T、KeyOfT 完成泛型改造,让一套代码同时容纳 set 的 K 模型和 map 的 KV 模型;给迭代器加上哈希表指针,解决桶尾怎么跨桶前进,再用 Ptr、Ref 双参数一次搞定 const 迭代器;最后套壳封装两个容器,并用 const 从编译期管住 key。末尾还聊了自定义类型做 key 的两个坑,以及 reserve 提前扩容的实测收益。

2026-09-23 22:45:44 674 5

原创 【MySQL】类型合法的脏数据谁来拦?表约束上篇:非空、默认值、zerofill 与主键

类型对上就万事大吉了吗?远不止。这篇里我先把"为什么需要约束"讲透——类型只管格式和范围,管不了业务合法性,学号列照样能存下 QQ 号。然后逐个拆开五种表级约束:not null 与 default 各管一段,一个看守显式插入的值,一个负责省略的列,连报错文案都不同;comment 只是写给维护者看的软约束;zerofill 补零只动显示不动存储。最后是主键,为什么它隐含非空、冲突为何报 1062,以及复合主键如何把多列当一个整体来保证唯一。

2026-09-23 22:41:22 762

原创 【C++】哈希冲突怎么办?开放定址与哈希桶从原理到实现

这篇笔记聊聊 C++ 的哈希表:先从 unordered_map、unordered_set 和 map、set 的差异说起,再回答两个底层问题——值怎么映射到位置?冲突了怎么办?我带你把开放定址法(三态标记、线性探测、负载因子控制)和哈希桶拉链法(头插、扩容挪节点)各实现一遍,还有 string 做 key 的 BKDR 哈希与模板特化。跟着敲完,哈希表对你就不再是黑箱。

2026-09-21 21:14:13 906 2

原创 【MySQL】越界的数据为什么插不进去?数据类型即约束——整型/浮点/字符/日期全解析

这篇笔记把 MySQL 常用数据类型按数值、字符串、日期时间、聚合四类完整梳理了一遍,重点不在罗列语法,而是要让你体会到:类型本身就是数据库的第一道约束。整型越界报错、float 先四舍五入再查越界、char 与 varchar 的分配差异、enum 和 set 的下标与位图存储,我都配了课堂实测和对比。读完你就能按场景选出合适的类型,并且理解为什么乱插的数据永远进不了库。

2026-09-21 21:10:48 1014 1

原创 【C++】map、set 的底层是什么?红黑树五条性质、插入旋转到模拟实现

这篇笔记把 map 和 set 的底牌翻给你看:它们的底层就是红黑树。我会从五条性质讲起,重点拆解插入时的变色与旋转这套核心机制,再用实测数据对比红黑树与 AVL 树的性能,接着实现迭代器,最后用这棵树把 set 和 map 完整封装出来——让你既会用容器,也看得懂容器的内脏。

2026-09-20 23:48:21 983 1

原创 【MySQL】建库就是建目录?字符集校验规则、备份恢复与alter改表实操

这篇笔记里,我带你从"认识"跨到"上手":建库不过是在数据目录下建个同名目录,删库就是连目录一起删掉。字符集与校验规则怎样决定存储编码与比较排序,我掰开揉碎讲给你听,再顺手把 mysqldump 备份恢复也过一遍。后半程转到表,从创建查看到修改删除,对比 MyISAM 与 InnoDB 的落盘文件,看清 alter table 每一步到底动了什么。希望你读完,每写一条 SQL 都能想到它在 Linux 上对应的动作。

2026-09-20 23:41:33 709 1

原创 【MySQL】数据库到底是什么?建库就是建目录、建表就是建文件

这篇笔记想帮大家想明白一件事:数据库到底是什么。我们会先分清 mysql 客户端和 mysqld 服务端,再亲手建库建表,直观看到建库就是建目录、建表就是建文件,从而理解为什么数据不能直接塞进普通文件。随后梳理主流数据库的选择逻辑、MySQL 三层架构、SQL 三大分类与插件式存储引擎,为后续操作打好地基。

2026-09-18 23:54:26 816

原创 【C++】AVL 树如何自动保持平衡?四种旋转、平衡因子更新与完整代码实战

这篇笔记把 AVL 树最难啃的旋转一次讲透。我先回顾平衡因子和向上更新的规则,再用抽象图说清单旋的手感,以及折线形状为什么必须拆成双旋。代码部分逐行核对三叉链要维护的三份父指针,也讲了双旋里最绕的平衡因子分情况赋值。最后给出 isBalance 的验证思路,连课堂上漏写两行清零代码被调试抓出来的过程也一并分享。看完你就能写出真正平衡的 AVL 树。

2026-09-18 23:40:16 971

原创 【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解

这篇笔记攒了我实际踩过的两个 Git 坑。一个是远程分支早就删了,本地 git branch -a 却还挂着它们,用 git remote show origin 看出 stale、再 git remote prune 清理即可;另一个是两个分支压根没有共同祖先,Git 会直接拒绝合并,文中给了诊断法和 --allow-unrelated-histories 的用法,还结合本 vault 的真实案例完整走了一遍。希望同样掉坑的你,看完就能自己爬出来。

2026-09-14 13:49:12 753 4

原创 【C++】set 和 map 凭什么既高效又有序?从二叉搜索树到关联式容器实战

这片笔记我从二叉搜索树讲起,把关联式容器为什么能有序、为什么查找快讲清楚,再依次带出 set、multiset、map、multimap 的用法。重点落在 map 的 operator[]——它凭什么一句话就能统计词频。最后用四道实战题让你感受容器的降维打击,并顺手铺垫 AVL 树,为后面的红黑树与模拟实现铺路。

2026-09-14 13:30:14 1084

原创 【Git】多人协作推送总被拒绝?同分支与多分支两种协作模式全流程详解

这篇笔记我用两个可复现的场景把 Git 多人协作讲透:一是两位开发者挤在同一分支上,推送被拒、pull 出冲突、手动合并;二是每人各建 feature 分支,推送一路畅通,最后走 PR 合并到 master。我也整理了追踪连接的建立方式,以及"永远在功能分支上解决冲突"这条企业级铁律。

2026-09-13 20:25:08 897 1

原创 【C++】模板为什么不能分离编译?非类型参数、特化与 typename 一次讲透

我这篇笔记把模板进阶的四块内容一次讲完了:非类型模板参数让常量也能当参数,顺便看清了 array 为什么鸡肋;typename 在模板里为什么必不可少;特化部分,重点是用 less<Date*> 特化解决了 priority_queue 存指针排序乱的老问题;最后回答一个高频疑问——模板为什么不能分离编译,并给出最佳实践。配合上一篇模板初阶,模板语法体系到此完整,希望帮你一次打通。

2026-09-13 17:33:11 881 1

原创 【Git】代码只能存在自己电脑上?远程仓库、SSH 克隆与 push/pull 协作全流程

这篇文章我们聊聊 Git 远程操作。本地仓库玩得再熟,代码也只能躺在自己电脑里,没法协作还有丢失风险。所以我们先理清分布式的思路,再到 Gitee 创建远程仓库,走通 HTTPS 与 SSH 两种克隆方式,把 push 和 pull 这对动作讲透——代码怎么推上去、怎么拉下来。最后整理了 .gitignore 和命令别名两个实用技巧,帮你填平协作路上的坑。

2026-09-10 20:01:41 770

原创 【C++】大堆怎么变小堆?priority_queue 与仿函数从原理到模拟实现

上一篇聊完栈和队列,这篇我接着讲适配器家族的第三员 priority_queue。它本质就是堆,默认是大堆,底层却用 vector 存储。我会带你重温向上、向下调整,动手模拟实现一遍,再引出这一小节真正的重点——仿函数。看懂它,你就明白为什么只换个模板参数,大堆就能变成小堆,甚至能自定义任意比较规则。

2026-09-10 19:56:14 772

原创 【C++】还在手写栈和队列?容器适配器是什么——deque 底层如何做到头尾 O(1)

这篇笔记聊 C++ 的 stack 和 queue:它们不是容器,而是封装底层容器的"适配器",所以用起来格外简单。我们从适配器模式讲到亲手模拟实现,再深入默认底层 deque——中控数组加缓冲数组,为何头尾操作都能做到 O(1),也解释了为什么 queue 不能用 vector 适配。最后用最小栈、出入栈序列匹配、层序遍历三道经典题,带你把栈和队列真正用起来。

2026-09-03 23:57:18 1042

原创 【Git】为什么要用分支?从创建合并到冲突解决与紧急Bug修复实战

这篇文章用武侠村「本尊与分身」的故事帮你建立直觉:分支其实只是指向提交的指针,创建、切换、合并是它的全部核心操作。文中从创建分支讲起,一步步演示提交、快进合并与冲突解决,也讲清了 master 为何必须稳定、团队协作时分支如何各司其职。最实用的要数开发到一半遇到线上紧急 Bug 的场景——如何用 git stash 保存现场、修完 Bug 再无缝恢复,以及"两步合并法"这类少有人讲的实战经验。读完你就能像老手一样安全地玩转分支。

2026-09-03 23:43:00 934

原创 【C++】为什么 list 插入删除都是 O(1),排序却比 vector 慢 5 倍?从原理到模拟实现

这篇文章带你彻底吃透 STL 的 list 容器:从带头结点的双向循环链表结构讲起,对比它与 vector 在随机访问、插入删除、内存布局上的根本差异,再逐一拆解 sort、splice、merge 等独有操作,并附上实测数据——list 排序比 vector 慢 5 倍,最优策略是转 vector 排序再转回。最后手写模拟实现,把迭代器设计、深浅拷贝这些面试硬核全部讲明白。

2026-08-27 23:50:31 990

原创 【C++】vector 凭什么能动态扩容?从三指针源码到迭代器失效全解析

这篇笔记带你把 vector 彻底弄明白:先像用 string 一样学会构造、遍历和容量管理,再钻到 SGI 源码里看三指针设计和定位 new 的奥秘。扩容为什么是 2 倍、迭代器为什么会失效、手写 mini vector 会踩哪些坑,都讲得清清楚楚。看完你就能理解"连续存储"背后的设计哲学,也为学 list、deque 打下基础。

2026-08-26 13:26:30 848

原创 10.C++ string 实现详解

这篇文章带着你手写一个 string 类,把标准库背后的故事讲明白:成员怎么设计、扩容怎么翻倍、插入删除时数据怎么挪、深浅拷贝为什么必须做,再到 swap 优化、写时拷贝 COW 这些进阶技巧,顺带踩遍无符号越界的坑。读完你就能从"会用"进阶到"懂底层",面试也不慌。

2026-08-24 23:49:42 1141

原创 【daily practice】最长数字串怎么找?岛屿数量如何沉岛秒数?六棍拼两三角形有几种验法?(5.字符串中找出连续最长的数字串、岛屿数量、拼三角)

这篇文章整理了三道笔试常考题。第一道用双指针扫描字符串,找出连续最长的数字串,还要留意没有数字时的边界情况;第二道岛屿数量走 FloodFill 思路,BFS 或 DFS 把相连的陆地"沉岛"即可计数;第三道拼三角,六根棍子枚举 20 种分组足够,排序后还能归纳成 4 种固定模式。每道题都附完整代码和复杂度分析,笔试前翻一翻很划算。

2026-08-23 22:48:06 636

原创 【daily practice】字母怎么拼得分最高?腐烂苹果几分钟传遍网格?约瑟夫环为何一行递推?(4.游游的you、腐烂的苹果、孩子们的游戏)

这篇文章整理了三道笔试常考算法题。游游的 you 是道贪心题,先组高分 "you" 再组 "oo",注意别用循环硬凑,直接 min 一步到位;腐烂的苹果是经典多源 BFS,所有坏苹果同时扩散,层数就是分钟数;孩子们的游戏是约瑟夫环,递推公式 f(n)=(f(n-1)+m)%n 一个循环求出幸存者。每道题都附完整代码和易错点,笔试前翻一翻很划算。

2026-08-23 22:43:36 212

原创 【daily practice】离最近的斐波那契数有几步?单词搜索为何必须回溯?杨辉三角怎么滚动省空间?(3.Fibonacci数列、单词搜索、杨辉三角)

这篇文章整理了三道笔试高频算法题。Fibonacci 数列用递推生成后再找最近邻,一步算出最少步数;单词搜索分享了踩坑经历——BFS 加共享标记会误判路径,正解是 DFS 回溯,进入标记、退出撤销;杨辉三角则用滚动数组和一维倒序更新,把空间压到 O(n)。每道题都附完整代码和易错点,笔试前翻一翻很划算。

2026-08-23 22:37:08 271

原创 14.输出解析器-Pydantic与JSON

这篇笔记带你把 LangChain 的输出解析器彻底搞明白:为什么模型吐出的一大段文字能变成程序直接可用的数据?我们会对比输出解析器与 with_structured_output 两条路线,手把手演示 PydanticOutputParser 和 JsonOutputParser 的用法与原理,讲清它们各自适合什么场景,最后给出选型建议和一份可直接运行的完整代码

2026-08-23 22:33:08 370

原创 【daily practice】最短达标子数组怎么找?滑动窗口+堆贪心实战三连

这篇笔记整理了牛客笔试强训的三道题:第一道把句子中每个单词的首字母转大写后拼接,练的是边界模拟;第二道找和大于等于目标值的最短子数组,标准滑动窗口写法之外,文中还给出了 O(n) 的双指针优化版;第三道用大根堆贪心,每次把当前最大的偶数减半,让数组总和尽量小。每道题都附了完整代码、复杂度分析和易错点提醒,适合刷题时对照复习。

2026-08-22 13:28:58 228

原创 【LangChain】少样本示例太多塞不进上下文怎么办?四种示例选择器帮你挑重点(13.示例选择器)

这篇文章带你认识 LangChain 的示例选择器:当少样本提示的示例太多、塞不进上下文窗口时,它负责帮你挑出最合适的几个。文章用反义词例子讲透了四种策略——按长度控制 token、按语义相似性匹配语境、MMR 兼顾相关与多样、NGram 做词面查重,还附了对比表和完整代码,照着就能用。

2026-08-22 13:19:33 709

原创 【daily practice】三道经典题一次讲透:快递费模拟、爬楼梯 DP、字符串最小距离

文章摘要 1. 牛牛的快递 问题:计算快递费用,1kg内20元,超1kg部分按1元/kg向上取整,加急额外5元 解法:模拟计算,关键点在于超出部分用ceil或整数运算实现向上取整 核心代码:if (w > 1) res += (int)ceil(w - 1); 复杂度:O(1)时间/空间 2. 最小花费爬楼梯 问题:数组cost表示台阶费用,每次可跨1/2步,求到顶端的最小花费 解法:动态规划,状态转移dp[i] = cost[i] + min(dp[i-1], dp[i-2]) 优化:用三个变量滚动更新,

2026-08-21 22:45:22 374

原创 【Git】改错代码怎么办?一文讲透查看、回退、撤销与删除的“后悔药“全套

这篇接着上一篇,讲代码存进 Git 之后的事:如何查看改动、回退版本、撤销错误、删除文件。你会用 git status 和 git diff 看清改了什么,用 git reflog 和 git reset 回退版本,再按"修改走到哪一步"拆解三种撤销场景,最后聊聊删除文件的两种方式。全文对照工作区、暂存区、版本库三个区域来讲,跟着敲一遍,改错代码就不慌了。

2026-08-21 21:45:16 570

原创 【LangChain】提示词模板怎么搭?少样本提示如何让模型照例学习、稳定输出(12.提示词模板与少样本提示)

这篇文章把 LangChain 里"怎么和模型好好说话"做成了可复用的代码:提示词模板负责搭骨架——PromptTemplate 管纯文本、ChatPromptTemplate 管带角色的聊天消息、MessagesPlaceholder 用来插入历史对话,三者都能直接和模型拼成链,还能从 LangChain Hub 拉取社区模板、用 prompt-maker 自动优化提示词;少样本提示负责给示范——分聊天版与文本版,各有各的适用场景和设计巧思,并延伸到 Chain-of-Thought 多步推理引导,最后用

2026-08-20 12:05:11 608

原创 【Git】文件是怎么“存“进仓库的?add、commit 与 .git 内部对象全解析(2.Git基本操作(上):仓库与配置)

这篇文章写给刚开始学 Git 的你:从新仓库里的第一件事——配置用户名和邮箱讲起,帮你理清局部、全局、系统三个配置级别;然后带你认识工作区、暂存区、版本库这三个核心概念,理解为什么提交必须"先 add 再 commit",以及忘 add 的文件为什么提交不进去;最后打开 .git 这个黑盒子,看看 blob、tree、commit 三种对象是怎么用 SHA-1 哈希把每次提交串成一条历史链的。跟着敲一遍,你就能真正看懂 Git 的存储逻辑。

2026-08-20 11:39:06 703

原创 【LangChain】模型为什么记不住上次对话?从消息类型封装到上下文裁剪与过滤合并全解析

这篇文章带你把 LangChain 的消息体系从头到尾捋了一遍。你会发现,模型本身没有记忆,每次对话都是独立请求,所谓"记得你",不过是把历史消息一起打包发给模型而已。文章从消息类型讲起——SystemMessage、HumanMessage、AIMessage 背后对应原生模型的哪些角色,再到 BaseMessage 抽象类的属性与方法;接着用 RunnableWithMessageHistory 演示多轮对话的自动记忆,也提醒你 v0.3 之后官方已转向 LangGraph 方案。

2026-08-17 22:26:34 6101

原创 【Python】for 和 while 到底怎么选?循环三要素到 break/continue 实战全解析

这篇笔记把 Python 的循环结构讲得明明白白。文章从条件语句的小补充切入——正负数、闰年判定,还有那个容易被忽略的 pass 占位符,然后正式进入循环的世界。while 循环部分讲清了"初始值、判定条件、更新语句"这三大要素,还专门聊了聊死循环:忘了更新变量就是 bug,但服务器 7×24 小时待命反而需要它。接着是更简洁的 for 循环,配合 range 函数和它的前闭后开规则,求和、阶乘、嵌套循环这些经典例子一个不少。

2026-08-17 22:22:38 260

原创 【LangChain】为什么 AI 回复是一个字一个字蹦出来的?从 stream() 到 SSE 协议的拆解

这篇文章写给所有被"AI 打字慢"困扰过的开发者。全文围绕一个核心问题展开:为什么我们调用大模型时,回复总是像打字一样一个字一个字蹦出来?从最直观的体验差异说起——invoke() 要等模型把整篇内容生成完才一次性返回,而 stream() 则是边生成边推送,每一 token 落地即刻可见。

2026-08-11 15:33:27 358

原创 【Langchain】8.聊天模型-结构化输出

各位读者,这次我想和大家聊聊 LangChain 里一个非常实用的话题——怎么让聊天模型乖乖地把话说成你想要的结构。平时我们用大模型聊天,它总是回你一大段自然语言,读起来舒服,但程序拿去解析可就头疼了。这篇笔记讲的就是 with_structured_output() 这个方法,它能让你像定制表格一样,提前告诉模型"你该返回什么字段、什么类型",然后模型就会交出一份可以直接反序列化成对象或字典的规整数据。

2026-08-05 11:17:38 5631

原创 【LangChain】7.聊天模型-搜索工具与内置工具

这篇笔记带你走了一遍 LangChain 中聊天模型如何与搜索工具配合使用的完整流程。我们从 LangChain 的内置工具生态讲起,介绍了 BaseTool 和 BaseToolkit 这两个基类的设计思路,然后以 TavilySearch 这个专为 AI 智能体打造的搜索引擎作为实战案例,一步步演示了从申请 API Key、在 Playground 里测试效果,到用 Python 代码集成到聊天模型中的全过程。你会发现,内置工具的使用方式和之前学的 @tool 自定义工具完全一致,依然是那套成熟的工具调

2026-07-29 21:08:39 243

原创 【LangChain】6.聊天模型-工具调用

LangChain 工具调用的完整机制:`@tool` 三种定义模式、`StructuredTool.from_function()` 灵活配置、`bind_tools()` 绑定模型与 `tool_choice` 调用策略,以及模型选择工具→代码执行→生成最终回答的完整流程,体现了"模型只思考不执行"的核心原则。

2026-07-28 23:17:05 346

原创 【C++】C++ STL string 详解

本文详细介绍了C++ STL中的string类及其底层实现。主要内容包括:1) STL的六大组件(容器、算法、迭代器等)及其关系;2) string类的本质是字符数组,相比C字符串具有自动扩容等优势;3) string的历史渊源,它早于STL出现且接口设计存在冗余;4) string实际上是basic_string<char>的别名,支持不同字符编码类型;5) 深入解析ASCII、Unicode(UTF-8/16/32)和GBK等编码方案的区别,以及UTF-8兼容ASCII的特性。文章还比较了Windows

2026-07-27 23:33:58 415

原创 【LangChain】4.快速上手-编码 + 5.聊天模型定义

U表示升级到最新版本,首次安装可不带此选项。ChatOpenAI会从环境变量自动读取密钥。api_key="your-api-key-here" # 不推荐硬编码远程调用通过 API Key 调用 OpenAI 模型属于远程调用,模型在 OpenAI 服务器上运行,非本地部署。消息类型角色说明系统提示通常作为输入消息序列的第一条,用于设定 AI 的行为和任务用户消息来自用户的输入,传递给模型进行处理AIMessageAI 回复模型返回的响应消息"),

2026-07-09 22:54:48 757

原创 【Python】4.Python流程控制

摘要: Python流程控制的核心概念包括顺序执行和条件判断。关键特点有: 缩进规则 - Python使用4空格缩进替代大括号划分代码块,缩进错误会导致语法问题 条件语句 - 支持if/elif/else结构,其中elif是else if的缩写,实现多分支判断 语法对比 - 相比C/Java,Python条件语句省略括号但需要冒号,代码块完全依赖缩进 嵌套结构 - 支持多层缩进嵌套,但应避免过度嵌套影响可读性 输入处理 - 注意input()返回字符串需类型转换,并要考虑非法输入的情况 典型应用场景包括奇偶

2026-07-09 22:52:51 297 1

原创 【LangChain】3.LLM接入、嵌入模型与LangChain框架

原生 LLM 的问题LangChain 的解决方案上下文长度有限支持外部知识库(RAG)缺乏私有/实时知识RAG 注入内部知识 + 工具调用知识有截止日期工具调用(搜索引擎等)复杂任务处理困难LangGraph 图式工作流输出格式不可控内置结构化输出支持模型切换不灵活统一封装接口提示词不统一提示词模板组件LangChain 正是为解决上述问题而生,它将底层大模型接入封装成标准组件,让开发者专注于业务逻辑而非底层细节。

2026-07-08 23:00:30 548 1

原创 【Python】3.Python运算符与输入输出进阶

本文介绍了Python中运算符和输入输出的进阶知识,主要内容包括: 输入函数input()的特性: 阻塞等待用户输入 返回值始终为字符串类型 需要进行类型转换才能用于数值运算 算术运算符详解: 基本运算符(+ - * / // % **) 整数除法结果为浮点数(不截断) 地板除//和取模%的特殊处理 除零异常的统一处理 关系运算符: 六种比较运算符及其布尔返回值 字符串的字典序比较规则 浮点数比较的epsilon方法 逻辑运算符: 使用英文单词and/or/not 支持短路求值特性 与大多数编程语言的差异

2026-07-08 22:39:36 462

STM32嵌入式系统课件

STM32嵌入式系统课件

2025-05-25

STM32F4标准外设库1.9.0

用于STM32F4开发的标准库,由于ST官网针对某些地区的账号不允许下载资源,这里存个备份,方便使用

2025-03-07

空空如也

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

TA关注的人

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