自定义博客皮肤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)
  • 收藏
  • 关注

原创 TypeScript 完全入门指南:从基础到项目配置

开启严格模式捕获更多潜在错误避免使用 any:使用unknown或具体类型代替善用类型推断:让 TypeScript 自动推断简单类型接口优先:定义对象结构时优先使用interface泛型复用:为可复用逻辑编写泛型组件明确函数返回类型:显式标注返回值提高可读性使用可选链和空值合并?和??简化空值处理定期更新 TypeScript:获取最新特性和性能改进TypeScript 已经成为现代前端和后端(Node.js)开发的标准工具。掌握 TypeScript 不仅能提高代码质量,还能让你在团队协作中更加高效。

2026-05-27 20:33:30 341

原创 Git常用命令总结,这一篇就够了!

Git作为目前最流行的版本控制系统,几乎是每个程序员的必备技能。掌握以上Git命令,基本可以应对日常开发中的绝大多数场景。由浅入深:先从最常用的git addgit commitgit pushgit pull开始勤于练习:在自己的项目中多操作,形成肌肉记忆善用别名:为常用命令设置简短别名,提高效率注意安全慎用,建议先git stash或备份📌 提示:Git 版本在 2.23+ 后引入了git switch和命令,比传统的职责更清晰,建议逐渐适应新语法。

2026-05-20 21:22:36 447

原创 分布式事务解决方案:6个生活中的小故事

方案生活比喻一句话特点2PC先打电话确认再真正转账安全但慢,一个人卡住全队等3PC多确认一次以防掉线改进了阻塞问题,但仍有隐患TCC火车票占座30分钟性能好,但需要业务支持"预留"本地消息表小本本记任务+闹钟提醒简单可靠,但闹钟吵得数据库头疼事务消息把记账本交给专业快递性能好,但需要高级MQ支持Seata AT自动记录+自动还原对代码无侵入,最省事如果你要绝对安全(比如银行转账),数据不能有半点差错,那就忍受慢一点,用2PC或Seata AT。如果你要高性能。

2026-05-17 16:54:31 527

原创 深入浅出分布式事务:6大解决方案详解与选型指南

分布式事务是一个"没有银弹"的领域,每种方案都有自己的适用边界。作为架构师或开发者,我们需要做的是:理解每个方案的原理和局限明确自己的业务对一致性、性能、开发成本的要求在多个维度之间做出合理的权衡希望本文能帮助你在实际项目中做出正确的选型。如果你在实践中有任何疑问或经验,欢迎在评论区留言交流。参考资料《分布式一致性原理与实践》RocketMQ事务消息官方文档。

2026-05-17 16:54:13 432

原创 面试题记录

Tomcat:SpringBoot内嵌,启动时通过TomcatServletWebServerFactory创建,核心是Connector(接收请求)+Container(处理请求)。用于缓存、计数器、分布式锁。:用户态轻量线程,切换由用户控制,开销极小,Go goroutine、Kotlin协程。三种同步策略:always(每次)、everysec(每秒)、no(不主动):互联网业务(商品浏览、评论),允许短暂不一致,保证高可用。:底层是跳表+哈希表或压缩列表,按score排序,用于排行榜、延迟队列。

2026-05-17 16:36:42 199

原创 订单超时取消的并发问题与定时任务实现详解

java@Mapper/*** 支付:只有待支付才能变为已支付*//*** 取消:只有待支付才能变为已取消*//*** 查询超时待支付订单*/要点说明定时任务选型单体用 Spring Task,集群加分布式锁,高实时用 MQ 延时消息并发安全乐观锁是核心状态机订单状态必须严格流转,不能随意跳转幂等设计重复执行不会产生副作用订单超时取消看似简单,但并发场景下的数据一致性是真正的难点。希望本文能帮助你在项目中安全地实现这个功能。

2026-05-17 16:04:05 382

原创 LeetCode Hot 100 - 最长递增子序列完全题解

方法时间复杂度空间复杂度能否得到具体序列推荐度动态规划O(n²)O(n)✅ 可以⭐⭐⭐贪心+二分O(n log n)O(n)❌ 需要额外处理⭐⭐⭐⭐⭐线段树O(n log n)O(n)✅ 可以⭐⭐最长递增子序列是 LeetCode Hot 100 中的经典动态规划题目,也是面试高频题。先说 O(n²) 的 DP 解法(基础)再优化到 O(n log n) 的贪心+二分(进阶)解释贪心法的核心思想:维护每个长度的最小末尾。

2026-05-16 19:04:56 413

原创 LeetCode Hot 100 - 爬楼梯完全题解

