自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringCloud中的网关(Gateway)的作用是什么?

在分布式系统和微服务架构中,是位于客户端与后端服务之间的中间层,主要承担等核心功能,是连接客户端与微服务的 “桥梁”。其核心作用是简化系统交互、增强安全性、提升可维护性。

2025-10-14 21:28:37 440

原创 什么是服务雪崩,如何解决这个问题

熔断:快速失败,隔离故障点;限流:控制流量入口,防止过载;降级:牺牲非核心,保核心流程;隔离:资源独立,避免连锁耗尽;超时 + 缓存:减少无效等待和依赖压力。目的很一致,都是从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃,采用的技术手段最终表现类似,对于两者来说,最终让用户体验到的是某些功能暂时不可达或不可用粒度一般都是服务级别,当然,业界也有不少更细粒度的做法,比如做到数据持久层(允许查询,不允许增删改)

2025-10-14 21:11:12 738

原创 当不同数据类型的变量进行运算时,java的类型提升规则是怎么样的?

Java 类型提升的核心原则是 **“向表示范围更大的类型靠拢”**,确保运算精度不丢失。byte、short、char 运算时会先提升为 int;不同类型混合运算时,结果类型为范围最大的操作数类型;赋值时需确保目标变量类型能容纳运算结果,否则需显式强制转换。理解这些规则可避免隐式转换导致的编译错误或精度丢失问题。

2025-09-25 20:54:07 286

原创 RocketMQ相对于RabbitMQ 的优势

对比维度RocketMQ 优势场景RabbitMQ 优势场景吞吐量高吞吐(10 万 + TPS),适合秒杀、日志同步中低吞吐(1-5 万 TPS),适合中小规模业务集群规模大规模分布式集群(数十个 Master 节点)中小规模集群(≤10 个节点)核心功能事务消息、定时消息、消息轨迹(原生支持)简单路由、即时消息(配置灵活)技术栈适配贴合 Java 企业级技术栈(Spring、微服务)多语言适配(Erlang、Python 等)结论。

2025-09-23 20:39:42 802

原创 SpringMVC在前后端分离架构中的执行流程与传统架构的区别

在前后端分离架构与传统架构中,SpringMVC 的核心执行流程(如 DispatcherServlet 的调度逻辑)保持一致,但因的差异,两者在具体执行环节和角色定位上有显著区别。

2025-09-23 18:44:05 909

原创 并发场景下使用 HashMap 可能出现死循环的原因?

并发场景下HashMap出现死循环的根本原因是 JDK 1.7 及之前的「头插法」扩容机制在多线程并发时导致链表成环。并发场景下使用线程安全的(推荐)。或通过包装HashMap(性能较差)。但HashMap仍不是线程安全的(并发put可能导致数据覆盖、丢失等问题),只是解决了死循环问题。避免在多线程环境中直接使用HashMap。

2025-09-22 22:35:56 1033

原创 常用设计模式中的工厂模式,责任链模式,策略模式和单例模式的简单说明

模式核心特点典型场景工厂模式统一创建对象,隐藏创建细节复杂对象初始化、产品族创建责任链模式请求沿处理者链传递,动态分工审批流程、过滤器链、异常处理策略模式算法封装,动态切换支付方式、排序算法、折扣计算单例模式全局唯一实例,节省资源配置管理、日志对象、线程池这些模式的核心是分离变化与不变,让系统更灵活、易维护。

2025-09-21 21:32:00 619

原创 布谷鸟布隆过滤器和计数式布隆过滤器和原始布隆过滤器相比分别解决了什么问题?

过滤器类型核心改进解决的核心问题主要局限性原始布隆过滤器比特数组 + 多哈希函数高效判断元素是否存在(空间效率高)不支持删除、误判率随元素增多上升、空间利用率低计数式布隆过滤器计数器数组替代比特数组支持元素删除空间开销大、计数器可能溢出布谷鸟布隆过滤器2 个哈希函数 + 置换机制 + 指纹存储降低假阳性率、提高空间利用率、支持高效删除可能插入失败、实现复杂。

2025-09-20 15:59:30 518

原创 声明式事务和编程式的区别及事务的传播机制

在 Java 中,编程式事务和声明式事务是实现事务管理的两种主要方式,核心区别在于和。

2025-09-19 11:58:19 651

原创 Java中存在哪些锁?

