自定义博客皮肤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)
  • 收藏
  • 关注

原创 大文件上传的实现方式

摘要:分片上传技术将大文件分割为小块(如5MB)依次上传,支持断点续传和并行传输提升可靠性。前端通过Blob.slice实现分片,服务端需提供分片接收、合并及校验接口。该技术能有效解决网络不稳定导致的上传中断问题,配合进度监控和压缩预处理可优化用户体验。对于超大文件,还可采用WebSocket或P2P传输方案。典型实现包括记录上传状态、控制并发数及服务端分片合并处理。

2025-09-26 17:11:19 314

原创 G1的SATB为什么比CMS增量标记快

SATB与CMS垃圾回收算法的性能差异主要体现在标记机制上。SATB采用初始快照方式,通过pre-write屏障记录旧值,标记范围固定且开销较小,适合大内存场景,停顿时间可控制在10ms内。CMS需要动态跟踪对象变化,维护卡表导致更高开销,标记时间与存活对象数正相关,4TB堆的停顿常超50ms。测试表明SATB比CMS减少50%以上标记停顿,尤其在大内存应用中优势明显。

2025-09-25 13:40:07 430

原创 Redis 过期策略

Redis通过定期删除和惰性删除两种策略处理键过期问题。定期删除定时扫描并清理过期键,平衡内存和CPU使用;惰性删除则在访问键时检查过期状态,减少CPU开销但可能导致内存泄漏。此外,Redis支持expire和setex命令设置过期时间。三种过期策略各有优劣:定时删除虽及时但耗资源;惰性删除节省CPU但可能堆积过期键;定期删除折中处理,需合理配置执行频率和时长以优化性能。实际采用混合策略确保高效内存管理。

2025-09-25 13:10:05 208

原创 GC 是任何时候都可以的吗?

GC垃圾收集器只能在安全点(Safepoint)进行,这是JVM中线程可以安全暂停的特定位置。安全点确保线程状态已知且一致,便于垃圾回收和堆栈遍历等操作。触发条件包括显式调用System.gc()或内存不足时被动触发。安全点通常设置在方法调用、循环跳转和异常抛出位置,以减少性能损耗。线程通过检查全局标志进入安全点暂停,等待GC完成。

2025-09-25 13:04:46 298

原创 ConcurrentHashMap 实现的原理

ConcurrentHashMap是Java并发包中的高性能线程安全哈希表。JDK1.7采用分段锁机制,将哈希表分为多个Segment,每个Segment独立加锁,实现并发读写。JDK1.8优化为CAS+synchronized机制,使用Node数组+链表/红黑树结构,锁粒度细化到单个桶,支持多线程协同扩容。核心特性包括:无锁读操作、CAS写初始化、synchronized处理冲突、链表转红黑树优化查询、并发扩容等。相比Hashtable等同步容器,ConcurrentHashMap在保证线程安全的同时显著

2025-09-25 10:40:06 1597

原创 Synchronized 关键字的底层实现原理

摘要:Java早期版本的Synchronized采用重量级锁实现,通过对象头的MarkWord和Monitor机制管理线程同步,涉及操作系统层面的上下文切换开销较大。JVM优化包括锁升级(偏向锁->轻量级锁->重量级锁),字节码层面通过monitorenter/monitorexit指令实现同步。建议减少同步范围、优先使用并发工具类以避免性能问题,从而更高效地实现线程安全。(149字)

2025-09-24 15:33:12 1045

原创 数据库设计中的三大范式

数据库设计中的三大范式是关系型数据库设计的核心规范。第一范式(1NF)要求数据原子性和唯一标识;第二范式(2NF)在1NF基础上消除部分依赖;第三范式(3NF)消除传递依赖。三大范式能有效减少冗余,提高数据一致性,但过度规范化可能影响查询性能。实际应用中需在规范化和性能之间取得平衡,有时允许合理冗余。

2025-09-24 14:44:47 247

原创 Redis 与Memcached 的对比

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

2025-09-22 16:25:43 218

原创 Redis 合适的应用场景

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

2025-09-22 16:00:27 856

原创 Redis 为什么那么快

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

2025-09-22 15:24:19 620

原创 Java中锁的类型

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

2025-09-22 11:26:30 1343

原创 java 内存交互模型-JMM

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

2025-09-19 20:07:43 908

原创 内存分配策略

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

2025-09-19 17:33:43 467

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

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

2025-09-19 13:35:34 397

原创 内存泄漏与内存溢出

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

2025-09-18 22:26:46 624

原创 JVM 类加载机制

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

2025-09-18 22:08:00 771

原创 JVM 内存区域

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

2025-09-18 21:45:36 789

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

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

2025-09-18 21:28:08 803

原创 RocketMQ vs RabbitMQ vs Kafka

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

2025-09-18 09:32:35 775

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

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

2025-09-17 20:40:23 226

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

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

2025-09-17 20:15:15 324

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

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

2025-09-17 15:52:23 1530

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

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

2025-09-17 14:07:08 562

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

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

2025-09-17 12:31:36 1037

原创 为什么要使用RabbitMq

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

2025-09-16 20:48:18 265

原创 RabbitMQ 的事务机制

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

2025-09-16 19:41:24 441

原创 什么是AMQP

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

2025-09-16 17:56:23 918

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

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

2025-09-16 12:15:46 305

原创 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 5526

原创 不会 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 374

原创 安装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 1283

原创 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 2288 1

空空如也

空空如也

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

TA关注的人

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