自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SimpleDateFormat 的多线程安全问题

方案线程安全性能推荐度局部变量安全差(对象创建开销)⭐⭐⭐ (简单场景)安全中(有锁竞争)安全高⭐⭐⭐⭐ (维护旧项目时)Java 8安全高⭐⭐⭐⭐⭐ (新项目必选)最终建议如果是新项目,请毫不犹豫地使用Java 8 的java.timeAPI。如果必须维护使用的旧代码,请使用 ThreadLocal方案来修复多线程问题。

2025-09-28 17:49:43 895

原创 Ubuntu 22.04 在线安装 RabbitMQ

⚠️ 默认 guest 用户只能本机登录,远程登录需要新建用户。

2025-09-26 09:58:48 268

原创 X-Ca-Key和X-Ca-Secret的鉴权方式签名认证

X-Ca-Key= 公钥,用来标识调用方= 私钥,用来生成签名,不可泄露鉴权流程= 客户端签名 → 服务端验证签名好处:避免伪造请求、防止参数被篡改,常用于 API 开放平台、网关接口保护。

2025-09-04 09:10:58 400

原创 MyBatis 实现乐观锁

版本号字段:在表中添加 version 字段UPDATE语句:在更新时检查版本号返回值判断:根据 affectedRows 判断是否更新成功重试机制:使用循环或工具类实现自动重试异常处理:自定义异常类处理乐观锁冲突这种实现方式比 JPA 的@Version注解更灵活,可以精确控制乐观锁的逻辑。

2025-09-03 11:47:13 482

原创 单体服务迁移到微服务

单体服务迁移到微服务,不能一口吃个胖子,而是要循序渐进,有明确的和 **演进路线。

2025-09-03 10:32:00 535

原创 JPA和Spring Data JPA的区别

JPA是标准Spring Data JPA是基于标准的增强工具如果你在用Spring Boot项目,基本上都是在用Spring Data JPASpring Data JPA通过方法名派生、@Query注解等机制,极大简化了JPA的使用理解JPA规范有助于更好地使用和调试Spring Data JPA简单记:JPA告诉你应该怎么做,Spring Data JPA帮你轻松做到。

2025-09-03 09:21:55 745

原创 JPA和MyBatis和原生JDBC

没有最好的方案,只有最适合的方案。根据项目需求、团队技能和性能要求来选择合适的数据访问层实现方式。

2025-09-03 09:13:57 890

原创 springboot 把依赖包不打到web包里面 maven 怎么配置插件

你的目标配置核心构建"胖"Jar (可执行)配置的repackagegoal,不设置<includes>。构建"瘦"Jar (依赖分离)配置的<includes>为一个不存在的依赖,并配合使用复制依赖到外部目录。这种"依赖分离"的方式在传统部署到外部Tomcat(War包)或某些定制化部署环境中非常有用。

2025-09-02 17:34:55 428

原创 POC项目

POC项目是一个战略性的风险控制工具。它用一种科学、低成本的方式,在项目全面启动之前,探索未知领域,验证关键假设,为后续的重大决策提供坚实的数据和事实基础,是现代软件工程中不可或缺的一环。

2025-09-02 16:02:51 1044

原创 自定义注解常见的场景

自定义注解在 Java 开发 中用得非常广泛,尤其是和 反射、AOP、框架扩展 结合时。总结几个常见的场景:然后写解析器:🔹 2. 权限控制类似于 Spring Security 的 、。在 Controller 或 Service 方法上加自定义注解,配合 AOP 进行校验。3. 日志记录 / 审计用于统一操作日志记录,比如某个方法被调用时自动记录操作人、时间、参数。结合 AOP 切面实现:4. 缓存控制类似于 Spring 的 。可以自定义 ,在方法执行时自动查询缓

2025-09-02 15:51:57 366

原创 Java 重连机制

一般是指在网络通信(HTTP、WebSocket、MQ、数据库连接等)中,客户端和服务端断开后,客户端需要具备的能力,保证服务高可用。

2025-09-02 14:01:06 502

原创 注解字段校验多语言

在。

2025-09-02 11:56:52 291

原创 解决接口幂等的问题

