﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-道生一,一生二,二生三,三生万物-文章分类-Java 面试题</title><link>http://www.blogjava.net/doodoosun/category/30811.html</link><description>万物皆备于我</description><language>zh-cn</language><lastBuildDate>Fri, 09 May 2008 09:15:43 GMT</lastBuildDate><pubDate>Fri, 09 May 2008 09:15:43 GMT</pubDate><ttl>60</ttl><item><title>Java 面试常见试题</title><link>http://www.blogjava.net/doodoosun/articles/192946.html</link><dc:creator>doodoosun</dc:creator><author>doodoosun</author><pubDate>Fri, 09 May 2008 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/doodoosun/articles/192946.html</guid><wfw:comment>http://www.blogjava.net/doodoosun/comments/192946.html</wfw:comment><comments>http://www.blogjava.net/doodoosun/articles/192946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doodoosun/comments/commentRss/192946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doodoosun/services/trackbacks/192946.html</trackback:ping><description><![CDATA[1.简述面向对象的概念，继承、封装、和多态.如果有四个<br />
<br />
2.简述MVC 模式及对其的理解.<br />
<br />
3. 接口可否继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?<br />
&nbsp;&nbsp;&nbsp; 接口可以继承接口。<br />
&nbsp;&nbsp;&nbsp;&nbsp;抽象类可以实现(implements)接口.<br />
&nbsp;&nbsp;&nbsp; 抽象类可以继承具体类(concrete class),但前提是实体必须有明确的构造函数.<br />
<br />
4.Java 有没有goto?<br />
&nbsp;&nbsp;&nbsp;goto 是 java 的保留字，但是没有使用.<br />
<br />
5.数组有没有length()这个方法?String 有没有length()这个方法?<br />
&nbsp;&nbsp;&nbsp; 数组有length属性,没有length()方法。<br />
&nbsp;&nbsp;&nbsp; String 有length()方法，没有length属性.<br />
<br />
6.Overload 和Override 的区别. Overloaded的方法是否可以改变返回值的类型?<br />
&nbsp;&nbsp;&nbsp;&nbsp;方法的重写override和重载overload 是java 多态性的不同表现。<br />
&nbsp;&nbsp;&nbsp; Override:覆盖,是父类与子类之间多态性的一种表现，如果子类中定义的某方法与父类有相同的名称和参数，我们说该方法被重写<br />
&nbsp;&nbsp; (overriding).子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被"屏蔽"了。<br />
&nbsp;&nbsp;&nbsp; Overload:重载,方法的重载,是一个类中的多态性的一种表现.在一个类中定义了多个同名的方法，它们有不同的参数个数或有不同<br />
&nbsp;&nbsp;&nbsp;&nbsp;参数类型，则车位方法的重载(overloading)<br />
&nbsp;&nbsp;&nbsp;&nbsp; overloaded方法可以改变返回值的类型<br />
<br />
7. ArrayList 、LinkedList和Vector 的区别, HashMap和Hashtable 的区别?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList和Vector都是使用数组方式存储数据，它们都允许直接按序号索引元素，但是插入数据要涉及数组元素移动等内存操作.所以读取数据快而插入数据慢.<br />
&nbsp;&nbsp;&nbsp; 一.同步性：Vector是线程安全的，也就是说是同步的，而ArrayList 是线程不安全的，不是同步的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;二.数据增长：当需要增长时，Vector默认增长位原来的一倍，而ArrayList却是原来的一半。<br />
&nbsp;&nbsp;&nbsp; LinkedList 使用双向链表实现存储，按序号索引数据需要进行前向后后向遍历，但是插入数据的时只需要记录本项的前后项即可，<br />
所有插入速度较快.<br />
<br />
&nbsp;&nbsp;&nbsp; 都属于Map接口的类，实现了将唯一键映射到特定的值上.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.历史原因：HashMap是基于陈旧的Dictionary类，HashMap是Java 1.2引进的Map接口的一个实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2.同步性：Hashtable是线程安全的，也就是说是同步的，而HashMap是线程不安全的，不是同步的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.只有HashMap 可以让你将空值作为一个表的条目的key或是value,它允许一个null键和多个null值,HashMap 类没有分类或者是排序..<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hashtable 类类似于HashMap,但是不允许null键和null值。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 4.HashMap把Hashtable的contains方法去掉了，改成containvalue和containKey,因为contains方法让人引起误解.<br />
<br />
8.构造器Constructor是否可以被override?<br />
构造器constructor不能被继承,因此不能重写overriding,但可以被重载overloading<br />
<br />
9.是否可以继承String类<br />
String类是final 类故不可以继承<br />
<br />
10.当一个线程进入一个对象的一个synchronized方法后，其它线程可否进入此对象的其它方法?<br />
不能，一个对象的一个synchronized 方法只能有一个线程访问。而其它的用户必须等待，知道该用户完成操作。<br />
<br />
11.try{} 里有一个return语句，那么紧跟在这个try后的finally{}里的code 会不会被执行，什么时候被执行，在return前还是后面<br />
&nbsp;会执行，在return前执行。<br />
<br />
12.最有效的方法算出2乘以8等于几?<br />
&nbsp;&nbsp; 2&lt;&lt;3<br />
&nbsp;根据二进制算，第一位00010向左移3位正好是10000，对应二进制是16.这里的3是指移的位数.<br />
<br />
13.有两个对象值相同(x.equals(y)==true),但却可有不同的hash code,这句话对不对?<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不对，有相同的hash code.因为hashcode用的是同一个类的方法，同时其每一个属性值是相等的.<br />
<br />
14.当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里是值传递<br />
还是引用传递?<br />
&nbsp;&nbsp; 是值传递，Java编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对<br />
该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不是改变的.<br />
<br />
15.swtich 是否能作用在byte上，是否能作用在long上，是否能作用在String上?<br />
&nbsp;&nbsp;&nbsp; switch(exp) exp 是一个整数表达式。因此传递给switch和case语句的参数应该是int,short ,char或者是byte<br />
&nbsp;&nbsp;&nbsp; 不可以是其它类型,因此long,string都不能作用于swtich.<br />
<br />
16.Collection和Collections的区别<br />
Collections是java.util下的类，针对集合类的一个帮助类，它提供一些列的静态方法实现对各种集合的搜索、排序、线程安全化等操作。<br />
Collection是java.util下的接口，它是各种集合结构的父接口。List 和Set 都是继承Collection 接口<br />
<br />
17.Java 有那些基本数据类型，String是不是基本数据类型，他们有和区别。<br />
String不是基本数据类型，它是一个对象。基本数据类型不是对象,是一个内存值，其类型是int, long,byte,short,boolean,char<br />
<br />
18.abstract 的method 是否可同时是static，是否可同时是native,是否可同时是synchronized?<br />
&nbsp;&nbsp;&nbsp;&nbsp; 不可以将abstract与static,native,synchronized任何其中之一合用<br />
<br />
19.abstract class和interface 有什么区别<br />
&nbsp;&nbsp;&nbsp; abstract class 即可以有实现方法，也可以有方法的声明。(虚虚实实)<br />
&nbsp;&nbsp;&nbsp; 类只可以继承一个，不可以继承多个。<br />
&nbsp;&nbsp;&nbsp; interface 只提供方法的声明，并且所有方法都是抽象的。<br />
&nbsp;&nbsp;&nbsp; 接口中的所有方法都是抽象的，没有一个有程序体。接口值可以定义static final成员变量。<br />
<br />
20.给我一个你最常见到的runtime exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.空指针异常 NullPointException。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.数组越界异常&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 3.IOException<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.FileNotFoundException<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.ClassNotFoundException<br />
<br />
21.error和exception有什么区别?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; error表示恢复不是不可能但很困难的情况下的一种严重的问题。比如说内存溢出。不可能指望程序能处理这样的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exception:表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。<br />
<br />
22.String 是最基本的数据类型吗?<br />
&nbsp;&nbsp; 不是，String是一个对象。<br />
<br />
23.char型变量不能定义为一个中文？为什么？<br />
&nbsp;&nbsp;&nbsp; 可以，因为有16位，正好一个中文汉字<br />
<br />
24.继承时候类执行的顺序<br />
&nbsp;&nbsp;&nbsp; 先是父类，后是子类<br />
<br />
25.&amp;和&amp;&amp;的区别<br />
&nbsp;&nbsp;&nbsp;&nbsp; &amp;和&amp;&amp;都可以作为逻辑运算&#8220;与&#8221;使用，但是&amp;&amp;是&#8220;短路与&#8221;，运算时先判断符号前面表达式的值，如果能够确定整个表达式<br />
的值，则不进行符号后面的表达式的运算。<br />
另外，&amp;也可作为位运算符使用<br />
<br />
26.String s=new String("xyz"),创建了几个String Object?<br />
&nbsp;&nbsp;两个对象，一个是"xyx" ,一个是指向"xyx"的对象引用<br />
<br />
27.Math.round(11.5)等于多少，Math.round(-11.5)等于多少?<br />
Math.round(11.5)==12<br />
Math.round(-11.5)==-11<br />
<br />
<br />
28.sleep()和wait()有什么区别?搞线程的最爱.<br />
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻<br />
，其它线程可能正在运行而且没有被调度为放弃执行。<br />
除非1.&#8220;醒来&#8221;的线程具有更高的优先级<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.正在运行的线程因为其他原因而阻塞。<br />
<span style="color: #ff0000">wait()是线程交互时，如果线程对一个同步对象x发初一个wait()调用,该线程会暂停执行，被调用的对象进入等待状态，<br />
直到被唤醒或等待时间到</span><br />
<br />
29.启动一个线程是用run()还是start()?<br />
&nbsp;&nbsp;&nbsp;&nbsp; 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM 调度并执行.<br />
着并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程.<br />
<br />
30.Set 里的元素是不能重复的，那么用什么方法来区分重复与否呢？是用==还是equals()？它们有何区别?<br />
&nbsp;&nbsp; set 里的元素是不能重复的，那么用iterator()方法来区分重复与否。<br />
<br />
31.多线程有几种实现方法，都是什么？同步有几种实现方法，都是什么？<br />
&nbsp;&nbsp;&nbsp;&nbsp; 多线程有两种实现方法，分别是继承Thread类与实现Runnable 接口;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用Runnable接口的实现类来提供线程体，这是创建线程的基本方式。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 使用直接继承Thread类，重写其中的run()方法并以之作为线程体的方式创建线程.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;两种方式创建线程的区别：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.使用Runnable 接口创建线程时可以将CPU,代码和数据分开，形成清晰的模型。线程体run()方法所在的类还可以从其它<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类继承一些有用的属性或者方法，并有利于保持程序的风格的一致性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.使用直接继承thread类创建的线程时，Thread子类无法再从其他类继承，但是这种情况编写简单，run()方法的当前对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就是线程对象，可直接操纵。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 同步的实现方法有两种分别是syschronized,wait与notify.<br />
<br />
32.String 与StringBuffer&nbsp;的区别<br />
&nbsp;&nbsp;&nbsp;&nbsp; String 的长度是不可变的，StringBuffer&nbsp;的长度是可变的。<br />
<br />
33.Jsp中的动态include 和静态的include&nbsp;的区别。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 动态的include用jsp：include动作实现。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;jsp:include page ="included.jsp" flush="true" /&gt;它总是会检查所含的文件中的变化，适合用于包含动态的页面，并且可以带参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 静态的include&nbsp;用include喂马实现，不会检查所含文件的变化，适用于静态页面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%@ include file="included.html" %&gt;<br />
<br />
34.Servlet API中的forward()与redirect()的区别<br />
&nbsp;&nbsp; 前者<br />
<br />
35.通过UML画出你所熟悉的设计模式。<br />
<br />
36.开发中都用到了那些设计模式?用在什么场合?<br />
&nbsp;主要用到了MVC 设计的模式.用来开发JSP/Servlet 或者是J2EE的相关应用<br />
&nbsp; 简单工厂设计模式<br />
&nbsp;&nbsp;单例模式<br />
&nbsp; 装饰模式IO<br />
&nbsp; 门面模式<br />
<br />
<br />
37.jsp 的页面跳转<br />
&nbsp;&nbsp; jsp的页面实现跳转主要有jsp:forward和sendRedirect&nbsp;两种方法<br />
&nbsp; jsp:forward：在本容器内跳转。跳转后，地址栏地址不变。效率高，跳转后立即结束本页的内容。<br />
&nbsp;&nbsp; sendRedirect: 在容器之间跳转，跳转后地址栏的地址为跳转后的地址，效率较低。<br />
<br />
38.关键字throw和throws的区别?<br />
可以利用throw关键字自己抛出异常<br />
Throws一般在定义函数的时候使用，表明函数被调用的时候要抛出异常<br />
<br />
39.名词解释：EJB JNDI RMI&nbsp;<br />
EJB (Enterprise Java Bean ,企业级的JavaBean) J2EE体系中核心的技术是EJB，提供了一个框架来开发分布式商务逻辑，显著地<br />
简化了具有可伸缩性和高度复杂的企业级应用的开发。<br />
<br />
JNDI&nbsp;(Java Naming and Directory Interface,java命名和目录接口) JNDI用于名字和目录服务，提供了一致的接口来存取和操作企业级的资源<br />
，如DNS(Domain Name Service)和本地文件系统。<br />
<br />
RMI(Remote Method Invocation ,远程方法调用)RMI是在远程的对象上调用的一些方法，使用了连续的方式在客户端和服务器端传递数据，<br />
RMI 是EJB技术基础。<br />
<br />
40.Swing中组件布局有哪几种方式?&nbsp;<br />
&nbsp;常用的布局管理器有下面几种方式<br />
&nbsp;FlowLayout ,GridLayout,BorderLayout,CardLayout,GridBagLayout&nbsp;<br />
<br />
41.&nbsp;多线程有那些状态?<br />
<br />
42.简述Java语言的核心机制<br />
Java 语言包括三种核心机制:Java虚拟机、垃圾收集机制和代码安全检测.<br />
1.Java 虚拟机(Java Virtual Machine ,JVM)&nbsp;<br />
在一台计算机上由软件或硬件模拟的计算机. Java虚拟机读取并处理经过编译过的平台无关的字节码class文件.<br />
2.垃圾收集机制(Garbage collection)<br />
在C/C++等语言中，有程序员负责回收无用内存。Java 语言解除了程序员回收无用的内存空间的责任。它提供一种系统级线程跟踪<br />
存储空间的分配情况。并在JVM空闲时，检查并释放那些可被释放的存储器空间。垃圾收集在Java程序运行过程中自动进行，程序员<br />
无法精确控制和干预.<br />
3.代码安全性检测(Code Security)<br />
Java执行代码的时候，有JVM对运行的代码进行安全性检测，当进行一些非法操作的时候，比如修改一些系统的设置的时候，<br />
JVM会发出警告.<br />
<br />
43.设计模式:对抽象工厂模式的理解.<br />
<br />
44.对O/R MAPPING的理解.<br />
<br />
45.对Ajax 的理解及应用.<br />
<br />
46.运用JavaScript ，写一个类，类名:student ,他的属性:name ,age,tall,他的方法:getname,getAge,getTall 要突出Javascript 的oop思想.<br />
<br />
47.写一个XML 文件<br />
格式如下:<br />
&lt;student&gt;<br />
&lt;name&gt;11&lt;/name&gt;<br />
&lt;age&gt;33&lt;/age&gt;<br />
&lt;/studnet&gt;<br />
使用Java&nbsp;语言，遍历所有节点，然后在页面上输出。<br />
<br />
48.如何获得客户端的IP地址?<br />
利用request&nbsp;对象可以获得客户提交的信息,比如:jsp文件目录，客户端的地址，以及服务器的端口等。<br />
&nbsp;&lt;BR&gt;获取客户的Ip地址<br />
&lt;% String ip=request.getRemoteAddr();<br />
out.println(ip);%&gt;<br />
<br />
49.构造函数有什么作用？简述重载构造函数的好处。<br />
构造函数也叫构造方法，是java类中的一种特俗的方法，其功能是创建其所属类型的一个新的对象。<br />
声明构造方法的语法规则如下：<br />
&lt;modifiers&gt; &lt;class_name&gt;&nbsp;([argu_list]){<br />
[&lt;statements&gt;]<br />
}<br />
构造方法的特点是：没有返回值类型，方法名必须取和所属类相同的名字。<br />
在定义Java类的时候，可以定义一个或者是多个构造方法，通常在构造方法中进行一些初始化工作。<br />
<br />
50.application 对象有什么特点？和sesion 对象有什么联系和区别？<br />
站点所有的用户公用一个application对象，当站点服务器开启的时候，applicaiton就被创建，直到网站关闭<br />
可以使用Session对象储存用户登陆网站时候的信息。当用户在页面之间跳转时，储存在Session对象中的变量<br />
不会被清除。<br />
联系是：数据都存储在服务器端，而且都可以保留一段时间。<br />
区别是：每个用户有一个session，但是application是共有的<br />
<br />
51.简述Servlet 的生命周期?<br />
&nbsp;Servlet运行机制和Applet类似，Servlet是在服务器端运行的，但是Applet是在客户端运行的。Servlet是 javax.servlet包中的<br />
HttpServlet类的子类，由服务器完成该子类的创建和初始化。<br />
Servlet的生命周期主要有3个过程组成。<br />
1.init(),服务器初始化Servlet<br />
2.service()方法：初始化完毕，Servlet对象调用该方法响应客户的请求。<br />
3.destroy()方法：调用该方法消灭Servlet对象。<br />
其中，init()方法只在Servlet第一次被请求加载的时候被调用一次，当有客户再请求Servlet服务时，Web服务器将启动一个新的线程，<br />
在该线程中，调用Service方法相应客户的请求。<br />
<br />
52.<br />
<br />
<br />
<br />
<br />
&nbsp;<br />
<br />
<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<div class="blog_content">答题时间20分钟 <br />
1. <br />
System.out.println(1+&#8217;\002&#8217;)会打印出多少? _________ <br />
System.out.println(1+2+&#8221;3&#8221;)会打印出多少? _________ <br />
<br />
2. 请简单补充完下面jdbc读取数据的实现 <br />
String SQL = &#8220;SELECT id , title, description FROM t_blog WHERE id = ?&#8221;; <br />
long id; <br />
String title; <br />
String description; <br />
Connection conn = null;//假设用ConnectionManager.getConnection();可以获得连接对象 <br />
PrepareStatement pstmt = null; <br />
<br />
<br />
<br />
<br />
如果description字段在数据库中是text类型，而且存储的文字比较多（20K左右），这时候该如何优化读取，让系统支撑更大的并发？ <br />
<br />
<br />
3. 有一篇文章的URL为 view.jsp?id=100 ，每分钟访问量可能上千次，在记录和显示它的查看次数时，你觉得如何做性能比较好？ <br />
<br />
<br />
4. 写出你最常见到的一些运行时异常(runtime exception)，再简述一下你是如何避免java 中空指针异常的 <br />
<br />
5. 你用lucene做过全文检索吗? 简单描述一下你的经验。 <br />
<br />
6. 简述一下你对GC的理解，以及如何避免内存泄露。 <br />
<br />
7. 要求最后打印出的全部是数字，下面的程序满足要求吗？还可以再优化吗？请简单描述。 <br />
String strA = &#8220;1:2:3:4:5:6:7:8:9:10:&#8221;; <br />
String arrA[] = strA.split(&#8220;:&#8221;); <br />
for(int i=0;i&lt;arrA.length;i++) <br />
{ <br />
System.out.println(arrA[i]); <br />
} <br />
<br />
<br />
8. 简述一下javascript/dhtml/css/ajax在你以前项目中的应用程度；熟悉跨浏览器兼容javascript/css吗? 有兴趣对它们进行深入研究吗？ <br />
<br />
<br />
9. 你最熟悉Web开发过程中的哪部分？</div>
<img src ="http://www.blogjava.net/doodoosun/aggbug/192946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doodoosun/" target="_blank">doodoosun</a> 2008-05-09 16:37 <a href="http://www.blogjava.net/doodoosun/articles/192946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>