自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 @Autowired 的Bug让我们白忙三天

两个“看似无害”的 PR 如何在凌晨 2 点联手击碎生产环境的依赖注入。我们的首席架构师在一个构造器上加了 @Autowired,应用能编译。测试通过。代码评审也过了。然后凌晨两点,生产炸了,NullPointerException 到处都是。

2025-10-27 21:31:29 898

原创 聊聊Java里的那把锁:ReentrantLock到底有多强大?

说实话,在平时的开发中,synchronized确实能满足80%的需求。但当你需要更细粒度的控制,比如可中断的锁获取、超时机制、多个条件变量时,ReentrantLock的优势就体现出来了。不过也要注意,能力越大责任越大。ReentrantLock用起来比synchronized复杂,需要手动加锁解锁,要是忘了解锁,那问题就大了。所以我的建议是:先用synchronized,当它真的不够用时,再请出ReentrantLock这把利器。毕竟,合适的工具用在合适的场景,才是最好的编程实践。

2025-10-27 21:26:40 723

原创 从一次启动失败深入剖析:Spring循环依赖的真相

什么是Bean循环依赖?循环依赖:说白是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用,主要有如下几种情况。第一种情况:自己依赖自己的直接依赖第二种情况:两个对象之间的直接依赖前面两种情况的直接循环依赖比较直观,非常好识别,但是第三种间接循环依赖的情况有时候因为业务代码调用层级很深,不容易识别出来。循环依赖场景@Service@Service结果:项目启动失败抛出异常BeanCurrentlyInCreationException。

2025-10-27 21:16:38 324

原创 如何集成ElasticSearch到Spring Boot+MySQL项目中

数据双写:保证 MySQL 和 ElasticSearch 数据一致性高效搜索:利用 ElasticSearch 的全文搜索能力复杂查询:支持多条件组合和相关性排序系统监控:确保搜索服务的稳定性这种架构模式既保留了关系型数据库的事务特性,又获得了搜索引擎的高性能查询能力,是构建现代 Web 应用的理想选择。

2025-10-27 20:47:22 667

原创 见过哪些醍醐灌顶的Java代码:从“卧槽“到“原来如此“的顿悟

看完这些例子,你可能会说:"卧槽,原来代码还能这么写!但我想说,这只是冰山一角。编程就像修行,每一次顿悟都是一次成长。所以,下次写代码的时候,不妨多想想:这段代码十年后还有人愿意维护吗?如果答案是肯定的,那你就是真正的编程大师了。"代码不是写给机器看的,是写给下一个维护你的人看的——而那个人很可能就是未来的你。

2025-10-27 20:38:37 454

原创 SpringBoot 和 MySQL 的事务隔离级别关系

隔离级别Spring定义MySQL定义脏读不可重复读幻读DEFAULT使用数据库默认级别可能可能可能不可能可能可能REPEATABLE READ (MySQL默认)不可能不可能可能*不可能不可能不可能*注:MySQL的InnoDB引擎通过MVCC机制在REPEATABLE_READ级别解决了幻读问题。

2025-10-24 20:41:25 825

原创 SpringBoot 优雅实现接口的多实现类方式

订单处理中需要调用支付服务。

2025-10-24 20:39:54 195

原创 滴滴二面:MySQL执行计划中,Key有值,还是很慢怎么办?

是否 Using index 或 Using where;字段,看是否 Using where;SQL 确实用了索引 idx_col2(key 列)。(type=index)导致的,意味着索引没加速查询。说明索引并没有按照预期优化查询性能,而是发生了。,即遍历整个索引树,而不是通过索引加速查询。问题分析:type=index 代表什么?如果 type=index,说明。如果是 NULL,说明没用索引。,只是扫描的是索引而非数据表。值越大说明查询性能越差。

2025-10-24 20:33:00 289

原创 Dubbo RPCContext存储一些通用数据,这个用手动清除吗?

