Java试题大全

J2EE是什么?它包括哪些技术?
解答:从整体上讲,J2EE是使用Java技术开发企业级应用的工业标准
主要包括以下这些技术:
1) Servlet Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面。
对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并发访问的。
2)JSP JSP(Java Server Page)是一种实现普通静态HTML和动态页面输出混合编码的技术。从这一点来看,非常类似Microsoft ASP、PHP等技术。借助形式上的内容和外观表现的分离,Web页面制作的任务可以比较方便地划分给页面设计人员和程序员,并方便地通过JSP来合成。在运行时态,JSP将会被首先转换成Servlet,并以Servlet的形态编译运行,因此它的效率和功能与Servlet相比没有差别,一样具有很高的效率。
3) EJB EJB定义了一组可重用的组件:Enterprise Beans。开发人员可以利用这些组件,像搭积木一样建立分布式应用。
4)JDBC(Java Database Connectivity,Java数据库连接)API是一个标准SQL(Structured Query Language,结构化查询语言)数据库访问接口,它使数据库开发人员能够用标准Java API编写数据库应用程序。JDBC API主要用来连接数据库和直接调用SQL命令执行各种SQL语句。利用JDBC API可以执行一般的SQL语句、动态SQL语句及带IN和OUT参数的存储过程。Java中的JDBC相当于Microsoft平台中的ODBC(Open Database Connectivity)。

您做系统设计用何种工具?
解答:Visio, rational rose,power designer等

什么是Web容器?
解答:容器就是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器,ASP的IIS或PWS都是这样的容器。

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

试述数据库完整保护的主要任务和措施。
解答:数据库的完整性保护也就是数据库中数据正确性的维护。数据库完整性包括三个内容:实体完整性规则,参照物完整性规则以及用户定义完整性规则。 前两个是有DBMS自动处理。实体完整性规则是说针对于基表中的关键字中属性值不能为空值,是数据库完整性的基本要求,主关键字和元组的唯一性对应。
参照物完整性规则是不允许引用不存在的元组:即基表中的外关键字要么为空,要么关联基表中必存在元组。
用户定义完整性规则针对具体的数据环境由用户具体设置的规则,它反应了具体应用中的语义要求。 一个完整性规则一般由下面三部分组成:完整性约束条件设置,完整性约束条件的检查以及完整性约束条件的处理.后两部分在数据库中一般有相应的模块处理。另外触发器也可以做完整性的保护,但触发器大量用于主动性领域。

请说明SQLServer中delete from tablea & truncate table tablea的区别
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,使HWK值为0,不需要 rollback segment .而Delete是DML操作需要rollback segment 且花费较长时间.

类有哪三个基本特性?各特性的优点?
解答:类具有封装性、继承性和多态性。
封装性:类的封装性为类的成员提供公有、缺省、保护和私有等多级访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
继承性:类的继承性提供从已存在的类创建新类的机制,继承(inheritance)使一个新类自动拥有被继承类(父类)的全部可继承的成员。
多态性:类的多态性提供类中方法执行的多样性,多态性有两种表现形式:重载和覆盖。
重载:同一个类里,同函数名,但是函数的参数个数或类型不同,有多态
覆盖:有虚关键字,有多态
隐藏:没有虚关键字

谈谈对XML的理解?说明Web应用中Web.xml文件的作用?
解答:扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
web.xml的作用是配置欢迎页,servlet,filter,listener等的。

jsp有哪些内置对象?作用分别是什么?(至少三个)
解答:
1)request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header和session数据的有用的方法。
2)response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)。
3)out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
4)pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。 5)session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。
6)application 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。
7)config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
8)page表示从该页面产生的一个servlet实例。
9)exception 针对错误网页,未捕捉的例外

事务是什么?有哪些属性,并简要说明这些属性的含义。
解答:事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

Collection 和 Collections的区别?
解答:Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类。

HashMap与TreeMap的区别?
解答:HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

