目录:

  • 为什么要使用 spring?
  • 解释一下什么是 aop?
  • 解释一下什么是 ioc?
  • spring 有哪些主要模块?
  • spring 常用的注入方式有哪些?
  • spring 中的 bean 是线程安全的吗?
  • spring 支持几种 bean 的作用域?
  • spring 自动装配 bean 有哪些方式?
  • spring 事务实现方式有哪些?
  • 说一下 spring 的事务隔离?
  • 说一下 spring mvc 运行流程?
  • spring mvc 有哪些组件?
  • @RequestMapping 的作用是什么?
  • @Autowired 的作用是什么?
  • 什么是 spring boot?
  • 为什么要用 spring boot?
  • spring boot 核心配置文件是什么?
  • spring boot 配置文件有哪几种类型?它们有什么区别?
  • jpa 和 hibernate 有什么区别?
  • 什么是 spring cloud?
  • SpringCloud与Dubbo的比较
  • Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两个的区别。
  • spring cloud 断路器的作用是什么?
  • spring cloud 的核心组件有哪些?

为什么要使用 spring?

也就是说使用Spring有什么好处:

  • 方便解耦,简化开发:Spring通过IOC容器解耦对象之间的依赖关系;如A对象初始化时需要依赖B对象,在使用Spring前每次初始化A对象时都需要传入B对象,如果哪一天A对象的初始化改了,那么引用A对象的所有地方都需要改,这样会非常麻烦。而将对象交给Spring管理的话,就只需要修改对应的配置文件就可以了。
  • AOP、声明事务、单元测试等等支持
  • 方便集成各种优秀的框架:Spring不排斥各种优秀的框架,相反它还可以降级框架使用的难度,如Struts、Hibernate、Mybatis等等。
  • 非常经典的学习范例:Spring的源码设计精妙、结构清晰、匠心独具,灵活应用了各种设计模式,如果你想提高自己的Java水平,那么学习Spring的源码会给你带来意想不到的效果。
  • 等等。

解释一下什么是 aop?

面向切面编程,这种编程思想是在程序中找到一个切面,并将具有通用功能的业务流程抽取并单独封装;如日志的打印、事务、统计接口响应时间等等。

解释一下什么是 ioc?

IOC:控制反转,将程序中的对象交给Spring维护,而不是开发者维护。其核心思想就是资源不由使用资源的双方管理而是交由第三方平台管理

这样带来了很多好处:

  • 资源集中管理,实现资源的可配和易管理
  • 降低了使用资源双方的依赖程序,也就是耦合度

IOC思想的具体实现方法便是DI(依赖注入),也就是说依赖关系不是预定好的,而是由容器在运行期间定将依赖关系注入到组件中

spring 有哪些主要模块?

Spring Code:核心类库,主要实现IOC功能,并且其它功能都依赖此库。

AOP:提供了AOP功能,并提供常用的拦截器订等等。

ORM:提供长银的ORM框架辅助支持,如Hibernate、ibatis,它本身并不实现ORM,而是对ORM框架进行封装和管理。

DAO:提供JDBC支持,允许JDBC使用Spring资源,并统一管理事务。

WEB:提供常用Web框架,如Struts、JSF。

Context:提供Bean访问方式。

MVC:Spring实现了一套亲轻量级的MVC实现,相对于Struts来说Spring MVC更加简洁。

spring 常用的注入方式有哪些?

构造方法注入:可结合lombok使用,简化对象的声明。

setter方法注入:通过对象set方法注入属性。

基于注解注入:@Component、@Controller、@Service、@Repository这几种方式目前仅是语意上的差别。

spring 中的 bean 是线程安全的吗?

这取决于你的bean是否是有状态的;

默认情况下Spring的bean都是单例的,所以就一般业务开发中bean都是无状态的(比如DAO层),所以是线程安全的。

但你的bean是有状态的话(比如你要在bean中存储某些数据),就需要将bean的scope改成prototype,让每次请求都相当于重新new一个bean,这样就是线程安全的了。

spring 支持几种 bean 的作用域?

singleton:单例,也是默认的作用域。