方法时间复杂度空间复杂度难度推荐度递归O(2ⁿ)O(n)简单⭐递归+记忆化O(n)O(n)中等⭐⭐⭐DP数组O(n)O(n)简单⭐⭐⭐滚动数组O(n)O(1)简单⭐⭐⭐⭐⭐通项公式O(log n)O(1)较难⭐⭐矩阵快速幂O(log n)O(1)难⭐⭐因为到达第 i 阶只有两种途径:从第 i-1 阶爬 1 阶从第 i-2 阶爬 2 阶所以,这正是斐波那契递推公式。1 阶:只能爬 1 阶 → 1 种。

2026-05-16 18:05:57 694

原创 算法设计三大经典策略:贪心 / 分治 / 动态规划 详解与实战

贪心算法、分治算法、动态规划。贪心:走一步看一步,选当前最好的分治:大问题拆小,逐个击破再合并动态规划:记住过去,用子问题的解推导当前本文将系统讲解这三种策略的原理、适用条件、经典问题实战,以及它们之间的对比与联系。维度贪心算法分治算法动态规划核心思想每步选局部最优大拆小,合小成大记录子问题,递推求解子问题关系独立(一次决策)相互独立重叠依赖是否需要记录子问题解❌ 不需要❌ 不需要(递归)✅ 需要(DP表)能否保证全局最优❌ 不一定✅ 保证✅ 保证时间复杂度。

2026-05-16 17:37:20 422

原创 LeetCode 226. 翻转二叉树(多种解法详解)

翻转二叉树的本质就是交换每个节点的左右子节点。无论是递归还是迭代,核心操作都是交换。这道题看似简单,但考察了对二叉树遍历的掌握程度,也是很多公司面试的"试金石"。熟练掌握三种解法(递归、BFS、DFS),面试中就可以游刃有余。

2026-05-14 20:21:14 422

原创 LeetCode 206. 反转链表(图解迭代 + 递归,一篇就够)

解法核心操作空间难度迭代+ 双指针移动O(1)⭐递归+ 回溯O(n)⭐⭐⭐反转链表是所有链表题目的基石,一定要手写无 Bug掌握。建议:先彻底理解迭代法的每一步(可以用纸笔模拟)再尝试理解递归法的回溯过程最后刷几道变种题(反转部分、K 个一组)巩固。

2026-05-14 20:18:58 358

原创 LangChain4j 万字教程从零到一:Java开发者的大模型入门完全指南

最近AI应用开发如火如荼,但作为Java开发者,你是不是经常遇到这样的困境:Python的AI框架一大堆,但Java能用的却寥寥无几想给自己的Spring Boot项目加上AI能力,却不知道从何下手看了一堆文档,还是不知道怎么写出第一行代码别急!就是为你准备的解决方案。它就像是Java世界的"AI万能钥匙",让你用最熟悉的Java语法,就能轻松构建AI应用。本文特色🎯 每个概念都用生活例子解释,零基础也能懂💻 所有代码都能直接复制运行,100%实战。

2026-05-12 16:52:28 597

原创 深入浅出MCP:从零开始的完整学习指南(保姆级教程)

很多朋友看完MCP的介绍还是一头雾水:“这到底是什么?跟我有什么关系?我该怎么用?别急,这篇文章我会用最通俗的方式一步一步带你搞懂MCP。每个概念都会配上生活化的例子,每个操作都有完整的代码。官方定义:MCP(Model Context Protocol)是一个开放协议,用于标准化应用程序向大型语言模型提供上下文的方式。大白话解释:MCP是一套通用规则,规定了:AI怎么“伸手要东西”(请求格式)工具怎么“把东西给AI”(响应格式)双方怎么“对话”(通信方式)

2026-05-12 16:45:44 1127

原创 Spring AI 入门教程:Java开发者的AI应用捷径

基础对话:3步集成,一行代码调用大模型提示词模板:结构化的AI交互RAG知识库:让AI回答私有数据问题流式响应:打字机般的交互体验用Spring的方式做AI应用,让Java开发者无需学习Python就能快速构建AI能力。后续学习建议探索更多模型提供商(Ollama本地部署、通义千问等)深入理解向量数据库和RAG原理学习AI Agent多智能体编排参考资源Spring AI官方文档DeepSeek API文档本文示例代码GitHub。

2026-05-10 15:27:30 509

原创 RAG知识库从零到一:简单搭建教程(java版)

文档加载:支持 PDF、Word、TXT文本分块:可配置大小和重叠向量化向量存储:Qdrant(高性能向量数据库)检索+生成:完整 RAG 流程整个方案可以在普通服务器上运行,无需 GPU,适合企业内部知识库、智能客服等场景。

