自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java面试高频问题(21-25)

Redis RedLock 多节点RedLock算法 高可用,去中心化 实现复杂,时钟依赖 Redisson。ZooKeeper 临时有序节点+Watcher 强一致性,可靠性高 性能较低,依赖运维 Curator。2. 脑裂问题:Redis主从切换时的锁失效(RedLock算法要求多数节点可用)3. 多级缓存:Caffeine+Redis+本地ThreadLocal。缓存雪崩 随机过期时间+二级缓存降级 Redis过期时间+30s随机。1. 一致性哈希算法:减少数据迁移量(节点增减仅影响相邻节点)

2025-04-24 12:51:27 310

原创 Java面试高频问题(16-20)

XX:InitiatingHeapOccupancyPercent=45 // 触发并发周期的堆占用率阈值。Parallel Scavenge 吞吐量优先 多线程并行,关注系统吞吐量 Minor/Full GC。// 令牌填充速率(个/秒)// 流出速率(个/秒)// 上次填充时间戳。// 上次漏水时间戳。-XX:MaxGCPauseMillis=200 // 目标最大停顿时间。

2025-04-22 10:53:14 497

原创 Java面试高频问题(11-15)

缓存穿透: 恶意查询不存在数据 布隆过滤器+空值缓存 RedisBloom+Guava Cache。缓存雪崩 :大量缓存同时失效 随机过期时间+多级缓存 Caffeine+Redis集群。Saga模式: 长事务拆分为本地事务链 跨系统长流程事务 补偿逻辑复杂度高。缓存击穿: 热点key集中失效 互斥锁+逻辑过期 Redisson分布式锁。本地消息表: 事务消息+本地日志 异步最终一致性 消息堆积处理复杂。1. 二级缓存架构:Caffeine本地缓存+Redis分布式缓存。

2025-04-20 01:15:43 729

原创 Java面试高频问题(6-10)

logger.info("方法执行耗时: {}ms", System.currentTimeMillis() - start);3. 切面执行顺序:@Around > @Before > 目标方法 > @AfterReturning/@AfterThrowing。数据库乐观锁 :版本号/状态字段更新;// 2(Store屏障)性能损耗: CAS自旋+park/unpark;2. 锁降级策略:Condition的await/unpark控制。if (flag) { // 3(Load屏障)

2025-04-18 09:34:51 726

原创 Java面试高频问题(1-5)

1. 哈希冲突解决方案:采用数组+链表+红黑树结构(JDK1.8+),当链表长度超过阈值(默认8)时转为红黑树,提升查询效率。new LinkedBlockingQueue<>(queueCapacity), // 任务队列。3. 并发隐患:多线程环境下可能导致环形链表(JDK1.7)或死循环(JDK1.8之前版本)corePoolSize, // 核心线程数。1. 堆内存:新生代(Eden+S0/S1)与老年代。

2025-04-17 13:57:35 503

原创 Java微服务线程隔离技术对比:线程池隔离 vs 信号量隔离

本文将深入对比线程池隔离与信号量隔离两种技术方案,通过原理剖析、代码示例和选型建议,帮助开发者构建高可用服务治理体系。线程池隔离与信号量隔离本质是资源隔离的不同实现范式:前者通过物理资源隔离构建安全防线,后者通过逻辑控制实现轻量级防护。在实际应用中,推荐采用混合隔离策略——对核心服务使用线程池隔离保障稳定性,对高并发场景采用信号量隔离提升吞吐量。资源隔离性: 完全隔离(独立线程栈);指标 线程池隔离 信号量隔离。API网关 → 信号量限流 → 服务路由 → 线程池隔离。

2025-04-15 09:39:38 615

原创 Java微服务流量控制与保护技术全解析:负载均衡、线程隔离与三大限流算法

在微服务架构中,合理的负载均衡策略是系统扩展的基础,完善的线程隔离机制是服务稳定的保障,而科学的限流算法则是抵御流量洪峰的关键防线。开发者应根据业务特点选择技术方案:对响应时间敏感的场景优先考虑信号量隔离,对突发流量需要弹性处理的场景选择令牌桶算法,对流量精度要求高的场景采用滑动窗口算法。本文将深入剖析负载均衡原理、线程隔离机制,并通过Java代码实例详解滑动窗口、漏桶、令牌桶三大限流算法,帮助开发者构建健壮的分布式系统。流量整形能力 ★★★☆☆ ★★★★☆ ★★★★☆。// 实现加权随机算法。

