自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 tcp的粘包拆包问题,如何解决?

选择依据:根据数据特点(文本/二进制、长度是否固定)选择合适方案。推荐做法:优先使用成熟框架(如Netty)的解码器,避免重复造轮子。注意事项:处理字节序、缓冲区溢出、数据校验等边界条件。通过明确数据包边界,结合应用层协议设计,可有效解决TCP粘包/拆包问题,确保可靠数据传输。

2025-04-02 21:51:14 532

原创 一个服务器算分布式吗,分布式需要几个服务器

通过通信网络共享资源、共同完成任务。,而非单纯堆砌服务器数量。分布式系统的核心在于。分布式系统的核心在于。

2025-04-02 21:50:24 513

原创 如果数据包的最后一段特别短,如何处理?

在处理TCP粘包/拆包时,如果最后一个数据段特别短(例如仅包含部分包头部或部分数据体),需要通过合理的缓冲区和协议设计来确保数据完整性。核心思想:将无法构成完整包的数据暂存到缓冲区,等待后续数据到达后拼接处理。框架内置的解码器已自动处理短包问题,无需手动管理缓冲区。

2025-04-02 21:49:40 328

原创 Java 各版本的新特性

Java 各版本的新特性主要集中在提升开发效率、性能优化、语言功能增强和模块化支持等方面。如需更详细特性,可参考。

2025-04-01 14:12:38 492

原创 CPU 密集型 vs I/O 密集型

在计算机任务处理中,和是两种常见的任务分类,理解它们的差异对系统设计、资源分配和性能优化至关重要。

2025-04-01 14:07:34 787

原创 基于 Java 的异步任务管理器的设计与实现方案

如果需要更具体的实现(如分布式任务分片、动态扩缩容)或某个框架的详细用法,请进一步说明!

2025-04-01 13:56:41 409

原创 Spring 中常见设计模式及其典型应用场景的详细介绍

Spring 框架通过灵活运用设计模式,实现了高度模块化、可扩展和低耦合的架构。理解这些模式在 Spring 中的应用场景,不仅有助于更高效地使用框架,还能提升代码设计能力。AOP 代理解决横切关注点,模板方法简化重复代码,依赖注入实现松耦合,观察者模式支持事件驱动编程。这些模式共同支撑了 Spring 的核心功能(IoC、AOP、MVC 等),使其成为企业级开发的首选框架。

2025-03-31 15:08:30 391

原创 Spring Bean 的实例化有几种方式?

接口自定义复杂的 Bean 创建逻辑(如集成第三方库)。Spring 会调用。根据实际需求选择合适的实例化方式,可以灵活平衡配置的简洁性与代码的可控性。注解的方法显式定义 Bean。适用于需要精细控制实例化过程的场景。来创建新 Bean。需要先创建工厂 Bean,再调用其方法。返回 Bean 实例。适用于需要封装对象创建逻辑的场景。(无参构造器)创建 Bean 实例。接口,根据条件动态决定是否创建 Bean。方法获取实际 Bean。

2025-03-31 14:58:10 345

原创 雪花算法原理详解