如果你的应用使用线程池(如 ExecutorService)处理 Dubbo 请求,线程池不会自动清理 RpcContext,导致数据污染。因为线程池可能会复用 ThreadLocal 的数据,导致下一个请求仍然携带上一个请求的 RpcContext 数据。如果你在 Dubbo Filter 里存放了 RpcContext 的数据,可能不会自动清理,影响后续请求。处理完请求后,会清理 RpcContext,防止数据泄漏到下一个请求。:拦截所有 Dubbo 方法调用后自动清理 RpcContext。

2025-10-24 20:30:47 917

原创 快手二面:乐观锁是怎么用它来处理多线程问题的?

先读出 version,更新时携带 WHERE version=?,受影响行数=1 视为成功,否则重试。它适合低冲突场景,用失败重试代替阻塞等待,热点写时要换成排队/悲观锁/批处理并配合退避与幂等。要点:在 Redis 内一次完成校验与扣减,原子且无重试风暴,配合消息/DB 最终一致。乐观锁不加互斥锁阻塞线程,而是让线程先读数据并计算,提交写入时检查版本是否被别人改过。(同一 Key 高并发频繁冲突),会导致大量重试与 CPU 浪费。要点:轻量 CAS,适合低,中冲突,高冲突会频繁失败重试。

2025-10-24 20:28:42 514

原创 SpringBoot+WebSocket实现直播连麦

随着互联网技术的发展,直播已成为一种主流的内容传播形式。其中,连麦功能作为直播互动的重要手段,能够有效提升用户参与感和观看体验。本文将介绍如何使用SpringBoot和WebSocket技术构建一个直播连麦系统,实现主播与观众之间的实时音视频交流和文字聊天功能。为了方便DEMO的运行,本系统基于纯内存操作实现核心业务逻辑,不依赖外部数据库或者缓存组件。

2025-10-23 20:25:51 926

原创 Spring Boot Filter、Interceptor、AOP 的使用场景与选型

选择合适的技术取决于具体需求、性能考虑和团队熟悉度。在实际应用中,合理组合使用这三种技术可以构建更加模块化、可维护的应用程序。对于 Spring Boot 应用程序,推荐遵循"责任分离"原则,根据横切关注点的性质选择最合适的实现方式,让代码结构更加清晰,逻辑更加分明。

2025-10-23 20:19:08 812

原创 最新Java 面试题!Redis篇(全网最全、最细、含答案,全解析)

缓存击穿跟缓存雪崩有点类似,缓存雪崩是大规模的key失效,而缓存击穿是某个热点的key失效,大并发集中对其进行请求,就会造成大量请求读缓存没读到数据,从而导致高并发访问数据库,引起数据库压力剧增。这种现象就叫做缓存击穿。从两个方面解决,第一是否可以考虑热点key不设置过期时间,第二是否可以考虑降低打在数据库上的请求数量。

2025-10-23 16:05:06 894

原创 武装你的Python“工具箱”:盘点10个你必须熟练掌握的核心方法

字符串处理是我们日常编程中最高频的操作之一。

2025-10-22 21:40:18 125

原创 用 Python 揭秘 IP 地址背后的地理位置和信息

首先,请确保你的Python环境中安装了requests库。第一步:查询自己的公网 IP 信息运行后,你将看到类似这样的输出(信息会根据你的实际情况而变):第二步:查询任意指定的 IP 地址我们可以查询任何一个我们想查的公网IP,比如谷歌的公共DNS服务器 8.8.8.8。输出将会是:第三步:自由封装成自己需要的内容显示库示例结语点个赞,关注我获取更多实用 Python 技术干货!如果觉得有用,记得收藏本文!

2025-10-22 21:36:30 174

原创 最新JVM 常考面试题(全网最全、最细、含答案,全解析)

我使用 jmap 命令,导出了一份线上堆栈,然后使用 MAT 进行分析,通过对 GC Roots 的分析,发现了一个非常大的 HashMap 对象,这个原本是其他同事做缓存用的,但是做了一个无界缓存,没有设置超时时间或者 LRU 策略,在使用上又没有重写key类对象的hashcode和equals方法,对象无法取出也直接造成了堆内存占用一直上升,后来,将这个缓存改成 guava 的 Cache,并设置了弱引用,故障就消失了。第三,由于缓存的使用,有大量的弱引用,拿一次长达 10 秒的 GC 来说。