ArrayList和Vector的区别?
解答:同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的;数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。

HashMap和Hashtable的区别?
解答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都实现了Map接口,主要区别
在于HashMap允许空(null)键值(key),由于非线程安全,效率上高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hastable的方法是synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供同步。

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

简要描述如何结合struts、hibernate、spring开发Web应用?
解答:Struts可以将jsp页面的表单关联起来,就是把JSP页面的表单数据封装成javaBean,这样的话,在action中你再也不需要使用传统的request.getParameter(“name”);还有struts有一个控制器,你在struts编程中的控制器(XxxAction)都是继承总的ActionServlet,它能集中处理请求,然后转到相关的页面。还有struts的表单验证组件,不用你写js验证了,只需要你配置一下文件就可以了。另外struts的令牌机制可以防表单重复提交。
Spring 是一个轻量级容器,非侵入性.包含依赖注入,AOP等。它是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。
Hibernate:它可以让我们以OO的方式操作数据库,这让我们看到了hibernate的强大之处,体验到操作数据的方便。但hibernate最耀眼之处是hibernate的缓存机制,而不是以OO的方式操作数据库。Hibernate的缓存机制不外乎是一级缓存session,二级缓存sessionFactory,和第三方缓存如ehcache。也就是hibernate的最强大的地方是它的缓存,理解了这个才能真正的理解hibernate,Hibernate的命名查询/命名参数查询,就是将hql语句放在一个单独的xml文件之中,它仍然让人们以面向对象的方式去操纵数据,而不用在以OO的方式写着代码的同时,然后再转变思维,用面向关系的方式去写那些sql语句。但hibernate不仅做了这些,它的native sql查询方式,完全满足sql语句的偏爱者,它像ibatis一样,将sql语句放在配置文件之中。

说明反转控制(IOC)和面向方向编程(AOP)在spring中的应用
解答:Spring 核心容器(Core)提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(Ioc)模式将应用程序的配置和依赖性规范与实际的应用代码程序分开。Spring的声明式事务基于AOP实现,却并不需要程序开发者成为AOP专家,亦可轻易使用Spring的声明式事务管理。

列出自己常用的jdk包.
解答:
java.lang: 这个是系统的基础类,比如String等都是这里面的,这个package是唯一一个可以不用import就可以使用的Package
java.io: 这里面是所有输入输出有关的类,比如文件操作等
java.net: 这里面是与网络有关的类,比如URL,URLConnection等。
java.util : 这个是系统辅助类,特别是集合类Collection,List,Map等。
java.sql: 这个是数据库操作的类,Connection, Statememt,ResultSet等

List、Map、Set三个接口存储元素时各有什么特点?
解答:
1)List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
2)Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
3)Map接口 :请注意,Map没有继承Collection接口,Map提供key到value的映射

简述基于Struts框架Web应用的工作流程
解答:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中, 当ActionServlet接收到一个客户请求时,将执行如下流程. 1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; 2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; 3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; 4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActionErrors对象, 就表示表单验证成功; 5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; 6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件; 7)ActionForward对象指向JSP组件生成动态网页,返回给客户;

在项目中用过Spring的哪些方面?及用过哪些Ajax框架?
解答:在项目使用过Spring IOC ,AOP,DAO,ORM,还有上下文环境。
在项目使用过Ext,Juery等Ajax框架.

abstract class和interface有什么区别?
解答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。新型多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,所有成员变量都是public static final的。一个类可以实现多个接口,当类实现接口时,必须实现接口的所有方法。抽象类在Java语言中表示的是一种单继承的关系,对于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。;抽象类中可以定义自己的成员变量,也可以包含非抽象的方法,而在接口中只能有静态的常量,所有方法必须是抽象的;实现抽象类时可以只实现其中的部分方法,而要是实现一个接口的话就必须实现这个接口中的所有抽象方法。