Java 中的锁按范围可分为本地锁(Synchronized、ReentrantLock 等)和分布式锁;按特性可分为可重入锁、读写锁、公平锁等。

2025-09-18 22:33:38 1244

原创 JVM的垃圾回收机制(一次完整的GC流程)

触发:Eden 区满 → 触发 Minor GC;老年代满 → 触发 Major/Full GC;Minor GC:标记 Eden+S0 存活对象 → 复制到 S1(或晋升老年代)→ 清空 Eden+S0 → S0/S1 互换;:全堆标记存活对象 → 老年代清除 / 整理垃圾 + 新生代 Minor GC → 元空间清理;恢复:STW 结束,应用线程继续执行,内存分配恢复。

2025-09-18 20:44:28 1158

原创 在博主内容推送系统中,通过RabbitMQ异步解耦及消息持久化+重试机制,使推送效率提升300%,成功率提升至99.9%的原理及实现

在博主内容推送系统中,,通过 RabbitMQ 的和实现 “推送效率提升 300%” 和 “成功率提升至 99.9%”,本质是解决了传统同步推送架构的和。

2025-09-17 11:11:18 742

原创 读写锁与分布式锁的区别以及使用的场景案列

锁类型核心定义设计目标读写锁单进程内的细粒度并发控制锁,将锁分为 “读锁(共享锁)” 和 “写锁(排他锁)”,针对 “读写操作” 的不同特性优化并发效率。解决 “单进程内多线程读写冲突”,在保证数据一致性的前提下,最大化读操作的并发效率(读与读共享,读与写、写与写互斥)。分布式锁跨进程、跨机器的全局资源控制锁,用于多进程(如分布式系统中的多个服务节点)竞争同一全局资源时,确保同一时间仅一个进程能操作资源。

2025-09-16 22:47:45 626

原创 在方法上添加事务后,方法执行一半,如果服务器突然宕机了,还会发生回滚吗?

服务器宕机后事务是否回滚,核心看“事务是否已被数据库提交”若事务未提交(执行中、提交未完成且标记未持久化)→ 数据库重启后回滚;若事务已提交(提交完成、或提交标记已持久化到 WAL 日志)→ 不会回滚;框架(如 Spring)仅负责事务边界管理,底层依赖数据库的 WAL 日志和恢复机制保证原子性和持久性。因此,只要使用支持 ACID 的数据库(如 MySQL InnoDB、PostgreSQL),即使服务器宕机,未提交的事务也会被自动回滚,无需人工干预,这是数据库事务机制的核心保障。

2025-09-15 22:22:27 588

原创 synchronized锁升级的过程(从无锁到偏向锁,再到轻量级锁,最后到重量级锁的一个过程)

通过这种 “按需升级” 的机制,synchronized 锁在不同并发场景下都能兼顾性能与安全性,避免了 “一刀切” 的锁开销问题(如早期 synchronized 直接使用重量级锁,单线程场景下也有高开销)。其目的是通过 “按需升级”,在不同并发场景下选择最优的锁实现,平衡性能与线程安全。”,JVM 会根据线程竞争情况,自动将锁从低开销状态升级到高开销状态,且升级过程是。的 “锁状态标识位”,即可判断当前锁的状态,进而执行对应的升级逻辑。(如偏向锁升级为轻量级锁后,不会再降级为偏向锁)。

2025-09-14 22:40:45 846

原创 ConcurrentHashMap 的底层原理及是如何实现线程安全的?

JDK 1.8 采用 CAS + 细粒度 synchronized 锁,大幅提升并发性能;读操作无锁,写操作仅锁单个桶,锁竞争极小;支持原子性操作和弱一致性迭代,避免并发修改异常。在多线程环境中,推荐使用 ConcurrentHashMap 替代 HashMap(线程不安全)和 Hashtable(效率低)

2025-09-13 22:48:05 771

原创 MySQL有哪些锁?

如果有的话,插入操作就会发生阻塞,直到拥有间隙锁的那个事务提交为止(释放间隙锁的时刻),在此期间会生成一个插入意向锁,表明有事务想在某个区间插入新记录,但是现在处于等待状态。假设,表中有一个范围 id 为(3,5] 的 临键锁,那么其他事务即不能插入 id = 4 记录,也不能修改 id = 5 这条记录。假设,表中有一个范围 id 为(3,5)间隙锁,那么其他事务就无法插入 id = 4 这条记录了,这样就有效的防止幻读现象的发生。),加 S 锁可防止查询期间其他事务修改库存,避免超卖判断错误。

