1.Algorithm:https://leetcode.com/problems/kth-largest-element-in-a-stream

返回输入数据量第K大的元素。采用优先队列,优先队列内部维护了一个k个元素的小顶堆,返回堆顶元素

2.Review:http://www.drdobbs.com/lock-free-data-structures/184401865

无锁编程的基础概念和一些常用的数据结构,如CAS等

3.Tip:最近看了一下dubbo的源码,dubbo扩展了SPI的实现,主要解决了下面几个问题:

  1. JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。
  2. 如果扩展点加载失败,连扩展点的名称都拿不到了。比如:JDK 标准的 ScriptEngine,通过 getName() 获取脚本类型的名称,但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在,导致 RubyScriptEngine 类加载失败,这个失败原因被吃掉了,和 ruby 对应不起来,当用户执行 ruby 脚本时,会报不支持 ruby,而不是真正失败的原因。
  3. 增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。

Dubbo SPI 在 dubbo-common 的 extension 包实现,核心加载类参考 com.alibaba.dubbo.common.extension.ExtensionLoader 

4.share:博客文章:https://thurstonzk2008.com/2019/05/10/reactor%E5%B0%8F%E7%BB%93/