的巧妙设计,在简单性、性能和扩展性之间取得平衡,成为分布式系统中最广泛使用的ID生成方案之一。,通过结合时间戳、机器ID和序列号生成全局唯一且有序的64位整数ID。雪花算法(Snowflake Algorithm)是 Twitter 开源的一种。若当前时间小于上一次生成ID的时间(如系统时钟回退),抛出异常或等待时钟同步。将时间戳、机器ID和序列号按位拼接,生成最终的64位ID。,既避免中心化协调的开销,又保证ID的唯一与有序。读取当前时间戳(毫秒),减去预设的起始时间戳(如。

2025-03-27 16:47:12 374

原创 什么是令牌桶限流算法

算法,主要用于限制系统在单位时间内处理的请求量,避免突发流量导致服务过载。其核心思想是通过“令牌”的生成和消费来控制请求的速率,同时允许一定程度的流量突发。令牌桶算法(Token Bucket Algorithm)是一种经典的。

2025-03-27 16:17:26 372

原创 Docker 命令分类整理

掌握这些命令后,您可以高效管理 Docker 容器和镜像。

2025-03-26 13:20:31 686

原创 MySQL连接查询和子连接有什么区别,分别应用于什么场景

MySQL中的连接查询(JOIN)和子查询(Subquery)是两种不同的数据关联方式,它们在语法、执行逻辑和适用场景上有明显区别。

2025-03-26 12:47:03 438

原创 如何设计一个订单号生成服务?应该考虑那些问题?

通过上面的示例演示,下面针对这几种情况做一个分析与总结。尽可能的选择一种合理的方式。实现方案优势劣势数据库自增代码层面无需任何特殊处理;利用MySQL特点实现数据递增并发性能差;MySQL负担重UUID实现简单、方便;重复性低可读性低;过于冗长;数据库查询效率低雪花算法基于内存、速度快;性能高;不会产生额外的网络开销;数据依次成递增依赖于服务器时间,如变动服务器时间则存在重复的情况Redis基于内存、速度库;使用简单;可分布数据、扩展性强需要独立搭建一套服务、增加了维护成本;

2025-03-25 22:17:56 716

原创 Spring Boot 的启动流程

Spring Boot 的启动流程是一个复杂的自动化过程,核心围绕的初始化与run()方法展开。

2025-03-25 18:08:33 577

原创 说一下什么是TCP

的核心协议,属于 TCP/IP 协议族中的传输层协议。它负责在通信的两端(如客户端和服务器)之间建立稳定、有序的数据传输通道,确保数据准确无误地送达。,是互联网基础设施中不可或缺的协议。理解 TCP 的工作原理(如三次握手、流量控制)对于网络编程和故障排查至关重要。TCP(Transmission Control Protocol,传输控制协议)是互联网中一种。TCP 通过复杂的机制牺牲部分传输效率,换取了数据传输的。

2025-03-20 18:03:55 148

原创 滑动窗口是什么,解决了什么问题?

它通过动态调整发送和接收数据的范围,平衡网络吞吐量与资源限制,确保高效且有序的数据传输。若窗口大小为4,已发送数据1-4,收到ACK1后,窗口滑动至5-8,允许发送5-8。滑动窗口是TCP协议高效可靠传输的基石,深刻理解其原理对网络优化和故障排查至关重要。:发送窗口大小为4,发送数据包1-4。是TCP协议中用于实现。

2025-03-20 17:41:55 469

原创 MVCC(多版本并发控制)与乐观锁、悲观锁有相似之处吗?

MVCC(多版本并发控制)与乐观锁、悲观锁在并发控制的目标上有相似之处,但实现机制和应用场景存在显著差异。两者均通过“延迟冲突处理”提升并发性能,但MVCC是数据库内置的多版本机制,而乐观锁是应用层的版本校验策略。三者并非互斥,可根据业务需求组合使用(如MVCC+乐观锁实现高效且安全的并发控制)。MVCC通过无锁设计支持高并发读,悲观锁通过加锁确保强一致,但并发性较低。:在线订票系统的高并发抢票。

2025-03-20 17:23:16 288

原创 Redis自增ID怎么设计

通过合理设计键、持久化策略和集群分片,Redis能高效可靠地满足各类ID生成需求。高并发场景下,可批量获取ID区间,减少Redis交互次数。命令实现原子性递增,确保分布式环境下ID唯一且递增。

2025-03-20 01:06:30 250

原创 WebSocket怎么设计连接

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适用于需要实时交互的场景(如聊天、实时数据推送、在线游戏等)。设计一个高效、稳定的 WebSocket 连接需要从。根据业务需求选择合适的库和架构,平衡性能和开发成本。

2025-03-20 01:05:11 399

原创 锁升级原理

Java 中的锁升级(Lock Escalation)是 关键字实现高效并发控制的核心机制。其本质是通过 对象头的 Mark Word 动态调整锁的粒度,从无锁状态逐步升级到重量级锁,以平衡性能与线程安全。以下是 Java 锁升级的详细原理和实现细节:每个 Java 对象在内存中分为三部分:Mark Word 是对象头中的关键部分(64 位 JVM 中占 64 位),记录了锁状态和标志位:Java 锁升级从低开销到高开销分为四个阶段,逐步适应竞争强度:Java 的锁升级是单向的:使用工具分析锁竞争:

2025-03-20 01:02:44 407

原创 如何设计锁降级

锁降级的设计主要应用于读写锁场景,确保在保持数据一致性的同时提高并发性能。此操作允许同一线程持有读锁,避免其他线程在写锁释放后篡改数据。同一线程可重复降级,但需确保每次降级操作配对(如多次获取读锁需对应释放次数)。若需升级,必须释放读锁后重新竞争写锁。通过严格遵循获取顺序和异常处理,锁降级能有效提升高并发场景下的系统性能。此时线程仅持有读锁,其他线程可并发获取读锁。若顺序颠倒,其他线程可能趁机获取写锁修改数据,导致不一致。线程首先获取写锁,确保独占访问以修改数据。块中释放锁,避免因异常导致锁泄漏。

2025-03-20 00:42:04 260

原创 ThreadPoolExecutor 源码分析

的源码是掌握 Java 线程池工作原理的关键。以下是其核心源码逻辑的深入分析,结合设计思想和关键代码片段。),通过位运算高效管理。

