自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 学习笔记 02:调试、数组、类与对象、继承

new int[N]目的C++Java普通定长数组运行时长度的连续容器获取长度v.size()a.length,无括号遍历元素越界访问原生数组下标越界通常是未定义行为抛// [0, 0, 0],元素默认初始化// 只在声明时可简写// 也可以完整写b[0] = 99;// 3,注意不是 length()int[] a;// 错:简写的 {} 初始化只能在声明时直接使用// 正确:new int[3]中的每个int默认为 0;boolean默认为false;引用数组如。

2026-10-09 19:37:48 249

原创 LeetCode 300:最长递增子序列

这题最关键的是不能只记录“当前最长的那一条序列”,因为当前数字可能接不上最长序列,却可以接在另一条较短但结尾更小的序列后面,并在以后反超。dp[i]以 nums[i] 作为最后一个数字时,最长递增子序列的长度虽然两者长度相同,但是1,2最终超过原来的1 → 5。dp[i]以 nums[i] 结尾的最长递增子序列长度。

2026-10-02 17:03:27 219

原创 LeetCode 120:三角形最小路径和

dp[i][j]从 triangle[0][0]走到 triangle[i][j]的最小路径和这种写法和 LeetCode 64“最小路径和”比较接近,但边界处理稍多。dp[i][j]从 triangle[i][j]走到最底层能够得到的最小路径和dp[i][j]从 triangle[i][j]走到底部的最小路径和。

2026-09-28 18:51:23 190

原创 LeetCode 64:最小路径和

dp[i][j]表示:从左上角(0,0)走到(i,j)时,可以得到的最小路径和。不同路径:dp[i][j] = 到达当前位置有多少条路径最小路径和:dp[i][j] = 到达当前位置的最小数字总和dp[i][j]从左上角走到 (i,j)所能得到的最小路径和。

2026-09-27 10:56:08 209

原创 LeetCode 63:不同路径 II

dp[i][j]表示:从左上角(0,0)走到(i,j)一共有多少条不同路径。dp[2][3]从 (0,0)走到 (2,3)有多少条不同路线dp[i][j]从 (0,0) 到 (i,j)一共有多少条不同路径。

2026-09-24 15:53:54 238

原创 LeetCode 5:最长回文子串

dp[i][j] = s[i...j] 是否是回文串这里i和j都是字符串下标。01234dp[0][2] 表示 "bab" 是否是回文串dp[1][3] 表示 "aba" 是否是回文串dp[0][3] 表示 "baba" 是否是回文串dp保存的是,不是长度。

2026-09-23 10:53:55 140

原创 LeetCode 97:交错字符串

dp[i][j]s1的前i个字符和s2的前j个字符,能不能交错组成s3的前i+j个字符。这是整道题最重要的一句话。dp[2][3]s1 前2个字符s2 前3个字符能不能组成s3 前5个字符2 + 3 = 5。

2026-09-22 15:31:40 177

原创 LeetCode 72:编辑距离

abc↑adc↑cab → ad当前字符一样→ 两边一起忽略最后一个字符→ 不增加操作次数word1前缀 = xxxAword2前缀 = yyyBA!= B那么最后一步只有三种可能。dp[i][j]word1前i个字符变成word2前j个字符所需的最少操作次数。

2026-09-21 17:54:48 220

原创 LeetCode 123:买卖股票的最佳时机 III

给定每天的股票价格prices[i],最多完成,求最大利润。买入 → 卖出并且必须卖掉当前股票以后才能再次买入。注意是,不是必须做 2 笔,因此可以做0、1、2笔交易。

2026-09-20 13:15:25 172

原创 LeetCode 188:买卖股票的最佳时机 IV

给定股票每天的价格prices[i]和整数k,最多进行k买入 → 卖出并且必须卖掉手里的股票之后才能再次买入。注意题目说的是k,不是必须交易k次,所以可以交易0、1、2...k次。

2026-09-19 13:23:28 103

原创 LeetCode 221:最大正方形

min + 13 31 X左上 = 3上 = 3左 = 1虽然左上和上面都能支持边长3,但是左边只能支持边长1,所以当前正方形不可能扩展得比左边允许的范围更大。dp[i][j] = min(上, 左, 左上) + 1) + 1;如果当前位置是0如果 matrix[i][j] == '0'如果 matrix[i][j] == '1'dp[i][j] = min(左, 上, 左上) + 1因为dp[i][j]和maxSize保存的是正方形边长。1 11 1边长为2面积 = 2 × 2 = 4。

2026-09-18 16:52:24 94

