GaryLee's Blog
Object类的equals和hashCode方法有什么用? Object类的equals和hashCode方法有什么用?
一、背景众所周知,在Java中Object类是所有类的父类,也就是说所有类都会有equals和hashCode方法。 二、equals()方法1、代码实现public boolean equals(Object obj) { ret
2023-10-19
ElasticSearch的基本概念 ElasticSearch的基本概念
一、ElasticSearch的基本概念ElasticSearch中有一些基本概念如下: Index(索引):指同一类有相似特征的文档的集合,类似MySQL中的表,如用户索引、频道索引等 Document(文档):指可搜索的最小单位,一个
2023-10-18
如何实现本地缓存? 如何实现本地缓存?
一、为什么要用本地缓存?正常情况下,我们不使用本地缓存而直接使用分布式缓存(如Redis)的话,就会涉及网络调用,会出现一定的性能消耗,所以在大型项目中,一般使用多级缓存也就是本地缓存+分布式缓存来实现缓存查询,进一步提高系统性能。(具体可
2023-10-05
Kafka高水位是什么? Kafka高水位是什么?
一、Kafka的高水位是什么?在Kafka中,一条消息只有被成功提交了才能被消费者消费,而提交的进度就是用高水位来表示。 高水位也叫做HW,指的是未提交消息中最早的offset(意味着消费者只能消费offset之前的消息)。。 二、高水位
2023-10-03
线程池的最佳实践 线程池的最佳实践
一、线程池的最佳实践1、正确创建线程池线程池应该避免使用Executors类来创建,而应该用ThreadPoolExecutor类来创建,避免出现OOM。(具体可参考《线程池有哪几种?为什么不建议用Executors创建?》) 2、监控线程
2023-10-03
线程池有哪几种?为什么不建议用Executors创建? 线程池有哪几种?为什么不建议用Executors创建?
一、线程池有哪几种?在Java中,线程池有4种,都是通过工具量Executors创建的,而线程池的最终实现类是ThreadPoolExecutor,这4种线程池分别是: newCachedThreadPool(缓存线程池):可以用来处理突
2023-10-03
如何并发执行多个任务并等待执行结果? 如何并发执行多个任务并等待执行结果?
一、为什么要并发执行多个任务,而不是一个个顺序执行呢?比如一个接口执行了A、B、C三个任务,分别耗时1、2、3秒,如果顺序执行的话,总耗时需要6秒,代码如下: public class TestExecuteClass { @Tes
2023-10-02
Kafka中Partition和Consumer数量应该怎么分配? Kafka中Partition和Consumer数量应该怎么分配?
一、背景Kafka中各个概念关系如下: 一个Topic有多个Partition 一个Consumer Group有多个Consumer 一个Consumer可以监听多个Partition 二、Kafka中Partition和Consum
2023-10-02
压测分析 压测分析
一、什么是压测?为什么要做压测?压测,也叫做压力测试,是通过模拟用户请求,来帮助我们评估系统QPS和发现系统瓶颈所在,是一个高可用系统的一个必要手段之一。 二、压测流程是怎样的?一般压测分为以下几步: 确定压测目标:如哪个接口/方法、压测
线上Redis的Zset集合占用内存过大问题分析 线上Redis的Zset集合占用内存过大问题分析
一、背景有一天,企微收到了一条告警:Redis实例内存达到80%已自动扩容。通过分析内存变化曲线,发现是近几天才开始涨得比较快。通过大key分析拿到了几个key,命名分别是ts_file_0、ts_file_1、…、ts_file_9,很明
没做线程池隔离导致的线上故障分析 没做线程池隔离导致的线上故障分析
一、背景线上服务监控告警某个服务接口大量失败,先访问出问题的机器,拿到异常堆栈,然后临时紧急重启后正常。 异常堆栈信息如下:[DUBBO] Thread pool is EXHAUSTED! Thread Name: DubboServer
为什么Redis集群的最大槽数是16384? 为什么Redis集群的最大槽数是16384?
一、为什么Redis集群的最大槽数是16384?这里说到的Redis集群指的是Redis Cluster集群,它用了哈希槽(Hash Slot)来实现数据的分片,key查找的时候会通过CRC16算法取模后找到对应的Slot槽。(集群介绍可参
2023-09-19
5 / 16