1.描述集群、负载均衡、分布式
集群(Cluster)
将一个应用程序,部署到多台服务器上面,然后在这些服务器的前面通过负载均衡服务器来择优选择哪一台服务器去执行;
负载均衡(Load Balance)
将服务器接收到的请求按照规则分发的过程,称为负载均衡
分布式概念
一个业务分拆多个子业务,部署在不同的服务器上。具有高度的内聚性和透明性。
2.Nginx负载均衡的规则有哪些
a)轮询(默认)
默认选项,当weight不指定时,各服务器weight相同, 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
b)weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
c)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题,实现session共享。如果后端服务器down掉,要手工处理。
3.详细描述什么是Spring?
1、Spring的核心是一个轻量级的容器。
2、Spring是实现IoC容器和非入侵性的框架。
3、Spring提供AOP概念的实现方式。
4、Spring提供对持久层、事物的支持。
5、Spring提供MVC Web框架的实现,并对一些常用的企业服务API提供一致的模型封装。
6、Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。
4.什么是Spring IOC?
即控制反转,不是什么技术,而是一种设计思想。
在Java开发中,ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
就是将创建对象的权力交给Spring容器,其实就是让Spring容器帮你创建对象,而你不需要在java代码中new对象了。
5.什么是Spring AOP?描述其应用场景
面向切面编程,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
场景一: 记录日志
场景二: 监控方法运行时间 (监控性能)
场景三: 权限控制
场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 )
场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )
6.AOP的通知有几个,分别是什么
1.前置通知(Before):在目标方法被调用之前调用通知功能;
2.后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
3.返回通知(After-returning ):在目标方法成功执行之后调用通知;
4.异常通知(After-throwing):在目标方法抛出异常后调用通知;
5.环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
7.描述Spring Bean的作用域?
1.singleton : bean在每个Spring ioc 容器中只有一个实例。
2.prototype:一个bean的定义可以有多个实例。
3.request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
4.session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
5.global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
8.Spring Bean 注入有几种方式?
Set方法注入;
构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
静态工厂注入;
实例工厂;
9.SpringBean 生命周期?
![深究Spring中Bean的生命周期](https://i-blog.csdnimg.cn/blog_migrate/028d4c44cf75da54dbaa6be0cd49380f.png)
1通过构造器或工厂方法创建 Bean 实例
2为 Bean 的属性设置值和对其他 Bean 的引用
3调用 Bean 的初始化方法
4Bean 可以使用了
5当容器关闭时 close(), 调用 Bean 的销毁方法
10.Spring框架中 用到了哪些设计模式?
工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
代理设计模式 : Spring AOP 功能的实现。
单例设计模式 : Spring 中的 Bean 默认都是单例的。
模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
11.描述Spring事务传播行为?
事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的事务如何传播。
12.描述Spring事务的隔离级别?
DEFAULT 使用数据库本身使用的隔离级别
READ_UNCOMMITTED 读未提交(脏读)最低的隔离级别,一切皆有可能。
READ_COMMITED 读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。
REPEATABLE_READ 可重复读,解决不可重复读的隔离级别,但还是有幻读风险。
SERIALIZEABLE 串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了
13.Spring事务传播行为 REQUIRED和REQUIRES_NEW区别
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。