自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis Bitmap 详解:高效处理海量二进制数据的利器

Bitmap 本质上是一个二进制数组,其中每个元素只能是 0 或 1。但在 Redis 中,它并不是一个独立的数据类型,而是基于 String 类型实现的 —— 因为 String 类型在 Redis 中是二进制安全的,可以存储任意字节序列,非常适合作为位图的底层存储。一个 String 类型的值最多可以存储 512MB 的数据,这意味着一个 Bitmap 最多可以包含 2^32 - 1 个比特位,足以满足大部分业务场景的需求。

2025-09-18 20:40:45 553

原创 深入理解 Seata:分布式事务解决方案从入门到实战

核心作用:Seata 作为分布式事务中间件,解决微服务跨服务 / 跨数据库场景下的数据一致性问题,具备低侵入、多模式、高性能、高可用特点,可兼容主流框架。关键构成:由 TC(事务协调者)、TM(事务发起者)、RM(分支事务管理者)协同工作;提供 AT(自动补偿,适用于关系型数据库)、TCC(手动补偿,支持非关系型数据库)、SAGA(长事务异步处理)、XA(强一致性,性能差)四种事务模式,适配不同场景。实战关键。

2025-09-15 17:49:40 1122

原创 Linux 常用命令速查手册:从入门到实战的高频指令整理

在 Linux 运维、开发日常操作中,熟练运用命令行能大幅提升效率。

2025-09-10 17:50:54 884

原创 Java ConcurrentHashMap 底层原理与线程安全机制深度解析

ConcurrentHashMap 是 Java 并发编程中的核心组件,其 JDK 8 版本通过 “CAS 无锁操作 + synchronized 局部锁” 的创新设计,实现了 “细粒度锁” 与 “高效并发” 的平衡,解决了 HashMap 线程不安全和 Hashtable 性能低下的问题。理解其底层结构、线程安全机制及扩容逻辑,不仅能帮助开发者在高并发场景下正确使用 ConcurrentHashMap,还能为设计并发数据结构提供思路。

2025-09-07 23:03:50 793

原创 Java 内存模型与垃圾回收机制详解

熟悉内存区域划分有助于理解对象的生命周期和内存分配了解垃圾回收原理可以帮助我们编写更易于 GC 处理的代码合理配置 GC 参数能够显著提升应用性能在实际开发中,我们应该根据应用特点选择合适的垃圾收集器,并通过监控和分析不断优化 JVM 参数,以达到最佳性能。

2025-09-05 15:04:04 849

原创 Sentinel 与 Feign 整合详解:实现服务调用的流量防护

创建 Feign 客户端接口,通过fallback或指定降级类:java运行// Feign客户端接口value = "user-service", // 目标服务名fallback = UserFeignFallback.class // 降级处理类// 降级处理类(实现Feign接口)@Component@Override// 降级逻辑:返回默认数据或友好提示return new UserDTO(id, "默认用户(服务降级)", "unknown");

2025-09-04 17:28:26 808

原创 Redis 核心知识精讲:从基础到实战要点

数据结构:根据业务场景选对类型(如排行榜用 Sorted Set);持久化:生产环境用 RDB+AOF 混合模式,平衡安全与性能;避坑:提前预防缓存穿透、击穿、雪崩问题。

2025-09-04 17:09:34 1366

原创 Java消息中间件(RocketMQ)

消息中间件是基于数据通信的分布式系统集成工具,通过提供消息传递和消息排队模型,扩展进程间通信能力。生产者(Producer):发送消息的应用或服务,如同寄快递时的寄件人;消费者(Consumer):接收并处理消息的应用或服务,类似收件人;消息载体:包含业务数据与路由属性,是两者通信的核心媒介。消息中间件通过异步通信与应用解耦,成为分布式系统的核心支撑组件。RocketMQ 凭借高可用、高可靠的特性,在电商、金融等场景中广泛应用。

2025-09-02 17:27:47 705

原创 SpringBoot 自动配置核心原理解析

SpringBoot 自动配置的魔力源于其精妙的底层设计,核心依赖和三大技术支柱,三者协同实现了 "约定优于配置" 的开发体验。

2025-08-22 11:34:24 946

原创 IE启动时主页被360守护了想变回去怎么办?

点击解锁。

2025-08-21 15:00:05 225

原创 Spring Framework 全面总结:核心原理与技术解析

