JAVA认证

java程序员面试考试题及答案

时间:2024-08-03 05:11:59 JAVA认证 我要投稿
  • 相关推荐

java程序员面试考试题及答案

  Java编程语言的风格十分接近C语言、C++语言。Java是一个纯粹的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。那么关于java面试的试题有哪些呢?下面yjbys小编为大家分享,希望大家一切小心!

java程序员面试考试题及答案

  WEBLOGIC

  1. WEBLOGIC域里面的服务器分那几种,他们之间的关系是什么?

  管理服务器和托管服务器;

  管理服务器管理托管服务器.

  2. WEBLOGIC部署业务应用时,需要修改哪几个关键配置文件?

  web模块:扩展名.war,配置文件web.xml,

  ejb模块:扩展名.jar,配置文件ejb-jar.xml,

  ear模块:扩展名.ear,配置文件application.xml

  3. WEBLOGIC中如何配置DataSource?DataSource来自什么资源?

  weblogic中通过配置数据库连接池得到连接池资源,然后通过连接池资源可以配置出DataSource

  4. WEBLOGIC中如何配置数据库连接池?主要设置哪些参数?

  可以通过weblogic管理控制台进行配置,也可以手动修改配置文件实现.

  主要设置:

  数据库连接字符串(包括IP,端口,数据库名,访问数据库的用户/密码等),

  数据库驱动程序类路径,

  最大连接数,

  最小连接数等

  http://dev2dev.bea.com.cn/techdoc/2004120203.html

  J2EE

  5. J2ee容器都有那些

  1)、J2EE服务器:是J2EE产品的运行部分。一个J2EE服务器提供EJB容器和Web容器。Enterprise JavaBeans(EJB)容器:管理J2EE应用程序的enterprise bean的执行。Enterprise bean和它的容器运行在J2EE服务器中。

  2)、Web容器:管理J2EE应用程序的JSP页面和servlet组件的执行。Web组件和它的容器也运行在J2EE服务器中。

  3)、客户端应用程序容器:管理应用程序客户端组件的运行。应用程序客户端和它的容器运行在客户端中。

  4)、Applet容器:管理applet的执行。由运行在客户端的一个Web浏览器和Java插件一同组成。

  6. web容器有哪些

  web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接跟容器中的环境变量接口交互,不必关注其它系统问题。主要由WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。

  7. JNDI有什么作用?哪些资源可以通过JNDI查找到?

  通过目录名称访问远程服务,JNDI可以访问数据库连接资源,EJB组件,JMS服务等等

  8. CMT EJB中对数据库进行插入和更新操作,一般配置什么事物属性? Required

  9. CMT EJB中对数据库进行查询操作,一般配置什么事物属性? Support

  10. SessionBean组件中的Remote接口,Home接口主要作用是什么?各有哪些主要的抽象方法?

  Home接口中的主要方法是create方法,该方法返回remote接口对象,Home接口的主要作用就是创建remote接口对象;

  Remote接口主要定义业务抽象方法,在Bean类中实现了这些抽象方法.

  11. 有状态SessionBean中的active方法和deactive方法有什么作用?

  active方法初始化有状态SessionBean中的全局资源,并激活EJB容器中有状态SessionBean对象,使得有状态SessionBean可以为外部提供服务.

  deactive方法去激活EJB容器中有状态SessionBean对象,释放有状态SessionBean中初始化的全局资源.

  12. 如何实现事务控制?

  JDBC事务管理方式 和 JTA事务管理方式

  13. 事务的概念

  事务处理是由以一个单一的逻辑单位完成的一系列操作,它可以由一系列的操作组成,如果在该单位包含的操作执行完毕后没有发生错误,那么它所作的改变就是永久的了。如果一旦有错误发生,它就会滚回,不会作任何修改或改变。

  14. 事务的特点

  Atomicity, Consistency, Isolation, and Durability

  1,原子性(Atomicity)

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

  2,一致性 (Consistency)

  事务在完成时,必须使所有的数据都保持一致状态。

  3,隔离性 (Isolation)

  由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。

  4,持久性 (Durability)

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

  15. EJB中的事务

  (一) EJB中事务处理的属性有:Required,RequiresNew,Mandatory,NotSupported,Supports,Never.

  1、Required:当客户端运行一个事务处理并调用EJB的一个方法,这个方法执行客户端的事务处理;当客户端没有启动一个事务处理,则EJB容器在执行这个方法之前启动一个新的事务处理.

  2、RequiresNew:当客户端运行一个事务处理并调用EJB的一个方法时,容器管理器做如下操作:

  (1) 悬挂客户端的事务处理;

  (2) 开始一个新的事务处理;

  (3) 调用方法;

  (4) 当方法结束,恢复客户端的事物处理.

  当客户端没有启动一个事务处理,容器管理器在执行这个方法之前启动一个新的事务处理.

  3、Mandatory: 当客户端运行一个事务处理并调用EJB的一个方法,这个方法在客户端的事务处理范围内被执行; 当客户端没有启动一个事务处理,容器管理器将会抛错(TransactionRequiredException);

  4、NotSupported: 当客户端运行一个事务处理并调用EJB的一个方法,容器管理器在调用方法之前终止客户端的事务处理,当方法执行完,再恢复客户端的事务处理; 当客户端没有启动一个事务处理,容器管理器在调用方法时不启动事务处理.

  5、Supports: 当客户端运行一个事务处理并调用EJB的一个方法,在运行方法时执行客户端的事务处理; 当客户端没有启动一个事务处理,容器管理器在调用方法时不启动事务处理.

  6、Never: 当客户端运行一个事务处理并调用EJB的一个方法,容器管理器将抛出一个错误(RemoteException); 当客户端没有启动一个事务处理,容器管理器在调用方法时不启动事务处理.

  (二) EJB事务的操作

  如果声明一个bean的事务控制为TX_BEAN_MANAGED,则这个bean可以访问事务服务。当事务控制应用于单个的方法时这个控制只能应用于整个的bean. bean访问事务服务的能力不能只对某个方法起作用。因此一个方法声明事务控制为TX_BEAN_MANAGED,而另一个方法声明为其它不同的事务控制是错误的。厂商的安装工具应该能检测到并报告这个错误。Bean分别通过初始化时setSessionContext()或 setEntityContext()方法的参数 SessionContext或EntityContext来访问事务服务。这些接口都是EJBContext的子类。

  EJBContext的定义如下:

  Public interface javax.ejb.EJBContext {

  public Identity getCallerIdentity();

  public boolean isCallerInRole(Identity other);

  public EJBHome getEJBHome();

  public Properties getEnvironment();

  public UserTransaction getUserTransaction() throwsIllegalStateException;

  public boolean getRollbackOnly();

  public void set RollbackOnly();

  }

  一旦bean获得了一个UserTransaction的引用,就可以用这个引用管理自己的事务。有状态的会话bean的方法可以创建一个事务,而且不用终止事务就可以返回。如果还有线程调用bean的方法,容器检测是否有bean创建的活动的事务,如果被调用的事务是同一个事务,容器会允许该线程重新进入这个bean.如果bean在事务中且执行不同事务上下文的线程试图进入bean,容器会阻塞这个线程直到bean的事务终止。如果线程试图进入事务时 bean不在事务中,线程会执行一个自己的事务,容器会挂起线程当前的事务以允许线程进入。一旦线程离开方法就会恢复线程以前的事务,容器不会终止任何方法创建的事务。

  对于无状态会话bean和实体bean,当事务活动时bean的方法不允许返回。容器会为此抛出一个例外。

  会话同步接口

  有状态和无状态的会话bean都可以访问数据库,并且参与一个事务。为了让bean在事务中执行它的任务,bean开发者可以实现在bean中实现 javax.ejb.SessionSynchronization接口。容器能自动检测这个接口,容器会使用这个接口中的方法以使bean得到事务的状态信息。实体bean不支持这个接口。因为实体bean are implicitly transaction aware,所以容器使用不同的方法控制一个事务中的实体 bean.

  SessionSynchronization接口定义如下:

  public interface javax.ejb.SessionSynchronization {

  public void afterBegin() throws RemoteException;

  public void beforeCompletion() throws RemoteException;

  public void afterCompletion(boolean yn) throws RemoteException;

  }

  实际上一个事务不属于一个特殊的bean的实例。一个客户端或容器中执行的线程创建一个事务,在执行bean中的代码时执行该事务。如果一个有事务上下文的线程将要进入一个会话bean,容器首先调用它的afterBegin()方法。Bean可以记录所有的商业方法运行在事务中,随后执行事务操作。如果一个操作的内部标志显示这个线程在事务外运行,则会拒绝执行事务操作的请求。直到调用afterCompletion()方法,bean会继续认为商业方法的调用都在事务中执行。Bean将推断性地清除内部标志,以表示随后到来的事务请求将被拒绝。

  如果一个事务上下文的线程试图进入一个已经是另一个事务的一部分的Bean时, .Container将封锁入口,直到前一个事务提交或回滚,并且afterCompletion()方法被调用,此时,允许Bean 恢复它的状态。Container负责提供这些行为。当Container发现它将要提交一个事务时,将在这个事务的所有的session Bean上调用beforeCompletion()方法。这就给Bean足够的机会来结束事务的操作,如在提交前将数据写入数据库。反之,当 Container 发现,将要回滚一个事务撕,BeforeCompletion()方法将不会被调用,因为将一个将被回滚的事务所产生的数据写入数据库是没有意义的。

  AfterCompletion()是在一个事务即将提交或回滚时被调用,来通知Bean事务操作的最终结果。Bean可以用这个信息来修正自己的内部状态,但它不能用这个信息来维持任何它将要保存的事务。尽管session Bean可以创建,提交和回滚它自己的事务,但通常不推荐这样做。

  SessionSynchronization接口不提供整合外部和内部事务的能力。如果一个session bean实现了这个接口,则意味着它在方法调用之间要保持事务的状态。特别地,这也暗示在afterBegin()和afterCompletion() 调用之间bean是处于一个事务中。这样,如果一个bean实现了SessionSynchronization接口并且在装配符中声明是无状态的就是一个错误。厂商提供的安装工具应该可以捕捉到并报告这个错误。无状态的session bean可以加入一个事务,但它们不能实现这个接口。事务可以是TX_BEAN_MANAGED,或者container可以在方法入口和从方法的返回上来开始和提交这个事务。Container不可允许在一个现存的事务中有一个线程进入方法,因为无状态的Bean的方法将无法知道正在运行的线程是否正在一个事务中。

  解决这个问题的一个方法是使container挂起现存的事务,强迫方法总是认为线程没有在一个事务性的上下文中运行。有状态的Bran可以不实现这个接口而介入事务。但是,装配符必须要认真地配置以使得商务方法总能在正确的事务状态中运行。Bean自己没有通过这个接口来获得自己的事务的状态的权利。

  加入事务

  EJBContext接口在前面的一节中已经介绍了。其中有两个方法:

  public boolean getRollbackOnly();

  public void setRoolbackOnly();

  这些方法可以有任何bean来使用,而不仅仅是那些声明了其事务控制为bean-managed的bean。事实上,那些处理自己的事务的bean将不会用到这些方法,因为这些方法不是用来和外界的事务管理器进行交流事务状态的。

  当一个bean调用了setRollBackOnly()方法时,它是在向事务管理器询问何时结束将要回滚的当前事务。它将给它所参与的事务的结果一个选票。这些方法还存在于UserTransaction接口中,但由于大多数的bean都不访问这个接口,这些方法必须直接地在EJBContext中提供给bean。注意这个方法并不引发回滚操作,它只是简单地设置标志,表示事务在结束时应该回滚。不象JavaBan属性设置方法,这个方法不以 boolean值作为参数。这个方法是特意设计成这样,以使得一个bean不能够改变另一个bean的回滚请求。一个bean也许希望使用 getRoolBackOnly()方法,来检查当前的事务的状态。如果另一个bean已经标志这个事务为rollback,则正在调用的bean可以推测到并决定不能执行那些在、强制性达到操作,如数据库更新,而这些操作很有可能在事务结束时被反转过来。

  客户划分的事务

  尽管一个JEB厂商所必须的,大服务器厂商也许决定提供一个类,使得用户可以直接访问事务管理器。当需要在同一个上下文中在两个不同的服务器上调用 bean时,用户也许会希望这样做。当然,每个bean的装配符可以允许这样的行为。用户可以创建一个事务,然后在两个不同server上的两个不同的 bean上调用商务方法,而将事务的上下文也作为调用的一部分进行传递。一旦调用结束,用户将推测地结束事务。有container厂商产生的stub和 skeleton将支持事务上下文的隐式传递。

  这里是一个可能的例子:

  Current current = new Current();

  Current.setServiceProvider(txMgrURL);

  Current.create();

  Current.begin();

  Current.doSomeWork();

  RemRef1.doSomeWork();

  RemRef2.doMoreWork();

  Current.commit();

  数据库操作的事务管理

  bean当然希望使用JDBC来建立到数据库的连接,并在其上进行操作。但是,为了符合EJB这种container管理事务的模式,连接不能使用自动提交特性,并且不应该在连接上试图提交或回滚。

  Container的角色是决定在这个事务中执行的所有行为应该提交还是回滚。这里提这样一个问题很好:container如何看到并管理由bean方法内部创建的数据库连接。尽管在规范中没有明确地提到,EJB将只能使用JDBC驱动,而JDBC也正是用来和EJB配合使用的。在数据库连接的创建时,驱动程序透明地将连接注册到正在执行的线程的当前事务中。之后当container决定结束事务时,数据库连接将自动地结束它。用OTS的术语说,数据库连接是不可恢复的资源,有事务服务在container的协助下,隐式地管理。尽管可以在这种情况下使用非事务感知的JDBC Driver,但开发者必须清楚任何在数据库连接上所做的操作都不属于bean的事务,开发者还必须确保在从方法返回之前结束数据库连接事务。试图使用 SessionSynchronization接口来合并数据库连接事务和bean本身的事务是不可靠的,是不应该作的。

  分布事务的支持

  一个分布事务在下面的情况下是需要的:

  . 一个用户使用用户划分的在多个server上的多个bean中创建和调用方法的事务。

  . 一个在其他的server上调用其他EJB的方法的bean的方法。

  对于这些工作厂商必须为EJBObject生成stub和skeleton来隐式地获得当前事务的上下文,同时将其通过方法调用传到远程bean。当将商务方法调用委派给bean时,远程bean的EJBObject的skeleton必须请求这个事务的上下文

  16. JDBC控制事务

  在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个 SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个SQL语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,SQL语句不会得到事务确认。在最近一次commit()方法调用之后的所有SQL会在方法commit()调用时得到确认。出现异常时,rollback对事务进行回滚。

  17. JTA事务管理方式

  Java事务API(Java Transaction API,JTA)用于为EJB组件提供与数据库管理器无关的事务组件管理方式。JTA作为Java事务服务(Java Transaction Service,JTS)的高层应用编程接口,使得在组件程序设计过程中可以利用JTA中的相应方法控制组件的事务范围以及事务管理方式。请读者看下面的代码:

  public void doAnotherThing(){

  UserTransaction ut = context.getUserTransaction();

  try{

  ut.begin();

  demoBusinessMethod();

  ut.commit();

  }catch (Exception exp){

  try{

  ut.rollback();

  }catch(SystemException exp1){

  throw new EJBException("Rollback failed: " + exp1.getMessage());

  }

  throw new EJBException("Transaction failed: " + exp.getMessage());

  } }

  在上面的代码中,读者首先看到用户事务接口对象UserTransaction。在该接口中定义了用于确定组件事务范围以及控制组件事务过程的 begin、commit和rollback方法。在组件方法执行之前首先调用UserTransaction接口中的begin方法确定组件的事务过程开始,在组件商务方法执行过程中如果没有发生异常,则调用commit方法提交事务范围内方法的运行结果,否则调用rollback方法将方法运行结果回滚并抛出EJBException类型异常。

  事务管理方式总结

  对于不同类型的EJB组件,在组件开发和组装可以选择不同的组件事务管理方式。下表对不同类型EJB组件适用的事务管理方式进行了总结:

  表1 组件类型与可选事务管理方式汇总表

  组件类型 容器事务管理方式 组件事务管理方式

  JDBC JTA

  会话组件 Y Y Y

  实体组件 Y N N

  消息驱动组件 Y Y Y

  从上表可以看出:除了实体组件不能采用JDBC和JTA事务管理方式外,其它任何事务管理方式均适用于所有类型的EJB组件。

  18. 使用事务的技巧:

  (1) 一个事务不要涉及太多的操作.

  (2) 容器管理和bean管理的事务

  事务既耗费应用服务器中的资源,又耗费数据库资源,所以事务越短越好.

  尽量使用容器管理事务而不要采用bean管理事务的方式.

  (3) ejb遇到错误,需要强制事务回滚. 使用EJBObject.setRollbackOnly();

  (4) 不能让事务涉及web层和表示逻辑

  (5) 企业应用中不应当选用supports 事务属性,因为只有调用者开始一个事务后,ejb才能在事务中运行.

  19. J2ee的认识

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

  20. 简述EJB

  (1)企业JavaBean(Enterprise JavaBean,EJB)为开发服务器端企业应用程序组件提供了一个模型,利用这个模型开发用来创建可移植与分布式企业应用程序的服务器企业应用程序组件,比创建独立的企业应用程序所需使用的企业应用程序组件更为简单。

  (2)EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。

  (3) 开发EJB的主要步骤一般来说,整个的开发步骤(开发,配置,组装)包括如下几个方面。

  开发:首先要定义三个类:Bean类本身,Bean的本地和远程接口类。

  配置:配置包括产生配置描述器-这是一个XML文件、声明了Enterprise Bean的属性、绑定了bean的class文件(包括stub文件和skeleton文件)。最后将这些配置都放到一个jar文件中。还需要在配置器中定义环境属性。

  组装应用程序:包括将Enterprise beans安装到Server服务器中,测试各层的连接情况。程序组装器将若干个Enterprise Beans与其它的组件结合起来,组合成一个完整的应用程序;或者将若干个Enterprise beans组合成一个复杂的Enterprise Bean?管理Enterprise Bean

  21. jdbc的批处理流程

  两种

  (1) Connection con = db.getConn();

  con.setAutoCommit(false);

  Statement stmt = con.createStatement();

  stmt.addBatch("INSERT INTO test VALUES(’1’,’1’)");

  stmt.addBatch("INSERT INTO test VALUES(’2’,’2’)");

  int[] updateCounts = stmt.executeBatch();

  con.commit();

  (2)connection.setAutoCommit(false);

  PreparedStatement statement =

  connection.prepareStatement("INSERT INTO TABLEX VALUES(?, ?)");

  statement.setInt(1, 1);

  statement.setString(2, "Cujo");

  statement.addBatch();

  statement.setInt(1, 2);

  statement.setString(2, "Fred");

  statement.addBatch();

  statement.setInt(1, 3);

  statement.setString(2, "Mark");

  statement.addBatch();

  int [] counts = statement.executeBatch();

  connection.commit();

  JAVA框架

  22. transaction有那几种实现(事务处理)(Spring)

  在Spring中,事务处理主要有两种方式

  (1) 代码控制事务

  在程序中引入新的模版类,这个类封装了事务管理的功能

  (2) 参数配置控制事务

  在Application-Context.xml增加一个事务代理(UserDAOProxy)配置,

  23. IBATIS中的事物属性怎么配置

  SQL MAP XML配置文件中的transactionManager

  24. STRUTS的配置文件是什么?

  struts-config.xml

  ORACLE

  25. Oracle中的事务

  Oracle在缺省情况下任何一个DML语句都会开始一个事务,直到用户发出Commit或Rollback操作,这个事务才会结束。在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令。

  (1) 提交事务

  提交一事务,即将在事务中由SQL语句所执行的改变永久化。在提交前,ORACLE已有下列情况:

  在SGA的回滚段缓冲区已生成回滚段记录,回滚信息包含有所修改值的老值。

  在SGA的日志缓冲区已生成日志项。这些改变在事务提交前可进入磁盘。

  对SGA的数据库缓冲区已作修改,这些修改在事务真正提交之前可进入磁盘。

  在事务提交之后,有下列情况:

  对于与回滚段相关的内部事务表记录提交事务,并赋给一个相应的唯一系统修改号(SCN),记录在表中。

  在SGA的日志缓冲区中日志项由LGWR进程写入到在线日志文件,这是构成提交事务的原子事务。

  在行上和表上的封锁被释放。

  该事务标志为完成 。

  注意:对于提交事务的数据修改不必由DBWR后台进程立即写入数据文件,可继续存储在SGA的数据库缓冲区中,在最有效时将其写入数据文件。

  (2) 回滚事务

  回滚事务的含义是撤消未提交事务中的SQL语句所作的对数据修改。ORALCE允许撤消未提交的整个事务,也允许撤消部分。

  在回滚整个事务(没有引用保留点)时,有下列情况:

  在事务中所有SQL语句作的全部修改,利用相应的回滚段被撤消。

  所有数据的事务封锁被释放。

  事务结束。

  当事务回滚到一保留点(具有SAVEPOINT)时,有下列情况:

  仅在该保留点之后执行的语句被撤消。

  该指定的保留点仍然被保留,该保留点之后所建立的保留点被删除。

  自该保留点之后所获取的全部表封锁和行封锁被释放,但指定的保留点以前所获取的全部数据封锁继续保持。

  该事务仍可继续。

  (3) 保留点

  保留点(savepoint)是在一事务范围内的中间标志,经常用于将一个长的事务划分为小的部分。保留点可标志长事务中的任何点,允许可回滚该点之后的工作。在应用程序中经常使用保留点;例如一过程包含几个函数,在每个函数前可建立一个保留点,如果函数失败,很容易返回到每一个函数开始的情况。在回滚到一个保留点之后,该保持点之后所获得的数据封锁被释放。

  26. 视图在什么情况下可以对其,删除,修改操作:

  DML操作应遵循的原则:

  1).简单视图可以执行DML操作;

  2). 在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能删除数据行;

  3).在视图不出现下列情况时可通过视图修改基表数据或插入数据:

  a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字;

  b.使用表达式定义的列;

  c.ROWNUM伪列。

  d.基表中未在视图中选择的其他列定义为非空且无默认值。

  WITH CHECK OPTION 子句限定:

  通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行,

  因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。

  视图的删除:

  DROP VIEW VIEW_NAME语句删除视图。

  删除视图的定义不影响基表中的数据。

  只有视图所有者和具备DROP VIEW权限的用户可以删除视图。

  视图被删除后,基于被删除视图的其他视图或应用将无效。

  27. oracle中各种连接的写法:

  内连接,外连接 ,左外连接,右外连接

  以上几种连接一般用于多表之间复杂的查询,

  下面先说说内连接,也即相等连接,如右两张表 dept ,employee,

  dept里有字段deptid,deptname,employee有字段empno,deptid,ename,sal,age等

  那连接查询语句如下:select A.* ,B.* from dept A,employee B where A.deptid=B.deptid

  一般出现这种情况的是一张是主表,另一张是子表,主表的主键作为子表的外键,显示结果按照子表的显示,内连接简单,这里就不多说了

  外连接在oralce里用(+)表示,先看例子

  select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where emp.deptno(+) =dept.deptno

  这是一个右连接

  看下面的例子

  select empno,ename,sal,emp.deptno,dept.deptno from emp,dept where dept.no=emp.deptno(+)

  这是一个左连接

  两个查询显示的查询结果是一样的,刚开始学oracle的时候很多人都很难明白这个,现在有个笨办法,

  大家不防记下来,(+)出现查询条件的左边即右连接,出现在右边即左连接。(+)可以放在左边也可以

  放在右边,但是一定要放在缺少条件的那一边,如上面的例子中,如果公司最近准备成立一个新的部门,

  测试部门,但现在还没有招新员工,而现在Boss想知道公司有知道公司的员工在那个部门并且想知道

  没有员工的部门,我们可以用上面的查询语句实现。

  左外连接(left outer join)和右外连接(reght outer join)如同上面的外连接,查询的结果是一样的。

  左外连接:select empno,ename,sal,emp.deptno,dept.deptno from dept left outer join emp on (emp.deptno=dept.deptno)

  右外连接:select empno,ename,sal,emp.deptno,dept.deptno from emp reight outer join dept on (emp.deptno=dept.deptno)

  以上显示的结果和外连接查询出来的结果是一样的,只是写法不一样而已,实际工作中外连接用的比较多,没有必要都要去用它,但是概念大家一定要了解。

  全外关联 :FULL OUTER JOIN

  SELECT e.last_name, e.department_id, d.department_name

  FROM employees e

  FULL OUTER JOIN departments d

  ON (e.department_id = d.department_id);

  结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。

  28. 查询的优化

  1).根据查询条件建立合适的index

  2).因为SQL是从右向左解析,多表查询时,记录数少的表放在右边

  3).多个条件时,收敛快的条件放在右边。

  4).避免使用复杂的集合函数,象not in等。

  5).避免在条件中对字段进行函数操作

  6).尽量避免使用select *,应该写出需要查询的字段

  7).在java中尽量使用preparestatement执行sql,从而共享执行计划"

  29. 怎么看执行计划

  使用explain或者autotrace查看执行计划

  30. 如何强制一个SQL语句使用索引? 使用index hints

  31. Oracle中的PL/SQL块是否熟悉?Oracle中的内置函数是否熟悉?

  内置函数:ASCII,CHR,CONCAT, decode,to_date,to_char,to_number等等

  32. 如何取一个没有排序的查询结果中的前10条记录?

  select fielda from tablea where rownum<=10;

  33. 问:如何取一个有排序的查询结果中的前10条记录?

  select fielda from

  (select fielda from tablea order by fieldb )

  where rownum<=10;

  错误写法:select fielda from tablea where rownum<=10 order by fieldb;

  34. 如何取一个没有排序的查询结果中的第11条到第20条记录?

  select fielda from

  (select fielda,rownum rn from tablea where rownum<=20)

  where rn>=11;

  35. 如何取一个有排序的查询结果中的第11条到第20条记录?

  select fielda from

  (select fielda ,rownum rn from

  (select fielda from tablea order by fieldb )

  where rownum<=20

  ) where rn>=11;

  36. 数据库设计中,主键的作用?

  主键的作用保持数据表记录的唯一性,建立主键索引和作为外键使用.使用主键与外键的配对来表示实体间的连接.

  37. Oracle数据库设计中,建立外键的方法?

  (1)用Create table命令语句在设计数据库表时建立外键

  Create table Depart (

  DepNO Number(2),

  DepName varchar2(10),

  CONSTRAINT pk_dept PRIMARY KEY (DepNO)

  );

  Create table Emp (

  EmpNo Number(4),

  EmpName varchar2(20),

  DepNo CONSTRAINT fk_deptno References Depart(DepNo)

  );

  (2)用Alter table命令语句,为一个存在的表添加外键

  Create table Depart (

  DepNO Number(2),

  DepName varchar2(10),

  CONSTRAINT pk_dept PRIMARY KEY (DepNO)

  );

  Create table Emp(

  EmpNo Number(4),

  EmpName varchar2(20),

  DepNo Number(2)

  );

  Alter table Emp

  ADD CONSTRAINT fk_deptno Foreign key(DepNo) References Depart(DepNo);

  JAVA

  38. jsp内置对象

  1).HttpServletRequest类的Request对象

  2).HttpServletResponse类的Respone对象

  3).JspWriter类的out对象

  4).HttpSession类的session对象

  5).ServletContex类的application对象

  6).PageContext类的PageContext对象

  7).ServletConfig类的Config对象

  8)Object类的Page(相当于this)对象

  9)Exception

  39. Servlet中的主要方法有哪些?各有什么作用?

  init方法初始化Servlet

  service方法是Servlet中的业务方法,根据请求方式调用不同的doXXX(doGet方法或doPost方法等)响应请求

  destroy方法释放Servlet资源

  40. 接口Interface有什么作用?使用接口主要有什么好处?

  1) .接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现;

  2).利用接口可达到实现多继承的目的;

  3).可以在不暴露对象的类的前提下,暴露对象的编程接口.

  41. static和final修饰类,修饰方法和修饰属性时表示什么?

  static可以修饰类,方法,属性,分别表示静态类,静态方法,静态属性

  final修饰类表示类是最终类,不可再被继承

  final修饰方法表示方法不可被子类重写(override)

  final修饰属性表示属性是常量

  42. 自定义标签有什么作用?

  方便JSP页面代码的维护,代码重用

  43. 数据库连接对象使用以后在何处释放?

  try{}catch(){}finally{} 在finally{}中释放数据库连接对象

  44. 异常对象如何分级捕获?

  最底层的异常对象(子类异常)放在最前面,越高层的异常对象(父类异常)越放在后面

  45. 重载(overload)和重写(override)是什么?

  重载(overload)为类似功能的方法提供了统一的名称,但是根据参数列型态的不同,而自动呼叫对应的方法

  重写(override)是子类继承父类的方法,但是在子类中有不同的方法实现

  46. 工作中使用过哪些设计模式?请举2至3个例子并说明使用场景.

  工厂模式,单态模式,Facade模式等等

  47. 什么时候释放connection

  应该在finally{}语句块里释放connection;

  finally{

  if (conn != null)

  conn.close();

  }

  48. 异常处理,如何处理多个异常?

  异常处理的语句是try{}catch(){}finally{}

  当有多个catch()语句,来处理多个异常的话,强调(如果一个异常是另个异常的子类的话,在并行处理的时候子类的异常不会抓到);

  49. 可以在try语句模块里释放connection吗?可以.

  50. jsp标签的作用和好处

  答:主要用来显示结果数据,用来沟通表示层和业务逻辑层,把页面美工工作和程序编写分开。

  51. statement对象有多少种,以及作用和用法

  答:三种,分别为statement,PreparedStatement,CallableStatement

  作用是:建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句.

  1).PreparedStatement对象有可能比 Statement 对象的效率更高,因为它已被预编译过并存放在那以供将来使用。

  2).由方法 prepareCall 所创建。CallableStatement 对象用于执行 SQL

  储存程序 ─ 一组可通过名称来调用(就象函数的调用那样)的SQL 语句。CallableStatement 对象PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和INOUT 参数的方法。

  特别强调:如果数据库支持已存储过程,则可从 JDBC 中调用它们,CallableStatement可调用存储过程语法为:

  {call procedure_name[(?, ?, . . .)]}

  52. Final,finalizer,finally区别和各自的用法

  final—修饰符

  如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。

  将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。

  被声明为final的方法也同样只能使用,不能重载。

  finally—程序控制字

  在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。例如下面语句

  Try{

  语句1

  }

  catch(){

  语句2

  }

  finally{

  语句3

  }

  语句3始终都会执行

  finalize—方法名

  Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

  53. equals,toString,hasCode三个方法

  Equals:比较的两个对象不愿是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较.

  toString: 返回代表该对象的一个字串。一般的,toString方法返回该对象‘文字描述’的字串。返回的结果(即字串)应该是简明且易读的信息。建议所有继承类覆盖该方法

  hasCode:(杂凑码)会根据对象型别、个数及内容等计算出所对应的内存识别值,相同对象与内容会计算出相同的hasCode。

  54. 什么时候会使用hasCode

  hascode是用hashTable的时候为了检索才用的

  55. Hashtable和hashmap的区别

  共同点:都属于Map接口的类,实现了将惟一键映射到特定的值上。

  区别:(1)HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

  (2)Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。因为它是同步的它比HashMap 慢。线程安全性比较好

  56. 问:举例介绍java中有哪些集合?

  答:主要有LinkedList,ArrayList,Vector等

  下面是详细

  Collection

  ├List

  │├LinkedList

  │├ArrayList

  │└Vector

  │ └Stack

  └Set

  Map

  ├Hashtable

  ├HashMap

  └WeakHashMap

  57. ArrayList,Vector,LinkedList的区别

  答:

  (1) ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。

  (2) Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差

  (3) LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

  58. 说说抽象类和接口的区别。

  (1)抽象类可以提供某些方法的实现。如果向抽象类中加入一个新的具体的方法,那么所有的子类一下子就得到了这个方法。接口做不到这一点!(这也许是抽象类的唯一优点)。

  (2)因java的单根结构限制,子类只能实现一个抽象类类型,而接口类型则无此限制。这使抽象类作为类型定义工具的效能落后于接口。接口是定义混合类型(实现多重继承)的理想工具。

  (3)从代码重构的角度上讲,将一个具体类从构成一个接口类型实现起来更容易。

  接口可以实现接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。

  59. Severlet的认识,有那些方法

  Severlet的生命周期:

  web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

  主要方法:

  public void init(ServletConfig config)

  public ServletConfig getServletConfig()

  public String getServletInfo()

  public void service(ServletRequest request,ServletResponse response)

  public void destroy()

  60. 如何做一个队列?

  队列是设计程序中常用的一种数据结构。它类似日常生活中的排队现象,采用一种被称为“先进先出”(LIFO)的存储结构。数据元素只能从队尾进入,从队首取出。在队列中,数据元素可以任意增减,但数据元素的次序不会改变。每当有数据元素从队列中被取出,后面的数据元素依次向前移动一位。所以,任何时候从队列中读到的都是队首的数据。

  Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector可以快速实现JAVA的队列类。

  方法说明

  enq(x) 向队列插入一个值为x的元素;

  deq() 从队列删除一个元素;

  front() 从队列中读一个元素,但队列保持不变;

  empty() 判断队列是否为空,空则返回真;

  clear() 清空队列;

  search(x) 查找距队首最近的元素的位置,若不存在,返回-1

  其他

  61. 条件覆盖、分支覆盖等属于哪种测试

  62. 对CMM五个级别的解释。

  (1)初始级。软件过程的特点是杂乱无章,有时甚至混乱,几乎没有明确定义的步骤,成功完全依赖个人努力和英雄式核心人物,管理是反应式(消防式)。

  (2)可重复级。建立了基本的项目管理过程来跟踪成本、进度和功能特性,制定了必要的过程纪律,能重复早先类似应用项目取得成功。

  (3)确定级。管理和工程的软件过程已文件化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来发展和维护软件。

  (4)管理级。制定了软件过程和产品质量详细的度量标准。软件过程和产品的质量都被开发组织的成员所理解和控制。

  (5)优化级。加强了定量分析,通过来自过程质量反馈和来自新观念、新科技的反馈使过程能不断持续地改进。

  跳跃无限

  易慰怀

【java程序员面试考试题及答案】相关文章:

Java程序员面试题及答案09-23

2017年Java程序员面试题及答案08-09

初级java程序员面试要求07-12

java初级程序员面试题「经典」07-24

初级java程序员面试经验分享07-29

2017年经典的JAVA面试题及答案08-17

NIIT认证Java面试题及答案08-27

Sun-Java程序员认证考试题库10-26

2017年Java程序员面试题集10-15

2024年java多线程面试题及答案09-04