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 完成。



相关文章
相关标签/搜索