自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 设计接口来调用多个其他接口并做操作的方案

本文提出了一种高效调用多接口并进行聚合操作的方案。通过CompletableFuture实现并行调用优化响应时间,采用熔断降级和超时控制提升容错性。设计了标准化的响应体结构和线程安全的聚合逻辑,结合Resilience4j实现自动重试。方案包含动态配置、接口治理等扩展能力,通过压测验证了在高并发场景下的稳定性和低错误率。最后针对共享变量累加场景,提出了线程安全的解决方案。整体实现兼顾性能、可靠性和可维护性。

2025-05-27 17:22:14 686

原创 如何排查优化线上接口响应慢的问题

本文系统介绍了线上接口响应慢的排查与优化方法。首先通过监控日志、资源检查和链路追踪定位问题根源,区分单接口或全局性能问题。然后分层优化:应用层优化代码逻辑和线程管理;数据库优化SQL、索引和连接池;缓存提升命中率并预防异常;网络优化依赖服务调用。此外,架构层面建议JVM调优、弹性伸缩和微服务拆分。最后通过压测验证效果,并以电商案例展示优化成效(响应时间从2s降至80ms)。持续监控和迭代优化是保障性能的关键。

2025-05-27 16:41:10 780

原创 分布式事务,二阶段和三阶段提交

本文介绍了分布式事务的二阶段提交和三阶段提交机制。二阶段提交包含准备和提交两个阶段,但存在协调者单点故障和数据不一致的风险。三阶段提交通过增加预备阶段和改进提交流程,降低了阻塞风险并增强了容错能力,但仍可能存在部分参与者故障导致的数据不一致问题。两种方案各有优缺点,实际应用中需要结合业务场景进行选择和优化,最终通过补偿机制实现数据一致性。文章还提供了相关的参考资料和示例图解。

2025-05-27 00:50:08 424

原创 如何合理设置线程池的核心工作线程数

合理设置线程池核心线程数需考虑任务类型、系统资源和性能目标。CPU密集型任务建议设为CPU核心数+1,I/O密集型可设为2-5倍核心数。需考虑内存限制、外部依赖和队列策略,有界队列需平衡容量与线程数。高吞吐量或低延迟需求可适当增加线程数,但需避免过度消耗资源。动态调整核心线程数并配合拒绝策略能提升系统稳定性,最终通过压测调优确定最佳参数。

2025-05-26 10:00:16 919

原创 Prim算法和Bellman-Ford算法的对比

Prim算法和Bellman-Ford算法分别用于解决图论中的不同问题。Prim算法通过贪心策略在无向图中构建最小生成树(MST),适用于网络布线、电网规划等场景,时间复杂度为O(E+VlogV)。Bellman-Ford算法采用动态规划,在有向图中计算单源最短路径,支持负权边并能检测负权环,适用于金融套利或物流路径优化,时间复杂度为O(V·E)。关键区别在于:Prim针对无向图的最小连通成本,而Bellman-Ford解决有向图的最短路径问题,尤其在存在负权边时更具优势。选择取决于具体需求场景。

2025-05-25 22:16:09 260

原创 MySQL中左连接和右连接的区别

MySQL的左连接(LEFT JOIN)和右连接(RIGHT JOIN)主要区别在于保留哪张表的全部数据。左连接保留左表所有行,右表无匹配时填充NULL;右连接则相反。两者本质对称,可通过调整表顺序相互转换。使用时需注意ON条件影响连接匹配,而WHERE子句在连接后过滤可能影响结果。实际应用中应根据数据需求和查询可读性选择合适方式。

2025-05-25 17:00:05 469

原创 从该年到昨天每周订单金额总额获取SQL

本文介绍了如何编写SQL查询获取从今年1月1日到昨天的每周订单总额。主要使用DATE_SUB和WEEKDAY函数将日期归为每周一作为分组依据,MAKEDATE函数获取当年1月1日,通过SUM聚合计算每周订单总额。关键点包括:1)动态确定日期范围;2)将日期调整至当周周一;3)按周分组求和并排序。该查询适用于MySQL环境,能准确统计指定时间段的周度订单数据。

2025-05-25 15:04:54 230

原创 使查询性能提升 10 倍以上的SQL优化案例

SQL优化案例:针对800万行电商订单表的慢查询(2.3秒),通过重构组合索引将性能提升10倍以上。原单列索引(status)导致120万行回表和文件排序。新建组合索引(status,payment_method,create_time)实现:1)完全覆盖WHERE条件的最左前缀;2)避免文件排序;3)减少90%回表。优化后查询耗时降至210ms,执行计划显示索引范围扫描8万行且无filesort。进一步建议可创建包含所有查询列的覆盖索引以完全避免回表。该案例展示了合理设计组合索引对复杂查询的关键优化作用。

