面试是没什么道理可讲的,他的题目有的不合情理、脱离实际。有在纸上写的,有当面考你的,也有在电话里问的,给你ide的估计非常少(否则你赶快去买彩票,说不定中)。所以如果你看完此文后,请不要抱怨说这些问题都能用ide来解决。你必须在所有情况下准确回答这些问题,在面试中如果出现一两题回答不准确非常有可能你就被拒之门外了。当然这些都是java的基本题,那些面试的人大多数不会问你hibernate有多先进,eclipse的三个组成部分,或commanddesignpattern,他们都是老一辈了,最喜欢问的就是基础知识。别小看了这些基础,我朋友水平一流,结果就栽在一到基础知识的问题下,和高薪无缘。好了废话少说,开始正题。第一,谈谈final,finally,finalize的差别。最常被问到。第二,anonymousinnerclass(匿名内部类)是否能extends(继承)其他类,是否能implements(实现)interface(接口)?第三,staticnestedclass和innerclass的不同,说得越多越好(面试题有的非常笼统)。第四,&和&&的差别。这个问得非常少。第五,hashmap和hashtable的差别。常问。第六,collection和collections的差别。你千万别说一个是单数一个是复数。第七,什么时候用assert。api级的技术人员有可能会问这个。第八,gc是什么?为什么要有gc?基础。第九,strings=newstring(xyz);创建了几个stringobject?第十,math.round(11.5)等於多少?math.round(-11.5)等於多少?第十一,shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?面试题都是非常变态的,要做好受虐的准备。第十二,sleep()和wait()有什么差别?搞线程的最爱。第十三,java有没有goto?非常十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司。第十四,数组有没有length()这个方法?string有没有length()这个方法?第十五,overload和override的差别。overloaded的方法是否能改动返回值的类型?常问。第十六,set里的元素是不能重复的,那么用什么方法来区分重复和否呢?是用==还是equals()?他们有何差别?第十七,给我一个你最常见到的runtimeexception。如果你这个答不出来,面试的人会认为你没有实际编程经验。第十八,error和exception有什么差别?第十九,list,set,map是否继承自collection接口?第二十,abstractclass和interface有什么差别?常问。第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?第二十二,接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?第二十三,启动一个线程是用run()还是start()?第二十四,构造器constructor是否可被override?第二十五,是否能继承string类?第二十六,当一个线程进入一个对象的一个synchronized方法后,其他线程是否可进入此对象的其他方法?第二十七,try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?第二十八,编程题:用最有效率的方法算出2乘以8等於几?有c背景的程式员特别喜欢问这种问题。第二十九,两个对象值相同(x.equals(y)==true),但却可有不同的hashcode,这句话对不对?第三十,当一个对象被当作参数传递到一个方法后,此方法可改动这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在string上?第三十二,编程题:写一个singleton出来。下面是答案第一,谈谈final,finally,finalize的差别。final?修饰符(关键字)如果一个类被声明为final,意味着他不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。将变量或方法声明为final,能确保他们在使用中不被改动。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供finally块来执行所有清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。finalize?方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。他是在object类中定义的,因此所有的类都继承了他。子类覆盖finalize()方法以整理系统资源或执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。第二,anonymousinnerclass(匿名内部类)是否能extends(继承)其他类,是否能implements(实现)interface(接口)?匿名的内部类是没有名字的内部类。不能extends(继承)其他类,但一个内部类能作为一个接口,由另一个内部类实现。第三,staticnestedclass和innerclass的不同,说得越多越好(面试题有的非常笼统)。nestedclass(一般是c++的说法),innerclass(一般是java的说法)。java内部类和c++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见=704&page=1注:静态内部类(innerclass)意味着1创建一个static内部类的对象,不必一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象第四,&和&&的差别。&是位运算符。&&是布尔逻辑运算符。第五,hashmap和hashtable的差别。都属于map接口的类,实现了将惟一键映射到特定的值上。hashmap类没有分类或排序。他允许一个null键和多个null值。hashtable类似于hashmap,不过不允许null键和null值。他也比hashmap慢,因为他是同步的。第六,collection和collections的差别。collections是个java.util下的类,他包含有各种有关集合操作的静态方法。collection是个java.util下的接口,他是各种集合结构的父接口。第七,什么时候用assert。断言是个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。如果表达式计算为false,那么系统会报告一个assertionerror。他用于调试目的:assert(a0);//throwsanassertionerrorifa=0断言能有两种形式:assertexpression1;assertexpression1:expression2;expression1应该总是产生一个布尔值。expression2能是得出一个值的任意表达式。这个值用于生成显示更多调试信息的string消息。断言在默认情况下是禁用的。要在编译时启用断言,需要使用source1.4标记:javac-source1.4test.java要在运行时启用断言,可使用-enableassertions或-ea标记。要在运行时选择禁用断言,可使用-da或-disableassertions标记。要系统类中启用断言,可使用-esa或-dsa标记。还能在包的基础上启用或禁用断言。能在预计正常情况下不会到达的所有位置上放置断言。断言能用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既能在公有方法中,也能在非公有方法中利用断言测试后置条件。另外,断言不应该以所有方式改动程式的状态。第八,gc是什么?为什么要有gc?(基础)。gc是垃圾收集器。java程式员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,能调用下面的方法之一:system.gc()runtime.getruntime().gc()第九,strings=newstring(xyz);创建了几个stringobject?两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。第十,math.round(11.5)等於多少?math.round(-11.5)等於多少?math.round(11.5)返回(long)12,math.round(-11.5)返回(long)-11;第十一,shorts1=1;s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?shorts1=1;s1=s1+1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1=(short)(s1+1)。shorts1=1;s1+=1正确。第十二,sleep()和wait()有什么差别?搞线程的最爱sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定即时恢复执行。这是因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其他原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。第十三,java有没有goto?goto?java中的保留字,目前没有在java中使用。第十四,数组有没有length()这个方法?string有没有length()这个方法?数组没有length()这个方法,有length的属性。string有有length()这个方法。第十五,overload和override的差别。overloaded的方法是否能改动返回值的类型?方法的重写overriding和重载overloading是java多态性的不同表现。重写overriding是父类和子类之间多态性的一种表现,重载overloading是个类中多态性的一种表现。如果在子类中定义某方法和其父类有相同的名称和参数,我们说该方法被重写(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是能改动返回值的类型。第十六,set里的元素是不能重复的,那么用什么方法来区分重复和否呢?是用==还是equals()?他们有何差别?set里的元素是不能重复的,那么用iterator()方法来区分重复和否。equals()是判读两个set是否相等。equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。第十七,给我一个你最常见到的runtimeexception。arithmeticexception,arraystoreexception,bufferoverflowexception,bufferunderflowexception,cannotredoexception,cannotundoexception,classcastexcep