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

请描述你如何设计并实现一个系统,用于统计每个接口在每分钟内的调用次数?

后端开发性能优化系统设计方案权衡JavaRedis

考察说明

考查候选人对实时计数统计的系统设计能力,包括数据结构、并发处理、时间窗口管理和数据存储方案。

回答思路

  1. 【回答框架 1】核心是选择合适的计数数据结构与时间窗口。可用时间戳除以60取整作为分钟标识,配合 ConcurrentHashMap 或 Redis 的 Hash/INCR 实现,Key 为接口标识加分钟时间戳,Value 为计数。
  2. 【回答框架 2】在单机高并发下,使用 LongAdder 或 AtomicLong 进行原子累加,避免锁竞争;若跨多实例,需要将计数写至 Redis 或消息队列进行聚合。
  3. 【回答框架 3】需处理分钟边界的时间切换问题:采用缓存当前分钟计数并在分钟切换时异步落库,保证不丢数据。同时要设定过期清理策略,避免内存泄漏。
  4. 【回答框架 4】考虑精确性:若要求完全准确,需保证计数操作与时间获取的一致性,但通常接受微小偏差;若要求高可用,可采样统计并说明误差范围。
  5. 【回答框架 5】最终方案应包含存储设计:将分钟级统计结果写入时序数据库或关系表,便于后续查询与报表;并预留接口查询实时与历史统计数据。
  6. 【关键点 1】使用分钟级时间戳作为聚合并行键,确保相同分钟计数落在同一桶。
  7. 【关键点 2】并发场景下优先采用原子累加器或 Redis 的 INCR 命令,避免加锁。
  8. 【关键点 3】分钟切换时需处理瞬时并发写入:可先将计数缓存,切换后异步持久化。
  9. 【关键点 4】统计仅需近似精确时,可采用采样或预聚合,降低存储开销。
  10. 【易错点 1】忽略跨天或跨时区的分钟边界处理,导致统计错位。
  11. 【易错点 2】使用全局锁或同步阻塞会降低接口吞吐量,应避免。
  12. 【易错点 3】长时间不清理过期分钟数据会造成内存泄漏,需设置定期清理任务。