2025-09-13 17:18:46 1211

原创 SQL语句执行时间太慢,有什么优化措施?以及衍生的相关问题

(多字段索引)的一条核心规则, 简单来说:在联合索引中,查询条件必须从索引的第一个字段开始匹配,且中间不能跳过任何字段,否则跳过的字段及之后的字段无法使用索引,导致索引失效或部分失效。首先我们要了解索引这个概念,如果将数据库比作一本,那么索引就相当于是这本书的目录,而如果没有目录的话,当查找某个内容的话,你只能一页一页查找,,数据量越大,翻页时间越长;2、采用读写分离的方式,将 “读操作”(如查询)路由到从库,“写操作”(如插入、更新)路由到主库,避免主库读压力过大。当没有索引时,查询数据(如。

2025-09-12 20:09:17 1152

原创 JVM垃圾回收的时机是什么时候(深入理解 JVM 垃圾回收时机:什么时候会触发 GC?)

JVM 垃圾回收的触发时机,本质是 “按需触发,策略辅助核心驱动力:内存不足(新生代满、老年代满、元空间满)—— 这是 GC 最根本的触发原因;优化策略:定时扫描、大对象预判、阈值触发 —— 这些是为了减少 Full GC 频率,提升性能;禁止手动干预:手动触发 GC 会破坏 JVM 的自动优化,生产环境绝对避免。理解 GC 的触发机制,能帮助我们更好地排查内存问题:比如遇到频繁 Minor GC,可能是新生代空间太小;遇到频繁 Full GC,可能是老年代有内存泄漏或大对象过多。

2025-09-11 21:56:40 1089

转载 SpringBean的生命周期详解+代码演示

Spring Bean的生命周期包含5个阶段:1)实例化分配内存;2)属性注入和装配;3)初始化(执行前置方法、初始化方法、后置方法);4)使用Bean;5)销毁Bean。通过SpringBoot代码演示了完整的生命周期流程,使用@PostConstruct和@PreDestroy注解实现初始化/销毁方法,并通过BeanPostProcessor实现初始化前后回调。注意实例化与初始化的区别,以及初始化前后方法需单独实现。

2025-09-10 17:04:08 49

原创 线程、进程、CPU 和内存之间的关联

线程、进程、CPU 和内存是计算机系统中紧密关联的核心概念,它们共同协作完成程序的运行,关系可以概括为:进程是资源分配的基本单位,线程是 CPU 调度的基本单位,CPU 负责执行线程的指令,内存则为进程和线程提供数据存储。具体联系如下:进程是程序的一次运行实例,是操作系统进行资源(CPU、内存、文件句柄等)分配的基本单位。线程是进程内的一个执行单元,共享所属进程的内存资源(代码、数据、文件等),但有自己独立的栈和程序计数器(记录当前执行的指令位置)。CPU(中央处理器)是计算机的 “运算核心”,负责执行线程

2025-09-09 16:54:07 988

原创 redis分布式锁为什么采用Lua脚本实现。而不是事务

Redis分布式锁选择Lua脚本而非事务,关键在于保证操作的原子性和灵活性。事务无法根据GET结果判断是否执行DEL,可能导致误释放他人锁的问题。而Lua脚本能原子性执行"判断锁归属+释放锁"的完整逻辑,避免操作分离的风险。同时,Lua将多步操作合并为单次网络请求,减少了分布式环境下的网络延迟,显著提升性能。这种原子性执行和网络优化使其成为分布式锁的理想实现方案。

2025-09-09 10:38:49 313

原创 形参与实参的区别

形参是在定义函数 / 方法时,括号中声明的参数,它只是一个 “形式上的名字”,用于指定函数需要接收哪些类型的参数,本身没有具体的值。例// 定义一个加法函数,a和b就是形参public int add(int a, int b) { // a、b是形参(仅作占位符)特点只在函数内部有效,函数执行结束后就会被销毁;没有实际值,其值由调用函数时传入的实参决定;作用是 “规定函数需要接收的参数类型和数量”。

2025-09-09 10:16:41 375

原创 抽象类和接口适用于什么场景?

摘要:抽象类适用于需要共享代码和规范共性的场景,通过定义具体方法和抽象方法,实现代码复用(如支付系统的共性逻辑)和差异化扩展(如不同支付方式)。接口则适合定义跨类别的行为规范(如"可飞翔"能力),体现"能做什么"的关系,支持多实现以突破单继承限制。两者的核心区别在于:抽象类强调"是什么"和代码共享,接口关注"能做什么"和行为规范。