prototype:原型,每次创建一个新的bean。

request:每次Http请求创建一个新的bean。

session:一个会话享用一个bean。

global-session:所有会话共享一个bean。

spring 自动装配 bean 有哪些方式?

1、隐式的bean发现机制或自动注入

  • @AutoWired:根据类型注入bean。
  • @Autowired + @Qualifier:若有相同类型,根据名称注入。
  • @Resources:Java中根据名称注入的注解。

2、java config或xml:@Bean或xml

spring 事务实现方式有哪些?

编程式事务:通过在代码中调用commit、rollback等事务管理相关方法。

声明式事务:通过在xml中声明那些函数需要启用事务。

基于注解的声明式事务:@Transaction(rollbackFor = xxxException.class)

说一下 spring 的事务隔离?

1、事务隔离的几个概念

  • 脏读:事务修改数据后还未提交,此时另一个事务也访问了这个数据,此时读出来的数据较脏读。
  • 不可重复读:一个事务内读了多次数据(具有两份数据),但其它事务在第一个事务的两份数据读取之间(读第一份数据和第二份数据之间的时间差内)修改了数据,此时第一个事务的前后两次结果会不一致,这样的情况称为不可重复读。
  • 幻读:当事务不独立执行时发生的一种现象,当第一个事务涉及到全表修改,第二个事务插入一行新数据,此时便会发生操作第一个事务的用户发现表中还有未修改的数据,就像发生幻觉一样。

2、Spring支持五种事务设置:

  • DEFAULT:默认,由DBA指定。
  • READ_UNCOMMITTED:会出现脏读、不可重复读、幻读(隔离级别最低,但并发性能最高)。
  • READ_COMMINTTED:不出现不可重复读、幻读(锁定正在读取的行)。
  • REPEATABLE_READ:会出现幻读(锁定所读取的所有行)。
  • SERIALIZABLE:包子所有情况不会发生(锁表)。

说一下 spring mvc 运行流程?

1、用户请求首先会经过DispatchServlet,DispatchServlet接收到请求后会将请求信息交给处理映射器(HandlerMapping)。

2、HandlerMapping会根据请求的url找到对应处理器(Handler),并返回一个执行链。

3、DispatchServlet拿到执行链后会调用处理适配器(HandlerAdapter),并调用相应的Handler处理,然后返回ModelAndView给DispatchServlet。

4、DispatchServlet将ModelAndView请求视图解析器(ViewReslover)解析,并返回具体的View。

5、DispatchServlet对View进行渲染视图。

6、DispatchServlet将页面响应给用户。

参考:https://www.cnblogs.com/gxc6/p/9544563.html

spring mvc 有哪些组件?

  • DispatcherServlet:前端控制器;用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
  • HandlerMapping:处理器映射器;HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  • Handler:处理器;Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
  • HandlAdapter:处理器适配器;通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
  • ViewResolver:视图解析器;View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
  • View:视图;springmvc框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

参考:https://www.cnblogs.com/gxc6/p/9544563.html

@RequestMapping 的作用是什么?

@RequestMapping用于表示Controller层的请求地址,它可以标注在类或方法上。

标注在类上:此类下所有的方法都具有标注的父路径。

标注在方法上:此方法的路径。

@RequestMapping属性:

  • value:访问路径值。
  • method:请求方式,有GET、POST、PUT、DELETE等等。
  • consumes、produces:分别表示请求和响应的数据格式,如application/json、text/html。
  • params、headers:表示请求中必须包含某参数或某请求头。

@Autowired 的作用是什么?

根据类型注入一个bean,还可以配合@Qualifier完成根据名称注入一个bean。

什么是 spring boot?

SpringBoot是Spring体系下的一个子项目,其主要目的适用于简化Spring项目搭建的过程,从而使开发人员不需要定义样板化的配置。

为什么要用 spring boot?

1、简化Spring项目搭建的过程,节省成本。

2、SpringBoot整合了各式的框架,降低了其它框架使用的成本

3、简化部署成本,内置Tomcat,可以把下面打成war包,通过java -jar一键部署。

4、简化监控成本,SpringBoot提供了actuator。

