Java 面试前需要回顾的事情
来源:Medium 在本文中,您将找到经验丰富的开发人员提供的 17 个技巧,这些技巧将在 Java 面试中为您提供帮助。 我在 IT 行业工作了 20 多年,其中大部分时间都在使用 Java。此外,我在面试 Java 开发人员方面获得了丰富的经验。尽管 Java 语言在不断发展,但其核心概念基本保持不变。以下是我想在有抱负的开发人员参加面试之前与他们分享的一些技巧。如果你重复它们,就会避免你犯严重的错误。-
Object类位于 Java 类层次结构的根部。所有 Java 类都可以追溯到Object。即使一个类没有显式扩展任何类,它也会扩展Object。但是,类可以自由地显式扩展Object。
-
在Java中,您只能扩展一个类(由于不明确,不允许多重继承)。但是,一个类可以同时实现任意数量的接口。
-
一个接口扩展另一个接口(与实现相反)。
-
Java中有四种访问修饰符:public(所有人都可用)、protected(仅对子类可用)、private(仅在单个类中可用)、default(在单个包中可用)。需要注意的是,同一个类的子类可以位于不同的包中。父类和子类不必属于同一包。
-
类字符串是不可变的。不变性意味着String类本身不提供任何替换String引用中的值的方法。如果要替换字符串引用的值,则必须使用=运算符显式分配该值。将此与StringBuffer或StringBuilder类进行比较,后者具有诸如追加之类的方法,因此您不必在那里使用=运算符。
-
ConcurrentHashMap比Hashtable更高效。ConcurrentHashMap对底层数据结构的段进行操作,其中写操作仅锁定特定段(无论键属于哪个段)。然而,在Hashtable中,整个数据结构将被锁定。
-
ConcurrentHashMap比HashMap慢,因为HashMap没有实现线程安全。如果一个线程迭代HashMap并且另一个线程尝试修改同一个HashMap ,则HashMap可能会抛出ConcurrentModificationException。ConcurrentHashMap这里不会抛出异常。
-
如何实现您定义的同一类的两个对象的相等性?答案:这可以通过重写hashcode()方法来完成。
-
toString()方法的默认结果是什么?答案:它是类名、 @符号和hashcode()值的串联。
-
Java中如何实现多态?实现此目的的一种方法是重载该方法。另一种方法是重写该方法。
-
如何从子类调用超类构造函数?答案:这可以使用super()关键字来完成。不带参数的super()方法始终会被调用,即使没有显式指定也是如此。带参数的super()方法必须显式指定。如果需要调用super()(带或不带参数),则它的调用必须始终位于子类构造函数的第一行。
-
什么是检查异常和非检查异常?答:受检异常是那些必须在预期抛出的方法中声明或捕获的异常。未经检查的异常没有此限制。java.io.IOException是受检查异常的示例。未经检查的异常来自RunTimeException类。
-
异常层次结构的根类是Throwable(它又隐式扩展了Object)。异常和错误来自Throwable。
-
从 Java 8 开始,方法可以在接口中实现。默认方法和静态方法可以有实现。
-
符合抽象条件的类不能被实例化。任何不为任何方法提供主体的类都必须声明为抽象的。即使所有方法都有主体,开发人员也可以将类声明为抽象类 - 但是,不建议这样做,因为在这种情况下该类无法实例化。
-
最后一堂课不能延长。最终变量不能被赋予另一个值。最终方法不能被重写。
-
try-catch-finally结构中需要哪些关键字?这可以是try-catch、try-finally或三者兼而有之。在这种情况下,catch不是必需的关键字。
Java 中的枚举和迭代器有什么区别?
来源:Rrtutors 这篇文章为您带来了讨论 Java 中枚举和迭代之间的差异。Java.util 包提供了两个用于遍历Collection对象元素的接口:Enumeration和Iterator。尽管它们都通过Collection对象,但它们之间还是存在一些差异。枚举和迭代器之间的区别
-
JDK添加时间:它们是在不同时间引入的。Enum 是在 JDK 1.0 中引入的,而 iterator 是在 JDK 1.2 中引入的。
-
删除元素:这是两者之间的主要区别。在Iterator接口中,当迭代Collection对象时,我们可以删除元素,而当使用Enumeration迭代Collection对象时,我们无法更改它。这是因为Iterator接口有remove()方法,而Enumeration接口没有。
-
操作类型:迭代器具有快速失败操作类型,枚举具有自动失败操作类型。因此,Iterator在迭代期间修改集合时会抛出ConcurrentModificationException ,除非使用其自己的remove()方法,而Enumeration在迭代期间修改集合时不会抛出任何异常。
Java 中的枚举和迭代器示例
枚举示例
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
public class Enumeration_Example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "Samsung");
}
private static void delete(Vector vectali, String laptop) {
Enumeration lapi = vectali.elements();
while (lapi.hasMoreElements()) {
String s = (String) lapi.nextElement();
if (s.equals(laptop)) {
vectali.remove(laptop);
}
}
System.out.println("The Laptop brands includes:");
lapi = vectali.elements();
while (lapi.hasMoreElements()) {
System.out.println(lapi.nextElement());
}
}
}
结论:
迭代器示例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
public class Iterator_example {
public static void main(String[] args) {
List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));
Vector vectali = new Vector(laptoplist);
delete(vectali, "HP");
}
private static void delete(Vector vectali, String name) {
Iterator a = vectali.iterator();
while (a.hasNext()) {
String s = (String) a.next();
if (s.equals(name)) {
a.remove();
}
}
// Display the names
System.out.println("The laptop brand includes:");
a = vectali.iterator();
while (a.hasNext()) {
System.out.println(a.next());
}
}
}
结论:
GO TO FULL VERSION