原创 LangChain 学习笔记(十):RAG 检索增强生成

本文全面介绍了LangChain中的RAG(检索增强生成)技术,重点内容包括: RAG的背景与价值 解决LLM的三大局限:知识滞后、知识缺失和幻觉问题 通过检索外部知识库增强LLM生成内容的准确性和可靠性 RAG核心架构 离线阶段:文档加载→分块→向量化→存储 在线阶段:查询向量化→检索→生成回答 典型应用场景:客服系统、企业知识库、专业领域问答等 完整实现流程 六步流水线:数据源→加载→分块→向量化→存储→检索→生成 详细解析了每个环节的技术实现 特别介绍了Document Loader的设计原理和Doc

2026-08-19 09:48:14 305

原创 LangChain 学习笔记(九):上下文与记忆

本文摘要(149字): LangChain记忆系统是实现多轮交互的核心,包含短期与长期记忆机制。大模型本质无状态,每次调用都是全新开始,需依赖外部记忆组件保存上下文。LangGraph提供三类上下文管理:动态运行时(State)、跨会话(Store)和静态(Context)。短期记忆通过State+Checkpointer+Thread ID组合实现,适用于单次会话;长期记忆使用Store+Namespace+Key结构,支持跨会话持久化。文章详细介绍了InMemorySaver等实现方式,并对比了不同记忆

2026-08-18 14:55:40 333

原创 LangChain 学习笔记(八):中间件 Middleware

本文摘要了LangChain中间件(Middleware)的核心概念与应用: 中间件是LangChain Agent架构中的中枢组件,作为执行流程的钩子函数,实现拦截、控制和增强功能。 采用AOP(面向切面编程)思想,将日志、重试、风控等横切关注点从主流程分离,提升代码复用性和可维护性。 中间件分为六大功能类别: 成本控制类(如调用次数限制) 稳定性保障类(如失败重试) 安全合规类(如敏感词过滤) 性能优化类(如上下文压缩) 调试分析类(如执行日志) 流程控制类(如人工审批) 支持两种自定义开发方式: No

2026-08-17 23:58:01 256

原创 LangChain 学习笔记(七):智能体 Agent