MVC模式中M,V,C每个代表意义,并简述在Struts中MVC的表现方式。
解答:
MVC是Model-View-Controller 的缩写,Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View 是应用的表示层(由JSP页面产生)Controller是通过应用的处理过程控制,(一般是一个servert)通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。
在Struts框架中Controller功能由ActionServlet和ActionMapping对象构成,核心是一个Servlet类型的对象ActionServlet,它用来接收客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分的Action处理器对象之间的映射。Model部分由Action和ActionForm对象构成。所有的Action处理器对象都是开发者从Struts的Action类派生的子类。Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。Struts提供的ActionForm组件对象可以通过定义属性描述客户端表单数据,开发者可以从它派生子类对象,并利用它和Struts提供的自定义标记库相结合,可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持(View部分是通过JSP技术实现的)。Struts提供了自定义的标记库,通过这些自定义标记库可以非常容易地和系统的Model部分交互,通过使用这些自定义标记库创建的
JSP表单,可以实现对Model部分中的ActionForm的映射,完成对用户数据的封装。

java语言中public、private、protected三个关键字的用法,重写和重载的区别。
解答:
作用域 当前类 同包 子类 其它
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;
重载:发生在同一个类中,方法名相同,但是参数不同(类型不同或个数不同或参数的顺序不同),返回值可以不相同。

JSP页面之间传递参数的方法有哪些?
解答:1)request2)session3)application4)提交表单5)超链接

forward 和redirect的区别
解答:forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

Java反射机制的作用?
解答:Java反射机制的作用是:
1)在运行时判断任意一个对象所属的类。
2)在运行时构造任意一个类的对象。
3)在运行时判断任意一个类所具有的成员变量和方法。
4)在运行时调用任意一个对象的方法

你是怎么理解java的泛型的?
解答: 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

JAVA源文件中是否可以包括多个类,有什么限制
解答:一个java源文件中可以包含多个类,每个源文件中至多有一个public类,如果有的话,那么源文件的名字必须与之相同。如果源文件中没有public类,则源文件用什么名字都可以,但最好还是具有特定的意义,免得自己都不记得里面写的是什么了。

在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案
解答:
1)数据库设计方面:
a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0
c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。若应用系统需要频繁更新索引数据列,那么需要考虑是否应将该索引建为索引。
f. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
g. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
h. 尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。
i. 避免频繁创建和删除临时表,以减少系统表资源的消耗。
j. 临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。
k. 在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
l. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。
2)SQL语句方面:
a. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
b. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20
c. in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3
d. 下面的查询也将导致全表扫描: select id from t where name like ‘%abc%’
e. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num
f. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2
g. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)=’abc’–name以abc开头的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 应改为: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′
h. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
i. 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(…)
j. 很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)
k. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
l. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
m. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
n. 尽量避免大事务操作,提高系统并发能力。
3)java方面:
a.尽可能的少造对象。
b.合理摆正系统设计的位置。大量数据操作,和少量数据操作一定是分开的。大量的数据操作,肯定不是ORM框架搞定的。,
c.使用jDBC链接数据库操作数据
d.控制好内存,让数据流起来,而不是全部读到内存再处理,而是边读取边处理;
e.合理利用内存,有的数据要缓存

请解释分布式事务管理?
解答:分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。为了实现分布式事务,需要使用下面将介绍的两阶段提交协议。 阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。这些日志是永久性的,因此,这些日志会幸免遇难并且在失败之后可以重新对所有资源进行更新。 阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。 在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。 为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息,IIOP便是这种协议。这就要求不同开发商开发的事务参与者必须支持一种标准协议,才能实现分布式的事务。

请写出一段表单提交的HTML代码,表单名称为form1,提交方式为post,提交地址为submit.asp
解答:
<form name=”form1” method=”post” action=”submit.jsp”>
<input type=”submit”>
</form

请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件。
<a href=”mailto: zhangsan@d-heaven.com”>发邮件</a>

