MVC 将应用拆分为模型、视图、控制器三层,降低耦合便于维护;DAO 层负责统一的数据访问,可使用 JDBC、Hibernate、MyBatis 等实现。Spring MVC 以 DispatcherServlet 为前端控制器,依据 HandlerMapping 找到处理器,再经 HandlerAdapter 调用,返回 ModelAndView,由 ViewResolver 解析视图并渲染,生成 HTML、JSON、图片等响应。常用注解包括 @RequestMapping(映射路径、方法、媒体类型等)、@RequestParam(绑定请求参数)、@RequestBody(读取请求体)、@PathVariable(绑定 URL 占位符)。拦截器实现 HandlerInterceptor,提供 preHandle、postHandle、afterCompletion 三阶段,可在 WebMvcConfigurer 中注册;对 Controller 使用拦截器,对所有请求使用 Filter,对 Bean 方法使用 Spring AOP 实现请求拦截。

MyBatis 为半自动 ORM,需手写 SQL,灵活但耦合度高;JPA 全自动,移植性好,日志更全。支持基本类型、Map、JavaBean;一对多使用 collection 通过嵌套查询或结果映射实现。# 预编译防注入,$ 直接拼接用于动态列。XML 通过 namespace 与 Mapper 接口绑定。分页插件开发快,手写 SQL 效率更高。缓存分为一级(SqlSession)和二级(全局)可配置。Cookie 存客户端、容量小且不安全;Session 存服务器、适合敏感数据。GET 参数在 URL、可缓存、非幂等;POST 放 body、无长度限制、非幂等。400 错误表示请求语义错误,乱码多因编码不一致。Spring Boot 用 ThreadPoolTaskScheduler 实现定时任务,日志可用 AOP 记录。JPA 为 O/R 映射标准,常用实现为 Hibernate。

Redis是一款基于内存的键值NoSQL数据库,常用于分布式缓存、热点数据存储、计数统计、分布式锁和消息队列等。它支持字符串、哈希、列表、集合、有序集合等核心数据结构,并提供Bitmap、HyperLogLog、Geo、Stream等扩展。单线程通过IO多路复用和内存操作实现高吞吐,持久化采用RDB、AOF及混合模式保障断电恢复。高可用方案有Sentinel和Cluster,主从同步使用PSYNC实现全量或增量复制。缓存淘汰策略包括LRU、LFU等,过期采用惰性和定期两种方式,解决穿透、击穿、雪崩等问题。

Redis Cluster 通过分片实现负载均衡,优势是突破单机内存、并发和流量瓶颈,劣势包括批量操作、事务、跨键分区受限,只支持单库且复制层级为一层。Hash 类型在键值对少且短时采用压缩列表(ziplist),否则使用字典(hashtable),并通过渐进式 REHASH 动态扩容/缩容。ZSet 同样在小规模时使用 ziplist,规模大时采用字典+跳表(skiplist)实现,提供 O(logN) 查找。利用 Redis 可将 Session 数据存储在共享缓存,实现跨节点的身份验证;通过 setnx/expire 或 SET NX PX 等原子命令配合超时与 Lua 脚本,可构建可靠的分布式锁。

MQ主要用于解耦、异步和削峰,通过生产者‑消费者模型实现。保证顺序消费需让同一业务键落在同一队列/分区;防止消息丢失则采用持久化、事务/confirm(RabbitMQ)或多副本、acks=all(Kafka)并在消费端手动 ack。避免重复消费靠业务幂等性、唯一 ID 或 offset 控制。失败消息可转入死信队列重试。推模式适合实时广播,拉模式适合按需获取。RabbitMQ侧重可靠性和实时性,Kafka侧重高吞吐和流式处理,两者在架构、确认机制、负载均衡等方面各有区别。

CAP原则指出分布式系统只能同时满足一致性、可用性、分区容错三者中的两项。高并发系统需在性能、可用、可扩展三目标下设计,指标包括响应时延、可用率、扩展率。采用纵向提升、横向无状态集群、分层分片;性能用缓存、分库分表、异步、限流等;可用性靠冗余、容错、熔断、灰度、监控;可扩展性强调分层业务拆分。分布式存储主流架构有HDFS、Ceph、Swift。分布式事务常用2PC和TCC实现跨节点原子性,有优缺点。