自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 资源泄漏从代码缺陷到系统级架构挑战

它是一个多维度的复杂系统故障,涉及从用户态到内核态、从CPU缓存行到GPU显存、从语言运行时到操作系统的完整堆栈。当我们还在用20年前的思维寻找“丢失的堆块”时,真正的吞噬者正在系统的其他层次悄然生长。想象一个监控面板:你的微服务在Kubernetes集群中运行,Prometheus显示容器内存使用率稳步上升,72小时后触发OOMKilled。每一层抽象都在增加泄漏的可能性,每一个优化都可能隐藏新的泄漏模式。资源安全不是功能完成后才考虑的问题,而是架构设计的第一性原则。:在不同层级表现出相似但不同的模式。

2025-12-10 14:08:18 602

原创 Solr 与 Elasticsearch 全文检索深度对比:从基础使用到中文分词热更新实战

场景推荐引擎强一致性、复杂查询、企业级搜索Solr日志/时序数据、快速迭代、高写入吞吐DevOps 监控、Kibana 可视化需求已有 Hadoop / HBase 生态Solr(集成更自然)中文搜索 + 灵活分词扩展两者均可,ES 社区插件更活跃;ES + IK 热更新小团队、快速上线Elasticsearch(配置更少)无论选择哪条路径,深入理解其设计哲学与调优机制,才是构建高性能搜索系统的基石。

2025-12-10 14:07:44 636

原创 【Spring进阶】深入理解 FactoryBean:定制化 Bean 的秘密武器

在 Spring 的日常开发中,我们通常使用@Component@Service或者@Bean的方式来定义 Bean。对于大多数简单的对象(比如 Controller、Service),这些方式非常直观且高效。但是,假设我们需要创建一个初始化过程非常复杂的对象(例如:需要读取复杂的配置文件、需要连接第三方服务、或者需要动态代理生成的对象),如果把这坨复杂的构建代码全都塞在@Bean方法里,代码会显得非常臃肿且难以复用。这时候,Spring 为我们提供了一个强大的接口——。今天我们就来聊聊。

2025-12-09 15:03:17 633

原创 40亿QQ号,不超过1G内存,如何去重?

目标最优方案精确去重Bitmap 位图 ✅允许误判布隆过滤器 ✅。

2025-12-09 15:02:46 334

原创 【Oracle入门到删库跑路-17】实战案例:云环境部署实践

弹性扩展:根据业务需求动态调整资源配置成本优化:按需付费,降低基础设施投入高可用性:云服务商提供的SLA保障简化运维:自动化备份、监控和维护全球部署:快速在全球范围内部署数据库实例云环境部署为Oracle数据库带来了新的机遇和挑战。通过合理选择云服务商和部署方案,可以显著提升数据库的可用性、可扩展性和运维效率。在实际部署过程中,需要充分考虑安全性、性能优化和成本控制等因素,并建立完善的监控和运维体系。

2025-12-08 14:51:46 348

原创 MQ生产者确认机制捕获到消息投递失败后如何重试?

(Broker 未确认接收)或超时未收到确认时,说明消息发送失败。(次数、间隔)重新投递,直至成功或超过阈值后转入死信队列。等场景下仍能最终投递成功,同时避免无限重试的资源浪费。以下是具体实现思路和关键步骤,结合代码示例说明。当消息超过最大重试次数仍未成功,将其转入。重试可能导致消息重复投递,消费者需通过。生产者确认失败后的重试重新投递,本质是。(如 UUID 或雪花算法),并在。,确保重启后不丢失。生产者发送消息时,生成唯一。定期检查失败消息表,对。通过这套机制,可确保消息在。(避免内存丢失),并按。

2025-12-08 14:50:38 377

原创 Trae Solo 在「日志分析」场景中的神级体验:比我写脚本快五倍

要知道,日志分析是程序员永恒的痛点:格式乱、字段多、异常类型奇怪,经常一找 bug 就是两小时。所以某天我突发奇想:“我不如把 log 丢给 Trae Solo 让它帮我分析?结果——它比我写正则快五倍。

2025-12-05 15:27:06 143

原创 openEuler跨平台适配能力与性能实测:开箱即用的多架构支持

核心优势:全架构覆盖:支持x86_64、AArch64、RISC-V等主流架构,镜像获取便捷一致性体验:各架构安装部署流程统一,降低用户学习成本深度优化:ARM平台性能达到甚至超越x86水平,多项测试领先3-11%虚拟化性能:虚拟化开销小于8%,跨架构云原生场景表现优异实际负载验证:容器、编译、Web服务等实际场景性能表现突出ARM平台内存带宽提升:+10%容器应用性能提升:+3-8%虚拟化效率提升:开销降低1-2%编译性能提升:+39%(多核优势)