请说明meta标签的作用。
解答:
meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个:
name 属性
1).<meta name=”Generator” contect=”">用以说明生成工具(如Microsoft FrontPage 4.0)等;
2).<meta name=”KEYWords” contect=”">向搜索引擎说明你的网页的关键词;
3).<meta name=”DEscription” contect=”">告诉搜索引擎你的站点的主要内容;
4).<meta name=”Author” contect=”你的姓名”>告诉搜索引擎你的站点的制作的作者;
5).<meta name=”Robots” contect=
“all|none|index|noindex|follow|nofollow”>
其中的属性说明如下:
设定为all:文件将被检索,且页面上的链接可以被查询;
设定为none:文件将不被检索,且页面上的链接不可以被查询;
设定为index:文件将被检索;
设定为follow:页面上的链接可以被查询;
设定为noindex:文件将不被检索,但页面上的链接可以被查询;
设定为nofollow:文件将不被检索,页面上的链接可以被查询。
6).http-equiv属性
a、<meta http-equiv=”Content-Type” contect=”text/html”;charset=gbk”>
和 <meta http-equiv=”Content-Language” contect=”zh-CN”>用以说明主页制作所使用的文字以及语言;
b、<meta http-equiv=”Refresh” contect=”n;url=http://yourlink”>定时让网页在指定的时间n内,跳转到页面http;//yourlink;
c、<meta http-equiv=”Expires” contect=”Mon,12 May 2001 00:20:00 GMT”>可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;
d、<meta http-equiv=”Pragma” contect=”no-cache”>是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;
e、<meta http-equiv=”set-cookie” contect=”Mon,12 May 2001 00:20:00 GMT”>cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;
f、<meta http-equiv=”Pics-label” contect=”">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;
g、<meta http-equiv=”windows-Target” contect=”_top”>强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;
h、<meta http-equiv=”Page-Enter” contect=”revealTrans(duration=10,transtion=
50)”>和<meta http-equiv=”Page-Exit”
contect=”revealTrans(duration=20,transtion
=6)”>设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。

请写出一个隐藏控件。
解答:<input type=”hidden” name=”userId” value=”10001”>

如何将HTML页面的标题设置为“数字天堂”。
解答:
<html>
<head><title>数字天堂</title></head>
<body>body部分</body>
</html>

请写出JavaScript中常用的三种事件。
解答: onclick,onblur,onChange

请写出一段JavaScript代码,要求页面有一个按钮,点击按钮弹出确认框。程序可以判断出用户点击的是“确认”还是“取消”。
解答:
<HTML>
<HEAD>
<TITLE>click</TITLE>
<Script >
function validateForm()
{
if(confirm(“你确认提交这个表单么?”))
{
alert(“确定”);
}else{
alert(“取消”);
}
}
</Script>
</HEAD>
<BODY>
<FORM NAME=”TEST” action=”FirstJS.htm”>
<INPUT TYPE=”button” NAME=”SUB” VALUE=”提交”onClick=”JavaScript:validateForm()”>
</FORM>
</BODY>
</HTML>

