基础
文章平均质量分 91
掂掂三生有幸
励志成为Java领域优质创作者,接商务合作、产品推广
展开
-
Java使用位图+redis生成抖音号、淘淘号、B站UID号等分布式ID
上一篇中我们介绍了《为什么亿级数据量时要使用位图》,今天这一篇就来实战使用位图。做分布式项目首先要考虑分布式ID的生成,分布式ID暂时没有太好的高性能全局递增或趋势递增,即使是美团的lefa、百度的uid-generator、滴滴的tinyid都或多或少借用了第三方中间件不但对性能有所影响也增加了系统的复杂度。我在之前的文章《高并发下分布式ID各个的解决方案以及redis集群分布式ID代码实现。原创 2022-10-24 08:30:00 · 3782 阅读 · 7 评论 -
为什么亿级数据量时要使用位图?位图和布隆过滤器有什么关系?
我们知道Byte表示字节,一个字节等于8bit,这里的bit就和位图有关系。在上面的例子中,我们不是要存放1千万个整数嘛,那就申请一个具有1千万个bit的数组,用每个bit(二进制位)来表示一个整数,当前bit为0表示不存在这个整数,为1表示该整数就存在。虽然数量是1千万个,但是每个数的范围是1到1亿,所以我们需要1亿个bit,换算下来,就是12.5MB,和刚才的40MB相比,节省的不是一点点。下一篇会实战使用位图来实现抖音号、淘淘号等需要生成看似无序却呈趋势递增的号段式ID。原创 2022-10-21 19:23:26 · 4953 阅读 · 3 评论 -
比红黑树更快的跳表到底是什么数据结构?如何实现?
传送门我在之前在头条介绍了十分优秀的二分查找算法,但是它只能作用于有序数组上,查找起来比较方便,但是数组中插入和删除元素是比较麻烦的;那么有没有办法让二分查找也能作用于有序链表上,从而达到查找、插入和删除元素都十分的快速呢?对于普通的有序列表来说,当然不能实现我们的目标,如下查找的时间复杂度为O(n);我们可以基于原始链表建立一个 索引层,比如每两个节点提取一个节点到索引层:如此,两种数据结构我们查找元素16的比较次数分别为10次和8次,确实能提高查询速度;原创 2022-10-09 23:38:51 · 1899 阅读 · 6 评论 -
谈谈对链表的理解
链表和数组相比有哪些不同点?它的优缺点是什么?链表有哪些类别?它们各自的优缺点是什么?如何使用链表实现LRU算法?链表相对于数组而言,是两种不同的内存组织方式,链表不需要连续的内存空间,天然支持动态扩容,而且不像数组扩容那样需要搬运数据。链表大小等于实际使用大小,不存在浪费空间的现象。链表适合插入和删除操作,时间复杂度为O(1),但是并不意味着适合非常频繁地插入和删除,因为那样会导致频繁地申请内存和释放内存,容易造成内存碎片,从而提高GC的频率。原创 2022-10-04 19:41:34 · 1206 阅读 · 3 评论 -
【基础巩固】详细总结对数组的理解
数组是一种线性表数据结构,它用一组连续的内存空间来存储一组具有相同类型的数据。在这里,线性表的意思是,数据像一条线一样组织起来的,每个线性表上的数据只有向前和向后两个方向,比如数组、链表、队列、栈等;而非线性表就比如树、堆、图之类的。方便寻址。比如上面说到寻址公式为,倘若下标从1开始,那么寻址公式就要改为,这样,每次数组随机访问寻址就会多一次减法操作,数组是系统中使用最为频繁的数据结构,这一点点的性能提升对整个系统来说就是很可观的。历史原因。原创 2022-10-03 23:26:13 · 892 阅读 · 0 评论