2025-05-24 23:07:53 512

原创 Java序列化的使用场景

Java序列化主要用于网络传输(如RPC调用)、持久化存储(缓存/会话)、深拷贝实现及框架依赖场景。其特点为简单易用但性能较低,存在兼容性和安全隐患。现代项目更推荐JSON、Protobuf等高效替代方案,若必须使用需管理serialVersionUID并加强安全防护。典型应用包括分布式系统数据传输、Tomcat会话存储及Spark任务分发,但在高并发或跨版本场景应谨慎选择。

2025-05-24 22:49:49 673

原创 Java中.class文件被加载到内存中的时机

ava中.class文件的加载由类加载机制控制,主要发生在主动引用时:实例化对象、访问静态成员、反射调用、子类初始化触发父类加载及主类启动。被动引用(如通过子类访问父类静态字段、数组定义、常量访问)不会触发初始化。类加载按需进行,遵循加载→验证→准备→解析→初始化的流程,通过Class.forName()会触发初始化,而ClassLoader.loadClass()仅加载。理解类加载机制有助于优化启动性能及排查类加载异常。

2025-05-24 22:31:48 468

原创 实际开发中的异常处理经验

本文介绍了Java异常处理的最佳实践,主要内容包括:1.分层处理异常(DAO层封装底层异常,Service层处理业务逻辑,Controller层统一响应);2.自定义异常设计(继承RuntimeException,携带错误码和上下文);3.日志记录规范(记录完整堆栈,避免敏感信息);4.资源自动释放(try-with-resources);5.常见误区及解决方案;6.完整的异常处理流程建议。强调通过分层处理、合理封装和统一响应来提升系统健壮性。

2025-05-24 21:55:33 225

原创 与Spring依赖注入相关的四个注解

本文介绍了Spring依赖注入的四种核心注解:@Autowired、@Resource、@Qualifier和@Primary。其中@Autowired是Spring特有注解,默认按类型匹配Bean;@Resource来自JavaEE规范,优先按名称匹配;@Qualifier用于指定具体Bean名称消除歧义;@Primary标记默认Bean。文章详细对比了各注解的使用场景、冲突解决方式及协作关系,并给出最佳实践建议。

2025-05-24 21:18:48 424

原创 SpringBoot3中的属性(配置变量)绑定

Spring Boot3提供了类型安全的属性绑定机制,主要通过@ConfigurationProperties注解将配置文件中的属性映射到Java对象。支持宽松绑定规则(多种命名格式)和构造函数注入方式。使用时需在启动类添加@EnableConfigurationProperties启用配置类,并通过prefix指定配置前缀。这种方式简化了配置管理,避免了硬编码和手动属性读取。

2025-05-24 20:55:01 154

原创 Linux系统中8080端口占用问题解决

netstat 是一个用于显示网络统计信息的命令行工具,常用于查看网络连接、路由表、接口状态等。通过 sudo netstat -tulnp | grep ':8080' 命令,可以查看监听在8080端口的TCP/UDP连接及其相关进程信息。常用参数包括 -t(TCP协议)、-u(UDP协议)、-l(监听状态)、-n(数字形式显示地址和端口)、-p(显示进程信息)。-n 参数会将地址和端口以数字形式显示,而省略时则显示服务器名称。此外,ps -f -p PID 命令可用于查看指定进程的详细信息。结合 fin

2025-05-22 23:44:58 296

原创 Java的多态是如何实现的

Java 多态通过 方法重写、动态绑定和方法表实现,其本质是运行时根据对象实际类型动态调用方法。继承和接口是多态的两种主要实现方式,前者效率更高,后者更灵活。合理运用多态可提升代码扩展性和可维护性。

2025-05-06 10:55:44 427

原创 为什么Lua脚本可以保证原子性

在Java编程中,有两个场景中提到了原子性。一个是数据库事务的ACID四大特性中的原子性,它是指"数据库操作要么都成功执行,要么都回滚!另外一个则是并发编程中的三大特性之一的原子性,它是指"线程的操作,不可被拆分,不可被中断!该面试题中的原子性则主要是指并发编程中的原子性!Lua脚本是一种使用C语言编写的轻量小巧的脚本语言,它设计的目的就是为了嵌入到应用程序中,并为应用程序提供灵活的扩展和定制能力。从 Redis 2.6.0 版本开始,支持通过内置的Lua脚本解释器,使用EVAL命令对Lua脚本进行操作。

2025-05-04 22:58:53 460

