自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 日志系统 Kafka 积压处理有效方案

本文介绍了一种处理Kafka消息积压的高效方案。当消费服务故障导致500多万条日志积压时,采用"Topic分片放大法"快速解决:新建高分区数Topic,编写中转消费者程序将消息从原Topic转发至新Topic,利用多分区特性部署多实例快速消费。该方法无需修改核心业务代码,通过数据迁移和并行加速可提升5-10倍消费速度。文章还对比了其他优化手段,强调不推荐盲目增加消费者或自动提交offset等危险做法。核心思路是"临时中转+分区放大+多实例消费",适用于Kafka、Ro

2025-12-24 09:35:01 200

原创 深入了解 Java `synchronized`:从对象头到锁升级、线程竞争感知

本文深入解析Java中synchronized的底层实现原理。其核心是通过对象头的Mark Word实现锁状态管理,采用锁升级策略(无锁→偏向锁→轻量级锁→重量级锁)优化性能。偏向锁通过线程ID比对实现零成本同步,轻量级锁使用CAS自旋,重量级锁则依赖操作系统阻塞。JVM通过操作反馈机制动态感知竞争,自适应调整锁策略。文章还揭示了biased_lock标志位的作用,解释了锁升级过程,并给出实践建议:合理使用偏向锁、避免同步块内调用hashCode()、高并发时可关闭偏向锁等。理解这些机制有助于在保证线程安全

2025-12-22 20:53:55 492

原创 Spring 的10个核心能力,对框架开发的启示

Spring框架通过10项核心能力实现了优雅的开发体验,包括:1.资源抽象与加载能力,统一处理各类资源;2.依赖注入与控制反转,降低代码耦合度;3.配置管理支持多环境适配;4.扩展点机制提供高度可定制性;5.完整的生命周期管理;6.统一的异常处理体系;7.跨平台环境适配能力;8.完善的测试支持;9.内置安全基础;10.性能监控与可观测性。这些能力共同构建了Spring"环境无关性"的设计哲学,使其既能满足基础开发需求,又能适应企业级应用的高要求。

2025-12-21 21:19:11 1105

原创 从 volatile关键字了解内存屏障与 MESI 缓存一致性协议

本文深入探讨了Java中volatile关键字的底层实现原理。通过一个典型并发问题引入,揭示了volatile如何通过内存屏障和MESI缓存一致性协议实现可见性和有序性。内存屏障控制指令顺序防止重排,MESI协议维护多核缓存一致性确保数据可见。文章详细分析了volatile读写操作中插入的特定屏障类型及其作用机制,并澄清了常见误区。最后指出理解这些底层机制对编写可靠并发代码的重要性,建立软硬件协同的系统观。

2025-12-20 17:58:04 925

原创 接口与实现分离:从 SPI 到 OSGi、SOFAArk的模块化演进

Java模块化机制演进:从SPI到轻量化方案 本文系统分析了Java生态中"接口与实现分离"的多种解决方案。SPI机制提供了基础的静态加载能力,但存在类加载冲突风险;OSGi实现了安全共享接口和动态模块化,但复杂度高;SOFAArk针对微服务场景进行了轻量化设计;Spring Boot插件和Java Agent则提供了特定场景的解决方案。这些技术各具特点:SPI简单易用但静态,OSGi功能全面但笨重,SOFAArk在Spring Boot集成和动态性上取得平衡。开发者应根据具体场景(如是

2025-12-16 23:19:09 1008

原创 关于40亿qq号只有1GB内存去重的实践和理解

本文分析了存储所有可能QQ号码的内存需求。计算显示,完整存储5-11位QQ号(约1万亿个)需要745GB内存,远超Java数组最大容量限制(约16GB)。为解决此问题,建议采用数据拆分策略:按QQ号后三位数值将数据分割成小于1GB的文件块。此外,去重排序可采用两两比较法以避免额外内存开销。文中还讨论了数组初始化限制(最大约1.34亿元素)和内存占用计算细节,强调必须采用拆分读取方式处理如此大规模数据。

2025-11-14 12:05:02 145

原创 Spring解决循环依赖实际就是用了个递归

该摘要讨论了使用三级缓存机制解决循环依赖问题的方法。通过三个Map集合分别存储不同状态的Bean:singletonObjects存放完整初始化对象,earlySingletonObjects存放半成品对象,singletonFactories存放对象的Supplier工厂。getBean()方法的查找顺序为:1)从singletonObjects获取完整对象;2)从earlySingletonObjects获取半成品;3)通过singletonFactories创建对象并存入earlySingletonO

2025-11-05 20:21:11 208

原创 从基础到架构的六层知识体系

计算机技术体系可划分为六个核心层级:1)数学与逻辑基础,涵盖离散数学、概率统计等理论基础;2)计算机原理,包括组成原理、操作系统等硬件与系统知识;3)编程语言与范式,涉及多种语言特性与编程思想;4)数据结构与算法,作为解决问题的核心方法论;5)设计模式与架构模式,关注代码组织与软件设计;6)应用架构与系统设计,处理复杂系统构建问题。各层级相互支撑,新兴技术领域往往是这些基础技术的交叉融合应用。