spring boot 核心配置文件是什么?

application和bootstrap。

application:主要用于SpringBoot项目的自动化配置。

bootstrap:使用SpringCloud时使用,bootstrap加载优先于application,主要用于加载额外的配置信息,如远端git配置。

spring boot 配置文件有哪几种类型?它们有什么区别?

properties、yml。

区别:书写各式不一样,properties需要配置的全称,而yml可用:号、空格这些标准来简化properties这种格式。

SpringData Jpa和Hibernate有什么区别?

1、SpringData Jpa是JPA数据访问的抽象,Hibernate是JPA的一个实现。

2、使用SpringData的话你可以使用Hibernate、Eclipse Link或其它任何实现了JPA的框架。

什么是 spring cloud?

SpringCloud是一个微服务框架,而微服务其实就是一种架构模式、架构风格,从字面意思来看就知道它提倡的是将单一应用程序划分成一组小的服务,每个服务都运行在自己的进程中。

服务之间采用轻量级的restful通信,每个服务都围绕着自己的业务进行构建,可以选择合适的语言、存储方式,这极大的增强了服务的灵活性

微服务的优缺点:

  • 优点:

    • 易理解:每个服务都足够内聚,这样的业务代码易理解。
    • 开发简单、效率高:一个服务可能就是专一的做一件事,开发简单、效率高。
    • 灵活性好:每个服务都可以使用不同的语言、存储方式、技术栈,开发或部署阶段都是独立的。
  • 缺点:
    • 运维成本高:不仅是开发人员处理分布式系统的复杂性运维人员也需要管理多个机器与服务。
    • 服务通信成本、数据一致性、系统测试集成、性能监控等等。

SpringCloud与Dubbo的比较:

背景:SpringCloud是Apache旗下的Spring体系下的微服务解决方案,Dubbo是阿里体系下的分布式服务治理框架。

服务的调用:SpringCloud通过轻量级的Rest API调用,Dubbo通过RPC远程调用

服务发现:SpringCloud使用Netflix下的Eureka作为服务发现,当然也可以用其它的服务发现,如ZK,但我们一般不会这样做;Dubbo使用第三方Zookeeper作为注册中心。

网关:SpringCloud使用Netflix下的Zuul,Dubbo需要使用其它第三方技术整合等等。

Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两个的区别。

著名CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(分区容错性)。

由于分区容错性在分布式系统中是必须要保证的,因此我们只能在A和C之间进行权衡;

1、Eureka保证AP,Zookeeper保证CP

2、由于作为注册中心可用性的需求要高于一致性,所以eureka貌似要比zookeeper更合理一些。

spring cloud 断路器的作用是什么?

断路器类似于电路中的保险丝,当保险丝烧断时会短暂的断开供电,让整个电路处于安全。

SpringCloud断路器也是同理,它可以有效的保护服务,使服务链路不因为一个服务的问题导致整个服务的瘫痪;不仅如此,它还提供了优雅的降级和熔断机制,以及请求合并、请求缓存。

spring cloud 的核心组件有哪些?

  • 服务开发:Spring、SpringBoot、SpringMVC。
  • 服务配置:Netflix Archaius、SpringCloud Config、Alibaba Diamond。
  • 服务发现:Netflix Eureka、Zookeeper。
  • 负载均衡:Netflix Ribbon、Nginx。
  • 服务熔断:Netflix Hystrix。
  • 服务调用:Rest、RPC等等:
  • 服务接口调用:Netflix Feign。
  • 服务网关:Netflix Zuul。
  • 消息总线:SpringCloud Bus,可采用RabbitMQ、Kafka等等。

