Java
介绍一下 Spring Boot 整体的启动流程?
-
首先从main找到run()方法,在执行run()方法之前new一个SpringApplication对象
-
进入run()方法,创建应用监听器SpringApplicationRunListeners开始监听
-
然后加载SpringBoot配置环境(ConfigurableEnvironment),然后把配置环境(Environment)加入监听对象中
-
然后加载应用上下文(ConfigurableApplicationContext),当做run方法的返回对象
-
最后创建Spring容器,refreshContext(context),实现starter自动化配置和bean的实例化等工作。
说一说 Spring MVC 整体的执行流程?
流程图步骤详解:
-
发送请求:用户发送的所有请求都会到前端控制器DispatcherServlet
-
请求查找Handler:DispatcherServlet收到请求会调用HandlerMapping(处理器映射器)查找Handler
-
返回Handler:处理器映射器根据url返回具体的处理器,生成HandlerExecutionChain对象,其中包含了目标Handler和若干拦截器(可能没有)
-
请求调用Handler:DispatcherServlet通过Handler寻找匹配到HandlerAdapter
-
执行Handler:HandlerAdapter调用Handler
-
返回结果:Handler执行完成,返回一个ModelAndView对象
-
返回结果给DispatcherServlet:HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet
-
如果Handler返回的View是逻辑视图名称而不是真正的View对象,DispatcherServlet调用resolveViewName方法在配置的所有视图解析器(ViewResolver)中,寻找合适的,最终通过ViewResolver将逻辑视图名解析成真正的View对象
-
ViewResolver通过调用createView方法尝试将视图名解析成View,如果无法解析会返回Null(注: 如果ViewResolver是派生自AbstractCachingViewResolver则在调用createView方法前会先尝试根据viewName和Iocale从缓存中查找对应的视图对象)
-
DispatcherServlet调用View的render方法进行渲染视图 (即将模型数据填充至request域)
-
DispatcherServlet响应用户
MySQL
MySQL 索引的机制,类型有哪些?
MySQL可以按照四个角度来分类索引。
-
按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
-
按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
-
按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
-
按「字段个数」分类:单列索引、联合索引。
接下来,按照这些角度来说说各类索引的特点。
按数据结构分类
从数据结构的角度来看,MySQL 常见索引有 B+Tree 索引、HASH 索引、Full-Text 索引。
每一种存储引擎支持的索引类型不一定相同,我在表中总结了 MySQL 常见的存储引擎 InnoDB、MyISAM 和 Memory 分别支持的索引类型。
InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。
在创建表时,InnoDB 存储引擎会根据不同的场景选择不同的列作为索引:
-
如果有主键,默认会