自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Raft算法详解

Raft 是一种分布式一致性算法,用于管理复制日志。在分布式系统中,多个节点需要保持数据的一致性,Raft 算法提供了一种简单且高效的方式来实现这一点。与其他一致性算法(如 Paxos)相比,Raft 算法的设计目标是更易于理解和实现。它将一致性问题分解为几个相对独立的子问题,包括领导者选举、日志复制、安全性和成员变更等。

2025-04-14 14:47:43 844

原创 AQS原理详解

在独占模式下,同一时间只有一个线程能获取同步状态(例如锁),其他线程必须等待。当持有锁的线程释放锁时,队列中的下一个线程被唤醒并尝试获取锁。如果资源不足,部分线程进入同步队列等待。公平锁在获取锁时会检查等待队列中是否有其他线程在排队,按照线程等待的先后顺序分配锁;非公平锁获取锁时先通过CAS尝试获取,不考虑等待队列中的线程,可能会使新线程“插队”获取锁。方法唤醒头节点的后继节点(即等待队列中的下一个线程),被唤醒的线程会再次尝试获取资源。方法时,会唤醒等待队列中的一个线程,被唤醒的线程会尝试重新获取锁;

2025-04-13 18:50:24 592

原创 ReentrantLock实现原理详解

ReentrantLock是Java并发包中用于实现可重入锁的类,基于AQS(AbstractQueuedSynchronizer,抽象队列同步器)实现,支持公平锁和非公平锁。

2025-04-13 18:38:47 460

原创 进程同步和线程的同步

进程间同步是指多个进程在访问共享资源或进行协作时,按照一定规则协调执行顺序,以保证数据一致性和程序正确性。线程是进程内的执行单元,同一进程内的多个线程共享进程的资源。线程间同步是指在一个进程内,多个线程在访问共享资源或进行协作时,采取措施协调执行顺序,避免数据竞争和不一致问题。多个进程可能同时访问和修改共享资源,如共享文件、共享内存区域等,这会导致竞争条件和数据不一致问题。例如,多个进程同时对一个共享文件进行写操作,可能会导致文件内容混乱。多个线程同时访问和修改共享资源时,会导致数据不一致和竞争条件。

2025-03-06 23:26:53 863

原创 操作系统的中断操作

【代码】操作系统的中断操作。

2025-03-06 23:17:08 589

原创 TCP 粘包拆包

TCP 粘包拆包

2025-03-05 11:20:11 387

原创 CI/CD

CI(Continuous Integration,持续集成):是一种软件开发实践,开发人员频繁地将代码集成到共享仓库中。每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽早地发现集成错误。CD(Continuous Delivery,持续交付):是在 CI 的基础上,确保代码可以随时部署到生产环境中。它强调的是自动化部署流程,使得软件的任何版本都可以快速、可靠地部署到生产环境。CD(Continuous Deployment,持续部署)

2025-03-05 11:15:15 785

原创 AQS讲解

AQS是一个抽象类,采用模板方法模式,定义了同步器的核心结构。子类通过继承AQS并实现其抽象方法(如tryAcquire、tryRelease)来管理同步状态,而AQS负责线程的排队、阻塞与唤醒。

2025-03-04 16:07:44 531

原创 MySQL常用函数

【代码】MySQL常用函数。

2025-03-04 15:38:20 293

原创 一文带你复习Redis基础命令

Redis 是一个开源的、基于内存的数据结构存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。

2025-03-04 14:51:24 437

原创 Spring Boot自动装配原理

Spring Boot 的自动装配原理是通过注解触发从文件加载自动配置类,再利用各种条件注解决定自动配置类是否生效,最终将常用组件配置到 Spring 容器中,从而实现应用的快速搭建和自动配置。

2025-03-03 14:50:42 785

原创 java使用minio上传大文件

当上传大文件(如超过100MB)至 MinIO 对象存储时,推荐使用分片上传(Multipart Upload)方案。支持断点续传降低单次内存占用提升网络传输稳定性允许并行上传分片。

2025-03-03 14:35:03 671

原创 手写单例模式

