Redis 提供比 memcache 更丰富的数据结构(string、hash、list、set、zset)和原生集群支持,采用单线程 IO 多路复用模型,实现高效内存操作。键过期采用定期抽样+惰性删除,并可通过 maxmemory‑policy(noeviction、allkeys‑lru、volatile‑lru 等)进行内存淘汰。主从复制实现读写分离,Sentinel 通过 quorum、sdown/odown 机制监控并自动故障转移,保证高可用。持久化方面,RDB 快照速度快但可能丢失最近数据,AOF 通过日志追加提供更高安全性,两者结合可兼顾恢复速度和数据完整性。Redis‑Cluster 通过一致性哈希分片、gossip 协议和内置选举,实现多主多从横向扩展和自恢复,适用于大并发、跨节点的场景。

消息队列通过解耦、异步、削峰填谷实现分布式系统的高性能、高可用和最终一致性,常用模式有点对点和发布/订阅。选型时需关注顺序性、伸缩性、留存、容错、可靠性、时序、吞吐量和路由等指标。Kafka 采用分区+副本的发布/订阅架构,优势是高吞吐、低延迟和可扩展,缺点是全局有序和延时消息支持不足;适用于日志收集、实时分析等大流量场景。RabbitMQ 基于 AMQP,提供丰富的 Exchange 类型和可靠的消息路由,易用且支持定时消息,但学习成本高、性能不如 Kafka;适合业务流量中等且功能需求完整的场景。Pulsar 采用计算存储分离、BookKeeper 持久化,支持灵活扩容、跨地域复制和延时消息,兼容流式和队列消费;适用于云原生、多租户的大规模实时传输。RocketMQ 具备高可靠性、顺序队列和多协议支持,支持 PUSH/PULL 与集群/广播消费,适合金融等对可靠性要求极高的业务。

本文介绍了“数组中出现次数超过一半的数字”问题,即在长度为 n 的数组中找出出现次数超过 n/2 的元素,数据规模 n ≤ 50000,元素值在 1 至 10000 之间,且保证答案唯一。要求时间复杂度 O(n),空间复杂度 O(1)。示例包括 `[1,2,3,2,2,2,5,4,2]` → 2、`[3,3,3,3,2,2,2]` → 3、`[1]` → 1。文章提供的实现采用哈希表统计每个数字的出现次数,在遍历过程中一旦某个计数超过数组长度的一半即返回该数字。

Git 是分布式、支持离线操作且分支廉价的版本控制系统,SVN 为集中式、需联网且分支成本高。Git 的工作区、暂存区和本地仓库构成核心工作流,常用命令包括 init、clone、add、commit、push、pull、branch、merge、rebase、stash 等;Git‑SVN 让本地使用 Git 功能并同步到 SVN 服务器,常用操作有 git svn clone、fetch、rebase、dcommit 等。掌握这些基础概念和命令即可完成从 SVN 向 Git 的迁移、分支管理以及日常协作。

Explain是MySQL用于模拟优化器执行SQL并返回执行计划的工具,使用explain关键字可查看每张表的访问方式、使用的索引、估计行数及额外信息(type、key、key_len、ref、rows、Extra等),并支持explain extended(提供优化后SQL及filtered)和explain partitions(显示访问的分区)。文章详细解释了各列含义及不同type的含义(system/const、eq_ref、ref、range、index、ALL),以及possible_keys、key、key_len、ref、rows的作用。随后给出索引最佳实践:全值匹配优先、遵循最左前缀法则、避免在索引列上使用函数或类型转换、将日期函数改写为范围查询、合理创建普通或复合索引,以避免全表扫描、临时表或filesort。

本文系统梳理了 Java 面试常考点:GC 根与可达性、finalize 机制;字符编码演进及 UTF‑8 中文字节数;静态/动态代理实现与适用场景;异常体系结构;解析与分派区别;equals、hashCode 与 HashMap 关系;多态实现条件;对象序列化方式;反射基本用法;注解定义及元注解作用;泛型擦除原理;String 不可变性及常量池;Redis 五大数据结构及使用场景;缓存穿透、击穿、雪崩的防护方案;Kafka、RabbitMQ、RocketMQ 在性能、可靠性和可用性上的对比。