Tags : JavaEE,Spring,面试题发表时间: 2014-11-29 15:03:53

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
比如: 转自:Su的技术博客  原文地址:https://blog.verysu.com/article/119

这些Spring面试题是从尚硅谷http://www.atguigu.com的JavaEE面试题整理出来的,希望对你有帮助!

1. 开发中主要使用 Spring 的什么技术 ?
  ①. IOC 容器管理各层的组件
  ②. 使用 AOP 配置声明式事务
  ③. 整合其他框架.

2. 简述 AOP 和 IOC 概念
  AOP: Aspect Oriented Program, 面向(方面)切面的编程;Filter(过滤器)也是一种   AOP.  AOP  是一种新的方法论 ,  是对传统   OOP(Object-Oriented Programming, 面向对象编程) 的补充. AOP 的主要编程对像是切面(aspect), 而切面模块化横切关注点.可以举例通过事务说明.
  IOC: Invert Of Control, 控制反转. 也成为 DI(依赖注入)其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源.作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式.

3. 在 Spring 中如何配置 Bean ?
   Bean 的配置方式: 通过全类名 (反射)、 通过工厂方法 (静态工厂方法 & 实例工厂方法)、FactoryBean

4. IOC 容器对 Bean 的生命周期:
  ①. 通过构造器或工厂方法创建 Bean 实例
  ②. 为 Bean 的属性设置值和对其他 Bean 的引用
  ③. 将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization 方法
  ④. 调用 Bean 的初始化方法(init-method)
  ⑤. 将Bean实例传递给Bean后置处理器的postProcessAfterInitialization 方法
  ⑦. Bean 可以使用了
  ⑧. 当容器关闭时, 调用 Bean 的销毁方法(destroy-method)

5.说一下struts2-hibernate-Spring 的工作流程?

1). Struts2 负责显示页面和接受请求
  2). Spring 的 IOC 容器管理各个组件: 整合 Struts2,Hibernate 和 其他组件,AOP 完成声明式事务
  3). Hibernate 提供 DAO 操作.

6. Spring 如何整合 Struts2 ?

整合 Struts2, 即由 IOC 容器管理 Struts2 的 Action:
    > 安装 Spring 插件: 把 struts2-spring-plugin-2.2.1.jar 复制到
  当前 WEB 应用的 WEB-INF/lib 目录下
    > 在 Spring 的配置文件中配置 Struts2 的 Action 实例
    > 在 Struts 配置文件中配置 action,  但其 class 属性不再指向该Action 的实现类, 而是指向 Spring 容器中 Action 实例的 ID

7. Spring 如何整合 Hibernate
  整合  Hibernate,  即由  IOC  容器生成  SessionFactory  对象,  并使用Spring 的声明式事务
    > 利用 LocalSessionFactoryBean 工厂 Bean, 声明一个使用 XML 映射文件的 SessionFactory 实例.
    > 利用 HibernateTransactionManager 配置 Hibernate 的事务管理器

8. Spring MVC 比较 Struts2
  ①. Spring MVC 的入口是 Servlet, 而 Struts2 是 Filter
  ②. Spring MVC 会稍微比 Struts2 快些. Spring MVC 是基于方法设计, 而 Sturts2 是基于类, 每次发一次请求都会实例一个 Action.
  ③. Spring MVC 使用更加简洁, 开发效率 Spring MVC 确实比 struts2 高: 支持 JSR303, 处理 ajax 的请求更方便
  ④. Struts2 的 OGNL 表达式使页面的开发效率相比 Spring MVC 更高些.

9. Spring MVC 的运行流程
  ①. 在整个 Spring MVC 框架中, DispatcherServlet 处于核心位置,负责协调和组织不同组件以完成请求处理并返回响应的工作
  ②. SpringMVC 处理请求过程:
    >  若一个请求匹配  DispatcherServlet 的请求映射路径(在  web.xml 中指定), WEB 容器将该请求转交给 DispatcherServlet 处理
    > DispatcherServlet 接收到请求后, 将根据请求信息(包括 URL、 HTTP 方法、 请求头、 请求参数、 Cookie 等)及 HandlerMapping 的配置找到处理请求的处理器(Handler). 可将 HandlerMapping 看成路由控制器, 将 Handler 看成目标主机。
    > 当 DispatcherServlet 根据 HandlerMapping 得到对应当前请求的Handler 后,通过 HandlerAdapter 对 Handler 进行封装,再以统一的适配器接口调用 Handler。
    >  处 理 器 完 成 业 务 逻 辑 的 处 理 后 将 返 回 一 个   ModelAndView  给DispatcherServlet, ModelAndView 包含了视图逻辑名和模型数据信息
    > DispatcherServlet 借助 ViewResoler 完成逻辑视图名到真实视图对象的解析
    > 得到真实视图对象 View 后, DispatcherServlet 使用这个 View 对ModelAndView 中的模型数据进行视图渲染

