自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM 垃圾回收机制

首先,我们思考一个问题:在 Java 中,我们创建对象时,通常不需要手动释放内存。这里发生了什么?new User():创建第一个 User 对象。:创建第二个 User 对象,第一个对象不再被变量 user 引用。:第二个对象也不再被 user 引用。那么问题来了:这两个 User 对象占用的内存什么时候释放?这就是 JVM 垃圾回收机制要解决的问题。简单来说:JVM 垃圾回收(GC)就是自动识别不再使用的对象,并回收它们占用的内存空间。它有两个核心任务:找出哪些对象已经没有用了。

2026-11-01 14:33:23 356

原创 ConcurrentHashMap 的实现原理

是HashMap的线程安全版本,核心目标是。它的实现经历了两个关键阶段:JDK 1.7 用“分段锁”降低锁粒度,JDK 1.8 改为“CAS + synchronized 锁单个桶”,并发度更高。

2026-11-01 14:32:52 318

原创 Nagle 算法

是计算机网络中一个非常著名、但也经常“帮倒忙”的算法。可以把它简单理解为网络世界里的在网络早期,带宽和路由器性能极其宝贵。假设程序只发送的数据,但 TCP 头部最小、IP 头部,实际在网络上传输的就是——有效数据占比不到 2.5%,其余全是头部开销。这类"数据很小、头部占比很高"的报文段被称为"如果大量程序都这样发,带宽就会被头部开销大量占用。这样小数据先攒着,等前一个包被 ACK 了、或攒够 MSS 了再发,网络上就不会到处是碎包。:“如果你有很小的数据要发,先别急,先把它存在缓冲区里。

2026-10-25 10:54:23 300

原创 为什么本地连接服务器上的 Redis 时使用隧道、隧道是如何工作的

核心原因在于。直接开放端口风险极高,而 SSH 隧道能在不改变 Redis 配置的前提下,提供一条加密的访问通道。

2026-10-18 13:27:33 168

原创 Bean 的生命周期

BeanDefinition = Bean 的"定义信息"或"图纸",描述了一个 Bean 该怎么造、造出来是什么样。

2026-10-17 14:38:30 89

原创 Spring 中事务失效的场景有哪些

Spring 事务回滚是由在捕获到业务方法向外抛出的异常后触发的。如果在业务里try-catch把异常吃掉了、没有重新抛出,拦截器就感知不到异常,会走 commit 分支导致事务失效。默认只回滚 RuntimeException(运行时异常,非受检异常),受检异常需要配置。

2026-10-17 14:38:07 83

原创 单例bean是线程安全的吗

类,它们通常只包含方法,没有可修改的成员变量(或者成员变量都是不可变的,如注入的Mapper或其他的Service)。对于无状态的Bean,多个线程并发调用只是执行方法栈上的局部变量,天然是线程安全的。当多用户并发请求时,Tomcat等容器会为每个请求分配一个独立线程,这些线程会并发执行该Bean的业务方法。如果你的Bean确实需要有状态的成员变量(比如用来承载请求参数的 View Model 对象),那么就必须由开发者自行保证线程安全。如果必须是有状态的,就需要手动处理同步,或者改用多例模式。

2026-10-15 16:56:43 46

原创 如何优化sql

参考阿里开发手册(嵩山版)1、设置合适的数值(tinyint、int、bigin),要根据实际情况选择。2、设置合适的字符串类型(char 和 varchar),char 定长效率高,varchar 可变长度,效率稍低。

2026-10-15 16:44:50 185

原创 详解分库分表

按照。

2026-10-15 16:44:07 34

原创 主从同步原理

2PC 就是事务提交时分 prepare 和 commit 两阶段事务提交时:│ 阶段一:prepare(准备阶段) ││ ① 写 redo log,状态标记为 prepare │。

2026-10-15 16:21:36 119

原创 数据库如何通过 MVCC 实现隔离性

MVCC 是一种"多版本 + 快照读"的并发控制机制,用来实现隔离性,并通过不同的 ReadView 策略支撑不同隔离级别,同时保证读写不阻塞。

2026-10-15 16:21:13 210

原创 Redo Log 和 Undo Log

重做日志,记录的是事务提交时数据页的,是用来实现事务的。以及,前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘发生错误时,进行数据恢复使用。事务提交↓把 Buffer Pool 中修改的数据页,随机写到磁盘 .ibd 文件↓问题:一个事务可能修改多个数据页,这些页在磁盘上分散存放↓产生大量【随机写】→ 极慢 → 数据库吞吐量暴跌:数据页是,磁头来回寻道,吞吐量暴跌。:如果提交时刷盘失败或断电,数据无法恢复。事务提交↓。

