【附答案】Java⼤数据⽅向⾯试题,你会⼏个?
未来10年将是⼤数据,⼈⼯智能爆发的时代,到时将会有⼤量的企业需要借助⼤数据,⽽Java最⼤的优势就是它在⼤数据领域的地位,⽬前很多的⼤数据架构都是通过Java来完成的。你的Java内功如何呢?⼀起来做做Java⼤数据⽅向的⾯试题~~
1、Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态⽅法。
Collection是个java.util下的接⼝,它是各种集合结构的⽗接⼝。
第⼋,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不⽤担⼼内存管理,因为垃圾收集器会⾃动进⾏管理。要请求垃圾收集,可以调⽤下⾯的⽅法之⼀:()
2、String s = new String("xyz");创建了⼏个String Object?
两个对象,⼀个是"xyx",⼀个是指向"xyx"的引⽤对象s。
3、und(11.5)等於多少? und(-11.5)等於多少?
4、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
5、sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()⽅法是使线程停⽌⼀段时间的⽅法。在sleep 时间间隔期满后,线程不⼀定⽴即恢复执⾏。这是因为在那个时刻,其它线程可能正在运⾏⽽且没有被调度为放弃执⾏,除⾮(a)"醒来"的线程具有更⾼的优先级
(b)正在运⾏的线程因为其它原因⽽阻塞。
wait()是线程交互时,如果线程对⼀个同步对象x 发出⼀个wait()调⽤,该线程会暂停执⾏,被调对象进⼊等待状态,直到被唤醒或等待时间到。
6、Java有没有goto?
Goto—java中的保留字,现在没有在java中使⽤。
7、数组有没有length()这个⽅法? String有没有length()这个⽅法?
数组没有length()这个⽅法,有length的属性。
String有有length()这个⽅法。java重写和重载的区别
8、Overload和Override的区别。Overloaded的⽅法是否可以改变返回值的类型?
⽅法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是⽗类与⼦类之间多态性的⼀种表现,重载Overloading 是⼀个类中多态性的⼀种表现。如果在⼦类中定义某⽅法与其⽗类有相同的名称和参数,我们说该⽅法被重写 (Overriding)。⼦类的对象使⽤这个⽅法时,将调⽤⼦类中的定义,对它⽽⾔,⽗类中的定义如同被"屏蔽"了。如果在⼀个类中定义了多个同名的⽅法,它们或有不同的参数个数或有不同的参数类型,则称为⽅法的重载(Overloading)。Overloaded的⽅法是可以改变返回值的类型。
9、Set⾥的元素是不能重复的,那么⽤什么⽅法来区分重复与否呢? 是⽤==还是equals()? 它们有何区别?
Set⾥的元素是不能重复的,那么⽤iterator()⽅法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==⽅法决定引⽤值是否指向同⼀对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
10、给我⼀个你最常见到的runtime exception。
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
11、error和exception有什么区别?
error 表⽰恢复不是不可能但很困难的情况下的⼀种严重问题。⽐如说内存溢出。不可能指望程序能处理这样的情况。
exception 表⽰⼀种设计或实现问题。也就是说,它表⽰如果程序运⾏正常,从不会发⽣的情况。
12、List, Set, Map是否继承⾃Collection接⼝?
List,Set是
Map不是
13、abstract class和interface有什么区别?
声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏为的类,并为该类声明⽅法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然⽽可以创建⼀个变量,其类型是⼀个抽象类,并让它指向具体⼦类的⼀个实例。不能有抽象构造函数或抽象静态⽅法。Abstract 类的⼦类为它们⽗类中的所有抽象⽅法提供实现,否则它们也是抽象类为。取⽽代之,在⼦类中实现该⽅法。知道其⾏为的其它类可以在类中实现这些⽅法。
接⼝(interface)是抽象类的变体。在接⼝中,所有⽅法都是抽象的。多继承性可通过实现这样的接
⼝⽽获得。接⼝中的所有⽅法都是抽象的,没有⼀个有程序体。接⼝只可以定义static final成员变量。接⼝的实现与⼦类相似,除了该实现类不能从接⼝定义中继承⾏为。当类实现特殊接⼝时,它定义(即将程序体给予)所有这种接⼝的⽅法。然后,它可以在实现了该接⼝的类的任何对象上调⽤接⼝的⽅法。由于有抽象类,它允许使⽤接⼝名作为引⽤变量的类型。通常的动态联编将⽣效。引⽤可以转换到接⼝类型或从接⼝类型转换,instanceof 运算符可以⽤来决定某对象的类是否实现了接⼝。
14、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
15、接⼝是否可继承接⼝? 抽象类是否可实现(implements)接⼝? 抽象类是否可继承实体类(concrete class)?
接⼝可以继承接⼝。抽象类可以实现(implements)接⼝,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
16、构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
17、启动⼀个线程是⽤run()还是start()?
启动⼀个线程是调⽤start()⽅法,使线程所代表的虚拟处理机处于可运⾏状态,这意味着它可以由JVM调度并执⾏。这并不意味着线程就会⽴即运⾏。run()⽅法可以产⽣必须退出的标志来停⽌⼀个线程。
18、是否可以继承String类?
String类是final类故不可以继承。
19、当⼀个线程进⼊⼀个对象的⼀个synchronized⽅法后,其它线程是否可进⼊此对象的其它⽅法?
不能,⼀个对象的⼀个synchronized⽅法只能由⼀个线程访问。
20、try {}⾥有⼀个return语句,那么紧跟在这个try后的finally {}⾥的code会不会被执⾏,什么时候被执⾏,在return前还是后?
会执⾏,在return前执⾏。
21、编程题: ⽤最有效率的⽅法算出2乘以8等於⼏?
有C背景的程序员特别喜欢问这种问题。
2 << 3
22、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
23、当⼀个对象被当作参数传递到⼀个⽅法后,此⽅法可改变这个对象的属性,并可返回变化后的结果,那么这⾥到底是值传递还是引⽤传递?
是值传递。Java 编程语⾔只由值传递参数。当⼀个对象实例作为⼀个参数被传递到⽅法中时,参数的值就是对该对象的引⽤。对象的内容可以在被调⽤的⽅法中改变,但对象的引⽤是永远不会改变的。
24、swtich是否能作⽤在byte上,是否能作⽤在long上,是否能作⽤在String上?
switch(expr1)中,expr1是⼀个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作⽤于swtich。
25、Hashtable和HashMap
Hashtable继承⾃Dictionary类,⽽HashMap是Java1.2引进的Map interface的⼀个实现
HashMap允许将null作为⼀个entry的key或者value,⽽Hashtable不允许
还有就是,HashMap把Hashtable的contains⽅法去掉了,改成containsvalue和containsKey。因为contains⽅法容易让⼈引起误解。
最⼤的不同是,Hashtable的⽅法是Synchronize的,⽽HashMap不是,在
多个线程访问Hashtable时,不需要⾃⼰为它的⽅法实现同步,⽽HashMap
就必须为之提供外同步。
Hashtable和HashMap采⽤的hash/rehash算法都⼤概⼀样,所以性能不会有很⼤的差异。