54 归档分页
370 留言互动
4 核心专题

最近更新

Java 2023-03-01

事务

事务是原子性、一致性、隔离性、持久性的组合,可分为扁平、带保存点、链、嵌套和分布式等类型。InnoDB 通过 undo/redo 日志、Buffer Pool、行锁、MVCC 与 Next‑Key Lock 实现 ACID,默认使用 REPEATABLE READ(等同于 SERIALIZABLE)解决脏读、不可重复读和幻读。MySQL 不原生支持嵌套事务,可用保存点模拟回滚。

面经 阅读全文
Java 2023-03-01

锁是数据库并发控制的核心,以MySQL InnoDB 为例,主要包括共享锁(S)和排他锁(X),以及表级意向锁(IS、IX)用于多粒度锁定。行锁实现方式分为 Record Lock、Gap Lock 和 Next‑Key Lock,其中 Gap Lock 锁定记录间的间隙以防止幻读。InnoDB 通过在索引项上加锁实现行级锁,未使用索引时会退化为表锁。死锁指事务相互等待资源,常见 AB‑BA 场景。InnoDB 采用超时回滚和 wait‑for graph 检测循环来主动解决死锁,优先回滚 undo 最小的事务。由于采用位图管理,InnoDB 不存在锁升级问题。

面经 阅读全文
Java 2023-03-01

优化

MySQL优化涉及系统层面、表结构、索引和SQL语句等多个方面。查询时应合理使用单列或多列索引,避免LIKE %前置、OR失效,尽量用JOIN替代子查询。插入数据可通过禁用索引、唯一性检查、批量INSERT或LOAD DATA INFILE提升速度,InnoDB 还可关闭外键检查和自动提交。面对千万级大表,建议依次优化SQL/索引、增加缓存、实现读写分离、使用分区表、进行垂直或水平拆分。慢查询优化步骤为打开慢查询日志、分析日志并使用EXPLAIN 调整索引、结构或分页等。使用EXPLAIN 时重点关注type、key、key_len、rows、Extra,避免出现ALL、Using filesort、Using temporary 等低效情况。

面经 阅读全文
Java 2023-03-01

其他(数据库)

介绍了关系数据库的三大范式:1NF要求字段原子化,2NF消除非键属性对主键的部分依赖,3NF进一步消除传递依赖,满足3NF即可避免冗余。随后说明MySQL常用存储引擎InnoDB(事务、行锁、外键)和MyISAM(高插入/查询速度、无事务),以及其他引擎的基本特性。接着阐述redo log、undo log、binlog的作用:redo保障事务持久性,undo支持回滚和MVCC,binlog记录所有修改用于复制。进一步解释InnoDB的MVCC实现原理,包括隐藏列、undo版本链和ReadView。最后说明MySQL主从复制流程:主库写入binlog→从库读取并写入relay log→SQL线程重放,实现异步数据同步。

面经 阅读全文
Java 2023-03-01

Spring Boot

Spring Boot 是基于 Spring 的脚手架,遵循“约定优于配置”,能够快速搭建独立、准生产级项目。通过 Starter(Maven POM)一次声明即可引入所需依赖,简化包管理。项目入口类的 main 方法调用 SpringApplication.run,完成环境准备、容器创建、Banner 打印、监听器通知等启动流程。@EnableAutoConfiguration 结合 spring.factories 中的 AutoConfiguration 类实现自动装配,@Conditional 系列注解根据类、Bean、属性等条件决定 Bean 实例化。核心注解 @SpringBootApplication 包含自动配置、组件扫描等功能,使开发、部署效率大幅提升,并天然支持云平台集成。

面经 阅读全文
Java 2023-03-01

Spring

Spring核心是IoC和AOP,IoC通过DI由容器实现,容器分BeanFactory(延迟、轻量)和ApplicationContext(完整、预实例化)。Bean是POJO,由容器管理,可用@Component、@Service等注解声明,@Autowired/@Resource实现注入,@Scope定义单例、prototype、request、session等作用域,@PostConstruct/@PreDestroy控制生命周期。循环依赖通过单例的三级缓存(singletonFactories、earlySingletonObjects、singletonObjects)解决。@Autowired按类型注入,@Resource默认按名称注入。

面经 阅读全文