每天五个java相关面试题(8)--spring篇
首先呢,假设有从事前端开发的大神或者准备从事前端开发的小伙伴无意看到我这篇博客看到这段文字欢迎加我的QQ:【 845415745 】。即将走入社会的菜鸟大学生有关于前端开发的职业问题想请教或者一起探讨一下,谢谢谢谢。
今天依然不变的每日五个
1使用Spring框架的优点是什么?
答:
轻量: Spring 是轻量的,主要的版本号大约2MB。
控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖。而不是创建或查找依赖的对象们。
面向切面的编程(AOP): Spring支持面向切面的编程,而且把应用业务逻辑和系统服务分开。
容器: Spring 包括并管理应用中对象的生命周期和配置。
MVC框架: Spring的WEB框架是个精心设计的框架。是Web框架的一个非常好的替代品。
事务管理: Spring 提供一个持续的事务管理接口,能够扩展到上至本地事务下至全局事务(JTA)。
异常处理: Spring 提供方便的API把详细技术相关的异常(比方由JDBC。Hibernate or JDO抛出的)转化为一致的unchecked 异常。
2.说说AOP和IOC/DI的概念以及在spring中是怎样应用的?
答:
AOP,Aspect Oriented Program。面向(方面)切面的编程;
IOC,Invert Of Control。控制反转。
对象的实例由容器自己主动生成,
即用接口编程,在程序中不出现newkeyword,而是用接口来命名引用。
然后通过某种方式把接口的某个实现类的实例注入到引用里。从而实现接口与详细实现类的松耦合。
由容器控制程序之间的关系(通过XML配置),而非传统实现中的由程序代码直接操控,
依赖注入,是IOC的一个方面,是个通常的概念。它有多种解释。
这概念是说你不用创建对象。而仅仅须要描写叙述它怎样被创建。
你不在代码里直接组装你的组件和服务,可是要在配置文件中描写叙述哪些组件须要哪些服务。之后一个容器(IOC容器)负责把他们组装起来。简单说一下。IOC就是事实上就是依赖注入。(在一个Class对象中引用还有一个Class对象时。我们通常都是直接通过new contructor)。
控制权由应用代码中转到了外部容器,控制权的转移,是所谓的反转。
AOP方式非常相似filter。就是在程序正常的业务流中间像切面一样插入非常多其它须要执行的代码,
比方登录时候,在进入登录页面前写入日志,非经常常使用的,尤其是跟数据库有关的,或者跟支付有关的程序肯定会在每一
步前面插入日志。
面向方面的编程,即 AOP。是一种编程技术,它同意程序猿对横切关注点或横切典型的职责分界线的行为(比如日志和事务管理)进行模块化。
AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。
AOP Advice(AOP通知)分为:
前置通知 后置通知 异常通知 围绕通知
3:Spring的事物有几种方式?Spring框架的事务管理有哪些优点? 你更倾向用那种事务管理类型?谈谈spring事物的隔离级别和传播行为?
编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,可是难维护。
声明式事务管理:这意味着你能够将业务代码和事务管理分离,你仅仅需用注解和XML配置来管理事务。
它为不同的事务API 如 JTA,JDBC,Hibernate。JPA 和JDO。提供一个不变的编程模式。
它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如
它支持声明式事务管理。
它和Spring各种数据訪问抽象层非常好得集成。
大多数Spring框架的用户选择声明式事务管理,由于它相应用代码的影响最小,
因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理。
尽管比编程式事务管理(这样的方式同意你通过代码控制事务)少了一点灵活性。
事务的隔离级别:
数据库系统提供了4种事务隔离级别。在这4种隔离级别中。Serializable的隔离级别最高。Read Uncommitted的隔离级别最低。
· Read Uncommitted 读未提交数据;(会出现脏读)
· Read Committed 读已提交数据;
· Repeatable Read 可反复读;
事务的传播属性包括:
· Required业务方法须要在一个事务中执行,假设一个方法执行时已经处在一个事务中。那么增加到该事务。否则为自己创建一个新事务。 80%的方法用到该传播属性。
· Not-Supported· Requiresnew· Mandatoky· Supports· Never· Nested
4: 解释Spring框架中bean的生命周期及Spring支持的几种作用域。
答:
- Spring容器 从XML 文件中读取bean的定义,并实例化bean。
Spring依据bean的定义填充全部的属性。
- 假设bean实现了BeanNameAware 接口。Spring 传递bean 的ID 到 setBeanName方法。
- 假设Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
- 假设有不论什么与bean相关联的BeanPostProcessors。Spring会在postProcesserBeforeInitialization()方法内调用它们。
- 假设bean实现IntializingBean了,调用它的afterPropertySet方法,
- 假设bean声明了初始化方法。调用此初始化方法。
- 假设有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
- 假设bean实现了 DisposableBean,它将调用destroy()方法。
Spring框架支持下面五种bean的作用域:
singleton : bean在每一个Spring ioc 容器中仅仅有一个实例。
prototype:一个bean的定义能够有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义相应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义相应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
5:面向切面的原理
答:
面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能。
就是把那些不是核心业务应该处理的代码提取出来,进行封装成模块化.来处理那些附加的功能代码(如日志。事务。安全验证)我们把这个模块的作用理解为一个切面,告诉我们它是一个功能模块.我们能够把它看成一个切面.说白了就是我们写一个类。在这个类中写一些处理在核心业务中起到相同效果的方法.
我们还要了解两个keyword:
连接点(Joinpoint),简单的理解就是在切面模块中定义的方法.就是上面定义类中的方法.
切入点(Pointcut).就是连接点的集合,就是一组方法的集合了. 下面几个就比較理解了。目标对象就是要处理的核心业务了.代理就更easy理解了。让一个代理去完毕这个任务.
关于AOP编程可关注我关于代理的三篇博客:
Spring AOP 学习之静态代理
Spring AOP 学习之java JDK动态代理
Spring AOP 学习之cJlib动态代理
每天五个java相关面试题(8)--spring篇的更多相关文章
- 每天五个java相关面试题(7)--线程篇
首先关于线程能够先看我之前这篇博文熟悉一下线程生命周期的图示以及文字说明 好開始了: 1.java 中有几种方法能够实现一个线程? 答:有两种实现方法.各自是继承 Thread类与实现Runnable ...
- 每天五个java相关面试题(3)
1. Servlet的生命周期是什么? 答: 第一次请求: 构造方法->init() -> service() -> doGet()/doPost() 以后的请求:service() ...
- Java工程师笔试题整理[校招篇]
Java工程师笔试题整理[校招篇] 隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...
- Java精选面试题之Spring Boot 三十三问
Spring Boot Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一: Spring Boot.Spring MVC 和 ...
- 《手把手教你》系列基础篇(九十五)-java+ selenium自动化测试-框架之设计篇-java实现自定义日志输出(详解教程)
1.简介 前面宏哥一连几篇介绍如何通过开源jar包Log4j.jar.log4j2.jar和logback实现日志文件输出,Log4j和logback确实很强大,能生成三种日志文件,一种是保存到磁盘的 ...
- Java相关面试题总结+答案(五)
[异常] 74. throw 和 throws 的区别? throw 是真实抛出一个异常: throws 是声明可能会抛出一个异常. 75. final.finally.finalize 有什么区别? ...
- Java相关面试题总结+答案(九)
[MySQL] 164. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项. 第二范式:属性完全依赖于主键(满足第一范式的前提下),即任意一个字段只依赖 ...
- Java相关面试题总结
本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Clou ...
- Java相关面试题总结+答案(二)
[容器] 18. Java 容器都有哪些? 19. Collection 和 Collections 有什么区别? Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法, ...
随机推荐
- Zeppelin0.6.2+sparkR2.0.2环境搭建
0.序 先吐槽一下网上旧版本的Zeppelin和R的安装,让我折腾了几个小时. 不过最终还是调通了也不容易,其实我现在一点R都没有学呢,只是刚看了一节课,但是这个工具既然出现在了Spark中,我想它还 ...
- 【WPF】使用 XAML 的 Trigger 系统实现三态按钮
利用 WPF 的 Trigger 系统,也可以很简单的只使用xmal实现三态按钮.在Window或UserControl的资源中声明按钮的style并加入触发功能.使用的时候直接在button里复写s ...
- AI:狄拉克之海上的涟漪
延陵季子2011年 8月27日 19:02 借鉴英文原文:Ripples in the Dirac Sea 当他试着用一种轻松的口吻诉说一些事情时,我会明白,其实我们都明白,在他的心里绝对不是平 ...
- 【JSP】简单登陆界面
学生登陆查询系统 1 程序的主要功能及特点 实现一个登录界面的基本功能,具体要求: 登录界面login.jsp含有表单,用户能够输入用户名和密码,并提交表单给verify.jsp. Verify.js ...
- 【sqli-labs】 less25 GET- Error based -All you OR&AND belong to us -string single quote(GET型基于错误的去除了or和and的单引号注入)
加单引号 order by一下 http://localhost/sqli-labs-master/Less-25/?id=1' order by 1%23 order by 变成了der by 下面 ...
- MySQL--增删改查分页存储过程以及事务
添加和修改写在一起了 可以用id判断添加和修改 和事务在一起编码 可以让代码更严谨 在这里简单的说一下事务的四大特性 事务四大特性之原子性:原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都 ...
- crypto-js RC4和hash_hmac运用
遇到一个问题,前端需要加密,可能用到一些算法,推荐这个库:crypto-js, RC4是一个可逆的加密,看下用法: import CryptoJS from 'crypto-js'; const RC ...
- Asp.Net Core 自动适应Windows服务、Linux服务、手动启动时的内容路径的扩展方法
public static IWebHostBuilder UseContentRootAsEnv(this IWebHostBuilder hostBuilder) { bool IsWindows ...
- javaee字符文件的复制
package Zy; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWrit ...
- BZOJ 1688: [Usaco2005 Open]Disease Manangement 疾病管理 状压DP + 二进制 + 骚操作
#include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #defin ...