一、简单介绍一下雪花算法原理
1、雪花算法生成一个64bit的长整型标识符,其内部结构包含四个部分。首先,最左侧的一个bit通常被置为0作为符号位(在实际应用中往往无意义)。接下来的41bit用于存储自某个时间起点以来的毫秒级时间戳,以此确保生成的ID具有时间上的有序性。第三个组成部分是10bit的工作节点ID部分,在跨机房部署的情况下,这10bit可以根据需求划分为两部分,例如前5bit代表机房ID,后5bit代表机房内的机器ID,以确保每个工作节点的ID在整个系统中唯一。最后的12bit则用来存储同一节点内同一毫秒内产生的不同事件序号,以便在同一节点内部生成多个唯一的ID。
ArrayList扩容原理
1、ArrayList在Java中采用数组作为底层数据结构,其初始容量(capacity)可在构造时指定为10或其他值。当向ArrayList中添加元素,使得其实际元素数量达到等于当前容量时,便会触发自动扩容操作。扩容过程中,ArrayList并非调用copyOfValue
方法,而是调用ensureCapacityInternal
方法进而调用grow
方法,grow
方法会新建一个容量大约为原数组1.5倍的新数组(确切说是旧容量加原容量的一半,向上取整),然后将旧数组中的所有元素逐一复制到新数组中,从而完成扩容操作。"