栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第三阶段面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第三阶段面试题

1.1 何为 Spring Bean 容器 ?Spring Bean 容器与 Spring IOC 容器 有什么不同吗 ? 答:用于创建 bean 对象,管理 bean 对象的那个容器 Spring IOC 容器本质上指的的就是 Spring Bean 容器, Spring Bean 容器中最核心一个机制是 IOC 机制( 控制反转),所以有时候又将 springbean 容器称之为 Spring IOC 容器. 1.2Spring IOC 如何理解 ? 答:IOC 是 Spring 中提供一种控制反转机制,目的是将我们 项目中对象的依赖管理交给 Spring 实现,这样可以更好 实现对象关系的解耦,提高程序的可扩展性. 1.3Spring DI 如何理解 ? 答:DI 是 Spring 中的依赖注入机制,IOC 的实现需要借助 这种机制.我们通常会这样理解,Spring Bean 容器中的 IOC 思想一种目标,DI 是实现这种思想的目标的手段. 1.4Spring 中基于注解如何配置对象作用域 ? 以及如何配置延 迟加载机制 ? 答:@Scope(“singleton”) @Scope(“prototype”) @Lazy(value=true) 1.5Spring 工厂底层构建 Bean 对象借助什么机制 ? 当对象不 使用了要释放资源,目的是什么 ? 何为内存泄漏 ? 答:借助反射机制,防止内存泄漏,对象已经不使用了但占用着内存,这种现 象称之 为内存泄漏,内存泄漏不是内存溢出,但是它是内存溢出的一个导火索. 内存溢出直接就 导致系统崩溃了. 1.6 描述 Spring MVC 处理流程及应用优势 答: 1、客户端发出一个 http 请求给 web 服务器,web 服务器对 http 请求进 行 解析,如 果匹配前端控制器(或分发器/DispatcherServlet)的请求映射路径, web 容器将请求 转交给 DispatcherServlet. 2、DipatcherServlet 接收到这个请求之后将根据请求的信息以及处理器映射 器 (HandlerMapping)的配置找到处理请求的处理器(Handler)。 3、由具体的处理器适配器(HandlerAdapter)对 Handler 进行具体的调用。 4 、 Handler 对 数 据 处 理 完 成 以 后 将 返 回 一 个 ModelAndView() 对 象 给 DispatcherServlet。 5、DispatcherSevlet 通过视图解析器(ViewResolver)将 ModelAndView()转 化 为真正的视图 View。 6、Dispatcher 通过 model 解析出 ModelAndView()中的参数进行解析最终展 现出完 整的 view 并返回给客户端。 1.7Spring 中的事务处理方式及优缺点 答:优点在于: 1:能够实现全局事务的控制,通过 EJB CMT 进行事物的管理。 2:能够保证项目模块在系统中完成的功能是可可控制的的操作(AOP) 缺点在于: 1:Spring 中的事物声明有编程式事物和申明是事物 1.8MyBatis 应用中 # 与 $ 有什么异同点 答: 相同点:都是通过 get 来获取值的 不同点:$传进去的字符串不带引号 #号带引号 1.9MyBatis 应用动态 SQL 解决了什么问题 答:有时候,固定的 sql 语句不能够满足我们的应用需求。这个时候需要在 标准的 基础上建立动态的查询语句。 Mybatis 提供了多种注解,可以提供动态查询语言。 比如说在开发的时候,遇到这样的场景,界面提供了多种查询,但是都是非 必填写, 在选择查询条件时可以选中任意几种组合作为查询条件,如果在使 用 jdbc 的时候,需要 判断参数为空,自己组装 sql, 但是 mybatis 提供动态 sql 机制,依靠标签。 1.10 Shiro 框架权限管理时的认证和授权流程描述 . 答:Shiro 权限控制流程的原理: 应用代码 —- 调用 Subject (shiro 的 Subject 就代表当前登陆用户) 控制权 限 —- Subject 在 shiro 框架内部 调用 Shiro SecurityManager 安全管理器 —– 安全管理器调用 Realm (程序和安全数据连接器 )。 Subject 要进行任何操作,都必须要调用安全管理器(对我们来说是自动的)。 而安全管理器会调用指定的 Realms 对象,来连接安全数据。 Realms 用来编写安全代码逻辑和访问安全数据,是连接程序和安全数据的桥梁。 1.11 BeanFactory 和 ApplicationContext 有什么区别? BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了 种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。 BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 bean 生命周期的控制, 调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。 从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系 的设置,根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的 功能。 1.12 请解释 Spring Bean 的生命周期? Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时, 需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要 进行相关的析构操作,并从 bean 容器中移除。 Spring bean factory 负责管理在 spring 容器中被创建的 bean 的生命周期。Bean 的生命周期由两组回调(call back)方法组成。 初始化之后调用的回调方法。 销毁之前调用的回调方法。 Spring 框架提供了以下四种方式来管理 bean 的生命周期事件: InitializingBean 和 DisposableBean 回调接口 针对特殊行为的其他 Aware 接口 Bean 配置文件中的 Custom init()方法和 destroy()方法 @PostConstruct 和@PreDestroy 注解方式 使用 customInit()和 customDestroy()方法管理 bean 生命周期的代码 样例如下: 1.13 Spring Bean 的作用域之间有什么区别? Spring 容器中的 bean 可以分为 5 个范围。所有范围的名称都是自说明 的,但是为了避免混淆,还是让我们来解释一下: singleton:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只 有一个 bean 的实例,单例的模式由 bean factory 自身来维护。 prototype:原形范围与单例范围相反,为每一个 bean 请求提供一个实例。 request:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以 后,bean 会失效并被垃圾回收器回收。 Session:与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后, bean 会随之失效。 global-session:global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器 中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的 话,那么这全局变量需要存储在 global-session 中。 全局作用域与 Servlet 中的 session 作用域效果相同。 1.14 在 Spring AOP 中,关注点和横切关注的区别是什么? 关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。 横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日 志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。 1.15 使用 Spring 框架的好处是什么? • 轻量:Spring 是轻量的,基本的版本大约 2MB。 • 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创 建或查找依赖的对象们。 • 面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务 分开。 • 容器:Spring 包含并管理应用中对象的生命周期和配置。 • MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。 • 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全 局事务(JTA)。 • 异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC, Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。、 1.16 Spring 中用到了那些设计模式? • Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的: • 代理模式—在 AOP 和 remoting 中被用的比较多。 • 单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。 • 模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。 • 工厂模式—BeanFactory 用来创建对象的实例。 • 适配器–spring aop • 装饰器–spring data hashmapper • 观察者– spring 时间驱动模型 • 回调–Spring ResourceLoaderAware 回调接口 1.17 Spring 如何保证 Controller 并发的安全? Spring 多线程请求过来调用的 Controller 对象都是一个,而不是一个请求过来就创建一个 Controller 对象。 并发的安全? 原因就在于 Controller 对象是单例的,那么如果不小心在类中定义了类变 量,那么这个类变量是被所有请求共享的,这可能会造成多个请求修改该变量的值,出现与 预期结果不符合的异常 那有没有办法让 Controller 不以单例而以每次请求都重新创建的形式存在呢 ? 答案是当然可以,只需要在类上添加注解@Scope(“prototype”)即可,这样每次请求调用 的类都是重新生成的(每次生成会影响效率) 虽然这样可以解决问题,但增加了时间成本,总让人不爽,还有其他方法么?答案是肯定的! 使用 ThreadLocal 来保存类变量,将类变量保存在线程的变量域中,让不同的请求隔离开来。 1.18 使用 Spring 框架的好处是什么? 轻量:Spring 是轻量的,基本的版本大约 2MB。 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或 查找依赖的对象们。 面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器:Spring 包含并管理应用中对象的生命周期和配置。 MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务 (JTA)。 异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC,Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。 1.19 在 Spring 中如何注入一个 java 集合? Spring 提供以下几种集合的配置元素: • 类型用于注入一列值,允许有相同的值。 • 类型用于注入一组值,不允许有相同的值。 • 类型用于注入一组键值对,键和值都可以为任意类型。 • 类型用于注入一组键值对,键和值都只能为 String 类型 1.20 Spring 支持的事务管理类型 Spring 支持如下两种方式的事务管理: 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性, 但很难维护。 声明式事务管理:这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或 者 XML 配置管理事务。 1.21 Spring 框架的事务管理有哪些优点? 它为不同的事务 API(如 JTA, JDBC, Hibernate, JPA, 和 JDO)提供了统一的编程模型。 它为编程式事务管理提供了一个简单的 API 而非一系列复杂的事务 API(如 JTA). 它支持声明式事务管理。 它可以和 Spring 的多种数据访问技术很好的融合。 1.22 Spring MVC 的主要组件? ( 1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了 DispatcherServlet 就减少了其它组件 之间的耦合度。 ( 2)处理器映射器 HandlerMapping(不需要程序员开发) 作用:根据请求的 URL 来查找 Handler ( 3)处理器适配器 HandlerAdapter 注意:在编写 Handler 的时候要按照 HandlerAdapter 要求的规则去编写,这样适配器 HandlerAdapter 才可以正确的去执行 Handler。 ( 4)处理器 Handler(需要程序员开发) ( 5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) ( 6)视图 View(需要程序员开发 jsp) View 是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf 等等) 1.23 SpringMvc 怎么和 AJAX 相互调用的? 通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js 可以识别的 Json 对象。具体步 骤如下 : ( 1)加入 Jackson.jar ( 2)在配置文件中配置 json 的映射 ( 3)在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上 1.24 Mybatis 中 # 和 $ 的区别 ? 1. #{}是预编译处理,${}是字符串替换。 2. Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值; 3. Mybatis 在处理${}时,就是把${}替换成变量的值,相当于字符串拼接 4. 使用#{}可以有效的防止 SQL 注入,提高系统安全性。 1.25 mybatis 的缓存机制,一级,二级介绍一下 一级缓存 默认开启 SqlSession 级别的缓存,实现在同一个会话中数据的共享 一级缓存的生命周期和 SqlSession 一致 当有多个 SqlSession 或者分布式环境下,数据库写操作会引起脏数据。 二级缓存 默认不开启,需手动开启 SqlSessionFactory 级别的缓存,实现不同会话中数据的共享,是一个全局变量 可自定义存储源,如 Ehcache 当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库 不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现 实体类实现序列化,在 mapper 文件中开启 在配置文件中设置 cacheEnabled 为 true 1.26 pringMVC 与 Struts2 的区别 pringmvc 的入口是一个 servlet 即前端控制器,而 struts2 入口是一个 filter 过虑器。 pringmvc 是基于方法开发,传递参数是通过方法形参,可以设计为单例或多例(建议单例), struts2 是基于类开发,传递参数是通过类的属性,只能设计为多例。 1.27 mybatis 的基本工作流程 1.读取配置文件,配置文件包含数据库连接信息和 Mapper 映射文件或者 Mapper 包路径。 2.有了这些信息就能创建 SqlSessionFactory,SqlSessionFactory 的生命周期是程序级, 程序运行的时候建立起来,程序结束的时候消亡 3.SqlSessionFactory 建立 SqlSession,目的执行 sql 语句,SqlSession 是过程级,一个方 法中建立,方法结束应该关闭 4.当用户使用 mapper.xml 文件中配置的的方法时,mybatis 首先会解析 sql 动态标签为对 应数据库 sql 语句的形式,并将其封装进 MapperStatement 对象,然后通过 executor 将 sql 注入数据库执行,并返回结果。 5.将返回的结果通过映射,包装成 java 对象。 1.28 什么是 MyBatis 的接口绑定 , 有什么好处 接口映射就是在 IBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑定,我们通过 直接调用接口方法 例如: UserMapper userMapper=sqlSession.getMapper (UserMapper.class) 就可以,这样比 起原来了 SqlSession 提供的方法,例如 List countryList = sqlSession.selectList("selectAll");我们可以有更加灵活的选择和设置.。 注意:( 1)Mapper .xml 文件的 namespace 属性必须配置为接口的全限定名称,接口方法 名与 Mapper.xml 中的