关于java:Java面试题框架

34次阅读

共计 3639 个字符,预计需要花费 10 分钟才能阅读完成。

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, 该办法不会执行。

正文完
 0