Java基础面试题

一、 Spring IOC:

定义: IOC 是 bean 对象的容器,管理 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系

Bean 的作用域:

singleton:单例模式

prototype:原型模式

request

session

global-session

Bean 的生命周期 (必会):

从定义开始,到实例化-->属性注入-->初始化-->最终在使用完毕后被销毁

spring IOC 注入的几种方式:

构造方法注入

属性注入

set 方法注入

Autowired 和 Resource 的区别:

Autowired

Resource

装配策略不同

根据类型进行装配

先根据名称,找不到再根据类型装配

属于 spring 注解

jdk 自带的注解

@Autowired 与@Qualifier 配合使用

二、 Spring AOP

主要功能:

日志记录(接口耗时用过),性能统计,安全控制(spring secutrity 权限),事务处理,异常处理等等。

动态代理与静态代理的区别:

静态代理:需要手动写 start 的

动态代理:

如果目标类实现了接口就用 JDK 生成代理类

如果目标类没有实现接口就用 cjlib 通过字节码生成代理类

三、 Spring JDBC

JDBC执行流程:

1、 注册驱动(加载数据库驱动)

2、获取连接对象(Connection)

3、执行SQL语句,返回执行结果

4、处理执行器(ResultSet)

5、释放资源

事务的四大特性:

原子性(A):即不可分割性,事务要么全部被执行,要么就全部不被执行。

一致性(C):事务必须使数据库从一个一致性状态变换到另一个一致性状态,即一个事务执行之前和执行之后都必须处于一致性状态

隔离性(I):即一个事务执行之前和执行之后都必须处于一致性状态。

持久性(D):事务一旦结束,数据就持久到数据库。

redo_log:解决持久性

undo_log:解决一致性和原子性

事务实现的方式:

声明式:

编程式:

事务的隔离级别:

1、读未提交:当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。这时就会产生脏读(读到别人没有提交的数据,造成回滚了)

脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。

2、读已提交:针对 update 或 delete 在事务处理期间,如果其他事务修改了相应的数据,那么同一个事务的多个 SELECT 语句可能返回不同的结果。在一个事务内,能看到别的事务提交的数据。出现不可重复读

3、可重复读:针对 insert是 MySQL 的默认隔离级别,它确保了一个事务中多个实例在并发读取数据的时候会读取到一样的数据;不过理论上,这会导致另一个棘手的问题:幻读 (通过加锁机制,但新加的数据没有上锁,就会出现幻读)

解决办法:InnoDB 存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决幻读。

幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。

4、可串行化:就是一个一个来,性能最慢

四、Spring MVC

spring MVC 执行流程

Spring Mvc的两个适配器

处理器适配器:(HandlerAdapter) (HttpRequestHandlerAdapter)

设计模式:责任链和适配器

客户端请求---> 前端控制器(DispatcherServlet)---> 处理器映射(HandlerMapper)---> 处理器适配器(HandlerAdapter)---> 控制器(Controller)---> 视图解析器(View Resolver) --->渲染视图---> 响应客户端

详细

  1. 用户向前端控制器 (DispatcherServlet) 发送请求
  2. 前端控制器 (DispatcherServlet) 接收到请求后调用处理映射器 (HandlerMapper)
  3. 处理器映射器 (HandlerMapper) 找到具体的处理器,生成处理器对象以及处理器拦截器,再一起返回给前端控制器
  4. 然后前端控制器调用处理器适配器
  5. 处理器适配器调用具体的处理器
  6. 处理器适配器 (HandlerAdapter)将处理器执行结果ModelAndView返回给前端控制器 (Controller)
  7. 然后前端控制器ModelAndView传给视图解析器解析View
  8. 前端控制器将视图解析器返回的View进行渲染,然后响应给用户

spring MVC 异常处理

@ExceptionHandler(统一异常)

@ControllerAdvice + @ExceptionHandler (统一返回)

定义拦截器实现了哪个接口:

Spring Boot

原生三大组件:

1、Listener (监听器)

2、Fliter (过滤器)

3、servlet (控制器)

spring Boot 优势:

约定大于配置

内置 tomcat

开箱即用

war 包和 jar 包的区别:

war 包是必须要通过 tomcat 发布的

jar 包里面就包含 tomcat

spring boot 常用的注解:

@SpringBootApplication、@Repository、@Service、@RestController、@ResponseBody、@Component、@ComponentScan、@Configuration、@Bean、@AutoWired 、@RequestMapping、@Resource

处理异常的注解:@ExceptionHandler

Spring Boot自动装载原理:

使用了 SPI 技术

启动注解:@SpringBootApplication 是复合注解

包含 @SpringBootConfiguration(是spring配置类)【包含@Bean注解的方式定义 Bean 方法 】

@EnableAutoConfiguration(启用自动配置类)【会根据应用程序的依赖和配置信息,自动配置适当的Bean和组件】

包含 AutoConfigurationImportSelector 类 (自动配置选择器)

里面有一个 SpringFactoriesLoader 的类,SpringFactoriesLoader 会扫描 SelectImport 里面的配置类,读取一个名为 spring.factories 的文件

【AutoConfigurationImportSelector类的selectImports方法,这个方法使用了springFactoriesLoader扫描META-INF下面的spring.factory文件 】

@ComponentScan(组件扫描)【以查找和加载Spring组件。默认情况下,它会扫描注解所在类的包及其子包下的所有组件,并将它们注册到Spring容器中】三个核心注解

Resource 与 AutoWired 的区别:

AutoWired: 默认按类型进行装配,默认情况下必须要求依赖对象必须存在

Resource:默认按照名称装配,名称可以通过 name 属性进行指定

JAVA Web

原生三大组件:

1、Listener (监听器)

2、Fliter (过滤器)

3、servlet (控制器)

Cookie与Session的区别:

cookie

session

存储位置

保存在浏览器 (客户端)

保存在服务器

存储数据大小

限制大小,约为4KB

不限制大小

生命周期

可以主动设置生命周期 ,过期会自动删除

可以设置,生命周期有限制(有间隔,一般为30min)

数据类型

字符串类型

object

安全性

cookie不安全 (存储在浏览器的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值