2025-10-22 21:21:22 1683

原创 Java通用枚举还能这样做?前后端终于不扯皮了!

“又双叒叕改枚举了?!”前端同学看着后端刚提交的,稍稍增加了一个新状态值的接口文档,默默叹了口气,熟练的打开了自己维护的 constants.ts 文件。后端同学在心里嘀咕“不就加个状态吗?前端改个下拉框不就行啦?至于每次都要我同步吗?”这熟悉的一幕,几乎每天都会上演。为了减少前后端同学的扯皮,有没有一种方式,能让一份定义,两端通用?答案是:有!而且比你想象的更优雅、更强大。 今天就来揭秘我在项目中使用的这种让前后端都拍案叫绝的“通用枚举”,彻底让前后端同学不在扯皮?共提供两种枚举的返回类型,比如有枚举类U

2025-10-20 20:12:16 326

原创 十年大厂员工终明白:MySQL性能优化的尽头,是对B+树的极致理解

由于B+树非叶子节点都只是索引值,这就意味B+树一次I/O,相比于B树能读出的索引值更多,从而减少查询时候需要的I/O次数。不同于操作系统,InnoDB引擎的页大小默认是16KB,如下估算: 1)非叶子节点存放(key,pointer),假设主键ID为bigint类型,长度为8字节,而指针在InnoDB源码中为6字节,一共14字节,即非叶子节点能存放 16KB/14 左右的(key,pointer)。B+树是B树的一种变种,它与B树的区别是: 叶子节点保存了完整的索引和数据,而非叶子节点只保存索引值。

2025-10-20 20:06:14 808

原创 想给面试官吹DDD吗?项目像搭积木一样运行:领域驱动设计(DDD)让复杂业务变简单

先回顾实体,实体他是有自己的身份的,实体关心的"是谁",对于实体来说"身份证号码是唯一的",哪怕属性变了,只要 ID 一样就是同一个人!从上面不难看出,聚合根是聚合的代表以及入口,外部的直接只关心聚合根的 id,其他成员对象即使有自己的 id 也不能作为聚合整体的唯一标识。是指在业务中具有唯一标识的对象,实体的主要特征就是持续的身份(即使属性发现变化,但是它的身份不变,它一直是那个实体)。首先明白仓储的本质就是面向领域的接口,是"用业务的视角"去查找和保存领域对象,不直接关系底层数据库/缓存的实现细节。

2025-10-20 19:58:56 452

原创 最新Java基础面试题!MyBatis篇(全网最全、最细、含答案,全解析)

原因就是namespace+id是作为Map<String, MappedStatement>的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。嵌套查询是先查一个表,根据这个表里面的结果的外键id,再去另外一个表里面查询数据,也是通过association配置,但另外一个表的查询是通过select配置的。嵌套查询是先查一个表,根据这个表里面的结果的外键id,再去另外一个表里面查询数据,也是通过collection,但另外一个表的查询是通过select配置的。

2025-10-20 16:42:10 639

原创 最新Java基础面试题!Spring篇(全网最全、最细、含答案,全解析)

通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring Mvc 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎可以解决企业开发中的所有问题。Spring 框架的核心是 Spring 容器。

2025-10-20 16:32:58 935

原创 一个AI都无法提供的html转PDF方案

dompdf.js 让前端 PDF 生成变得前所未有的简单:无需后端、无需繁琐配置、一行代码即可输出矢量、可检索、可复制的专业文档。无论是简历、报告还是发票,它都能轻松胜任。欢迎在你的项目中使用它。

2025-10-19 19:56:32 324

原创 面试官问:MySQL 为什么不能用 Docker 部署吗?答错直接挂!

