Spring面试复习整理
Spring
- Spring核心分为三方面:
控制反转(IoC):
就是将创建对象的权利交给框架处理/控制,不需要人为创建,有效降低代码的耦合度,降低了开发成本。
依赖注入(DI):
容器动态地将将某种依赖关系注入到组件中。
三种注入方式: Setter 方式注入(property)、构造方法注入(constructor-org)、注解注入。
注解: @Component、@Service、@Controller、@Resposity
面向切面编程(AOP);
好比将系统按照功能分类,每一个类别就是一个切面,针对不同的切面制定不同规则。
使用场景:日志系统、安全统一校验、拦截器。
优点:集中处理某一类问题,方便维护。降低各个模块的耦合度。
AspectJ 注解说明
@Before - 前置通知 :在连接点方法前调用。
@Around - 环绕通知:将覆盖原有方法,允许你通过反射调用原有方法。
@After - 后置通知:在连接点方法的调用。
@AfterReturning - 返回通知:在连接点方法执行并正常返回后调用,要求连接点方法在执行过程中没有发生异常。
@AfterThrowing - 异常通知:当连接点方法异常时调用。IoC和DI的关系
DI正是实现IoC的方法和手段。
@Component 和 @Bean有什么区别?
@Component作用于类,@Bean注解作用于方法。
Spring中bean的作用域有几种类型?
singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。
prototype:为每一个bean请求提供一个实例。
request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收
session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
global-session:全局作用域,global-session和Portlet应用相关。Spring 默认的是单例模式。
Spring注入方式有哪些?
Setter方法注入、构造方法注入、注解注入、静态工厂注入、实例工厂注入。
如何在 Spring 中操作数据库
可以使用 Spring 提供的 JdbcTemplate 对象,JdbcTemplate 类提供了很多便利的方法比如是数据库数据转变成基本数据类型或对象,执行自定义的 SQL 语句,提供了自定义的数据错误处理。
Spring 有几种实现事务的方式?
编程式事务和声明式事务。
Spring 的 JdbcTemplate对象和 JDBC有什么区别?
Spring 的 JdbcTemplate 是对 JDBC API 的封装,提供更多的功能和操作。
JdbcTemplate 拥有:JdbcTemplate 是线程安全的。
实例化操作比较简单,仅需要传递 DataSource。
自动完成资源的创建和释放工作。
创建一次 JdbcTemplate ,到处可用,避免重复可用。Spring 事务隔离级别有哪些?
Spring的注入方式有 5 种。
- 底层数据库的设置隔离级别。
- 已提交读:一个事务提交后才能被其他事务读取到。
- 未提交读:最低隔离级别,事务未提交之前,就可以被其他事务读取到。
- 可重复读:保证多次读取同一数据时,其值和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据
- 序列化:最高最可靠的隔离级别,能够防止脏读、不可重复读、幻读。
Spring中的 AOP 的底层实现原理是什么?
Spring AOP的底层实现原理就是动态代理。
Spring AOP的动态代理有两种实现方式:对于接口使用的是 JDK 自带的动态代理实现的,非接口使用的是 CGLIB 来实现的Spring的工作原理
Spring是按照设计模式打造的,实现了工厂模式的工厂类,类名为BeanFactory,程序中通常使用其子类ApplicationContext,Spring的特点就是基于配置,在配置文件里通过元素创建实例对象。
BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。 其中ApplicationContext是BeanFactory的子接口。
Spring中的 Bean 是线程安全的吗?
Spring 中的 Bean 默认就是单例模式,并非是安全的,
要想保住 Bean 安全的举措就是设置 Bean 的作用域 Prototype(原型模式),每次请求都新建一个 Bean 。Spring 有哪些优点?
开源免费的热门框架,稳定性高。
方便集成各种优秀的框架。
降低了代码耦合性,方便程序测试,降低了 Java EE API 的使用难度。Spring 和 Structs 的区别
Spring
- 具有 IoC/DI、AOP 等通用能力,提高了研发效率。
- 提高了 J2EE 的服务。
- 能够与不同的技术结合使用,如 Hibernate、MyBatis等。
- Spring 拦截级别是方法级别。
Structs
- 基于 MVC 模式的 Web 层的处理。
- Struts拦截机制是类级别。
Spring 、SpringBoot、SpringCloud的区别是什么?
Spring : 见上面
SpringBoot:快速开发框架,可以迅速搭建一套基于 Spring 的应用程序
可以集成第三方模块,只需要简单配置,不需要任何 XML 配置文件,默认支持 JSON 格式的数据。
SpringCloud:整合了分布式应用常用模块的框架,使得开发者可以快速实现微服务应用。Spring 有哪几种 Java 设计模式?
- 工厂模式:通过 BeanFactory,ApplicationContext来创建 bean;
- 单例/原型模式:创建对象(bean)设置作用域。
- 观察者模式:Spring 可以定义监听器。
- 责任链模式:AOP拦截器的执行。
- 策略模式:接口 → JDK自身的动态代理,非接口 → CGLIB动态代理。
spring的优缺点
优点
有效的组织中间层对象
真正意义上实现针对接口编程
支持JDBC和对象关系映射 ORM
避免了关键字new造成的耦合问题
自身就是工厂类,无需在编写工厂类
不需要明确的引用关系的传递,直接通过配置完成
对主流的应用框架提供了集成支持
缺点
基于大量的xml文件,需要花费太多时间在配置上,拖慢了开发进度
Spring面试复习整理的更多相关文章
- Spring MVC面试复习整理
Spring MVC Spring MVC 是Spring Framework 提供的 web 组件 它的实现基于 MVC 的设计模式:Model(模型层).View(视图层).Controller( ...
- Spring 面试复习
1 singleton 和 prototype singleton作用域:当把一个Bean定义设置为singleton作用域是,Spring IoC容器中只会存在一个共享的Bean实例,并且所有对 ...
- [Spring面试] 问题整理
1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC:Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spri ...
- Java基础(面试复习整理)
基础知识和语法 Java语言初识 计算机语言发展 机器语言.汇编.C.C++.Java Java的诞生与发展 1995 JavaSE JavaME Android JavaEE 2006(大数据) H ...
- MyBatis 面试复习整理
MyBatis MyBatis 是一款优秀的ORM(对象关系映射)框架,可以通过对象和数据库之间的映射,将程序中的对象自动存储到数据库中.它内部封装了 JDBC ,使开发者只需要关注 SQL语句本身, ...
- Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务
前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...
- Spring JdbcTemplate用法整理
Spring JdbcTemplate用法整理: xml: <?xml version="1.0" encoding="UTF-8"?> <b ...
- php复习整理1--位运算符
前言 子曰:"温故而知新,可以为师矣." php复习整理系列即是对已掌握的知识的温习,对久不使用的知识点进行重新学习,从而对php基础知识的掌握更加牢固.当然因为是重新温习, ...
- spring面试问题与答案集锦
我收集了一些spring面试的问题,这些问题可能会在下一次技术面试中遇到.对于其他spring模块,我将单独分享面试问题和答案. 如果你能将在以前面试中碰到的,且你认为这些应该是一个有spring经验 ...
随机推荐
- [ASP.NET MVC]EntityFramework离线部署
根据项目需要可能会需要离线开发或者网速不好的情况下,很难配置EF,这种情况下就进行离线配置 (1)下载离线EF包: EF6.0的packages,百度网盘链接:https://pan.baidu.co ...
- Python代码阅读(第1篇):列表映射后的平均值
本篇阅读的代码实现了将列表进行映射,并求取映射后的平均值. 本篇阅读的代码片段来自于30-seconds-of-python. average_by def average_by(lst, fn=la ...
- Go语言 判断key是否在map里 if _, ok := map[key]; ok
if val, ok := map[key]; ok { //do something here } 如果key在map里 val 被赋值map[key] ok 是true 否则val得到相应类型的零 ...
- [源码解析] 深度学习流水线并行之PopeDream(1)--- Profile阶段
[源码解析] 深度学习流水线并行之PopeDream(1)--- Profile阶段 目录 [源码解析] 深度学习流水线并行之PopeDream(1)--- Profile阶段 0x00 摘要 0x0 ...
- MySQL-基础-2
MySQL数据库介绍 • MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. • MySQL的历 ...
- grpc服务发现与负载均衡
前言 在后台服务开发中,高可用性是构建中核心且重要的一环.服务发现(Service discovery)和负载均衡(Load Balance)一直都是我关注的话题.今天来谈一下我在实际中是如何理解及落 ...
- Zookeeper:进大厂不得不学的分布式协同利器!
大家好,我是冰河~~ 最近,有很多小伙伴让我更新一些Zookeeper的文章,正好也趁着清明假期把之前自己工作过程当中总结的Zookeeper知识点梳理了一番,打算写一个[精通Zookeeper系列] ...
- Django——实现最基础的评论功能(只有一级评论)
我对评论功能的理解: --------(1)数据库建一个评论的表 --------(2)前端建一个提交评论的form表单 --------(3)表单提交评论内容后写入到数据库评论表中 -------- ...
- Linux下scp命令
1.scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令. 2.scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版. ...
- GIS常用算法
目录 1.常用算法 1.1.计算两经纬度点之间的距离 1.2.根据已知线段以及到起点距离,求目标点坐标 1.3.已知点.线段,求垂足 1.4.线段上距离目标点最近的点 1.5.点缓冲 1.6.点和面关 ...