HashMapMap 的一个实现类,它代表的是一种键值对的数据存储形式。

大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。

HashMap最多只允许一条记录的键为null,允许多条记录的值为null。不保证有序 (比如插入的顺序)、也不保证序不随时间变化。

jdk 8 之前,其内部是由数组 + 链表来实现的,而 jdk 8 对于链表长度超过8的链表将转储为红黑树

HashMap非线程安全,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要满足线程安全,可以用 CollectionssynchronizedMap方法使HashMap具有线程安全的能力,或者使用ConcurrentHashMap

HashMap数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)实现的。JDK 1.8 之所以添加红黑树是因为一旦链表过长,会严重影响 HashMap 的性能,而红黑树具有快速增删改查的特点,这样就可以有效的解决链表过长时操作比较慢的问题。

Java 虽然是面向对象的编程语言,但是依旧保留了一些原始数据类型,同时为了兼容java面向对象的特性,每种原始数据类型,都有对应的包装类型。

原始数据类型:boolean、char、byte、short、int、long、float、double
包装类型:Boolean、Character、Byte、Short、Integer、Long、Float、Double

包装类型是对原始数据类型的一种封装,包含对原始类型数据的存储、基本操作以及两种类型直接的转换。Java5中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java可以根据上下文,自动进行转换,极大的简化了相关的编程。

Integer就是int对应的包装类,它有一个int类型的字段存储数据,并且提供了基本操作,比如数学运算、类型转换等。

关于Integer的值缓存,是Java5中的一个改进。构造一个Integer对象的正常操作应该是直接使用Integer的构造器,new一个对象出来。但是根据具体实践,大部分的操作都较为集中在有限且较小的数值范围。因此,Java5中新增了静态工厂方法valueOf,在调用它的时候会利用一个缓存机制。缓存的数值范围为[-128, 127]

限流(Rate Limiting,即速率限制)通过限制每个用户调用API的频率来防止API被过度使用,这可以防止他们因疏忽或恶意导致的API滥用。在没有速率限制的情况下,每个用户可以随心所欲地请求,这可能会导致“峰值”请求,从而导致其他用户得不到响应。在启用速率限制之后,它们的请求将被限制为每秒固定的数量。

Rebalance 本质上是一种协议,规定了一个 Consumer Group 下的所有 consumer 如何达成一致,来分配订阅 Topic 的每个分区。

例如:某 Group 下有 20 个 consumer 实例,它订阅了一个具有 100 个 partition 的 Topic 。正常情况下,kafka 会为每个 Consumer 平均的分配 5 个分区。这个分配的过程就是 Rebalance。