青云博客 记录、分享

说下ThreadLocal的底层实现原理及常用场景(阿里)

ThreadLocal是Java中的一个线程封闭工具类,它提供了一种在多线程环境下保持变量的线程隔离机制。ThreadLocal的底层实现原理可以简单描述如下: 每个Thread对象都维护了一个ThreadLocalMap对象。ThreadLocalMap是一个用于存储ThreadLocal变量的数

詹学伟 Published on 2024-04-24

多线程同步有哪些方法(阿里)

在多线程环境中,可以使用以下几种方法来进行线程间的同步: Synchronized 关键字:使用Synchronized关键字可以将方法或代码块标记为同步代码,确保同一时间只有一个线程可以执行该代码块或方法。Synchronized关键字可以用于对实例方法、静态方法和代码块进行同步操作。 Reent

詹学伟 Published on 2024-04-24

Spring Bean 容器的生命周期

在Spring中,Bean容器的生命周期经历以下阶段: 实例化:当Bean容器加载配置文件时,将会创建Bean的实例。Spring容器会根据配置文件中的定义,通过反射机制创建Java对象,并存储在容器中。 属性设置:在Bean实例化后,Spring容器会通过setter或直接字段注入的方式,将配置文

詹学伟 Published on 2024-04-24

一个 Redis 实例最多能存放多少的 keys

Redis实例最多可以存放的keys数量受到多个因素的限制,包括Redis版本、可用内存大小、系统架构和其他配置参数等。 根据Redis的设计和实现,它的keys存储在一个由Hashtable组成的hash表中。根据Redis的源代码,目前Redis默认使用了214个哈希表槽位(默认情况下,可以通过

詹学伟 Published on 2024-04-24

Redis 主从同步

在Redis中,主从同步是通过以下步骤来实现的: 建立连接:从服务器(从节点)通过向主服务器(主节点)发送SYNC命令来与主服务器建立连接。 快照同步:主服务器在收到SYNC命令后,会执行BGSAVE命令生成一个RDB持久化文件,并将该文件发送给从服务器进行全量复制。从服务器在接收到RDB文件后,会

詹学伟 Published on 2024-04-24

LRU 实现原理

LRU(Least Recently Used)是一种常见的缓存淘汰策略,它的基本思想是根据数据的访问时间来淘汰最近最少使用的数据。当缓存满了的时候,会将最近最少访问的数据从缓存中删除,以腾出空间给新的数据。 在实现上,可以通过维护一个数据结构来记录数据的访问顺序,常用的数据结构是双向链表(Doub

詹学伟 Published on 2024-04-24

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

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

詹学伟 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
Previous Next