JavaScript如何实现计时功能。
解答:<script> window.setTimeout( “window.location = ‘http://www.csdn.net ‘; “, 35000); </script>

JavaScript如何定义数组。
解答: var arrTest=new Array();

JavaScript能否操作cookie和session?
解答:JavaScript可以操作cookie,但是不能操作session

请用正则表达式匹配出QQ号(假设QQ号码为5—10位);
 ^ \d{5,10}$

String, StringBuffer StringBuilder的区别。
解答:String的长度是不可变的; StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法;线程安全; StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

请写出5种常见到的runtime exception。
NullPointerException:当操作一个空引用时会出现此错误。
NumberFormatException:数据格式转换出现问题时出现此异常。
ClassCastException:强制类型转换类型不匹配时出现此异常。
ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。
ArithmeticException:数学运行错误时出现此异常

数组有没有length()这个方法?String有没有length()这个方法?
解答:数组没有length()方法 它有length属性
String有length()方法。

请写出一个单例模式。
解答:单例模式(Singleton pattern):确保一个类只有一个实例,并提供一个全局的访问点
public class EagerSingleton { private static final EagerSingleton m_instance = new EagerSingleton(); /** * 私有的默认构造子 */ private EagerSingleton() { } /** * 静态工厂方法 */ public static EagerSingleton getInstance() { return m_instance; } }

在java中,List是个接口,那实现List接口的类有哪些,有什么区别?
解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

char类型能否存储一个中文字符?为什么
解答:可以。一个char是两个字节,而一个中文也是两个字节。

Switch选择语句能否作用在String【字符串】上,也就是能否这么写:Switch(一个字符串变量)?
解答:不可以,只能处理int,byte,short,char,(其实是只能处理int,其它三种是可以promotion到int型)不能处理Sring

final
修饰类是不能被继承,修饰方法不能在子类中被覆盖,修饰变量,称为常量,初始化以后不能改变值。

如何启动一个线程
start()

String类有final修饰

Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会执行,在return前执行,也即是finally被插入到return和return之前的代码中间

EJB包含哪3种bean
session bean(会话bean), entity bean(实体bean), message bean(消息bean)

Class.forName(String className)这个方法的作用:
通过类的全名获得该类的类对象

你认为在表上建立索引可以提高数据库系统的效率吗
不一定,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where子句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

error和exception有什么区别?
error表示系统级的错误、程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;
exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架
解答:
1)与spring同类型的开源框架:JUIDE、EJB3.0、picoContainer
2)与hibernate同类型的开源框架 :ibatis,jdo,JPA
3)几个与struts同类型的开源框架:webwork,tapestry,JSF

常用的设计模式有哪些?说明工厂模式
解答: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(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。

什么是数据库的参照完整性?
解答:数据库的参照完整性是指表与表之间的一种对应关系,通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。 有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格进行对照,从而阻止一些不正确的数据的操作。

如何优化数据库,如何提高数据库的性能?
解答:
1) 硬件调整性能 最有可能影响性能的是磁盘和网络吞吐量,解决办法扩大虚拟内存,并保证有足够可以扩充的空间;把数据库服务器上的不必要服务关闭掉;把数据库服务器和主域服务器分开;把SQL数据库服务器的吞吐量调为最大;在具有一个以上处理器的机器上运行SQL。
2)调整数据库
若对该表的查询频率比较高,则建立索引;建立索引时,想尽对该表的所有查询搜索操作, 按照where选择条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
3)使用存储过程
应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现,因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,并且只返回结果集或者数值,这样不仅可以使程序模块化,同时提高响应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。
4)应用程序结构和算法
建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。因为人们在
使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,特别是对数据量不是特别大的数据库操作时,是否建立索引和使用索引的好坏对程序的响应速度并不大,因此程序员在书写程序时就忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在数据量特别大时或者大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!

JS中的三种弹出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
解答:alert confirm prompt

描述JSP和Servlet的区别、共同点、各自应用的范围
解答:JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.

在java语言中int 和 Integer 有什么区别
int是基本数据类型,Integer是int的包装类,属于引用类型

JDK1.5中支持的 for循环的语法
for(type element : array) { System.out.println(element)
} type 集合(不仅仅指Collection,也包含普通的数组)中元素的数据类型 element 遍历到的元素 array 集合对象本身(当然不只是Collection)

简述synchronized和java.util.concurrent.locks.Lock的异同?
主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

如何格式化日期
解答:
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String formatNow=sdf.format(now);
变量formatNow就是格式化好的日期。

将字符“12345”转换成long型
解答: String s=”12345″;
long num=Long.valueOf(s).longValue();

