1.Mysql 与 Oracle的区别
- mysql默认端口:3306,默认用户:root
- oracle默认端口:1521,默认用户:system
- mysql的安装卸载很简单,oracle很麻烦
- mysql默认是自动提交,可以修改为手动提交
- oracle默认不自动提交,需要手动提交,需要在写
commit
指令或点击commit
按钮。 - mysql是repeatable read的隔离级别,而oracle是read commited的隔离级别;
2.mybatis缓存机制
一级缓存: 默认开启
一级缓存是SqlSession级别的缓存(默认是支持一级缓存,不需要再配置文件中配置一级缓存),当在同一个SqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据写到内存中,第二次查询不执行sql直接从内存中获取。
二级缓存:二级缓存是mapper级别的缓存,使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句去操作数据库,则第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。
Mybatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存。
3.Mybatis的执行流程
1、加载配置文件。需要加载的配置文件包括全局配置文件(mybatis-Config.xml)和SQL(Mapper.xml)映射文件,其中全局配置文件配置了Mybatis的运行环境信息(数据源、事务等),SQL映射文件中配置了与SQL执行相关的信息。
2、创建会话工厂。MyBatis通过读取配置文件的信息来构造出会话工厂(SqlSessionFactory)。
3、创建会话。拥有了会话工厂,MyBatis就可以通过它来创建会话对象(SqlSession)。会话对象是一个接口,该接口中包含了对数据库操作的增删改查方法。
4、创建执行器。因为会话对象本身不能直接操作数据库,所以它使用了一个叫做数据库执行器(Executor)的接口来帮它执行操作。
5、封装SQL对象。在这一步,执行器将待处理的SQL信息封装到一个对象中(MappedStatement),该对象包括SQL语句、输入参数映射信息(Java简单类型、HashMap或POJO)和输出结果映射信息(Java简单类型、HashMap或POJO)。
6、操作数据库。拥有了执行器和SQL信息封装对象就使用它们访问数据库了,最后再返回操作结果,结束流程。
4.resultType和resultMap的区别
MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。
5.什么是跨域?
由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题
同源策略即:同一协议,同一域名,同一端口号。当其中一个不满足时,我们的请求即会发生跨域问题。
6.怎么解决跨域?
JSONP和CORS
7.事务的隔离级别,什么是事务,事务的特点
read-uncommitted,(读未提交)
read-committed(读已提交)(oracle的默认隔离级别)
repeatable-read(重复读)(mysql的默认隔离级别)
set tx_isolation='serializable';串行化
什么是事务: 事务是保证数据的完整性要不一起成功要不一起失败,事务也就是会话中的一系列ddl和dml语句的操作(连接上数据库的用户就是一个会话)
事务的特点:原子性,一致性,持久行,隔离性
8.spring mvc执行流程
(1)用户发送请求至前端控制器DispatcherServlet。
(2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。
(3)、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(4)、DispatcherServlet调用HandlerAdapter处理器适配器。
(5)、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
(6)、Controller执行完成返回ModelAndView。
(7)andlerAdapter将controller执行结果ModelAndView返回给 DispatcherServlet。
9.RestController和Controller的区别
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
10,varchar和char的区别
区别一:定长和变长
varchar是有大就占用多大的内存,char是直接占用规定大小的内存
区别二:存储容量不同
char是255,varchar是65532
11.Mysql三种常见引擎的区别
Mysql常见的三中存储引擎为InnoDB、MyISAM、MEMORY。
区别:
特性 | InnoDB | MyISAM | MEMORY |
---|---|---|---|
事物安全 | 支持 | 不支持 | 不支持 |
对外建的支持 | 支持 | 不支持 | 不支持 |
存储限制 | 64TB | 有 | 有 |
空间使用 | 高 | 低 | 低 |
内存使用 | 高 | 低 | 高 |
插入数据的速度 | 低 | 高 | 高 |
12.bean的生命周期
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
- 销毁 Destructio
bean的作用域:
bean的作用域目前有五种:
singleton | 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范 围的默认值。 |
prototype | 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。 |
request | 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。 |
session | 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。 |
application | 限定一个Bean的作用域为ServletContext 的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。 |
13.redis的支持类型和应用场景
支持的数据类型:
string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。
使用场景:
1. 配合关系型数据库做高速缓存 ,缓存高频次访问的数据,降低数据库io, 分布式架构,做session共享
2. 可以持久化特定数据。利用zset类型可以存储排行榜 利用list的自然时间排序存储最新n个数据
14.如何拿到配置文件里面的数据
(未完成)
15.spring和spring mvc有什么区别
1.Spring是一个轻量级的控制反转 (IoC)和面向切面 (AOP)的容器框架。 Spring使你能够编写更干净、更可管理、并且更易于测试的代码。 SpringMVC是基于Spring功能之上添加的Web框架
16.spring boot 自动配置的原理是什么?
1.Spring Boot启动的时候首先加载主配置类,开启了自动配置的功能(@EnableAutoConfiguration)
@EnableAutoConfiguration 底层源码是:@Import(AutoConfigurationImportSelector.class)自动配置导入选择
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);是获取候选的配置,也就是获取所有配置。
getCandidateConfigurations//获取候选配置,核心方法
@AutoConfigurationPackage自动配置包