J2EE框架面试题库

时间:2024-11-03 17:49:44 炜玲 J2EE培训 我要投稿
  • 相关推荐

J2EE框架面试题库

  J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。以下是小编整理的J2EE框架面试题库,希望大家认真阅读!

J2EE框架面试题库

  J2EE框架面试题库1

  1.Servlet 的生命周期

  参考答案:Servlet 的生命周期主要为四个步骤实例化时调用构造方法,初始化 init()、业务处理 service()、销毁 destory()。

  1,启动tomcat时,调用Servlet的构造方法

  2、init 阶段:init()方法在 Servlet 实例化的时候调用,而且只调用一次(对于

  Servlet 的初始化,一般是第一次被请求时;或者在在 web.xml 中没有配置

  标签的映射这个时候, 我们可以配置元素中指定了子元素时,容器在启动的时候自动加载这些 Servlet 并调用 init()方法) , init()方法的作用是完成一些全局性的比较花费时间的初始化工作。

  3、service()阶段:Servlet 继承了父类的 service()方法,那么前端 URL 发出的请求不管是以 get 方式或者 post 方式,都将直接走重写的 service()方法,而不再走 doGet()和 goPost()方法。

  4、终止阶段调用 destroy()方法:Servlet 容器关闭时调用,用来关闭 Servlet 占用的一些资源。

  2.Servlet3.0 有哪些新特性

  参考答案: Servlet 3.0 作为 Java EE 6 规范体系中一员, 随着 Java EE 6 规范一起发布。 该版本在前一版本 (Servlet 2.5) 的基础上提供了若干新特性用于简化 Web应用的开发和部署。其中有几项特性的引入让开发者感到非常奋:

  1、异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处

  理完毕才能再输出响应, 最后才结束该 Servlet 线程。 在接收到请求之后, Servlet线程可以将耗时的操作委派给另一个线程来完成, 自己在不生成响应的情况下返回至容器。针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。

  2、 新增的注解支持: 该版本新增了若干注解, 用于简化 Servlet、 过滤器 (Filter)和偷听(Listener)的声明,这使得 web.xml 部署描述文件从该版本开始不再是必选的了。

  3、可插性支持:熟悉 Struts2 的开发者一定会对其通过插件的方式与包括

  Spring 在内的各种常用框架的整合特性记忆犹新。将相应的插件封装成 JAR 包

  并放在类路径下,Struts2 运行时便能自动加载这些插件。现在 Servlet 3.0 提供了类似的特性,开发者可以通过插件的方式很方便的扩充已有 Web 应用的功能,而不需要修改原有的应用。

  4、 原本文件上传时通过 common-fileupload 或者 SmartUpload, 上传比较麻烦,在 Servlet 3.0 中不需要导入任何第三方 jar 包,并且提供了很方便进行文件上传的功能;

  5、ServletContext 的性能增强除了以上的新特性之外,ServletContext 对象的

  功能在新版本中也得到了增强。现在,该对象支持在运行时动态部署 Servlet、

  过滤器、偷听,以及为 Servlet 和过滤器增加 URL 映射等。以 Servlet 为例,过滤器与偷听与之类似。

  3.forward 与 与 redirect 区别

  参考答案:

  Forward :转发,是服务器内部的一种转向行为,客户端并不能察觉,URL 显示的依然是转发前的地址;它属于一次 Request 请求,转发目标页依然可以使用

  Request 范围内的数据。使用场景:多用户多角色的系统根据登录用户进行模块的跳转。

  Redirect :重定向,服务器会首先响应请求端一个状态码,请求端根据状态码再次发生的请求, URL 的地址会换成后一次请求的地址; 它属于两次 Request 请求,所以第一次 Request 请求范围内的数据将丢失,不能再从 Request 中获取数据。使用场景:Session 过期(或未登录时)跳转到登录页,系统异常跳转到异常页。

  4.Session 与 与 Cookie

  参考答案:

  Session:运行在服务器端,默认是保存在内存中,安全性高,可以存放对象,

  可以设置生命周期,当服务器端维护 Session 对象过多的时候,会影响到服务器的性能,可以将一部分 Session 序列化到硬盘上存储。当用户第一次请求生成Session 对象时会生成 sessionID 用来标识此对象,SessionID 将会返回给用户保存在 Cookie 中。

  Cookie:是保存在客户端,一般不超过 4k,用户客户端对 cookie 数据量也有限制,好像 20 个左右,Cookie 安全性低,可以被改写,而且容易被浏览器禁用,但如果 Cookie 完全被禁用,Session 的会话功能也将失效。

  5.如何实现一个自己的 session

  参考答案:要写一个自己的 session,首先要知道 session 的几个特点:第一,

  能够进行对象的保存;第二,有一个唯一的识别码 sessionID 可以通过 cookie 中的 sessionID 来找到 session 对象;第三,就是可以设置 session 的有效期;解决这三点就可以来实现我们自己的 session 了;上面三个条件中最容易实现的就是sessinID,在 Java 中生成一个不重复的 ID 太容易了,这里用 UUID 生成一个 32位序列作为唯一识别码 token(token 就是上面的 sessionID,自己写时就不要用原来的名称了) 。下面推荐三种方案,面试时根据自己的理解选择。

  第一种Map 方案:

  1、定义一个全局的静态的Map 对象(最好用线程安全的实现类) ;

  2、用户首次访问时生成一个 token 作为 Map 中的 key 值,Map 中的 value可以根据需要定义成对象,此对象里面一定要有一个时间字段,来记录用户最近一次的访问时间;

  3、 定义一个后台线程, 用来监控 Map 中对象的日期与系统日期时间的差值,当大于设定的时间时,就把对象从 Map 中删除(模拟 session 过期清理)。

  第二种 SQL 方案:

  1、建一张 t_session 表,里面的主键为 token,至少有一个日期字段,其余的字段根据保存的对象需要建立;

  2、用户首次访问时生成一个 token 作为主键,同时插入一个当前日期;后续只要用户对 Session 要操作的地方,就要更新 t_session 中的日期字段;

  3、定义一个数据 JOB,用来监控 t_session 中对象的日期与系统日期时间的差值, 当大于设定的时间时, 就把对象从t_session中删除(模拟session过期清理)。

  第三种缓存方案:

  1、引入一个缓存 Encache 对象;

  2、用户首次访问时生成一个 token 作为 Encache 中的 key 值,Value 值可以根据需要定义对象,最好是实现了序列化。

  3、在缓存配置中声明一个过期日期。

  综上:第一种方案有一个问题,就是当 Map 存和的对象足够多的时候,后台线程在扫描的时候会不会造成前台用户操作 Map 对象的阻塞,从原理上是有这存情况发生,总之随着 Map 存放的东西越多,性能下降的越厉害。第二种方案不

  多说了,每次操作都可能引起后台数据表的操作,而且在线用户多的时候,只是这块就会占用很多的连接数,有点浪费系统资源。第三种方案是我比较推崇的方试,不用再担心过期时间的管理,缓存本身就有过期时间管理的机制,有人担心Encache 是与应用绑定发布的,不容易做分布式,其实多虑了,Encache 本身支持分布式的,即使有问题,我们还有 memcached 等其它缓存呢。总之根据业务场景需要来选择就行了。

  6.Http 请求中 Get 和 和 Post 区别

  参考答案:get,post 是前台与后台交互时两种请求方式。

  Get :从 URL 上看它是以明文的方式展现(一般要对参数需要加密处理)在地

  址栏中, 而且它对提交的内容长度有限制, 不能超过 1024Btye;Get 一般用于向服务器中请求数据(查询时) 。

  Post:是一种自动加密的请求方式, 而且理论请求的内容没有长度限制, 一般用于表单提交,向服务器进行数据添加或者更新的时候使用。

  7.JSP 中动态 INCLUDE 与静态 INCLUDE 的区别

  参考答案:

  1、写法不同,动态包含,而静态包

  含;动态包含中一般是同样的jsp 页,而静态包含可以是其它.txt,.html 等文件。

  2、动态包含是两个独立的文件,分别编译,但它总会动态检查被引入页中的

  内容变化,在执行到 jsp:include 时动态引入被包含的文件,而且可以向被引入的页面中传递参数。静态包含相当于在编译前将被包含的文件插入到

  J2EE框架面试题库2

  1、请简述一下 Spring 框架的核心特性。

  Spring 框架的核心特性包括控制反转(IoC)、依赖注入(DI)、面向切面编程(AOP)、事务管理等。

  2、解释一下 Spring Boot 的自动配置原理。

  Spring Boot 的自动配置原理是基于条件判断和默认配置,根据项目依赖和配置来自动生成相应的配置。

  3、在 Hibernate 中,如何实现一对多和多对多的关联映射?

  在 Hibernate 中,可以通过配置关联关系和相关属性来实现一对多和多对多的关联映射。

  4、谈谈你对 MyBatis 中动态 SQL 的理解。

  MyBatis 中的动态 SQL 可以根据不同的条件动态生成 SQL 语句,提高灵活性和适应性。

  5、Struts2 和 Spring MVC 有什么区别?

  Struts2 和 Spring MVC 在架构、请求处理方式、灵活性等方面存在区别。

  6、简述一下 JPA 的主要作用和优势。

  JPA 主要用于对象关系映射,简化数据库操作,提供了标准化的接口和规范。

  7、在使用 Spring Security 时,如何进行用户认证和授权?

  使用 Spring Security 时,可以通过配置用户信息、权限等进行认证和授权。

  8、解释一下 Maven 和 Gradle 在项目管理中的区别。

  Maven 更强调约定和规范,Gradle 则更具灵活性和个性化。

  9、如何在 Spring 中进行事务管理?

  在 Spring 中可以通过配置事务管理器、注解等方式进行事务管理。

  10、谈谈你对分布式事务的理解,以及常用的解决方案。

  分布式事务是在分布式系统中保证多个操作的原子性,常用的解决方案有两阶段提交(2PC)、补偿事务等。

【J2EE框架面试题库】相关文章:

关于J2EE三大框架学习顺序的讨论08-21

J2EE经典面试题及答案01-21

J2EE面试题及答案「精选」09-20

2016年J2EE面试题及答案「精选」06-04

2016年IBM面试试题库07-15

关于J2EE MVC方面的面试题及答案07-08

什么是J2EE07-05

j2ee介绍07-22

J2EE的概念08-23