单例模式是一种常见的设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。

2025-03-02 21:25:01 238

原创 手写一个简单易懂的策略模式

策略模式的核心思想是将算法的定义和使用分离,把一系列算法封装成一个个独立的类,使得它们可以相互替换,从而使程序的扩展性和维护性更强。

2025-03-02 21:20:36 186

原创 静态代理和动态代理的区别

静态代理是指在编译期就已经确定了代理类和目标类的关系,代理类是在编译前就手动编写好的。代理类和目标类实现相同的接口或者继承相同的抽象类,代理类中持有目标类的引用,通过调用目标类的方法来实现具体的功能。动态代理是在运行时动态地生成代理类,不需要在编译前手动编写代理类的代码。动态代理可以在运行时根据需要为不同的目标类创建代理对象,具有更高的灵活性。方法动态生成代理对象,该方法接受三个参数:目标类的类加载器、目标类实现的接口数组、方法中,在调用目标类的方法前后添加了额外的处理逻辑。的引用,并在调用目标类的。

2025-03-02 20:33:39 523

原创 二十分钟带你速通RabbitMQ

RabbitMQ 是基于 AMQP(高级消息队列协议)的开源消息代理和队列服务器。在分布式系统里,它负责在不同组件间传递消息,实现系统解耦、异步处理与流量削峰。

2025-03-02 00:32:46 1993

原创 二十分钟带你速通JUC

JUC 即包,是 Java 5 引入的用于处理并发编程的工具包,极大地简化了 Java 中多线程编程的复杂性,提供了丰富的类和接口,涵盖了线程池、锁机制、并发集合、原子操作等方面,帮助开发者更高效、安全地编写多线程程序。

2025-03-02 00:11:11 228

原创 MySQL:事务隔离级别、事务传播行为(简单明了版本)

隔离级别脏读不可重复读幻读读未提交❌❌❌读已提交✅❌❌可重复读(MySQL)✅✅✅*串行化✅✅✅*MySQL通过MVCC和间隙锁在可重复读级别避免幻读,但其他数据库可能不同。隔离级别:权衡数据一致性与性能,从低到高逐步解决脏读、不可重复读、幻读。传播行为:控制事务边界,解决多方法调用时事务如何协同(提交/回滚)。实际应用:MySQL默认的可重复读已满足多数场景,结合传播行为(如REQUIRED和)可灵活管理复杂业务逻辑。

2025-03-01 21:38:55 349

原创 JVM:JMM介绍(简单明了版本)

Java 内存模型(Java Memory Model,JMM)是一种抽象的概念,并不真实存在,它是 Java 虚拟机规范中定义的一组规则,用于屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果,保证多线程环境下程序的正确性。

2025-03-01 20:55:22 2033

原创 JVM:组成、垃圾回收器、垃圾回收算法、常见命令

【代码】JVM:组成、垃圾回收器、垃圾回收算法、常见命令。

2025-03-01 18:02:48 2272

原创 MySQL 锁机制详解

表级锁、行锁、意向锁、共享锁、排他锁、死锁

2025-03-01 17:07:19 1144

原创 接口和抽象类的区别

抽象类:使用abstract关键字修饰类。例如:// 抽象方法// 普通方法接口:使用interface关键字定义。例如:// 抽象方法,默认是 public abstract 修饰void fly();// Java 8 开始支持默认方法。

2025-03-01 16:36:21 286

原创 redis主从同步

在完成 RDB 快照同步后,主从节点之间的数据基本一致,但主节点后续还会不断接收新的写请求。为了保持主从节点数据的实时一致性,主节点会将新接收到的写命令实时地传播给从节点,这一过程类似于 AOF(Append - Only File)持久化机制中记录写命令到 AOF 文件的操作,只不过这里是将命令发送给从节点。当一个从节点启动并连接到主节点,或者从节点与主节点断开连接一段时间后重新连接,且主节点判断需要进行全量同步时,就会触发 RDB 快照同步。命令(Redis 2.8 及以后版本)来请求同步。

2025-03-01 16:28:15 267

原创 Redis哨兵模式