2025-03-18 22:28:57 680

原创 MySQL 事务的实现原理

Redo Log保障持久性和崩溃恢复。Undo Log保障原子性和 MVCC。锁 + MVCC实现隔离性。事务 ID 和版本链支持多版本并发控制。InnoDB 通过上述机制高效实现了事务的 ACID 特性,同时在高并发场景下平衡了性能与一致性。现代应用推荐默认使用 InnoDB,仅在特殊场景(如只读分析)考虑其他引擎。

2025-03-18 21:24:29 971

原创 Mysql如何解决幻读问题

幻读(Phantom Read)是指在同一事务中,两次范围查询()的结果集不一致,因为其他事务在范围内**插入(INSERT)或删除(DELETE)**了数据。-- 事务 A-- 返回 3 条记录-- 事务 B 插入一条 age=25 的数据并提交-- 事务 A 再次查询-- 返回 4 条记录(出现幻读)快照读(MVCC):通过版本链和 ReadView 保证多次查询结果一致。当前读(Next-Key Locks):通过锁住记录和间隙,禁止其他事务插入新数据。

2025-03-18 16:25:22 355

原创 讲一下wait和notify这个为什么要在synchronized代码块中?

在 Java 中,wait()和notify()(以及)必须用在代码块或同步方法中,这是由它们的和决定的。

2025-03-13 18:39:37 440

原创 如何设计高效的数据库索引

同时避免资源浪费。需结合业务场景,通过分析查询模式、数据分布和系统特性,动态调整索引策略。定期监控和优化是维持高性能的必备手段。设计高效的数据库索引需要综合考虑。

2025-03-13 17:57:46 666

原创 如何使用CAS?CAS解决了什么问题?

CAS(Compare-And-Swap)是一种的核心机制,用于在多线程环境下实现原子操作。它通过硬件指令直接支持,避免了传统锁机制的开销,是现代高并发系统的基石之一。

2025-03-13 17:50:17 420

原创 ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