Spring Framework核心解析:轻量级Java企业开发框架 摘要:Spring Framework作为Java企业级开发的基础框架,通过IoC容器和AOP实现松耦合与模块化开发。核心特性包括:1)控制反转(IoC)容器管理对象生命周期;2)依赖注入(DI)实现解耦;3)AOP分离横切关注点。框架采用模块化设计,包含核心容器(Core/Context)、数据访问(JDBC/ORM)、事务管理(Tx)和Web支持(Web/MVC)等模块。实践要点包括XML/注解/Java三种配置方式,以及解决循环依赖

2025-08-15 09:35:22 858

原创 Mybatis进阶:注解替换XML文件

本文对比了MyBatis中注解与XML配置方式的优缺点,并详细介绍了核心注解的使用方法。注解方式简化配置、提升开发效率,适合中小项目;XML配置集中管理、可读性强,适合复杂SQL场景。文章重点讲解了CRUD注解(@Select/@Insert等)、结果映射注解(@Results/@Result)、多参数处理(@Param)以及关联查询注解(@One/@Many)的具体应用。最后演示了通过@SelectProvider实现动态SQL的方式,为开发者提供了灵活选择配置方式的参考。

2025-08-10 21:22:03 713

原创 MyBatis进阶:动态SQL、多表查询、分页查询

UserMapper接口上篇提到简单的进行增删改查操作,指路↓MyBatis 核心入门:从概念到实战,一篇掌握简单增删改查。

2025-08-10 20:56:43 893

原创 MyBatis 核心入门:从概念到实战,一篇掌握简单增删改查

