0%

基于springBoot,手写一个简单的RPC框架(三)

image-20230522163034434

继续上一章,在实现了服务端注册和调用之后,需要来实现客户端的功能,其中主要包括负载均衡,限流,请求发送和服务发现上。接下来将从一个RPC调用流程的顺序来实现接下来的功能

阅读全文 »

java spi 应用

Spi 定义

在Java中,SPI代表Service Provider Interface(服务提供者接口)。SPI是一种机制,允许应用程序通过在类路径中发现和加载可插拔的组件或服务提供者来扩展其功能。它提供了一种松耦合的方式,允许开发人员编写可以与多个实现进行交互的代码,而无需显式地引用特定的实现类。

阅读全文 »

基于springBoot,手写一个简单的RPC框架(一)

Code:pjpjsocute/rpc-service: personal rcp attempt (github.com)

技术栈使用包括:springboot,Zookeeper,netty,java spi

RPC定义

远程过程调用(Remote Procedure Call)是一种通信机制,允许不同的服务之间通过网络进行通信和交互。

通过RPC,一个服务可以向另一个服务发起请求并获取响应,就像本地调用一样,而无需开发者手动处理底层的网络通信细节。RPC框架会封装底层的网络传输,并提供了远程服务接口的定义、序列化和反序列化数据等功能。

rpc与http辨析:

​ HTTP是一种用于传输超文本的应用层协议,它在客户端和服务器之间进行通信。它基于请求-响应模型,客户端发送HTTP请求到服务器,服务器处理请求并返回相应的HTTP响应。RPC更类似一种架构思想,RPC可以用HTTP实现,TCP实现。

阅读全文 »

树状数组与力扣中的应用

  • 为什么会需要树状数组

    • 思考以下问题

    QA:

    假设存在一个整数序列input,例如intput = [1,2,7,4,3],要求前K个数的和。

    Sulotion:

    一般我们会求一个前缀和数组preSumArray,其中preSumArray[i]代表前i个数的和,这样我们求前N个数的和只需要返回preSumArray[N], 时间复杂度为O(1),如果需要查询K次,则复杂度为O(K).

    • 升级这个问题

    QA:

    假设存在一个整数序列input,例如intput = [1,2,7,4,3],现在在我们获取前N个数的和时,可能会先将i位置的数增加/减少value

    Sulotion:

    一般我们会求一个前缀和数组preSumArray,其中preSumArray[i]代表前i个数的和,如上一个问题所示,我们依旧可以在O(1)的时间得到前缀和。但是如果我们需要在第i位置插入一个数x,在进行更新时需要更新i之后的所有preSumArray,此时单次的更新时间为O(N),K次查询的复杂度为O(KN)。如果我们不使用preSumArray,那么更新复杂度为O(1),查询复杂度会变为O(N)。

    这时树桩数组可以帮助我们快速解决这个问题

阅读全文 »

Q:

给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。

注意我们必须使用 nums 数组中的每一个数进行分组,并且分数不一定需要是整数。

返回我们所能得到的最大 分数 是多少。答案误差在 10-6 内被视为是正确的。

阅读全文 »

Q:

RandomizedCollection 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。

实现 RandomizedCollection 类:

  • RandomizedCollection()初始化空的 RandomizedCollection 对象。
  • bool insert(int val) 将一个 val 项插入到集合中,即使该项已经存在。如果该项不存在,则返回 true ,否则返回 false
  • bool remove(int val) 如果存在,从集合中移除一个 val 项。如果该项存在,则返回 true ,否则返回 false 。注意,如果 val 在集合中出现多次,我们只删除其中一个。
  • int getRandom() 从当前的多个元素集合中返回一个随机元素。每个元素被返回的概率与集合中包含的相同值的数量 线性相关

您必须实现类的函数,使每个函数的 平均 时间复杂度为 O(1)

注意:生成测试用例时,只有在 RandomizedCollection至少有一项 时,才会调用 getRandom

阅读全文 »

Q:

给你一个整数数组 nums 和一个整数 k ,找出 nums 中和至少为 k最短非空子数组 ,并返回该子数组的长度。如果不存在这样的 子数组 ,返回 -1

子数组 是数组中 连续 的一部分。

阅读全文 »

Q:

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

阅读全文 »