2025-12-05 15:26:06 672

原创 财务核算系统设计与实现

财务核算系统是企业信息化建设的核心系统之一,承担着记录、分类、汇总企业经济业务的重要职责。一个完善的财务核算系统需要满足会计准则要求,支持多维度核算,保证数据准确性和一致性。本文将从系统架构、核心模块、代码实现等方面,详细讲解如何设计一个企业级财务核算系统。

2025-12-04 14:08:06 286

原创 Java 内部类指南

class Outer { public void method() { // 局部内部类(只能在方法内使用) class LocalInner { public void show() { System.out.println("我是局部内部类");} }成员内部类像成员,静态内部类像工具,局部内部类在方法里,匿名内部类一次用。大部分情况用静态内部类最安全!

2025-12-04 14:07:15 319

原创 责任链模式详解

在实际的软件开发中,我们经常会遇到这样的场景:一个请求需要经过多个处理者的处理,但我们不希望请求的发送者与接收者耦合在一起。责任链模式(Chain of Responsibility Pattern)正是为了解决这类问题而诞生的。本文将深入讲解责任链模式的原理、实现方式以及在生产环境中的实际应用。责任链模式是一种行为型设计模式,它允许你将请求沿着处理者链进行传递,直到其中一个处理者对其进行处理。该模式将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求。

2025-12-03 15:02:39 796

原创 ELK日志分析平台搭建实战:从日志混乱到一目了然

日志格式要规范(JSON最好)字段要统一(各应用约定好)索引要管理(不然磁盘爆炸)网络要打通(异地服务器用组网)建议先从单个应用开始,跑顺了再推广到其他应用。

2025-12-03 15:02:02 710

原创 Day21 | 枚举(Enum)与常见应用场景

定义一个枚举其实很简单:DayOfWeek就是一个枚举类型,MONDAY、TUESDAY等是这个类型的实例(就是DayOfWeek类型的对象)。今天就简单的介绍了一下枚举类。列举了一些简单的用法和实际开发场景中的用途。案例中的Java集合框架将在接下来的文章中逐一进行介绍。

2025-12-02 15:08:55 574

原创 发布对象和对象逃逸

二、volatile 关键字发布(内存可见性保证) 工作机制: 写 volatile 变量会触发 StoreStore 内存屏障,读 volatile 变量会触发 LoadLoad 屏障,确保写操作对后续读操作可见。三、final 字段发布(JMM 特殊规则) JMM 规范: 通过 final 字段发布的对象,构造函数完成时所有 final 字段的写入对其他线程可见(Java 5+ 增强语义)。:是 “对象超出预期作用域(尤其是未完全初始化时被访问)” 的问题。:是 “让对象被外部访问” 的行为。

2025-12-02 15:08:36 419

原创 Power BI按列排序问题

(比如之前我把它 “Sort by Column” 过 → 现在这个关系残留在模型里。Power BI 会把 “Sort by Column” 的映射持久保存,如果旧的排序列已经不存在或不再唯一,就会阻止我们继续使用它。✔ “新建列 A = [前台日期]” 可以正常排序。,即使 M 语言重新生成了列,也会报冲突。因为删掉重建字段后,所有旧依赖都会被清除。新列可以正常排序 → 你已经验证过。✔ 原字段 “前台日期” 不行。这是刚才测试成功的方式,所以是。我们需要手动清除旧的排序。

2025-12-01 15:05:35 358

原创 【数据结构入门手札】数据结构基础:从数据到抽象数据类型

数据类型是按照值的不同进行划分的。在高级语言中,每个变量、常量和表达式都有各自的取值范围。类型就是用来说明变量或表达式的取值范围和所能进行的操作。原子类型原子类型是不可以在分解的基本类型,包括整型、实型、字符型等。结构类型结构类型是由若干个类型组合而成,是可以再分解的。例如,整型数组属于结构类型,它由若干个整型数据组合而成。

2025-12-01 15:05:04 536

原创 优惠系统演进:从“实时结算“到“所见即所得“,前端传参真的鸡肋吗?

优惠系统的演进是一个典型的从功能到体验初期:优先验证业务模式,接受体验缺陷成熟期:优化用户体验,建立品牌信任这种演进路径在开发中都很常见。理解业务阶段- 明确当前业务处于什么阶段,什么最重要预判演进趋势- 提前为可能的技术升级预留空间平衡成本收益- 在技术投入和业务收益之间找到平衡点没有绝对的技术最优解,只有最适合当前业务阶段的方案。尤其是小团队一定要平衡技术和现实的关系。

2025-11-29 14:10:22 293

原创 【鸿蒙开发实战篇】如何基于一多能力实现响应式布局

在鸿蒙中,它通常与断点结合使用,通过监听窗口尺寸变化,触发布局逻辑的更新。通过上述方法,开发者可以高效实现一次开发、多端适配的目标,让应用在不同设备上都能呈现出优雅的界面效果。断点是响应式布局的基础,通过将窗口宽度划分为不同的区间(如XS、SM、MD、LG等),开发者可以为每个区间定义特定的布局规则。首先,需要根据目标设备(手机、平板、大屏)的窗口宽度范围,配置断点规则。假设需要实现一个卡片列表,在手机端(XS)显示为单列,在平板端(SM)显示为双列,在大屏设备(MD及以上)显示为三列。

2025-11-29 14:09:43 685

原创 Linux命令进阶

例如说明:管道就是将一个命令的输出当作另一个命令的输入,通过|连接多个命令(理解:后一个命令的操作,是在前一个命令的基础上进行的)

2025-11-29 14:08:34 821

原创 剑指offer-42、和为S的两个数字

由于数组 nums[] 是有序的,也就是第⼀个数字是最⼩的,第⼆个数字是最⼤的,那么我们使⽤⼀个指针 i 指向数组第⼀个元素,⼀个指针 j 指向数组最后⼀个元素。输⼊⼀个递增排序的数组和⼀个数字 S ,在数组中查找两个数,使得他们的和正好是 S ,如果有多对数字的和等于 S ,输出两个数的乘积最⼩的。如果 nums[i] + nums[j] < sum ,则说明和太⼩了,⽐ sum 还要⼩,则左边的指针i需要左移⼀步,即是 i++。输⼊:[1,2,4,7,11,15],15 返回值:[4,11]

2025-11-26 14:13:47 419

原创 【RuoYi-Eggjs】:把 MyBatis 带到 Node.js

希望这个插件能帮你把 Node.js 的数据层代码打理得井井有条!如果觉得好用,别忘了去 GitHub 上点个 Star 哦。写 Node.js 后端时,你是不是也经常对着代码里那一坨坨拼凑的 SQL 字符串发愁?: Service 层的职责变得非常纯粹——准备参数,调用 Mapper,获取结果。就能完美解决你的痛点,把这种优雅的开发体验带到 Egg.js 项目中。先装包,然后在 Egg.js 里把插件开起来。就是这么简单,接下来看它在实战中有多好用。标签,不用再担心逗号拼错的问题。假设我们要查用户,在。

2025-11-26 14:13:05 424

原创 Java 中的结构化并发模式

无论是免费或者付费的课程,本质都是给我们学习指引一个方向,它们之间的主要区别在于付费课程的视频更系统、资料更完整、会提供必要的答疑,这样,我们不至于被一些很简单的问题浪费大量的时间。年龄20-45岁之间,学历大专以上,计算机或自动化相关专业,会更符合企业的招聘要求。关于学习路线,我专门设计了一套零基础快速上手的课程,课程目录就是学习路线。不要去找免费的,因为免费的是最贵的。免费的视频,反而会浪费更多的时间。因为我自己也是零基础学出来的。,我建议找付费的课程去学。教育的本质是自我教育。学习的本质是自我学习。

2025-11-25 19:59:44 417

原创 技术复盘:Solon-MCP 日志统一配置背后的技术架构分析

这些桥接器通过同名包替换或拦截的方式,把其他日志框架的 API 调用,“骗”过来转发给 SLF4J。这就实现了“虽然你是不同门派,但最终都走同一个出口”。

2025-11-25 19:59:08 377

原创 WXT 框架下的 Window 对象获取

在浏览器扩展开发中,Content Script(内容脚本)运行在与网页相同的环境中,但由于其处于隔离的执行环境(Isolated World),无法直接访问网页的 JavaScript 上下文,包括window对象的自定义属性。这在需要获取页面特定数据时(如 Etsy 店铺的shopId、订单状态等)会成为一个问题。本文档基于实际项目经验,详细介绍了在 WXT 框架下获取页面window对象的几种方案,并提供了完整的实现代码和对比分析。在 WXT 框架下获取页面window对象,推荐使用方案。

2025-11-24 14:39:59 590

原创 Design Tokens的设计与使用详解:构建高效设计系统的核心技术

Design Tokens是现代设计系统的核心技术,通过将视觉设计元素抽象为可管理的变量,实现了设计与开发的无缝协作和一致的用户体验。它们不仅提高了工作效率,还降低了维护成本,支持了动态主题和多品牌场景。对于希望实施Design Tokens的团队,建议从以下几个方面入手:首先,建立跨职能团队,确保设计、开发和产品团队共同参与Design Tokens的设计和实施,形成统一的理解和规范。其次,采用渐进式实施策略。

2025-11-24 14:39:28 1038

原创 Protocol Buffers 技术解析:为什么叫「协议缓冲区」

关注点分离:协议定义与具体实现解耦效率优先:从编码层到传输层的全方位优化兼容性设计:通过字段编号机制支持向前向后兼容通用性:跨语言、跨平台的统一解决方案工具链支持:代码生成、验证等完整生态这种「协议定义+二进制容器」的模式之所以在计算机科学中广泛存在,是因为它完美平衡了效率、可维护性和扩展性,是构建高性能分布式系统的基石技术。核心价值:Protocol Buffers 不是发明了新概念,而是将久经考验的二进制数据交换模式标准化、工具化,让开发者能够专注于业务逻辑而非数据传输细节。

2025-11-23 15:08:25 878

原创 手把手搭建Java微服务:从技术选型到生产部署

服务注册发现- 基于NacosAPI网关- 统一入口和路由服务间调用- 基于OpenFeign配置管理- 集中式配置熔断降级- 基于Sentinel负载均衡- 基于LoadBalancer根据实际需求扩展更多功能,如分布式事务、消息队列、监控告警等。微服务技术栈的更新速度已经超过了大多数团队的实际需求,形成了一种技术的"时尚竞赛"。很多团队在Spring Cloud、Dubbo、Kubernetes + Istio之间反复横跳,却忽略了最根本的问题:这些技术变革是否真的为业务创造了价值?

2025-11-23 15:07:52 411

原创 Spring Boot如何整合Redis

} // 使用自定义Key生成器 @Cacheable(value = "users", keyGenerator = "customKeyGenerator") public List<User> findAllUsers() { return userRepository.findAll();

2025-11-21 14:09:18 236

原创 Day14 | 抽象类和接口

记住并理解下面这段话:抽象类定义身份的骨骼,承载共性逻辑与状态传承;接口规范能力的边界,实现灵活的行为契约组合。当需要构建血脉相连的家族树时,选择抽象类;当需要为不同血脉赋予相同能力时,拥抱接口。在后续的设计中,抽象类作为根基,接口作为羽翼自由扩展。

2025-11-21 14:08:32 250

原创 作为 Java 工程师,我如何用 TRAE 帮助我重构一个六年前的老项目

我们组里有个“老大难”系统,是六年前写的,主要负责内部审批流自动化。典型的传统 Java + JSP 架构,页面写死、逻辑嵌套、数据库字段冗余,一提改动,大家都头疼。我不是第一个被“委派”去接这个项目的人,但我是第一个没推掉它的。这次重构让我感受最深的一点是:真正的技术价值,不在于写了多少代码,而在于能不能让系统更可用、更可维护、更可成长。我仍然是一个 Java 工程师,但我现在能做的事情,已经远不止“写接口”那么简单。

2025-11-20 14:45:20 1017

原创 ​​读这一篇,你能把哨兵模式讲给 HR 听她都能懂!

一旦 master 进入客观下线状态,Sentinel 会通过投票选举一个最佳 slave 作为新 master,并通知其他 slave 重新复制它,也会把新 master 的信息通知客户端。它解决了 Redis 单点故障问题,但仍然只有一个 master,不支持分片,因此可用性不如 Redis Cluster。后来他发消息给我,说:“哨兵模式,我现在讲给 HR 听都能听懂。“哨兵模式”(Redis Sentinel)就是给 Redis 奶茶店安排一群“监督员”。一个人说“店长晕了”,可能是看错了;

2025-11-20 14:44:49 792

原创 ConcurrentHashMap 重要方法实现原理和源码解析(一)

其设计核心是「细粒度锁(桶级锁)+ 无锁 CAS + 并发协作」:通过最小粒度的锁(仅锁定单个桶的头节点)减少锁竞争,空桶插入用 CAS 避免加锁,扩容时支持多线程协作,最大化并发性能。:Java 8+ 取消分段锁(锁的粒度大,并发效率低),改用「桶级 synchronized 锁」(锁定每个桶的头节点),锁粒度更小,并发冲突概率更低。,要是返回结果不为 null 说明存在,返回 null 说明不存在,返回 false。),避免单线程扩容瓶颈(导致扩容的线程,扩容过程中执行 put 方法的线程都加进来)

2025-11-19 14:19:49 715

原创 ConcurrentHashMap 重要方法实现原理和源码解析(二)

两者均避免一次性拷贝所有数据(节省内存 + 实时反映底层变化),适配高并发场景的遍历/修改需求。底层核心实现:支持删除、替换、条件替换。ConcurrentHashMap 的。链表转红黑树或者扩容方法。

2025-11-19 14:19:19 860

原创 工作中最常用的6种API网关

有些小伙伴在工作中可能会问:我们的系统直接调用微服务不是更简单吗?为什么非要引入API网关这个"中间商"呢?让我们先来看一个实际的例子。让我们通过架构图来理解网关在微服务架构中的关键作用:网关解决的8大核心问题:下面我们一起看看工作中最常见的6种API网关有哪些。有些小伙伴在Spring技术栈中开发微服务,Spring Cloud Gateway 无疑是最自然的选择。作为Spring官方推出的第二代网关,它基于WebFlux响应式编程模型,性能卓越。优点:缺点:使用场景:有些小伙伴在

2025-11-18 14:28:55 929

原创 请求失败溯源Netty关闭连接源码流程

源码是进步的源泉,优雅永不过时Netty将网络处理的生命周期的每个阶段完成后,都会传播特定的事件,形成完整的追踪链;这样也方便问题定位,值得借鉴;在事件循环+异步处理中,不要有阻塞性事件,不然会导致雪崩效应事件回调在异步处理中随处可见,通过回调钩子来感知事件的变化(诸如:ChannelHandler、redis中的RedisConnectionStateListener)底层知识必须夯实,知其然,知其所以然 (TCP四次握手、JVM源码、 solinger、 halfClosure)

2025-11-18 14:27:29 268

原创 fasttushare 技术架构设计

— 该架构在保证透明兼容与合规前提下,通过稳定键空间、可靠存储与受控并发实现高性能缓存层,满足量化研究与数据工程的核心诉求。

2025-11-17 16:06:36 451

原创 通过 Python 在 PDF 中添加页面

Spire.PDF for Python 提供了简洁高效的 API,能够轻松实现空白页添加、指定位置插入、PDF合并等核心需求。其优势在于 API 设计直观、功能覆盖全面,且文档完善(官方提供详细的API文档和示例代码),适合各类 PDF 处理场景。

2025-11-17 16:06:06 369

原创 [特殊字符] Argon2 密码哈希

argon2是一种现代、安全的密码哈希算法,用于安全存储用户密码或其他敏感认证信息。它不是加密(encryption),而是单向哈希(hashing)—— 无法解密。Argon2 是 2015 年密码哈希竞赛(PHC)的获胜算法,目前公认为业界最安全、最先进的哈希方案之一。

2025-11-13 14:39:47 375

原创 Netty源码分析(终)--关于WriteAndFlush

在 Netty 编程中, 是我们最常使用的方法之一。它代表着从用户层到内核缓冲区的一整条出站(Outbound)数据路径。本章将从源码层面,深入分析 的执行流程与关键机制。在前面讲解编解码器时,我们提到过“编码”的概念。编码指的是将服务器处理完的业务对象转换为字节码的过程。因为数据写出属于 Outbound 事件,所以负责编码的 一般位于管道尾部()之前,如下图所示:典型的编码器(Encoder)通常继承自 。当我们调用 时,Netty 会从管道尾部(Tail)开始,依次调用所有 Outbound

2025-11-13 14:39:15 609

原创 CompletableFuture的5大坑!

有些小伙伴在工作中刚开始接触CompletableFuture时,可能会被它强大的功能所吸引。确实,CompletableFuture为我们提供了非常优雅的异步编程方式,但正如武侠小说中的神兵利器,如果使用不当,反而会伤到自己。通过上面的详细分析,我们可以看到CompletableFuture虽然强大,但也确实存在不少陷阱。理解原理:不要只是机械地使用API,要理解CompletableFuture的工作原理适度使用:不是所有场景都需要异步,同步代码更简单易懂测试覆盖。

2025-11-13 14:38:45 726

空空如也

空空如也

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

TA关注的人

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