- 博客(51)
- 收藏
- 关注
原创 从快递物流到分布式架构:RocketMQ全栈进阶实战指南——从入门到高手的代码与原理解析
RocketMQ 博大精深,以上涵盖了 80% 的日常开发与面试核心。
2026-05-15 18:11:06
431
原创 Spring Cloud Nacos配置中心:为什么必须用bootstrap.yml?一文彻底搞懂配置加载顺序
在Spring Cloud微服务架构中,Nacos作为配置中心被广泛应用,但很多开发者在初次使用时会遇到"Failed to configure a DataSource"、"Unable to connect to Nacos"等错误。经过深入排查发现,90%的问题源于将Nacos配置错误地放在了application.yml而非bootstrap.yml中。本文将从一个真实的踩坑案例出发,通过8张精心绘制的Mermaid流程图,详细讲解Spring Cloud的Bootstrap Context和A
2026-04-15 23:26:30
625
原创 nvm 安装教程:Node.js 版本管理全攻略 (Win/Mac/Linux) + .nvmrc 实战
本文详细介绍如何在 Windows、macOS 和 Linux 环境下安装和使用 nvm 工具。通过图文结合与 Mermaid 流程图,手把手教你实现 Node.js 多版本共存、一键切换及项目环境隔离,解决依赖冲突难题,适合前端开发者快速上手
2026-04-15 18:01:46
602
原创 Java反射(Reflection)完全手册:Class对象、动态调用、泛型、模块化限制全解析
全面解析 Java 反射:Class 对象、动态创建、暴力访问、泛型擦除、模块化限制、性能对比与替代方案,含流程图与实战代码,适合中高级开发者收藏!
2026-01-25 19:48:31
659
原创 Cookie、Session、Token 的区别(详解与对比)
通常指(三部分用拼接)Header:算法、类型等元信息Payload:用户数据(如 user_id、role、exp 过期时间)Signature:用密钥对前两部分签名,防止篡改特性CookieSession存储位置客户端(浏览器)服务端客户端是否依赖 Cookie是(通常)是(通常)否(可放 Header)服务端是否存储状态否是否安全性较低(可篡改)高(服务端可控)中高(依赖密钥管理)跨域支持差(受同源策略限制)差好分布式支持一般需集中存储。
2026-01-08 14:03:19
1081
原创 Redis 缓存
Redis缓存是提升系统性能的关键组件,其核心在于缓存与数据库的协同工作模式。主流方案采用Cache Aside模式,通过先更新数据库再删除缓存保障最终一致性。针对高并发场景需防范三大缓存问题:缓存穿透(布隆过滤器/空值缓存)、缓存雪崩(随机TTL/逻辑过期)、缓存击穿(互斥锁重建)。合理运用这些策略可显著提升系统吞吐量与稳定性。
2025-12-13 15:16:15
1196
原创 Redis 的内存回收机制详解
Redis采用双重内存回收机制管理内存资源:过期策略自动清理TTL过期数据,淘汰策略在内存不足时主动移除数据。过期策略结合惰性删除(访问时检查)和定期删除(每秒随机扫描)确保内存释放。淘汰策略提供8种算法(如LRU/LFU)按需清理数据,可通过maxmemory-policy配置。最佳实践建议设置合理内存上限,优先使用allkeys-lru/lfu策略,并监控内存指标。这两种策略协同工作,在保证性能的同时实现内存自动回收,但需注意淘汰数据不会持久化。
2025-12-12 10:17:07
810
原创 Redis 哨兵(Sentinel)原理
Redis哨兵(Sentinel)是Redis高可用解决方案,主要功能包括监控节点状态、故障自动转移和服务发现。哨兵通过心跳检测判断节点状态,当多数哨兵确认master故障时,会选举新master并重配置集群。选主过程考虑优先级、数据偏移量等因素。哨兵采用Raft协议选举leader来协调故障转移,并通知客户端主节点变更。最佳实践建议部署至少3个哨兵,合理配置超时参数,客户端必须通过哨兵获取主节点地址。整个系统实现了Redis集群的高可用自动管理。
2025-12-11 21:10:23
635
原创 Redis 主从同步原理详解
Redis主从同步机制详解:包括全量同步和增量同步两种方式。全量同步用于首次连接或数据严重落后场景,主节点通过BGSAVE生成RDB快照传输给从节点;增量同步则依赖repl_backlog环形缓冲区,通过replid和offset判断同步进度。关键优化建议包括增大repl-backlog-size、启用无磁盘复制、控制单节点内存等。该机制通过数据冗余实现高可用、读写分离和故障恢复,是Redis高可用架构的核心组件。
2025-12-11 11:19:59
1084
原创 Redis 的核心机制(线程模型、原子性、Bigkey、单线程设计原因等)
机制是否原子是否阻塞适用场景复合命令✅否简单原子操作(推荐优先)事务 + WATCH✅(条件执行)否“读-改-写”一致性管道❌否批量操作(性能优化)Lua 脚本✅是复杂逻辑、强一致性Function✅是可复用脚本(Redis 7.0+)作者:不会写程序的未来程序员首发于 CSDN版权声明:本文为原创文章,转载请注明出处。
2025-12-09 20:45:36
752
原创 JVM 运行时内存模型
JVM运行时内存分为五个核心区域:虚拟机栈(存储线程方法调用栈帧)、堆(存放对象实例和字符串常量池)、元空间(存储类元数据)、程序计数器(记录线程执行位置)和本地方法栈(支持Native方法调用)。其中堆和元空间是线程共享区域,其他为线程私有。通过Java代码示例展示了各区域的存储机制,如对象实例存储在堆中,类信息在元空间,静态变量值实际存放在堆中的Class对象里。这种内存划分保证了Java程序的高效执行和线程安全。
2025-12-09 18:07:21
633
1
原创 RabbitMQ 工作队列深度解析:为什么 prefetch=1 仍平均消费?ACK 机制与公平分发原理全解
RabbitMQ 工作队列公平分发机制解析 摘要:RabbitMQ 工作队列中即使设置 prefetch=1 仍可能平均分配消息,原因是自动 ACK 模式下消息在投递瞬间即被确认,无法实现动态调度。本文揭示了 RabbitMQ 的预分配机制与 ACK 工作原理,指出要实现"能者多劳"必须:1) 开启手动 ACK 模式;2) 消费者显式调用 basicAck;3) 合理设置 prefetch 限制未确认消息数。通过消息状态生命周期分析和 QoS 控制原理,展示了如何让快速消费者处理更多任务
2025-12-01 17:13:22
910
原创 详细的 Git 操作分步指南
Git 基础操作指南摘要 本文详细介绍了 Git 日常开发中最常用的操作流程: 首次使用需配置用户信息 初始化本地仓库(git init)或克隆远程仓库(git clone) 关联远程仓库(git remote add) 拉取最新代码(git pull) 分支管理(创建/切换分支) 查看工作区状态(git status) 完整的代码提交流程(add-commit-push) 查看提交历史的各种方式(git log) 文章包含具体命令示例和实用小技巧,适合 Git 初学者快速掌握基础操作。
2025-11-28 22:21:27
1241
1
原创 [特殊字符]pull-aliyun:一键拉取阿里云私有镜像并简化命名
摘要: pull-aliyun 是一款针对阿里云私有镜像仓库的便捷工具脚本,通过简化冗长的镜像名称格式(如 registry.cn-hangzhou.aliyuncs.com/ns/image:tag),将其统一重命名为 aliyun_<镜像名>:<标签> 格式。该工具支持主流Linux系统,无需额外依赖,仅需Bash和Docker环境即可使用。功能包括自动拉取镜像、提取短名称、清理原始长名称标签,并安装为全局命令。安装时通过创建系统脚本并赋予执行权限即可,使用示例显示其能显著提升命
2025-11-15 13:49:07
1204
原创 Linux 虚拟机设置静态 IP 地址指南
Linux虚拟机设置静态IP地址指南,适用于Ubuntu、CentOS等主流发行版。第一步需查看当前网络信息(ip a/ip route),确定网卡、网关和子网范围,并选择未冲突的IP地址。配置方法因发行版而异:Ubuntu/Debian通过Netplan编辑YAML文件;CentOS/Rocky Linux修改ifcfg配置文件;也可通用NetworkManager命令行。设置后需验证网络连通性并注意避开DHCP范围、检查虚拟化模式。常见问题包括IP冲突、DNS解析失败等,配置成功后IP地址将永久固定。
2025-11-12 21:17:13
1335
原创 MyBatis 中 resultMap、association、collection标签详解
MyBatis映射标签详解:resultMap定义基础映射规则,association处理一对一关系(如订单关联用户),collection处理一对多关系(如订单包含多个订单项)。通过JOIN查询和合理配置映射,可实现高效的对象关联查询,避免嵌套查询的性能问题。典型应用场景包括订单-用户-订单项等层级数据模型。
2025-11-04 11:32:30
1259
原创 Spring Boot 集成 Jasypt 实现配置文件数据库密码加密(避坑指南 + 算法详解)
本文介绍了在Spring Boot项目中集成Jasypt实现数据库密码加密的完整方案。主要内容包括:使用Jasypt对application.yml配置文件中的敏感信息进行加密;详细说明加密原理、集成步骤(添加依赖、生成密文、配置解密参数);重点分析Jasypt支持的加密算法及推荐选择;提供常见问题解决方案。文章特别强调应避免使用过时算法,推荐采用PBEWITHHMACSHA512ANDAES_256等强加密算法,并详细说明了算法配置方式。该方案可有效提升配置文件安全性,避免数据库密码明文暴露风险。
2025-10-17 01:05:12
1761
原创 Spring Boot 统一异常处理机制:设计原理与最佳实践
Spring Boot统一异常处理机制解析与最佳实践 本文系统介绍了Spring Boot统一异常处理机制的设计原理与实现方案。文章首先分析了未统一处理的常见痛点,如错误格式混乱、信息泄露等问题,强调了统一异常处理的必要性。随后深入解析了Spring Boot的核心处理机制,包括DispatcherServlet流程和HandlerExceptionResolver接口实现。 文章重点阐述了统一异常处理的设计原理: 构建层次分明的异常继承体系 使用@ControllerAdvice实现全局异常捕获 定义标准
2025-10-15 10:04:24
1122
原创 Nginx 代理 WebSocket 失败排查全过程:从 426 到连接成功的完整复盘
摘要:本文记录了Nginx代理WebSocket失败的完整排查过程。作者发现后端直连WebSocket成功,但通过Nginx代理失败,且Nginx日志无记录。关键发现是前端代码错误使用了localhost而非虚拟机IP,导致请求未到达Nginx。解决方案包括:1)显式指定服务器IP;2)改用相对路径(推荐)。文章还提供了正确的Nginx配置模板,并总结了常见问题排查要点,特别强调前端代码中的localhost始终指向用户本地机器而非服务器。最终问题根源在于网络拓扑理解偏差,而非单纯的配置错误。
2025-10-14 23:22:22
918
1
原创 Java Scanner类中 next()、hasNext() 与 hasNextLine() 的区别详解(附代码实例)
该文章详细解析了Java Scanner类中next()、hasNext()和hasNextLine()方法的区别。核心差异在于:hasNext()/next()按空白分割处理标记(token),会忽略前导空白和空行;而hasNextLine()/nextLine()按行处理,保留空格和空行。文中通过三个代码示例直观展示了:1)基本输入的分割方式差异;2)对空行和空格的不同处理;3)混合使用场景下的正确示范。特别强调在处理混合输入时应避免单独使用hasNextLine(),而应结合hasNext()和nex
2025-08-14 10:52:05
1123
原创 【解决】由于JDK版本与SpringBoot版本不一致导致项目启动报错(类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。)
在一次新建SpringBoot项目的时候,我按照以往一样创建项目,配置maven文件,然后启动项目。解决方法:降低Spring的版本。
2024-07-19 20:02:38
535
原创 12-ArkTS语言_渲染控制
LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当LazyForEach在滚动容器中使用了,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。ForEach接口基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在ForEach父容器组件中的子组件。例如,ListItem组件要求ForEach的父容器组件必须为。
2023-12-20 21:31:53
2207
原创 11-ArkTS语言_状态管理
Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。@Provide和@Consume通过相同的变量名或者相同的变量别名绑定时,@Provide修饰的变量和@Consume修饰的变量是一对多的关系。@Provide装饰的变量。
2023-12-11 23:21:01
738
原创 10-ArkTS语言_stateStyles:多态样式
stateStyles是属性方法,可以根据UI内部状态来设置样式,类似于css伪类,但语法不同。focused:获焦态(输入框可以获焦,文本不能获焦)。normal:正常态。pressed:按压态。disabled:不可用态。
2023-12-06 23:23:50
900
原创 09-ArkTS语言_@Extend装饰器:定义扩展组件样式
在前文的示例中,可以使用@Styles用于样式的扩展,在@Styles的基础上,我们提供了@Extend,用于扩展原生组件样式。说明从API version 9开始,该装饰器支持在ArkTS卡片中使用。
2023-12-04 23:49:00
610
原创 08-ArkTS语言_@Styles装饰器:定义组件通(重)用样式
如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器@Styles。@Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位置调用。通过@Styles装饰器可以快速定义并复用自定义样式。用于快速定义并复用自定义样式。/** 自定义样式函数* */@Entry@Component// 内部通用样式函数build() {Row() {// 外部通用样式函数。
2023-12-03 17:16:18
851
原创 07-ArkTS语言_@Builder装饰器:自定义组件构建函数
前面章节介绍了如何创建一个自定义组件。该自定义组件内部UI结构固定,仅与使用方进行数据传递。ArkUI还提供了一种更轻量的UI元素复用机制@Builder,@Builder所装饰的函数遵循build()函数语法规则,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。为了简化语言,我们将@Builder装饰的函数也称为“自定义构建函数”。说明从API version 9开始,该装饰器支持在ArkTS卡片中使用。/** 组件内:自定义构建函数,调用时,需要this.函数名。
2023-12-02 20:17:44
1111
原创 06-ArkTS语言_自定义组件
1:组件必须使用@Component装饰@Entry装饰在哪个组件上,页面就展示哪个组件(主组件)3:被@Entry装饰的主组件,build()中必须有且仅有一个根容器组件,其它自定义组件,build()中有且仅有一个根组件。在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。
2023-12-01 21:25:58
655
原创 05-ArkTS语言_声明式UI描述
ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。链式调用的方式配置系统组件的样式和其他属性,建议每个属性方法单独写一行。链式调用的方式配置系统组件支持的事件,建议每个事件方法单独写一行。根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。例如,可以按以下方式配置Text组件的颜色和字体样式。如果组件的接口定义没有包含必选构造参数,则组件后面的。如果组件的接口定义包含构造参数,则在组件后面的。等组件都是容器组件。
2023-11-29 20:00:00
211
原创 04-ArkTS语言_基础语法之变量声明+数据类型
有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。TypeScript里的所有数字都是浮点数,这些浮点数的类型是 number。TypeScript里使用 string表示文本数据类型, 可以使用双引号(")或单引号(')表示字符串或者反引号(`)。enum类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字。元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。第二种,可以在元素类型后面接上 [],表示由此类型元素组成的一个数组。
2023-11-28 18:59:14
1207
原创 java笔记 Day 16 —— final关键字、抽象类
文章目录一、final关键字二、抽象类(abstract)抽象类的最佳实践—模板设计模式一、final关键字基本介绍final 中文意思:最后的,最终的final 可以修饰类、属性、方法 和 局部变量在有以下需求的时候,就会使用到final:当不希望类被继承的时候,可以使用 final来修饰[final class 类名]当不希望父类的某个方法被子类覆盖/重写(Override)时,可以使用final关键字来修饰[访问修饰符 final 返回类型 方法名]当不希望类的某个属性的值被修改
2022-05-24 09:00:00
294
2
原创 java笔记 Day 15 —— 代码块、单例设计模式
代码块、单例设计模式基本介绍代码块又称为初始化块,属于类中的成员[即 类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来但是和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是 加载类时,或创建对象时隐式调用基本语法[修饰符]{代码};说明:修饰符 可选,要写的话,也只能写 static代码块分为两类,使用 static 修饰的静态代码块,没有 static 修饰的 普通代码块逻辑语句可以分
2022-05-23 08:45:00
245
原创 Java笔记 Day 14 — 类变量/静态变量、类方法、main方法
文章目录一、类变量/静态变量二、类方法三、main方法一、类变量/静态变量类变量定义是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的值都是相同的,同样任何一个该类的对象去修改它时,修改的对象也是同一个变量。类变量的定义定义语法:1.访问修饰符 static 数据类型 变量名;[推荐使用]2.static 访问修饰符 数据类型 变量名;访问类变量类名.类变量名[推荐使用]对象名.类变量名(静态变量的访问修饰符的访问权限和范围 和 普通属性是一样的
2022-05-22 08:22:46
235
转载 \033方式设置字体颜色
\033方式设置字体颜色其中,\033(八进制)即ESC符号,Windows中为\027(十进制),\x1b(十六进制)内容格式:开始格式\033 [ 参数1 ; 参数2 ; 参数3 m //以字母m结尾结束格式:\033[0m //结束一定要有结束标志参数效果:总览控制码效果\033[0m关闭所有属性\033[1m设置字体高亮度\033[2m低亮(减弱)显示\033[4m下划线\033[5m闪烁\033[7m反显
2022-05-21 19:36:59
3729
2
原创 java笔记 Day 13—— Object类详解 断点调试
文章目录六、Object类详解equalshashCode方法toString方法finalize方法七、断点调试(debug)六、Object类详解equals== 和 equals 的对比== 是一个比较运算符(概念)== 既可以判断基本类型,又可以判断引用类型== 如果判断的是基本类型,判断的是”值是否相等“== 如果判断的是引用类型,判断的是"地址是否相等",即判定是不是同一个对象equals :是Object类中的方法(概念),只能判断引用类型equals默认判断的
2022-05-19 10:38:57
253
原创 计量单位换算
单位换算计算机中最小存储计量单位:bit【比特】计算机中最基本存储计算单位:Byte【字节】 (1Byte=8bit)常用单位之间是以210为进制单位计算即1024常用单位之间的换算:1K=512个汉字1K=1Kb=1024b=8*1024bit 1K=213bit1M=1Mb=1024K=1024Kb= 1024 * 1024B1G=1Gb=1024M=1024Mb=1024 * 1024KB英文字母及符号占用字节1)在半角状态下 1个英文字母或标点符号只占1个字节
2022-04-11 10:17:36
1371
原创 Java笔记 Day 12—方法重载、多态
文章目录方法重写/覆盖(override)多态方法重写/覆盖(override)介绍:方法覆盖就是子类有一个方法,和父类的某个方法的名称,返回类型,参数一样,即这个子类的方法覆盖了父类的那个方法(子类和父类不仅仅局限于一层)注意事项:子类的方法的形参列表,方法名称,要和父类的方法的形参列表,方法名称完全一样。子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类 【比如:父类 返回类型是 Object,子类方法返回类型是String】子类方法不能缩小父类方法的权限,可以扩大
2022-04-11 08:43:21
166
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