自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TransmittableThreadLocal使用场景

在 Java Web 开发中,ThreadLocal 常用于保存请求的用户信息,但在使用线程池或异步方法时,ThreadLocal 的值无法传递到子线程,导致上下文丢失。为解决这一问题,阿里巴巴开源的 TransmittableThreadLocal (TTL) 提供了增强功能,能够将主线程的上下文信息传递到子线程中,包括线程池。通过引入 TTL 依赖、替换原有 ThreadLocal 并包装子线程任务,开发者可以轻松实现日志 traceId、用户上下文等信息的传递。TTL 特别适用于多线程、异步和线程池场

2025-05-17 20:32:07 463

原创 LinkedHashMap解析

LinkedHashMap 是 Java 集合框架中在保留 HashMap 高效存取性能的基础上,通过额外维护一条双向链表来保证元素的迭代顺序(插入顺序或访问顺序)的 Map 实现。其核心思路是在每个桶(bucket)节点上都增加before和after指针,串联成一个环形双向链表,并由headtail引用维护链表首尾。当执行putget(若开启访问顺序)、remove等操作时,除了调用 HashMap 的基本操作,还会对链表做相应调整,以保证有序迭代。

2025-05-09 14:22:40 745

原创 ConcurrentHashMap解析

场景用法无冲突,简单插入CAS冲突、遍历、结构变更链表 → 红黑树转化红黑树插入/删除size 计数更新CAS + 分段计数。

2025-05-08 20:48:45 1070

原创 HashMap解析

本质上,HashMap通过一个长度为 2 的次幂的数组table维护所有条目,解决哈希冲突采用“数组 + 链表”或“数组 + 红黑树”混合结构。当链表长度超过阈值()且表容量不小于时,会将该链表转化为红黑树,以确保最坏情况下的查询性能由 O(n) 降至 O(log n);反之,在扩容时若红黑树节点数低于,则会“退化”回链表结构。HashMap的默认初始容量为 16,默认加载因子为 0.75,,并更新阈值,以保证空间与时间开销的平衡。以上设计使得HashMap。

2025-05-08 13:37:20 591

原创 java中ArrayList扩容机制的解析

ArrayList底层由一个可变长度的数组支撑,可在运行时动态调整大小,属于顺序表的具体实现,具有随机访问速度快、增删效率相对较低、非线程安全的特点。

2025-05-07 21:10:24 519

原创 微服务中组件扫描(ComponentScan)的工作原理

只能扫描类路径中存在的包和类。Maven依赖是控制哪些模块会被包含在类路径中的主要机制,因此只有被正确依赖的模块中的组件才会被扫描到。

2025-05-02 21:02:49 928

原创 实现Sentinel与Nacos的规则双向同步

实现规则的集中管理支持动态实时更新保证多实例配置一致性提供完整的审计日志这套方案已在生产环境验证,能够有效提升微服务的稳定性和可维护性。读者可以根据实际需求进一步扩展,如增加系统规则、热点参数规则等的支持。

2025-05-01 19:59:32 1310

原创 AI技术前沿:Function Calling、RAG与MCP的深度解析与应用实践

随着人工智能技术的迅猛发展,大型语言模型(LLM)正逐步从单纯的文本生成工具进化为能够与外部世界交互的智能系统。在这一演进过程中,Function Calling、RAG(检索增强生成)和MCP(模型上下文协议)三大技术扮演着关键角色。本文将深入探讨这三种技术的核心原理、应用场景以及它们如何共同推动AI应用进入新阶段,同时提供实用的代码示例和行业趋势分析,帮助开发者把握AI技术的最新发展方向。

2025-04-29 12:28:00 1323

原创 深入理解布隆过滤器:参数设定与优化

布隆过滤器是一种高效的数据结构,适用于需要快速判断元素是否存在的场景。合理选择初始化参数是优化布隆过滤器性能的关键。通过本文介绍的计算公式和优化建议,你可以根据实际需求设计出高效的布隆过滤器。希望本文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

2025-04-27 21:43:49 1082

