自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis 与Memcached 的对比

Redis和Memcached对比摘要:Redis支持多种数据结构、持久化(rdb/aof)和事务,采用单线程模型,适合复杂场景;Memcached仅支持简单键值,纯内存缓存无持久化,多线程高并发性能更优。关键差异在于Redis功能丰富(集群/订阅/地理索引等),Memcached专注简单缓存。选择依据:需数据结构/持久化用Redis,追求极致性能选Memcached。

2025-09-22 16:25:43 56

原创 Redis 合适的应用场景

Redis作为高性能内存数据库,支持多种数据结构应对不同场景:1)String类型适用缓存系统、计数器;2)SortedSet实现实时排行榜;3)List/Stream构建消息队列;4)GEO模块处理地理位置服务;5)分布式锁解决资源竞争。其优势在于原子操作、低延迟和高吞吐,但需注意内存管理、持久化配置和查询功能限制。典型应用包括会话存储、实时数据处理和限流控制等。

2025-09-22 16:00:27 577

原创 Redis 为什么那么快

Redis高性能的五大核心机制:1)内存存储避免磁盘I/O瓶颈;2)单线程模型结合I/O多路复用降低并发开销;3)定制化数据结构(SDS/跳表等)实现高效存取;4)Reactor网络模型和RESP协议提升通信效率;5)灵活的持久化策略(RDB/AOF)平衡性能与可靠性。通过内存优化、线程模型、数据结构、网络协议和持久化策略的系统性设计,实现微秒级响应和高吞吐量。

2025-09-22 15:24:19 264

原创 Java中锁的类型

摘要:Java锁机制按公平性可分为公平锁(按请求顺序分配)和非公平锁(允许插队);按排他性分为独占锁(单线程访问)和共享锁(多线程读共享);按获取方式分为悲观锁(先加锁)和乐观锁(后验证);按状态分为可重入锁(允许重复获取)和不可重入锁(禁止重复获取)。不同锁类型适用于不同并发场景,需权衡公平性、性能与功能需求。

2025-09-22 11:26:30 994

原创 java 内存交互模型-JMM

Java内存交互模型(JMM)定义了多线程环境下线程与内存的交互规则,确保可见性、有序性和原子性。其核心包括主内存(存储共享变量)和工作内存(线程私有副本),通过8种原子操作(如read/load、store/write)实现内存交互。JMM通过volatile、synchronized和final关键字保证可见性,遵循happens-before原则(程序顺序、锁规则等)控制指令重排序。原子性方面,基本数据类型读写是原子操作,而64位类型需使用同步机制。JMM为编写线程安全代码提供了理论基础,通过合理使用

2025-09-19 20:07:43 863

原创 内存分配策略

本文概述了JVM内存分配与回收机制:1)对象优先在Eden区分配,空间不足时触发MinorGC;2)区分MinorGC(回收新生代)与MajorGC/FullGC(回收老年代/全堆);3)大对象直接进入老年代以避免复制开销;4)通过年龄计数器实现长期存活对象晋升老年代;5)动态对象年龄判定机制允许提前晋升。这些机制共同优化了JVM内存管理效率。

2025-09-19 17:33:43 403

原创 Java对象什么时候会被移动到老年代

Java对象晋升老年代的主要条件包括:年龄阈值触发(默认15次MinorGC)、大对象直接分配、Survivor空间不足、动态年龄判定(同年龄对象超50%空间)和分配担保机制。关键参数有MaxTenuringThreshold(最大晋升年龄)、PretenureSizeThreshold(大对象阈值)和TargetSurvivorRatio(Survivor区利用率)。合理调整这些参数可优化GC行为,例如增大Survivor比例可减少秒杀场景下的FullGC。

2025-09-19 13:35:34 370

原创 内存泄漏与内存溢出

内存泄漏与内存溢出的区别与联系 内存泄漏指程序未能释放不再使用的内存,导致内存被无效占用,长期积累可能引发溢出。常见原因包括未关闭资源、静态集合未清理等。 内存溢出是程序申请内存时超出系统可用空间,常由单次申请过大或泄漏积累导致,表现为程序崩溃或抛出内存不足错误。 关键区别:泄漏是内存未被释放,溢出是内存不足;泄漏需长期积累才显现,溢出会即时触发错误。 解决方案:通过工具(如MAT、VisualVM)检测泄漏,优化代码逻辑;对于溢出,可调整内存参数或优化数据加载方式。

2025-09-18 22:26:46 553

原创 JVM 类加载机制

