后端岗位面试题更新 2026-08-05

请谈谈你在实际项目中是如何设计和实现 IP 黑名单拦截功能的?可以结合具体的技术栈和方案来说明。

后端开发安全意识系统设计技术选型Redis

考察说明

考查候选人对常见安全需求的实际实现能力,包括技术选型、数据结构和性能考量。

回答思路

  1. 【回答框架 1】IP 黑名单拦截的核心是维护一个黑名单集合,并在每个请求到达时检查来源 IP 是否命中。常见方案包括使用内存中的 Set(如 HashSet)或基于数据库查询。内存方案速度快,适合中小规模黑名单;数据库方案适合大规模和动态更新,但需要引入缓存以降低延迟。
  2. 【回答框架 2】实现时通常结合过滤器(Filter)或拦截器(Interceptor),在请求处理链路的最前端进行校验。对于命中黑名单的 IP,直接返回拒绝响应(如 403),不进入后续业务逻辑。
  3. 【回答框架 3】为提高查询效率,可使用布隆过滤器(Bloom Filter)作为前置判断,先快速排除大部分不在黑名单中的 IP,再对可能命中的 IP 进行精确校验。布隆过滤器存在误判率,但能显著节省内存。
  4. 【回答框架 4】动态更新黑名单时,需要考虑并发和一致性。可以使用 ConcurrentHashMap 或 ReadWriteLock 保证线程安全;若采用数据库存储,可定期同步或在更新后刷新缓存。
  5. 【回答框架 5】在分布式场景下,可以使用 Redis 的 Set 结构存储黑名单,利用其原子操作和过期时间(TTL)实现集中管理和自动过期,适合多实例部署的 Web 服务。
  6. 【关键点 1】技术选型需权衡:内存集合适合静态中小规模,Redis 适合分布式动态场景,布隆过滤器可优化空间。
  7. 【关键点 2】拦截位置应在请求处理入口,避免命中黑名单的请求消耗业务资源。
  8. 【关键点 3】线程安全与并发更新是内存方案的关键,需使用 ConcurrentHashMap 或锁机制。
  9. 【关键点 4】在分布式系统中,Redis 的 Set 和 TTL 可实现统一管理和自动清理。
  10. 【关键点 5】布隆过滤器的误判率需与业务风险权衡,通常用于辅助精确校验。
  11. 【易错点 1】只使用精确匹配的 Set 在大规模黑名单下内存占用过高,需考虑压缩或布隆过滤器优化。
  12. 【易错点 2】直接查询数据库而未加缓存,可能在高并发时导致性能瓶颈。
  13. 【易错点 3】忽略并发问题会导致更新时数据不一致,需使用线程安全集合或加锁。