2026-05-10 15:22:52 415

原创 深入浅出向量数据库:AI时代的数据基石

向量数据库不是一个“银弹”技术,它解决的是特定的相似度搜索问题。向量数据库负责召回,传统数据库负责过滤和排序。纸上得来终觉浅,建议大家亲自跑一下代码。可以从docker启动一个Qdrant开始,10分钟就能跑通第一个相似度搜索demo。本文代码已在GitHub开源(欢迎star)参考阅读HNSW论文原文Milvus官方文档OpenAI Embeddings指南。

2026-05-10 15:11:57 409

原创 Java集合框架完全指南:从入门到源码,一篇讲透List、Set、Map

为什么需要集合?假设你要存储一组学生的姓名。用数组可以这样写:javastudents[0] = "张三";长度固定。如果你不确定会有多少个学生,数组就不太合适了。集合就是用来解决这个问题的。它是Java提供的一套动态存储对象的容器,可以根据需要自动扩容,还提供了丰富的操作接口。Collection:存储单个元素的集合Map:存储键值对的集合下面我们分别讲解。集合框架是Java编程的基础,也是面试的重点。掌握好它们,不仅能写出更高效的代码,也能在面试中更有底气。

2026-05-09 19:48:54 202

原创 【LeetHOT100】二叉树的最大深度——Java多解法详解

方法时间复杂度空间复杂度代码复杂度适用场景递归 DFSO(n)O(n)极简标准答案,面试首选迭代 BFSO(n)O(n)中等需要同时知道每层信息时迭代 DFSO(n)O(n)中等不想用递归时。

2026-05-09 17:47:06 158

原创 从冒泡到快排,一口气过完8种经典排序基础实现

场景推荐算法原因数据量很小(< 50)插入排序简单、稳定、常数低数据量中等且要求稳定归并排序O(n log n) + 稳定通用(大多数语言默认)快速排序平均最快,常数小内存紧张且要稳定归并(可优化空间)但对内存仍有一定要求只关心 Top K堆排序可不用全排整数且范围小计数排序O(n),极致性能一句话记忆口诀冒选插希归快堆计,稳定不稳看交换,归并稳来快排快,堆排省地不保证。

2026-05-09 17:42:00 190

原创 【LeetHOT100】二叉树的中序遍历——Java多解法详解

方法时间复杂度空间复杂度代码复杂度面试推荐递归O(n)O(n)极简⭐⭐⭐⭐⭐迭代(栈)O(n)O(n)中等⭐⭐⭐⭐⭐MorrisO(n)O(1)较复杂⭐⭐⭐。

2026-05-09 17:37:57 181

原创 你真的分得清 Spring、Spring MVC、Spring Boot 吗

模块职责范围独立运行?是否依赖 Spring FrameworkIoC、AOP、容器、基础设施✅ 可自身Spring MVCWeb 请求处理、视图控制❌✅ 依赖 spring-context自动配置、启动、环境管理❌✅ 强依赖分布式协调、微服务❌✅ 依赖 Spring Boot数据访问统一抽象❌✅ 依赖认证授权❌✅ 依赖Spring AILLM 集成、RAG❌✅ 依赖。

2026-05-09 17:37:22 922

原创 【LeetHOT100】LRU缓存——Java多解法详解

操作要做的事get① 从 map 取节点 ② 移到头部 ③ 返回值put(key 存在)① 更新 value ② 移到头部put(key 不存在)① 若容量满,删除尾部节点 ② 创建新节点 ③ 添加到头部 ④ 放入 map方法代码量可读性面试推荐适用场景双向链表 + HashMap较多清晰⭐⭐⭐⭐⭐面试标准答案极少极简⭐⭐⭐⭐快速实现,或说明思路后使用。

2026-05-04 11:10:54 298

原创 【LeetHOT100】合并 K 个升序链表——Java多解法详解

方法时间复杂度空间复杂度优点缺点顺序合并O(k²n)O(1)简单直观效率极低,k 大时不可用优先队列O(N log k)O(k)代码简洁,面试常考需要额外堆空间分治合并O(N log k)O(log k)无额外数据结构,效率高递归理解稍复杂暴力排序O(N log N)O(N)思路最简单空间大,未利用有序性。

2026-05-04 10:51:55 193

原创 【LeetHOT100】排序链表——Java多解法详解

