Java面试题--框架

Spring 的特性是什么?IOC和AOP的原理是什么?AOP的注解有哪些?

特性:方便解耦,简化开发;AOP编程的支持;声明事务的支持;方便程序的测试;方便集成各种优秀框架;降低Java EE API的使用难度;Java源码的经典学习范例
IOC和AOP原理:
IOC,控制反转是面向对象编程中的一种设计原则,基于java的反射机制以及工厂模式实现的,主要是协调各组件相互的依赖关系,同时大大提高了组件的可以移植性,用来减低代码之间的耦合度
原理:由容器控制程序之间的关系,而非传统现实中,由程序代码直接操控说白了就是由Spring容器来实现对象的统一管理工作,我们只需要关心 业务逻辑本身就可以了
AOP:面向切面编程,通过预编译方式和运行期动态实现程序功能的统一维护的一种技术,主要是使用动态代理实现的
原理:一是采用动态代理技术,利用截取消息的方式,对该消息进行封装,以取代原有的对象执行;二是采用静态织入的方法,需要引入特定的语法创建"方面",在编译期织入有关"方面"的代码,属于静态代理
AOP的注解:
@Before 前置通知,在方法执行之前执行
@After 后置通知,在方法执行之后执行
@AfterRunning 返回通知,在方法正常结束后,返回结果之后执行,可以访问方法的返回值
@AfterThrowing 异常通知,在方法抛出异常之后
@Around 环绕通知,围绕方法执行

SpringBoot自动装配的原理是什么?

@SpringBootApplication注解,SpringBoot的这个注解应用在哪个类上就说明这个类是主配置类
@SpringBootApplication是一个组合注解,是由@SpringBootConfiguration、@ComponentScan、@EnableAutoConfiguration三个注解组成的
@SpringBootConfiguration这个注解实际上就是代表了一个配置类,相当于一个beans.xml文件;
@ComponentScan的功能就是自动扫描并加载符合条件的组件或bean,最终将这些bean加载到容器中
@EnableAutoConfiguration代表开启SpringBoot的自动装配,原理是借助@Import的帮助,将符合自动配置条件的bean加载到IOC容器中,从而实现自动装配。

SpringBoot项目如何打包、部署、运行

SpringBoot的打包方式有很多种,最常见的war和jar,因为SpringBoot是前后端分离的项目,所以jar进行部署更合适
首先要在配置文件中配置端口,数据库连接等
在主启动类上加上extends SpringBootServletInitializer(想当于web.xml)并重写configure方法,这是为了打包springboot项目以及在web容器运行用的

Spring是如何控制事务的

spring控制事务有两种,一是编程式事务控制,二是声明式事务控制
编程式事务控制即通过编写代码的方式实现事务的控制
声明式事务控制
可以基于@Transactional注解的声明式事务控制,但使用@Transactional注解需要在配置文件中开启对这个注解的扫描
使用AOP的声明式事务控制,需要配置事务增强;配置事务增强方法的传播行为;配置切点和对应的事务通知
基于TransactionProxyFactoryBean代理的声明式事务控制

SpringMVC常用注解及作用

@Controller:标注一个控制器组件类,声明该类是SpringMVC的Controller
@RestController:该注解里面包含了Controller注解和ResponseBody注解
@Component:标注一个普通的Spring bean类
@Service: 标注是一个业务层组件类
@RequestMapping:该注解是建立请求的URL和处理方法之间的对应关系,可以作用在方法和类上
@Autowried:该注解可以对类成员、方法以及构造函数进行标注,完成自动装配的工作,该注解是根据类型进行自动装配的,通过该注解来消除 set,get方法。
@ResponseBody:该注解通常使用在控制层的方法上,用于将Controller的方法返回的对象,通过springmvc提供的接口转换为指定格式的数据,通过Response响应给客户端
@PathVariable该注解主要用来获取URL参数,支持Restfull风格的URL
@RequestParam注解是用来传递参数的,用于将请求参数数据映射到功能处理方法的参数上
@RequestBody该注解作用于获取请求体的内容

SpringMVC的工作流程

用户发送HTTP请求;
请求进入前端控制器DispatcherServlet
前端控制器调用处理器映射器HandlerMapping组件根据请求找映射的Controller处理
执行Controller处理方法,将返回结果给视图解析器ViewResolver组件
视图解析器根据Controller返回的结果将模型数据传递给前端
前端生成一个结果给客户端

Mybatis的工作原理是什么?Mybatis的缓存的理解

Mybatis的工作原理:
读取Mybatis配置文件
加载映射文件
构造会话工厂SqlSessionFactory
创建会话对象SqlSession完成和数据库的交互
定义Executor执行器接口来操作数据库
MappedStatement对象封装映射信息
输入参数映射
输出参数映射
Mybatis缓存的理解:
Mybatis有一级缓存和二级缓存,默认情况下一级缓存是开启,而且不能关闭
一级缓存是指SqlSession级别的缓存,当在同一个SqlSession中进行相同的SQL语句查询时,第二次以后的查询不会从数据库查询,二是直接从缓存中获取,一级缓存最大能缓存1024条SQL
二级缓存是指可以跨SqlSession的缓存,是mapper级别的缓存,对于mapper级别的缓存不同的session是可以共享的;二级缓存需要在全局配置中开启二级缓存配置,在对应的mapper.xml中配置cache节点,在对应的select查询节点中添加的useCache=true

Mybatis中#{}和${}的区别?

mybatis在处理#{},会将sql中的#{}替换为?,调用PreparedStatement的set方法来赋值;
mybatis在处理${}时,就是把${}替换成变量的值
#{}是预编译处理,${}是字符串替换
预编译语句的优势:一次编译、多次运行,省去了解析优化等过程;还能防止sql注入
使用#{}可以有效的防止SQL注入,提高系统安全性

SpringBoot的异常处理的五种方式?

自定义异常错误页面--默认的异常处理机制
使用@ExceptionHandler注解处理局部异常--单个使用该注解方法的Controller异常
使用@ControllerAdive+@ExceptionHandler注解处理全局异常--根据不用的异常对不同的异常进行处理
配置SimpleMappingExceptionResolver类处理异常--通过将类注入到Spring容器中实现全局范围处理异常
实现HandlerExceptionResolver接口处理异常

Spring中如何配置过滤器、拦截器

过滤器(Filter):
过滤器是Servlet中的一个组件,在Servlet之前执行,由于执行时机比Servlet要早,所以可以用来做一些过滤验证,
自定义过滤器先写一个类实现Filter
接口,重写init(),doFilter(),destroy()。
其中init()是完成Filter的初始化,
doFilter()是过滤逻辑的方法,
destroy()是销毁过滤器方法。
拦截器(Intercefptor):
拦截器是Spring框架定义的组件,Spring的处理器支持连接器应用,钱端控制器在调用处理器之前,如果有拦截器存在,就会先调用拦截器然后在调用处理器可以用来进行身份验证
自定义拦截器:先写一个类实现HandlerInterceptor接口,将拦截处理逻辑写在响应的接口方法里,重写preHandle(),postHandle(),afterCompletion(),
其中proHandle()在进入controller的方法执行之前,如果返回值是true,则继续使用拦截器,反之拦截器不再向后调用,请求处理完成;
postHandle()处理器方法已经执行完成,正准备将ModelAndView对象返回给前端控制器之前执行。可以在该方法里面,修改ModelAndView对象。
afterCompletion()最后执行的方法,需要当前的preHandle()的返回值为true是才会执行,适用于清理资源的,返回值为false,该方法不会执行。

你可能感兴趣的:(java,面试)