2025-09-08 17:09:44 467

原创 异步一定需要使用消息队列吗

消息队列是实现异步的常见工具,但并非唯一方式。单机环境下,使用线程池或定时任务即可实现轻量级异步处理,如Java线程池或Spring定时任务。这种方案适用于简单异步场景,如日志记录或通知发送。但在分布式系统或高并发场景中,消息队列则成为必要选择,它能实现跨服务通信和流量削峰,如订单系统与库存服务的解耦,或秒杀活动中的请求缓冲。技术选型需根据具体场景的复杂度、性能需求及系统架构来决定。

2025-09-08 16:40:23 424

原创 java中hashmap集合将对象作为key需要注意什么?

在Java中,当对象作为HashMap或HashSet的key时,必须正确重写hashCode()和equals()方法,确保哈希集合能准确识别对象唯一性。hashCode()用于定位存储位置,equals()用于确认对象逻辑相等。此外,作为key的对象属性应保持不可变,避免修改后导致哈希值变化而无法查找。避免使用可变容器(如ArrayList)作为key,可选择不可变类型替代。遵循这些规则能有效防止数据丢失或重复存储问题。

2025-09-07 21:17:09 383

原创 sentinel限流常见的几种算法以及优缺点

摘要:Sentinel是阿里开源的流量控制框架,核心功能是基于经典算法实现限流,防止系统过载。主要算法包括:1)滑动窗口算法,通过划分时间小格提高精度,解决固定窗口的临界问题;2)令牌桶算法,按固定速率生成令牌,支持应对突发流量但可能瞬时过载;3)漏桶算法,强制固定处理速率,平滑流量但无法处理突发。各算法适用于不同场景,需根据实际需求选择。(150字)

2025-09-07 18:05:40 640

原创 简单介绍一下乐观锁和悲观锁的区别

悲观锁:假设冲突一定会发生,提前上锁防冲突(牺牲效率换安全)。乐观锁:假设冲突很少发生,先操作后检查,冲突了就重试(牺牲一点重试成本换效率)。

2025-09-07 10:18:28 166

原创 IOC为什么交由spring容器管理?

Spring框架通过控制反转(IoC)将对象创建和依赖管理交给容器处理,解决了传统开发中手动new对象导致的高耦合问题。开发者只需声明依赖,由Spring容器自动创建对象、注入依赖并管理生命周期。这就像从自己做饭转为去餐馆点单:无需关心食材采购和烹饪过程,只需专注于想吃的菜品(业务逻辑)。这种设计实现了代码低耦合、高可维护和高可测试性,让开发者能更专注于核心业务。

2025-09-06 20:17:47 929 1

原创 Cursor浏览器登录成功提示All set! Feel free to return to Cursor.客户端却无法同步登录问题

在浏览器明明已经登录成功,但客户端却没有同步响应。将Vpn模式设置为trun。

2025-09-05 21:02:21 653

原创 npm run dev 启动项目 报Error: listen EACCES: permission denied 0.0.0.0:80 解决方法

文章摘要:当运行npm run dev启动开发服务器时,出现EACCES权限错误,原因是服务器默认尝试监听特权端口80(1-1024范围)。解决方法是修改Vite配置文件,将端口号改为非特权端口如8081,具体步骤为:1) 找到vite.config.js文件;2) 修改port配置为8081;3) 重新运行npm run dev命令即可解决问题。

2025-07-30 22:40:27 889

原创 如何修改 MySQL 8.0 的密码,和忘记密码时如何修改

摘要:MySQL 8.0修改密码主要有三种方法:1)推荐使用ALTER USER命令直接修改指定用户密码;2)通过mysqladmin命令行工具修改;3)忘记密码时需先停止服务,以跳过权限验证方式启动,更新密码后重启服务。其中重点介绍了ALTER USER的标准语法和完整密码重置流程,包括修改系统库数据、刷新权限等关键步骤,适用于不同操作系统环境。

2025-07-30 17:16:22 1164

原创 JAVA_TWENTY—ONE_单元测试+注解+反射