2026-10-14 15:09:11 270

原创 事务的特性

事务提交后,要把数据持久化(可以说是落盘操作)。事务一旦提交,它对数据的修改就是永久的,即使之后数据库崩溃、断电、重启,数据也不会丢。:转账过程中数据要一致,A 扣了 500,B 必须增加 500,总金额不变。它由原子性、隔离性、持久性共同保证。A 向 B 转账 500 元,转账成功,A 扣除 500 元,B 增加 500 元。:A 向 B 转账,不能受其他事务干扰。:体现在要么都成功,要么都失败。实现,失败时回滚已做的操作。

2026-10-14 14:24:29 195

原创 覆盖索引与超长分页优化

指的是LIMIT的偏移量(offset)非常大MySQL 实际做的事:沿索引顺序读前 100 万零 10 行丢掉前 100 万行只返回最后 10 行扫描了 100 万零 10 行,实际只要 10 行。浪费就在这。代价和 offset 成正比——offset 越大,要扫描、丢弃的行越多,越慢。

2026-10-14 14:23:58 195

原创 聚簇索引、非聚簇索引与回表

InnoDB 里,。B+ 树的存放的是找到索引,就等于找到了整行,:像一本字典,正文本身就是按拼音排序的,你按拼音翻到那一页,。

2026-10-14 14:23:32 239

原创 索引概念和索引底层数据结构

是帮助 MySQL 高效获取数据的。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(InnoDB 中为),这些数据结构以某种方式引用(指向)数据。这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。:把无序数据变成有序结构,将查找从 O(n) 全表扫描降为 O(log n) 树查找。

2026-10-14 14:21:59 190

原创 如何分析一个慢sql

→ 判断联合索引实际用到了哪几列。→ 没走索引,可能存在索引失效。越大越慢,接近全表行数最危险。(全索引扫描)说明需要优化。越低,说明扫了很多无效行。→ 排序或分组没走索引。

2026-10-13 20:38:56 211

原创 如何定位慢查询

聚合查询多表查询表数据量过大查询深度分页查询页面加载过慢、接口压测响应时间过长(超过 1s;实际中 500ms 以上就值得关注)。

2026-10-13 20:33:34 98

原创 索引创建的原则

索引并非多多益善,索引越多,维护索引结构的代价越大,越会影响增删改的效率(写多读少的表尤其要注意)。针对常作为查询条件(where)、排序(order by)、分组(group by)的字段建立索引。如果业务上该列本身就唯一,可建立唯一索引。区分度越高,索引效率越高。优化器知道列是否含 NULL 后,能更好地选择最有效的索引。,节省存储空间、避免回表、提高查询效率(注意遵循最左前缀法则)。针对数据量较大、且查询比较频繁的表建立索引。如果业务上该列不允许为 NULL,建表时就加。以上时,索引收益明显。

2026-10-13 20:20:21 160

原创 什么情况下索引会失效

索引失效,是指查询时因为写法或条件的问题,数据库用不上(或只用上一部分)已有的索引,导致加速能力丧失,退化成全表扫描或逐行过滤。数据照样查得出来,结果也对,只是变慢了。

2026-10-13 19:43:24 103

原创 单调栈用法

题目要求"为每个元素找左边/右边第一个比它大(或小)的元素",且暴力 O(N²) 会超时 → 用单调栈。这是最核心的信号。看到"第一个更大 / 第一个更小 / 下一个更大 / 下一个更小"这类字眼,基本就是单调栈。

2026-10-13 19:19:39 213

原创 矩阵的几种基础变换+位置判断

因为 180° 是中心对称,每对元素只交换一次。写法一:原地,交换行内元素。写法二:原地,交换整行引用。

2026-09-21 19:25:58 128

原创 SpringAOP

有 4 种:@AspectJ 注解、XML aspect、XML advisor、Advisor API。实际开发中主要用 @AspectJ 注解 + Spring Boot 默认的 CGLIB 代理。

2026-09-19 15:13:33 315

原创 Redis 为什么快

Redis虽为单线程,但凭借内存存储、简化操作、无锁设计及epoll多路复用机制,实现高效性能。其核心操作均为内存级短平快操作,避免了硬盘I/O与复杂事务开销;单线程消除线程竞争,提升一致性与效率;epoll可高效管理海量连接,仅处理活跃请求,大幅降低系统资源消耗,使其在高并发场景下表现卓越。