本文是LangChain学习笔记的第七章,重点介绍了智能体(Agent)的概念、架构和使用方法。文章首先阐述了Agent作为大模型应用开发核心的定义,即以大语言模型为决策核心,结合工具调用、记忆和行动能力的系统。然后对比了LangChain框架在0.x和1.x版本中Agent创建方式的重大变革:从碎片化的多种Agent API统一为单一的create_agent()入口,大大降低了开发复杂度。文章详细说明了Agent必须具备的五大核心能力(理解、拆解、工具判断、工具选择和结果利用)和四个核心组件(行动、工具

2026-08-16 12:13:58 240

原创 LangChain 学习笔记(六):结构化输出

LangChain 的结构化输出(Structured Output)指的是:要求模型最终返回一个符合预定义结构的数据对象。例如固定字段的 JSON、Pydantic 模型、TypedDict。而不再是无格式的自然语言文本。它的核心目标是:把 “自然语言回答” 变成 “程序可以稳定消费的数据”。TypedDict 是 Python 3.8+ 引入的一种类型提示工具。即带有类型声明的字典结构。适合需要快速定义字典结构且无需 Pydantic 重量级功能的场景。# 普通 dict 没有类型信息。

2026-08-15 14:01:32 360

原创 LangChain 学习笔记(五):Tools 工具调用

LangChain工具调用机制解析 本文详细介绍了LangChain中的工具调用(Tools)机制,主要内容包括: 工具的本质:使大模型从文本生成扩展到与世界交互,实现"改变世界"的能力,如查询天气、数据库操作等。 两种使用方式: 直接调用:开发者手动传参测试工具 绑定模型:AI自主决策是否调用工具(主流开发方式) 完整调用流程:用户输入→模型决策→工具执行→结果返回→生成最终回答,强调开发者需手动执行工具并管理循环。 Message流转机制: 三段式传递:HumanMessage→AIMessage(含t

2026-08-14 14:35:53 169

原创 LangChain 学习笔记(四):Message 与提示词模板

本文是LangChain学习系列文章的第四篇,主要介绍了消息(Message)与提示词模板的相关知识。文章首先阐述了消息的重要性,指出消息是大模型交互的基本单元,包含内容、角色和元数据三要素。然后详细介绍了四种消息类型:系统消息(SystemMessage)、用户消息(HumanMessage)、AI消息(AIMessage)和工具消息(ToolMessage),并对比了JSON格式和对象格式两种消息表示方式。 文章还讲解了ChatPromptTemplate如何取代传统PromptTemplate成为现代

2026-08-13 09:11:45 225

原创 LangChain 学习笔记(三):LangSmith 调试与监控

LangSmith 学习笔记:LLM应用调试与监控平台 摘要:LangSmith是LangChain生态中专门用于大语言模型(LLM)应用开发调试与监控的平台,具备四大核心功能:追踪调用链路(Tracing)、监控生产环境(Monitoring)、调试排查问题(Debugging)和系统化评估(Evaluation)。本文详细介绍了LangSmith的配置方法(包括API Key获取和环境变量设置),重点解析了其核心功能Tracing如何记录完整的调用链路(包括Prompt、响应、Token消耗等指标),并

2026-08-12 12:48:49 459

原创 LangChain 学习笔记(二):模型(Model)的创建与调用(上)

本文介绍了LangChain中模型创建与调用的核心概念,主要包含以下要点: 统一模型接口:LangChain通过封装不同厂商的大模型API(如OpenAI、DeepSeek等),提供统一的调用方式model.invoke(),简化开发流程。 模型创建:使用init_chat_model()创建模型对象,需配置模型名称、提供商、API密钥和接口地址等参数。 安全实践:推荐通过.env文件管理敏感信息(如API密钥),避免代码泄露风险。 核心方法:invoke()是LangChain最重要的方法,负责处理输入、

2026-07-24 20:42:17 234

原创 LangChain 1.x 学习笔记(一):为什么需要 LangChain?一文彻底理解 LangChain 生态

**摘要:本文深入探讨了LangChain作为AI应用开发框架的核心价值与生态体系。文章首先分析了传统应用与AI Agent的区别,指出大语言模型(LLM)的局限性(如无法获取实时数据、调用API等),这正是LangChain的用武之地。 LangChain定位为连接LLM与外部资源的中间层,主要实现三大功能:统一模型调用接口、封装复杂逻辑(Tool/Memory/Prompt等)、支持Agent智能体开发。其应用场景涵盖RAG检索增强生成、多模态处理、自动化写作等六大方向。 文章详细介绍了LangChai

2026-07-23 13:59:55 288

原创 Linux网络基础

本文系统介绍了Linux网络基础知识,包括网络发展历程、协议分层模型和传输流程。主要内容分为网络基础和应用层协议两部分:首先阐述了从独立模式到广域网的网络发展阶段,解释了协议的本质和TCP/IP五层模型;然后详细分析了HTTP协议格式和TCP可靠性机制,包括三次握手、四次挥手等核心概念。文章重点讲解了IP地址与MAC地址的协同工作机制,以及TCP的滑动窗口、超时重传等性能优化技术,为理解Linux网络通信提供了理论基础。

2026-03-02 10:50:34 592

原创 Linux多任务并发处理

本文摘要:Linux系统提供了多种进程间通信(IPC)机制,包括管道(匿名/命名)、共享内存、消息队列和信号量等。管道适用于有亲缘关系的进程,共享内存是最高效的IPC方式。信号作为软中断用于进程间异步通知,可分为普通信号和实时信号。文章详细介绍了信号的产生方式(终端按键、系统调用、软件条件、硬件异常)、核心转储功能以及信号在内核中的表示和处理机制,包括信号递达、未决和阻塞状态的区别。最后通过实验演示了如何通过阻塞信号并观察未决信号集的变化来理解信号处理机制。

2026-02-27 14:47:57 301

原创 Linux资源管理

本文系统介绍了Linux进程管理的核心概念与机制。首先从冯诺依曼体系结构出发,阐述了计算机硬件与操作系统的交互原理,重点讲解了进程的创建、状态转换、优先级调度等基础概念。深入分析了进程控制的关键技术,包括fork创建进程时的写时拷贝机制、进程终止方式、以及避免僵尸进程的等待机制。此外,还详细解释了进程地址空间的虚拟内存管理、环境变量的作用,以及Linux 2.6内核采用的O(1)调度算法。这些内容构成了Linux系统资源管理的核心知识体系,为深入理解操作系统原理和系统编程打下坚实基础。

2026-02-24 19:19:28 570

原创 Linux 基础与环境搭建

本文介绍了Linux基础与环境搭建的核心知识,包括常用指令、权限管理和开发工具。重点讲解了文件操作指令(ls、cd、rm等)、权限维度(用户/组/其他)及计算方式、目录权限特殊性。开发工具部分涵盖yum软件包管理、vim编辑器模式切换、gcc编译选项、gdb调试命令以及Makefile构建规则。最后通过进度条程序示例演示了缓冲区和转义字符的应用。掌握这些基础知识是进行Linux环境开发和系统管理的重要前提。

2026-02-23 15:58:47 660

原创 现代C++特性

现代C++(C++11及后续版本)引入了多项重要特性:统一的列表初始化{}支持所有类型初始化;类型推导工具auto和decltype简化编码;右值引用(T&&)和移动语义提升效率;完美转发(std::forward)保持参数属性;新增默认移动构造/赋值函数;Lambda表达式实现匿名函数功能;可变参数模板支持任意数量参数;std::function提供统一的可调用对象包装器。这些特性显著提升了C++的表达能力、运行效率和编码便捷性,使现代C++成为更强大的编程语言。

2026-02-21 21:26:06 696

原创 C++高阶机制与通用技能

本文系统介绍了C++高阶编程中的异常处理、类型转换和IO流三大核心机制。异常处理部分详细讲解了错误处理演变、使用规则、栈展开原理、异常安全及自定义异常体系实践;类型转换部分对比了C风格转换的缺陷,重点解析了C++四种类型转换操作符(static_cast、reinterpret_cast、const_cast、dynamic_cast)的特性和应用场景;IO流部分则从基本概念入手,阐述了流的方向性、缓冲机制及标准IO流对象的使用。全文强调生产环境中的最佳实践,如RAII资源管理、多态异常捕获和安全类型转换等

2026-02-20 16:46:49 640

原创 泛型编程与标准模板库(stl)

STL的缺陷STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

2026-01-25 11:22:31 1018

原创 C++ 核心基础与面向对象 (OOP)

类的引入 (struct vs class)C++中的 struct:升级了。不仅能定义变量,还能定义函数。C++中的 class:专门用于定义类。// C语言风格int* array;int size;// 数据和方法分离// C++风格// 方法都在结构体内类的定义方式推荐规范:.h 文件声明,.cpp 文件定义。成员变量命名:建议加前缀 _ 或 m_,防止与函数形参混淆。

2026-01-24 16:35:18 913

原创 第四节:Cmake常用语法核心笔记

本文总结了CMake常用语法的核心知识点,包括6大板块:1)打印调试message命令的使用;2)变量系统(set)及其作用域规则;3)逻辑判断if语句的多种用法;4)循环结构foreach的常见模式;5)列表操作list命令;6)函数function定义与返回值处理。重点解析了变量作用域、缓存变量、函数返回值PARENT_SCOPE等易错点,并提供了避坑指南,如分号分隔符、变量引用规范等。全文通过代码示例和对比表格,帮助开发者快速掌握CMake脚本编写技巧。

