1、J2EE是什么?
概述:J2EE 是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型 (enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中.所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层.
(1)J2EE:多层、分布式中间件语法
采用多层分布式应用模型,J2EE将应用开发划分为多个不同的层,并在每一个层上定义组件。各个应用组件根据他们所在的层分布在同一个或不同的服务器上,共同组成基于组件的多层分布式系统。典型的J2EE四层结构包括客户层、表示逻辑层(Web层)、商业逻辑层和企业信息系统层。
有了J2EE,分布式系统的开发变得简单了,部署的速度也可以加快。J2EE组件的分布与服务器环境无关,所有的资源都可通过分布式目录进行访问。这意味着开发人员不再需要为组件和资源的分布问题耗费精力,从而可以有更多的时间专注于业务逻辑的实现,提高开发效率。
(2)J2EE:企业级应用系统开发平台
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。而J2EE的实施,则具体表现为诸如BEA Web logic或IBM Web sphere之类的特定Web服务器产品。利用J2EE应用-编程模型开发的企业应用系统,可以部署在不同厂商生产的、但相互兼容的J2EE 应用服务器上。
目前,市场上基于J2EE的Web服务器品种繁多,性能特点各有千秋,每家厂商的产品都有精心设计的独到之处。但与产品个性无关的是,所有的J2EE应用服务器都为企业级应用系统的开发和部署提供了一个共同的基础。
(3)J2EE:电子化应用开发模型
J2EE应用很容易发布到Web、掌上电脑或移动电话等手持设备上。换言之,应用组件可以很轻松地实现电子化。J2EE的应用-编程模型保证组件在向不同类型的客户端移植过程中,商业逻辑和后端系统保持不变。
此外,J2EE平台的其他主要优点还有:自动负载平衡、可伸缩、容错和具有故障排除等功能。部署在J2EE环境中的组件将自动获得上述特性,而不必增加额外的代码开销。
2、J2EE是技术还是平台还是框架?
J2EE是技术: 核心技术为 JSP, Servlet, EJB ..
J2EE是平台: 符合J2EE规范的服务器平台,都是J2EE服务器,比如JBoss,weblogic,webspher
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术
3、Servlet执行时一般实现哪几个方法?
doGet(HttpServletRequest request,HttpServletResponse response)
doPost(HttpServletRequest request,HttpServletResponse response)
init()
destroy()
4、说出Servlet的生命周期,并说出Servlet和CGI的区别?
Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。
Servlet的生命周期包含了下面4个阶段:
(1)加载和实例化
Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。
(2)初始化
在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。
(3)请求处理
Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调用ServletResponse对象的方法设置响应信息。在service()方法执行期间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常。(4)服务终止
当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的Servlet实例。
在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务
5、请描述Session与cookie的异同之处
具体来说cookie机制采用的是在客户端保持状态的方案。它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持。cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力.
而session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式
session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。
就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie
从网络服务器观点看所有HTTP请求都独立于先前请求。就是说每一个HTTP响应完全依赖于相应请求中包含的信息
状态管理机制克服了HTTP的一些限制并允许网络客户端及服务器端维护请求间的关系。在这种关系维持的期间叫做会话(session)。
cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies
6、什么情况下调用doGet()和doPost()?
Form表单的method方法如果是post的话当表单提交的时候就要调用doPost。其他的访问方式比如链接访问,表单里method为get表单提交时候调用doPost,地址栏里直接提交都默认用get方法提交。
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。
7、BS与CS的联系与区别?
C/S是Client/Server的缩写.服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server.客户端需要安装专用的客户端软件.B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库.在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现.浏览器通过Web Server 同数据库进行数据交互.C/S 与 B/S 区别:1.硬件环境不同:C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
2.对安全要求不同
C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户.
3.对程序架构不同
C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.
B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.
4.软件重用不同
C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.
B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
5.系统维护不同
C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
6.处理问题不同
C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小.
7.用户接口不同
C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
8.信息流不同
C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低
B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心.
8、forward 和redirect的区别?
forward: 转发an internal transfer in servlet。地址栏里看不到转发页面的地址。
redirect: 重定向,重新开启一个请求,原来请求里的attributs/parameters等将丢失。地址栏里可以看到目标页面的路径。
9、Request对象的主要方法?
setAttribute(String name,Object):设置名字为name的request的参数值
getAttribute(String name):返回由name指定的属性值
getAttributeNames():返回request对象所有属性的名字集合,结果是枚举的实例
getcookies():返回客户端的所有cookie对象,结果是一个cookie数组
getCharacterEncoding():返回请求中的字符编码方式
getContentLength():返回请求的Body的长度
getHeader(String name):获得HTTP协议定义的文件头信息
getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例
getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例
getInputStream():返回请求的输入流,用于获得请求中的数据
getMethod():获得客户端向服务器端传送数据的方法
getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
getParameterValues(String name):获得有name指定的参数的所有值
getProtocol():获取客户端向服务器端传送数据所依据的协议名称
getQueryString():获得查询字符串
getRequestURI():获取发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端的名字
getSession([Boolean create]):返回和请求相关Session
getServerName():获取服务器的名字
getServletPath():获取客户端所请求的脚本文件的路径
getServerPort():获取服务器的端口号
removeAttribute(String name):删除请求中的一个属性
10、四种会话跟踪技术?
page 是代表与一个页面相关的对象和属性。一个页面由一个编译好的Java servlet 类.这既包括servlet 又包括被编译成servlet 的JSP页面
request代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件。比如forward指令就可以使请求跨越多个页面。
session 是是代表与用于某个Web客户机的一个用户体验相关的对象和属性。一个 Web会话可以也经常会跨越多个客户机请求。一次会话(session)通常持续于用户打开浏览器后的一系列访问中。
application 是是代表与整个Web应用程序相关的对象和属性。这实质上是跨越整个 Web应用程序,包括多个页面、请求和会话的一个全局作用域
11、请列举出3种或者3种以上的J2EE应用服务器?
JBoss,Weblogic,Websphere,Tomcat,Jboss
12、jsp有哪些动作?作用分别是什么?
JSP 共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件. jsp:useBean:寻找或者实例化一个JavaBean. jsp:setProperty:设置JavaBean的属性. jsp:getProperty:输出某个JavaBean的属性. jsp:forward:把请求转到一个新的页面. jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记.
13、如何实现servlet的单线程模式?
1,jsp中<%@ page isThreadSafe="false"%>
2,servlet 实现 SingleThreadModel 接口
14、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
Jsp和servlet相同的地方在于jsp和servlet本质上都是一个.java类。Jsp表面看起来不是一个java文件,但是在jsp的生命周期中它首先生成一个servlet源程序,进而再编译执行。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑
15、页面间对象传递的方法?
使用request,session,application,cookie可以实现页面间对象传递。
涉及到的方法:set/getAttribute设置获取属性方法。方法对于request,sesion,application都适用。对cookie来说request.getcookies()方法和response. addcookie(cookie cookie);
16、在JSP中如何删除一个cookie?
<%cookie cookie = new cookie("mycookie", null); cookie.setMaxAge(0);cookie.setPath("/");response.addcookie(cookie); %>
17、在JSP中如何定义方法
你可以定义方法,但是你不能直接访问JSP的内置对象,而是通过参数的方法传递。如下:
<%! public String howBadFrom(HttpServletRequest req) { HttpSession ses = req.getSession(); ... return req.getRemoteHost(); } %>
<% out.print("in general,lao lee is not baddie "); %>
<%= howBadFrom(request) %>
18、JSP的内置对象及方法?
JSP共有以下9种基本内置组件:
request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
方法:1,object getAttribute(String name) 返回指定属性的属性值
2, Enumeration getAttributeNames() 返回所有可用属性名的枚举
3 ,String getCharacterEncoding() 返回字符编码方式
4 ,String getContentType() 得到请求体的MIME类型
5, HttpSession getSession()得到session
6, String getParameter(String name) 返回name指定参数的参数值
7 , cookie getcookies()得到cookie
8, String[] getParameterValues(String name) 返回包含参数name的所有值的数组
9,String getRealPath(String path) 返回一虚拟路径的真实路径
response对象 response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
方法:1 String encodeURL() url重写
2 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
3 void addcookie(cookie cookie)添加cookie
4 sendRedirect(java.lang.String location) 重新定向客户端的请求
5 void setContentType(String type) 设置响应的MIME类型 6
out对象 out对象是JspWriter类的实例,是向客户端输出内容常用的对象
方法:1 void clear() 清除缓冲区的内容
2 void clearBuffer() 清除缓冲区的当前内容
3 void flush() 清空流
4 int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
5 int getRemaining() 返回缓冲区还剩余多少可用
6 boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
7 void close() 关闭输出流
pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
方法:1 JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
2 HttpSession getSession() 返回当前页中的HttpSession对象(session) 3 Object getPage() 返回当前页的Object对象(page)
4 ServletRequest getRequest() 返回当前页的request
5 ServletResponse getResponse() 返回当前页的response
6 Exception getException() 返回当前页的Exception对象(exception)
7 ServletConfig getServletConfig() 返回当前页的ServletConfig对象
8 ServletContext getServletContext() 返回当前页的ServletContext对象(application)
9 void set/getAttribute设置属性及获取属性值,可知指定范围操作。 10 public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL
11 void removeAttribute 删除某属性值,可以指定范围scope删除
session对象 session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
方法:1 set/getAttribute方法,设置获取属性
2 public String getId() 返回JSP引擎为它设的惟一ID号
3 int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)
4 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组
5 void invalidate() 取消SESSION,使SESSION不可用
6 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入
7 void removevalue(String name) 删除SESSION中指定的属性
application对象 application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
方法:1 Object set/getAttribute 设置获取属性
2 Enumeration getAttributeNames() 返回所有可用属性名的枚举
3 void removeAttribute(String name) 删除一属性及其属性值
12 InputStream getResourceAsStream(String path) 返回指定资源的输入流
13 RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象
config表示一个javax.servlet.ServletConfig对象。该对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)
方法:1 String getInitParameter(String name)获取初始化参数值
2 Enumeration getInitParameterName()获取初始化参数名称
3,ServletContext getServletContext() 得到servletcontext对象
以及服务器的有关信息(通过传递一个ServletContext对象)
page对象 page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
方法:1 class getClass 返回此Object的类
exception对象 exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
方法:1 String getMessage() 返回描述异常的消息
2 String toString() 返回关于异常的简短描述消息
常用的组件:request、response、out、session、application、exception
方法:
19、JSP的常用指令?
Include page taglib
page指令的设置语法格式是:<%@ page attribute1=”value1” attribute2=”value2”>
使用include指令可以把其他的文件加入到当前的jsp页面,格式如下:
<%@ include file=”header.jsp”%>
taglib指令指令声明此JSP文件使用了自定义的标签,同时引用标签库,也指定了他们的标签的前缀。格式如下:<% @ taglib uri=” “ prefix=” “ %>
20、如果BROWSER已关闭了cookieS,在JSP中我如何打开SESSION来跟踪
使用URL重写:
String url =response.encodeURL(“hello2.jsp”);
21、JSP的2种页面跳转方式分别是哪两种?
response.sendRedirect(跳转地址);
22、如何执行一个线程安全的JSP?
增加如下指令 <%@ page isThreadSafe="false" %>
23、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
<%@ include file="included.htm" %>
静态include的结果是把其他jsp引入当前jsp,两者合为一体,生成一个合并的.java文件。
动态include的结构是两者独立,直到输出时才合并
所以,动态include的jsp文件独立性很强,是一个单独的jsp文件.
而静态include所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能有变量同名的冲突.
24、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?//乱码
Public String translate (String str)
{ String tempStr = “”;
try { tempStr = new String(str.getBytes(“ISO-8859-1”), “GBK”);
tempStr = tempStr.trim();
}
catch (Exception e)
{ System.err.println(e.getMessage());
}
return tempStr;
}
25、JDBC中,statement,prepared statement ,Callable statement的区别是什么?
Statement 接口提供了执行语句和获取结果的基本方法。PreparedStatement 接口添加了处理 IN 参数的方法;而 CallableStatement 添加了处理 OUT 参数的方法。
PreparedStatement:对于同一条语句的多次执行,Statement每次都要把SQL语句发送给数据
库,这样做效率明显不高,而如果数据库支持预编译,PreparedStatement可以先把要执行的语句一次发给它,然后每次执行而不必发送相同的语句,效率当然提高,当然如果数据库不支持预编译,
PreparedStatement会象Statement一样工作,只是效率不高而不需要用户工手干预.
另外PreparedStatement还支持接收参数.在预编译后只要传输不同的参数就可以执行,大大
提高了性能.
CallableStatement:是PreparedStatement的子类,它只是用来执行存储过程的.
26、说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。(通过参数可以决定最大连接数是多少,服务器启动的时候建立多少连接,池中需要维持多少空闲连接等。)当使用的连接调用完成后,就可以讲连接close,这个时候池驱动程序将此连接放回连接池并且标记为空闲,其他调用就可以使用这个连接。
27、请介绍一个你所做的项目(一般情况下是简历中的第一个项目)
(自己准备)
28、简述什么是工作流
工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。工作流技术为企业更好地实现经营目标提供了先进的手段。1993年工作流管理联盟成立,制定了相关的系列标准,同时给出了工作流的定义:“工作流是一类能够完全或者部分自动执行的经营过程,它根据一系列过程规则、文档、信息或任务能够在不同的执行者之间进行传递与执行。”当然,还有其他的一些定义,但基本上都说明,“工作流是经营过程的一个计算机实现,而工作流管理系统则是这一实现的软件环境”。
29、请列举出至少一个java反编译工具。
有几种非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家。
最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。
JODE是一个可运行的JAR文件,在windows环境下双击即可运行
DAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。
30、j2ee常用的设计模式?说明工厂模式?
Java中的23种设计模式:
Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式), State(状态模式), Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
31、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法?
Session Facade Pattern:使用SessionBean访问EntityBean
Message Facade Pattern:实现异步调用
EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问
Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性
Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性
Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性EJB架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。
32、请对以下在J2EE中常用的名词进行解释(或简单描述): web 容器, EJB容器, JNDI, JMS , JTA , JAF ,RMI/IIOP?
web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action frameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。
33、解释术语:JSTL、SAX、DOM、VO、DAO、JDBC
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。
SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是用于解析xml文件的“民间”的事实标准。
DOM是document Object Model文档对象模型的缩写。根据W3C DOM规范(http://www.w3.org/DOM/),DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件。
VO:value object值对象。
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.
Dao 是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
JDBC(Java Data base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。
34、写出十种以上的你知道的java开源软件,并用一句话说明功能。(列举你了解的java开源项目,并简单描述。)
Spring: Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
WebWork: WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。
Struts: Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。
Hibernate: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Iabtis:ibatis跟hibernate一样使用ORM机制使开发面向对象不过对于具体的数据操作,ibatis 则要求开发者编写具体的SQL 语句。
Dwr: DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.
JFreeChart:JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。
NetBeans:NetBeans是一个全功能的开放源码Java IDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控制和XML编辑融入其众多功能之中。Ant:ant是一个基于JAVA的自动化脚本引擎,脚本格式为XML。除了做JAVA编译相关任务外,ANT还可以通过插件实现很多应用的调用。
Tomcat:Tomcat 是一个小型的轻量级应用服务器。
Eclipse: Eclipse平台是IBM向开发源码社区捐赠的开发框架,是一个成熟的、精心设计的以及可扩展的体系结构。
Junit:JUnit是一个回归测试框架(regression testing framework)。
Log4j: apache提供的一个强有力的日志操作包。
MySQL:MySQL是一个小型关系型数据库管理系统。
JDOM:JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。
IBATIS 【Java开源持久层框架】
Compiere ERP&CRM 【Java开源ERP与CRM系统】
HSQLDB 【Java开源开源数据库】
iText 【Java开源PDF类库】
XWiki 【Java开源Wiki系统】
35、写出你认为作为一名程序员必须阅读的三本书。
(自己发挥说明那本书和原因)例如:Java编程思想:对java的语法类库非常深入细致的学习。
Java设计模式:重复多次读,深入了解设计模式,能够灵活运用到工作中。
Effective Java:提高自己的编码质量
36、EJB与JAVA BEAN的区别?
EJB的英文全称是企业级的JavaBean
两者是完全不同的
JavaBean是一个组件,而EJB就是一个组建框架
JavaBean面向的是业务逻辑和表示层的显示,通过编写一个JavaBean,可以将业务逻辑的事件和事务都放在其中,然后通过它的变量属性将所需要的内容在表示层传递显示。
EJB是部署在服务器上的可执行组建或商业对象。EJB有一个部署描述符,通过这个部署描述符可以对EJB的属性进行描述。EJB不和表示层交互。
通常,对于简单的服务器端应用来说,使用JavaBean是很不错的选择。虽然对于复杂的服务器端应用来说,使用JavaBean同样可以达到相同的效果,但这么做,所有底层的实现都必须手工来重新编写。而EJB不必用户关心它的底层操作,而只要关心它的外部实现即可。
的确,利用JavaBean来与EJB共同完成实现,是十分常见的。



