一、Redis面试题

基础应用

  1. Redis支持哪些数据类型?

    • String、Hash、List、Set、Sorted Set、Bitmaps、HyperLogLog、GEO。
  2. Redis持久化机制有哪些?区别是什么?

    • RDB:快照方式,生成全量数据文件(.rdb),适合备份。
    • AOF:日志方式,记录写操作命令,数据更完整(可配置同步策略)。
    • 混合持久化(Redis 4.0+):RDB + AOF,启动时优先加载RDB提高恢复速度。
  3. Redis的过期策略和内存淘汰策略是什么?

    • 过期策略:惰性删除(访问时检查)+ 定期删除(后台扫描过期键)。
    • 内存淘汰策略:LRU、LFU、随机淘汰、根据TTL淘汰等(通过maxmemory-policy配置)。
  4. 如何解决缓存雪崩、击穿、穿透?

    • 雪崩:设置不同过期时间,使用Redis集群。
    • 击穿:加互斥锁(setNX)或使用volatile-lru策略。
    • 穿透:布隆过滤器(Bloom Filter)过滤不存在的Key。

集群与高可用

  1. Redis主从复制的工作原理?

    • 主节点执行bgsave生成RDB文件并发送给从节点,从节点加载RDB后持续同步增量命令。
  2. 哨兵(Sentinel)的作用?

    • 监控主从节点状态,自动故障转移(提升从节点为主节点),通知客户端新主节点地址。
  3. Redis Cluster的分片机制?

    • 采用哈希槽(Hash Slot),共16384个槽,每个节点负责部分槽,客户端通过CRC16计算Key所属槽。
  4. Redis事务支持哪些命令?是否保证原子性?

    • 使用MULTI/EXEC包裹命令,支持批量操作,但不保证原子性(出错时不回滚)。

二、消息队列(MQ)面试题

基础概念

  1. 常见的MQ有哪些?各自特点?

    • Kafka:高吞吐量,分布式,适合日志、实时流处理。
    • RabbitMQ:支持多种协议(AMQP),可靠性高,适合金融场景。
    • RocketMQ:阿里巴巴开源,支持事务消息,分布式事务。
  2. 消息队列的核心作用?

    • 解耦、异步处理、流量削峰、日志处理。
  3. 如何保证消息不丢失?

    • 生产端:同步发送并确认ACK。
    • MQ端:持久化消息(刷盘策略)、开启主从复制。
    • 消费端:手动ACK,失败重试。
  4. 如何保证消息顺序性?

    • Kafka:将消息路由到同一分区,消费者单线程消费。
    • RabbitMQ:使用channel级别的事务或单消费者模式。

集群与高级特性

  1. Kafka的分区(Partition)和副本(Replica)机制?

    • 分区提高并行度,副本保证高可用,每个分区有一个Leader和多个Follower。
  2. RabbitMQ的镜像队列(Mirror Queue)作用?

    • 将队列复制到多个节点,确保节点故障时消息不丢失。
  3. RocketMQ的分布式事务如何实现?

    • 二阶段提交:发送Prepared消息→执行本地事务→根据结果Commit/回滚消息。
  4. 消费者如何处理重复消息?

    • 幂等性设计(唯一ID、状态机),或使用数据库INSERT IGNORE等。

三、Minio面试题

基础应用

  1. Minio的核心功能是什么?

    • 对象存储,兼容S3协议,支持高并发、分布式部署。
  2. Minio的存储策略(Erasure Code)?

    • 纠删码技术,将数据分成N份,允许M份损坏仍可恢复(如默认4+4模式)。
  3. Minio的访问策略(Policy)如何配置?

    • 通过mc命令或API设置Bucket策略(如只读、读写、公共访问)。
  4. Minio与云存储(如AWS S3)的区别?

    • Minio是私有云对象存储,支持本地部署,功能与S3兼容。

集群与扩展

  1. Minio分布式集群的部署方式?

    • 至少4台服务器,每台配置多个磁盘,通过minio server启动,自动形成分布式存储池。
  2. Minio的高可用性如何保障?

    • 纠删码+分布式部署,单个节点故障不影响数据访问。
  3. Minio如何与其他系统集成?

    • 通过Java/Go SDK、REST API,或与Kubernetes结合实现容器化部署。

四、Nginx面试题

基础配置

  1. Nginx的主要用途?

    • 反向代理、负载均衡、静态资源服务器、HTTP缓存、API网关。
  2. Nginx的负载均衡算法有哪些?

    • 轮询、加权轮询、IP哈希、最少连接、URL哈希。
  3. 如何配置动静分离?

    • 将静态资源(HTML/CSS/JS)直接由Nginx处理,动态请求转发给后端服务器。
  4. Nginx的缓存策略如何配置?

    • 使用proxy_cache模块,设置缓存Key、过期时间、缓存区大小。

集群与高级特性

  1. Nginx的热部署如何实现?

    • 通过nginx -s reload平滑重启,不中断服务。
  2. Nginx的upstream模块如何配置高可用?

    • 配置多个后端服务器,使用keepalive保持长连接,结合fail_timeout实现故障转移。
  3. Nginx如何防御DDoS攻击?

    • 使用limit_conn限制连接数,limit_req限制请求频率,或集成WAF。
  4. Nginx与Lua的结合用途?

    • 通过ngx_lua模块实现动态逻辑(如A/B测试、流量控制)。

五、综合设计题

  1. 设计一个高可用的Redis集群方案?

    • 主从复制 + 哨兵 + 集群分片(Redis Cluster),部署多个节点并监控。
  2. 如何设计一个可靠的消息队列系统?

    • 持久化、ACK机制、重试策略、死信队列(DLX)、幂等性消费。
  3. 如何扩展Minio集群的存储容量?

    • 添加新节点并格式化磁盘,Minio自动将数据均衡到新节点。
  4. 如何优化Nginx的性能?

    • 使用sendfile零拷贝、压缩(gzip)、减少上下文切换、开启HTTP/2。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