struts中如何实现国际化,涉及哪些文件?
解答:“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区、语言的不同而显示不同的用户界面。Struts框架通过使用<bean:message>标记,以及使用java.util数据包中定义的Locale和ResourceBundle类来支持国际化。java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,struts-config.xml配置文件,web.xml配置文件。

例举在诊断Oracle性能问题时,常用的工具、方法
1)简单一点的可以用toad及dbartisan这样的工具。 2)纯做性能监测,比较出色的有spolight和emc的I3,这两个软件都比较贵。 3)一些网管系统这方面也不错,如hp的openview。不过定制起来不太容易,且很贵。
4)不用花钱又好用的就是Oracle的statpack了。 5)再有就是自己写脚本了,大多数有经验的DBA都喜欢这样的方式。优点是实用灵活。缺点是如果想出一个性能变化的曲线图等图表,且做的美观就需要些delphi,c++builder或是pb的开发功底了。

Oracle启动中,startup nomount、 startup mount 有什么差别?
解答: startup nomount:启动实例,读取参数文件,分配内存空间,启动后台进程,打开跟踪文件和报警文件。startup mount:装载数据库,打开控制文件。nomount方式下还没有读取控制文件,该选项用于在数据库的控制文件全部损坏,需要重新创建数据库控制文件或创建一个新的数据库时使用。mount 选项下并没有打开数据文件,该选项可以用来修改数据库的运行模式或进行数据库恢复。

Oracle启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是什么?
解答:启动数据库,使用startup命令,Oralce将会按照以下顺序在缺省目录中搜索参数文件:spfile<SID>.ora , spfile.ora ,init<SID>.ora a

说明Oracle数据库逻辑备份和物理备份的方式。
解答:Oracle备份包括逻辑备份和物理备份。
1).逻辑备份
数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
a.输出(Export)输出可以是整个数据库、指定用户或指定表。
b.输入(Import)输入将输出建立的二进制转储文件读入并执行其命令。
2).物理备份
物理备份包含拷贝构成数据库的文件而不管其逻辑内容。
Oracle支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup)。
a.脱机备份: 脱机备份用在当数据库已正常关闭,数据库处于”offline”时,要备份下列文件:
所有数据文件
所有控制文件
所有联机日志
init.ora(可选的)
b 联机备份:联机备份可用来备份任何运作在ARCHIVELOG方式下的数据库。在这种方式下,联机日志被归档,在数据库内部建立一个所有作业的完整记录。联机备份过程具备强有力的功能。第一,提供了完全的时间点(point-in-time)恢复。第二,在文件系统备份时允许数据库保持打开状态。

Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?
解答:默认端口为8080,可以通过service.xml的Connector元素的port属性来修改端口。

多线程有几种实现方法,都是什么?同步的方法有几种,都是什么?
解答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。
实现同步也有两种方法:一种是同步方法,另一种是同步代码块。
同步方法是在方法返回类型前面加上synchronized关键字
同步代码块是synchronized (这里写需要同步的对象){…}

谈一下聚簇索引和非聚簇索引的区别以及各自的优缺点。
解答:聚集索引,表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大 非聚集索引,不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很小

死锁的必要条件?怎么克服?
解答:产生死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解决方法:
a 撤消陷于死锁的全部进程; b逐个撤消陷于死锁的进程,直到死锁不存在; c从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。 d从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

描述重做与回滚的认识;
解答:重做日志生成日志文件,是为将来恢复数据库使用的.
回滚段保存未提交数据,是为支持事务而起作用的。

