Spring
  1. Spring框架是什么?

    答:Spring是轻量级的面向切面和控制反转的框架。初代版本为2002年发布的interface21,Spring框架是为了解决企业级应用开发的复杂性的出现的,它可以帮助开发人员管理对象之间的关系。能实现模块与模块之间、类与类之间的解耦合,Spring是一个大杂烩,它集成其他许多框架,使其他框架能与spring结合搭配使用

  2. Spring常用的注解有哪些?

    答:

    1、@Controller

    在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务bai处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

    @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

    (1)在SpringMVC 的配置文件中定义MyController 的bean 对象。

    (2)在SpringMVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

    2、@RequestMapping

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    3、@Resource和@Autowired

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

    4、@ModelAttribute和 @SessionAttributes

    代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

    @SessionAttributes即将值放到session作用域中,写在class上面。

    具体示例参见下面:使用 @ModelAttribute 和 @SessionAttributes 传递和保存数据

    5、@PathVariable

    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。

    6、@requestParam

    @requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

    7、@ResponseBody

    作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。

    使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

    8、@Component

    相当于通用的注解,当不知道一些类归到哪个层时使用,如果有WEB开发架构中固定的层则使用更加语义化的注解@Repository注解于DAO层、@Service注解于Service层、@Controller 注解于Controller层

  3. Spring框架有哪些好处?

    答:Spring能有效地组织你的中间层对象,为模块之间降低耦合。还包括轻量级,面向切面,控制反转,都是Spring的好处

  4. Spring由哪些主要模块组成?

    答:

  5. Spring IOC容器是什么?

    答:IOC容器意味着将对象交给IOC容器接管,由这样一个容器帮助我们管理对象,而不是传统的由开发人员管理对象。IOC可以帮助我们注入属性给对象,需要的时候给我们。

  6. Spring IOC有哪些好处?

    答:降低模块与模块之间的耦合,降低类与类之间的耦合。让开发人员不再做重复的对象创建赋值等繁琐的操作,而是需要用到时由IOC容器创建好自己传递过来

  7. BeanFactory和ApplicationContext有什么区别?

    答:

    BeanFactory:

    是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;

    ApplicationContext:

    应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;

    1. 国际化(MessageSource)

    2. 访问资源,如URL和文件(ResourceLoader)

    3. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

    4. 消息发送、响应机制(ApplicationEventPublisher)

    5. AOP(拦截器)

    两者装载bean的区别

    BeanFactory:

    BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化;

    ApplicationContext:

    ApplicationContext在启动的时候就把所有的Bean全部实例化了。它还可以为Bean配置lazy-init=true来让Bean延迟实例化;

    我们该用BeanFactory还是ApplicationContext

    延迟实例化的优点:(BeanFactory

    应用启动的时候占用资源很少;对资源要求较高的应用,比较有优势;

    不延迟实例化的优点: (ApplicationContext

    1. 所有的Bean在启动的时候都加载,系统运行的速度快;

    2. 在启动的时候所有的Bean都加载了,我们就能在系统启动的时候,尽早的发现系统中的配置问题

    3. 建议web应用,在启动的时候就把所有的Bean都加载了。(把费时的操作放到系统启动中完成)

  8. Spring的依赖注入是什么?

    答:主动寻找依赖属性,通过set方法或者构造函数等方式注入到对象内部。

  9. Spring的依赖注入有几种方式?

    答:构造器注入,setter注入,接口注入

    依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参

    数就是要注入的对象。

    优点:

    接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。

    缺点:

    侵入行太强,不建议使用。

  10. Spring Bean支持哪几种作用域?

    答:singlet单例,prototype多例,request HTTP请求,session会话,session-global全局会话

  11. Spring Bean生命周期是怎样的?

    答:

    Spring Bean生命周期

  12. Spring Bean为什么默认是单例的?

    答:

    1、如果是多例会参数较大的性能消耗,体现在创建对象,回收对象的过程。

    2、单例的话自始至终都只有一个对象,Spring创建好后就放入了缓存,需要使用时可以快速获取。

  13. Spring Bean是线程安全的吗?

    答:当Bean的作用域范围是singlet时线程是不安全的,因为所有的线程都会共享这一个实例,必然存在资源竞争,为prototype时线程安全。

  14. Spring怎么注入Java集合类型?

    答:使用标签或者标签进行进入

    <bean name="list" class="cn.itcast.injection.CollectionBean">
    <!-- List 注入 -->
    <property name="list">
    <list>
    <value>tom</value>
    <value>tom</value>
    <ref bean="user3"/>
    </list>
    </property>
    </bean>
  15. Spring自动装配是指什么?

    答:自动装配就是让应用程序上下文为你找出依赖项的过程。说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性!

  16. Spring自动装配有哪些方式?

    答:大体上有两种方式,xml方式和注解方式。xml方式在bean标签中加入属性autowire="",值可以选择byName、byType、constructor,需要在类中为需要注入的属性提供setter方法。注解方式@Autowire,先根据byType寻找bean,如果找到数量大于1再根据byName寻找、@Resource根据byType注入、@Qualifier("beanName")指定beanName注入

  17. Spring自动装配有什么局限性?

    答:

    • 重写: 你仍需用 和 配置来定义依赖,意味着总要重写自动装配。

    • 基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

    • 模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

  18. Spring AOP是什么?

    答:将对业务操作重复的操作封装为模块,通过动态代理的方式注入到方法中。

  19. Spring AOP有什么作用?

    答:

    Authentication 权限

    Caching 缓存

    Context passing 内容传递

    Error handling 错误处理

    Lazy loading 懒加载

    Debugging  调试

    logging, tracing, profiling and monitoring 记录跟踪 优化 校准

    Performance optimization 性能优化

    Persistence  持久化

    Resource pooling 资源池

    Synchronization 同步

    Transactions 事务

  20. Spring AOP有哪些实现方式?

    答:JDK动态代理和cglib,spring根据被代理类的类型采用适合的方式进行实现啊,如果是接口就采用JDK动态代理,如果是类就采用cglib方式。

  21. Spring AOP和AspectJ AOP有什么区别?

    Spring AOP AspectJ
    在纯 Java 中实现 使用 Java 编程语言的扩展实现
    不需要单独的编译过程 除非设置 LTW,否则需要 AspectJ 编译器 (ajc)
    只能使用运行时织入 运行时织入不可用。支持编译时、编译后和加载时织入
    功能不强-仅支持方法级编织 更强大 - 可以编织字段、方法、构造函数、静态初始值设定项、最终类/方法等…。
    只能在由 Spring 容器管理的 bean 上实现 可以在所有域对象上实现
    仅支持方法执行切入点 支持所有切入点
    代理是由目标对象创建的, 并且切面应用在这些代理上 在执行应用程序之前 (在运行时) 前, 各方面直接在代码中进行织入
    比 AspectJ 慢多了 更好的性能
    易于学习和应用 相对于 Spring AOP 来说更复杂
  22. Spring支持哪些事务管理类型?

    答:

    • 编程式事务管理,在代码中显式调用开启事务、提交事务、回滚事务的相关方法
    • 声明式事务管理,底层是建立在 AOP 的基础之上。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
  23. Spring框架用了哪些设计模式?

    答:

    1、代理模式:在AOP和remoting中被用的比较多

    2、单例模式:在spring配置文件中定义的bean默认为单例模式

    3、模板方法模式:解决代码重复问题

    父类定义骨架(共同方法的实现,调用哪些方法及顺序),某些特定方法由子类实现(父类是空方法,子类继承后再重写)

    4、前端控制器模式:spring提供了DispatcherServlet来对请求进行分发

    5、依赖注入模式:贯穿于BeanFactory和ApplicationContext接口的核心理念

    6、工厂模式:

    (1)简单工厂:

    实现方式:BeanFactory根据传入一个唯一的标识来获得bean对象,由工厂类根据传入的参数动态决定应该创建哪一个产品类

    实现原理:

    bean容器的启动阶段:读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中。

    容器中bean的实例化阶段:主要通过反射或者CGLIB对bean进行实例化

    (2)工厂方法:

    实现方式:FactoryBean接口

    实现原理:实现了FactoryBean接口的bean是一类叫做factory的bean,特点是spring会在使用getBean()调用获得该bean时,自动调用该bean的getObject()方法。返回的是这个bean.getObject()方法的返回值。

    典型例子:spring与mybatis的结合:

    //最终返回的是SqlSessionFactoryBean.getObject()的返回值

    7、适配器模式

    实现方式:springmvc中的适配器HandlerAdapter

    实现过程:dispatcherServlet根据HandlerMapping返回的handler,向HandlerAdapter发起请求,处理handler。HandlerAdapter根据规则找到对应的Handler并让其执行,执行完毕后Handler会向HandlerAdapter返回一个ModelAndView,最后由HandlerAdapter向dispatcherServlet返回一个ModelAndView

    8、装饰器模式:

    实现方式:类名中包含Wrapper,或者是Decorator,就是装饰器模式

    实质:动态地给一个对象添加一些额外的职责,比生成子类更灵活

    9、观察者模式

    实现方式:spring的事件驱动模型使用的是观察者模式,常用的地方就是listener的实现

    具体实现:事件机制的实现包括事件源、事件、事件监听器:

    ApplicationEvent抽象类【事件】

    ApplicationListener接口【事件监听器】

    ApplicationContext接口【事件源】

    10、策略模式

    实现方式:spring框架的资源访问Resource接口,是具体资源访问策略的抽象,也是所有资源访问类所实现的接口

  24. Spring MVC框架有什么用?

    答:SpringMvc是轻量级、松耦合的MVC框架,提供模型-视图-控制器层的不同支持。

  25. Spring MVC DispatcherServlet的工作流程?

    答:

    1. Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用它的 init() 方法进行初始化,在这个初始化过程中完成了:

    2. 对 web.xml 中初始化参数的加载;建立 WebApplicationContext (SpringMVC的IOC容器);进行组件的初始化;

    3. 客户端发出请求,由 Tomcat 接收到这个请求,如果匹配 DispatcherServlet 在 web.xml 中配置的映射路径,Tomcat 就将请求转交给 DispatcherServlet 处理;

    4. DispatcherServlet 从容器中取出所有 HandlerMapping 实例(每个实例对应一个 HandlerMapping 接口的实现类)并遍历,每个 HandlerMapping 会根据请求信息,通过自己实现类中的方式去找到处理该请求的 Handler (执行程序,如Controller中的方法),并且将这个 Handler 与一堆 HandlerInterceptor (拦截器) 封装成一个 HandlerExecutionChain 对象,一旦有一个 HandlerMapping 可以找到 Handler 则退出循环;(详情可以看[ Java]SpringMVC工作原理之二:HandlerMapping和HandlerAdpater 这篇文章)

    5. DispatcherServlet 取出 HandlerAdapter 组件,根据已经找到的 Handler,再从所有 HandlerAdapter 中找到可以处理该 Handler 的 HandlerAdapter 对象;

    6. 执行 HandlerExecutionChain 中所有拦截器的 preHandler() 方法,然后再利用 HandlerAdapter 执行 Handler ,执行完成得到 ModelAndView,再依次调用拦截器的 postHandler() 方法;

    7. 利用 ViewResolver 将 ModelAndView 或是 Exception(可解析成 ModelAndView)解析成 View,然后 View 会调用 render() 方法再根据 ModelAndView 中的数据渲染出页面;

    8. 最后再依次调用拦截器的 afterCompletion() 方法,这一次请求就结束了。

Java开发工程师最新面试题库系列——Spring部分(附答案)的更多相关文章

  1. 【转】2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题

    腾讯面试(WEB高级应用开发工程师<PHP>)非答案啊!!! 开始正题之前,容博主啰嗦两句吧,呵呵.(你也可跳过直接到红色字体看题!) 腾讯一直是我很敬重的企业,尽管小企鹅在战略上饱受争议 ...

  2. 2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题 [转]

    笔试(45 minute):(本来是四张纸,被我弄丢了一张!无伤大雅,难度级别不会有出入) 注意:由于时间紧迫和水平有限,难免有不足或错误,请指证,虚心学习! [PHP] 写出PHP中至少5个全局变量 ...

  3. 阿里巴巴-OS事业群-OS手机事业部-系统服务部门招聘Java开发工程师,有意者请进来

    我是阿里巴巴-OS事业群-OS手机事业部-系统服务部的开发工程师,正在招聘Java开发工程师. 以下是职位描述: 岗位名称:Java开发工程师 招聘人数:5人 生效日期:2014-03-12 结束日期 ...

  4. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  5. Java开发工程师学习路线

    贴一个比较出名的Java开发工程师学习路线图 好好学习提升中 这个貌似也不是特别全,算法,设计模式,架构好像都没有

  6. 作为一名Java开发工程师需要掌握的专业技能

    在学习Java编程完之后,学员们面临的就是就业问题.作为一名Java开发工程师,企业在招聘的时候,也是有一定的标准的. 为了帮助大家更好的找到适合自己的工作,在这里分享了作为一名Java开发工程师需要 ...

  7. 简历编写技巧-java开发工程师简历实战

    看到一遍简历编写的文章 想到也快找工作了 早晚能够用上 现在摘录如下 640?wx_fmt=jpeg 工欲善其事,必先利其器,这是自古以来的道理.所以如果想找到一份好的工作,一定要先整理一份好的简历. ...

  8. 天下代码一大抄,整个案例的搬是什么鬼!疑似冒充蚂蚁金服高级Java开发工程师?你大爷

    写在开始 上班前的第一件事,就是码云看看有什么消息,回复下网友的问题.如果看到喜欢的项目会点进去瞅瞅,然后就开始一天的工作. 然而,这一天的工作并不开心,一个今日热门项目让自己很恼火,一开始感觉并没有 ...

  9. 1+X Web前端开发(中级)理论考试样题(附答案)

    传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每小题2分,共30小题,共 60 分) 1.在Boo ...

  10. php面试题汇总二(基础篇附答案)

    介绍一些php常见面试题及答案,都是平时面试的时候经常会遇到的,小伙伴们仔细了解下吧.接着上一篇php面试题汇总一(基础篇附答案) 1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义 ...

随机推荐

  1. elasticsearch-PHP第一天

    遇到很大的问题就是,给边做边找原因,看官方文档,全英文看不懂.只能慢慢一步一步去做.   性子太急,真的不行,跨越性太大,卡一个小时多,才发现,连安装都没搞明白.   首先需要一个JAVA环境,上百度 ...

  2. CGAL

    一.interface http://jamesgregson.blogspot.com.au/2012/05/example-code-for-building.html

  3. Vs2012 中使用itoa

    自己在写程序的时候经常用到保存大量的图片,从而对其编号,所以要把整型转换成字符型. 通常自己定义string,而字符使用char[],把整形转换成char类型,然后和string类型相加,但是在VS2 ...

  4. BZOJ1083 繁忙的都市

    Description 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造.城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口 ...

  5. adb出现unkown host advices 错误

    今日在Windows DOS窗口中输入adb命令,如adb devices,adb shell等后,会出现如下错误: adb server is out of date.  killing... AD ...

  6. 异步队列 Deferred

    异步队列 Deferred 背景: 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe ...

  7. 【3D数学基础】三维空间折射向量计算

    问题:在三维空间中,已知折射率 e .入射角 L 和法线 N. 要求:计算出折射向量 T. 其中: L. N 和 T 都为单位向量. 如图片所示,下面所有的公式都看着这张图片来求解的: 首先,我们必须 ...

  8. Unittest框架+ddt数据驱动+HTMLTestRunner+sendmail(自动发送测试报告)+git+Jenkins

    本次写的是针对有代码基础的,没基础建议先去学基础,以下所有描述内容都是我已经在公司项目实践成功的!仅供参考 整体思路: 1.接口自动化用的是Python中unittest框架 2.所有的测试数据用例存 ...

  9. Ubuntu安装Gogs服务

    花了半天的时间把阿里云的centos 换成了ubuntu 14.04 lts ,原因是因为我想安装个gogs git服务,但是centos的glibc版本太低,折腾了半天没有成功. 迁移Ghost数据 ...

  10. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...