用于监控 Redis 主从集群的状态,并在主节点(Master)故障时自动完成。Leader 哨兵根据规则(如优先级、复制偏移量)从从节点中选择新主节点。哨兵节点通过 Raft 算法选举一个 Leader 哨兵来主导故障转移。单个哨兵节点检测到主节点无响应(如超时),标记主节点为“主观下线”。检查客户端是否支持哨兵协议,确认哨兵配置中的主节点名称与客户端一致。配置主节点写入需确认的从节点数,提升数据安全性。客户端需支持哨兵协议,通过哨兵获取主节点地址。,选举新的主节点,保障服务持续可用。

2025-03-01 16:14:30 950

原创 SpringMVC 的请求处理流程

接收到请求后,会调用处理器映射器,根据请求的 URL 查找对应的处理器。处理器映射器可以通过配置文件或注解的方式进行配置,将不同的 URL 映射到不同的处理器。对象后,会调用视图解析器,根据视图名称解析出具体的视图对象。:客户端(如浏览器)向服务器发送 HTTP 请求,请求中包含请求的 URL、请求方法(GET、POST 等)、请求参数等信息。会将处理结果(模型数据)传递给视图对象,视图对象根据模型数据进行渲染,生成最终的 HTML 页面。它负责接收所有的请求,并将请求分发给相应的处理器进行处理。

2025-03-01 15:41:59 284

原创 Spring 中控制反转(IOC)和面向切面编程(AOP)

将对象的创建、依赖管理和生命周期控制权从程序员转移给 Spring 容器,实现解耦和模块化。(如日志、事务、安全)在多个模块中重复出现的问题,避免代码冗余和高耦合。:动态代理会引入轻微性能损耗,但对大多数应用影响可忽略。关键字创建对象,导致代码耦合度高,难以维护和扩展。:基于子类继承,可代理未实现接口的类(需引入。注解字段(简单但不推荐,易导致循环依赖)。:早期方式,显式定义 Bean 及其依赖。:基于接口,要求目标类必须实现接口。(推荐):通过构造函数传递依赖。:非容器管理的对象无法被代理。

2025-03-01 15:36:30 738

原创 Java集合:List、Set、Map

的方式,进一步提高了并发度。它允许多个线程同时读,部分线程写,保证了线程安全的同时,减少了锁的竞争,提升了性能。技术,将数据分成多个段(Segment),每个段有独立的锁,不同段的操作可以并发进行,大大提高了并发性能。:ConcurrentHashMap 在。中,放弃了分段锁,采用。

2025-03-01 15:10:50 364

原创 一条SQL查询语句是如何执行的?

连接成功后,权限依赖首次查询的权限表结果,连接空闲超时(默认 8 小时,由 wait_timeout 控制)会被断开。建议使用长连接以减少连接开销,但长连接可能因内存占用过高导致 MySQL 异常重启,可通过定期断开长连接或使用。:MySQL 会先检查查询缓存,若命中则直接返回结果,否则继续后续执行流程,执行结果会被存入缓存。对于无索引的表,逐行判断;:在表存在多个索引或多表关联时,决定使用哪个索引以及表的连接顺序,以选择最优执行方案。连接器——>查询缓存——>分析器——>优化器——>执行器。

2025-03-01 15:00:40 100

原创 MySQL的严格模式和非严格模式

MySQL 对非法或异常数据采取宽松处理策略,尝试自动修正(如截断、转换)或静默接受,仅生成警告,操作仍会继续执行。MySQL 会严格执行数据校验规则,拒绝任何不符合字段定义或约束的操作,并抛出明确的错误,强制要求开发者处理异常。生产环境、金融系统、需要高数据质量的业务,或希望从数据库层面强制约束数据的场景。旧系统迁移、临时数据处理、兼容性要求高的场景,或对数据质量容忍度较高的环境。插入或更新的数据不符合字段类型、长度、范围时,直接报错(如字符串超出。对日期、时间等特殊类型的值进行严格校验(如拒绝。

2025-03-01 14:46:30 338

空空如也

空空如也

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

TA关注的人

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