ConcurrentHashMap 是 Java 并发编程中常用的线程安全哈希表实现,其设计目标是在高并发场景下兼顾性能和线程安全。它的底层实现(以 JDK 8 及之后版本为例)结合了多种并发优化技术,以下是其核心实现原理:ConcurrentHashMap 通过以下技术实现高并发下的线程安全:3. 并发扩容机制ConcurrentHashMap 支持多线程协同扩容,避免单线程扩容的性能瓶颈:以 方法为例,流程如下:6. JDK 7 vs. JDK 8 的差异特性JDK 7(分段

2025-03-13 17:07:07 852

原创 线程池如何知道一个线程的任务已经执行完成

通过上述机制,线程池高效跟踪任务状态,确保资源合理利用及任务正确执行。:任务抛出异常仍视为完成,异常被捕获后通过。处理,线程池状态正常更新。

2025-03-13 13:53:30 149

原创 快速排序详细讲解

的高效排序算法,由 Tony Hoare 提出。其核心思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分的关键字均比另一部分的关键字小,然后递归地对这两部分进行排序。快速排序通过巧妙的分区策略实现高效排序,是实际应用中速度最快的通用排序算法之一。理解其分治思想和分区过程是掌握算法的关键,同时需注意避免最坏情况的陷阱。快速排序(Quick Sort)是一种基于。为例(选择最后一个元素。

2025-03-12 21:27:32 186

原创 Linux 常用基本命令

掌握这些命令后,你可以高效完成大多数 Linux 日常操作!

2025-03-12 21:18:27 187

原创 SQL调优手把手教学

SQL调优是提升数据库性能的关键步骤,主要通过优化查询语句、索引设计、数据库配置等手段减少资源消耗并提高响应速度。通过以上方法,可以系统性地解决大多数SQL性能问题。调优时需结合业务场景,避免过度优化(如盲目添加索引可能降低写入性能)。

2025-03-12 20:08:53 426

原创 Vue生命周期详解

允许开发者在特定时机执行自定义逻辑。以下是Vue 2.x和Vue 3.x的核心生命周期阶段及钩子函数(Vue 3兼容Composition API和Options API)。理解Vue生命周期是构建高效、健壮应用的基础,尤其在处理异步操作、资源管理和性能优化时至关重要。缓存的组件,触发激活或停用时的逻辑。捕获子组件树的错误,可用于错误上报。每个阶段都提供了对应的。Vue组件的生命周期描述了组件从。

2025-03-12 19:15:28 737

原创 Spring事务失效原因

Spring事务管理主要有编程式和声明式两种方式,声明式事务管理更为常用。事务失效的原因包括方法非public、异常未正确抛出、自调用问题、传播行为配置不当、数据库引擎不支持事务、事务管理器配置错误、多线程环境以及注解被错误覆盖等。

2025-03-12 19:13:06 182

原创 Redis缓存如何保持数据一致性

没有“银弹”方案,需根据业务场景(一致性要求、读写比例、性能需求)选择组合策略。通常推荐。

2025-03-12 18:40:28 721

原创 使用消息队列会带来哪些问题?怎么解决

使用消息队列(如Kafka、RabbitMQ、RocketMQ等)虽然能解耦系统、提高吞吐量和可靠性,但也会引入一系列复杂性问题。以下是常见问题及其解决方案:消息队列的引入需权衡利弊,核心解决思路包括:实际应用中,需根据业务场景选择合适的消息队列(如高吞吐选Kafka、复杂路由选RabbitMQ),并针对性地优化配置和架构。

2025-03-07 00:05:05 704

原创 微服务熔断(Circuit Breaker)

最终导致整个系统崩溃。其核心思想类似于电路中的保险丝:当检测到异常时,主动切断对问题服务的调用,快速失败并降级处理。通过熔断机制,微服务系统能够在部分故障时保持核心功能可用,显著提升整体稳定性。微服务熔断(Circuit Breaker)是一种。,用于防止分布式系统中因某个服务的故障引发。

2025-03-06 12:27:26 299

原创 线程池(以Java的ThreadPoolExecutor为例)在其生命周期中有5种状态

状态不可逆:一旦进入某个状态,无法回退。主动触发shutdown()和是主要触发状态转换的方法。自动过渡:从SHUTDOWN或STOP到TIDYING是自动完成的,无需手动干预。理解这些状态有助于合理管理线程池的生命周期,例如优雅关闭(允许处理队列任务)或立即终止(应对紧急情况)。

2025-03-06 11:45:59 397

原创 Java和Redis实现单点登录

使用Java和Redis实现单点登录(SSO)的核心思路是通过全局Token实现跨系统身份验证。

2025-02-28 17:36:27 261

原创 Spring AOP + 正则表达式 实现日志敏感信息脱敏

以下是一个基于 Spring AOP + 正则表达式 实现日志敏感信息脱敏的完整方案,包含代码示例和深度优化技巧:2. 定义实体类(示例)3. AOP切面核心逻辑(使用正则表达式脱敏)二、优化升级方案1. 性能优化:正则表达式预编译2. 支持嵌套对象脱敏三、日志脱敏效果对比原始数据脱敏后数据规则说明13812345678138****5678手机号保留前3后43201231990010112343201**********1234身份证保留前4后

2025-02-27 18:58:16 340

空空如也

空空如也

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

TA关注的人

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