面试题答案
一键面试1. 布隆过滤器(Bloom Filter)
- 原理:布隆过滤器是一个很长的二进制向量和一系列随机映射函数。当一个元素加入集合时,通过多个哈希函数将这个元素映射到向量中的不同位置,并将其置为1。查询时,元素通过相同的哈希函数映射到相应位置,若这些位置不全为1,则该元素一定不存在;若全为1,则大概率存在(存在误判)。
- 优点:空间效率和查询时间都远远超过一般的算法,能快速判断一个数据是否存在,防止大量不存在的数据直接穿透到数据库。
- 缺点:存在一定误判率,误判的数据会依然穿透到数据库。
2. 缓存空值
- 原理:当查询数据库发现数据不存在时,仍然在缓存中设置一个键值对,值可以是一个特殊标记(如
null
或特定字符串),并设置较短的过期时间。下次再查询同样的数据时,缓存命中,直接返回空值,避免查询数据库。 - 优点:实现简单,能有效防止缓存穿透。
- 缺点:会额外占用缓存空间,短时间内大量无效数据可能导致缓存空间被大量占用,且设置的过期时间较难把控,设置过短可能导致依然有穿透风险,设置过长则会导致长时间占用缓存空间。
3. 接口层校验
- 原理:在系统接口层对输入进行校验,对于明显不合理或不符合规则的数据直接返回,不进行后续的缓存和数据库查询。例如,对于某些有固定范围的ID,不在范围内的直接返回错误提示。
- 优点:可以在最外层就拦截无效请求,减轻缓存和数据库压力,实现相对简单。
- 缺点:只能拦截部分已知规则的无效数据,对于复杂多变的无效数据拦截能力有限。