索引组织表,聚蔟表的用途;
解答:
索引组织表:数据按主码存储和排序,同索引结构一样,不过数据直接存储于主码后面。适用于信息.检索、空间和OLAP程序。索引组织表的适用情况:
a.代码查找表。
b.经常通过主码访问的表。
c.构建自己的索引结构。
d.加强数据的共同定位,要数据按特定顺序物理存储。
e.经常用between„and„对主码或唯一码进行查询。数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。
索引聚簇表:索引聚簇表是表相关的表共享同一数据块中的相同列,并把相关数据存储中同一个数据块上。创建索引聚簇表中最重要的是对SIZE参数有很好的估量,否则聚簇将会降低空间利用,降低效率。
使用索引聚簇表的注意点:
a如果表中数据有大量DML操作的话,那么聚簇将不适用,因为会消极地影响到DML性能。
b聚簇中,全表扫描将受到影响。这是因为将扫描聚簇中不同表的数据,额外增加很多无用的数据。
c如果经常TRUNCATE表和装载表的话,聚簇将不适用。聚簇中的表无法被TRUNCATE的,这是因为每个块中不只是存储一张表的数据。
SQL> truncate table emp;
truncate table emp
ERROR at line 1:
ORA-03292: Table to be truncated is part of a cluster
d如果大部分是读取操作,且通过聚簇码索引或聚簇表中其他索引来读取的话,聚簇将会比较适用。

消耗资源的SQL的定位方法;
select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
SELECT * FROM ( SELECT sql_text,buffer_gets,disk_reads FROM v$sql ORDER BY buffer_gets,disk_reads DESC) WHERE ROWNUM<=10;

对触发器的认识;
解答:触发器是表上的程序,主要提供数据添加、修改与删除后的程序处理方法,可以用来检查数据及进行数据更新,也可以分担一些前端应用程序撰写的逻辑规则。用场景: 触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制复杂的业务规则或要求。
触发器的主要应用场合概括起来讲有以下几种:
1).当向一张表中添加或删除记录时,需要在相关表中进行同步操作。比如,当为应用系统添加一个系统用户时,需要同时向权限表中添加该用户的缺省权限,此时就编写系统用户表的触发器在添加记录动作时触发。
2).当表上某列数据的值与其他表中的数据有联系时。比如,当某客户进行欠款消费,可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。
3).当需要对某张表进行跟踪时。比如,当人事表中有人离职时,第一时间通知或更改相关表的值。

对ORA-01555错误的认识;
解答:ORA-01555错误产生的原因:一致性读(Consistent Get)和延迟块清除(Delayed Block Cleanout)。

将ORACLE数据库更改为归档模式;写出步骤

解答:具体步骤如下: 1),以exp方式在线备份数据库到指定位置; 2),观察当前数据库是以服务器参数文件(spfile)方式启动还是以参数文件(pfile)方式启动: SQL> show parameter spfile; NAME TYPE VALUE ———————————— ———– —————————— spfile string /home/db/oracle/10g/dbs/spfile XXXX.ora value后有内容,说明数据库以服务器参数文件方式启动,这里的spfile文件对应的裸设备为/dev/vgdata/rspfile(通过查看/home/db/oracle/10g/dbs/initSID.ora文件内容获得); 3),关闭所有实例(shutdown immediate); 4),任意选取一个实例,创建参数文件到指定路径: SQL>create pfile=’/home/db/oracle/pfile.ora’ from spfile; 5),修改pfile.ora文件,添加参数cluster_database=false; 6),以修改之后的参数文件按nomount方式启动数据库: SQL>startup nomount pfile=’/home/db/oracle/pfile.ora’; 7),使数据库以exclusive方式启动: SQL>alter database mount exclusive; 8),改变归档模式: SQL>alter database archivelog; 9),将pfile参数中的cluster_database重新更改为“true”; 10),更新服务器参数文件: SQL>create spfile from pfile=’/home/db/oracle/pfile.ora’; 11),关闭数据库实例; SQL>shutdowm immediate; 12),分别在两个节点上启动数据库: SQL>startup;
13),在两个节点上分别检查归档模式是否更改成功: SQL>archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /home/db/oracle/10g/dbs/arch Oldest online log sequence 489 Next log sequence to archive 491 Current log sequence 491 完成。





posted @ 2013-09-20 23:12  陈卓生  阅读(1311)  评论(0编辑  收藏  举报