本文介绍了Java单元测试框架JUnit和反射机制的核心概念与应用。JUnit部分详细讲解了JUnit4和JUnit5的注解使用(如@Test、@Before等)以及断言机制,通过StringUtil案例演示了单元测试的完整流程。反射部分从Class对象获取、构造器/成员变量/方法操作三方面展开,结合Cat类实例展示了反射API的具体应用,并介绍了反射在框架开发中的重要作用。文章还讲解了注解的定义与解析方法,通过模拟JUnit框架的实现演示了注解的实际应用场景。最后简要介绍了动态代理的实现原理,以记录方法执

2025-07-29 21:23:38 1311

原创 JAVA_TWENTY_网络通信

本文介绍了网络编程的基础知识,包括CS/BS架构、网络通信三要素(IP地址、端口号、协议)以及UDP和TCP通信的实现。重点讲解了IP地址分类、InetAddress类的常用方法,并详细说明了UDP协议的无连接通信特点及其实现方式,以及TCP协议的可靠连接通信特点及其三次握手/四次挥手机制。最后通过Java代码示例,展示了UDP简单通信和TCP群聊功能的实现方法,包括客户端和服务端的编程框架。全文涵盖了网络编程的核心概念与实践应用。

2025-07-29 17:53:15 887

原创 JAVA_NINETEEN_多线程

本文系统介绍了Java多线程编程的核心概念与技术。主要内容包括:1)线程的三种创建方式(继承Thread类、实现Runnable接口、使用Callable接口和FutureTask类);2)线程安全问题的产生与解决方案(同步代码块、同步方法、Lock锁);3)线程池的创建与使用(ThreadPoolExecutor、Executors工具类);4)并发与并行的区别;5)线程的六种生命周期状态;6)乐观锁与悲观锁的原理及适用场景;7)通过礼物派送案例演示多线程应用。文章还详细分析了各种同步方式的优缺点,并提供

2025-07-28 23:08:34 934

原创 JAVA_EIGHTEEN_特殊文件

本文摘要: Properties属性文件是Java中用于处理键值对配置文件的工具类,具有唯一键约束,文件后缀为.properties。它提供load()方法读取文件和store()方法写入文件,支持键值操作和遍历。XML是一种结构化数据格式,常用于系统配置和数据传输,可通过Dom4j解析。日志技术采用SLF4J接口规范,推荐使用Logback框架,需配置logback.xml并设置日志级别(TRACE/DEBUG/INFO/WARN/ERROR),当日志级别不低于配置级别时才会记录。两者都是Java开发中重

2025-07-28 23:01:59 893

原创 编写SQL语句时,#{} 和 ${}的区别

【代码】 编写SQL语句时,#{} 和 ${}的区别。

2025-07-27 20:32:00 363

原创 JAVA_SEVENTEEN_File+IO流

本文摘要: Java IO流操作指南,详细介绍了文件操作、字符集编码和各种IO流的使用方法。主要内容包括: File类的创建和常用方法(exists、createNewFile、delete等) 字节流(InputStream/OutputStream)和字符流(Reader/Writer)的读写操作 缓冲流(BufferedInputStream/BufferedOutputStream)的性能优化 转换流(InputStreamReader/OutputStreamWriter)解决编码问题 数据流(D

2025-07-27 10:34:30 1111

原创 一篇文章带你了解SpringBean是不是线程安全的吗?

Spring Bean的线程安全性取决于作用域和实现方式。默认单例Bean在多线程环境下共享状态,若包含可变成员变量则存在线程安全问题;无状态或使用final变量的单例Bean是线程安全的。原型Bean每次创建新实例,天然线程安全。可通过同步机制(synchronized/Lock/原子类)确保单例Bean安全,但最佳实践是设计无状态Bean。开发者需根据业务场景合理选择作用域并处理并发问题。

2025-07-26 22:32:53 244

原创 一篇文章带你了解什么是单例bean和单例模式

单例模式和单例Bean核心区别在于实现方式与作用范围。单例模式是通过代码逻辑(如私有构造器、静态方法)确保JVM中对象唯一,适用于所有Java场景;而单例Bean是由Spring容器管理,默认在当前容器内保证唯一性,是框架对单例模式的具体实现。两者都遵循"对象唯一"的思想,但单例模式是通用设计,单例Bean是框架特例。主要差异体现在控制方式(代码vs容器)、生命周期管理(手动vs自动)和多实例实现(改代码vs改注解)等方面。

2025-07-26 21:04:40 326

空空如也

空空如也

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

TA关注的人

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