自定义注解
首先需要创建几个注解用于使用RPC
EnableTensorRPC 开启RPC服务
RpcRegister 将接口注册为一个服务
RpcService 用于标注该接口是一个远程服务
首先需要创建几个注解用于使用RPC
EnableTensorRPC 开启RPC服务
RpcRegister 将接口注册为一个服务
RpcService 用于标注该接口是一个远程服务
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
输入:
11110
11010
11000
00000
输出: 1
Read More...在Java原生使用NIO(epoll)中,会存在一个著名的bug——epoll空轮训导致CPU出现100%的情况出现
这里需要深入跟踪一下NioEventLoop类的实现
之前在参与nacos的开发过程中,有不少同学都在问,为什么我在nacos console中将服务进行下线了,但是这个被下线的服务还是可以被调用到,这不太符合官方宣称的秒级上下线特点呀。经过进一步询问发现,那些存在说实例下线后依旧可以对外提供服务的问题,有一个共同的特点——都有rabbion这个负载均衡的组件。因此本文将从两个方面探讨这个问题:nacos的秒级上下线的实现方式以及rabbion的实例更新机制导致实例上下线感知延迟
1 | class BeatProcessor implements Runnable { |
1 | ({ElementType.TYPE, ElementType.METHOD}) |
通过Spring的注解Scope可以知道,对于Bean的使用方位有四种——singleton、prototype、session、request,那么这几种Bean的使用范围是如何实现的呢?首先要看Spring中的一个重要的接口——BeanDefinition
因为存在某些需求,我的服务不想注册到服务发现中心去,我只是想安安静静的做一个索取者,我只想获取可以调用的服务而已
在nacos-client中,如果要获取服务实例,那么会调用这个方法
1 | // String queryList(String serviceName, String clusters, int udpPort, boolean healthyOnly) |
在这个方法中看到了一个参数udpPort,等等会用到;这个方法最终调用的HTTP-URL为/v1/ns/instance/list,接着去看nacos-naming-server对应的该controller做了什么事情
或许会有疑问,为什么早先的cp模式的Zookeeper或者AP模式的Eureka,都只有支持CAP理论下大家常用的AP实现或者CP实现,而nacos却能够两个都实现呢?
其实CAP理论,仅仅是针对分布式下数据的一致性而言,如果你对于数据的一致性要求不高,可忍受最终一致性,那么AP模式的Eureka就可以满足你了,如果说你对数据的一致性要求很高,那么就使用CP模式的Zookeeper,而追其根本,并不是说Eureka是AP的,或者说Zookeeper是CP的,而是他们存储的数据的一致性,满足AP或者CP,因此也就不难实现在一个组件中实现AP模式与CP模式共存
1 | ("consistencyDelegate") |
今天收到阿里云的警告邮件,告知我的实例当前CPU负载过高,当时就奇怪了,怎么实例负载过高了?于是登录的服务器查看当前CPU以及系统负载情况,果真CPU当前负载为百分之百,并且是自己部署上去的Java应用程序,于是开始进行错误信息定位
jps or lsof -i:{port} 得到目前Java程序的PIDps -mp <PID> -o THREAD,tid,time进行打印所有的线程信息状态
CPU占用率较高的线程tidprintf "%x\n" tid得到线程的16进制表示
jstack <PID> > xxx.txt将当前Java程序的线程栈打印出来,然后根据上面得到的线程的16进制表示,定位到具体的线程进行具体分析
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
这道题可以采用二分查找插入位置来做,因为是数据流的形式,我只要确保上次一插入操作的结果有序,那么利用二分查找插入位置,每次排序的时间复杂度均为O(log(N))
Read More...