简单说,有状态容器就是:运行过程中必须“记住”数据。比如 MySQL、Redis、消息队列等,这些应用必须确保数据持久、可靠,哪怕容器重启、迁移、甚至崩溃,数据也不能丢。挂载数据卷(Volumes)绑定宿主机路径(Bind Mounts)使用网络存储(如 NFS、云盘)让数据活得比容器久。典型场景:数据库、文件服务器、缓存中间件等。难点:扩容复杂,数据一致性、同步、节点状态都需要严密设计,稍有不慎就会出问题。无状态容器则完全不同:它从来不关心自己的过去。

2025-10-19 19:52:14 882

原创 Spring 6.0+Boot 3.0:秒级启动、万级并发的开发新姿势

全面拥抱Java模块化特性,优化现代JVM性能轻量级线程支持高并发场景(需JDK 19+)电商秒杀系统、实时聊天服务等高并发场景。

2025-10-19 19:37:02 762

原创 最新Java基础面试题下篇(全网最全、最细、含答案,全解析)

反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

2025-10-18 21:01:54 749

原创 最新Java基础面试题上篇(全网最全、最细、含答案,全解析)

面向对象(封装,继承,多态);平台无关性,平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。可靠性、安全性;支持多线程。C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持;支持网络编程并且很方便。

2025-10-18 20:29:21 1109

原创 脏读、不可重复读、幻读详解与对比

​定义​:脏读是指一个事务读取了另一个事务尚未提交的数据修改。如果该事务最终回滚,读取到的数据就是无效的"脏数据"。​本质​:读取了可能被回滚的未提交数据,导致基于这些数据的后续操作可能产生错误结果。​示例场景事务A将账户余额从1000元修改为500元(未提交)事务B读取到余额为500元(脏读)事务A回滚,余额恢复为1000元事务B基于500元余额的错误数据进行了错误操作脏读、不可重复读和幻读是数据库并发控制的三大经典问题,理解它们的区别对于设计高并发、高可用的数据系统至关重要。

2025-10-17 21:52:45 693

原创 Spring Boot中,拦截器和Spring AOP有什么区别

拦截器和AOP本质是互补技术:​拦截器是Web层的“门卫”,控制请求进出Controller。​AOP是业务层的“手术刀”,解耦非核心逻辑。实际项目中常结合使用,例如用拦截器校验登录状态,用AOP记录Service方法耗时。

2025-10-17 21:51:16 755

原创 每日分享程序员掌握的知识之:SpringMVC源码篇

一、SpringMVC的基本结构1.MVC简介以前的纯Servlet的处理方式:为了尽量减少依赖Servlet API,提高程序的可测试性、可复用性而发展出了很多的框架技术:● Struts1● Struts2● SpringMVC经典面试题:Struts2和SpringMVC的区别1 请求映射上的区别。2 请求数据绑定上的区别。2.基本结构  然后我们来看看SpringMVC的基本结构从图中我们可以得到的相关信息1 有四个非常重要的角色2 DispatchServlet很重要3 谁来负责Contro

2025-10-17 21:21:05 790

原创 大模型应用开发03-结构化输出与智能导入

我们在开发很多业务系统时,经常需要使用到通过上传文件,将文件内容导入到系统数据库的需求。一般情况下,为了可以正常导入数据,需要用户首先下载模板,然后按照模板填写数据再进行导入。这个时候用户的工作量就大了,他可能有很多数据存在了一张excel表中,但是跟提供的模板不一致,需要将原来表中的数据再腾挪到新的模板文件中,这是这个功能非常耗时的点。那么通过接入大模型,让大模型来处理文件内容,并将结果按照指定的格式进行格式化输出就可以消除到导入数据需要按照模板填写的巨大工作量。

2025-10-16 21:55:45 403

原创 大模型应用开发02-如何在网页中嵌入3D人物

要实现的效果如图所示:左侧是插入的3D人物,类似AI智能助手的角色。我们这里是通过React做的。

2025-10-16 21:54:43 732

原创 大模型应用开发01-打造智能聊天助手

输入框还有上传和语音按钮,一个用于上传文本,作为提问的上下文,一个用于支持语音输入,这些都是可以实现的,感兴趣的评论区留言,考虑出一篇来介绍。Enjoy!

2025-10-16 21:52:50 895