菜鸟刷面试题(四、Spring/Spring MVC/Spring Boot/Spring Cloud篇)的更多相关文章

  1. 菜鸟刷面试题(三、Redis篇)

    目录: redis是什么?都有哪些使用场景? redis有哪些功能? redis和memecache有什么区别? redis为什么是单线程的? 什么是缓存穿透?怎么解决? redis支持的数据类型有哪 ...

  2. 菜鸟刷面试题(二、RabbitMQ篇)

    目录: rabbitmq 的使用场景有哪些? rabbitmq 有哪些重要的角色? rabbitmq 有哪些重要的组件? rabbitmq 中 vhost 的作用是什么? rabbitmq 的消息是怎 ...

  3. 菜鸟刷面试题(一、Java基础篇)

    目录: JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什 ...

  4. 菜鸟刷面试题(五、Java容器篇)

    目录: java 容器都有哪些? Collection 和 Collections 有什么区别? List.Set.Map 之间的区别是什么? HashMap 和 Hashtable 有什么区别? 如 ...

  5. Spring - Sring MVC入门

    2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...

  6. 12.Spring——Web MVC框架

    1.Spring Web MVC 框架 2.Spring MVC Hello World 例子 1.Spring Web MVC 框架 Spring web         MVC 框架提供了模型-视 ...

  7. Spring Web MVC框架简介

    Web MVC framework框架 Spring Web MVC框架简介 Spring MVC的核心是`DispatcherServlet`,该类作用非常多,分发请求处理,配置处理器映射,处理视图 ...

  8. Spring Boot:Thymeleaf篇

    Spring Boot干货系列:(四)Thymeleaf篇http://www.cnblogs.com/zheting/p/6707037.html 前言 Web开发是我们平时开发中至关重要的,这里就 ...

  9. 菜鸟学习Spring Web MVC之二

    有文章从结构上详细讲解了Spring Web MVC,我个菜鸟就不引据来讲了.说说强悍的XP环境如何配置运行环境~~ 最后我配好的环境Tomcat.Spring Tool Suites.Maven目前 ...

随机推荐

  1. 最小路径算法(Dijkstra算法和Floyd算法)

    1.单源点的最短路径问题:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径. 我们用一个例子来具体说明迪杰斯特拉算法的流程. 定义源点为 0,dist[i]为源点 0 到顶点 i 的最短路径 ...

  2. php 开山篇

    由韩顺平老师讲解的 php课程体系 初级课程只能是静态页面开发,不能动态的使用,只是一个界面 学完之后脑海中 应该有的体系~

  3. 简单易学的机器学习算法——决策树之ID3算法

    一.决策树分类算法概述     决策树算法是从数据的属性(或者特征)出发,以属性作为基础,划分不同的类.例如对于如下数据集 (数据集) 其中,第一列和第二列为属性(特征),最后一列为类别标签,1表示是 ...

  4. eclipse maven 项目导出为 jar 包

    一个 maven 项目有很多依赖,所以最后打出的 jar 一般会很多,且比较大,打成 jar 包的步骤 (注意pom.xml文件中打包类型不能是war包): 1. 把 pom.xml 中依赖的库打成 ...

  5. MySQL的存储(一、连接数据库)

    准备工作: 确保安装MySql 安装PyMySQL库 连接数据库: 这里首先尝试连接下数据库,假设当前MySQL运行在本地,用户名为root,密码为123456,运行端口为3306. 通过PyMySQ ...

  6. 使用 webservice 实现 RPC 调用

    WebService 介绍 Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序.Web Service 技术, 能使得运行在不同机器上的不同应用无须 ...

  7. 一份详细的 Matplotlib入门指导

    hMatplotlib是最受欢迎的二维图形库,但有时我们很难做到得心应手的去使用. 如何更改图例上的标签名称? 如何设置刻度线? 如何将比例更改为对数? 如何在我的情节中添加注释和箭头? 如何在我的图 ...

  8. Mysql多实例数据库

    什么是Mysql的多实例? 简单的说,Mysql多实例就是一台服务器上同时开启多个不同的服务端口(如3306.3307)同时运行多个Mysql服务进程,这些服务进程通过不同socket监听不同的服务端 ...

  9. 这些C++常用内置函数你会几个??

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Regina520  新手注意:如果你C++学的不好,可以去拿我的C+ ...

  10. Socket无法通过防火墙的问题

    无论是配好端口还是例外的应用程序都不行 更改本地终结点为 socket.Bind()); IPAddress.Any 不要使用127.0.0.1 不要使用127.0.0.1 不要使用127.0.0.1