原创 MySQL B+树索引查询全过程详解

理解MySQL B+树索引的查询过程是数据库性能优化的基础。通过本文的分析,我们可以看到索引如何高效地定位数据,以及不同查询场景下的执行路径差异。在实际应用中,应该根据查询模式合理设计索引,充分利用B+树的特性来提升系统性能。

2025-04-27 11:17:53 395

原创 MySQL长事务的隐患:深入剖析与解决方案

MySQL长事务是数据库性能的隐形杀手,可能引发锁竞争、连接池耗尽、复制延迟等一系列问题。通过合理的事务设计、有效的监控手段和及时的优化措施,我们可以有效避免长事务带来的负面影响。记住,良好的事务管理习惯是高性能数据库应用的基础。培养对事务时长的敏感性在设计和编码阶段就考虑事务边界建立完善的监控体系定期review系统中的事务使用情况。

2025-04-26 15:08:29 1231

原创 Spring @Transactional 自调用问题深度解析

当类内部的方法A调用同一个类的另一个带有注解的方法B时,事务注解不会生效。这是因为Spring的事务管理是基于AOP代理实现的,而自调用会绕过代理机制。

2025-04-25 18:10:23 701

原创 Spring定时任务不执行?深度排查指南与解决方案

通过本文的系统化排查方法,可以解决95%以上的定时任务执行问题。三层验证:配置→表达式→环境两项防护:异常处理+任务防重一套监控:指标采集+日志追踪对于复杂场景,建议结合Arthas等诊断工具进行运行时分析,或考虑使用Quartz等更强大的调度框架。

2025-04-25 11:38:36 987

原创 MySQL事务实现原理:从ACID特性到InnoDB引擎的深度解析

