array是最简单最常见的数据结构。它们的特点是容易通过索引(位置)访问元素。它们是干什么用的?想象一排剧院的椅子。每把椅子都被分配了一个位置(从左到右),所以每个观众都会从他将要坐的椅子上分配一个数字。这是一个数组。把问题扩展到整个剧院(一排排椅子),你就有了一个二维数组(矩阵)。特征列表是线性的数据结构,就像数组一样。
它由存储当前元素的值和下一个元素的地址引用的节点组成。这样,元素通过指针链接起来。它们是干什么用的?链表的一个相关应用是实现浏览器的上一页和下一页。双向链表非常适合存储用户显示的页面。特征栈是一种抽象数据类型,它形式化了受限访问集的概念。此限制遵循后进先出(LIFO)规则。因此,添加到堆栈中的最后一个元素是您从堆栈中移除的第一个元素。
8、如何使用bloomfilter构建大型Java 缓存 系统在如今的软件中,缓存是解决很多问题的关键概念。您的应用程序可能是CPU密集型的。当然,你不希望这些操作一遍又一遍的重复。相反,您只能执行它们一次,并将结果作为缓存放入内存。有时候系统的瓶颈在于I/O操作。比如不想重复查询数据库,想结合缓存的结果,只查询数据在数据变化时更新缓存。类似于上面的情况,在某些情况下我们需要做一个快速搜索来决定如何处理新的请求。
如果我们把所有恶意网站的网址缓存加起来,会占很大空间。或者在另一种情况下,您需要确认用户输入的字符串包含美国的地名。就像这个字符串中的“华盛顿博物馆”一样,华盛顿是美国的一个地名。是不是应该把美国所有的地名都记在记忆里,然后再去查?那样的话缓存会有多大?在不使用数据库的情况下可以高效地完成吗?这就是为什么我们要超越基础的数据结构map,在更高级的数据结构 bloomfilter中寻找答案。
9、slab管理对于每类 数据结构的 缓存是不是就是数组所谓数组,就是数据类型相同的元素按照一定的顺序排列的集合,也就是用一个名字命名有限个相同类型的变量,然后用数字区分它们的变量集合。这个名字叫做数组名,数字叫做下标。组成数组的变量称为数组的组成部分、数组的元素,有时也称为下标变量。数组是将几个相同类型的变量以有序的形式组织起来,以便于编程处理的一种形式。
数组不同于线性表。区别主要在动态分配上。现代语言支持动态数组,可以在运行时确定数组大小,但早期语言不支持,所以数组大小必须在编译器中确定。线性链表可以动态确定大小,随时增删,知道元素个数。除非数组是动态定义的,否则要自己知道元素个数。例如,c89不支持动态数组,但c99支持。Isoc 也不支持,但c 0x支持。
10、常用的 缓存技术第一章中的Common缓存Technology 1、Common two缓存Local缓存:不需要序列化,速度快,并且缓存的数量和大小受本地内存分配的限制/。速度比local 缓存慢,但理论上缓存的数量和大小是无限的(因为缓存 machines是可以不断扩展的)。2.local缓存Google guavacache:最好的local缓存ehcache:Spring的默认集成之一,以springcache的缓存实现类的形式操作非常方便,但是缺乏灵活性。如果想灵活使用,或者单独使用EhcacheOscache:最经典最简单的page 缓存3,distributed缓存memcached:distributed缓存as standard Redis:new generation distributed缓存,有取代memcached的趋势,3.1.基于slab内存模型的memcached经典一致哈希算法可以有效防止内存碎片的产生(但同时需要对启动参数进行估计,否则会浪费大量内存)。集群中的机器互不通信(相比Jbosscache等集群中的缓存速度更快。