- 博客(37)
- 收藏
- 关注
原创 Redis的持久化工具包—RDB &AOF
Redis 是一款内存数据库,所有数据默认存储在内存中。虽然内存操作速度极快,但一旦 Redis 服务重启、进程崩溃或服务器断电,内存中的数据会全部丢失。为解决这一问题,Redis 提供了持久化机制—— 将内存中的数据定期 / 实时写入磁盘,确保数据在故障后可恢复。和混合持久化(RDB + AOF,Redis 4.0+ 引入)。下面逐一详解其原理、配置、优缺点及适用场景。RDB 是 Redis 默认的持久化方式,其核心是在指定时间点生成内存中所有数据的 “快照”(二进制压缩文件)
2025-09-16 18:01:45
831
原创 Java线程基础详解
Java 线程是 Java 并发编程的核心,它允许程序同时执行多个任务,提高资源利用率和程序响应速度。下面从基础到进阶,全面详解 Java 线程。Java 线程是并发编程的基础,核心在于理解线程生命周期、同步机制和线程池。实际开发中,需根据场景选择合适的线程创建方式,通过或Lock保证线程安全,优先使用线程池管理线程资源,避免手动创建和销毁线程。同时,要注意避免死锁、内存泄漏等问题,写出高效且安全的并发程序。
2025-09-16 15:02:04
1013
原创 MySQL的查找加速器——索引
MySQL 索引是数据库性能优化的核心工具,如同书籍的目录,能帮助数据库快速定位数据,避免全表扫描。下面从基础概念、底层结构、类型划分、工作原理、优缺点及最佳实践六个维度详细解析,并结合实际业务场景(如短链接平台、电商系统)说明其应用索引是 MySQL 在存储引擎层(如 InnoDB)创建的数据结构,通过对表中特定字段的值进行排序和组织,实现 “快速定位数据位置” 的功能。核心目标:减少磁盘 I/O 次数(数据库操作中最耗时的环节),提升查询效率。类比:查询表中的短链接时,无索引需逐行扫描全表;
2025-09-15 19:00:00
1114
原创 StringBuilder 深度解析:数据结构与扩容机制的底层细节
在 Java 开发中,字符串拼接、修改是高频场景,但 String 的不可变性往往会因频繁创建临时对象埋下性能隐患。而 StringBuilder 作为处理可变字符串的核心工具,凭借底层高效的存储设计与灵活的扩容机制,成为解决这类问题的 “利器”。本文将从底层原理到实战优化展开:先拆解 StringBuilder 的核心数据结构,再深入剖析扩容机制的关键细节(包括容量计算逻辑、数组复制过程),最后分享减少扩容开销的实用技巧。
2025-09-14 17:53:53
1007
原创 死锁(Deadlock)全方面解析
死锁是操作系统、分布式系统、数据库等领域中典型的资源竞争问题,指多个进程(或线程、任务)因互相等待对方持有的不可释放资源,而陷入永久阻塞的状态。这种状态下,没有任何进程能继续推进,也无法通过自身逻辑打破僵局,必须依赖外部干预(如进程终止、资源强制回收)才能恢复系统正常运行。死锁这东西,说白了就是 "互相卡脖子"—— 几个线程(或者进程)都拿着对方需要的东西,又都等着对方先放手,结果谁也动不了,就这么僵住了。要理解死锁,需先明确其本质资源竞争的极端化。
2025-09-14 13:57:05
1628
原创 最常用的锁:ReentrantLock可重入锁
本文系统解析了Java并发编程中的ReentrantLock同步工具。作为synchronized的增强替代方案,ReentrantLock通过AQS实现,具备可重入性、可中断锁获取、公平/非公平模式选择及多条件变量等核心特性。文章详细对比了其与synchronized的差异,包括灵活性、性能表现和使用复杂度,并给出标准使用流程(必须在try-finally中确保锁释放)和典型应用场景(如生产者-消费者模型)。最后指出应基于具体需求在易用性(synchronized)与高级功能(ReentrantLock)
2025-09-12 14:47:00
1436
原创 java语言的反射机制·
在 Java 中,反射(Reflection)是指程序在运行时可以获取类的完整信息(如类名、父类、接口、字段、方法等),并动态操作类或对象的成员(包括私有成员)的机制。它打破了编译期的类型约束,让程序具备了动态性,是许多框架(如 Spring、MyBatis)实现核心功能的基础。今天我们从各个角度来了解一下反射机制。总结一下,反射就是 Java 程序的 “自我操控” 能力,是框架的核心,但平时写业务代码别乱用 —— 能直接new就别反射,能直接调方法就别反射。
2025-09-12 10:16:37
1062
原创 从底层原理开挖,深入观察concurrthasgmap和hashmap的区别
在 Java 开发里,HashMap 和 ConcurrentHashMap 是处理键值对的 “老熟人”—— 前者用在单线程场景超顺手,后者则是多线程并发的 “安全牌”。但不少人对它们的认知,只停留在 “HashMap 不安全、ConcurrentHashMap 安全” 这层表面,至于 “为啥不安全”“安全是怎么实现的”“底层结构到底差在哪”,却没怎么深究。
2025-09-11 16:34:49
876
原创 拆分了解HashMap的数据结构
在 Java 开发中,HashMap 是高频使用的集合类,从业务缓存到框架底层都离不开它,但多数开发者对其理解仅停留在 “键值对存储”,对 “为何高效”“为何踩坑” 的底层逻辑一知半解。面试中 “JDK1.7 与 1.8 的 HashMap 有何不同”“链表为何转红黑树”,开发中 “扩容导致性能波动”“哈希冲突引发查询变慢”,这些问题的答案,都藏在 HashMap 的底层设计里。它不是简单的 “数组 + 链表”,而是融合哈希算法、动态扩容、红黑树的复杂体系,每处细节都是 “时间与空间的权衡”。
2025-09-11 15:16:27
1107
原创 从ASID入手学习MySQL的事务机制
当我们在后端开发中,几乎所有涉及 “关键业务数据” 的场景(比如电商订单创建、金融转账、支付对账),都绕不开一个核心诉求 ——数据一致性。想象这样一个场景:用户下单支付时,系统扣减了用户余额,却因网络波动导致订单状态未更新;或是并发下单时,多笔请求同时修改库存,最终出现 “超卖” 漏洞。这些问题的根源,往往是缺乏对数据库操作的 “原子性控制”—— 而 MySQL 的事务机制,正是解决这类问题的 “底层保障”。
2025-09-10 16:00:53
892
1
原创 基于代理模式:深入了解静态代理和动态代理
代理模式是设计模式中结构型模式通过一个 “代理对象” 来间接访问 “目标对象”,并在访问前后添加额外操作,从而实现对目标对象的控制或功能增强。今天我们从代理模式开始了解,基于代理模式去深入了解静态代理模式和动态代理模式。// 抽象主题:定义用户服务的接口// 添加用户// 删除用户总的来说,代理模式通过 “代理对象” 实现对 “目标对象” 的间接访问,核心价值是控制访问 + 功能增强。静态代理简单但冗余,适合简单场景;
2025-09-10 15:14:29
1179
1
原创 微服务事务管理利器:Seata 核心原理与实践指南
在微服务架构中,业务逻辑被拆分为多个独立服务,一次完整业务流程往往需要跨多个服务调用(如订单服务调用库存服务、支付服务)。此时传统单机数据库的 ACID 事务已无法满足需求 —— 若某一环节调用失败(如支付成功但库存扣减失败),会导致各服务数据不一致,这就是分布式事务问题。
2025-09-09 17:31:29
1281
原创 Linux的基本常用指令
无论是服务器运维、后端开发,还是嵌入式开发,Linux 系统都是行业里的 “硬通货”—— 全球超 80% 的服务器运行在 Linux 之上,甚至我们日常用的 Android 系统,底层也是 Linux 内核。但对刚接触 Linux 的朋友来说,“纯命令行操作” 往往是第一道门槛:面对黑屏白字的终端,不知道怎么切换目录、查看文件,更别提处理文件权限或排查系统问题,很容易陷入 “无从下手” 的迷茫。其实,Linux 的强大恰恰体现在命令行的高效性上,而掌握常用基本指令,就是突破这道门槛的关键。
2025-09-09 14:18:57
919
原创 对计算机网络模型的理解
计算机网络模型是为解决异构网络通信复杂性而设计的分层架构,核心思想是 “分而治之”—— 将网络通信流程拆解为多个独立层级,每层专注于特定功能,通过标准化接口协作,最终实现跨设备、跨网络的数据传输。目前主流模型有OSI 七层参考模型(理论基础)和TCP/IP 四层(或五层)模型(实际互联网实现),下面我们来详细了解一下计算机网络模型。
2025-09-08 15:11:17
938
1
原创 Linux使用——Finalshell下载和连接
当我们在云计算学习与个人项目开发中,一台稳定的云服务器是刚需 —— 无论是搭建测试环境、部署个人博客,还是练习 Linux 命令,云服务器都能提供灵活的硬件支持。而对于学生、个人开发者或技术新手来说,“零成本入门” 往往是首要需求,阿里云推出的免费试用计划与学生专属优惠,恰好为这一群体提供了低门槛接触云服务的机会。。
2025-09-08 11:26:06
2418
1
原创 JMeter介绍以及使用详解
Apache JMeter 是由 Apache 软件基金会开发的一款开源、跨平台的性能测试工具,主要用于模拟高并发用户场景,对各类系统(如 Web 应用、API 接口、数据库、消息队列等)进行负载测试、压力测试和性能评估,它的核心目标是通过量化指标(如响应时间、吞吐量、错误率、资源使用率等)揭示系统在不同负载下的性能瓶颈与稳定性。
2025-09-07 17:38:27
1075
原创 微服务的保护方式以及Sentinel详解
在微服务架构中,服务被拆分为独立、分布式的单元,彼此通过网络调用协作。这种架构虽提升了灵活性,但也引入了故障扩散、流量过载、安全漏洞、数据不一致等风险。因此,微服务的保护本质是:通过一系列技术手段和策略,保障微服务集群的可用性、安全性、可靠性,避免单个服务的问题影响整体系统,同时确保数据和接口的安全。微服务保护并非单一机制,而是覆盖 “服务运行、接口交互、数据存储、安全访问” 全链路的体系化方案。今天我们从雪崩问题及其解决方案来入手,简单的认识一款用来做微服务限流的技术栈——Sentienl.
2025-09-07 16:23:35
1317
原创 ElasticSearch 基础内容深度解析
ElasticSearch(简称 ES)是一款基于 Apache Lucene 构建的分布式全文搜索引擎与数据分析工具,核心优势在于能高效处理海量数据的近实时存储、检索与分析。它采用分布式架构,数据会自动拆分为分片分散存储在多节点,同时支持副本备份,既保证了高可用(节点故障不丢数据),也能通过横向加节点轻松扩展,应对 TB/PB 级数据规模;依托 Lucene 的倒排索引技术,它能实现精准匹配、模糊查询、多语言分词检索等强大全文搜索能力,且数据写入后秒级即可被查询,兼顾实时性与检索效率。
2025-09-06 21:15:02
998
原创 JVM中常见的GC垃圾收集器
在 JVM 中,垃圾收集器(GC)的设计目标差异显著,主要体现在吞吐量、延迟、内存支持规模、线程模型等核心特性上。小型应用 / 嵌入式:优先 Serial GC;吞吐量优先(批处理):Parallel GC;中大型应用(平衡吞吐与延迟):G1(默认选择);超低延迟 + 大内存:ZGC 或 Shenandoah(根据 JDK 版本和生态选择)。实际使用中需结合堆大小、CPU 核心数、延迟要求进行压测调优,而非盲目选择 “高端” 收集器。
2025-09-06 20:16:25
1205
原创 MySql的事务机制
MySQL的事务机制:搞定数据一致性的关键 做后端开发时,你一定遇到过这些糟心事:转账时“扣了钱没到账”、电商下单“超卖”、订单状态“部分更新”——其实这些问题,本质都是没用好MySQL事务。事务是MySQL保障数据一致性的核心:它把多步SQL封装成“要么全成、要么全败”的单元,是金融、电商等场景的“数据安全阀”。但很多人只懂COMMIT/ROLLBACK,却搞不清ACID、隔离级别,还常踩“引擎选错事务失效”的坑。
2025-09-05 16:16:38
860
原创 TCP协议的三次握手与四次挥手深度解析
维度三次握手(建立连接)四次挥手(关闭连接)核心目标双向确认收发能力,协商 ISN、MSS、Window双向关闭连接,确保双方数据均传输完成状态流转客户端:CLOSED→SYN_SENT→ESTABLISHED服务器:CLOSED→LISTEN→SYN_RCVD→ESTABLISHED客户端:ESTABLISHED→FIN_WAIT_1→FIN_WAIT_2→TIME_WAIT→CLOSED服务器:ESTABLISHED→CLOSE_WAIT→LAST_ACK→CLOSED关键报文。
2025-09-04 18:59:05
1341
原创 GC垃圾收集器的“垃圾收集算法”
在 Java 开发中,JVM 的垃圾收集(GC)总像个 “隐形助手”—— 不用手动释放内存,却在 OOM、Full GC 频繁、接口超时等问题爆发时,让不少开发者陷入困境。其实,GC 的核心能力,全藏在 “垃圾收集算法” 的设计里。毕竟 GC 不是 “无脑回收”,而是要在回收效率、内存碎片、业务停顿时间三者间找平衡:年轻代为何选复制算法?老年代为何用标记 - 整理?G1 的 Region 划分又如何优化延迟?这些答案,都得从算法逻辑里找。
2025-09-04 15:41:41
867
原创 Http协议的请求方式
HTTP(Hypertext Transfer Protocol,超文本传输协议)的请求方式(也称 “请求方法”)是客户端向服务器发送请求时,明确 “操作意图” 的标识。不同方法对应不同的语义,决定了服务器需要执行的操作(如获取数据、提交数据、修改资源等),并遵循 “安全性”“幂等性” 等核心特性。
2025-09-03 20:56:48
1201
原创 Redis的删除策略
要全面、深入理解 Redis 的删除策略,需从设计背景核心分类(过期键删除策略 + 内存淘汰策略)内部实现细节与持久化的关联及实践选择五个维度展开。Redis 的删除策略本质是为了解决 “内存有限” 与 “性能优先” 的核心矛盾 —— 既要避免内存溢出,又要减少删除操作对单线程主线程的阻塞,同时保证数据一致性。Redis 的删除策略是 “主动清理(定期删除)+ 被动兜底(惰性删除)+ 内存溢出保护(内存淘汰)” 的三层架构,核心目标是平衡 CPU 资源、内存资源与数据一致性。
2025-09-03 18:32:12
1377
原创 同步工具的底层依赖:AQS
在 JDK 1.5 之前,Java 的同步机制主要依赖关键字和Object类的方法。这些机制虽然简单易用,但存在明显局限性;随着 Java 并发场景的复杂化(如多线程协作、高并发控制),需要更灵活、高效的同步工具。JDK 团队(以并发领域专家Doug Lea不同同步工具(锁、信号量、倒计时器等)的底层逻辑存在共性,可以抽象为一套通用框架。JDK 1.5 正式引入(JUC)包,标志着 Java 并发编程进入新阶段。
2025-09-03 17:04:50
1323
原创 String类的equals()的作用和源代码解读
在 Java 中,String类的equals()方法是用于比较两个字符串的内容是否相等的重要方法,该方法接收一个Object类型的参数anObject,返回一个布尔值,表示当前String对象与传入对象的内容是否相等。在 Java 中,String类的equals()方法是重写自Object类的核心方法,其设计目标是精确判断两个字符串的字符序列是否完全一致。相较于Object类默认的 “引用地址比较”,实现了 “内容比较”,这一特性使其成为日常开发中最常用的方法之一。
2025-09-02 19:06:57
876
原创 深挖三色标记算法的底层原理
在JVM的垃圾回收机制中,准确识别哪些对象是垃圾(即不再被引用的对象)是核心任务之一,通常采用根可达性分析算法。传统的垃圾回收算法如标记-清除(Mark-Sweep)、标记-整理(Mark-Compact)等在标记阶段通常会产生STW(Stop The World)方式,这会导致应用程序出现明显的停顿。为了减少这种停顿时间,JVM引入了三色标记算法,它是现代垃圾回收器(如CMS、G1、ZGC等)的核心算法之一。三色标记算法是一种追踪式垃圾回收(GC)
2025-09-02 15:11:51
935
原创 SpringMVC的工作原理及其执行流程
首先,MVC模式 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将请求处理控制、业务逻辑、数据封装、数据显示等流程节点分离的思想来组织代码。如图所示:所以,MVC 是一种设计模式,而Spring MVC 是一款基于MVC设计模式思想实现的的 MVC 框架,属于Spring技术栈的一部分。Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring框架集成,更利于架构的设计与搭建。
2025-09-01 19:24:26
1385
原创 Redis的五种常用数据类型。
作为一名Java开发人员,我们一定了解数据库MySQL,MySQL 是基于磁盘的关系型数据库,适合存储结构化数据,支持复杂查询和事务,侧重数据持久化与一致性,但速度较慢;所以我们引进了一款非关系型数据库——Redis, Redis 是基于内存的非关系型键值数据库,支持多种数据结构,读写极快,适合缓存、高频操作场景,内存存储为主,持久化是辅助。两者之间经常结合使用(如 Redis 缓存减轻 MySQL 压力)。
2025-09-01 18:37:30
1161
1
原创 SpringBoot的自动配置原理!
什么是Spring Boot呢?Spring Boot 是 Pivotal 团队研究开发的一款基于 Spring 框架的开源 Java 开发框架,它的核心目标是简化 Spring 应用的初始搭建和开发过程。Spring Boot 多用于开发微服务、RESTful API、Web 应用等,是目前 Java 后端开发中非常流行的框架之一。
2025-08-24 15:45:57
1159
原创 深入了解《Spring框架中Bean的生命周期》
在 Spring 框架中,Bean 是由 Spring IoC 容器管理的对象。创建出来的这些对象由容器实例化、组装和管理。毫不夸张的说,Bean 是构成应用程序主干并由 Spring IoC 容器管理的对象。所以说,在Spring框架中,Bean是非常重要的,那么今天我们就来深入了解一下bean的生命周期。
2025-08-17 15:46:38
881
原创 Mybatis持久层框架中的Executor执行器
MyBatis 中的Executor(执行器),你可以把它理解成"MyBatis 的大管家",专门负责所有和数据库打交道的脏活活儿都是它来干的。执行器就是 MyBatis 里实际操作数据库的 "打工人",负责 SQL 执行、结果转换、事务和缓存管理。根据业务场景选对执行器类型(比如批量操作选 BATCH),能让数据库操作更高效。所以我们只需要记住一句话就行:你调用 Mapper 方法时,背后帮你跑数据库的那个 "隐形人",就是执行器。
2025-08-09 18:30:50
727
原创 《线程池的状态》:状态的保存、切换
在现在的多线程编程中,线程池作为一种高效管理线程生命周期的机制,它能够减少频繁创建和销毁线程的开销。所以线程池的状态管理就会直接影响到线程池的运行效率、资源分配以及任务执行策略。对我们来说,深入理解线程池的不同状态及转换机制,可以帮助我们能够优化任务调度、避免资源浪费,并且提升程序的整体性能。线程池的状态是理解线程池工作原理的关键之一,它决定了线程池当前可以执行哪些操作,以及如何处理新提交的任务。本文将详细介绍线程池的五种状态,以及它们之间的转换关系。
2025-07-24 16:20:22
817
原创 线程池的核心配置参数和流程!
线程池是一种多线程处理形式,它管理着一组线程,负责线程的创建、复用和销毁等操作。合理使用线程池可以提高系统的性能和资源利用率,下面主要从它要使用到的核心配置参数和使用流程两个方面来进行讲解。任务提交:外部向线程池提交新任务。核心线程处理:若核心线程数小于,创建新的核心线程执行任务。任务入队:核心线程数达到后,新任务进入工作队列等待。非核心线程处理:工作队列满时,若线程总数未达,创建非核心线程执行任务。拒绝任务:线程总数达到且工作队列已满,执行拒绝策略处理新任务。
2025-07-23 18:21:53
945
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