我有一个不断访问的SQL表,但很少变化.
表由UserID分区,每个用户在表中有许多记录.
我想保存数据库资源并将此表移近某种内存缓存中的应用程序.
在进程中,缓存过于占用内存,因此需要在应用程序外部进行缓存.
像Redis这样的Key Value商店由于与Redis之间序列化和反序列化表的开销而被证明是低效的.
我正在寻找可以将这个表(或数据分区)存储在内存中的东西,但是让我只查询我需要的信息,而不需要为每次读取序列化和反序列化大块数据.
是否有任何东西可以在内存数据库表中提供Out of Process,它支持高速缓存的查询?
搜索显示Apache Ignite可能是一个可能的选择,但我正在寻找更明智的建议.
与面试官讨论了Java Hashmaps的内部实现,以及如果我们覆盖equals()而不是Employee对象的HashCode()方法,它将如何表现.
他告诉我,对于默认的object.hashCode()实现,两个不同对象的hashCode永远不会相同,除非我们自己覆盖hashCode().
另外,有人告诉我,一个存储桶中只能有一个唯一的Hashcode,而具有相同哈希码的对象只能存储在一个存储桶中.我知道这与第一点相矛盾.咄!
根据我的记忆,我告诉他Java Hashcode合同说两个不同的对象可能有相同的hashcode().
根据我的采访者的说法,默认的object.hashcode()永远不会有两个不同对象的相同hashcode(),这是真的吗?
甚至可以编写一个演示此代码的代码.根据我的理解,Object.hashcode()可以产生2 ^ 30个唯一值,如何产生碰撞,具有如此低的碰撞可能性,以证明两个不同的对象可以使用Object类方法获得相同的hashcode().
或者他是对的,使用默认的Object.HashCode()实现,我们永远不会发生冲突,即两个不同的对象永远不会有相同的HashCode.如果是这样,为什么这么多java手册没有明确说明.
如何编写一些代码来演示这个?因为在演示这个时,我还可以证明hashmap中的一个桶可以包含不同的HashCodes(我试图向他展示hashMap被扩展的调试器,但他告诉我这只是逻辑实现而不是内部算法?)