ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 收藏的JAVA面试题大全2

收藏的JAVA面试题大全2

原创 Linux操作系统 作者:babylonia 时间:2009-04-17 17:08:28 0 删除 编辑

Jsp方面

 

1、jsp有哪些内置对象?作用分别是什么?

 

答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

 

 request 用户端请求,此请求会包含来自GET/POST请求的参数

 

response 网页传回用户端的回应

 

pageContext 网页的属性是在这里管理

 

session 与请求有关的会话期

 

application servlet 正在执行的内容

 

out 用来传送回应的输出

 

config servlet的构架部件

 

page JSP网页本身

 

exception 针对错误网页,未捕捉的例外

 

2、jsp有哪些动作?作用分别是什么?

 

答:JSP共有以下6种基本动作

 

jsp:include:在页面被请求的时候引入一个文件。

 

jsp:useBean:寻找或者实例化一个JavaBean。

 

jsp:setProperty:设置JavaBean的属性。

 

jsp:getProperty:输出某个JavaBean的属性。

 

jsp:forward:把请求转到一个新的页面。

 

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

 

3、JSP中动态INCLUDE与静态INCLUDE的区别?

 

答:动态INCLUDE用jsp:include动作实现

 

它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数

 

静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面

 

<%@ include file="included.htm" %>

 

4、两种跳转方式分别是什么?有什么区别?

 

答:有两种,分别为:

 

 

 

前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

 

Servlet方面

 

1、说一说Servlet的生命周期?

 

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

 

2、Servlet版本间(忘了问的是哪两个版本了)的不同?

 

希望大家补上,谢谢

 

3、JAVA SERVLET API中forward() 与redirect()的区别?

 

答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

 

4、Servlet的基本架构

 

public class ServletName extends HttpServlet {

 

public void doPost(HttpServletRequest request, HttpServletResponse response) throws

 

ServletException, IOException {

 

}

 

public void doGet(HttpServletRequest request, HttpServletResponse response) throws

 

ServletException, IOException {

 

}

 

}

 

 


Jdbc、Jdo方面

 

1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询.

 

答:程序如下:

 

package hello.ant;

 

import java.sql.*;

 

public class jdbc

 

{

 

String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";

 

String theUser="admin";

 

String thePw="manager";

 

Connection c=null;

 

Statement conn;

 

ResultSet rs=null;

 

public jdbc()

 

{

 

try{

 

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();

 

c = DriverManager.getConnection(dbUrl,theUser,thePw);

 

conn=c.createStatement();

 

}catch(Exception e){

 

e.printStackTrace();

 

}

 

}

 

public boolean executeUpdate(String sql)

 

{

 

try

 

{

 

conn.executeUpdate(sql);

 

return true;

 

}

 

catch (SQLException e)

 

{

 

e.printStackTrace();

 

return false;

 

}

 

}

 

public ResultSet executeQuery(String sql)

 

{

 

rs=null;

 

try

 

{

 

rs=conn.executeQuery(sql);

 

}

 

catch (SQLException e)

 

{

 

e.printStackTrace();

 

}

 

return rs;

 

}

 

public void close()

 

{

 

try

 

{

 

conn.close();

 

c.close();

 

}

 

catch (Exception e)

 

{

 

e.printStackTrace();

 

}

 

}

 

public static void main(String[] args)

 

{

 

ResultSet rs;

 

jdbc conn = new jdbc();

 

rs=conn.executeQuery("select * from test");

 

try{

 

while (rs.next())

 

{

 

System.out.println(rs.getString("id"));

 

System.out.println(rs.getString("name"));

 

}

 

}catch(Exception e)

 

{

 

e.printStackTrace();

 

}

 

}

 

}

 

2、Class.forName的作用?为什么要用?

 

答:调用该访问返回一个以字符串指定类名的类的对象。

 

3、Jdo是什么?

 

答:JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。

 

4、在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。

 

答:一种分页方法

 

<%

 

int i=1;

 

int numPages=14;

 

String pages = request.getParameter("page") ;

 

int currentPage = 1;

 

currentPage=(pages==null)?(1):{Integer.parseInt(pages)}

 

sql = "select count(*) from tables";

 

ResultSet rs = DBLink.executeQuery(sql) ;

 

while(rs.next()) i = rs.getInt(1) ;

 

int intPageCount=1;

 

intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);

 

int nextPage ;

 

int upPage;

 