方法时间复杂度空间复杂度稳定性适用场景面试推荐归并排序(递归)O(n log n)O(log n)✅通用⭐⭐⭐⭐⭐归并排序(迭代)O(n log n)O(1)✅严格要求O(1)空间⭐⭐⭐⭐⭐快速排序平均 O(n log n)O(log n)❌链表已排序时易超时⭐⭐计数排序O(n + k)O(k)✅值域范围小⭐⭐⭐。

2026-05-04 10:42:59 307

原创 【LeetHOT100】随机链表的复制——Java多解法详解

方法时间复杂度空间复杂度是否修改原链表推荐度哈希表(两次遍历)O(n)O(n)❌⭐⭐⭐⭐哈希表 + 递归O(n)O(n)❌⭐⭐⭐原地复制 + 拆分O(n)O(1)✅(临时修改,最后恢复)⭐⭐⭐⭐⭐。

2026-04-29 11:00:04 409

原创 【LeetHOT100】K 个一组翻转链表——Java多解法详解

方法时间复杂度空间复杂度是否原地推荐度迭代法O(n)O(1)✅⭐⭐⭐⭐⭐递归法O(n)O(n/k)✅⭐⭐⭐⭐。

2026-04-29 10:41:20 363

原创 【LeetHOT100】删除链表的倒数第 N 个结点——Java多解法详解

方法时间复杂度空间复杂度是否一次遍历推荐度两次遍历O(L)O(1)❌⭐⭐⭐快慢指针O(L)O(1)✅⭐⭐⭐⭐⭐栈O(L)O(L)❌⭐⭐方法时间复杂度空间复杂度是否修改原节点值推荐度迭代(三指针)O(n)O(1)❌⭐⭐⭐⭐⭐递归O(n)O(n)❌⭐⭐⭐⭐栈辅助O(n)O(n)❌⭐⭐。

2026-04-29 10:07:30 419

原创 面试必备:LeetCode HOT 100 分类刷题指南

如果说算法面试是一场“战役”,那么 LeetCode HOT 100 就是你需要攻克的最核心的“根据地”。掌握好这一百道题,相当于建立起来一份完整的算法知识图谱,在面对面试官时便能更有底气。题型特征第一反应算法查找、配对、计数哈希表有序数组、配对、原地修改双指针子串、子数组、连续滑动窗口排列、组合、枚举回溯最优子结构、重叠子问题动态规划树的分层遍历广度优先搜索树的深搜、递归深度优先搜索。

2026-04-28 16:10:34 670

原创 手把手教你写出优雅高效的SQL:从入门到精通

SQL看似简单,实则需要大量实践。多写:在LeetCode、牛客网上刷SQL题(推荐难度:中等~困难)多读:看公司生产库的慢查询日志,尝试优化多思考:每次写SQL时,想想是否能走索引、是否能减少扫描行数掌握进阶:存储过程、触发器、事件、分区表等,但慎用于业务逻辑。

2026-04-28 16:04:36 217

原创 MySQL性能优化:深入理解索引原理与查询优化实战

慢查询第一现场:开启慢查询日志,定期分析。Explain 是你的火眼金睛:重点关注typekeyrowsExtra。复合索引遵循最左前缀:把区分度高的列放在左边,等值查询放前,范围查询放后。避免索引失效:不在索引列上做任何计算、函数、类型隐式转换;杜绝开头的LIKE。覆盖索引是王道:查询只走二级索引,避免回表。写操作多的表,索引适度:不是所有WHERE列都要建索引,优先优化高频慢查询。索引犹如书的目录,设计得好,查找飞快;设计得不好,不如没有。希望本文能帮你在MySQL优化的道路上少踩坑,多提效。

2026-04-28 16:00:57 1024

原创 【LeetHOT100】删除链表的倒数第 N 个结点——Java多解法详解

方法时间复杂度空间复杂度是否一次遍历推荐度两次遍历O(L)O(1)❌⭐⭐⭐快慢指针O(L)O(1)✅⭐⭐⭐⭐⭐栈O(L)O(L)❌⭐⭐。

2026-04-26 12:16:11 480

原创 微服务可观测性实战:分布式链路追踪从入门到精通

自动埋点虽然方便,但有时需要手动添加业务层面的 Span,比如记录某个复杂计算步骤的耗时:java@Service// 手动创建自定义 Span// 这里执行优惠计算逻辑// 另一个自定义 Span在异步编程中,Trace 上下文不会自动传递到新线程。使用@Async时务必自定义线程池并包装 TaskDecorator:java@Bean// 传递上下文// 自定义 TaskDecorator 实现@Override。

2026-04-26 11:39:43 730

原创 ThreadLocal 深度解析:从源码到内存泄漏,一篇就够了