2025-12-23 11:00:16 646

原创 第三节:CMake 工程实践场景笔记

本文总结了CMake工程实践中的核心场景与技巧:1)基础可执行文件构建,包括安装配置;2)静态库/动态库的创建与管理,重点讲解target_link_libraries和头文件路径处理;3)关键概念PUBLIC/PRIVATE/INTERFACE的作用域区分;4)动态库的RPATH运行时路径问题;5)专业库的安装导出流程;6)常用辅助命令如file、set_target_properties等。文章强调现代CMake基于目标(target)的管理方式,提供了从简单项目到专业库开发的完整实践指南。

2025-12-22 22:32:31 1109

原创 第二节:CMake 命令行工具与工程生命周期

本文系统介绍了 CMake 工程的完整生命周期和命令行工具使用方法。主要内容包括: CMake 工程的6个标准阶段:配置、生成、构建、测试、安装和打包 推荐的现代调用方式:cmake -S . -B build(源外构建) 源文件树与构建树的定义与区别 各阶段核心命令: 构建:cmake --build build 测试:ctest 安装:cmake --install build 打包:cpack 脚本模式和命令模式的使用场景 强调跨平台统一性和查阅帮助的重要性 本文强调CMake工程管理的标准化流程,提

2025-12-22 22:27:39 832

原创 第一节:CMake 简介

CMake是一种跨平台的构建系统生成器,它不直接编译代码,而是通过解析工程描述文件生成平台原生的构建系统(如Makefile或VS项目)。CMake采用声明式设计,以"目标(Target)"为核心管理依赖关系和构建属性,能够自动传播编译选项和链接要求。其标准构建流程包括配置、生成和构建三个阶段,推荐使用源外构建保持源码目录整洁。CMake通过定义目标之间的依赖关系而非编写具体构建步骤,解决了跨平台、IDE切换、依赖管理等工程难题,是现代C/C++项目构建的标准工具。

2025-12-22 22:23:45 948

