【手撸RPC框架】SpringBoot+Netty4实现RPC框架
模型特点: 采用阻塞IO模式获取输入的数据 每个链接都需要独立的线程完成数据的输入,业务处理、数据返回。 问题分析: 当并发数很大,就会创建大量的线程,占用很大系统资源 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源浪费。 线程模型2:Reactor 模式 针对传...
模型特点: 采用阻塞IO模式获取输入的数据 每个链接都需要独立的线程完成数据的输入,业务处理、数据返回。 问题分析: 当并发数很大,就会创建大量的线程,占用很大系统资源 连接创建后,如果当前线程暂时没有数据可读,该线程会阻塞在read操作,造成线程资源浪费。 线程模型2:Reactor 模式 针对传...
Spring Boot 接口如何做限流?面试官问起如何作答 具体的伪代码如下: image.png 这个算法虽然简单,但是有一个十分致命的问题,那就是临界问题,我们看下图: image.png 从上图中我们可以看到,假设有一个恶意用户,他在0:59时,瞬间发送了100个请求,并且1:00又瞬间发送了...
计数器算法.png 2.1.3 适用场景 虽然此算法是大多数人第一个想到可以限流的算法,但是不推荐使用此算法。 因为,此算法有个致命性的问题,如果1秒允许的访问次数为100,前0.99秒内没有任何请求,在最后0.01秒内,出现了200个请求,则这200个请求,都会获取调用许可,给程序带来一次请求的高...
这里存在一个问题,JVM 既不会保证什么时候把 CPU 缓存里的数据写到主内存,也不会保证什么时候从主内存读数据到 CPU 缓存。也就是说,不同 CPU 上的线程,对同一个变量可能读取到的值是不一致的,这也就是我们通常说的:线程间的不可见问题。比如下图,Thread 1 修改的 counter =...
image.png java内存博大精深,如果仔细深究肯定够我们学习好多天了。作为初学者,我们学习内存的目的是为了更好的理解代码背后的运行原理,写出更加健壮且安全的代码,所以我们只需要知道如下图所示的内存区域,便可以让我们达到目的。 image 从上图我们看到java虚拟机给我们分配的内存区域有栈空...
定义一个map数据结构存储(k,v),其中key值为字符,value值为字符位置+1,加1表示从字符位置后一个才开始不重复 我们定义不重复子串的开始位置为start,结束位置为end 随着end不断遍历向后,会遇到与【start,end】区间内字符相同的情况,此时将字符作为key值,获取其value...
image.png 5. Gossip Gossip 算法又被称为反熵(Anti-Entropy),熵是物理学上的一个概念,代表杂乱无章,而反熵 就是在杂乱无章中寻求一致,这充分说明了 Gossip 的特点:在一个有界网络中,每个节点都随机 地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状...
apk打包流程 所以我们需要在.class转成dex文件前,扫描class并修改它,这里gradle提供了Transform API让我们更方便地完成这个操作(这个场景我们这里只做扫描,不做操作) 1.继承Transform,实现以下几个方法 class ScanDuplicateTr...
代理是一种设计模式 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。目的:为其他对象提供一种代理以控制对这个对象的访问。类关系图: 静态代理创建一个接口,然后创建被代理的类实现该...
2021_02_02_http_request_yaml 然后在要使用http库的文件里面引入头文件 import 'package:http/http.dart' as http; 发送http请求的代码也比较简单,我们这里以get请求为例 http.get("https://cdn.jsdeli...