MVC 将系统划分为模型、视图、控制器三层,降低耦合便于维护;DAO 层专司数据库访问,常用 Spring JDBC、Hibernate、MyBatis 等实现,编程模式统一。Spring MVC 以 DispatcherServlet 为前端控制器,先匹配 HandlerMapping 找到处理器,再由 HandlerAdapter 调用,返回 ModelAndView,交由 ViewResolver 解析视图并渲染,支持 HTML、JSON、PDF 等多种响应。常用注解包括 @RequestMapping(路径、方法、媒体类型等)、@RequestParam、@RequestBody、@PathVariable 等。拦截器实现 HandlerInterceptor 接口,分别在 preHandle、postHandle、afterCompletion 阶段介入,可在 WebMvcConfigurer 中注册。针对不同拦截需求:对 Controller 用拦截器,对所有请求(含静态资源)用 Filter,对 Bean 方法用 Spring AOP。

本文系统阐述了MyBatis的核心特性及使用要点,包括:与JPA 的映射方式、可移植性、日志与SQL优化差异;支持的参数类型、# 与 $ 的安全与灵活区别、XML 与 Mapper 接口的 namespace 绑定方式;一对多关联查询的嵌套查询与嵌套结果实现;分页方式的效率对比;一级、二级缓存机制及配置;以及 Cookie 与 Session 的存储位置、容量、安全性、适用场景;GET 与 POST 的语义、幂等性、参数传递差异;常见错误处理(400、乱码);Spring Boot 中定时任务的实现思路和 AOP 日志记录方案;简要介绍 JPA 规范及其实现。

Redis是基于内存的键值NoSQL数据库,常用于缓存、计数、排行榜、分布式锁和消息队列等高性能场景。提供字符串、哈希、列表、集合、有序集合及Streams等数据结构。单线程依靠IO复用和内存操作实现每秒10万+请求。持久化支持RDB、AOF和RDB‑AOF混合。高可用方式有Sentinel自动故障转移和Cluster分片。主从同步使用PSYNC实现全量和增量复制。内置多种过期删除和LRU、LFU等淘汰策略,并提供watch乐观锁、SET NX等分布式锁实现。

Redis Cluster 通过分片实现扩展,优势是突破单机内存、并发和流量瓶颈,实现负载均衡;劣势是批量/事务操作仅限同 slot 键、仅有单 DB、不支持多层复制。Hash 在键值对<512 且键值<64 字节时采用压缩列表(ziplist),否则使用散列表(dict)并通过渐进式 rehash 扩容。Zset 在元素≤128 且长度<64 字节时使用 ziplist,否则采用字典+跳跃表(skiplist)的复合结构,实现按成员和分值的高效查询。利用 Redis 可将 Session 令牌存入缓存,客户端持 cookie 实现分布式会话;通过 SETNX+expire(或 Lua 脚本)实现分布式锁,避免跨进程竞争。

MQ 的核心价值在于解耦、异步和削峰:通过中间层让模块不直接调用、把耗时或突发请求平滑处理。生产者‑消费者模型利用共享队列实现并发协作,常用 wait/notify、Lock‑Condition 或 BlockingQueue 实现。顺序消费需让同一业务标识的消息落在同一队列/分区:RabbitMQ 用多队列并固定消费者;Kafka 通过 key 定向同一 partition 并在消费者端使用单线程或分区内队列;RocketMQ 将同一标识路由到同一 MessageQueue。防止消息丢失:生产者使用事务或 confirm、持久化消息、消费者手动 ack;Kafka 通过 replication、acks=all、重试等配置保证。避免重复消费依赖业务幂等设计,如唯一键、全局 ID、Redis 标记等。处理失败时常设核心业务队列+死信队列,监控恢复后重新消费。推模式适合实时广播,拉模式适合按需获取。RabbitMQ 强调可靠性和实时性,适合金融等高严谨场景;Kafka 侧重高吞吐、流式大数据,适合数据管道。

CAP定理只能在一致性、可用性、分区容错三者中任选两项;高并发指大流量场景,系统设计需兼顾高性能、高可用和高扩展,常用纵向/横向扩展、分层架构、缓存、分库分表、限流、异步化等手段;分布式存储典型实现包括中心控制的HDFS、无中心计算的Ceph以及基于一致性哈希的Swift;分布式事务常用两阶段提交(2PC)和Try‑Confirm‑Cancel(TCC)方案,各有优势和局限。