JVM 类加载机制是 Java 虚拟机将类文件(.class)加载到内存,并进行验证、准备、解析和初始化的过程。这一机制确保了类的正确性和安全性,同时支持动态加载和运行时绑定。用户可通过继承类实现自定义类加载器,用于特定场景(如热部署、模块化加载等)。需重写方法,而非以避免破坏双亲委派模型。@Override// 从自定义路径加载字节码// 实现从文件或网络加载字节码的逻辑。

2025-09-18 22:08:00 719

原创 JVM 内存区域

摘要:JVM内存区域分为线程私有和共享区域。私有区域包括程序计数器(记录字节码指令地址)、虚拟机栈(存储方法栈帧)和本地方法栈;共享区域包括堆(存储对象实例)、方法区(存储类信息)和运行时常量池。程序计数器是唯一不会内存溢出的区域,而其他区域在内存不足时可能抛出StackOverflowError或OutOfMemoryError。直接内存虽非JVM管理,但也会影响内存使用。不同虚拟机实现可能存在差异。

2025-09-18 21:45:36 726

原创 GC 算法的种类及垃圾收集器

标记-清除算法是最基础的垃圾回收算法,分为标记和清除两个阶段。标记阶段遍历所有可达对象并标记,清除阶段回收未被标记的对象内存。适用于内存碎片不敏感的场景,如早期Java虚拟机。缺点是会产生内存碎片,可能引发频繁的GC。

2025-09-18 21:28:08 737

原创 RocketMQ vs RabbitMQ vs Kafka

本文对比了三种主流消息队列的特性:RocketMQ适用于金融交易等低延迟场景,吞吐量10万级/秒;RabbitMQ适合企业应用,吞吐量万级/秒,支持复杂路由但扩展性较差;Kafka专为大数据设计,吞吐量达百万级/秒,但配置复杂。三者各具优势:RocketMQ支持事务消息,RabbitMQ协议丰富易用,Kafka水平扩展能力强。选择时需根据业务场景(如实时性要求)、吞吐需求和运维复杂度综合考量,文末还提供了三种MQ的生产者代码示例。

2025-09-18 09:32:35 468

原创 简单列举MQ 消息丢失的原因

消息丢失的原因可从生产者、中间件和消费者三个环节分析:生产者可能因网络故障、服务宕机或配置错误导致发送失败;Broker端若未开启持久化,重启会导致内存消息丢失;消费者未正确ACK或处理过慢会导致消息被丢弃。其他因素还包括网络分区、消息TTL过期、队列满溢策略设置不当以及人为误操作等。解决此类问题需系统梳理各环节逻辑,快速定位根因,这既考验问题分析能力,也体现技术人员的实战水平。

2025-09-17 20:40:23 175

原创 消息队列主要的组织方式

消息队列是分布式系统的核心组件,支持多种组织方式:点对点(单消费者)、发布/订阅(多消费者)、扇出(多路分发)、路由(条件过滤)、主题(层次路由)、优先级队列、延迟队列、死信队列、共享队列(负载均衡)、持久化队列(数据可靠)和分区(并行处理)。根据业务需求选择合适方式,需平衡可靠性、吞吐量、延迟等要素。

2025-09-17 20:15:15 299

原创 如何恢复RabbitMQ中丢失的数据

摘要:本文介绍了RabbitMQ消息丢失的排查与解决方法。首先通过检查日志、监控队列状态、验证持久化配置等方式定位问题原因。若确认消息丢失,可采取重发机制、启用镜像队列、配置数据备份等措施来恢复数据一致性。文章还分享了通过比较集成环境数据时间戳实现自动数据同步的实用案例,为解决跨系统数据不一致问题提供了可行方案。

2025-09-17 15:52:23 1358

原创 RabbitMQ 如何保证消息被优先消费

摘要:RabbitMQ的优先级队列机制可确保关键业务消息优先处理。通过设置x-max-priority参数(建议1-10)和消息优先级属性,系统能自动优先消费高优先级消息。典型应用场景包括:电商VIP订单优先处理、紧急任务调度、重要通讯优先推送、高价值金融交易快速执行等。实现时需注意单线程消费、结合QoS预取限制,并可通过死信队列保障关键消息不丢失。该方案适用于消息堆积时区分处理优先级,对性能要求高的场景建议控制优先级范围,必要时可采用多队列方案替代。

2025-09-17 14:07:08 506

原创 RabbitMQ 上存放的message是否有数量限制