幂等性是数学和计算机科学中的一个概念。在HTTP/1.1规范中,它对幂等性的定义是:核心思想:一个方法(或接口),无论被调用多少次,其产生的最终副作用(对系统状态的影响)都应与第一次调用时相同。简单比喻:按一下开关,灯会亮。你再按多少次,灯都还是亮着的状态(而不是闪烁不定),这就是幂等。setOn()这个操作就是幂等的。方案原理适用操作优点缺点Token机制一次性的令牌POST(创建)通用性强,有效防重需两次交互,需维护Token状态唯一索引数据库唯一约束POST(创建)简单可靠,成本低。

2025-09-02 10:32:16 546

原创 脑裂和假死

特性脑裂(Split-Brain)假死(False Death)本质多个节点同时认为自己是主节点卡顿/延迟被误判为宕机原因网络分区、仲裁错误GC、IO阻塞、网络抖动危害多主 → 数据不一致节点被错误剔除,触发误切换场景Redis Sentinel、双机热备Java 应用 Full GC、Redis 阻塞解决方案仲裁机制、租约、Fencing优化 GC、健康检查、多维心跳。

2025-09-02 10:17:19 684

原创 数据库单表分表策略与计算方式

数据库单表分表策略与计算方式,其实就是,从而提升性能、减少单表数据量过大带来的压力。下面我给你做一个,包括常见的分表策略、分片键选择、分片计算方式。

2025-09-02 09:41:10 664

原创 分库分表(Sharding)的使用

分库:将一个数据库中的数据拆分到多个数据库中。分表:将一个表中的数据拆分到多个表中。Sharding:分库分表的统称。其本质是一种水平拆分方式,将数据分散到不同的物理节点上。分库分表是应对海量数据和高并发流量的终极方案之一,但它引入了巨大的复杂度。ShardingSphere 等中间件极大地降低了使用门槛,使得开发者可以更专注于业务逻辑。其核心流程可以概括为以下几步:fill:#333;color:#333;color:#333;fill:none;是否应用程序发起SQL请求。

2025-09-01 17:40:47 1016

原创 接口重试设计

接口重试设计在和里是非常关键的,它能提高,但如果设计不当,会引发或。

2025-09-01 16:27:57 853

原创 第三方 HTTP 接口重试实现方式

手写 for 循环(简单粗暴)(主流、优雅,推荐)(适合微服务)(灵活轻量)MQ 延迟重试(分布式 & 高可靠场景)业务系统用 Spring Retry / Resilience4j,跨系统对接用 MQ 延迟重试兜底。

2025-09-01 16:26:16 306

原创 异步接口设计方案

特别是在这种场景里。

2025-09-01 16:05:24 669

原创 服务网格(Service Mesh)

服务网格(Service Mesh)是一种微服务通信基础设施层,主要用于解决服务间通信的复杂问题。它通过在服务之间引入一个轻量级代理(Sidecar),把流量接管下来,实现服务发现、负载均衡、认证鉴权、流量控制、监控追踪等功能,而不用在业务代码里实现这些逻辑。通俗理解:👉 服务网格就是服务之间的“交通管理系统”。服务只管业务逻辑通信、安全、监控等非功能性需求交给服务网格来做服务网格(Service Mesh) = Sidecar 代理 + 控制平面,是微服务体系下的服务通信治理基础设施。

2025-09-01 15:32:09 620

原创 常见的 架构设计原则

常见的可以分为和两个层面。

2025-09-01 15:21:33 688

原创 java系统重构

在常用的方法可以分为和。

2025-09-01 15:09:49 656

原创 微服务 token 鉴权的7种方案

图片多个服务无法共享Session。重复认证,导致系统性能严重下降。2023年某电商平台发送安全事故:黑客通过XSS攻击窃取此Token后,在2小时内盗取5万用户余额,暴露三大漏洞:• Token未绑定IP/设备指纹• 敏感操作未二次认证• 无异常行为检测机制2.常见的Token鉴权方案。

2025-09-01 11:35:01 888

原创 什么是技术债务

