Vincent.Chan‘s Blog

常用链接

统计

积分与排名

网站

最新评论

java面试的一些常见问题总结

Java基础方面:

1,作用域public,protected,private,以及不写时的区别

2,ArrayList和Vector的区别,HashMap和Hashtable的区别

3,char型变量能不能定义为一个中文?为什么?

4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?

5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?

6,内部类的实现方式?

7,垃圾回收机制,如何优化程序?

8,float型float f=3.4是否正确?

Jsp方面

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

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

3,include的两种实现方式的区别?

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

Servlet方面

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

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

Jdbc,Jdo方面

1,可能会让你写一段Jdbc连Oracle的程序.

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

3,Jdo是什么?

Xml方面

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

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

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

EJB方面

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

MVC方面

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

设计模式方面:

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

JavaScript方面

      1,如何校验数字型?

CORBA

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


谁来做出解答阿!
-------------------------------------------------------------
回答一部分。
1,作用域public,protected,private,以及不写时的区别
public 在其他的包中的类也可以引用,protected只限于同一个包内的类,private只有自己可以使用。不写的时候和protected一样。
2,ArrayList和Vector的区别,HashMap和Hashtable的区别
ArrayList需要预先定义大小,Vector不用。HashMap和Hashtable的默认初始化容量(default initial capacity)不同 HashMap是16,Hashtable为11。
3,char型变量能不能定义为一个中文?为什么?
可以定义。因为中文也是16bit的。
4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?
查看jdk文档。
5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
这个具体的去看。
6,内部类的实现方式?
内部类”是在另一个类的内部声明的类。从Java 1.1开始,你可在一个类中声明另一个类,这与声明字段和方法非常相似。
7,垃圾回收机制,如何优化程序?
在变量不使用的时候将其赋值为null。
8,float型float f=3.4是否正确?
不行。类型不匹配。改为float f=3.4f。

Servlet方面

1,说一说Servlet的生命周期?
Servlet的生命周期是当服务器装载运行servlets,接收来自客户端的多个请求并且返回数据给客户端,然后再删除移开servlets的时间。
2,Servlet版本间(忘了问的是哪两个版本了)的不同?
我个人认为这个问题没有什么实际意义。
Jdbc,Jdo方面

1,可能会让你写一段Jdbc连Oracle的程序.
有通式。Connection conn = null;
        String driver = "oracle.jdbc.driver.OracleDriver";
        String url = "jdbc:oracle:thin:@xxx:1521:xxx";
        String user = "xxx";
        String password = "xxx";
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(url, user, password);
        }
        catch (ClassNotFoundException e)
        {
            System.err.print("ClassNotFoundException: Load jdbc-driver failure!");
            System.err.println(e.getMessage());
        }
        catch (SQLException e)
        {
            e.printStackTrace();
            try
            {
                if (conn != null)
                {
                    conn.close();
                    conn = null;
                }
            }
            catch (SQLException se)
            {
            }
        }
2,Class.forName的作用?为什么要用?
返回一个指定名称的class对象。用它是为了load你指定名称的class。
3,Jdo是什么?
全称Java Data Objects。提供了在事务处理数据库中Java对象模型的明显的持久性,直接支持了Java类的实例,应用程序不用处理任何其它的数据模型。

Xml方面

1,xml有哪些解析技术?区别是什么?
1) CSS是Cascading Style Sheet的缩写,即“层叠样式表”,在1997年W3C颁布HTML4标准的同时也公布了有关样式单的第一个标准CSS1。
2)XSL(eXtensible Style Language,可扩展的样式语言)是最强大和灵活的样式语言,是特别为应用XML而设计的,它完全遵循XML规则,进一步完善了XML本身。
3)Data-Island。还有几个,但是主要是第二个,其他的我认为不是主流。
2,你在项目中用到了xml技术的哪些方面?如何实现的?
xslt,fo,html解析,xml数据封装和解析。使用第三方软件包实现。
3,用jdom解析xml文件时如何解决中文问题?如何解析?
没用过,不太清楚。我使用的castor。(jbuilder9中有)

JavaScript方面

      1,如何校验数字型?
isNaN(parseFloat(xxx))如果为true,则不是数字。
---
做点力所能及的补充:
  (1)Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而
ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比
Vector好。
  (2)当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而
ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。
  (3)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一
个实现。
  (4)性能方面的比较类似 Vector和ArrayList,比如Hashtable的方法是同步的,而
HashMap的不是。
(5)只有HashMap可以让你将空值作为一个表的条目的key或value
---
1,xml有哪些解析技术?区别是什么?