原创 Java异常体系

非检查型异常:继承自RuntimeException或Error,如NullPointerException、ArrayIndexOutOfBoundsException等,通常由代码逻辑错误导致。检查型异常:继承自Exception但不属于RuntimeException的子类,如IOException及其子类(FileNotFoundException、CharacterCodingException)、ClassNotFoundException等,编译器强制要求处理。

2025-05-04 21:36:13 265

原创 Java中的Object类

java.lang.Object类是Java语言中的根类,即所有类的父类。如果一个类没有特别指定父类,那么默认则继承自Object类。根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。其中2个方法特别常用:public String toString():返回该对象的字符串表示。public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

2025-05-02 16:39:13 1028

原创 Java中的工具类

Java中的工具类(Utility Classes)是开发中用于简化常见任务、提高效率的代码模块,涵盖了字符串处理、集合操作、文件IO、日志管理等多个领域。

2025-05-02 12:26:38 396

原创 索引的优化和升级

写操作成本:每新增一个索引,INSERT/UPDATE/DELETE 操作需额外维护索引树,写入密集型场景建议单表索引控制在 5 个以内。:前缀索引优化:对长文本字段(如地址),通过 COUNT(DISTINCT LEFT(column, N)) 测试最佳前缀长度。:对长文本字段(如VARCHAR(255)),需平衡前缀长度与选择性,例如通过COUNT(DISTINCT LEFT(column, N))测试最佳长度。:若查询常按(name, age)组合筛选,应创建联合索引而非单字段索引,避免回表。

2025-05-01 16:51:48 1015

原创 LongAdder

特性AtomicLongLongAdder并发更新性能一条变量,竞争激烈多个段,竞争分散内存使用只占用一个变量多个 Cell,占用更多内存实时性实时获取准确值获取值需 sum() 聚合适用场景并发不高或读多写少并发高、写操作频繁。

2025-05-01 16:15:51 244

原创 前端Token的存放位置

存储方式安全性持久性推荐用途❌ XSS易获取✅ 高临时项目或非敏感数据❌ XSS易获取⚠️ 一般短期访问、单窗口操作✅ 最安全✅ 高推荐用于生产环境登录系统内存变量✅ 安全❌ 低对安全性要求极高的 SPA对于普通前后端分离项目(如 React/Vue + REST API), 最常见的是放在 LocalStorage 或 SessionStorage 中// 登录成功后保存// 后续请求时带上${

2025-05-01 15:54:19 468

原创 一种典型的服务前后端流问题

数据不一致或接口不匹配。

2025-05-01 13:46:17 250

原创 Java中的内存优化

弱引用(WeakReference):用于缓存场景(如 WeakHashMap),GC时自动回收无强引用的对象,避免内存泄漏。使用 WeakReference 或第三方缓存库(如Guava Cache)结合LRU策略,控制缓存生命周期。,其核心思想是通过共享对象来减少内存消耗并提升性能,尤其适用于需要处理大量相似对象的场景。软引用(SoftReference):内存不足时释放,适用于敏感缓存(如图片缓存)。(可变、不可共享),将重复的部分共享,从而避免创建大量冗余对象。(不可变、可共享)和。

2025-04-28 17:33:06 601

原创 跨域资源共享(CORS)

跨源资源共享(Cross-Origin Resource Sharing)的英文单词首字母缩写。它是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他源,使得浏览器允许这些域加载自己的资源。CORS就是一种使得服务器能够在浏览器的配合下,控制来自不同域的网页对自己资源的访问的一个机制。

2025-04-26 23:31:19 376

原创 桶排序(Bucket)的时间复杂度

当输入数据均匀分布时,每个桶中的元素数量大致相同,均为n/k,并且每个桶内的排序操作(通常是插入排序或快速排序)的平均时间复杂度为 O(n)。此时桶内元素数量m = n,若使用插入排序等O(m²)算法,桶内排序时间为O(n²),总时间复杂度为O(n + n²) = O(n²)。因此,如果每个桶的排序操作都是 O(n),并且我们有 k 个桶,则总的时间复杂度为 O(n + n/k * k),简化后得到 O(n)。桶排序的平均时间复杂度为 ‌O(n+k)‌,其中:n‌ 是待排序元素的数量,k‌ 是桶的数量。

2025-04-26 16:45:43 299

原创 Redis除了分布式锁之外的应用场景

Redis不仅限于分布式锁,其核心价值在于通过灵活的数据结构和高性能特性,覆盖缓存、实时通信、计数、排名、会话管理等多种场景。简单键值存储→ 缓存、计数器复杂结构→ 排行榜、社交关系扩展功能→ 发布订阅、地理位置。

