青云博客 记录、分享

缓存穿透、缓存击穿和缓存雪崩

缓存穿透、缓存击穿和缓存雪崩是在使用缓存时常见的性能问题。 缓存穿透指的是恶意查询一个不存在的数据,导致该请求每次都会穿透缓存,直接访问数据库。这种情况下,大量请求会直接访问数据库,给数据库造成压力,降低了系统性能。 解决办法: 使用布隆过滤器:将所有可能存在的数据放入布隆过滤器中,对请求进行过滤,

詹学伟 Published on 2024-04-24

G1垃圾收集器

G1是一种面向服务器端应用的垃圾收集器,是JDK 7版本引入的一项重要特性。G1垃圾收集器以实现<

詹学伟 Published on 2024-04-24

线上OOM问题

排查线上OOM问题是一个复杂的过程,需要综合运维经验、日志分析和性能监控等多个方面的信息。下面是一般的排查步骤: 收集信息:首先,收集与OOM问题相关的信息,包括错误日志、

詹学伟 Published on 2024-04-24

HashMap的扩容机制

HashMap的扩容机制是为了保持负载因子在一定范围内,以提高HashMap的性能和效率。负载因子是指HashMap中已存储的键值对数量与数组容量的比值。 当HashMap中的键值对数量超过了负载

詹学伟 Published on 2024-04-24

ConcurrentHashMap的存储结构

ConcurrentHashMap在Java7 中使用的分段锁,也就是每一个 Segment 上同时只有一个线程可以操作,每一个 Segment 都是一个类似 HashMap 数组

詹学伟 Published on 2024-04-24

线程池大小设置

线程池大小的设置需要根据具体的应用场景和系统资源进行考量。以下是一些常见的设置策略: 1、CPU 密集型任务: 这种任务消耗的主要是 CPU 资源,可以将线程数设置为

詹学伟 Published on 2024-04-24

Spring AOP底层原理

Spring AOP全称是面向切面编程,是Spring框架的一个重要特性,它通过在运行时动态地将额外的行为(如日志记录、事务管理等)织入到应用程序的特定方法或代码块中。 底层原理主要基于动态代理和

詹学伟 Published on 2024-04-24

String 为什么要设计成不可变的

String被设计成不可变的有以下几个原因: 线程安全:由于String是不可变的,多个线程可以同时访问同一个String对象而无需担心数据被修改。这使得String在多线程环境下是线程安全的。 缓存Hash值:由于String是不可变的,它的hashCode可以缓存,将String用作Key在哈希

詹学伟 Published on 2024-04-24

什么是“零拷贝”?有什么作用?

零拷贝是操作系统提供的一种优化 IO 操作的重要机制。通过零拷贝技术,操作系统可以极大的减少在一次 IO 操作中,数据从一个内存区域复制到另一个内存区域的次数,以及在此过程中对 CPU 的性能消耗。零拷贝技术可以极大的提高数据传输的效率,避免不必要的数据拷贝,从而降低系统负载。 零拷贝有两种实现方式

zhanxuewei zhanxuewei Published on 2024-04-24

zk集群数据是如何同步的

Zookeeper集群的数据同步过程如下: 集群启动时,会先进行领导者选举,确定哪个节点是Leader,哪些节点是Follower和Observer。 Leader会和其他节点进行数据同步,采用发送快照和发送Diff日志的方式。 集群在工作过程中,所有的写请求都会交给Leader节点来进行处理,从节

zhanxuewei zhanxuewei Published on 2024-04-24
Previous Next