2026-09-15 20:05:53 51

原创 Redis 的数据类型和编码方式

Redis提供五种基础数据类型:String、Hash、List、Set、ZSet,分别用于缓存、对象存储、队列、去重和排行榜。底层采用多种编码(如int/embstr/raw、listpack/hashtable、quicklist、skiplist等),根据数据量自动切换,以平衡内存与性能。例如,小规模Hash用listpack,超阈值转hashtable;ZSet小数据用listpack,大时转skiplist。可通过OBJECT ENCODING命令查看键的编码,便于排查内存问题。

2026-09-13 14:13:46 206

原创 Redis 过期 key 删除策略

Redis采用惰性删除与定期删除相结合的过期策略。惰性删除在访问时检查并删除过期key,节省CPU;定期删除每秒执行10次(默认hz=10),随机抽查20个带过期时间的key,若过期比例超10%则继续扫描,单次最多耗时25ms,防止阻塞主线程。通过过期字典管理TTL键,结合随机抽样与阈值控制,在保证性能的同时有效回收内存,避免内存泄漏。

2026-09-13 10:52:33 121

原创 Redis 的背景知识

Redis 是一种基于键值对的 NoSQL 内存数据库,支持 string、hash、list、set、zset、Bitmaps、HyperLogLog、GEO 等多种数据结构,读写性能可达 10 万/秒。其高速源于内存存储、单线程模型(6.0 后网络 I/O 多线程,命令执行仍单线程)及 C 语言实现。Redis 提供 RDB 和 AOF 两种持久化方式,确保断电或故障后数据可恢复;支持键过期、发布订阅、事务、流水线、Lua 脚本等附加功能;通过主从复制实现读写分离和数据冗余;借助哨兵实现故障自动转移,通

2026-09-08 21:20:00 94

原创 利用 easyexcel 读取 excel 转换字符串的代码实现

【代码】利用 easyexcel 读取 excel 转换字符串的代码实现。

2026-08-15 14:40:25 46

原创 Spring Cloud Gateway

Spring Cloud Gateway是基于响应式编程的API网关,用于微服务架构中的请求路由管理。文章介绍了其基本使用方法:1)创建网关项目并引入相关依赖(spring-cloud-starter-gateway等);2)编写启动类;3)配置YAML文件设置端口、服务名、Nacos注册中心及路由规则(示例配置了order-service和product-service的路由);4)通过网关端口测试访问后端服务。该网关提供路由转发、负载均衡(lb://)等功能,可作为微服务统一入口。

2026-07-19 17:30:17 273

原创 通过 OpenFeign 实现远程调用

本文介绍了OpenFeign声明式WebService客户端的使用方法及其最佳实践。主要内容包括:1)基本用法:添加依赖、启用注解、编写Feign客户端接口并远程调用;2)改进方案-继承方式:将接口抽离为独立模块,服务提供方实现接口,消费方继承该接口;3)改进方案-抽取方式:单独创建API模块,统一定义Feign客户端接口并打包复用。两种改进方案都实现了接口和模型的复用,避免了代码重复。文章通过具体代码示例演示了参数传递、对象映射等常见用法,并强调要通过Maven打包实现模块化共享。

2026-07-18 16:50:52 207

原创 Nacos 注册中心的使用方法

Nacos与Eureka类似,都是服务注册中心。使用Nacos需要:1.引入SpringCloudAlibaba依赖,注意版本兼容性;2.在服务中添加Nacos和负载均衡依赖;3.配置Nacos服务器地址;4.修改远程调用方式,使用服务名代替IP,并通过@LoadBalanced注解实现负载均衡。启动服务后可在Nacos控制台查看注册信息,通过多实例测试验证负载均衡功能。整个过程包括依赖配置、服务注册、服务发现和负载均衡实现等关键步骤。

2026-07-18 16:06:53 198

原创 Spring Cloud LoadBalancer 实现负载均衡

本文介绍了如何通过Spring Cloud LoadBalancer实现服务实例的负载均衡。首先演示了启动多个product-service实例的方法:在IDEA中复制实例配置并修改端口号。接着详细说明了使用步骤:1)为RestTemplate添加@LoadBalanced注解;2)将硬编码的IP地址改为服务名称;3)启动多个实例;4)测试时通过观察日志确认请求被均衡分配到不同实例。该方法有效解决了微服务架构中多实例的流量分配问题,实现了服务调用的负载均衡。

2026-07-18 15:46:18 305

原创 Spring Cloud eureka