2025-08-18 17:23:19 1108

原创 正确理解Cola StateMachine不内置事务管理机制

正确理解Cola StateMachine不内置事务管理机制

2025-06-24 16:41:40 1081

原创 使用Spring StateMachine 而无法使用 Cola StateMachine的场景

在复杂业务场景中,使用 Spring StateMachine 而无法使用 Cola StateMachine 的核心原因是:Spring StateMachine 提供了分层状态、事务绑定、监听器/拦截器、分布式协调等高级功能,而 Cola StateMachine 是轻量级无状态设计,无法满足这些复杂需求

2025-06-24 16:30:04 589

原创 Cola StateMachine 的无状态(Stateless)特性详解

Cola StateMachine 的 无状态(Stateless)特性 主要体现在其设计和实现方式上,它通过将状态存储与状态机逻辑解耦,避免状态机实例本身持有状态,从而实现服务端的无状态特性。

2025-06-24 16:00:19 1131

原创 《函数之恋》

我们是彼此函数空间中的解。x0​初始之时,我只是一个点,没有意义,也没有方向。∃yyx直到你的出现,打破了我的单调。fxsinxgyeiωt我是正弦波动,你是复数信号,我们频率不同,却共享同一个时间轴。dtd​x−y−kx−y我开始靠近你,不是强迫,而是被吸引。t→∞lim​∥xt−yt∥0在无限的时间尽头,我们的距离趋于零。∇Vxy0我们在能量最小的状态中相遇,找到了平衡。

2025-06-10 14:51:35 554

原创 来自宇宙的问候

有人说,那是第一次,人类听懂了另一种智慧生命的语言。无人在意的凌晨三点十七分,一个信号从银河深处传来。“我有有限的能量,并且愿意接受任何接近我的信息。人类第一次接收到外星文明的语言,竟然是——“也许在他们的世界里,这不过是一句‘你好’。一首由复数、积分和极限组成的宇宙之歌。原来“你好”,也可以是一个公式的温度。这不是机器语言,也不是冷冰冰的代码。它不是脉冲,不是噪音,也不是图像。有人说,那不是对话,而是一首诗。如今,监听站依旧每晚打开天线,“我能感知到你的微弱波动。这是情感,是信任,是邀请。

2025-06-10 12:16:48 658

原创 IDEA明明打了Jar包但引入就是报红

首先尝试清除项目缓存,若无效则删除pom文件中相关包的引入代码,重新导入依赖包,最后再次引入该包。这种分步处理方式能有效解决常见的依赖冲突或导入异常问题。

2025-06-04 10:25:39 471

原创 Feign:调用方与被调用方集成的对比及Feign继承的应用

虽然将 Feign 放在被调用方可以快速集成,但从长远来看,这会导致较高的耦合度和较低的灵活性。相比之下,采用 Feign 继承的方式能够有效地降低系统间的耦合度,提高代码的可维护性和扩展性,结合了将Feign放在调用端和被调用端的优点。因此,在设计微服务架构时,推荐使用 Feign 继承作为最佳实践,以确保系统的健壮性和灵活性。

2025-04-19 11:33:59 439

原创 同编码规则下,字符串的字节数组转换为16进制字符串,是否会冲突?

将中文字符串替换成另一个字符串,以替代的该中文来表示。

2024-12-20 17:45:02 150

原创 如何使用 Git Revert 撤销合并提交

在使用 Git 进行版本控制时,合并分支是一个常见的操作。然而,有时候我们可能需要撤销之前的合并操作。本文将详细介绍如何使用 git revert 撤销合并提交,即使在合并提交之后还有其他提交。

2024-10-21 11:08:42 2022 1

原创 IDEA跳过Maven打包时的PMD扫描

Settings中搜索maven,点击Runner选项,VM Options中添加如下配置。

2024-08-07 08:57:12 516

原创 mybatis-plus项目中使用mybatis插件

正确的在mybatis-plus项目中使用mybatis插件,亲测没有问题

2024-07-25 11:25:25 623

原创 后端存储流程结构的思考

流程图中,流程节点是多对多的关系,一个当前节点可能连接到多个下一节点,多个当前节点可能连接到一个下一节点。这种关系用算法中的图来描述非常合适,图是比树更复杂的数据结构。

2024-07-22 17:12:59 447

原创 关于各环境配置表数据同步的一种想法

如果各环境表配置同步能遵守规范操作,保持从低级别环境向高级别环境过渡。如果各环境表配置同步不能遵守规范操作,那么id冲突无可避免,特别对于树状结构,其parent_id无法自动生成。同样提供数据比对接口,但是实现麻烦些,需要逐层划归数据,然后逐级比对。其数据对比的环境一般是当前环境和低级环境,低级环境通过jdbc的方式连接并获取数据。诸如菜单、按钮、权限等同步到各个环境往往通过手动获取语句的方式,如果是树状结构配置,很可能存在主键冲突。虽然可以借助数据同步工具,但是依然比较麻烦,需要勾选数据等。

2024-06-29 20:47:23 354

原创 代码规范性思考