2025-04-14 20:29:26 1140

原创 Java微服务注册中心深度解析:环境隔离、分级模型与Eureka/Nacos对比

掌握两者的核心差异与混合部署技巧,结合环境隔离与分级策略,方能构建真正适应业务发展的服务治理体系。随着Service Mesh技术的演进,注册中心正在向更轻量化、透明化的方向发展,持续关注技术演进方向将为企业架构升级提供关键支撑。本文将从生产环境实践出发,系统剖析注册中心的环境隔离策略、分级部署模型,并通过Eureka与Nacos两大主流组件的全方位对比,帮助开发者构建高可用服务治理体系。// 本地缓存更新间隔。configService.createNamespace("PROD", "生产环境");

2025-04-13 14:34:19 896

原创 Java微服务分布式事务:CAP定理、BASE理论与事务模式全解析

理解CAP与BASE的理论边界,掌握AT/TCC/最大努力通知的技术细节,结合业务场景进行架构创新,才能构建真正可靠的高并发系统。本文将深入探讨分布式领域的三大基石理论(CAP/BASE),并详解微服务场景下的五种主流事务解决方案,通过真实代码示例揭示技术实现本质。可用性(Availability):每个请求都能得到响应(不保证最新数据)。一致性(Consistency):所有节点同一时间看到相同数据。

2025-04-11 14:39:10 1206

原创 Redis缓存穿透、击穿与雪崩的核心原理与Java实战解决方案

本文将围绕缓存穿透、缓存击穿、缓存雪崩三大经典问题,从概念解析到Java实现,提供完整的解决方案与代码示例。缓存穿透指客户端请求的数据既不在缓存中,也不在数据库中(如恶意构造的无效ID),导致每次请求都会穿透缓存直达数据库。当某个超高频访问的热点Key(如明星八卦新闻)在缓存中过期时,瞬时大量请求将直接打到数据库,形成"原子弹式"冲击。当大量缓存Key在同一时间段集中过期(如凌晨批量更新),或Redis集群大规模宕机时,所有请求将直接涌向数据库。// 模拟数据库查询。// 缓存空值,TTL设置为5分钟。

2025-04-10 16:24:04 471

原创 Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案

这种方式确保了过期的key不会被无意义地读取,但存在一定的风险,即过期key只有在被访问时才会被删除,如果某个过期key一直未被访问,它将一直占用内存。这种方式保证了缓存中的数据最终与数据源中的数据一致,但在高并发场景下,可能会出现缓存与数据源数据不一致的短暂窗口,例如在更新缓存过程中,如果有其他请求读取数据,可能会读取到旧的数据。例如,对于使用关系型数据库的应用,可以使用数据库的触发器或者监听数据库的变更日志(如MySQL的binlog)来实时感知数据的变化,并相应地更新缓存。

2025-04-09 23:25:58 663

原创 Redis核心知识解析:RedisObject、编码方式、数据结构及skiplist与sortedset详解

特别是skiplist这种高效的数据结构和Redis中有序集合的巧妙结合,为处理有序数据和范围查询提供了强大的支持。本文将深入探讨RedisObject、Redis的编码方式、五种数据结构(string、list、hash、set、zset),以及重点介绍skiplist和sortedset的简介、特点和底层结构。当存储的是可以表示为整数的字符串时,Redis会采用int编码,将其转换为实际的整数类型进行存储。- 简介:Redis中最基本的类型,它可以包含任意类型的字符串,如文本、数字、二进制数据等。

2025-04-08 11:01:04 591

原创 Redis主从集群、哨兵原理与分片集群全解析