本文介绍了Eureka服务注册与发现组件的使用场景和实现方法。Eureka作为微服务架构中的注册中心,解决了服务间动态发现的问题。文章详细讲解了如何搭建Eureka Server(注册中心),包括依赖引入、配置文件和启动类设置;接着说明服务提供方(如product-service)如何注册到Eureka;最后展示了服务消费者(如order-service)如何通过DiscoveryClient从Eureka获取服务实例信息,实现动态服务调用。整个过程避免了硬编码服务地址,使微服务架构更具弹性和可扩展性。

2026-07-18 15:05:00 241

原创 RestTemplate 实现两个独立工程的通信

摘要:本文介绍了在微服务架构下,Order-Service如何通过RestTemplate调用Product-Service实现订单详情查询。主要步骤包括:1)在调用方Order-Service中配置RestTemplate Bean;2)在Service层通过orderId查询订单信息后,构造目标服务URL;3)使用RestTemplate发送HTTP请求获取商品信息;4)将商品信息与订单信息合并返回。关键代码展示了如何通过productId拼接服务地址(如http://127.0.0.1:9090/pr

2026-07-18 14:30:45 167

原创 SpringMVC 中的常用注解和用法

本文介绍了SpringMVC中常用的12种注解及其用法:1)@Controller标记控制器类;2)@RestController组合注解用于返回数据;3)@ResponseBody将返回值写入响应体;4)@RequestMapping核心请求映射注解;5)@GetMapping处理GET请求的快捷方式;6)@RequestParam绑定请求参数;7)@RequestBody绑定请求正文数据;8)@PathVariable获取URL路径参数;9)@RequestPart处理文件上传;10)@CookieVa

2026-04-12 20:40:45 320

原创 NAT 机制

摘要:NAT(网络地址转换)技术通过将私有IP地址转换为公有IP地址,解决了IPv4地址不足的问题。私有IP地址(如192.168.x.x)仅在局域网内使用,而公有IP地址是全球唯一的。NAT路由器通过建立映射表,实现内外网地址转换,使多个设备共享一个公有IP访问互联网。该过程对终端设备透明,有效缓解了IPv4地址短缺问题。

2026-02-11 13:28:08 946

原创 网络之数据链路层

数据链路层是OSI模型的第二层,负责同一物理网络内相邻节点间的可靠数据传输。主流协议包括以太网(有线局域网)、Wi-Fi(无线)、PPP/PPPoE(宽带拨号)等。以太网协议作为核心协议,采用包含源/目的MAC地址(48位硬件标识符)的帧格式,通过MAC地址实现局域网内设备识别和寻址。MTU(最大传输单元)限制单次传输数据量,以太网默认1500字节,超出的IP数据包需分片传输。值得注意的是,端到端通信中IP地址保持不变,而MAC地址会在每跳链路中更新。

2026-02-11 10:27:38 903

原创 如何基于UDP实现可靠传输

摘要:UDP作为无连接协议缺乏可靠性保证,但可通过应用层机制实现可靠传输。关键技术包括:1)序列号检测丢包乱序;2)ACK/NACK确认机制;3)超时重传与RTT动态调整;4)滑动窗口流量控制;5)数据包排序去重;6)增强校验;7)可选拥塞控制。这种方案兼顾UDP低延迟优势与可靠传输需求,适用于音视频、游戏等场景,但需权衡实现复杂度与性能需求,避免简单复刻TCP。关键优势在于可定制化可靠性级别和更好的NAT穿透能力。

2026-02-10 10:48:28 344

原创 IP 协议的相关特性

IP协议是TCP/IP协议族的核心协议,负责数据包的寻址和路由。主要特性包括:IPv4头部20-60字节,包含版本、长度、服务类型等字段;IPv6简化头部为40字节。IP协议是无连接的,每个数据包独立处理;不可靠,依赖上层协议保证可靠性;尽力而为交付。支持异构网络互联,使用IP地址逻辑寻址,具备分片重组能力。IPv4使用32位地址,IPv6扩展为128位。支持单播、广播(仅IPv4)和组播通信方式。

2026-02-10 09:56:36 787

原创 TCP协议的相关特性

TCP是互联网核心协议,提供面向连接、可靠的字节流传输服务。通过三次握手建立连接、四次挥手释放连接,确保通信可靠性。采用校验和、序列号、确认应答等机制保障数据准确传输,支持全双工通信。数据通过内核缓冲区管理,实现灵活的读写操作,不受单次读写大小的限制,体现其面向字节流的特性。

2026-02-09 14:13:29 266

空空如也

空空如也

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

TA关注的人

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