- 博客(147)
- 收藏
- 关注
原创 【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解
这篇笔记攒了我实际踩过的两个 Git 坑。一个是远程分支早就删了,本地 git branch -a 却还挂着它们,用 git remote show origin 看出 stale、再 git remote prune 清理即可;另一个是两个分支压根没有共同祖先,Git 会直接拒绝合并,文中给了诊断法和 --allow-unrelated-histories 的用法,还结合本 vault 的真实案例完整走了一遍。希望同样掉坑的你,看完就能自己爬出来。
2026-09-14 13:49:12
150
原创 【C++】set 和 map 凭什么既高效又有序?从二叉搜索树到关联式容器实战
这片笔记我从二叉搜索树讲起,把关联式容器为什么能有序、为什么查找快讲清楚,再依次带出 set、multiset、map、multimap 的用法。重点落在 map 的 operator[]——它凭什么一句话就能统计词频。最后用四道实战题让你感受容器的降维打击,并顺手铺垫 AVL 树,为后面的红黑树与模拟实现铺路。
2026-09-14 13:30:14
334
原创 【Git】多人协作推送总被拒绝?同分支与多分支两种协作模式全流程详解
这篇笔记我用两个可复现的场景把 Git 多人协作讲透:一是两位开发者挤在同一分支上,推送被拒、pull 出冲突、手动合并;二是每人各建 feature 分支,推送一路畅通,最后走 PR 合并到 master。我也整理了追踪连接的建立方式,以及"永远在功能分支上解决冲突"这条企业级铁律。
2026-09-13 20:25:08
304
1
原创 【C++】模板为什么不能分离编译?非类型参数、特化与 typename 一次讲透
我这篇笔记把模板进阶的四块内容一次讲完了:非类型模板参数让常量也能当参数,顺便看清了 array 为什么鸡肋;typename 在模板里为什么必不可少;特化部分,重点是用 less<Date*> 特化解决了 priority_queue 存指针排序乱的老问题;最后回答一个高频疑问——模板为什么不能分离编译,并给出最佳实践。配合上一篇模板初阶,模板语法体系到此完整,希望帮你一次打通。
2026-09-13 17:33:11
297
1
原创 【Git】代码只能存在自己电脑上?远程仓库、SSH 克隆与 push/pull 协作全流程
这篇文章我们聊聊 Git 远程操作。本地仓库玩得再熟,代码也只能躺在自己电脑里,没法协作还有丢失风险。所以我们先理清分布式的思路,再到 Gitee 创建远程仓库,走通 HTTPS 与 SSH 两种克隆方式,把 push 和 pull 这对动作讲透——代码怎么推上去、怎么拉下来。最后整理了 .gitignore 和命令别名两个实用技巧,帮你填平协作路上的坑。
2026-09-10 20:01:41
200
原创 【C++】大堆怎么变小堆?priority_queue 与仿函数从原理到模拟实现
上一篇聊完栈和队列,这篇我接着讲适配器家族的第三员 priority_queue。它本质就是堆,默认是大堆,底层却用 vector 存储。我会带你重温向上、向下调整,动手模拟实现一遍,再引出这一小节真正的重点——仿函数。看懂它,你就明白为什么只换个模板参数,大堆就能变成小堆,甚至能自定义任意比较规则。
2026-09-10 19:56:14
222
原创 【C++】还在手写栈和队列?容器适配器是什么——deque 底层如何做到头尾 O(1)
这篇笔记聊 C++ 的 stack 和 queue:它们不是容器,而是封装底层容器的"适配器",所以用起来格外简单。我们从适配器模式讲到亲手模拟实现,再深入默认底层 deque——中控数组加缓冲数组,为何头尾操作都能做到 O(1),也解释了为什么 queue 不能用 vector 适配。最后用最小栈、出入栈序列匹配、层序遍历三道经典题,带你把栈和队列真正用起来。
2026-09-03 23:57:18
499
原创 【Git】为什么要用分支?从创建合并到冲突解决与紧急Bug修复实战
这篇文章用武侠村「本尊与分身」的故事帮你建立直觉:分支其实只是指向提交的指针,创建、切换、合并是它的全部核心操作。文中从创建分支讲起,一步步演示提交、快进合并与冲突解决,也讲清了 master 为何必须稳定、团队协作时分支如何各司其职。最实用的要数开发到一半遇到线上紧急 Bug 的场景——如何用 git stash 保存现场、修完 Bug 再无缝恢复,以及"两步合并法"这类少有人讲的实战经验。读完你就能像老手一样安全地玩转分支。
2026-09-03 23:43:00
336
原创 【C++】为什么 list 插入删除都是 O(1),排序却比 vector 慢 5 倍?从原理到模拟实现
这篇文章带你彻底吃透 STL 的 list 容器:从带头结点的双向循环链表结构讲起,对比它与 vector 在随机访问、插入删除、内存布局上的根本差异,再逐一拆解 sort、splice、merge 等独有操作,并附上实测数据——list 排序比 vector 慢 5 倍,最优策略是转 vector 排序再转回。最后手写模拟实现,把迭代器设计、深浅拷贝这些面试硬核全部讲明白。
2026-08-27 23:50:31
430
原创 【C++】vector 凭什么能动态扩容?从三指针源码到迭代器失效全解析
这篇笔记带你把 vector 彻底弄明白:先像用 string 一样学会构造、遍历和容量管理,再钻到 SGI 源码里看三指针设计和定位 new 的奥秘。扩容为什么是 2 倍、迭代器为什么会失效、手写 mini vector 会踩哪些坑,都讲得清清楚楚。看完你就能理解"连续存储"背后的设计哲学,也为学 list、deque 打下基础。
2026-08-26 13:26:30
294
原创 10.C++ string 实现详解
这篇文章带着你手写一个 string 类,把标准库背后的故事讲明白:成员怎么设计、扩容怎么翻倍、插入删除时数据怎么挪、深浅拷贝为什么必须做,再到 swap 优化、写时拷贝 COW 这些进阶技巧,顺带踩遍无符号越界的坑。读完你就能从"会用"进阶到"懂底层",面试也不慌。
2026-08-24 23:49:42
582
原创 【daily practice】最长数字串怎么找?岛屿数量如何沉岛秒数?六棍拼两三角形有几种验法?(5.字符串中找出连续最长的数字串、岛屿数量、拼三角)
这篇文章整理了三道笔试常考题。第一道用双指针扫描字符串,找出连续最长的数字串,还要留意没有数字时的边界情况;第二道岛屿数量走 FloodFill 思路,BFS 或 DFS 把相连的陆地"沉岛"即可计数;第三道拼三角,六根棍子枚举 20 种分组足够,排序后还能归纳成 4 种固定模式。每道题都附完整代码和复杂度分析,笔试前翻一翻很划算。
2026-08-23 22:48:06
183
原创 【daily practice】字母怎么拼得分最高?腐烂苹果几分钟传遍网格?约瑟夫环为何一行递推?(4.游游的you、腐烂的苹果、孩子们的游戏)
这篇文章整理了三道笔试常考算法题。游游的 you 是道贪心题,先组高分 "you" 再组 "oo",注意别用循环硬凑,直接 min 一步到位;腐烂的苹果是经典多源 BFS,所有坏苹果同时扩散,层数就是分钟数;孩子们的游戏是约瑟夫环,递推公式 f(n)=(f(n-1)+m)%n 一个循环求出幸存者。每道题都附完整代码和易错点,笔试前翻一翻很划算。
2026-08-23 22:43:36
172
原创 【daily practice】离最近的斐波那契数有几步?单词搜索为何必须回溯?杨辉三角怎么滚动省空间?(3.Fibonacci数列、单词搜索、杨辉三角)
这篇文章整理了三道笔试高频算法题。Fibonacci 数列用递推生成后再找最近邻,一步算出最少步数;单词搜索分享了踩坑经历——BFS 加共享标记会误判路径,正解是 DFS 回溯,进入标记、退出撤销;杨辉三角则用滚动数组和一维倒序更新,把空间压到 O(n)。每道题都附完整代码和易错点,笔试前翻一翻很划算。
2026-08-23 22:37:08
210
原创 14.输出解析器-Pydantic与JSON
这篇笔记带你把 LangChain 的输出解析器彻底搞明白:为什么模型吐出的一大段文字能变成程序直接可用的数据?我们会对比输出解析器与 with_structured_output 两条路线,手把手演示 PydanticOutputParser 和 JsonOutputParser 的用法与原理,讲清它们各自适合什么场景,最后给出选型建议和一份可直接运行的完整代码
2026-08-23 22:33:08
364
原创 【daily practice】最短达标子数组怎么找?滑动窗口+堆贪心实战三连
这篇笔记整理了牛客笔试强训的三道题:第一道把句子中每个单词的首字母转大写后拼接,练的是边界模拟;第二道找和大于等于目标值的最短子数组,标准滑动窗口写法之外,文中还给出了 O(n) 的双指针优化版;第三道用大根堆贪心,每次把当前最大的偶数减半,让数组总和尽量小。每道题都附了完整代码、复杂度分析和易错点提醒,适合刷题时对照复习。
2026-08-22 13:28:58
223
原创 【LangChain】少样本示例太多塞不进上下文怎么办?四种示例选择器帮你挑重点(13.示例选择器)
这篇文章带你认识 LangChain 的示例选择器:当少样本提示的示例太多、塞不进上下文窗口时,它负责帮你挑出最合适的几个。文章用反义词例子讲透了四种策略——按长度控制 token、按语义相似性匹配语境、MMR 兼顾相关与多样、NGram 做词面查重,还附了对比表和完整代码,照着就能用。
2026-08-22 13:19:33
706
原创 【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
364
原创 【Git】改错代码怎么办?一文讲透查看、回退、撤销与删除的“后悔药“全套
这篇接着上一篇,讲代码存进 Git 之后的事:如何查看改动、回退版本、撤销错误、删除文件。你会用 git status 和 git diff 看清改了什么,用 git reflog 和 git reset 回退版本,再按"修改走到哪一步"拆解三种撤销场景,最后聊聊删除文件的两种方式。全文对照工作区、暂存区、版本库三个区域来讲,跟着敲一遍,改错代码就不慌了。
2026-08-21 21:45:16
558
原创 【LangChain】提示词模板怎么搭?少样本提示如何让模型照例学习、稳定输出(12.提示词模板与少样本提示)
这篇文章把 LangChain 里"怎么和模型好好说话"做成了可复用的代码:提示词模板负责搭骨架——PromptTemplate 管纯文本、ChatPromptTemplate 管带角色的聊天消息、MessagesPlaceholder 用来插入历史对话,三者都能直接和模型拼成链,还能从 LangChain Hub 拉取社区模板、用 prompt-maker 自动优化提示词;少样本提示负责给示范——分聊天版与文本版,各有各的适用场景和设计巧思,并延伸到 Chain-of-Thought 多步推理引导,最后用
2026-08-20 12:05:11
595
原创 【Git】文件是怎么“存“进仓库的?add、commit 与 .git 内部对象全解析(2.Git基本操作(上):仓库与配置)
这篇文章写给刚开始学 Git 的你:从新仓库里的第一件事——配置用户名和邮箱讲起,帮你理清局部、全局、系统三个配置级别;然后带你认识工作区、暂存区、版本库这三个核心概念,理解为什么提交必须"先 add 再 commit",以及忘 add 的文件为什么提交不进去;最后打开 .git 这个黑盒子,看看 blob、tree、commit 三种对象是怎么用 SHA-1 哈希把每次提交串成一条历史链的。跟着敲一遍,你就能真正看懂 Git 的存储逻辑。
2026-08-20 11:39:06
653
原创 【LangChain】模型为什么记不住上次对话?从消息类型封装到上下文裁剪与过滤合并全解析
这篇文章带你把 LangChain 的消息体系从头到尾捋了一遍。你会发现,模型本身没有记忆,每次对话都是独立请求,所谓"记得你",不过是把历史消息一起打包发给模型而已。文章从消息类型讲起——SystemMessage、HumanMessage、AIMessage 背后对应原生模型的哪些角色,再到 BaseMessage 抽象类的属性与方法;接着用 RunnableWithMessageHistory 演示多轮对话的自动记忆,也提醒你 v0.3 之后官方已转向 LangGraph 方案。
2026-08-17 22:26:34
6083
原创 【Python】for 和 while 到底怎么选?循环三要素到 break/continue 实战全解析
这篇笔记把 Python 的循环结构讲得明明白白。文章从条件语句的小补充切入——正负数、闰年判定,还有那个容易被忽略的 pass 占位符,然后正式进入循环的世界。while 循环部分讲清了"初始值、判定条件、更新语句"这三大要素,还专门聊了聊死循环:忘了更新变量就是 bug,但服务器 7×24 小时待命反而需要它。接着是更简洁的 for 循环,配合 range 函数和它的前闭后开规则,求和、阶乘、嵌套循环这些经典例子一个不少。
2026-08-17 22:22:38
246
原创 【LangChain】为什么 AI 回复是一个字一个字蹦出来的?从 stream() 到 SSE 协议的拆解
这篇文章写给所有被"AI 打字慢"困扰过的开发者。全文围绕一个核心问题展开:为什么我们调用大模型时,回复总是像打字一样一个字一个字蹦出来?从最直观的体验差异说起——invoke() 要等模型把整篇内容生成完才一次性返回,而 stream() 则是边生成边推送,每一 token 落地即刻可见。
2026-08-11 15:33:27
353
原创 【Langchain】8.聊天模型-结构化输出
各位读者,这次我想和大家聊聊 LangChain 里一个非常实用的话题——怎么让聊天模型乖乖地把话说成你想要的结构。平时我们用大模型聊天,它总是回你一大段自然语言,读起来舒服,但程序拿去解析可就头疼了。这篇笔记讲的就是 with_structured_output() 这个方法,它能让你像定制表格一样,提前告诉模型"你该返回什么字段、什么类型",然后模型就会交出一份可以直接反序列化成对象或字典的规整数据。
2026-08-05 11:17:38
5614
原创 【LangChain】7.聊天模型-搜索工具与内置工具
这篇笔记带你走了一遍 LangChain 中聊天模型如何与搜索工具配合使用的完整流程。我们从 LangChain 的内置工具生态讲起,介绍了 BaseTool 和 BaseToolkit 这两个基类的设计思路,然后以 TavilySearch 这个专为 AI 智能体打造的搜索引擎作为实战案例,一步步演示了从申请 API Key、在 Playground 里测试效果,到用 Python 代码集成到聊天模型中的全过程。你会发现,内置工具的使用方式和之前学的 @tool 自定义工具完全一致,依然是那套成熟的工具调
2026-07-29 21:08:39
240
原创 【LangChain】6.聊天模型-工具调用
LangChain 工具调用的完整机制:`@tool` 三种定义模式、`StructuredTool.from_function()` 灵活配置、`bind_tools()` 绑定模型与 `tool_choice` 调用策略,以及模型选择工具→代码执行→生成最终回答的完整流程,体现了"模型只思考不执行"的核心原则。
2026-07-28 23:17:05
338
原创 【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
395
原创 【LangChain】4.快速上手-编码 + 5.聊天模型定义
U表示升级到最新版本,首次安装可不带此选项。ChatOpenAI会从环境变量自动读取密钥。api_key="your-api-key-here" # 不推荐硬编码远程调用通过 API Key 调用 OpenAI 模型属于远程调用,模型在 OpenAI 服务器上运行,非本地部署。消息类型角色说明系统提示通常作为输入消息序列的第一条,用于设定 AI 的行为和任务用户消息来自用户的输入,传递给模型进行处理AIMessageAI 回复模型返回的响应消息"),
2026-07-09 22:54:48
735
原创 【Python】4.Python流程控制
摘要: Python流程控制的核心概念包括顺序执行和条件判断。关键特点有: 缩进规则 - Python使用4空格缩进替代大括号划分代码块,缩进错误会导致语法问题 条件语句 - 支持if/elif/else结构,其中elif是else if的缩写,实现多分支判断 语法对比 - 相比C/Java,Python条件语句省略括号但需要冒号,代码块完全依赖缩进 嵌套结构 - 支持多层缩进嵌套,但应避免过度嵌套影响可读性 输入处理 - 注意input()返回字符串需类型转换,并要考虑非法输入的情况 典型应用场景包括奇偶
2026-07-09 22:52:51
269
原创 【LangChain】3.LLM接入、嵌入模型与LangChain框架
原生 LLM 的问题LangChain 的解决方案上下文长度有限支持外部知识库(RAG)缺乏私有/实时知识RAG 注入内部知识 + 工具调用知识有截止日期工具调用(搜索引擎等)复杂任务处理困难LangGraph 图式工作流输出格式不可控内置结构化输出支持模型切换不灵活统一封装接口提示词不统一提示词模板组件LangChain 正是为解决上述问题而生,它将底层大模型接入封装成标准组件,让开发者专注于业务逻辑而非底层细节。
2026-07-08 23:00:30
532
1
原创 【Python】3.Python运算符与输入输出进阶
本文介绍了Python中运算符和输入输出的进阶知识,主要内容包括: 输入函数input()的特性: 阻塞等待用户输入 返回值始终为字符串类型 需要进行类型转换才能用于数值运算 算术运算符详解: 基本运算符(+ - * / // % **) 整数除法结果为浮点数(不截断) 地板除//和取模%的特殊处理 除零异常的统一处理 关系运算符: 六种比较运算符及其布尔返回值 字符串的字典序比较规则 浮点数比较的epsilon方法 逻辑运算符: 使用英文单词and/or/not 支持短路求值特性 与大多数编程语言的差异
2026-07-08 22:39:36
455
原创 【LangChain】2.提示词工程
本文系统介绍了提示词工程的核心方法与技巧。首先强调提示词编写的核心原则是换位思考,确保清晰、具体、无歧义。重点讲解了COSTA结构化框架,包含背景、目标、步骤、语气、受众和格式六个维度。其次介绍了少样本提示技巧,通过示例让AI模仿学习。然后深入解析思维链(CoT)技术,包括少样本和零样本两种实现方式,以及自我批判的迭代优化方法。最后总结了提示词技巧在不同编程语言和企业项目中的应用要点,强调结构化思维和分步验证的重要性。
2026-07-07 23:30:00
235
原创 【Python】2.Python基础语法
这篇文章介绍了Python编程语言的基础语法知识,主要内容包括: 表达式与运算符:解释了表达式、运算符优先级(先乘除后加减)、代码规范(运算符两侧加空格)等基础概念。 变量:说明了变量的本质(内存存储空间)、定义与赋值操作、变量命名规则(硬性规则和软性规范),以及变量的读取与修改。 数据类型: 整数(int):支持任意大整数 浮点数(float):双精度,存在精度误差 字符串(str):多种引号用法和字符串操作 布尔类型(bool):True/False两个值 动态类型特性:Python是动态类型语言,变量
2026-07-07 19:05:53
470
原创 【LangChain】1.LLM基础认知
是一个 AI 编程框架,是连接 AI 模型与实际应用的重要桥梁:左岸(AI 模型如 DeepSeek/ChatGPT)→ 桥(LangChain)→ 右岸(实际应用如智能客服/代码助手)。原生 API 调用的痛点在于需要手动构建 HTTP 请求、处理鉴权信息、解析响应结果,且缺乏统一抽象层。LangChain 的优势是封装原生接口,提供统一编程接口,集成数据库、搜索引擎等外部工具。从宏观视角看,大模型像一个——阅读并学会了互联网上的几乎所有知识,具备(处理多种问题)和(深度思考)。
2026-07-06 16:00:00
356
原创 【Python】1.Python环境搭建
本文详细介绍了如何搭建Python开发环境,包含两个核心组件: Python解释器 - 用于执行代码,安装时需勾选"Add to PATH" PyCharm IDE - 推荐使用免费的社区版 安装步骤包括下载安装包、配置环境变量,并指导如何创建第一个Python项目、编写和运行"hello.py"程序。文章还提供了PyCharm的基础设置建议,如调整字体大小和设置背景图。最后强调解释器是运行核心,PyCharm是辅助工具,两者缺一不可。适合Python初学者快速搭建开发环境。
2026-07-06 15:00:00
209
原创 轻量级可扩展日志框架-异步日志与系统集成
异步日志系统设计摘要 本异步日志系统采用C++实现,核心设计为双缓冲区的生产者-消费者模型,有效解决同步日志的性能瓶颈问题。系统包含三个关键组件: 缓冲区设计:基于vector实现动态扩容的环形缓冲区,支持变长日志存储,通过读写指针管理数据存取,提供线程安全的交换机制。 异步工作器:采用双缓冲区策略(生产/消费缓冲区),通过互斥锁和条件变量实现线程同步。业务线程仅需将日志推入生产缓冲区,专用工作线程负责消费缓冲区的实际写入操作。 性能优化:通过避免直接I/O操作减少业务线程阻塞,缓冲区动态扩容(阈值10MB
2026-07-04 21:30:00
444
原创 轻量级可扩展日志框架-日志落地与日志器模块实现
文章摘要 本文介绍了一个C++日志系统的设计与实现,重点讲解了日志落地模块的开发。该系统采用模块化分层架构,支持同步和异步双模式日志记录。日志落地模块实现了三种输出方式:标准输出、指定文件和滚动文件(按大小分割),通过工厂模式管理不同输出方式的创建。核心设计包括抽象基类定义统一接口、派生类实现具体功能、以及基于文件大小触发的滚动文件策略。该系统还应用了多种设计模式(单例/工厂/代理/建造者)和C++11特性,代码可直接在Linux环境下编译测试,具有良好的扩展性和实用性。
2026-07-04 20:30:00
268
原创 轻量级可扩展日志框架-基础工具与日志格式化模块实现
本文摘要介绍了基于C++的日志系统设计与实现的关键组件,主要内容包括: 实用工具类设计:包含获取系统时间(带时区校准)、文件存在性检查、路径获取和目录创建等基础功能模块。 日志等级管理:定义了6种日志级别(DEBUG到FATAL)及其字符串转换接口,支持按等级过滤日志输出。 日志消息结构:封装了日志时间戳、线程ID、源代码位置、日志内容等核心信息,自动记录生成时间和线程信息。 格式化模块架构:采用基类+派生类的设计模式,支持灵活扩展日志输出格式的各个组成部分(时间、线程、消息内容等)。 该系统采用模块化分层
2026-07-04 19:30:00
239
原创 轻量级可扩展日志框架-日志系统设计思路与前置知识
本文介绍了C++日志系统的设计思路与实现要点,主要内容包括:日志系统的功能需求(多级别日志、同步/异步输出、多目标输出、线程安全),实现技术(C++11多线程、智能指针、双缓冲区设计),以及关键设计模式的应用(单例模式、工厂模式、代理模式、建造者模式)。系统采用模块化分层架构,包含格式处理、落地输出、日志器和建造者接口等模块,支持Linux环境下直接编译测试。文章还详细讲解了相关的前置知识,如不定参数处理、设计模式六大原则及单例模式的两种实现方式(饿汉式和懒汉式)。
2026-07-04 18:30:00
296
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