有两种:DOM和SAX.

DOM:可以得到一个包含文档中所有元素的树结构.
SAX:在文档的不同治点产生事件,应用程序可以决定如何处理这些事件以从解析器中得到信息.
---
Java基础方面:(未写的是已经有人回答或我自己也未知或不确定)

4,多线程有几种表示方法,都是什么?同步有几种实现方法,都是什么?
  :::
  我所知道的有两种实现方法:
    一种是将方法同步:public synchronized methodName(...){....}
    另一种是将对象同步(此对象不能是null值): synchronized (object) { ..... }

5,继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
  继承时候类的执行顺序是:
    父类中被static关键字定义的部分是按所定义的顺序而最先被初始化的;
    父类构造函数(按调用顺序);

    子类中被static关键字定义的部分是按所定义的顺序而最先被初始化的;
    子类构造函数(按调用顺序);
    其他则按方法的调用顺序.

6,内部类的实现方式?
  public class XXXXX{ // 只有一个public类

    ...
 
    class YYYYY{ // 可以有的访问类型是[ protected | private | 无 ]
      ...
    }

  }

8,float型float f=3.4是否正确?
  我也不知道是否正确.
  我一般是这样:float f=3.4F; 或 float f=3.4f;// 后面跟一个英文大写或小写字母F
---
JavaScript方面

      1,如何校验数字型?
        var v = document.all.Telephone.value;
        if(isNan(v)){
          alert("全是数字");
        }
---
yangtaylor的解释有一半以上是错误的,大家不要作标准答案背哦
noisysilence的解释很不错,说明你已经是高手了,不过说明一点,Vector的精妙设置是在于第二个参数的设置,其余的都基本正确。

关于“作用域public,protected,private,以及不写时的区别”的说明---
前三个常用,就不用说了,关于不写时的情况我来说明一下:
JAVA的作用域其实有5种,除了上面的3种外还有:private protected,default
public--------------不说了
protected-----------除了所有的子类可访问外,同包的非子类也可以访问
private-------------也不说了
private protected---只有子类可以访问(这才是我们理解意义上的protected)
default-------------只有同包的类可以访问,即使是子类但不同包仍不能访问

我也是看了很多参考书才最终得到的结果,在此献给大家了。
---
ArrayList和Vector的区别上面已说,我说说它们会带来得影响吧。
同为对象集合,ArrayList可由编译器检查而Vector则不会,所以如果用Vector返回对象集合,编译器是无法查错得,只有在运行时才能才能发现。例如:
********采用Vector*************
server side:
public Vector getCustomDataSet(int num)
{
   Vector v = new Vector();
   for(int i=0; i<num; i++)
   {
      CustomData customData = new CustomData(i);
      v.add(customData)  //此处加入自定义的数据结构CustomData
   }
   return v;
}
client side:
 
  Vector v = getCustomDataSet(5);
  for(int i=0; i<v.size(); i++)
  {
     OtherData data = (OtherData)v.get(i);//此处取出的是customData却转换为OtherData,编译器通过   
  }

********采用ArrayList*************
server side:
public CustomData[] getCustomDataSet(int num)
{
   CustomData[] customData = new CustomData[5];
   for(int i=0; i<num; i++)
   {
      customData[i] = new CustomData(i);
   }
   return customData;
}
client side:
 
  CustomData[] datas = getCustomDataSet(5);
  for(int i=0; i<datas.length; i++)
  {
     OtherData data = datas[i];//编译不通过,类型不匹配
  }

---
下边是以前我找的关于Hashtable和HashMap的不同之处。


Hashtable和HashMap
Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
也 许最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应 用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的 synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的 HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费 用。
第三点不同是,只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的 key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回 null。如果有必要,用containKey()方法来区别这两种情况。
一些资料建议,当需要同步时,用Hashtable,反之用 HashMap。但是,因为在需要时,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基于一个陈旧的类的, 所以有人认为,在各种情况下,HashMap都优先于Hashtable。
---
XML 的编程接口:  DOM    SAX   JDOM   JAXP

文档对象模型(通常称为 DOM)为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用 DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支
DOM 提供了一组丰富的功能,您可以用这些功能来解释和操作 XML 文档,但使用它们是有代价的。
DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。
DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。
DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟


为了解决 DOM 问题,XML-DEV 参与者们(由 David Megginson 领导)创建了 SAX 接口。SAX 的几个特征解决了 DOM 的问题:

SAX 解析器向您的代码发送事件。当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,它会告诉您。您可以决定什么事件对您重要,而且可以决定要创建什么类型的数据结构以保存来自这些事件的数据。如果您没有显式地保存来自某个事件的数据,它就被丢弃。
SAX 解析器根本不创建任何对象,它只是将事件传递给您的应用程序。如果希望基于那些事件创建对象,这将由您来完成。
SAX 解析器在解析开始的时候就开始发送事件。当解析器发现文档开始、元素开始和文本等时,代码会收到一个事件。您的应用程序可以立即开始生成结果;您不必一直 等到整个文档被解析完毕。更妙的是,如果您只查找文档中某些内容,代码一旦找到所要找的东西就可以抛出一个异常。该异常会停止 SAX 解析器,然后代码用它找到的数据做它需要做的任何事。
SAX 解析器也有些问题引人关注:

SAX 事件是无状态的。当 SAX 解析器在 XML 文档中发现文本时,它就向您的代码发送一个事件。该事件仅仅给您发现的文本;它不告诉您什么元素包含那个文本。如果您想知道这一点,则必须自己编写状态管理代码。
SAX 事件不是持久的。如果应用程序需要一个数据结构来对 XML 文档建模,则必须自己编写那样的代码。如果您需要从 SAX 事件访问数据,并且没有把那个数据存储在代码中,那么您不得不再次解析该文档。

JDOM 是基于 Java 技术的开放源码项目,它试图遵循 80/20 规则:用 DOM 和 SAX 20% 的功能来满足 80% 的用户需求。JDOM 使用 SAX 和 DOM 解析器,因此它是作为一组相对较小的 Java 类被实现的。

JDOM 的主要特性是它极大地减少了您必须编写的代码数量。尽管本篇介绍性教程并不深入讨论编程主题,但 JDOM 应用程序的长度通常是 DOM 应用程序的三分之一,大约是 SAX 应用程序的一半。(当然,坚持使用 DOM 的纯粹主义者会建议说:从长远来看,学习和使用 DOM 终会有所回报)。JDOM 并不做所有的事,但对于大多数您要做的解析,它可能正好适合您。

尽管 DOM、SAX 和 JDOM 为大多数常见任务提供了标准接口,但仍有些事情是它们不能解决的。例如,在 Java 程序中创建 DOMParser 对象的过程因 DOM 解析器的不同而不同。为了修正这个问题,Sun 发布了 JAXP(用于 XML 解析的 Java API,Java API for XML Parsing)。该 API 为使用 DOM、SAX 和 XSLT 处理 XML 文档提供了公共接口。

JAXP 提供的诸如 DocumentBuilderFactory 和 DocumentBuilder 之类的接口为不同的解析器提供了一个标准接口。还有一些方法可以允许您控制底层的解析器是否可以识别名称空间以及是否使用 DTD 或模式来验证 XML 文档。
为了确定哪种接口适合您,您需要理解所有接口的设计要点,而且需要理解应用程序用您将要处理的 XML 文档来做什么。考虑下面的问题将有助于您找到正确的方法。

要用 Java 编写应用程序吗?JAXP 使用 DOM、SAX 和 JDOM;如果您用 Java 编写代码,那么您应使用 JAXP 将您的代码与各种解析器实现的细节隔离。
应用程序将如何部署?如果您的应用程序将要作为 Java applet 部署,那么您会希望使要下载的代码数量最小,别忘了 SAX 解析器比 DOM 解析器小。还要知道使用 JDOM 时,除了 SAX 或 DOM 解析器之外还要求编写少量的代码。
一 旦解析了 XML 文档,还需要多次访问那些数据吗?如果您需要回过头来访问 XML 文件的已解析版本,DOM 可能是正确的选择。而 SAX 事件被触发时,如果您以后需要它,则由您(开发人员)自己决定以某种方式保存它。如果您需要访问不曾保存的事件,则必须再次解析该文件。而 DOM 自动保存所有的数据。
只需要 XML 源文件的少量内容吗?如果您只需要 XML 源文件的少量内容,那么 SAX 可能是正确的选择。SAX 不会为源文件中的每个东西创建对象;您要确定什么是重要的。使用 SAX,您要检查每个事件以了解它是否与您的需要有关,然后相应地处理它。更妙的是,一旦找到您正在寻找的东西,您的代码就会抛出一个异常来完全停止 SAX 解析器。
您正在一台内存很少的机器上工作吗?若是的话,不管您可能考虑到的其它因素是什么,SAX 是您的最佳选择。

posted on 2006-02-19 14:34 Vincent.Chen 阅读(221) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航: