- 博客(79)
- 收藏
- 关注
原创 使用Jmeter进行核心API压力测试
JMeter 是 Apache 旗下的基于 Java 的开源性能测试工具。最初被设计用于 Web 应用测试,现已扩展到可测试多种不同的应用程序、服务和协议,例如 HTTP、FTP、JDBC、SOAP、REST 等。它能模拟大量并发用户向目标系统发送请求,收集并分析系统在不同负载下的性能数据,帮助测试人员评估系统的性能和瓶颈。
2025-05-08 20:45:00
1256
原创 MySQL事务隔离级别的实现原理MVCC
MVCC(Multi-Version Concurrency Control),即多版本并发控制,是并发读写场景下,数据库层面提供的一种解决方案。读读当多个事务同时进行读取操作时,它们之间不存在资源竞争,不会产生任何问题。因为读取操作并不会对数据进行修改。读写在这种场景下,一个事务进行读取操作,另一个事务进行写入操作,可能会引发一系列数据一致性问题,如脏读(读取到其他事务未提交的数据)、不可重复读(在同一事务中多次读取同一数据结果不同)以及幻读(事务执行过程中出现新的符合条件的数据)。
2025-04-29 20:00:00
1930
1
原创 从并发问题衍生出的Spring的七种事务传播行为
最近在处理一个BPM流程时,遇到了并发问题,原因是事务粒度太大了,导致等待lock超时。今天刚好借此机会分享下Spring框架中提供的7种事务传播行为。在 Spring中,@Transactional 注解支持配置事务的传播行为,用于指定当一个事务方法被另一个事务方法调用时,如何处理事务边界。Spring 定义了 7 种传播行为。
2025-04-23 20:15:00
333
原创 鉴权总翻车?原来浏览器藏着失效 Cookie「定时炸弹」
后端服务现在最常见的鉴权方式就是IDaaS了,即Identity as a Service(身份即服务),当用户通过IDaaS认证成功后,IDaaS会给用户浏览器设置一个身份凭证,通常是JWT(Json Web Token), 这些凭证通常以Cookie的形式保存到本地浏览器,但是浏览器会缓存多个失效的Cookie。Cookie失效之后,服务端在处理Http请求时,拿到失效的Cookie去验证用户身份,就容易踩坑,以下是服务中的代码。最近在做服务治理的工作时,发现了一个历史遗留bug,今天就给大家分享下。
2025-04-21 20:11:42
162
原创 当 SQL 优化走到尽头:OceanBase 看板系统的救命解法
如果你发现SQL本身已经优无可优,而该SQL支持的业务功能,几乎一直在超时,没法使用,这个时候你会怎么办?我们业务系统有一个看板的功能,提供给决策层看数据使用用。指定一个现成的 SqlSessionTemplate,更偏向于直接使用已配置好的会话模板。指定一个工厂类,MyBatis 会通过该工厂动态创建会话或模板,适合需要灵活配置的场景。在SQL层面,我们把能想到的所有优化手段都用遍了,发现看板功能还是不能使用,频繁超时。最后我们替换了新的数据源Lindorm,加工一张宽表,然后建了列存索引,完美解决(
2025-04-17 21:50:03
173
原创 别再只知道加索引!MySQL 查询慢还有这些 “元凶”
对于连接管理,MySQL的5.7版本最大连接数默认是151, 而客户端现如今都是使用数据库连接池。使用以下命令即可更改数据库默认的最大连接数。
2025-04-01 20:30:00
282
原创 1000 万数据重刷遇坑:老程序员也常忽略的分页查询陷阱与优化(下)
在上一篇文章《1000 万数据重刷遇坑:老程序员也常忽略的分页查询陷阱与优化(上)》中,我们提到了使用游标分页的方式去优化千万数据的查询。游标分页的方式虽然可以有效的减少查询时间,但是其不支持跳页。业务层的代码见《1000 万数据重刷遇坑:老程序员也常忽略的分页查询陷阱与优化(上)》。本文重点分析SQL。以下是原始SQL。直接说结论,使用覆盖索引来优化该SQL。以下是优化后的SQL。或者这两个SQL查询在逻辑是等价的,最终的执行结果也是一样,唯一的区别就是语法。按照惯例,我们使用explain命令来查
2025-03-03 23:31:26
375
原创 1000 万数据重刷遇坑:老程序员也常忽略的分页查询陷阱与优化(上)
最近在处理一个历史遗留问题的时候,踩到了一个坑。估计很多老程序员平时也很容易忽略。
2025-02-26 21:49:21
414
原创 探秘 Spring Boot Starter:为何它是 Spring Boot 框架的灵魂所在
它是 Spring Boot自动配置、依赖管理、启动流程的核心入口。理解它如何通过 @SpringBootApplication 整合条件装配(@Conditional)、加载 META-INF/spring.factories 等机制,是掌握 Spring Boot 的关键。启动阶段:spring-boot 提供入口,spring-core 提供容器基础。配置加载:snakeyaml 解析 YAML,spring-boot-autoconfigure 根据配置和条件装配 Bean。日志管理。
2025-02-17 20:49:45
289
原创 使用Arthas进行热更新:紧急情况下的救火利器
实时监控:可以实时监控JVM的运行状态,如线程、内存、GC等。方法调用追踪:可以追踪方法的调用链路,帮助定位性能瓶颈。关于这两点特性的具体使用可以看arthas官方文档。热更新:可以在不重启应用的情况下,动态更新Java类的代码。在紧急情况下,Arthas的热更新功能尤为实用,能够帮助我们快速修复线上问题,避免因重启应用而带来的服务中断。Arthas的热更新功能在紧急情况下为我们提供了一种快速修复线上问题的手段,避免了因重启应用而带来的服务中断。
2025-02-12 21:34:54
868
原创 DeepSeek:颠覆想象的AI新物种,为何一夜之间火遍科技圈?
智能编程:根据自然语言描述自动生成Python/Java代码,首次运行通过率为92.3%,远超GPT-4的78.6%。数据分析:30秒处理百万级数据集,生成动态可视化报告算法优化:在LeetCode测试中,解题方案超越85%人类工程师。
2025-02-09 22:36:36
686
原创 在每一次灵感碰撞中,见证成长的蜕变--24年年度总结
我也来写一个年度总结吧。从24年8月5号开始了职业生涯的第一篇创作,当时刚好被拉去封闭开发了,做一个保密的AI赋能业务的项目。当时写博客的初衷。没想到文章发布之后,整体反馈还是挺不错的,也收获了不少粉丝,实在是意外之喜。浅浅的记录下。从8月5号到12月31号,历时4个月,148天。总共创作了61篇文章,收获了530个粉丝、以下是一些快照记录。
2025-01-26 15:55:28
450
原创 Spring Boot Starter探秘:全面了解 spring-boot-starter-web
spring-boot-starter-web 是 Spring Boot 框架里用于构建 Web 应用程序的核心启动器,它极大地简化了 Spring Web 应用的开发流程,通过自动配置和依赖管理,可以快速构建RESTful API 服务和传统的基于 MVC 的 Web 应用,后者现在基本很少用了,Vue的出现,现在基本都使用前后端分离的开发模式。@Data@NotBlank(message = "用户名不能为空")@Email(message = "邮箱格式不正确")
2025-01-20 21:00:00
1229
原创 线上工单引发的思考:Spring Boot 中 @Autowired 与 @Resource 的区别
最近接手了离职同事负责的业务,在处理一个线上工单的时候,看了下历史逻辑,在阅读他们写的代码时,发现他们竟然把@Autowired和@Resource注解混用。今天就借此机会聊聊SpringBoot项目中这两者之间的区别。
2025-01-16 22:04:40
984
原创 《揭秘客服 RPA:网购背后的智能助手》
通过浏览器自动化框架(如Selenium、Puppeteer、DrissiornPage)就可实现,个人比较喜欢使用DrissiornPage,关于DrissiornPage的最佳实践可看本人的。,防止大模型偶尔答非所问,同时,通过不断优化prompt,客户助手的智能化程度会在提升一个level, 用户的购物体验也会更好。在如今的网购时代,我们的购物体验不仅仅取决于商品的质量和价格,还与购物过程中的服务密切相关。当遇到双十一,双十二,618这种大型购物节的时候,客服助手RPA会发挥更大的作用。
2025-01-05 21:00:00
334
1
原创 使用Spring AOP增强你的开发体验:最佳实践分享
AOP(Aspect-Oriented Programming,面向切面编程),是一种编程思想,其核心目标是将关注点模块化。它允许开发人员分离程序中的横切关注点,即那些与业务逻辑不直接相关,但又跨越多个模块的功能,比如日志记录、安全控制、事务管理等等。在传统的OOP(面向对象编程)中,这些横切关注点往往会导致代码重复和降低可维护性,而AOP则通过定义切面(Aspect)来处理这些问题。另一种实现AOP的方式是通过继承AbstractPointcutAdvisor类。
2024-12-29 21:29:45
565
原创 Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(下)
大家还记得上一篇博客中,我们提到dynamic-datasource-spring-boot-starter的自动配置类DynamicDataSourceAutoConfiguration在初始化的时候还创建了一个DynamicDataSourceProvider类型的bean嘛?而@DS注解标注的就是数据源的Key。介绍了dynamic-datasource-spring-boot-starter的自动配置类和配置属性类之后,本文继续来剖析多数据源是如何切换的,什么时候切换的。看到这里,我们知道,
2024-12-26 20:51:58
1483
原创 Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
dynamic-datasource-spring-boot-starter 是一个用于在 Spring Boot 项目中实现动态数据源切换的工具。在实际的应用开发中,经常会遇到需要连接多个数据源的情况,例如一个销售系统会根据不同的业务模块,如线索、订单、库存、物流等连接到不同的数据库。手动管理多个数据源的切换和配置是一项复杂且容易出错的任务,而这个 starter 就是为了解决这些问题而生。
2024-12-22 20:00:00
2790
2
原创 一招解决重定向难题:为什么使用HTTPS就能避免308和307重定向?
今天在上线的时候,遇到一个重定向的问题。在使用postman或者在shell终端通过curl命令直接调用API的时,请求能到达服务端并响应。然而,通过http客户端发起请求,使用公网的域名就会显示308,永久重定向。而内网的域名就会显示307,临时重定向。我的url如下,使用的是http协议。先说结论,
2024-12-18 21:39:03
1091
原创 一分钟上手:如何创建你的第一个 Spring Boot Starter
Spring Boot 的 starter 本质上是一种依赖管理和自动配置的机制。它将一组相关的依赖库整合在一起,并提供了默认的配置,使得开发者在需要使用特定功能时,只需简单地在项目中引入对应的 starter,Spring Boot 就能自动完成配置,让相应的功能开箱即用,无需手动去配置繁多复杂的各种依赖参数。
2024-12-15 20:36:12
1226
原创 避免版本冲突:Spring Boot项目中正确使用Maven的DependencyManagement
项目中的每个模块通常都会依赖很多jar包,当jar包越来越多时,通常会把每个模块用到的公共的jar包提取出来,构建父POM文件。如此一来,在服务的jar包版本升级时,只需要升级父POM管理的jar包版本,子项目或者子模块就会自动生效,而不需要按个升级每个子项目的jar版本。当我们在开发一个大型的后端项目时,模块通常很多,我们会使用Maven或者Gradle来管理项目,我们项目使用的是Maven。因此,子项目或者子模块想要使用父POM管理的jar包,直接引入即可,不需要指定版本号。这样做的好处是:通过。
2024-12-11 21:13:24
646
原创 本地缓存更新了,配置却没生效?Apollo 生效机制全揭秘!
虽然Apollo提供了强大的动态配置管理能力,但并非所有配置项都适合动态刷新。对于那些在应用启动时加载并绑定到关键组件、资源或框架的配置,更新后必须重启服务才能确保配置变更生效。所以在实际的开发中,一定要区分哪些配置是可以实时更新生效的,哪些必须重启服务才能生效,以便在遇到紧急的线上问题,让你变得更加从容。
2024-12-10 20:44:57
665
原创 巧用设计模式:Apollo 打造高效稳健的配置管理体系
Apollo配置中心的源码中,使用了如上多种设计模式,包括但不限于单例模式、工厂模式、观察者模式、策略模式等。这些设计模式的应用,提高了系统的灵活性和可维护性,方便扩展和修改。同时,也体现了面向对象设计中的重要原则,如开闭原则、单一职责原则、依赖倒置原则等。
2024-12-08 18:40:25
812
原创 从 @PreAuthorize 看 Apollo 如何玩转权限管理
PreAuthorize 注解用于在方法执行之前基于表达式对用户进行权限验证。hasRole(‘ROLE_NAME’): 用户是否具有指定的角色。hasAuthority(‘AUTHORITY_NAME’): 用户是否具有指定的权限。principal: 当前认证用户的主体信息。#parameterName: 方法参数,可以在表达式中使用方法参数。
2024-12-05 22:30:02
868
原创 Apollo配置中心揭秘:如何巧妙实现环境隔离?
在之前的文章中,我们提到Apollo的可以支持多环境、多集群灵活配置。今天我们来探究下Apollo是如何实现环境隔离的。
2024-12-03 23:34:17
525
2
原创 一文看懂 Apollo 长轮询实现方式,配置更新不再神秘!
上一篇文章中,我们提到,Apollo的配置更新采用了长轮询的方式。今天我们深入探究下长轮询是如何实现的。
2024-12-01 21:45:00
958
原创 解决深夜告警困扰:如何优化不稳定的RPA数据抓取与下游依赖
我们的服务主要是一个自动数据抓取的RPA,部署在云服务提供商提供的Windows虚拟机上。通过Windows的任务计划程序,我们定时触发RPA脚本(凌晨),自动从指定的平台代替人力抓取数据并下载,然后将下载的数据通过API回传到我们自己的业务系统中。用于后续的逻辑处理和数据加工。需要注意的是,我们的业务系统是以Docker容器的方式部署在云服务器上的。这意味着业务系统和RPA脚本运行的机器并不在同一环境下。对于熟悉RPA的人来说,都知道RPA在实际运行中可能会遇到各种不稳定因素。例如,当。
2024-11-27 22:17:28
701
原创 揭秘 Apollo 配置更新奥秘:推拉结合,新鲜配置一手掌握!
上一篇文章中,我们聊到了SpringBoot项目在启动时,会通过@EnableApolloConfig注解启用Apollo客户端,在启动的过程中,会注册一个名为ApolloAnnotationProcessor的Bean,它会处理Apollo提供的相关注解,如@ApolloConfig, @ApolloJsonValue等,本节我们来探讨下Apollo配置的更新机制以及更新时机。
2024-11-25 22:09:22
1019
原创 Apollo 客户端入驻 Spring Boot 项目,启动时究竟暗藏哪些玄机?
如ApolloAnnotationProcessor。它是 Apollo 与 Spring 集成的核心组件。
2024-11-21 22:50:55
962
原创 深入解析动态代理:切点执行之前的方法代理是如何生成的?
动态代理(Dynamic Proxy)是一种在程序运行时动态创建代理对象的机制,它能够在不修改原始类代码的基础上,对目标对象的方法调用进行拦截、增强或修改等操作。
2024-11-17 20:00:00
1833
1
原创 探索微服务中的权限控制:一次线上问题排查的思考
在这篇博客中,我将分享一个近期在排查线上问题时,意外发现的权限控制实现方式。起初,这个问题让我迷惑不已,因为在前端请求中,有个权限控制参数为 null,但在请求从网关进入微服务后,该参数神秘地有了值。经过一番深入探究,我找到了答案:原来这背后是一段优雅的切点代码。
2024-11-13 21:29:44
364
原创 开发必知!加密手机号的模糊与精准匹配实用技巧全解析
在日常的开发工作中,为了数据安全,我们经常会对重要的数据进行加密,比如客户手机号、身份证号、银行卡号等。今天我们就来探讨下,加密后的手机号如何进行模糊匹配以及精准匹配。
2024-11-12 00:08:57
538
原创 揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
配置管理是微服务架构中不可忽视的重要环节。随着服务数量的增加和系统复杂度的提升,传统的配置管理方式已经无法满足需求。引入配置中心,能够有效地解决配置管理的挑战,提高系统的稳定性和运维效率。Apollo作为优秀的开源配置中心解决方案,已经在众多企业和项目中得到了成功的应用。通过集中化的配置管理、实时推送、完善的权限控制以及灵活的环境支持,Apollo 为微服务架构下的配置管理提供了强有力的保障(后面会出一系列文章来深入剖析Apollo的源码。
2024-11-07 22:02:54
374
原创 掌握 EasyExcel:让 Excel 导入导出变得如此简单!
EasyExcel 是阿里巴巴开源的一个基于 Java 的简单、快速、小巧的 Excel 处理库。它旨在简化 Excel 文件的读写操作,提高开发效率,减少内存消耗。与传统的 Apache POI 相比,EasyExcel 在处理大文件时性能更优,更适合企业级应用。EasyExcel以其优秀的性能和简便的使用方法,在Java处理Excel问题上提供了极为有效的解决方案。对于日常工作中频繁遇到的数据导入导出场景,比如用户信息批量导入、订单数据导出、统计报告生成等,EasyExcel都能帮助我们高效完成任务。
2024-11-04 23:49:22
958
原创 从504错误谈API网关:微服务架构的隐形守护者
最近,我们的线上环境多次出现 504(Gateway Timeout) 错误。经过排查,发现是由于存在慢 SQL 查询,导致 HTTP 请求无法在服务器设定的时间内获得响应。借此机会,我们来聊聊网关在微服务架构中的重要性。
2024-10-31 22:17:53
681
原创 揭开 Feign 神秘一角:已注册 Bean(绑定 Factory)究竟何时实例化并生成代理类?
通过对 Feign 调用机制的深入探究,我们揭示了它在微服务通信中的奥秘。@FeignClient 注解使微服务接口得以暴露,而 @EnableFeignClients 注解则确保了这些接口在 Spring Boot 应用启动时被扫描并注册。在上下文刷新时,这些接口的代理类会被生成,用于服务通信,在通信过程中通过 Ribbon 选择具体的服务节点,并使用 Okhttp作为其Http客户端进行具体的网络通信。
2024-10-29 21:00:00
711
原创 探秘 Feign 核心注解:@FeignClient 和 @EnableFeignClients 是如何打通微服务通信的 “任督二脉” 的?
FeignClient 和 @EnableFeignClients 是 Feign 框架中至关重要的注解,通过剖析 @FeignClient @EnableFeignClients ,我们可以更好的理解 Feign 是如何自动扫描、完成注册操作。这种自动化的机制,大大简化了微服务之间的通信,使开发者能够专注于业务逻辑,而无需关心底层的调用细节。
2024-10-27 22:30:00
4415
原创 微服务通信背后的秘密:Ribbon 如何选择最佳服务实例?
Ribbon 在微服务架构中扮演着至关重要的角色,通过与Eureka等服务注册中心的紧密集成,Ribbon能够动态地获取服务实例的最新列表,并应用多种负载均衡策略来优化请求分发。在各类策略中,轮询被视为最基础且有效的手段,不仅简单易懂,还为其它复杂策略提供了兜底保障。这种兜底机制的编程思维在软件开发中尤为重要,这才是真正区分菜鸟程序员和高级程序员差异的地方。最后,在这个特别的日子里,向所有程序员致敬!
2024-10-24 22:39:20
668
原创 揭秘 Feign 调用机制:微服务通信的无缝集成
Feign 是一个声明式的 Web 服务客户端。它通过注解的方式,将接口方法映射为 HTTP 请求,极大简化了微服务之间的通信。Feign 的设计灵感来源于 Retrofit、JAX-RS 和 WebSocket,在 Spring Cloud 生态中扮演着重要角色,广泛应用于微服务间通信。通过 @FeignClient 注解,声明了一个名为 CustomerFeign 的接口,该接口将作为与customer-api微服务通信的客户端。
2024-10-22 23:09:06
968
原创 批量账号校验RPA:自媒体运营的提效利器
通过上述步骤,我们成功地实现了批量账号的校验。这个过程不仅为小明解决了自媒体账号筛选的难题,也为其他面临类似问题的新媒体人提供了一种高效的解决方案。如果大家在这个过程中有任何疑问,欢迎在评论区留言讨论。让我们一起探索 AI+RPA 的更多可能性,为我们的工作和事业带来更多的助力。
2024-10-19 00:10:01
434
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人