JAVA教程之Java 口试中的圈套
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。本人也口试了良多家公司,以为这些对从此的进修和事情十分有匡助.总结的一些常识点十分有代表性.以下是注释.
---------------------------------------------------------------------------------------------
找事情要口试,有口试就有凑合口试的举措。以下一些标题来自我和我伴侣疾苦的口试履历,提这些成绩的公司包含IBM,E*Trade,Siebel,Motorola,SUN,和别的巨细公司。
口试是没甚么事理可讲的,它的标题有的分歧道理、离开实践。有在纸上写的,有劈面考你的,也有在德律风里问的,给你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++嵌套类最年夜的分歧就在因而否有指向内部的援用上。详细可见http://www.frontfree.net/articles/services/view.asp?id=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(a>0);//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,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,
ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFORMatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException
第十八,error和exception有甚么区分?
error暗示恢复不是不成能但很坚苦的情形下的一种严峻成绩。好比说内存溢出。不成能期望程序能处置如许的情形。
exception暗示一种计划或完成成绩。也就是说,它暗示假如程序运转一般,从不会产生的情形。
第十九,List,Set,Map是不是承继自Collection接口?
List,Set是
Map不是
第二十,abstractclass和interface有甚么区分?
声明办法的存在而不往完成它的类被叫做笼统类(abstractclass),它用于要创立一个别现某些基础举动的类,并为该类声明办法,但不克不及在该类中完成该类的情形。不克不及创立abstract类的实例。但是能够创立一个变量,其范例是一个笼统类,并让它指向详细子类的一个实例。不克不及有笼统机关函数或笼统静态办法。Abstract类的子类为它们父类中的一切笼统办法供应完成,不然它们也是笼统类为。取而代之,在子类中完成该办法。晓得其举动的别的类能够在类中完成这些办法。
接口(interface)是笼统类的变体。在接口中,一切办法都是笼统的。多承继性可经由过程完成如许的接口而取得。接口中的一切办法都是笼统的,没有一个有程序体。接口只能够界说staticfinal成员变量。接口的完成与子类类似,除该完成类不克不及从接口界说中承继举动。当类完成特别接口时,它界说(行将程序体赐与)一切这类接口的办法。然后,它能够在完成了该接口的类的任何对象上挪用接口的办法。因为有笼统类,它同意利用接口名作为援用变量的范例。一般的静态联编将失效。援用能够转换到接口范例或从接口范例转换,instanceof运算符能够用来决意某对象的类是不是完成了接口。
第二十一,abstract的method是不是可同时是static,是不是可同时是native,是不是可同时是synchronized?
都不克不及
第二十二,接口是不是可承继接口?笼统类是不是可完成(implements)接口?笼统类是不是可承继实体类(concreteclass)?
接口能够承继接口。笼统类能够完成(implements)接口,笼统类是不是可承继实体类,但条件是实体类必需有明白的机关函数。
第二十三,启动一个线程是用run()仍是start()?
启动一个线程是挪用start()办法,使线程所代表的假造处置机处于可运转形态,这意味着它能够由JVM调剂并实行。这其实不意味着线程就会当即运转。run()办法能够发生必需加入的标记来中断一个线程。
第二十四,机关器Constructor是不是可被override?
机关器Constructor不克不及被承继,因而不克不及重写Overriding,但能够被重载Overloading。
第二十五,是不是能够承继String类?
String类是final类故不成以承继。
第二十六,当一个线程进进一个对象的一个synchronized办法后,别的线程是不是可进进此对象的别的办法?
不克不及,一个对象的一个synchronized办法只能由一个线程会见。
第二十七,try{}里有一个return语句,那末紧跟在这个try后的finally{}里的code会不会被实行,甚么时分被实行,在return前仍是后?
会实行,在return前实行。
第二十八,编程题:用最无效率的办法算出2乘以8等於几?
有C背景的程序员出格喜好问这类成绩。
2<<3
第二十九,两个对象值不异(x.equals(y)==true),但却可有分歧的hashcode,这句话对不合错误?
不合错误,有不异的hashcode。
第三十,当一个对象被看成参数传送到一个办法后,此办法可改动这个对象的属性,并可前往变更后的了局,那末这里究竟是值传送仍是援用传送?
是值传送。Java编程言语只由值传送参数。当一个对象实例作为一个参数被传送到办法中时,参数的值就是对该对象的援用。对象的内容能够在被挪用的办法中改动,但对象的援用是永久不会改动的。
第三十一,swtich是不是能感化在byte上,是不是能感化在long上,是不是能感化在String上?
switch(expr1)中,expr1是一个整数表达式。因而传送给switch和case语句的参数应当是int、short、char大概byte。long,string都不克不及感化于swtich。
第三十二,编程题:写一个Singleton出来。
Singleton形式次要感化是包管在Java使用程序中,一个类Class只要一个实例存在。
一样平常Singleton形式一般有几各种情势:
第一种情势:界说一个类,它的机关函数为private的,它有一个static的private的该类变量,在类初始化时实例话,经由过程一个public的getInstance办法猎取对它的援用,继而挪用个中的办法。
publicclassSingleton{
privateSingleton(){}
//在本人外部界说本人一个实例,是否是很奇异?
//注重这是private只供外部挪用
privatestaticSingletoninstance=newSingleton();
//这里供应了一个供内部会见本class的静态办法,能够间接会见
publicstaticSingletongetInstance(){
returninstance;
}
}
第二种情势:
publicclassSingleton{
privatestaticSingletoninstance=null;
publicstaticsynchronizedSingletongetInstance(){
//这个办法比下面有所改善,不必每次都举行天生对象,只是第一次
//利用时天生实例,进步了效力!
if(instance==null)
instance=newSingleton();
returninstance; }
}
其他情势:
界说一个类,它的机关函数为private的,一切办法为static的。
一样平常以为第一种情势要加倍平安些
Hashtable和HashMap
Hashtable承继自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个完成
HashMap同意将null作为一个entry的key大概value,而Hashtable不同意
另有就是,HashMap把Hashtable的contains办法往失落了,改成containsvalue和containsKey。由于contains办法简单让人引发曲解。
最年夜的分歧是,Hashtable的办法是Synchronize的,而HashMap不是,在
多个线程会见Hashtable时,不必要本人为它的办法完成同步,而HashMap
就必需为之供应外同步。
Hashtable和HashMap接纳的hash/rehash算法都也许一样,以是功能不会有很年夜的差别。
多谢指点,其实我对.net和ruby也不是很了解,对与java也只是刚起步的阶段,只是在学习中有了点想法就写出来了,现在俺本科还没毕业,所以对大型项目基本上也没有什么经验。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 是一种使网页(Web Page)产生生动活泼画面的语言 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
页:
[1]