一定要调用remove():尤其是在使用线程池时,用 try-finally 保证清理。不要存储大对象:大对象长期占用线程内存,易 OOM。不要用传递敏感数据:因为线程可复用,数据可能被意外访问。尽量使用:提供初始值,避免空指针异常。统计工具辅助:可通过观察内存变化,或使用 MAT 分析堆 dump 中的数量。警惕 Web 容器:Tomcat 等容器会缓存工作线程,务必在请求结束前清理。

2026-04-26 11:19:06 462

原创 Java 注解(Annotation)详解:从基础到 APT 实战

javajava保留策略可见性典型应用SOURCE编译后消失Lombok、代码检查CLASS字节码保留,运行时不可见字节码框架(ASM)RUNTIME反射可见Spring、ORM、测试框架注解是 Java 元编程的入口,掌握它意味着你能理解主流框架的设计思想,甚至写出自己的代码生成工具。如果你对 APT 感兴趣,强烈建议去读一下 Lombok 源码,会让你对 Java 编译过程的理解跃升一个台阶。

2026-04-26 11:17:21 399

原创 CompletableFuture 使用全攻略:从异步编程到异常处理

java.thenApplyAsync(this::process, bizPool) // 也指定同一池子特性说明创建方式supplyAsync / runAsync / completedFuture / 手动回调类型thenApply(转换)、thenAccept(消费)、thenRun(无参)异常处理任务编排thenCompose(链式)、thenCombine(合并)、allOf/anyOf(聚合)最佳实践自定义线程池、避免阻塞、显式超时、异常兜底。

2026-04-26 11:14:42 376

原创 【Java 23种设计模式深度剖析(附代码示例)】

设计模式是软件工程的“词汇表”,它让开发者能够用简洁的术语描述复杂的架构思想。Java 作为经典的面向对象语言,天然支持大部分 GoF 设计模式。但在实际项目中,很多同学要么过度设计(模式滥用),要么对模式一知半解(实现僵硬)。本文将系统讲解23 种 GoF 设计模式在 Java 中的实现,涵盖创建型、结构型、行为型三大类,每个模式都会提供:解决的核心问题UML 角色与结构说明完整可运行的 Java 代码示例(含现代 Lambda 优化)JDK/Spring 等框架中的实际应用。

2026-04-24 15:14:27 342

原创 【告别for循环】Java Stream 流式编程精通:从入门到源码级的性能优化

自 Java 8 问世以来,Stream API 便成为了 Java 开发者手中一把锋利的利器。它让我们能够以声明式的方式处理集合数据,写出更加简洁、可读、可维护的代码。然而,在实际项目中,很多同学对 Stream 的使用仍停留在基础的filtermapcollect层面,对背后的惰性求值、并行流陷阱、性能调优等高级话题知之甚少。本文将系统全面地梳理 Java Stream 的核心知识点,从基础用法到高级技巧,结合大量代码示例和性能对比,帮助你彻底掌握 Stream 并写出工业级的优雅代码。

2026-04-24 15:01:19 465

原创 【了解与入门】RAG技术与实践——从零到一构建检索增强生成系统

RAG(检索增强生成,Retrieval-Augmented Generation)是一种将信息检索与文本生成结合的技术框架。RAG = 先检索资料,再让大模型基于资料生成答案。用一句话概括:传统大模型是“闭卷考试”,RAG把它变成了“开卷考试”。知识可信度提升:通过外部知识库验证生成内容,将事实准确率提升至92%以上;数据主权保障:企业私域数据无需流出本地环境,满足金融、医疗等行业的合规要求;领域适应能力:支持垂直领域知识库的动态更新,使通用模型具备专业领域能力。

2026-04-24 10:05:10 658

原创 【基础但易错】Java 字符串创建与内存管理详解

表达式结果原因true同一常量池对象false一个在常量池,一个在堆false两个不同堆对象true编译期常量折叠false变量拼接产生新堆对象true内容相同true都返回常量池引用创建方式存储位置是否可能复用常量池何时使用字面量"abc"常量池总是复用常规推荐堆不会自动复用(除非 intern)几乎不需要"a"+"b"常量拼接常量池编译期折叠后复用推荐变量拼接a+b堆不会复用改用 StringBuilderintern()常量池手动加入复用内存优化场景。

2026-04-24 10:04:40 356

原创 【LeetHOT100】两数相加——Java多解法详解

方法时间复杂度空间复杂度是否利用逆序存储溢出风险面试推荐度迭代模拟✅无⭐⭐⭐⭐⭐递归模拟✅无⭐⭐⭐⭐转整数法不可行不可行✅严重❌。

2026-04-23 11:04:27 317

空空如也

空空如也

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

TA关注的人

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