主节点负责处理写操作,并将数据的变更同步到从节点;它的主要职责包括监控主节点和从节点的健康状态、在主节点出现故障时自动进行故障转移(即将某个从节点升级为新的主节点),并向客户端提供主节点的信息。- 在主节点发送RDB文件的过程中,主节点会将新的写命令记录到一个缓冲区中,当从节点加载完RDB文件后,主节点会将缓冲区中的写命令发送给从节点执行,以确保从节点的数据与主节点保持一致。- 哨兵会将新的主节点的地址和端口等信息广播给其他从节点,其他从节点会将新的主节点作为自己的主节点,并开始与新的主节点进行同步。

2025-04-08 10:47:07 639

原创 Elasticsearch 从入门到实战:文档聚合操作及总结

无论是构建实时日志监控系统,还是实现复杂的商业智能分析,ES 都能提供高效的解决方案。- 脑裂问题:配置 `discovery.zen.minimum_master_nodes` 避免集群分裂。{ "term": { "category": "手机" } },- 避免大结果集:使用 `scroll` API 分页查询海量数据。- 冷热数据分离:使用 ILM(索引生命周期管理)自动迁移旧数据。- 索引只读:磁盘空间不足时,ES 会自动将索引设为只读模式。五、数据聚合:挖掘数据的深层价值。

2025-04-07 09:56:08 607

原创 Elasticsearch简介及索引库操作

Elasticsearch(简称 ES)作为一款基于 Lucene的分布式搜索和分析引擎,凭借其近实时搜索、水平扩展能力和强大的聚合分析功能,迅速成为日志分析、全文检索、监控系统等场景的首选工具。- 多类型数据分析:支持结构化、非结构化数据,甚至地理位置数据的处理。- 全文检索:基于倒排索引技术,支持模糊查询、高亮显示等高级功能。- 分片(Shard):数据水平拆分的单元,提升并发处理能力。- 电商搜索:商品多维度检索(如价格、品牌、关键词)。- 副本(Replica):分片的备份,保障高可用性。

2025-04-06 15:09:35 487

原创 RabbitMQ

Exchange:消息路由(支持Direct、Topic、Fanout、Headers四种类型)- 镜像队列(Mirrored Queues)实现高可用。├── 是 → 同步调用(OpenFeign/gRPC)└── 否 → 异步消息(RabbitMQ/Kafka)- 批量发送消息(Batch Publishing)- 方案:单个队列单消费者,或使用Kafka分区。- 方案:增加消费者实例,或设置TTL+死信队列。- 方案:消费端实现幂等性(如数据库唯一索引)- 消费者手动ACK(避免消息丢失)

2025-04-05 10:19:01 698

原创 Java微服务通信实战:同步与异步调用详解

同步调用(Synchronous Communication)是典型的请求-响应模式:客户端发出请求后,必须等待服务端响应才能继续执行,如同打电话需要实时对话。// 阻塞直到获取结果。| 适用场景 | 实时交易、API调用 | 日志处理、事件通知 |- 实时性强,适合需要立即响应的场景(如支付验证)| 响应时间 | 毫秒级 | 秒级甚至分钟级 || 数据一致性 | 强一致性 | 最终一致性 |- gRPC(基于HTTP/2的高性能RPC)| 系统耦合度 | 高 | 低 || 维度 | 同步 | 异步 |

2025-04-04 11:08:09 637 1

原创 Sentinel深度解析:微服务流量防卫兵的原理与实践

围绕资源的实时状态动态配置的治理策略,包括流量控制规则(FlowRule)、熔断降级规则(DegradeRule)和系统保护规则(SystemRule)。通过动态监测CPU使用率、系统负载等指标,自动调整入口流量,防止系统过载。Sentinel应运而生,作为阿里巴巴开源的分布式系统流量防卫兵,它通过流量控制、熔断降级、系统负载保护等核心功能,为微服务架构提供全方位的稳定性保障。Sentinel的核心执行模型,由多个ProcessorSlot(处理槽)组成,依次执行统计、限流、熔断等逻辑,形成责任链模式。

2025-04-03 08:02:49 499

原创 分布式事务解决方案:Seata架构与AT/XA模式深度解析

