- 博客(266)
- 资源 (2)
- 收藏
- 关注

原创 高并发系统设计需要考虑哪些问题
首先我们需要明白MySQL单机的性能,MySQL单机的qps大概是5000左右,具体要分读写。针对高并发的系统,例如需要支持100万qps的下单系统,我们需要做什么样的设计?首先我们需要知道Redis单机的qps,大概是50,000 左右,也看具体场景。那么这么点QPS无法满足100万的QPS需求,因此我们需要有一些优化措施。生产的话就需要自己去做压测来找真正的性能瓶颈。存储层我们考虑两个:MySQL和Redis。生产的话就需要自己去做压测。那么这里也会有一些问题。
2025-05-13 21:15:32
846

转载 布隆过滤器
这是因为布隆过滤器的设计原理决定了它是一种空间效率极高的概率型数据结构,用来测试一个元素是否“可能”存在于集合中。布隆过滤器(Bloom Filter)在设计时,其容量是固定的,因此不支持直接扩容。传统的布隆过滤器一旦创建,它的位数组大小就无法改变,这意味着如果需要处理的数据量超过了初始化时预设的容量,将导致误报率增加,且无法通过简单地增大位数组来解决这个问题。在标准的布隆过滤器(Bloom Filter)实现中,包括基于Java实现的RBloomFilter或其他变体,
2025-05-07 14:11:06
23

转载 Elasticsearch以及Lucene详解
但是如果term太多,term dictionary也会很大,放内存不现实,于是有了Term Index,就像字典里的索引页一样,A开头的有哪些term,分别在哪页,可以理解term index是一颗树:这棵树不会包含所有的term,它包含的是term的一些前缀。Elasticsearch为了能快速找到某个term,将所有的term排个序,二分法查找term,logN的查找效率,就像通过字典查找一样,这就是Term Dictionary。当你创建一个索引的时候,你可以指定你想要的 分片的数量。
2025-05-06 20:46:07
38

转载 RocketMQ详解
RocketMQ 是阿里巴巴开源的一款分布式消息中间件,后捐赠给 Apache 基金会,成为顶级项目。具有的特点,适用于金融、电商、物联网等场景。
2025-04-10 17:31:53
65

转载 消息中间件的选型 Kafka vs RocketMQ vs RabbitMQ vs QMQ
这里吞吐量需要注意,当kafka的topic太多时,会影响到它的吞吐量,但是对于RocketMQ 就没有这个问题,kafka可能数百个topic就会有性能问题,但是RocketMQ 可以有更多的topic的数量。
2025-04-02 15:10:10
38

转载 如何实现线程之间的通信?如何实现线程池的任务编排?Futrue,信号量, 栅栏等
当某个线程需要访问共享资源时,它必须先从 Semaphore 中获取一个许可证,如果已经没有许可证可用,线程就会被阻塞,直到其他线程释放了许可证。原文链接:https://www.javacn.site/interview/thread/thread-communication.html#%E7%AD%89%E5%BE%85%E9%80%9A%E7%9F%A5%E5%AE%9E%E7%8E%B0。
2025-03-17 17:19:26
42

转载 spring循环依赖及解决方式
Spring中的循环依赖(Circular Dependency)是指两个或多个Bean相互依赖,形成一个闭环,导致Spring容器无法正确初始化这些Bean。构造函数循环依赖:Spring无法通过三级缓存解决构造函数循环依赖,因为在构造函数中需要完整的Bean实例,而提前暴露的Bean尚未完成初始化。Spring通过三级缓存机制部分解决了循环依赖问题,但仅限于字段注入和Setter注入,构造函数注入无法解决。这里,A依赖B,B又依赖A,形成了循环依赖。Spring的三级缓存机制。我们需要避免循环依赖。
2025-02-28 17:40:38
30

转载 场景题大全
2)根据桶中元素的个数,计算出中位数所在的桶(比如 100 亿个数据,第 1 个桶到第 18 个桶一共有 49 亿个数据,第 19 个桶有 2 亿数据,那么中位数一定在第 19 个桶中),然后针对该桶进行排序,就可以求出海量数据中位数的值(如果内存还是不够,可以继续对这个桶进行拆分;在创建订单时,写入一个定时过期的key,当key过期时,监听到redis的keyevent 事件通知,进行后续处理。1)创建多个小文件桶,设定每个桶的取值范围,然后把海量数据元素根据数值分配到对应的桶中,并记录桶中元素的个数。
2025-02-12 20:32:41
72

转载 分布式事务Seata
分布式事务,就是不再单个服务或者单个数据库中产生的事务,一般有:跨数据源的分布式事务,跨服务的分布式事务。在实际开发中,往往一个业务操作不可能只经过一个服务,也不可能只调用一个数据库。创建订单按照你的订单扣减商品库存从用户的账户余额中扣除金额完成上面操作我们需要访问3个服务和3个不同的数据库。
2025-01-21 00:07:03
50

转载 CMS垃圾回收器+G1垃圾回收器+ZGC垃圾回收器详解及对比
例如,在并发标记阶段,有一个白色对象B,B被灰色对象A引用(A=B),A和B都还没有被GC线程扫描,一个业务线程将B断开引用(删除引用),例如A=null,同时一个黑色对象C引用了该对象(增加引用),例如C=B。这是G1的常规操作,当年轻代区域填满时,会触发年轻代收集。为目标的收集器,是一款针对老年代的垃圾回收器,一般和Parallel回收器(一款新生代回收器,是使用复制算法的收集器,又是并行的多线程收集器)配合使用,。具体算法同上面的CMS收集器,不同的是处理对象漏标问题的解决方法,G1收集器采用。
2025-01-16 12:26:28
143