MyBatis是一款Java半自动化ORM框架,通过简化JDBC操作提升开发效率。本文介绍了MyBatis的核心概念:SqlSessionFactory(数据库连接工厂)、SqlSession(数据库会话)、Mapper接口和XML映射文件。通过创建MySQL用户表、配置Maven依赖、编写核心配置文件mybatis-config.xml、实体类User.java和Mapper接口,实现了一个完整的MyBatis项目。测试类演示了CRUD操作,并总结了参数传递(单个/多个参数、实体类参数)和结果映射(自动映

2025-08-10 14:36:47 1164

原创 输入网址到显示网页的过程

我们常常可以注意到,输入一个网址,点击回车,就跳转到了我们想看到的界面,但是这个过程在计算机网络中怎么实现呢?

2025-08-07 14:35:58 1060

原创 TCP协议要点整理

该报文中,确认标志位(ACK)设为 1,确认号为客户端的序列号加 1,表示服务器已收到客户端的关闭请求。在这个报文中,确认标志位(ACK)设为 1,确认号为服务器的初始序列号加 1,即 y + 1 ,表示客户端已收到服务器的 SYN + ACK 报文,连接建立成功。此时客户端和服务器都进入。在这个报文段中,客户端将 同步标志位(SYN)设置为 1,同时选择一个初始序列号(Initial Sequence Number,ISN),假设为 x,表示客户端希望建立连接,并告知服务器自己的初始序列号。

2025-07-30 18:03:46 1197

原创 Java动态代理

Java动态代理主要通过JDK原生代理和CGLIB实现。JDK代理基于接口,使用Proxy和InvocationHandler创建代理,在invoke()方法中增强目标对象功能。CGLIB通过继承目标类生成代理,利用MethodInterceptor拦截方法调用,适用于无接口的类。两者广泛用于SpringAOP、ORM框架等场景,JDK代理需接口支持,CGLIB性能更高且能代理普通类。开发中可根据目标对象类型(是否实现接口)选择合适代理方式。

2025-07-30 11:59:43 799

原创 ReentrantLock中的AQS(AbstractQueuedSynchronizer)

AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程等功能,并提供等待队列模型的线程同步框架。总之,AQS 是 Java 并发编程中非常重要的框架,掌握 AQS 的原理和使用方法,对于深入理解 Java 并发包中的各种同步工具,以及开发高效、可靠的并发程序具有重要意义。编辑分享。

2025-07-23 19:22:54 724

原创 Java线程池的状态:状态的保存、切换

线程池状态是指线程池在其生命周期中所处的不同阶段,用于控制和管理线程池的行为。线程池作为一种重要的并发编程工具,其状态管理直接影响到系统的稳定性、性能和资源利用率。• 线程池状态控制着任务的提交和执行,以及工作线程的生命周期。• 状态转换是单向不可逆的,遵循特定的流程。• 使用原子变量和 CAS 操作保证状态转换的线程安全性。• 合理的状态管理是线程池高效、稳定运行的关键。

2025-07-21 19:14:22 800

原创 Java线程池的核心配置参数和流程

Java中线程池的使用广泛,其中ThreadPoolExecutor最为重要,以下是ThreadPoolExecutor的重点说明。

2025-07-21 18:50:48 809

原创 Java中对CAS的理解

Java中很多地方都用到了CAS机制,本文对CAS机制做一个总结。

2025-07-19 14:48:06 1189

原创 Java中BlockingQueue阻塞队列的简单使用------生产者和消费者模型

摘要:BlockingQueue作为Java多线程编程中的关键数据结构,通过阻塞机制高效实现生产者-消费者模型。ArrayBlockingQueue(数组实现)和LinkedBlockingQueue(链表实现)是最常用的实现方式,前者读写互斥,后者支持并发操作。PriorityBlockingQueue支持优先级排序,SynchronousQueue实现直接交付。这些线程安全队列通过put()/take()方法自动处理阻塞/唤醒,简化了并发控制,在任务调度、消息队列等场景中发挥重要作用,既保证了线程安全又

2025-07-19 11:28:29 885

原创 多线程同步并发问题的解决方法和相关案例

多线程任务经常会出现数据不一致的情况,要解决这种问题,就需要使用synchronized同步锁。

2025-07-15 19:28:57 147

原创 利用Java线程技术多线程爬取网站图片

在介绍线程之前,需要介绍程序以及进程相关知识。程序是含有指令和数据的文件。进程是程序从运行到退出的一次执行过程,是操作系统分配资源的基本单位(常见的JVM、微服务等都是进程)。而线程是进程的子任务(进程内部最小执行单元),是处理器任务调度的基本单位,有独立的线程和程序计数器,线程共享所属进程第二点内存、文件等资源。

2025-07-15 11:59:53 566

原创 ArrayList核心代码阅读

ArrayList通过确保容量足够,若不足则grow()进行扩容。默认扩容策略是 1.5 倍,避免过于频繁的数组拷贝。扩容操作涉及,是的封装,保证高效的数组复制。了解ArrayList扩容机制有助于编写高效的代码,避免不必要的扩容开销。

2025-03-19 20:28:08 255

原创 Integer缓存池

在Java开发中,Integer是一个常用的包装类,但在使用==进行比较时,可能会遇到一些出人意料的结果。这是因为Java在一定范围内对Integer对象进行了缓存优化,即所谓的Integer缓存池。本文将通过代码示例、源码解析以及方法的剖析,详细探讨Integer缓存池的工作原理,并分析其对性能优化的作用。Integer缓存池会缓存-128到127之间的Integer值,对象并非每次都新建。方法会使用缓存池,尽量避免不必要的对象创建。如果需要比较Integer值是否相等,应尽量使用equals()

2025-03-19 20:09:04 265

原创 StringBuilder类的数据结构和扩容方式解读

String类是不可变的,每次拼接都会生成新的对象,导致内存开销和性能损耗,而StringBuilder则通过可变字符数组来动态修改字符串,避免了创建新对象的问题。的设计通过一个动态扩展的char[]数组来优化字符串拼接过程,避免了String的不可变性带来的性能瓶颈。通过合理的初始化容量和扩容机制,StringBuilder可以在保证性能的同时灵活处理字符串操作。

2025-02-27 20:23:25 297

原创 String类的equals()的作用和源代码解读

简介:为什么equals()方法在Java中如此重要,尤其是对于String类。equals()与==的区别,常见的理解偏差。==用于比较对象的引用是否相同,即是否指向同一内存地址。equals()用于比较对象的内容是否相同,需要类中重写equals()方法来定义比较逻辑。

2025-02-26 18:19:29 255

原创 String为什么是不可变的?

为什么String是不可变的?1.字符串内部使用一个字符数组来作为数据结构,保存字符串的所有字符。2.字符数组被final关键字修饰,所以该数组一旦被创建,就无法再为其重新分配内存空间。3.每个修改字符串的方法,都会将新的修改内容保存到一个新的字符串对象中,并不会修改原字符串的内容。例如上面举例的replace()方法substring()方法。

2025-01-20 19:37:23 430

原创 MongoDB服务被360删掉了怎么办?

D盘内存空间突然变得很小,怀疑中病毒了,灵机一动看向了右下角的360······经过一连串操作,重启后确实恢复了,但是在今天打开navicat时发现连接不上mongodb了晕但是我是另外一种问题,。

2024-10-15 21:30:51 480 1

空空如也

空空如也

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

TA关注的人

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