传统解决方案如两阶段提交(2PC)存在性能瓶颈,而 Seata作为开源分布式事务框架,提供了更灵活的模式,尤其是 AT(自动补偿)和 XA(强一致性)模式,成为企业级应用的热门选择。- 拦截业务SQL,生成数据更新前后的快照(`before_image` 和 `after_image`)。- **回滚**:根据undo_log生成反向SQL补偿数据,并通过 **全局锁** 避免脏写。| **维度** | **AT模式** | **XA模式** |- **提交**:异步删除undo_log,无资源占用。

2025-04-02 00:42:33 702

原创 零基础入门npm:从安装到实战,一篇熟悉Node.js包管理

接下来,建议深入学习`package.json`配置、继续探索npm脚本的自动化能力。- 删除`node_modules`后重装:`rm -rf node_modules && npm install`2. 锁定依赖版本:使用`package-lock.json`或`npm shrinkwrap`。| `npm list -g --depth 0` | 查看全局安装的包 || `npm uninstall <package>` | 卸载包 |- 清除缓存:`npm cache clean --force`

2025-03-31 12:04:11 768

原创 排序算法(Java篇)

System.out.println("快速排序结果:" + Arrays.toString(testArr));System.out.println("原始数组:" + Arrays.toString(testArr));2. 原地排序:除计数排序外,其他算法均实现为原地排序(直接修改输入数组)- 快速排序使用三数取中法选择基准值(代码中简化为取最后一个元素)1. 方法结构优化:所有排序方法都设计为静态方法,可以直接通过类调用。- 堆排序实现为O(1)空间复杂度。

2025-03-29 17:59:42 461

原创 十大经典排序算法详解(Pyhon篇)

快速排序 | O(n log n) | O(n²) | O(log n) | 不稳定 || 归并排序 | O(n log n) | O(n log n) | O(n) | 稳定 || 堆排序 | O(n log n) | O(n log n) | O(1) | 不稳定 || 计数排序 | O(n+k) | O(n+k) | O(k) | 稳定 || 冒泡排序 | O(n²) | O(n²) | O(1) | 稳定 |非比较类排序:利用元素特征确定位置(计数、基数、桶排序)

2025-03-29 17:56:46 498

原创 Java微服务拆分原则深度解析:从理论到实践

例如,一个电商系统的订单模块与库存模块深度耦合,修改订单逻辑可能影响库存计算,导致测试和部署周期延长。例如,将用户管理系统拆分为用户认证服务和用户画像服务,前者处理登录鉴权,后者负责行为数据分析。例如,用户服务提供`GET /users/{id}`接口,禁止其他服务直接查询用户表。例如,订单服务通过API调用库存服务,而非直接操作库存表。垂直拆分:将单表按业务拆分,如将`orders`表拆分为`orders`(订单基础信息)和`order_details`(商品明细)高内聚:同一服务内的功能紧密相关。

2025-03-28 13:55:23 821

原创 深入浅出Nacos核心用法:服务发现与配置管理实战指南