原创 Spring Boot自动配置与“约定大于配置“机制详解

"约定大于配置"(Convention over Configuration)是一种软件设计原则,强调通过预先定义合理的默认行为和约定,减少开发者需要手动编写的配置。其核心思想是:"如果你遵循框架的约定,就无需显式配置;只有需要偏离约定时,才需要额外配置"。@Bean这样当项目依赖中包含MyService类且用户未自定义MyServiceBean时,自动配置生效。Spring Boot的自动配置和"约定大于配置"原则通过精心设计的机制实现了开发效率的革命性提升。

2025-10-15 20:09:01 997

原创 Spring Boot默认支持Logback的原因分析

Spring Boot 默认选择 Logback 是平衡性能、技术优势、生态整合和开发者体验的综合考量。Log4j2 虽在特定场景下更优,但其复杂性、资源消耗和配置成本不符合 Spring Boot“快速启动”的核心目标。开发者可根据实际需求灵活切换,但多数场景下 Logback 已足够高效可靠。

2025-10-15 19:57:06 612

原创 在DDD架构中,如何设计Domain层与Entity层的关系?

在DDD(领域驱动设计)架构中,与的关系是核心业务逻辑与数据模型的结合点,二者的设计直接影响系统的可维护性和扩展性。

2025-10-15 19:46:46 256

原创 每日分享程序员掌握的知识之:线程池篇

七个核心参数,都得会:● corePoolSize:核心线程数 (线程池内部运行起来之后,最少有多少个线程等活。核心线程是懒加载 )● maximumPoolSize:最大线程数 (当工作队列堆满了,再来任务就创建创建非核心线程处理。● keepAliveTime:最大空闲时间 (默认非核心线程,没活之后,只能空闲这么久,时间到了,干掉)● unit:空闲时间单位(上面时间的单位)● workQueue:工作队列 (当核心线程数足够后,投递的任务会扔到这个工作队列存储。

2025-10-15 16:59:14 928

原创 每日分享程序员掌握的知识之:ConcurrenHashMap篇

HashMap和ConcurrenHashMap在存储结构上是一模一样的。数组 + 链表 + 红黑树。点了几个东西:● 存储结构● 红黑树出现的原因● 链表何时转换为红黑树● 为什么链表长度为8才转红黑树● 红黑树结构情况下,如果删除元素,导致红黑树元素个数小于等于6,会退化为链表。● 数组扩容触发的两种情况。

2025-10-15 16:46:28 624

原创 springboot实现对接poi 导出excel折线图

为了清晰管理图表数据和在Excel中的位置,建议先定义两个实体类。这个类用于封装折线图的所有元素,包括标题、数据系列和X轴标签。@Data/*** 图表的名称(主标题)*//*** 每条折线的名称(图例)*//*** 每条折线对应的数据值*//*** X轴的数据点标签(如:月份、季度)*/这个类用于精确定义图表在Excel工作表中的位置和大小。@Data/** 图表左上角所在的列索引(从0开始) *//** 图表左上角所在的行索引(从0开始) */

2025-10-14 21:07:07 275

原创 别再用 if err != nil 了,学会这几个技巧,假装自己是Go大神

有经验的开发者通常会定义自己的错误类型。这些通常是实现了 error 接口的结构体。这样做的好处是,自定义错误可以携带额外的、结构化的数据。这样一来,代码的调用方就可以通过编程的方式来检查错误,而不是靠匹配字符串。他们可以使用 errors.As 来提取特定类型的自定义错误,或者用 errors.Is 来检查错误链中是否匹配某个已知的“哨兵错误”(sentinel error)。这样 API 变得更稳定、更易用。

2025-10-14 21:05:37 641

原创 Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目

通过这篇实战,我们掌握了如何:✅ 使用 Makefile 自动化构建 Go 项目 ✅ 实现清理、测试、版本注入、交叉编译 ✅ 一键部署到远程服务器make即可完成全流程自动化,让 Go 开发进入“丝滑”模式。

2025-10-14 21:02:05 281

空空如也

空空如也

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

TA关注的人

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