2025-04-24 11:16:16 237

原创 除了Redis实现分布式锁的其他方案

依赖现有数据库系统,无需额外组件。:性能较低(尤其高并发场景),锁无自动超时机制易导致死锁,且不支持重入。

2025-04-24 11:01:49 223

原创 Redis的三高如何保证

Redis 支持主从结构,一个主节点(Master)可以有多个从节点(Slave)。当主节点故障时,从节点可以继续提供只读服务。Sentinel 用于监控 Redis 实例状态,一旦发现主节点故障,会自动完成主从切换(故障转移),选举新的主节点。Redis 是单线程处理请求,通过多路复用(IO multiplexing)处理大量连接,避免多线程上下文切换的开销。每个主节点负责一部分数据,同时每个主节点有一个从节点作为备份,主节点宕机会自动故障转移。数据会自动从主节点同步到从节点,保障数据冗余。

2025-04-22 21:23:13 268

原创 OpenFeign第一次调用为什么会很慢?

绝大部分的组件第一次访问的时候都会有点慢,抛开业务代码和前端网络通信过程中的缓存初始化,单独就OpenFeign来说,主要有以下几个方面:尽量避免在第一次调用的时候去初始化各种配置,具体来说有两个方法:参考资料:【Java面试最新】OpenFeign第一次调用为什么会很慢?

2025-04-22 10:49:33 175

原创 对Linux的理解

Linux 是一个 类 Unix 的自由和开放源代码的操作系统内核,由 Linus Torvalds 于 1991 年首次发布。现在,Linux 通常指的是以 Linux 内核为核心、结合 GNU 工具链和各种开源软件组成的操作系统(比如 Ubuntu、CentOS、Debian 等)。

2025-04-22 00:23:32 282

原创 C++中的智能指针

智能指针是C++中一种用来的对象封装器。它像普通指针一样使用,但在生命周期结束时能够,从而有效防止内存泄漏和野指针等问题。

2025-04-21 22:27:39 163

原创 B+树节点分裂

B+树节点分裂是B+树在插入数据时常见的一种操作。由于B+树是一种,每个节点可以有多个子节点。当某个节点插入新键值后超出了它的最大容量(即超过了阶数限制),就需要执行以维持树的平衡性。

2025-04-21 22:20:17 238

原创 内存泄漏的概念及其原因对策

内存泄漏是指程序在运行过程中,动态分配的内存空间未被及时释放,导致该内存空间无法被其他程序使用。通常,这种情况发生在程序请求内存后,忘记释放或错误地释放了内存,导致这些内存空间无法被回收,从而占用系统资源,最终可能导致系统或程序崩溃。程序的内存占用逐渐增加,可能会导致系统变慢或崩溃。在长期运行的系统(如服务器)中,内存泄漏可能会导致资源耗尽。

2025-04-21 21:55:47 205

原创 工作流引擎的选择

对于比较简单的流程,OsWorkFlow会是一个比较好的选择,对于复杂的流程就不推荐了,OsWorkFlow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度。Camunda我们还能正常的测试,Flowable在并发100的情况下还可以,但是200的时候就直接没有了反应。

2025-04-19 00:23:24 736

原创 SQL查询慢如何解决以及如何优化索引

首先,需要识别哪些查询是慢查询。

2025-04-18 22:11:41 656

原创 Bean的生命周期和销毁过程

创建过程:实例化、依赖注入、初始化(包括@PostConstruct、InitializingBean接口、和init-method)。销毁过程:销毁(包括DisposableBean接口、destroy-method、和@PreDestroy)。

2025-04-18 21:51:03 247

原创 进程的状态

进程的状态(Process States)指的是一个进程在其生命周期中所处的不同运行阶段。

2025-04-08 20:40:16 125

原创 并发与并行的区别

定义:两个及两个以上的作业在同⼀时间段内执行。但不一定是同时进行的。它们可能是交替进行的。比喻:就像一个厨师在炒菜的同时,还在煲汤和煮饭,他轮流照顾每道菜。本质:切换执行,给人感觉多个任务同时进行。常见场景:单核 CPU 也能做到并发,通过操作系统的任务切换(线程调度)来实现。

2025-04-08 20:31:52 176

原创 什么是索引区分度

索引区分度 = 字段的唯一值个数 / 总记录数它表示某个字段的“唯一性”程度,也叫“选择性”。值越接近1,说明字段的取值越分散、唯一性越高,适合建索引。值越接近0,说明字段的值重复多、区分度差,索引效果差。

2025-04-08 19:36:42 171

空空如也

空空如也

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

TA关注的人

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