青云博客 分享、记录

什么是可重入锁ReentrantLock(阿里)

可重入锁(ReentrantLock)是一种支持重入的锁机制,也被称为递归锁。重入锁是指同一个线程可以多次获得同一个锁而不会发生死锁。 具体来说,当一个线程获取了可重入锁后,可以多次对该锁进行加锁操作,每次加锁都要对应一次解锁操作。而对于其他线程来说,只有当获取到该锁后,才能进行加锁操作。 在Jav

詹学伟 发布于 2024-04-24

阿里面试P6+

前言 这次去阿里面试的是我老东家的好朋友,我们之前都是一个项目组的,一起吃饭,一起洗脚,一起。。。 他们公司最近也裁员了,不过他是裁员前去的阿里,不知道谁捞到他简历了,莫名就走了流程,他莫名的就面了7轮过了。 他想着行情这么不好,要不就去了,去了之后,他们公司就裁员了。。。

詹学伟 发布于 2024-04-24

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

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

詹学伟 发布于 2024-04-24

如何优化线程池的参数设置(阿里)

优化线程池的参数设置可以根据实际需求和场景来进行调整。以下是一些优化线程池参数设置的建议: 核心线程数(corePoolSize)的设置:根据任务的类型和负载情况,合理设置核心线程数。如果任务是CPU密集型的,可以设置核心线程数与CPU核心数相等,以充分利用CPU资源。如果任务是I/O密集型的,可以

詹学伟 发布于 2024-04-24

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

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

詹学伟 发布于 2024-04-24

Spring Bean 容器的生命周期是什么样的(美团)

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

詹学伟 发布于 2024-04-24

Redis 数据结构压缩列表和跳跃表的区别(美团)

压缩列表(ziplist)本质上就是一个字节数组,是 Redis 为了节约内存而设计的一种线性 数据结构,可以包含多个元素,每个元素可以是一个字节数组或一个整数。 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指 针,从而达到快速访问节点的目的。跳跃表支持平均

詹学伟 发布于 2024-04-24

一个 Redis 实例最多能存放多少的 keys(美团)

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

詹学伟 发布于 2024-04-24

Redis 主从同步是怎么实现的(美团)

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

詹学伟 发布于 2024-04-24

如何定位慢 SQL 产生的原因(美团)

要定位慢SQL产生的原因,可以通过以下几个步骤进行排查: 使用MySQL的查询日志:可以在MySQL的配置文件中启用查询日志(query log)。启用查询日志后,MySQL会记录下执行的所有SQL语句和执行时间。通过分析查询日志,可以找到执行时间较长的SQL语句。 使用EXPLAIN分析执行计划:

詹学伟 发布于 2024-04-24