技术债务(Technical Debt)是由Ward Cunningham提出的一个隐喻,它指代软件开发中,为了短期利益(如更快地发布版本、满足紧急截止日期)而采取的一种妥协方案,这种方案会在未来带来额外的维护和重构成本,就像金融债务需要支付利息一样。就像刷信用卡消费。今天你可以方便地买到想要的东西(快速实现功能),但如果你不及时还款(不重构代码),未来就需要偿还本金+高额利息(未来开发效率降低、Bug频发、修复成本剧增)。积极的一面:当被主动、明智地。

2025-08-29 16:26:39 747

原创 架构设计 重要的要素

架构设计的本质,就是在这些重要的、且往往相互冲突的要素之间进行权衡(Trade-off)。追求极高的性能,可能会增加代码的复杂性,牺牲可维护性。追求极高的安全性,可能会引入额外的验证步骤,牺牲性能。追求极高的可靠性,需要增加冗余,牺牲成本。为了快速上线(业务约束),可能会采用更简单的方案,牺牲一部分可扩展性。一个优秀的架构师不会追求所有维度的完美,而是会:理解业务上下文:明确当前阶段什么要素最重要(例如,初创公司可能更关注上市速度和成本,而金融系统则把安全性和可靠性放在首位)。做出明智的权衡。

2025-08-29 16:15:28 626

原创 常见软件架构设计模式

中小型应用:分层架构 + MVC 足够。复杂前端 / 客户端大型互联网 / 高并发:微服务 + EDA + CQRS。业务复杂领域:DDD + 六边形架构。插件化 / 平台型:微内核架构。

2025-08-29 15:32:10 959

原创 MVP 和 MVC 分层架构

MVC→ 更偏向后端/Web 开发,适合请求-响应模式。MVP→ 更偏向客户端/移动端 UI,解耦更彻底,便于测试。

2025-08-29 15:27:41 483

原创 COLA 架构

COLA架构提供了一套行之有效的实践方案,将DDD、整洁架构、面向对象等优秀思想落到了实处。它通过分层、组件和规范,强制开发者写出结构清晰、可维护性高的代码,非常适合作为复杂业务系统中后端应用的基线架构。它不是万能的银弹,但对于希望提升代码质量和工程能力的团队来说,是一个非常值得学习和引入的架构范式。

2025-08-29 15:16:59 1579

原创 架构设计思想和方法论

👉架构设计思想= 一些核心原则(高内聚低耦合、可扩展、高可用、安全性、一致性)。👉架构设计方法论= 一些行之有效的方法(4+1 视图、DDD、演进式架构、ATAM、ADR)。在复杂性、性能、可维护性、成本之间找到平衡;结合业务现状选择合适的架构,而不是追求“最炫技术”。

2025-08-29 14:44:39 1071

原创 常见的软件架构设计模式

模式特点优点缺点应用场景分层架构分层解耦清晰、分工明确跨层调用性能差Web系统C/S客户端-服务端职责清晰服务器压力大Web/桌面主从架构主写从读提升性能一致性问题管道-过滤器数据流处理解耦、可扩展性能开销数据处理、编译器微内核核心 + 插件灵活扩展插件复杂IDE、浏览器事件驱动发布订阅高并发、解耦调试难MQ、监听器微服务服务拆分灵活扩展分布式复杂SOA面向服务复用性强治理复杂企业应用集成事件溯源状态由事件重放可追溯。

2025-08-29 14:31:57 914

原创 Java架构师核心职责

Java架构师是一个至关重要的高级技术领导角色,其职责远不止是“写代码”。他们是一个团队或项目的。可以将Java架构师比喻为Java架构师是一个的复合型角色。他们不仅是技术的专家,更是。他们的工作直接决定了软件系统的,是任何一家技术驱动型公司的核心资产。

2025-08-29 14:25:34 835

原创 WebSocket详解

WebSocket 是现代 Web 开发中实现实时、双向通信的基石技术。它通过一次简单的 HTTP 升级握手,建立起一个持久、低开销的双向数据通道,完美解决了传统 HTTP 协议在实时通信领域的短板。在开发实时交互功能时,WebSocket 通常是首选方案。

2025-08-29 11:37:59 1146

原创 SpringBoot集成WebSocket支持多主题订阅和服务器客户端双向通信

