以下是对上述内容的归纳总结整理,分为几个主要技术领域:Spring、MySQL、Spring Cloud 和 Elasticsearch (ES),以清晰简洁的方式呈现核心概念和要点,方便理解和记忆。
一、Spring 框架核心概念
- Spring 容器:本质上是一个
HashMap
,以 Bean 的名称(或自定义名称)为 key,Bean 实例为 value,管理对象的生命周期。 - 前置处理器与后置处理器:
- 前置处理器:为类的实例化准备条件。
- 后置处理器:根据条件实例化类,并将其放入容器(
HashMap
)中。
- Bean:容器管理的对象,与手动
new
出来的对象无本质区别。 - 依赖注入 (DI):从容器中根据名称获取类实例并使用。
- AOP (面向切面编程):在容器中 Bean 的方法执行的开始、进行、结束等时间点插入回调函数,实现横切关注点。
- 自定义 Starter:在 Spring Boot 应用启动时,将指定目录下的配置类加入前置处理器,等待实例化。
- 观察者模式:在实例中添加监听器,监听特定事件,可自行实现监听机制。
- 三级缓存:解决循环依赖问题(如 A 依赖 B,B 依赖 A),通过先创建 A 的引用给 B,再实例化 B,最后实例化 A。
- Spring 启动流程:通过断点调试 Spring Boot 启动流程可深入理解框架运作,甚至可以自己实现简化版 Spring。
核心思想:Spring 的核心就是容器管理、依赖注入和切面编程,细节可通过查阅文档解决,理解基本思想即可把握方向。
二、MySQL 数据库核心概念
- 基本存储单元 - Page:
- Page 是 MySQL 存储数据的基本结构,默认大小 16KB。
- 类似增强的
HashMap
,包含 key(主键)、value(真实数据行)以及前后 Page 的指针。
- B+ 树:
- 数据量增大时,Page 数量增加,查询效率降低,因此引入管理 Page 的 Page,形成层级结构,即 B+ 树。
- B+ 树是层层嵌套的
HashMap
,通过 key 快速定位数据。
- 双链表结构:
- Page 之间通过前后指针连接,方便范围查询(如
id > 10
),无需遍历树结构。
- Page 之间通过前后指针连接,方便范围查询(如
- 自增主键优势:便于按顺序追加数据到 Page,避免页内数据搬运和计算。
- 联合索引:
- 按指定字段(如 A、B、C)顺序构建索引,查询时需满足最左原则,否则索引失效。
- LIKE 查询与索引失效:
- 对于
varchar
字段,LIKE '%bc%'
因缺少最左匹配,无法利用 B+ 树索引。
- 对于
- 回表:
- 非主键索引不存储完整数据,仅存储主键值,查询时需通过主键回主索引树获取完整数据。
- 覆盖索引:
- 查询字段均在索引树中,无需回表,查询速度更快。
- 聚簇索引与非聚簇索引:
- 聚簇索引:存储数据的索引(如主键索引)。
- 非聚簇索引:不存储完整数据,仅存储主键引用的索引。
- 全文索引局限:
- MySQL 的 B+ 树不适合全文索引(需从左到右顺序匹配),而 Elasticsearch (ES) 通过分词和倒排索引更适合。
核心思想:MySQL 的核心是 B+ 树和 Page 结构的存储与索引机制,理解索引原理即可优化查询性能。
三、Spring Cloud 与微服务思想
- 微服务思想:一个服务专注于一件事,功能隔离,Spring Cloud 是这一思想的具体实现。
- Spring Cloud 技术组合:
- 消息队列 (MQ):异步通信,服务间解耦,发送方只管发,接收方只管收。
- RPC/HTTP 调用:同步通信,实时获取结果,RPC 协议更精简,适合后端服务间通信。
- 注册中心:管理服务的能力与地址,类似电话交换机,方便服务发现与调用。
- 限流:限制服务调用频率,保护系统资源。
- 熔断:服务不可用时返回默认结果或转移请求,防止雪崩效应。
- 容器与 K8s:支持水平扩容,自动化部署、负载均衡。
- 配置中心 (Apollo):支持动态配置更新,无需重启服务。
- 统一网关:统一入口,反向代理到后端服务,隐藏真实 IP,增强安全性。
- 单点登录 (SSO):一次登录,多系统共享登录态,使用缓存同步用户信息。
- 监控与预警 (Grafana/Prometheus):提供趋势分析、阈值监控和预警。
- 分布式 ID (雪花算法):解决并发环境下 ID 重复问题,保证唯一性。
核心思想:Spring Cloud 是一套微服务解决方案,整合多种技术,确保服务间的通信、扩展性和稳定性。
四、Elasticsearch (ES) 核心概念
- 搜索与检索区别:
- 搜索:精确查询,结果为有或无(如 MySQL 查询
id=10
)。 - 检索:模糊查询,结果具有概率性(如搜索“果子手机”,可能部分匹配)。
- 搜索:精确查询,结果为有或无(如 MySQL 查询
- 全文检索:对字段内容进行分词,匹配所有文档内容。
- 分词:ES 将文档内容和查询内容分词,用于匹配,支持中文插件(如 IK 分词)。
- 倒排索引:
- 结构:一张表,包含分词字段(唯一)和文档编码字段(记录分词出现的文档)。
- 生成:数据存储时分词、去重后插入倒排索引表,同时持久化原数据。
- 优势:无需扫描所有文档,通过分词查找相关文档编号,直接提取结果,类似
HashMap
的 key-value 查找。
- 相关度计算:
- 用于排序检索结果,文档包含查询分词越多,相关度越高,排名越靠前。
- 计算公式示例:相关度 = 文档匹配分词数 / 总分词数。
核心思想:ES 通过分词和倒排索引实现高效全文检索,适用于模糊匹配场景,相关度计算优化用户体验。
总结
以上内容涵盖了 Spring 框架、MySQL 数据库、Spring Cloud 微服务架构和 Elasticsearch 搜索引擎的核心概念和思想。通过类比(如 HashMap
、电话交换机等),复杂技术被拆解为简单易懂的原理。掌握这些基本思想,可以在实际开发中快速定位问题方向,并通过查阅文档解决具体细节问题。调试和实践(如 Spring Boot 启动流程断点调试)是深入理解的最佳方式。