RabbitMQ消息溢出处理摘要:RabbitMQ提供多种溢出策略,通过Policy配置overflow参数决定队列满时的处理方式:默认drop-head丢弃旧消息,或reject-publish拒绝新消息。消息存储能力受内存阈值(默认40%)、磁盘空间和队列长度限制影响。优化建议包括启用惰性队列、设置消息TTL、集群分片及监控关键指标。最佳实践需根据业务场景选择合适的溢出策略,并合理配置队列参数与消费者处理能力。(149字)

2025-09-17 12:31:36 965

原创 为什么要使用RabbitMq

RabbitMQ是一款高性能的开源消息代理服务器,具备消息持久化、确认机制等可靠特性,支持分布式部署。其核心优势包括:实现应用解耦、异步处理提升系统效率、流量削峰应对高并发、跨平台兼容多种协议语言。此外,RabbitMQ提供灵活的消息路由机制、完善的管理监控工具,以及活跃的社区支持和丰富的插件生态。这些特性使RabbitMQ成为分布式系统中高效可靠的消息传递解决方案。

2025-09-16 20:48:18 223

原创 RabbitMQ 的事务机制

RabbitMQ通过tx.select、tx.commit和tx.rollback实现事务机制,确保消息发布的原子性。事务开启后,消息暂存于上下文,提交时统一处理,失败则回滚。虽然能保证一致性,但同步阻塞特性会显著降低吞吐量。高并发场景建议使用性能更优的Publisher Confirms机制。事务适用于需严格保证原子性且消息量较小的业务场景,但要注意不能跨Channel使用。

2025-09-16 19:41:24 421

原创 什么是AMQP

AMQP(Advanced Message Queuing Protocol)是一种开放标准的应用层协议,用于异步消息传递,支持跨平台、跨语言通信。其核心设计目标是实现可靠、高效的消息队列系统,适用于分布式架构和企业级应用。

2025-09-16 17:56:23 864

原创 RabbitMQ中消息什么时候会进入死信交换机

摘要:RabbitMQ的死信交换机(DLX)用于处理无法正常消费的消息。典型场景包括:消息被拒绝且不重新入队、TTL超时、队列满被丢弃、无法路由或队列被删除。配置时需在声明队列时设置x-dead-letter-exchange和x-dead-letter-routing-key参数。示例代码演示了如何通过Java客户端模拟消息被拒绝后进入死信交换机的过程,包括声明交换机和队列、发布消息以及消费者拒绝消息的处理。运行后可在RabbitMQ管理界面查看死信队列中的消息。(148字)

2025-09-16 12:15:46 276

原创 kubectl cp 命令 Permission denied 解决方法

前提: 本地开发因为拉了新的代码,又不想重新build ,为了节省时间,碰巧有一套测试docker环境,想着能不能本地build 一个jar 包,直接扔上去测试下新加的代码。于是:1.Linux 环境下面,把即将要放到pod 里面的jar 上传到环境中。2.kubectl cp /opt/XXX.jar pod-6f8c86679c-lwpgj:/ -n namespaces -c <容器名称>XXX.jar 对应jar 包,pod-6f8c86679c-lwpgj ...

2021-03-18 20:20:52 5475

原创 不会 jmeter 的 dev 不是好 dev?初识 jmeter 以及 jmeter 嵌套函数的使用

作为一个很“不专业”的dev,接到一个任务,做性能测试,在50k--300k 数据的系统上测试某些功能并发5个线程能否成功?所以,到底能否成功?1.jmeter 是什么官方文档:https://jmeter.apache.org/简言之:基于java 的压测工具2.修改语言:3.明确测试需要哪些步骤:1)连接到环境,获取token创建一个线程组(Thread ...

2020-05-07 16:04:33 366

原创 安装WebSphere 8.5 集群--Linux RHEL7

一.安装WebSphere 之前需要先安装IBM installation Manager安装部署环境:一台DM+APP 另一台 APP installation Manager 的安装比较简单基本上都是一步一步往下走。1.start to install IM  找到文件解压的目录执行下面的命令. sudo ./consoleinst.sh 1.1 choose N an

2018-05-15 16:02:11 1276

原创 Windows 64-bit Oracle 12c 安装步骤

1.下载安装包:这里需要自己注册一下,然后就可以登录下载软件了。下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html记得下载File1,File2 2.解压zip文件夹,值得注意的是,需要将两个压缩包解压到同一个目录下。两个压缩包中都有一个文件夹database

2018-01-19 15:55:40 2268 1

空空如也

空空如也

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

TA关注的人

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