随笔分类 - 面试题
常见面试题,当备忘录查看
摘要:是的,Spring源码可以深入分析,Spring框架是一个庞大的生态系统,包含多个模块,每个模块都为不同的功能提供支持。以下是Spring的主要模块及其职责: 1. Core Container(核心容器) Spring的核心容器是Spring框架的基础,提供了依赖注入(DI)和面向切面编程(AOP
阅读全文
摘要:Spring循环依赖解决机制中引入了三级缓存,这是因为仅使用二级缓存无法灵活处理代理Bean的早期暴露需求。以下是为什么需要三级缓存的详细分析: 1. 二级缓存的局限性 二级缓存通常用于存储早期暴露的未完全初始化的Bean实例。但在AOP代理场景下,Bean可能需要在完全初始化之前暴露其代理对象,而
阅读全文
摘要:Spring通过三级缓存机制来解决单例Bean的Setter或字段注入类型的循环依赖问题。以下是Spring解决循环依赖的核心流程: 1. 三级缓存介绍 Spring容器为了解决循环依赖,维护了以下三个缓存: 一级缓存(singletonObjects):已完全初始化的单例Bean。 二级缓存(ea
阅读全文
摘要:在Spring中,循环依赖指的是两个或多个Bean之间相互依赖,形成了一个闭环。例如,Bean A依赖于Bean B,而Bean B又依赖于Bean A。这种情况如果处理不当,会导致在创建这些Bean时出现死锁或异常。 以下是一个简单的例子: @Component public class Bean
阅读全文
摘要:MySQL 插入一条 SQL 语句,redo log 记录的内容 在 MySQL 的 InnoDB 存储引擎中,redo log(重做日志)主要用来保证事务的持久性和崩溃恢复能力。redo log 记录的是对数据页的物理变更,而不是 SQL 语句本身。 当执行一条插入语句时,redo log 的记录
阅读全文
摘要:MySQL 在设计表(建表)时需要注意的要点 设计数据库表是 MySQL 开发中非常重要的一环。合理的表结构设计可以提升性能、减少存储开销,并提高维护性。以下是一些关键的注意事项: 1. 明确需求和数据建模 在建表前,应深入了解业务需求,完成详细的数据建模。 使用工具(如 ER 图)设计清晰的表结构
阅读全文
摘要:MySQL 三层 B+ 树能存多少数据? MySQL 的 B+ 树索引结构广泛用于存储引擎(如 InnoDB)中,用于实现高效的查询。B+ 树的高度和每一层的节点数量直接影响其存储能力。以下是计算三层 B+ 树能存储的数据量的过程。 B+ 树的存储结构概述 节点大小: 在 InnoDB 中,B+ 树
阅读全文
摘要:MySQL 事务的二阶段提交是什么? 二阶段提交(Two-Phase Commit, 2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性。MySQL 在存储引擎(如 InnoDB)和 Binlog(归档日志)之间使用二阶段提交来保证事务的一致性。 在
阅读全文
摘要:什么是数据库的逻辑外键? 逻辑外键是指通过业务逻辑在代码层面维护外键约束,而不是使用数据库中定义的物理外键。逻辑外键通常通过程序保证表之间的关联性和约束关系,例如在插入、更新或删除数据时,依靠应用程序的逻辑代码来校验关联关系。 数据库的物理外键 物理外键是通过数据库的外键约束机制(FOREIGN K
阅读全文
摘要:数据库的逻辑删除 逻辑删除是指通过标记的方式将数据标记为删除状态,而不直接从数据库中删除该数据。这通常通过在表中增加一个“删除标志”字段(例如 is_deleted 或 status)来实现。逻辑删除的数据通常在业务逻辑中被忽略,但在数据库中仍然存在。 逻辑删除的特点 保留数据:数据并未被物理删除,
阅读全文
摘要:MySQL 的查询优化器负责决定如何执行 SQL 查询,它会根据多个因素选择最优的执行计划。查询优化器的目标是选择一个成本最低、性能最优的执行计划,以便高效地处理查询。执行计划的选择是基于 MySQL 内部的统计信息和执行策略,下面是查询优化器选择执行计划的关键步骤和考虑因素: 1. 分析查询 查询
阅读全文
摘要:MySQL 中 InnoDB 存储引擎与 MyISAM 存储引擎是两种常见的存储引擎,它们在性能、事务支持、锁机制、数据完整性等方面存在一些显著的区别。以下是它们的主要区别: 1. 事务支持 InnoDB:支持事务,符合 ACID(原子性、一致性、隔离性、持久性)特性。事务管理通过 COMMIT、R
阅读全文
摘要:MySQL 数据库性能优化是提高数据库响应速度和处理能力的重要手段。性能优化可以从多个层面入手,涵盖数据库设计、查询优化、硬件资源优化、配置调整等方面。以下是 MySQL 数据库常见的性能优化方法: 1. 数据库设计优化 规范化与反规范化: 规范化:通过规范化表结构,可以消除数据冗余,避免数据不一致
阅读全文
摘要:数据库的“不停服迁移”指的是在不中断数据库服务的情况下,将数据库的数据从一个实例迁移到另一个实例,保证系统持续对外提供服务。这种迁移通常涉及数据的平滑过渡、最小化系统停机时间以及确保数据的一致性。实现不停服迁移的过程复杂,通常需要考虑以下几个方面: 实现不停服迁移的关键步骤 1. 准备迁移计划 评估
阅读全文
摘要:什么是 Write-Ahead Logging (WAL) 技术? Write-Ahead Logging (WAL) 是一种用于数据库系统的日志记录技术,它要求在对数据库进行任何修改之前,所有的修改都必须先写入到日志文件中。这样做的目的是为了保证事务的持久性和一致性,确保即使数据库发生崩溃或意外关
阅读全文
摘要:在 MySQL 中,EXISTS 和 IN 都用于在子查询中进行条件判断,但它们的使用场景和性能有一定区别。以下是 EXISTS 和 IN 的主要区别: 1. 功能和用法 EXISTS: EXISTS 用于检查子查询是否返回至少一行数据。如果子查询返回至少一行数据,EXISTS 的条件为真,否则为假
阅读全文
摘要:虽然索引在数据库中可以显著提高查询性能,但在某些情况下,创建索引并不推荐。以下是几种不推荐为数据库建立索引的情况: 1. 数据量很小的表 原因:对于小型表,数据库可以快速扫描整个表,索引的创建反而会带来额外的存储和管理开销。在这种情况下,索引对性能的提升几乎可以忽略不计。 例子:一个只有几百行的表,
阅读全文
摘要:在MySQL中,VARCHAR(100) 和 VARCHAR(10) 都是变长字符串类型,但它们的主要区别在于能够存储的最大字符长度不同: 1. 存储长度 VARCHAR(100):表示该字段可以存储最多 100 个字符(根据字符集的不同,一个字符可能占用 1 到多个字节)。如果存储的数据长度小于
阅读全文
摘要:在MySQL中直接存储图片、音频、视频等大容量内容(通常称为BLOB数据)通常不被推荐,主要原因包括以下几点: 1. 性能问题 存储效率:存储大容量文件(如图片、音频、视频等)会大幅增加数据库的存储负担。每次查询或插入时,处理这些大容量数据会消耗大量的I/O资源,可能导致数据库性能下降。 数据库负担
阅读全文
摘要:在数据库中,游标(Cursor)是一个数据库对象,用于逐行处理查询结果集。游标使得程序可以在查询结果中按顺序访问每一行数据,并对每一行进行操作。通常,游标用于需要逐行处理查询结果的场景,例如在存储过程中逐条处理数据。 游标的特点: 逐行处理:游标允许你按顺序逐行处理查询结果集,而不像普通的SQL查询
阅读全文