关联表多,可以拿到主体分页数据后再到业务层去查询关联数据赋值。

2024-06-18 22:23:22 667

原创 操作日志、审计日志解决方案和思路

现在大部分公司一般使用SpringCloud这条技术栈,操作日志通过网关Gateway提供的Globalfilter统一拦截请求解析请求是比较好的选选择。优点:相对于传统的过滤器、拦截器同步阻塞方案,SpringCloud Gateway使用的Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架,提高了性能。缺点:请求的解析与传统过滤器、拦截器有所不同,特别是获取请求参数与响应参数这块。

2024-06-05 22:12:52 972

原创 记一次RabbitMQ未配置Listener导致的报错

推测原因是未设置acknowledge-mode: manual手动确认消息,而在代码中手动确认了消息。增加配置后问题得到解决。

2024-05-30 19:41:42 453

原创 解决mybatis拦截器注入依赖后为null问题

调试时发现在mybatis拦截器定义的注解@PostConstruct方法中RedisUtils依赖已经注入,但是在拦截器的Intercept方法中redisUtils为null。在配置类中将MybatisInterceptor改成@Bean注入后,Intercept执行时依赖问题解决。需求是在mybatis拦截器中注入RedisUtils用来缓存一些信息。

2024-05-27 22:53:02 590

原创 Windows Docker安装运行Nacos

【代码】Windows Docker安装运行Nacos。

2024-05-16 14:53:23 776

原创 Mysql8.0.30一次表锁问题的解决

给material_config_field_data表的字段建立全文索引的时,发现该表卡死,然后无法对该表进行任何操作。

2024-05-09 18:30:07 358

原创 关于使用后端实现动态表单功能的心得

需要前端可靠支撑,如前端生成ID或者直接将名称作为表单、字段、选项的唯一识别。:存储表单字段信息,比如字段类型、选项类型、输入框类型、筛选类型(展开类型)、字段排序、是否必填、所属表单ID等。优点:相对Mysql细化结构存储,不用在后端处理大量增、删、改的逻辑。如输入框类型的输入值、选项标签、表单ID、选项ID。:存储字段为选项类型的选项,如选项名、所属字段ID、所属表单ID等。:勾选了哪些选项,需存表单ID、字段ID、选项ID。:使用了哪个表单,并存储表单数据,需存表单ID。

2024-04-21 21:03:42 1221

原创 Java离线视频提取音频+音频提取文案

至于javacv依赖,网上有很多缩减方案,注释部分是可行的缩减方案,至于视频提取视频这里无需安装ffmpeg,只需引入依赖。而vosk需要下载模型方可使用,并且下载比较慢,可先用小模型跑通。

2024-04-21 19:56:25 2021 6

原创 mybatis-3.5.0使用插件拦截sql以及通用字段赋值

【代码】mybatis-3.5.0使用插件拦截sql以及通用字段赋值。

2024-04-19 09:02:56 566

原创 mysql查看数据库数据量

【代码】mysql查看数据库数据量。

2024-03-29 16:25:41 453

原创 动态ip白名单频繁更改问题解决方案

3. 使用VPN:可以使用VPN来解决动态IP地址的变化问题,VPN可以将动态IP地址转换成一个固定的IP地址,从而使得公网IP地址一直不变。个人感觉是添加域名白名单,访问者的动态ip将被映射成固定域名,动态ip访问变成固定域名访问。域名白名单的作用应该就是处理这样的场景。2. 使用动态DNS:可以使用动态DNS服务,它可以将动态IP地址映射到一个固定的域名,从而使得动态IP地址处理为域名一直不变。1. 使用静态IP地址:可以通过向ISP申请静态IP地址来解决动态IP地址的变化问题,但是这种方法会比较贵。

2024-03-27 00:28:44 1803

原创 leetcode反转字符串(简单)

有点累了,搞个简单的吧。

2024-03-25 23:51:08 174

原创 git常用命令自备

git常用命令自备。

2024-03-25 23:15:28 164

原创 leetcode检查大写字母(简单)

0ms,规律是以第一个字符和第二个字符为基准检测。

2024-03-24 13:43:13 221

原创 leetcode最大连续1的个数(简单)

比较简单,但解时候如果能一次通过更好。

2024-03-24 00:23:32 293

原创 leetcode字符串的第一个唯一字符

【代码】leetcode字符串的第一个唯一字符。

2024-03-22 01:24:46 131

原创 leetcode排列硬币

【代码】leetcode排列硬币。

2024-03-21 22:16:04 313

原创 mysql存储高性能

主从复制过程中,大量数据导致同步延迟,在延迟时间内主从数据不一致。部分参考《从零开始学架构》

2024-03-19 23:27:10 452

原创 leetcode猜数字大小

说实话我也看不懂我的算法,中位法吧,但是0ms通过了。来获取猜测结果,返回值一共有 3 种可能的情况(你可以通过调用一个预先定义好的接口。

2024-03-17 22:02:28 525

Windows Docker安装运行Nacos, Nacos-2.3.2 MYSQL表配置sql文件

Nacos-2.3.2 MYSQL表配置sql文件

2024-05-16

空空如也

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

TA关注的人

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