[Spring Cloud Alibaba参考指南](https://spring-cloud-alibaba-group.github.io/github-pages/2021/en-us/index.html)| 特性 | Nacos | Eureka | Consul | Apollo || 配置实时推送 | ✅ | ❌ | ❌ | ✅ || 多数据中心 | ✅ | ❌ | ✅ | ✅ || 服务发现 | ✅ | ✅ | ✅ | ❌ || 配置管理 | ✅ | ❌ | ✅ | ✅ |

2025-03-27 17:17:12 1047

原创 Docker:从核心概念到跨主机通信的实践指南

而Docker基于Linux内核的命名空间(Namespace)和控制组(Cgroups)技术,仅虚拟化应用运行环境,多个容器共享宿主机内核,资源利用率提升50%以上。本文系统性解析Docker的核心技术原理,涵盖容器与虚拟机的本质差异、四种网络模式的应用场景、镜像构建全流程,以及跨宿主机通信的解决方案。2. 创建Macvlan网络:`docker network create -d macvlan --subnet 172.19.0.0/24 -o parent=eno1 macvlan-net`

2025-03-24 09:05:51 547

原创 MyBatis Plus核心详解:从入门到高效开发的实战指南

摘要:MyBatis Plus作为MyBatis的增强工具,凭借其简洁的API和强大的功能,成为Java开发者提升ORM效率的利器。本文深度解析MyBatis Plus的核心特性,包括通用CRUD、条件构造器、分页插件等,并通过代码示例展示其实际应用场景,助你快速掌握这一框架的精髓。结语:MyBatis Plus通过巧妙的封装,在保留MyBatis灵活性的同时大幅提升了开发效率。GitHub源码地址:https://github.com/baomidou/mybatis-plus。// 当前页、每页数量。

2025-03-22 15:58:47 562

原创 Java编程规范与最佳实践:提升代码质量与团队协作效率

通过统一的代码风格、清晰的注释与文档、健壮的异常处理机制,开发者能显著降低维护成本,提升代码可读性与系统稳定性。文档注释(Javadoc):用于类、方法、成员变量的描述,通过`/** ... */`格式编写,包含功能说明、参数、返回值及异常信息。实现注释:包括块注释(`/* ... */`)和行注释(`//`),用于解释复杂逻辑或临时性代码调整,需与代码同步更新以避免误导。精准捕获:避免捕获泛化的`Exception`,应针对`IOException`、`SQLException`等具体异常处理。

2025-03-18 16:01:03 573

原创 2025年Java面试高频八股文总结

方法过滤 | InvocationHandler | MethodInterceptor |- List<String>与List<Integer>的class对象相同。- **问题**:为什么String设计为不可变类?| 限制 | 必须实现接口 | 无法代理final类 || 性能 | 调用快,生成慢 | 生成快,调用稍慢 |- 典型反例:StringBuffer的线程安全代价。| 特性 | JDK Proxy | CGLIB |- **并发问题**:多线程扩容导致数据丢失的底层原理。

2025-03-15 01:30:44 288

原创 Java Web开发核心内容全解析(下)

首先定义不同的角色,如管理员、普通用户等。当用户发送请求到控制器(Servlet)时,控制器会解析请求参数,根据请求的类型调用相应的模型方法(如查询数据库获取数据等),然后将处理结果(如查询到的数据或者操作成功/失败的信息)转发给视图(JSP页面)进行显示。设置Content - Security - Policy(CSP):这是一种浏览器端的防护机制,通过在HTTP响应头或者HTML页面的标签中设置CSP规则,可以限制页面中可以加载的资源来源,如脚本、样式表、图片等的来源,从而防止恶意脚本的注入和执行。

2025-03-15 01:05:27 484

原创 Java Web开发核心内容全解析(上)

Session是Hibernate与数据库交互的主要接口,通过它可以进行数据库操作,如开启事务(Transaction)、保存对象(save())、查询对象(get()、load())、更新对象(update())和删除对象(delete())等操作。例如,定义一个Java实体类,如User类,然后通过Hibernate的映射文件或者注解的方式将类中的属性与数据库表中的字段进行映射,这样就可以直接对User对象进行增删改查操作,Hibernate会在底层自动生成相应的SQL语句。

2025-03-15 00:52:59 637

原创 《Java核心之面向对象编程(OOP)》

方法重写发生在子类和父类之间,子类可以根据自身的需求重写父类的方法,以提供自己特定的实现。例如,定义一个“学生”类继承自“人”类,“学生”类就可以拥有“人”类的姓名、年龄等属性以及相关的方法,同时还可以有自己的特定属性如学号和特定行为如学习。抽象类在设计和构建类的层次结构时非常有用,它可以强制子类实现某些特定的方法,同时也允许提供一些通用的方法实现。在Java编程领域,面向对象编程(OOP)无疑是其核心概念之一,它为开发者提供了一种全新的、高效的编程范式,极大地提升了代码的构建、组织和复用能力。

2025-03-14 23:50:08 220

原创 Java正则表达式

Matcher matcher = pattern.matcher("价格:99元,库存:5");String text = "联系我:admin@test.com 或 user@qq.com";// false(正确)"a1b2".matches("\\d+");// 错误写法:Pattern.compile("\d+");. 任意字符 "a.c" abc, a@c。+ 1次或多次 "\\d+" 1, 123。

2025-03-14 23:38:57 962

空空如也

空空如也

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

TA关注的人

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