10. 说出 Spring MVC 常用的 5 个注解:
  @RequestMapping 、 @PathVariable 、 @RequestParam 、 @RequestBoy 、@ResponseBody

11. 如何使用 SpringMVC 完成 JSON 操作:
  ①. 配置 MappingJacksonHttpMessageConverter
  ②. 使用 @RequestBody 注解或 ResponseEntity 作为返回值

12.比较 SpringSecurity 和 Shiro

相比 Spring Security, Shiro 在保持强大功能的同时, 使用简单性和灵活性
    > SpringSecurity: 即使是一个一个简单的请求,最少得经过它的 8 个Filter
    > SpringSecurity 必须在 Spring 的环境下使用
    > 初学 Spring Security, 曲线还是较大, 需要深入学习其源码和框架, 配置起来也较费力.

13.Shiro 的优点

> 简单的身份认证, 支持多种数据源
  > 对角色的简单的授权, 支持细粒度的授权(方法级)
  > 支持一级缓存,以提升应用程序的性能;
  > 内置的基于 POJO 企业会话管理, 适用于 Web 以及非 Web 的环境
  > 非常简单的加密 API
  > 不跟任何的框架或者容器捆绑, 可以独立运行

14.简述 Shiro 的核心组件

Shiro 架构 3 个核心组件:
    > Subject: 正与系统进行交互的人, 或某一个第三方服务.
    所有 Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。
    > SecurityManager: Shiro 架构的心脏, 用来协调内部各安全组件, 管理内部组件实例, 并通过它来提供安全管理的各种服务.
    当 Shiro 与一个 Subject 进行交互时, 实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。
    > Realms: 本质上是一个特定安全的 DAO. 当配置 Shiro 时, 必须指定至少一个 Realm 用来进行身份验证和/或授权.
    Shiro 提供了多种可用的 Realms 来获取安全相关的数据. 如关系数据库(JDBC), INI 及属性文件等.
    可以定义自己 Realm 实现来代表自定义的数据源。

15.Shiro认证过程

①. 应用程序代码调用 Subject.login 方法,传递创建好的包含终端用户的 Principals(身份)和 Credentials(凭证)的 AuthenticationToken 实例
  ②. Subject 实例: 通常为 DelegatingSubject(或子类)委托应用程序的 SecurityManager 通过调用securityManager.login(token) 开始真正的验证。
  ③. SubjectManager 接收 token,调用内部的 Authenticator 实例调用 authenticator.authenticate(token).Authenticator 通常是一个 ModularRealmAuthenticator 实例, 支持在身份验证中协调一个或多个Realm 实例
  ④. 如果应用程序中配置了一个以上的 Realm, ModularRealmAuthenticator 实例将利用配置好的AuthenticationStrategy 来启动 Multi-Realm 认证尝试. 在Realms 被身份验证调用之前, 期间和以后,AuthenticationStrategy 被调用使其能够对每个Realm 的结果作出反应.
  ⑤. 每个配置的 Realm 用来帮助看它是否支持提交的 AuthenticationToken. 如果支持, 那么支持 Realm 的 getAuthenticationInfo 方法将会伴随着提交的 token 被调用. getAuthenticationInfo 方法有效地代表一个特定 Realm 的单一的身份验证尝试。

16.Shiro授权过程

①. 应用程序或框架代码调用任何 Subject 的hasRole*, checkRole*, isPermitted*,或者checkPermission*方法的变体, 传递任何所需的权限
  ②. Subject 的实例—通常是 DelegatingSubject(或子类), 调用securityManager 的对应的方法.
  ③. SecurityManager 调用 org.apache.shiro.authz.Authorizer 接口的对应方法.默认情况下,authorizer 实例是一个 ModularRealmAuthorizer 实例, 它支持协调任何授权操作过程中的一个或多个Realm 实例
  ④. 每个配置好的 Realm 被检查是否实现了相同的 Authorizer 接口. 如果是, Realm 各自的 hasRole*, checkRole*,isPermitted*,或 checkPermission* 方法将被调用。

17.Shiro 如何自实现认证

Shiro 的认证过程由 Realm 执行, SecurityManager 会调用 org.apache.shiro.realm.Realm 的 getAuthenticationInfo(AuthenticationToken token) 方法. 实际开发中, 通常提供 org.apache.shiro.realm.AuthenticatingRealm 的实现类, 并在该实现类中提供 doGetAuthenticationInfo(AuthenticationToken token)方法的具体实现