原创 线程的基本操作
线程启动start线程终止join说它是终止线程可能不是很准确,join的含义是:t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。线程等待唤醒wait线程唤醒notify线程睡眠sleep...
2020-04-11 11:45:01
270
1

转载 String的intern()方法
String中的intern方法一.intern方法的用途关于字符串String中的intern方法,是当常量池中不存在"abc"这个字符串的引用,将这个对象的引用加入常量池,返回这个对象的引用,当常量池中存在"abc"这个字符串的引用,返回这个对象的引用。java中获取String常量池中常量有两种方法:一个是通过双引号定义字符串例如:String S = “1”;一个是String的in...
2020-04-08 19:20:28
258

转载 Spring中IoC容器实现的关键:BeanFactory和ApplicationContext
Spring的beanFactory和Application
2020-04-08 10:43:58
1232
1

转载 ArrayList、LinkedList、CopyOnWriteArrayList的区别联系
CopyOnWriteArrayList的实现原理内部数据会被copy读写分离可能的数据延迟CopyOnWriteArrayList用了一个有意思的技术实现了线程安全(不需要synchronization)。内部数据会被copy当调用这个类的任何有关修改的操作的时候(比如add,remove),CopyOnWriteArrayList里面整个的内容都会被重新copy一份。读写分离...
2020-04-03 19:58:08
741
1

转载 接口限流、服务降级、熔断
为什么需要限流与用户打交道的服务比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮用户增长过快(这是好事)因为某个热点事件(微博热搜)竞争对象爬虫恶意的刷单这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流量进来,如果遇到此类情况,扩容是根本来不及的,弹性扩容也是来不及的;对内的RPC服务一个服务A的接口可能被BCDE多个服务进行调用,在B服务...
2020-04-02 21:13:44
5578
1

转载 分布式session如何实现
大约有如下几种方法:粘性sessionsession复制session共享机制session持久化到数据库1.粘性session原理:粘性Session是指将用户锁定到某一个服务器上。比如上面说的例子,用户第一次请求时,负载均衡器将用户的请求转发到了A服务器上,如果负载均衡器设置了粘性Session的话,那么用户以后的每次请求都会转发到A服务器上,相当于把用户和A服务器粘到了一块...
2020-04-02 20:46:03
212

转载 MySQL的锁与事务详解
也就是说,在前面举例幻读问题中,当T1要对ID>2的用户做修改余额,锁定3、9这两条行数据时,默认会加的是临键锁,也就是当事务T2尝试插入ID=6的数据时,因为有临建锁存在,因此无法再插入这条“幻影数据”,也就至少保障了T1事务执行过程中,不会碰到幻读问题。MySQL的锁机制与索引机制类似,都是由存储引擎负责实现的,这也就意味着不同的存储引擎,支持的锁也并不同,这里是指不同的引擎实现的锁粒度不同。一个事务已获取共享锁,当另一个事务尝试对具备共享锁的数据进行读操作时,可以加共享锁,可正常读;
2020-03-26 10:24:40
230
1

转载 数据库三范式与反三范式
第一范式字段不可分,保证字段的原子性,字段不能是集合、多个值。下面第二行是违反第一范式的:第二范式有主键,非主键字段依赖主键。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要我们设计一个主键来实现(这里的主键不包含业务逻辑)。即满足第...
2020-03-25 15:41:37
641

转载 面向对象的设计原则(SOLID)
设计模式的Solid原则有:Single Responsibility Principle:单一职责原则Open Closed Principle:开闭原则Liskov Substitution Principle:里氏替换原则Interface Segregation Principle:接口隔离原则Dependence Inversion Principle:依赖倒置原则除此之...
2020-03-24 11:03:37
285

转载 RPC框架——Dubbo
什么是RPCRPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即无论是调用本地接口/服务的还是远程的接口/服务,本质上编写的调用代码基本相同。比如两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或者方法,由于不在一个内存...
2020-03-09 22:56:24
388
1

转载 微服务集群框架
微服务集群框架整个微服务集群框架是怎么构成的:注册中心、服务发现、负载均衡API 网关RPC框架消息队列全方位的监控统一配置中心统一日志中心熔断,限流,降级缓存这些框架下管理的是各种服务器:web项目服务器异步job任务服务器数据库 服务器缓存服务器如下图所示:转自:https://blog.csdn.net/wangjianan7357/article...
2020-03-09 10:39:49
342

转载 Redis集群(主从、哨兵、分片)
Redis集群当满足需求时,我们可以只在一台服务器上部署Redis数据库,其他的服务器通过IP、端口等访问这台服务器即可。但是当一台服务器难以满足时,我们就需要在多台机器上部署一个Redis集群,来满足需求。Redis集群中主要有如下几种核心功能:主从复制哨兵模式分片分区主从复制需求为了避免单点故障,可选的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器...
2020-03-05 11:06:36
1803
1

转载 Redis并发问题及分布式锁,以及和Zookeeper的对比
Redis并发问题既然Redis是单线程,那么它为什么会有并发的问题。理论上来说,Redis是按顺序执行修改操作,不会有多个线程同时修改的情况。但假如有这种场景下:有一个字符串,key 为 a,value 为 1 。两个客户端同时对 a 进行加 1 。他们同时获取到 a 的值为 1 ,同时向Redis发出请求,将 a 值改为 2 。这样并发问题就产生了。Redis本身是按顺序执行的,它...
2020-03-05 10:30:07
555
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人