nextPage = currentPage+1;

 

if (nextPage>=intPageCount) nextPage=intPageCount;

 

upPage = currentPage-1;

 

if (upPage<=1) upPage=1;

 

rs.close();

 

sql="select * from tables";

 

rs=DBLink.executeQuery(sql);

 

i=0;

 

while((i

 

%>

 

//输出内容

 

//输出翻页连接

 

合计:<%=currentPage%>/<%=intPageCount%>第一页

 

 


href="List.jsp?page=<%=upPage%>">上一页

 

<%

 

for(int j=1;j<=intPageCount;j++){

 

if(currentPage!=j){

 

%>

 

[<%=j%>]

 

<%

 

}else{

 

out.println(j);

 

}

 

}

 

%>

 

下一页最后页

 

 


 

Xml方面

 

1、xml有哪些解析技术?区别是什么?

 

答:有DOM,SAX,STAX等

 

DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问

 

STAX:Streaming API for XML (StAX)

 

2、你在项目中用到了xml技术的哪些方面?如何实现的?

 

答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

 

3、用jdom解析xml文件时如何解决中文问题?如何解析?

 

答:看如下代码,用编码方式加以解决

 

package test;

 

import java.io.*;

 

public class DOMTest

 

{

 

private String inFile = "c:\people.xml";

 

private String utFile = "c:\people.xml";

 

public static void main(String args[])

 

{

 

new DOMTest();

 

}

 

public DOMTest()

 

{

 

try

 

{

 

javax.xml.parsers.DocumentBuilder builder =

 

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

 

org.w3c.dom.Document doc = builder.newDocument();

 

org.w3c.dom.Element root = doc.createElement("老师");

 

org.w3c.dom.Element wang = doc.createElement("王");

 

org.w3c.dom.Element liu = doc.createElement("刘");

 

wang.appendChild(doc.createTextNode("我是王老师"));

 

root.appendChild(wang);

 

doc.appendChild(root);

 

javax.xml.transform.Transformer transformer =

 

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

 

transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");

 

transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");

 

 

 

 

transformer.transform(new javax.xml.transform.dom.DOMSource(doc),

 

new

 

 


javax.xml.transform.stream.StreamResult(outFile));

 

}

 

catch (Exception e)

 

{

 

System.out.println (e.getMessage());

 

}

 

}

 

}

 

4、编程用JAVA解析XML的方式.

 

答:用SAX方式解析XML,XML文件如下:

 

 

 

王小明

 

信息学院

 

6258113

 

男,1955年生,博士,95年调入海南大学

 

 

事件回调类SAXHandler.java

 

import java.io.*;

 

import java.util.Hashtable;

 

import org.xml.sax.*;

 

public class SAXHandler extends HandlerBase

 

{

 

private Hashtable table = new Hashtable();

 

private String currentElement = null;

 

private String currentValue = null;

 

public void setTable(Hashtable table)

 

{

 

this.table = table;

 

}

 

public Hashtable getTable()

 

{

 

return table;

 

}

 

public void startElement(String tag, AttributeList attrs)

 

throws SAXException

 

{

 

currentElement = tag;

 

}

 

public void characters(char[] ch, int start, int length)

 

throws SAXException

 

{

 

currentValue = new String(ch, start, length);

 

}

 

public void endElement(String name) throws SAXException

 

{

 

if (currentElement.equals(name))

 

table.put(currentElement, currentValue);

 

}

 

}

 

JSP内容显示源码,SaxXml.jsp:

 

 

 

剖析XML文件people.xml

 

 

 

<%@ page errorPage="ErrPage.jsp"

 

contentType="text/html;charset=GB2312" %>

 

<%@ page import="java.io.*" %>

 

<%@ page import="java.util.Hashtable" %>

 

<%@ page import="org.w3c.dom.*" %>

 

<%@ page import="org.xml.sax.*" %>

 

<%@ page import="javax.xml.parsers.SAXParserFactory" %>

 

<%@ page import="javax.xml.parsers.SAXParser" %>

 

<%@ page import="SAXHandler" %>

 

<%

 

File file = new File("c:\people.xml");

 

FileReader reader = new FileReader(file);

 

Parser parser;

 

SAXParserFactory spf = SAXParserFactory.newInstance();

 

SAXParser sp = spf.newSAXParser();

 

SAXHandler handler = new SAXHandler();

 

sp.parse(new InputSource(reader), handler);

 

Hashtable hashTable = handler.getTable();

 

out.println("

");

 

out.println("

" + "");

 

out.println("

" + "");

 

out.println("

" + "");

 

out.println("

" + "");

 

out.println("

教师信息表
姓名" +

 

(String)hashTable.get(new String("name")) + "

学院" +

 

(String)hashTable.get(new String("college"))+"

电话" +

 

(String)hashTable.get(new String("telephone")) + "

备注" +

 

(String)hashTable.get(new String("notes")) + "

");

 

%>

 

 

 

EJB方面

 

1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别?

 

答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS.....

 

2、EJB与JAVA BEAN的区别?

 

答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

 

3、EJB的基本架构

 

答:一个EJB包括三个部分:

 

Remote Interface 接口的代码

 

package Beans;

 

import javax.ejb.EJBObject;

 

import java.rmi.RemoteException;

 

public interface Add extends EJBObject

 

{

 

//some method declare

 

}

 

Home Interface 接口的代码

 

package Beans;

 

import java.rmi.RemoteException;

 

import jaax.ejb.CreateException;

 

import javax.ejb.EJBHome;

 

public interface AddHome extends EJBHome

 

{

 

//some method declare

 

}

 

EJB类的代码

 

package Beans;

 

import java.rmi.RemoteException;

 

import javax.ejb.SessionBean;

 

import javx.ejb.SessionContext;

 

public class AddBean Implements SessionBean

 

{

 

//some method declare

 

}

 

 


J2EE,MVC方面

 

1、MVC的各个部分都有那些技术来实现?如何实现?

 

答:MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

 

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

 

希望大家补上,谢谢

 

3、J2EE是什么?

 

答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

 

4、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。

 

答:Web Service描述语言WSDL

 

SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。

 

UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

 

5、BS与CS的联系与区别。

 

希望大家补上,谢谢

 

6、STRUTS的应用(如STRUTS架构)

 

答:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:

 

一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。

 

二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。

 

三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。

 

设计模式方面

 

1、开发中都用到了那些设计模式?用在什么场合?

 

答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

 

2、UML方面

 

答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图,

 

JavaScript方面

 

1、如何校验数字型?

 

var re=/^d{1,8}$|.d{1,2}$/;

 

var str=document.form1.all(i).value;

 

var r=str.match(re);

 

if (r==null)

 

{

 

sign=-4;

 

break;

 

}

 

else{

 

document.form1.all(i).value=parseFloat(str);

 

}

 

CORBA方面

 

1、CORBA是什么?用途是什么?

 

答:CORBA 标准是公共对象请求代理结构(Common Object Request Broker Architecture),由对象管理组织 (Object Management Group,缩写为 OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。 其目的为:

 

用不同的程序设计语言书写

 

在不同的进程中运行

 

为不同的操作系统开发

 

LINUX方面

 

1、LINUX下线程,GDI类的解释。

 

答:LINUX实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现。

 

GDI类为图像设备编程接口类库。

 

JAVA华为面试题

 

JAVA方面

 

1 面向对象的特征有哪些方面  

 

2 String是最基本的数据类型吗?

 

3 int 和 Integer 有什么区别

 

4 String 和StringBuffer的区别

 

5运行时异常与一般异常有何异同?

 

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

 

6 说出一些常用的类,包,接口,请各举5个

 

7 说出ArrayList,Vector, LinkedList的存储性能和特性

 

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

 

8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

 

以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

 

public class ThreadTest1{

 

         private int j;

 

         public static void main(String args[]){

 

                  ThreadTest1 tt=new ThreadTest1();

 

                   Inc inc=tt.new Inc();

 

                   Dec dec=tt.new Dec();

 

                   for(int i=0;i<2;i++){

 

                            Thread t=new Thread(inc);

 

                            t.start();

 

                            t=new Thread(dec);

 

                            t.start();

 

                   }

 

         }

 

         private synchronized void inc(){

 

                   j++;

 

                  System.out.println(Thread.currentThread().getName()+"-inc:"+j);

 

         }

 

         private synchronized void dec(){

 

                   j--;

 

                  System.out.println(Thread.currentThread().getName()+"-dec:"+j);

 

         }

 

        

 

         class Inc implements Runnable{

 

                   public void run(){

 

                            for(int i=0;i<100;i++){

 

                                     inc();

 

                            }

 

                   }

 

         }

 

         class Dec implements Runnable{

 

                   public void run(){

 

                            for(int i=0;i<100;i++){

 

                                     dec();

 

                            }

 

                   }

 

         }

 

}

 

9.   JSP的内置对象及方法。

 

request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)

out out 对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息

application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息

config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page page表示从该页面产生的一个servlet实例

 

10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。

 

参见课程中socket通讯例子。

 

11说出Servlet的生命周期,并说出Servlet和CGI的区别。

 

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

 

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

 

12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

 

 


13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

 

 


14.说出数据连接池的工作机制是什么?

 

 


15同步和异步有和异同,在什么情况下分别使用他们?举例说明。

 

 


16应用服务器有那些?

 

 


17你所知道的集合类都有哪些?主要方法?

 

 


18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。

 

 


19.说出在JSP页面里是怎么分页的?

 

页面需要保存以下参数:

 

总行数:根据sql语句得到总行数

 

每页显示行数:设定值

 

当前页数:请求参数

 

页面根据当前页数和每页行数计算出当前页第一行行数,定位结果集到此行,对结果集取出每页显示行数的行即可。

 

 

 

 

数据库方面:

 

 


1.          存储过程和函数的区别

 

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。

 

2.          事务是什么?

 

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:

 

原子性

 

事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

 

一致性

 

事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

 

隔离性

 

由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。

 

持久性

 

事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

 

 


3.          游标的作用?如何知道游标已经到了最后?

 

游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

 

4.          触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。

 

事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。

 

语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。

 

 

 

 

中远面试题

 

   1、面向对象的三个基本特征

 

   2、方法重载和方法重写的概念和区别

 

   3、接口和内部类、抽象类的特性

 

   4、文件读写的基本类

 

   **5、串行化的注意事项以及如何实现串行化

 

   6、线程的基本概念、线程的基本状态以及状态之间的关系

 

   7、线程的同步、如何实现线程的同步

 

   8、几种常用的数据结构及内部实现原理。

 

   9、Socket通信(TCP、UDP区别及Java实现方式)

 

  **10、Java的事件委托机制和垃圾回收机制

 

  11、JDBC调用数据库的基本步骤

 

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

 

  13、Java四种基本权限的定义

 

  14、Java的国际化

 

二、JSP

   1、至少要能说出7个隐含对象以及他们的区别

 

  ** 2、forward 和redirect的区别

 

   3、JSP的常用指令

 

三、servlet

   1、什么情况下调用doGet()和doPost()?

 

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

 

   3、servlet的生命周期

 

   4、如何现实servlet的单线程模式

 

   5、servlet的配置

 

   6、四种会话跟踪技术

 

四、EJB

   **1、EJB容器提供的服务

 

         主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。

 

   2、EJB的角色和三个对象

 

         EJB角色主要包括Bean开发者 应用组装者 部署者 系统管理员 EJB容器提供者 EJB服务器提供者

 

         三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类

 

   2、EJB的几种类型

 

         会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean

 

         会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种

 

         实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种

 

   3、bean 实例的生命周期

 

         对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。

 

   4、激活机制

 

         以Statefull Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。

 

   5、remote接口和home接口主要作用

 

         remote接口定义了业务方法,用于EJB客户端调用业务方法

 

         home接口是EJB工厂用于创建和移除查找EJB实例

 

   6、客服端调用EJB对象的几个基本步骤

 

一、  设置JNDI服务工厂以及JNDI服务地址系统属性

 

二、  查找Home接口

 

三、  从Home接口调用Create方法创建Remote接口

 

四、  通过Remote接口调用其业务方法

 

五、数据库

   1、存储过程的编写

 

   2、基本的SQL语句

 

六、weblogic

1、   如何给weblogic指定大小的内存?

 

在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M

 

2、   如何设定的weblogic的热启动模式(开发模式)与产品发布模式?

 

可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。

 

3、   如何启动时不需输入用户名与密码?

 

修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码.

 

4、   在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?

 

保存在此Domain的config.xml文件中,它是服务器的核心配置文件。

 

5、   说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办?

 

Domain目录\服务器目录\applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。

 

6、   如何查看在weblogic中已经发布的EJB?

 

可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB

 

7、   如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置

 

缺省安装中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。

 

   8、在weblogic中发布ejb需涉及到哪些配置文件

 

不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml

 

   9、EJB需直接实现它的业务接口或Home接口吗,请简述理由.

 

远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。

 

  10、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别

 

persistent方式的MDB可以保证消息传递的可*性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而non-persistent方式的消息将被丢弃。

 

  11、说说你所熟悉或听说过的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架构的设计好坏将直接影响系统的性能、可扩展性、可维护性、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性
 
 
 2004-12-26 17:16:18         
 
  bibiye    
 
 
  等级:管理员
  文章:1355
  积分:13155
  注册:2004-12-1
              第 2 楼 
 
 

 

1、JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include动作实现
   它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
   静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
   <%@ include file="included.htm" %>

2、两种跳转方式分别是什么?有什么区别?
答:有两种,分别为:
 
 
  前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。

3、JAVA SERVLET API中forward() 与redirect()的区别?
答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

4、编程用JAVA解析XML的方式.
答:用SAX方式解析XML,XML文件如下:


  王小明
  信息学院  
  6258113
  男,1955年生,博士,95年调入海南大学

事件回调类SAXHandler.java
import java.io.*;
import java.util.Hashtable;
import org.xml.sax.*;
public class SAXHandler extends HandlerBase
  {
  private Hashtable table = new Hashtable();
  private String currentElement = null;
  private String currentValue = null;
  public void setTable(Hashtable table)
    {
    this.table = table;
    }
  public Hashtable getTable()
    {
    return table;
    }
  public void startElement(String tag, AttributeList attrs)
  throws SAXException
    {
    currentElement = tag;
    }
  public void characters(char[] ch, int start, int length)
  throws SAXException
    {
    currentValue = new String(ch, start, length);
    }
  public void endElement(String name) throws SAXException
    {
    if (currentElement.equals(name))
      table.put(currentElement, currentValue);
    }
  }
JSP内容显示源码,SaxXml.jsp:


剖析XML文件people.xml


<%@ page errorPage="ErrPage.jsp"
contentType="text/html;charset=GB2312" %>
<%@ page import="java.io.*" %>
<%@ page import="java.util.Hashtable" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="org.xml.sax.*" %>
<%@ page import="javax.xml.parsers.SAXParserFactory" %>
<%@ page import="javax.xml.parsers.SAXParser" %>
<%@ page import="SAXHandler" %>
<%
File file = new File("c:\\people.xml");
FileReader reader = new FileReader(file);
Parser parser;
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
SAXHandler handler = new SAXHandler();
sp.parse(new InputSource(reader), handler);
Hashtable hashTable = handler.getTable();
out.println("

");
out.println("" + "");
out.println("" + "");
out.println("" + "");
out.println("" + "");
out.println("
教师信息表
姓名" +
  (String)hashTable.get(new String("name")) + "
学院" +
  (String)hashTable.get(new String("college"))+"
电话" +
  (String)hashTable.get(new String("telephone")) + "
备注" +
  (String)hashTable.get(new String("notes")) + "
");
%>


 
 
Others:

1.打印出所有该目录下的文件和文件夹

File myFileName = new File( "%文件夹命" );
  
  if( myFileName.isDirectory() ){
   String dirContents[] = myFileName.list();
   for( int i=0; i    System.out.println( dirContents[i] + "\n");
   }
  }

2. 容器:充当中间件的角色
    
    WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的 WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
    
    EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。
    
    WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量 session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。


Java常见问题集锦 -- 来自Sun中国官方站

1、问: 如何设置Java 2(JDK1.2)的环境变量?

答: Java 2安装后,需要设置PATH和JAVA_HOME环境变量.与JDK1.1不同的是:设置好JAVA_HOME环境变量后,JVM将自动搜索系统类库以及用户的当前路径.
Java 2环境变量的设置如下例所示:
Solaris平台: setenv JAVA_HOME Java2的安装路径
setenv PATH $JAVA_HOME/bin:${PATH}
Windows平台: set JAVA_HOME=Java2的安装路径
set PATH=$JAVA_HOMEbin;%PATH%

2、问: 哪些Java集成开发工具支持Java 2?

答: 目前流行的Java集成开发环境,如Inprise的JBuilder,Symantec的Visual Cafe, Sybase的PowerJ,都支持Java 2.

3、问: 如果在Netscape或IE浏览器中运行Java applet时出现了错误,如何确定错误范围?

答: 当java applet在浏览器中运行时,使用的是浏览器本身的缺省JVM.而不同浏览器对JDK的支持程度也不尽相同. 因此,在Netscape或IE浏览器中运行Java applet出现了错误,建议使用JDK提供的工具appletviewer或Sun公司的Hotjava浏览器来测试该applet,以确定错误的产生是与浏览器相关.
如果applet在appletviewer或Hotjava中运行一切正常,则错误的产生是由于浏览 器不完全兼容JDK而引起的. 此时,解决方法可以是使用Hotjava浏览器或者安装 Sun公司的Java Plugin.
如果applet在Hotjava浏览器或appletviewer中运行即发生错误,则应当根据错误 提示检查applet程序.

4、问: 当用JDBC向数据库中插入数据或从数据库中提取数据时,为何有时中文字符会显示为乱码?

答: 这个问题的实现通常与各个JDBC driver的实现有关. 目前大多数JDBC driver采用本地编码格式来传输中文字符,例如中文字符"0x4175"会被转成"0x41"和"0x75"进行传输. 因此我们需要对JDBC driver返回的字符以及要发给JDBC driver的字符进行转换.

当用JDBC driver向数据库中插入数据时,需要先将Unicode转成native code; 当 JDBC driver从数据库中查询数据时,则需要将native code转换成Unicode. 下面给出了这两种转换的实现:


String native2Unicode(String s) {

if (s == null || s.length() == 0) {

return null;

}

byte[] buffer = new byte[s.length()];

for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {

c = s.charAt(i);

byte []buf = (""+c).getBytes();

buffer[j++] = (char)buf[0];

buffer[j++] = (char)buf[1];

}

else {

buffer[j++] = s.charAt(i);

}

}

return new String(buffer, 0, j);

}

除使用以上两个方法之外,有些JDBC driver如果对jdbc driver Manager设置了正确 的字符集属性,以上2个方法就不需要了.


5、问:
当用Servlet来处理http请求并产生返回的HTML页面时,如何使HTML页面中的中文字符能够正常显示?

答:
javax.servlet.http.HttpResponse类用于产生返回页面.通过HttpResponse定义的方法getOutputStream()可以获得ServletOutputStream的实例,这样用户就可以利用ServletOutputStream.write方法向输出流中写入返回页面的内容. 但是ServletOutputStream使用的是缺省的编码方式,如果要使返回页面中的中文字 符能够正常显示,最好显示地指定所用的字符编码方式. 通常需要构造一个 OutputStreamWriter , 例程如下:


public void doGet (HttpServletRequest req, HttpServletResponse res)

throws ServletException, IOException

{

res.setContentType("text/html");

ServletOutputStream ut = res.getOutputStream();

OutputStreamWriter w = new OutputStreamWriter(out,"GB2312");

ow.write("这是测试");

ow.flush();

ow.close();

}


6、问:
如何设置Java WebServer的CLASSPATH,以包含用户的class文件?

答:
有两种方法可以设置Java WebServer的CLASSPATH环境变量,以使用户编写的Servlet能够调用用户的class文件.
将用户的class文件放到 JavaWebServer_Dir/classes目录下,在Java WebServer 启动时,classes目录被自动加入到CLASSPATH环境变量中了.
修改httpd.nojre文件,将用户class文件所在的路径名加到CLASSPATH环境变量中.


7、问:
为什么在Windows平台上用Naming.lookup来获取远程RMI对象时会很慢?

答:
机器的网络设置不正确很可能会引起该问题的发生.
RMI使用了Java网络类,特别是java.net.InetAddress类,它将查询TCP/IP的主机名, 包括IP地址到主机名的映射和主机名到IP地址的映射.在Windows平台,这种查询功能 是由本地的Windows Socket库来实现的. 因此延时是发生在Windows库中,而非RMI中.

如果你的机器设置成使用DNS,问题通常是DNS服务器查不到主机名,你所发现的延时 是DNS查询的延时. 请尝试将RMI通信中涉及到的所有主机名/IP地址加到本地文件 winntsystem32driversetchosts或windowshosts中. 格式如下:

IP地址 主机名

如此设置应当可以明显地减少查询所花的时间.

8、问: 编写Java application时,如何设置proxy的信息,以便访问外部网站?

答: 若在java application中访问外部网站,首先应设置proxy信息,样例代码如下:


import java.util.properties;

.....

Properties sys = System.getProperties();

sys.put("proxySet","true");

sys.put("proxyHost","myHTTP.proxyserver.com");

sys.put("proxyPort","80");

System.setProperties(sys);



u = new URL(website);

connect = (HttpURLConnection)u.openConnection();

.....

9、问: Swing组件JList的列表数据修改了,如何通知JList改变显示?

答:
JList组件有一个单独的显示模式ListModel来表示JList的显示数据.
JList创建以后,JList数据元素的值及数据元素的数量可以动态地改变.
JList在它的数据模式ListModel中观察数据的改变.因此,一个ListModel 的正确实现应当在每次数据发生改变时,通知事件的监听者.
当使用构造函数JList(Object[])创建一个JList的实例时,系统将自动 创建一个DefaultListModel的实例来存储JList的显示数据, 可以调用 DefaultListModel中定义的简便方法来动态地修改JList的数据,如 removeElementAt(index),addElement(Object)等. DefaultListModel 在修改数据的同时,将通知JList关于数据的改变.

10、问:
在Java applet中如何实现一个模式对话框?

答:
在Java applet中实现模式对话框的关键就是在创建一个对话框的时候 要为该对话框指定一个正确的父窗口.因为Applet是Panel类的子类,不 可以作为对话框的父窗口,所以首先要获得applet所在的窗口,作为模式 对话框的父窗口. 样例代码如下:


.....

Dialog d = new Dialog( getParentWindow(comp),title);

// comp为applet上的任意一个组件

....



public void getParentWindow(Component compOnApplet,String title){

Container c = compOnApplet.getParent();

while (c != null) {

if (c instanceof Frame)

return (Frame) c;

c = c.getParent();

}

return null;

}

11、问: 在Java applet中如何显示另外一个HTML页面?

答:
通过java.applet.Applet.getAppletContext()方法可以获得与该applet相关的AppletContext, AppletContext.showDocument(URL)方法就可以使applet所在的浏览器显示另外一个网页.

12、问:
用JDK实现的签名applet,可否在Netscape或IE中运行?

答:
用JDK实现的签名applet,不可以在Netscape或IE中运行,但是可以在Hotjava浏览器中运行.

不同的浏览器提供了不同的签名applet机制,如Netscape提供了zigbert工具和 Capability API, 而IE则需要使用CAB文件. 但是,无论是Netscape工具产生的 签名applet,还是用IE产生的签名applet,都不可以在其它的浏览器中运行.

如果要使JDK产生的签名applet能够在Netscape或IE中运行,解决方法是在 Netscape或IE中安装Java Plugin,则用JDK实现的签名applet就可以在这两种 浏览器中运行.

13、问:
用JNI技术可以从Java应用中调用C程序库,但是如何使该C程序库可以调用另外的C程序库?

答:
如果一个被Java调用的C程序库C1仍需要调用另外一个C程序库C2,那么在编译C1的时候应当联接程序库C2,步骤如下(Solaris平台):
编写调用C库的Java文件,并编译.
javac java文件名


产生C程序头文件
javah -jni java文件名(不带后缀.java)


编写被Java调用的C程序C1.c,以及被C1调用的C2.c,并编译.
cc -G -Iinclude路径名 C2.c -o libC2.so
cc -G -Iinclude路径名 -lC2 C1.c -o libC1.so


设置环境变量
setenv LD_LIBRARY_PATH libC1.so,libC2.so所在路径
:${LD_LIBRARY_PATH}


运行java应用


14、问:
在Java语言中,如何列出PC机文件系统中的所有驱动器名?

答:
在Java 2版本中,java.io包中的File类新增加了方法listRoots()可以实现这一功能.

15、问:
为什么Runtime.exec("ls")没有任何输出?

答:
调用Runtime.exec方法将产生一个本地的进程,并返回一个Process子类的实例,该实例可用于控制进程或取得进程的相关信息. 由于调用Runtime.exec方法所创建的子进程没有自己的终端或控制台,因此该子进程的标准IO(如stdin,stdou,stderr)都通过Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()方法重定向给它的父进程了.用户需要用这些stream来向 子进程输入数据或获取子进程的输出. 所以正确执行Runtime.exec("ls")的例程如下:


try

{

process = Runtime.getRuntime().exec (command);

InputStreamReader ir=newInputStreamReader(process.getInputStream());

LineNumberReader input = new LineNumberReader (ir);

String line;

while ((line = input.readLine ()) != null)

System.out.println(line);

}

catch (java.io.IOException e){

System.err.println ("IOException " + e.getMessage());

}

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12712263/viewspace-590826/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-31

  • 博文量
    44
  • 访问量
    41502