18.如何实现自实现授权

实际开发中, 通常提供  org.apache.shiro.realm.AuthorizingRealm 的实现类,
  并提供 doGetAuthorizationInfo(PrincipalCollection principals) 方法的具体实现

19.如何配置在 Spring 中配置使用 Shiro

①. 在 web.xml 中配置 Shiro 的 Filter
  ②. 在 Spring 的配置文件中配置  Shiro:
    > 配置自定义 Realm:实现自定义认证和授权
    > 配置 Shiro 实体类使用的缓存策略
    > 配置 SecurityManager
    > 配置保证 Shiro 内部 Bean 声明周期都得到执行的 Lifecycle Bean 后置处理器
    > 配置AOP 式方法级权限检查
    > 配置 Shiro Filter

Spring、SpringMVC、Shiro面试题相关推荐

  1. Spring+SpringMVC+shiro+mysql(一)

    Spring+SpringMVC+shiro+mysql(一) 最近要做个后台管理系统,就会设计到权限的管理控制,于是就想到 shiro ,下面是自己对Spring+shiro的一点点理解,记录下来, ...

  2. ssm面试题总结 spring springmvc mybatis面试题

    1.你如何理解Spring? 具体来说Spring是一个轻量级的容器,用于管理业务相关对象的.核心功能主要为:IOC,AOP,MVC. IOD:控制反转,将对象的创建过程交给容器,让容器管理对象的生命 ...

  3. 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构---权限管理系统

    原文链接: https://github.com/shuzheng/zheng 安利一个GitHub上的项目,见原文链接. 基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构, ...

  4. 基于Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构(附源码)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 作者:zheng gitee ...

  5. Spring+SpringMVC+Mybatis分布式敏捷开发系统架构(附源码)

    前言 zheng项目不仅仅是一个开发架构,而是努力打造一套从 前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发 ...

  6. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...

  7. Spring Boot Shiro 权限管理

    Spring Boot Shiro 权限管理 标签: springshiro 2016-01-14 23:44 94587人阅读 评论(60) 收藏 举报 本来是打算接着写关于数据库方面,集成MyBa ...

  8. 基于Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:又一程序员进了ICU:压垮一个家庭,一张结算单就够 个人原创100W+访问量博客:点击前往,查看更多 前言 本项 ...

  9. spring+springmvc+maven+mongodb

    1.前言 最近项目开发使用到了spring+springmvc+maven+mongodb,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  10. SpringMVC+Shiro权限管理

    SpringMVC+Shiro权限管理 什么是权限呢?举个简单的例子: 我有一个论坛,注册的用户分为normal用户,manager用户. 对论坛的帖子的操作有这些: 添加,删除,更新,查看,回复 我 ...

最新文章

  1. 2022-2028年中国钢铁冶炼行业市场研究及前瞻分析报告
  2. php字符串常用算法--字符串加密解密
  3. hdu 1176 dp 数塔问题
  4. [python爬虫] selenium爬取局部动态刷新网站(URL始终固定)
  5. 如何获取并分析Bluetooth HCI层Command Packet和Event Packet包
  6. CCF201803-1 跳一跳
  7. js一些平时会用到的
  8. 【LeetCode】【HOT】739. 每日温度(栈)
  9. mysql索引的概念和作用_索引的基本概念及作用
  10. js检查关闭浏览器方法
  11. 基于微信小程序的AI智能识物
  12. 软件易用性文章分享 ● 第一篇
  13. 我的世界中国版服务器家园系统,《我的世界》中国版“暑期更新”上线 家园系统休闲玩法亮点...
  14. FinalShell显示文件夹
  15. 解决M1处理器款mac安装DW闪退问题 Dreamweaver 2021 Mac(已适配M1芯片,支持最新款M1芯片Mac)
  16. C语言——计算数组长度
  17. VMware安装Ubuntu-18.04.3 Server版本
  18. vue快捷导出excel插件
  19. 《世界上最远的距离》——泰戈尔
  20. mina 使用手记 1

热门文章

  1. 向mysql中导入数据库文件
  2. 计算机桌面桌面设置动态视频,电脑怎么设置动态桌面
  3. zend studio10运行php,加速Zend Studio 运行的10点技巧
  4. CAM365直播预告|带您全方位了解新一代CAM工具软件
  5. emu8086——buf 缓冲区的字节数据排序算法程序
  6. 预编译stdafx.h,无法找到文件问题,红色波浪线
  7. 如何解释GPS中的数据GPGGA、GPRMC等数据
  8. 三角波的傅里叶变换对_傅里叶变换推导详解
  9. Python 3.8.7安装教程
  10. native方法在java中介绍及使用图解