首先在 中添加必要的依赖:2. WebSocket 配置类3. 消息控制器4. 消息实体类5. 客户端HTML页面在 目录下创建 :6. 主应用类7. 使用说明启动SpringBoot应用程序访问 http://localhost:8080点击"连接"按钮建立WebSocket连接在订阅区域输入主题名称并点击"订阅"在发送区域填写发送者名称、消息内容和目标主题,点击"发送"可以通过访问以下URL测试服务器主动发送消息:http://localhost:8080/s

2025-08-29 10:34:22 669

原创 RabbitMQ 的消息默认不是单线程取消息的,但消费者的并发度默认是 1

配置了和prefetch=2后,其工作流程如下:fill:#333;Channel.consume() - 准备接收消息loop[对于每个消费者线程 (共5个)]Queue中有10条消息待处理... (分发至所有线程)loop[消息分发 (根据prefetch=2)]每个线程的本地缓存中有2条消息...par[线程1处理消息1][线程2处理消息3][其他线程并行处理]线程2处理更快,先空闲下来线程2的Channel: 请求新的消息(因为prefetch=2,已Ack了2条)

2025-08-28 10:34:55 960

原创 JavaMelody应用性能监控

它是什么:一个简单、轻量、功能强大的单应用性能监控工具。核心用途:快速定位接口性能瓶颈、分析慢 SQL、监控 JVM 健康状况。最大优点集成简单,几分钟内就能看到效果,可视化做得非常好。适用场景开发和测试环境:快速调试性能问题。中小型生产环境:作为轻量级的监控解决方案。大型生产环境:作为 Prometheus 等标准监控系统的补充,因为它提供的 SQL 和 HTTP 请求详情非常直观,便于开发者直接排查问题。

2025-08-28 09:29:50 858

原创 Arthas 怎么在tomcat使用

场景推荐方法优点临时排查线上问题方法一:标准Attach无需重启,无需修改配置,最安全快捷无法SSH,但能通网络方法二:Web Console通过浏览器访问,非常方便Tomcat运行在容器中方法三:进入容器与方法一逻辑一致,只是环境在容器内需要长期监控方法四:Java Agent随应用启动,但侵入性强或jps -l找到 PID。启动并选择进程。开始使用dashboardthreadwatch等命令进行诊断。这种方法对应用完全无侵入,是线上排查的黄金标准。

2025-08-27 16:08:44 943

原创 Arthas常用、最核心的命令

Arthas 是 Java 应用的超级救星和诊断神器。您不需要重启应用,就能实时排查问题。几乎能覆盖 90% 的线上故障排查场景。

2025-08-27 15:47:34 348

原创 find 命令

find 命令是 Linux 中最强大、最常用的文件搜索工具之一。以下是您在当前场景下和日常工作中最需要掌握的 常用且实用的 find 命令组合。一、基础语法与核心概念基本语法: find [路径…] [表达式][路径…]:从哪里开始搜索。可以是多个路径,如 /home /usr。. 表示当前目录,/ 表示整个根目录。[表达式]:用来指定搜索条件的选项,如按名称、类型、时间等。核心选项:-name: 按文件名搜索(大小写敏感)-iname: 按文件名搜索(忽略大小写)

2025-08-27 15:02:56 1016

原创 Arthas诊断工具

Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用 Arthas 轻松定位,迅速解决,及时止损,准时下班。用的都是jdk自带的小工具,比如jps、jmap、jstack等。

2025-08-27 14:01:07 621

原创 jstack 和jmap的区别

CPU 100%了?-> 先用top找到进程和线程,然后用 jstack分析该线程在干嘛。程序卡死了,不响应了?-> 用 jstack看看线程是不是都堵在某个锁上了(BLOCKED)或者死锁了。程序报了?-> 用 jmap生成堆转储(Heap Dump),然后使用或JVisualVM等工具加载分析.hprof文件,找出泄漏的对象和引用链。它们俩是JVM故障诊断中最常用、最强大的两个命令行工具,通常需要配合使用,从不同维度(线程 vs 内存)来定位复杂的应用问题。

2025-08-27 11:53:03 1007

空空如也

空空如也

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

TA关注的人

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