j2ee面试题

1、        hibernate中,一个操作单元的范围是多大?

一般来讲,hibernate都交给spring来管理了,范围在filter开始跟结束之间。
 hibernate单独来讲的话,一般写的sessionFactory,都是以ThreadLocal 线程控制session的,范围就是单个线程sessionopenclose之间

 

2:tomcat和JBOSS,weblogic的异同?

概述:

Apache:全球应用最广泛的http服务器,免费,出自apache基金组织   
Tomcat
:应用也算非常广泛的web服务器,支持部分j2ee免费,出自apache基金组织   
JBoss
:开源的应用服务器,比较受人喜爱,免费(文档要收费)   
Weblogic
:应该说算是业界第一的app server,全部支持j2ee1.4对于开发者,有免费使用一年的许可证。

Jboss也支持j2ee

JBossWebLogic都含有JspServlet容器,也就可以做web容器,
JBoss
WebLogic也包含EJB容器,是完整的J2EE应用服务器

Tomcat 只能做jspservletcontainer

Jboss内嵌Tomcat... 处理静态页面Jboss的速度要比较快。

Jboss作为应用服务器,而Tomcatweb服务器。

3:struts2中的拦截器,你用过那些自带的拦截器,自己写过的吗?

4:列出Jsp中包含外部文件的方式,两者有何区别。

行为元素<jsp:include page="somefile" flush="true"/>,它是动态包含一个外部文件,运行后代码时是分别编译成单独的.class文件。
 
指令元素<%@ include file ="somefile"%>这是一种静态包含,它运行的时候不会单独编译成.class文件,它生成一个新的整体.class文件。

 

5:在hibernate中,一个持久化的实例有哪几种状态?