undo log保证原子性redo log保证持久性锁+MVCC保证隔离性三者协同保证一致性生产环境建议避免长事务(监控trx_age合理设置隔离级别(通常RR即可)关注锁等待和死锁情况重要业务考虑分布式事务方案通过深入理解这些机制,开发者可以更好地设计可靠的数据访问层,构建高可用的数据库应用。

2025-04-25 10:04:54 1044

原创 CentOS 系统使用 Docker 安装 Elasticsearch 和 Kibana 详细教程

本教程将指导你在 CentOS 系统上使用 Docker 部署 Elasticsearch 7.17.28 和 Kibana 7.17.28,并安装中文分词插件 IK Analysis。,如果看到 Kibana 界面,说明安装成功。最后,执行命令,安装Docker。首先要安装一个yum工具。更新yum,建立缓存。

2025-04-24 15:10:08 810

原创 CentOS 系统使用 Docker 安装 Redis 详细教程

Redis 是一个高性能的键值数据库,广泛应用于缓存、消息队列等场景。本教程将指导你在 CentOS 系统上使用 Docker 安装并配置 Redis 6.2.6 版本。如果你需要修改 Redis 的默认配置(如最大内存、持久化策略等),可以编辑。:如果远程访问 Redis,需开放。最后,执行命令,安装Docker。建议使用更复杂的密码,而非。首先要安装一个yum工具。目录,防止数据丢失。更新yum,建立缓存。

2025-04-23 20:37:53 1107

原创 MySQL索引使用一定有效吗?如何排查索引效果?

即使你创建了索引,MySQL 也可能因为以下原因。

2025-04-23 16:50:29 648

原创 MySQL索引覆盖:高效查询的终极优化技巧

因此 MySQL 可以直接从索引中获取数据,而无需回表查询数据行。建议在关键查询上使用,但避免过度索引影响写入性能。几乎不可能使用索引覆盖,因为它会查询所有列,而索引通常不会包含所有字段。索引中,MySQL 可以直接从索引获取数据,无需读取数据行,这就是。:索引越多,写入(INSERT/UPDATE/DELETE)越慢。:避免回表查询数据行,直接从索引获取数据。:如果查询列不在索引中,仍然需要回表。:联合索引可能比单列索引占用更多存储。:索引通常比数据行小,扫描更快。,说明使用了索引覆盖。

2025-04-23 12:37:15 578

原创 在mysql中建立索引时需要注意哪些事项?

场景是否适合加索引备注经常用于 WHERE 查询的字段✅高选择性优先用于 JOIN 的连接键✅建立相同类型索引可提升性能排序字段(ORDER BY)✅尤其是在 LIMIT 结合 ORDER BY 时频繁更新的字段❌更新时索引维护开销大低选择性字段(如性别)❌可考虑复合索引中包含小表(几十条数据)❌全表扫描更快模糊匹配 LIKE ‘%xxx%’❌普通索引无法使用,可考虑 FULLTEXT。

2025-04-23 09:43:42 618

原创 ElementPlus 分页组件显示问题:为什么需要加 “+“ 前缀?

这个问题的本质是 JavaScript 的弱类型特性导致的。在 Vue 开发中,特别是在使用第三方组件时,确保传入的数据类型与组件期望的类型一致非常重要。虽然一元加运算符可以快速解决问题,但从长远来看,确保数据初始化为正确的类型才是更健壮的解决方案。

2025-04-22 22:52:32 526

原创 MySQL索引的最左前缀匹配原则详解

最左前缀匹配原则(Leftmost Prefix Principle)是MySQL使用联合索引(复合索引)时的基本规则,指的是查询条件必须从联合索引的最左列开始,并且不能跳过中间的列,才能充分利用索引。

2025-04-22 13:50:59 848

原创 MySQL中SQL语句的详细执行过程

外连接转内连接:当WHERE条件包含被驱动表非空约束时。Extra:额外信息(如Using filesort)read_rnd_buffer_size:随机读缓冲区。redo log:物理日志,保证持久性(WAL机制)记录慢查询(如超过long_query_time)连接算法选择(嵌套循环、哈希连接、排序合并)InnoDB行锁:共享锁(S)、排他锁(X)更新Buffer Pool中的数据页(脏页)sort_buffer_size:排序缓冲区。join_buffer_size:连接缓冲区。

2025-04-22 11:27:27 858

原创 Java 使用 JWT(JSON Web Token)实现认证与授权

通过 JJWT 库,我们可以方便地在 Java 中生成、解析和验证 JWT。JJWT(Java JWT)是一个流行的 Java 库,用于创建和解析 JWT。JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间安全地传输信息。:用户登录后,服务器返回 JWT,客户端后续请求携带该 token 进行身份验证。(载荷):存放实际数据,如用户 ID、角色、过期时间等。(签名):用于验证 token 的合法性,防止数据篡改。设置合理的过期时间(如 24 小时),避免长期有效。

2025-04-21 20:04:03 951

原创 【避坑指南】Spring拦截器中instanceof HandlerMethod失效的问题排查

框架模块要分清:Spring不同模块可能有同名类,要特别注意自动导入要谨慎:不要完全依赖IDE的自动导入排查问题要系统:从现象出发,逐步缩小范围基础知识点很重要:理解Spring MVC和Messaging的区别。

2025-04-21 19:39:34 468

原创 MySQL 索引类型详解

仅适用于 MyISAM 和 InnoDB(5.6+)引擎。不适用于以通配符开头的 LIKE 查询(如。TEXT/BLOB 等大字段(考虑前缀索引)索引列的值必须唯一,但允许 NULL 值。范围查询(>, <, BETWEEN)特殊的唯一索引,不允许 NULL 值。索引的叶子节点存储了完整的数据记录。Memory 引擎的默认索引类型。查询的列都包含在索引中,无需回表。只有精确匹配所有列的查询才有效。最基本的索引类型,无特殊约束。对文本列的前N个字符建立索引。等值查询(=, IN())

2025-04-21 17:42:55 602

原创 MySQL 五种存储引擎详解及对比

MySQL 5.5+ 后的默认存储引擎支持(ACID 兼容)实现(并发性能好)支持提供能力使用(多版本并发控制)数据存储在中(可配置为每表单独文件)支持需要事务支持的应用程序高并发读写操作需要外键约束的应用大多数 OLTP(在线事务处理)系统。

2025-04-21 09:26:59 1742

原创 CompletableFuture异步处理与消息队列异步处理对比

比如,用户提交了一个订单,用runAsync处理后续的发邮件通知,这时候服务器突然挂了,这个任务可能没执行,邮件也就没发出去。比如,订单创建后,可能需要同时通知库存服务、日志服务、推荐服务等等,这时候用消息队列的发布订阅模式就很方便,每个服务订阅同一个主题,各自处理自己的逻辑。比如,订单服务处理完订单后,需要通知库存服务扣减库存,这时候如果用消息队列,订单服务发个消息,库存服务订阅这个消息,各自独立运行。但对于需要可靠性的任务,比如订单处理,必须确保任务完成,这时候可能需要消息队列。另外,任务的可扩展性。

2025-03-07 22:11:30 715

原创 Java中调用智谱ai报超时错误java.lang.RuntimeException: java.net.SocketTimeoutException: timeout的解决方法

请求的等待时长是10s,当超过这个时间,则会报错,所以我们不能使用这个最基本的创建方式,而选择在构造时加一些自己的配置,所以我们使用。主要问题:调用智谱ai时报:java.net.SocketTimeoutException: timeout,超时错误。的三个参数分别是连接池中最大空闲连接数、空闲连接在连接池中保持存活的最长时间,第二个参数的时间单位。当中的四个时间不要设置的太小(单位秒),不然可能还会报。以上是四个时间的有关概念,最后第五个参数是时间单位。连接配置,前面四个时间分别是。

2025-01-03 13:53:52 815

原创 SpringBoot单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext错误的解决方法

SpringBoot单元测试报java.lang.IllegalStateException: Failed to load ApplicationContext是因为使用了websocket以及解决方法

2024-12-31 16:50:38 3201 3

原创 Hanoi(汉诺塔)问题

这是一个经典的递归的问题,我们将问题简化拆解,n个盘子(从上到下编号为1,2,3,....,n-1,n)我们将其上面的n-1个盘子看成一个盘子,就将问题简化成了两个盘子的hanoi问题。现在我们就看如何让两个盘子从第一根柱子放在第三根柱子上,我们可以先把上面那个盘子放在第二个柱子上,然后把下面那个盘子放在第三根柱子上,最后我们将第二根柱子上的盘子(也就是上面的那个盘子),由第二根柱子放在第三根柱子上,这样我们就完成了任务。现在我们就看如何让两个盘子从第一根柱子放在第三根柱子上,我们可以先把上面那个盘子放在

2023-12-02 11:08:56 503 1

原创 回文数的判断

现在我们定义该函数为palindromeNumber()其返回值为void。我们先定义一个数组arr【4】,题目中最大数字为3000,我们可以选择容量为4的数组,定义变量x,用来存放每一个判断的数,定义变量num用来作为数组下标。接着利用一个for循环将我们所要判断的数字的范围作为循环,然后将i赋值給x,while将数的每一位数都存放到数组中,因此在进行一次,最后判断比较第一位与最后一位数字是否相同,第二位与倒数第二位数字是否相同,如果相同,则输出该数字,且进入下一次循环,继续判断,直至结束。

2023-11-30 21:20:31 268

原创 变种水仙花(Lily Number的判断)

我们创建一个函数*func*,用来计算一个数的拆分后的乘积和。接着我们利用*while循环*来实现一个数的拆分后的成绩和,循环中我们进行(x % a) * (x / a)*的操作即是拆分后的乘积(*a*为拆分一个数的断点,如a=10的话就是将一个数从十位拆成左边和右边)。将它的值存放在sum中,然后让a自乘10来进行下一位的拆分,将其值也自加在*sum*中,最后返回将sum作为返回值。最后在主函数的*for循环*中用if判断语句,判断i的值与函数的返回值比较如果相等则该数是Lily Number.

2023-11-26 14:57:41 238 1

空空如也

空空如也

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

TA关注的人

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