原创 位运,模拟,分治,BFS,栈和哈希表

分治是一种将大问题分解为若干个规模更小但结构相同的子问题,递归地解决这些子问题,然后将子问题的解合并以得到原问题的解的策略。这类问题通常不涉及复杂的算法,但对代码的实现能力和细节处理要求很高。: 准确理解题目描述的每一个规则和约束,将过程分解为清晰的步骤,并用代码逻辑一一对应。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的二维网格,计算岛屿的数量。的完整序列和残缺数组的所有数字进行异或操作,最终结果即为缺失的数字。,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。(在边权为1的图中)。

2025-06-14 22:10:47 1273

原创 动态规划DP

判断一个只包含正整数的非空数组是否可以被分割成两个子集,使得两个子集的元素和相等。这可以转化为一个 0/1 背包问题:能否从数组中选出一些数,其和恰好等于数组总和的一半。泰波那契序列 Tn 定义为:T0=0,T1=1,T2=1,且在 n≥0 的条件下 Tn+3=Tn+Tn+1+Tn+2。的计算只依赖于前几个固定状态,可以使用滚动数组(状态压缩)将空间复杂度从 O(N) 优化到 O(1)。的计算只依赖于上一行和当前行的数据,可以将空间复杂度从 O(MN) 优化到 O(min(M,N))。

2025-06-11 23:29:39 1212

原创 递归,回溯,DFS,Floodfill,记忆化搜索

遍历整个网格,每当遇到一个 ‘1’ (陆地),就将岛屿计数加一,并以此陆地为起点执行 FloodFill (DFS),将整个岛屿(所有相连的 ‘1’)“淹没”(例如,修改为 ‘0’ 或其他标记),以防重复计数。它从根节点(或任意节点)开始,沿着一条路径尽可能深地探索,直到到达路径末端,然后回溯到上一个节点,继续探索其他未访问的分支。FloodFill 是一种在多维数组(通常是二维矩阵,如图像)上,将与起始点相连通的、具有相同值的区域,替换为新值的算法。来解决问题的搜索算法,通常以 DFS 的形式实现。

2025-06-11 23:22:57 1232

原创 贪心选择 (Greedy Choice)

决策的关键在于,当出现重叠时,保留哪个区间能为后续选择留下最大的可能性。排序是为了创造一个有序的环境,使得局部最优决策的实施变得简单和直接。贪心算法的本质是在对问题求解时,每一步都做出在当前看来是最好的选择,期望通过一系列局部最优解,最终导出全局最优解。该策略在每一步都选择“最大化未来收益”(跳得更远),是典型的贪心思想。: 在每一步(每一“层”)可达的范围内,找到一个能让“下一步”跳得最远的位置。该模型处理一系列区间,目标是选择不重叠的子集或合并重叠的区间。**3. C++ 实现 **

2025-06-11 23:00:40 1020

原创 Linux 进程控制 基础IO

子进程只打印它自己的 “After”,因为它从 fork() 之后开始执行,不会执行 fork() 之前的 printf 语句。子进程 PID (例如 45110) 会被打印,然后父进程会等待5秒,打印 “this is test for wait”,最后打印子进程的退出码 (这里是 1,因为 257 & 0xFF = 1)。当父进程或子进程尝试写入共享数据时,内核会为写入方创建一个该数据页的副本,从而实现父子进程数据段的独立性。创建子进程后,子进程执行的是和父进程相同的程序(可能执行不同的代码分支)。

2025-05-11 21:38:55 1228

原创 Redis 常见数据类型

按模式匹配返回所有符合条件的键(生产环境慎用,可能导致阻塞)。:设置键的过期时间(秒) / 查看剩余存活时间。:删除一个或多个键(无视数据类型)。:检查一个或多个键是否存在。:存在的键数量(0~N)。:返回键对应的数据类型。

2025-05-09 23:02:00 971

原创 mysql-视图特性,用户管理和使用c连接

创建视图案例:查询视图:修改视图数据(影响基表)修改基表数据(影响视图)删除视图三、视图规则与限制命名唯一性:视图名必须唯一,不可与表或其他视图重名。性能影响:视图基于复杂查询时,可能降低查询效率。功能限制:不支持索引、触发器、默认值。视图中使用时,若外部查询再次使用,视图的排序会被覆盖。安全性:通过视图可限制用户访问特定数据(如隐藏敏感字段)。联合使用:视图可与表一起使用,例如在复杂查询中嵌套。四、实战案例牛客oj题:针对actor表创建视图

2025-05-06 14:41:06 1009

空空如也

空空如也

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

TA关注的人

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