transient:瞬态或者自由态 
(new DeptPo(1,”行政部”,20,”行政相关”),该po的实例和session没有关联,该po的实例处于transient) 
persistent:持久化状态 
(和数据库中记录想影射的Po实例,它的状态是persistent, 通过get和load等得到的对象都是persistent) 
detached:脱管状态或者游离态 
(1) 当通过get或load方法得到的po对象它们都处于persistent,但如果执行delete(po)时(但不能执行事务),该po状态就处于 detached, (表示和session脱离关联),因delete而变成游离态可以通过save或saveOrUpdate()变成持久态 
(2)当把session关闭时,session缓存中的persistent的po对象也变成detached 
因关闭session而变成游离态的可以通过lock、save、update变成持久态 
持久态实例可以通过调用 delete()变成脱管状态。 
通过get()或load()方法得到的实例都是持久化状态的。 
脱管状态的实例可以通过调用lock()或者replicate()进行持久化。 
save()和persist()将会引发SQL的INSERT,delete()会引发SQLDELETE, 
而update()或merge()会引发SQL UPDATE。对持久化(persistent)实例的修改在刷新提交的时候会被检测到,它也会引起SQL UPDATE。 
saveOrUpdate()或者replicate()会引发SQLINSERT或者UPDATE 
二、save 和update区别 
把这一对放在第一位的原因是因为这一对是最常用的。 
save的作用是把一个新的对象保存 
update是把一个脱管状态的对象或自由态对象(一定要和一个记录对应)更新到数据库 
三、update 和saveOrUpdate区别 
这个是比较好理解的,顾名思义,saveOrUpdate基本上就是合成了save和update,而update只是update;引用hibernate reference中的一段话来解释他们的使用场合和区别 
通常下面的场景会使用update()或saveOrUpdate(): 
程序在第一个session中加载对象,接着把session关闭 
该对象被传递到表现层 
对象发生了一些改动 
该对象被返回到业务逻辑层最终到持久层 
程序创建第二session调用第二个session的update()方法持久这些改动 
saveOrUpdate(po)做下面的事: 
如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 
如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 
org.hibernate.NonUniqueObjectException: a different object with the sameidentifier value was already associated with the session:[org.itfuture.www.po.Xtyhb#5] 
saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象 
四、persist和save区别 
这个是最迷离的一对,表面上看起来使用哪个都行,在hibernatereference文档中也没有明确的区分他们. 
这里给出一个明确的区分。(可以跟进src看一下,虽然实现步骤类似,但是还是有细微的差别) 
主要内容区别: 
1,persist把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。 
2,save, 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert 
五、saveOrUpdate,merge和update区别 
比较update和merge 
update的作用上边说了,这里说一下merge的 
如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象覆盖session已有的持久实例 
(1)当我们使用update的时候,执行完成后,会抛出异常 
(2)但当我们使用merge的时候,把处理自由态的po对象A的属性copy到session当中处于持久态的po的属性中,执行完成后原来是持久状态还是持久态,而我们提供的A还是自由态 

merge:可以替代saveorupdate方法,工作时遇到a differentobject with the same identifier value was already associated with the session异常,原因就是在hibernate中,同一个session里面有了两个相同标识但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会报这个错误 
六、flush和update区别 
这两个的区别好理解 
update操作的是在自由态或脱管状态(因session的关闭而处于脱管状态)的对象//updateSQL 
而flush是操作的在持久状态的对象。 
默认情况下,一个持久状态的对象的改动(包含set容器)是不需要update的,只要你更改了对象的值,等待hibernateflush就自动更新或保存到数据库了。hibernateflush发生在以下几种情况中: 
1, 调用某些查询的和手动flush(),session的关闭、SessionFactory关闭结合 
get()一个对象,把对象的属性进行改变,把资源关闭。 
2,transactioncommit的时候(包含了flush) 
七、lock和update区别 
update是把一个已经更改过的脱管状态的对象变成持久状态 
lock是把一个没有更改过的脱管状态的对象变成持久状态(针对的是因Session的关闭而处于脱管状态的po对象(2),不能针对因delete而处于脱管状态的po对象) 
对应更改一个记录的内容,两个的操作不同: 
update的操作步骤是: 
(1)属性改动后的脱管的对象的修改->调用update 
lock的操作步骤是: 
(2)调用lock把未修改的对象从脱管状态变成持久状态-->更改持久状态的对象的内容-->等待flush或者手动flush 
八、clear和evcit的区别 
clear完整的清除session缓存 
evcit(obj)把某个持久化对象从session的缓存中清空。

 

6、解析XML文件的几种方式和区别

Dom解析在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的,树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改能随机访问文件内容,也可以修改原文件内容.


SAX
解析 SAX处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点线性解析,不能随机访问,也无法修改原文件

 

 JDOM解析 JDOM的目的是成为Java特定文档模型,它简化与XML的交互并且比使用DOM实现更快.JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但是也限制了灵活性。第二,API大量使用了Collections类,简化了那些已经熟悉这些类的Java开发者的使用。

 DOM4j解析 DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是,虽然DOM4J付出了更复杂的API的代价,但是它提供了比JDOM大得多的灵活性。

8、tomcat中,什么是DefaultServlet?他的功能是什么?

我们的应用的一些静态资源就可以交给该servlet去处理,以减轻服务器压力,节省资源。比如我们把对静态资源的访问路径从/变更为/static,如访问http://localhot/style.css改成http://localhost/static/style.css,然后再应用的web.xml文件中增加如下配置代码:

1.    <servlet-mapping>  

2.        <servlet-name>default</servlet-name>  

3.        <url-pattern>/static/*</url-pattern>  

4.    </servlet-mapping> 

9、servlet的init()方法和service()方法的区别?

init() 方法 

Servlet 的生命期中,仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。可以配置服务器,以在启动服务器或客户机首次访问 Servlet 时装入 Servlet无论有多少客户机访问 Servlet,都不会重复执行 init()  

缺省的 init() 方法通常是符合要求的,但也可以用定制 init() 方法来覆盖它,典型的是管理服务器端资源。例如,可能编写一个定制 init() 来只用于一次装入 GIF 图像,改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的 init() 方法设置了 Servlet 的初始化参数,并用它的ServletConfig 对象参数来启动配置,因此所有覆盖 init() 方法的 Servlet 应调用super.init() 以确保仍然执行这些任务。在调用 service() 方法之前,应确保已完成了 init() 方法。 

(2) service()
方法 

ervice()
方法是 Servlet 的核心。每当一个客户请求一个HttpServlet对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如,如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。 

当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。 

当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法。 

10:session是存储在什么地方,以什么形式存储的。

session是存在服务器的内存中
每个会话对应一个sessionId
通过sessionId开区分是那个会话的session

11在hibernate查询中,iterate()和list()方法的异同是?

查询原理:

    list()方法是通过一条SQL一次性抓取出所有数据。iterate()方法是先查出所有记录的ID,然后再根据每个ID查出各自对应的记录。

 

查询优缺点:

      list()方法查询时,当数据量过大时会导致内存开销过大。iterate()方法则相对好得多,且可以根据ID从缓存中查询,从而提高查询效率。

12、:Servlet的基本架构?写出主要方法。

Servlet基本结构,如果某个类要成为Servlet,则它应该从HttpServlet 继承,根据数据是通过GET还是POST发送,覆盖doGet、doPost方法之一或全部。doGet和doPost方法都有两个参数,分别为HttpServletRequest 类型和HttpServletResponse 类型。HttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等等。HttpServletResponse除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter。对于简单的Servlet来说,它的大部分工作是通过println语句生成向客户端发送的页面。

注意doGet和doPost抛出两个异常,因此你必须在声明中包含它们。另外,你还必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包(要用到HttpServletRequest类和HttpServletResponse类)。
最后,doGet和doPost这两个方法是由service方法调用的,有时你可能需要直接覆盖service方法。以上是Servlet基本结构

 

 

13、hibernate中load()/get()区别

总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

 

14应用服务器与WEB SERVER的区别?

 

1.            应用服务器处理业务逻辑,web服务器则主要是让客户可以通过浏览器进行访问。
2。应用服务器处理业务逻辑,
web服务器是用于处理HTML文件的。web服务器通常比应用服务器简单,如apache就是web服务器,Jboss就是EJB应用服务器。
应用服务器:Weblogic、Tomcat、Jboss
WEB SERVER
IIS、 Apache

 

15:说明Jsp中errorPage的作用,应用范围。

errorPage 的意思是设置当前页面要引入错误页面。也就是浮面当前页面如果出现错误就会跳转到errorPage所指定的页面。 
  isErrorpage的意思是当前页面为错误页面。isErrorpage默认值为false,若要当前页面为错误页面就设置isErrorPage=true。

16:saveOrUpate()和merge()的异同?

1pojo对象中有属性为null时,使用merge不更新数据库,使用saveOrUpdate更新数据库。

使用saveOrUpdate时部分属性为null时不要更新的解决方法:

(1)配置文件中添加属性: update="false",适用于永远不更新的情况,如creatTime

 

17:常见的struts标签有那些?

//form表单
<s:form action=""></s:form>
//用于显示值的标签
<s:property value=""></s:property>
//文本框
<s:textfield name=""></s:textfield>
//密码框
<s:password name=""></s:password>
//时间格式
<s:date name="" format="yyyy-MM-dd hh:MM:ss" />
//单选按钮
<s:radio name="" list="" listKey="" listValue=""></s:radio>
//下拉列表
<s:select name="" list="" listKey="" listValue="" headerKey="" headerValue="" ></s:select>
//多选按钮
<s:checkboxlist name="" list="" listKey="" listValue=""></s:checkboxlist>
//隐藏标签
<s:hidden name=""></s:hidden>
//提交按钮
<s:submit value="确定"></s:submit> 
//重置按钮
<s:reset value="重置"></s:reset>

//循环标签
<s:iterator  begin="1" end="10">  
    <s:property/>  
</s:iterator> 

//if...else标签
<s:if test="#request.if=='if'">  
    这里是if模块  
</s:if><s:elseif test="#request.if=='elseif'">  
    这里是elseif模块  
</s:elseif><s:else>  
    这里是else模块  
</s:else>

//查看值栈数据
<s:debug></s:debug>

 

18:说出在JSP页面里是怎么分页的?

  <div id="pages">

                    <a href="javascript:toPage(1);">首页</a>

                    <s:if test="page==1">

                    <a href="#">上一页</a>

                    </s:if>

                    <s:else>

                 <a href="javascript:toPage(<s:property value="page-1"/>);">上一页</a>

                    </s:else>

                   

                    <s:iterator begin="1" end="totalPage"var="k">

                    <s:if test="#k==page">

                       <a href="javascript:toPage(<s:property />);"class="current_page"><s:property/></a>

                    </s:if>

                    <s:else>

                       <a href="javascript:toPage(<s:property />);"><s:property/></a>

                    </s:else>

                    </s:iterator>

                   

                    <s:if test="page==totalPage">

                    <a href="#">下一页</a>

                    </s:if>

                    <s:else>

                    <a href="javascript:toPage(<s:property value="page+1"/>);">下一页</a>

                    </s:else>

                   

                    <a href="javascript:toPage(<s:property value="totalPage"/>);">末页</a>

                </div>     

19、spring访问底层资源使用哪个接口?说出该接口的实现类也可以

Spring 把所有能记录信息的载体,如各种类型的文件、二进制流等都称为资源,对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件)。

在 Sun 所提供的标准 API 里,资源访问通常由 java.net.URL 和文件 IO 来完成,尤其是当我们需要访问来自网络的资源时,通常会选择 URL 类。

URL 类可以处理一些常规的资源访问问题,但依然不能很好地满足所有底层资源访问的需要,比如,暂时还无法从类加载路径、或相对于 ServletContext 的路径来访问资源,虽然 Java 允许使用特定的 URL 前缀注册新的处理类(例如已有的 http: 前缀的处理类),但是这样做通常比较复杂,而且 URL 接口还缺少一些有用的功能,比如检查所指向的资源是否存在等。

Spring 改进了 Java 资源访问的策略,Spring 为资源访问提供了一个 Resource 接口,该接口提供了更强的资源访问能力,Spring 框架本身大量使用了 Resource 接口来访问底层资源。

Resource 接口是具体资源访问策略的抽象,也是所有资源访问类所实现的接口。Resource 接口主要提供了如下几个方法:

·                      getInputStream():定位并打开资源,返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流。

·                      exists():返回 Resource 所指向的资源是否存在。

·                      isOpen():返回资源文件是否打开,如果资源文件不能多次读取,每次读取结束应该显式关闭,以防止资源泄漏。

·                      getDescription():返回资源的描述信息,通常用于资源处理出错时输出该信息,通常是全限定文件名或实际 URL。

·                      getFile:返回资源对应的 File 对象。

·                      getURL:返回资源对应的 URL 对象。

最后两个方法通常无须使用,仅在通过简单方式访问无法实现时,Resource 提供传统的资源访问的功能。

Resource 接口本身没有提供访问任何底层资源的实现逻辑,针对不同的底层资源,Spring 将会提供不同的 Resource 实现类,不同的实现类负责不同的资源访问逻辑。

Resource 不仅可在 Spring 的项目中使用,也可直接作为资源访问的工具类使用。意思是说:即使不使用 Spring 框架,也可以使用 Resource 作为工具类,用来代替 URL。当然,使用 Resource 接口会让代码与 Spring 的接口耦合在一起,但这种耦合只是部分工具集的耦合,不会造成太大的代码污染。

Resource 的实现类

Resource 接口是 Spring 资源访问策略的抽象,它本身并不提供任何资源访问实现,具体的资源访问由该接口的实现类完成——每个实现类代表一种资源访问策略。

Spring 为 Resource 接口提供了如下实现类:

·                      UrlResource:访问网络资源的实现类。

·                      ClassPathResource:访问类加载路径里资源的实现类。

·                      FileSystemResource:访问文件系统里资源的实现类。

·                      ServletContextResource:访问相对于 ServletContext 路径里的资源的实现类:

·                      InputStreamResource:访问输入流资源的实现类。

·                      ByteArrayResource:访问字节数组资源的实现类。

这些 Resource 实现类,针对不同的的底层资源,提供了相应的资源访问逻辑,并提供便捷的包装,以利于客户端程序的资源访问。

使用UrlResource 访问网络资源

访问网络资源通过 UrlResource 类实现,UrlResource 是 java.net.URL 类的包装,主要用于访问之前通过 URL 类访问的资源对象。URL 资源通常应该提供标准的协议前缀。例如:file: 用于访问文件系统;http: 用于通过 HTTP 协议访问资源;ftp: 用于通过 FTP 协议访问资源等。

20、tomcat支持CGI吗

修改conf/web.xml文件

 

1)解注释cgi相关的配置,共两处<servlet><servlet-mapping>


2)在cgi<servlet>配置中加入:
    <init-param>
      <param-name>executable</param-name>
      <param-value>/bin/sh</param-value>
     </init-param>

 

3)写一个简单的脚本程序,放入webapps/your_project_name/cgi-bin/中,如下:

test.sh
#!/bin/sh
echo "Content-Type:text/html"
echo "Content-Length:4"
echo ""
echo "haha"

21、hibernate抓取策略

hibernate抓取策略(单端代理的批量抓取)


保持默认,同fetch="select",如:
<many-to-one name="classes" column="classesid"fetch="select"/>
fetch="select",
另外发送一条select语句抓取当前对象关联实体或集合


hibernate
抓取策略(单端代理的批量抓取)
设置fetch="join",如:
<many-to-one name="classes" column="classesid"fetch="join"/>

fetch="join",hibernate
会通过select语句使用外连接来加载其关联实体或集合,不会别外发送一条SQL

此时lazy会失效

 

hibernate抓取策略(集合代理的批量抓取)

保持默认,同fetch="select",如:
<set name="students" inverse="true"cascade="all" fetch="select">
fetch="select",
另外发送一条select语句抓取当前对象关联实体或集合

hibernate抓取策略(集合代理的批量抓取)

设置fetch="join",如:
<set name="students" inverse="true"cascade="all" fetch="join">

fetch="join",hibernate
会通过select语句使用外连接来加载其关联实体或集合,不会别外发送一条SQL
此时lazy会失效

hibernate
抓取策略(集合代理的批量抓取)

设置fetch="subselect",如:
<set name="students" inverse="true"cascade="all" fetch="subselect">
fetch="subselect",
另外发送一条select语句抓取在前面查询到的所有实体对象的关联集合

hibernate抓取策略,,batch-szie<class>上的应用

batch-size
属性,可以批量加载实体类,参见:Classes.hbm.xml
<class name="Classes" table="t_classes"batch-size="5">
例如:有10个班级,每一个班级有10个学生,查询10个学生,每一个学生都在不同的班级,如果不设置batch-size="5"那通过学生在查找班是会发出10 条查询语句,设置了,那就只要发出2 条查询语句,起到了优化SQL的作用

 

hibernate抓取策略,batch-szie在集合上的应用


batch-size
属性,可以批量加载实体类,参见:Classes.hbm.xml
<set name="students" inverse="true" cascade="all"batch-size="5">

例如:有10个班级,每一个班级有10个学生,查询10个学生,每一个学生都在不同的班级,如果不设置batch-size="5"那通过班级在查找学生是会发出10 条查询语句,设置了,那就只要发出2 条查询语句,起到了优化SQL的作用。

22、hibernate的2级缓存有那些缓存策略?每种缓存策略的使用范围?

hibernate缓存分为:一级缓存和二级缓存

Session缓存:保存持久化对象


SessionFactory:保存配置文件中的元数据和根据这些元数据推出的预定义的
SQL语句

一级缓存:事务级别的缓存,即session缓存,里面存放的是持久化对象,它仅能被当前事务访问。

二级级存:进程级别或群集级别缓存:这里面存放的可以是关联的持久化对象,也可以是持久化对象的散装数据,它能被当前进程的所有事务访问。当里面存放的是关联的持久化对象,当不同的事务访问这些对象时,就会产生并发的几类问题,所在不提倡这种存放形式。当访问持久化对象的散装数据时,每个事务会根据这些散装对象重新组装持久化对象,所在不同的事务之间会获的不同的持久化对象,也就是说在组装完成后,对这些对象的访问不会存在并发问题,它的并发问题被移置到了获的散装数据的范围。在获取散装数据时,为了保证获取正确的数据,所以会存在并发问题。

为了解决二级缓存的并发问题,hibernate提供了4种访问策略:

1.事务型(
RepeatableRead):仅在受管理的环境中适用。适用于经常被读,但很少被修改的数据,可以防止脏读和不可重复读。

2.读写型(
Read Commit):仅在非集群环境中适用。适用于经常被读,但很少被修改的数据,可以防止脏读。

3.非严格读写:不保证缓存中的数据和数据库中的数据的一致性。必须为它设置过期时间,适用于极少被修改,偶尔允许脏读。


4.只读型:适用于从不会被修改的数据。


这四种策略中,事务型的隔离级别最高,只读型最低,在读写二级缓存只的数据时,如果经常被修改,则需要的隔离级别就越高,但并发效率就越低,因此只有满足以下条件的数据才适合存放到二级缓存中:

1.很少被修改

2.不是很重要的数据,偶尔允许出现并发问题。

3.不会被并发访问的数据

4.参考数据


对于以下类型的数据不适合存放到二级缓存中:

1.经常被修改

2.财务数据,不允许出现并发访问。

3.与其他应用共享的数据。因为使用了二级缓存的
hibernate应用与其他应用共享数据,当其他应用修改了数据,hibernate无法保证与数据库中数据的一致性。

 

23、spring中Bean的作用域有哪几种?

Spring中bean的作用域用scope来表示。

scope的值有两个:

singleton为单粒,即Spring IoC容器只会创建该bean的唯一一个实例,这也是默认的。该实例就会一直放在缓存里供大家使用。

prototype为原型,即每一次请求都会产生一个新的bean实例。

 

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
J2EE高级培训师面试题 时间:120分钟 一,填空题 1) 每个Servlet都必须实现()接口 a) javax.servlet.Servlet; b) javax.servlet.HttpServlet; c) javax.servlet.GenericServlet; d) javax.servlet.http.Servlet; 2) 利用JavaMail API发送邮件的过程中,()能获取正确的session对象。 a) Session mailsession=Session.getInstance(); b) Session mailsession=Session.getInstance(objProperties); c) Session mailsession = request.getSession(); d) Session mailsession= request.getInstance(objProperties); 参考答案 b 3) 下面是一JSP页面的代码,请问输出结果是(). <html> <%! int I =1; %> <% i = ++; %> <head></head> <body> <script>  function display(){  if(i == 1) {      alert("Is 1");    } else if(i==2) {  alert("Is 2"); }else{      alert("Is other");    }  }  display (); </script> </body> </html> a) 什么也不输出。 b) 弹出内容为“Is 1”的对话框。 c) 弹出内容为“Is 2”的对话框。 d) 当第一次访问这个程序时,弹出一个内容为"Is other"的对话框,从第二次开始,每次访问这个程序都弹出内容为“Is 2”的对话框。 e 当第一次访问这个程序时,弹出一个内容为"Is 1"的对话框,从第二次开始,每次访问这个程序都弹出内容为“Is 2”的对话框。 参考答案 a 4) 下面是一JSP页面的片断代码,请问页面输出结果是(). <% StringBuffer buffer =new StringBuffer (”Hello”); buffer.append(“World”); System.out.println(buffer.toString()); %> a) Hello b) World c) HelloWorld d) 什么也不输出 参考答案 d 5) aa.jsp文件如下: <%! static int I=0; int j=0; %> <html> <body> <% for(;I++<2;) { out.print(j++); out.print(" ");} %> </body> </html> 两个客户依次使用浏览器浏览aa.jsp,且每个客户只浏览一次,那么,第2个客户的浏览器将显示什么? e a) 0 1 b) 1 2 c) 3 4 d) 5 6 e) 什么也没有 6) 如果用JSP开发一个聊天程序,不用数据库存储聊天纪录,请问聊天记录最好存储在()中。 a) request b) page c) session d) application 参考答案 d 7) 在web.xml中,有如下代码: <session-config> <session-timeout>30</session-timeout> </session-config> 对于以下描述,正确的是: b a) 定义了默认的会话超时时长。时长为30秒。 b) 可以使用HttpSession接口的getMaxInactiveInterval()方法把该值取出来。 c) 定义了默认的会话超时时长。时长为30小时。 d) 可以使用Session类的getMaxInactiveInterval()方法把该值取出来。 8) 对于<jsp:param>标记,描述不正确的是() a) 一般来说,<jsp:param>是<jsp:include>、<jsp:forward>标记的子标记。 b) 如果aa.jsp有代码:<jsp:forward page="next.jsp"><jsp:param name="name" value="jb-aptech" /></jsp:forward>,则在next.jsp中可以使用request.getParameter("name");把属性name的值取出来。 c) 如果aa.jsp有代码:<jsp:forward page="next.jsp"><jsp:param name="name" value="jb-aptech" /></jsp:forward>,则在next.jsp中可以使用request.getAttribute("name");把属性name的值取出来。 d) 如果<jsp:param>标记放在<jsp:forward>标记外,也就是不作为<jsp:forward>标记的子标记,则使用浏览器查看时会显示错误页面。 9) aa.jsp与bb.jsp属于同一应用,在aa.jsp中使用<jsp:useBean id="beanName" scope="session" class="mypackage.mybean" />标记,在bb.jsp中要把beanName这个bean对象变量所引用的对象取出来。那么对于以下描述,正确的是: c a) 在bb.jsp中仅使用代码:mybean bc = session.getAttribute("beanName"); 取出beanName所引用的对象。 b) 在bb.jsp中取beanName所引用的对象前,先要使用<%@ page import="mypackage.mybean" %>导入mypackage.mybean类。 c) 在bb.jsp中,对于使用session的getAttribute方法取出的beanName所引用的对象,要进行强制类型转换。 d) 在bb.jsp中使用session的getAttribute方法取出的对象和aa.jsp中的beanName所引用的对象无关。 10) 用JSP2.0表达式语法在JSP页面上正确显示10+20的结果的是()。 a) ${10+20} b) ${10+20}; c) $(10+20) d) $(10+20); 参考答案 a 11) 编写自定义标签处理类后,需要编写一个()去描述。 a) .tag 文件 b) .tld 文件 c) .dtd文件 d) .xml 文件 12) 关于Tag File说法不正确的是()。 a) Tag File是JSP2.0新增的功能 b) Tag File是JSP1.2增的功能 c) Tag File 可以让网页开发人员直接使用JSP语法制作标签 d) Tag File的扩展名可以 .tag 参考答案 b 13) 关于Servlet Filter,下列说法正确的有()。 a) Filter 其实就是一个Servlet b) Filter 可以产生response c) Filter可以在servlet被调用之前截获request d) Filter可以用来处理统一认证,过滤不雅字句等。 参考答案 c,d 14) 会话Bean的状态的说法正确的有(a)。 a) 有状态会话Bean的状态是借助于序列化保存下来的 b) 有状态会话Bean被激活后会恢复挂起前的状态 c) 无状态会话Bean不能有属性 d) 有状态会话Bean的所有属性在挂起的时候都会被保存下来 参考答案 15) 关于EJB组成部分的说法不正确的是 (ab) a) 每一个EJB的实例对象对应于一个JNDI名字,通过JNDI名字找到相应的实例 b) 所有EJB都包含Home接口,远程接口,Bean类三个部分 c) Bean类必须实现远程接口中的方法 d) 远程接口实现了RMI的Remote接口 参考答案 16) 下列关于RMI远程接口定义正确的是 d a) public interface Demo {public long test() throws java.rmi.RemoteException;} b) Public interface Demo extends Remote {public long test() } c) interface Demo extends Remote {public long test() throws java.rmi.RemoteException;} d) public interface Demo extends Remote {public long test() throws java.rmi.RemoteException;} 参考答案 17) 下列选项中能获得UserTransaction的是ab a) 通过上下文的.getUserTransaction()方法拿到UserTransaction b) 通过查找JNDI名为javax.transaction.UserTransaction的拿到UserTransaction c) new 一个UserTransaction对象 d) 不需要实例化,直接使用接口中的方法即可 参考答案 18) 关于事务,下列说法不正确的事 a a) EJB支持平面式和嵌入式两种事务模型 b) 平面式事务模型是指要么操作都成功,如果失败,所有操作都回滚 c) EJB有Bean管理事务和容器管理事务两种方式 d) BMT方式也可以使用JTA来控制事务边界 参考答案 19) 关于消息确认描述正确的是 ac a) 在创建消息会话的时候能指定消息的确认方式 b) AUTO_ACKNOWLEDGE方式能确认之前收到的所有消息 c) Client_ACKNOWLEDGE方式需要显示调用方法ACKNOWLEDGE方法来显式的确认消息 d) Client_ACKNOWLEDGE方式可以确认所有的消息 参考答案 20) 关于消息Bean事务描述正确的是 c a) MDB支持RequiresNew事务方式 b) MDB支持Mandatory事务方式 c) NotSupported方式在容器回调OnMessage方法之后才启动事务 d) MDB不支持Required事务属性 参考答案 21) 关于WSDL不正确的说法是 bc a a) 用来描述Web服务的XML文件 b) 全称是WEB SERVICES DEFINITION LANGUAGE c) 客户端调用时直接用WSDL文件中的地址就可以了 d) SOAP协议可以基于多种底层协议 二,简答题 1:简述四种会话跟踪技术以及他们的优缺点 2:请结合轻量级框架Struts,Spring和重量级框架EJB谈谈轻量级架构和重量级架构的区别? 3:说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 4:如何给weblogic指定大小的内存?如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 三,代码题 1:请写出JavaMail发送邮件的关键代码 2:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 3:用冒泡法对10个数排序(由小到大)例如: 54,12,-6,6,22,-7,9,0,999,79 4:有一个登录页面,上面有用户名(name),密码(password)两个字段,对应数据库表User中的两个字段,请用Struts+EJB实现上述登陆场景!
J2EE面试题汇总是一个包括多个问题的汇总,其中涵盖了EJB与JAVA BEAN的区别、JAVA中的多态与继承、BS与CS的联系与区别等内容。其中,EJB与JAVA BEAN是SUN的不同组件规范,EJB是在容器中运行的,分布式的,而JAVA BEAN主要是一种可利用的组件,主要在客户端UI表现上。另外,JAVA中的多态与继承是面向对象编程的重要概念,多态允许一个变量或方法调用在不同的对象上具有不同的行为,而继承允许子类继承父类的属性和方法。BS与CS是指基于浏览器的系统和基于客户端的系统,两者之间联系是通过网络进行交互,区别在于BS系统的应用程序在服务器端运行,而CS系统的应用程序在客户端运行。总的来说,这个面试题汇总涉及了J2EE开发中的一些重要概念和技术,并且可以帮助面试者更好地了解J2EE的相关知识。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [常见J2EE面试题汇总](https://download.csdn.net/download/xujingming518/2649040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [常见J2EE面试题汇总1](https://blog.csdn.net/ling_76539446/article/details/102759076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值