了解基本的Java特定面试问题

时间:2011-03-05 17:13:52

标签: java

最后一天,我接受了一次采访,他们问我java问题,其中一些问题我不知道答案。我很想知道这个问题的答案。采访者没有告诉我答案。我在这里问这些问题:

  • Java是否提供任何构造来查找对象的大小?
  • 提供一种最简单的方法来查找方法在不使用任何分析工具的情况下执行的时间?
  • 什么是已检查的异常和运行时异常?
  • 如果我在try块的末尾写回,finally块是否仍会执行?
  • 如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

想知道上述问题的答案,以便下次可以帮助我。

对于规范的说明,注释和/或相关链接,我们将非常赞赏这些简单的答案 - 学习这些东西的好方法是什么?

8 个答案:

答案 0 :(得分:17)

我认为所有这些都可以通过搜索现有的Stack Overflow问题来解答。我认为值得回答这个问题的原因是,您之前的答案的链接是你已经问过很多不同的问题,每个问题本身都很有趣。当你在一起询问这些问题时,你不太可能对这些问题进行深入的讨论,但在这里的答案和评论中,你会发现很多细节和讨论,(a)可能很有趣, (b)可以帮助进一步面试。 (可能有更好的选择 - 这些只是我找到的第一个合理的SO答案。)

  

Java是否提供任何构造来查找对象的大小?

  

使用最简单的方法找出方法执行时间而不使用任何分析工具?

  

什么是已检查的异常和运行时异常?

  

如果我在try块的末尾写回,那finally块是否仍会执行?

  

如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

答案 1 :(得分:3)

  

Java是否提供任何构造来查找对象的大小?

AFAIK no。

  

使用最简单的方法找出方法执行时间而不使用任何分析工具?

使用System.currentTimeMillis()System.nanoTime()来衡量时间。

  

什么是已检查的异常和运行时异常?

有关详细说明,请查看this thread

  

如果我在try块的末尾写入return,finally块是否仍会执行?

  

如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

没有

答案 2 :(得分:3)

  

Java是否提供任何构造来查找对象的大小?

没有

  

提供一种简单的方法来查找方法在不使用任何分析工具的情况下执行的时间?

long t0 = System.nanoTime();
// code to profile
long timeTaken = System.nanoTime() - t0;
  

什么是已检查的异常和运行时异常?

已检查的例外情况是指Throwablejava.lang.Error未延伸的任何java.lang.RuntimeException。如果您不处理或显式传播已检查的异常,Java编译器将给您一个错误。

  

如果我在try块的末尾写入return,finally块是否仍会执行?

  

如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

也许。如果有SecurityManager,那么它可以抛出SecurityException而不是退出,这将触发finally块。

如果您的堆栈太大,调用System.exit可能会导致堆栈溢出异常,从而触发finally块。

答案 3 :(得分:1)

  

Java是否提供任何构造来查找对象的大小?

据我所知,没有跨平台/跨VM的方式。

  

使用最简单的方法找出方法执行时间而不使用任何分析工具?

通过在执行之前和之后创建新的Date()。

  

什么是已检查的异常和运行时异常?

您应该将已检查的异常包装到try / catch块

  

如果我在try块的末尾写入return,finally块是否仍会执行?

  

如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

没有

答案 4 :(得分:0)

1

不,一般不是对象。数组和字符串的.length ...

2

final long startTime = System.nanoTime();
final long endTime;
try {
  methodToTime();
} finally {
  endTime = System.nanoTime();
}
final long duration = endTime - startTime;

来自How do I time a method's execution in Java?

3

未经检查的异常是错误,请参阅 http://download.oracle.com/javase/tutorial/essential/exceptions/runtime.html

已检查的例外是例如无效的用户输入,可以处理的例外。

4

finally块仍将执行

5

finally块不会执行

答案 5 :(得分:0)

  

Java是否提供任何构造来查找对象的大小?

不是真的。您可以创建一个对象并记下内存差异,或者读取规范以查看对象的组成部分。

  

使用最简单的方法找出方法执行时间而不使用任何分析工具?

像这样:

long start = System.currentTimeMillis();
// do something
System.out.println("Time: " + (System.currentTimeMillis() - start));
  

什么是已检查的异常和运行时异常?

已检查的异常是在例程的throws部分中声明的异常。类似地,未经检查的排序是未声明的排序,例如RuntimeException的子类。

  

如果我在try块的末尾写入return,finally块是否仍会执行?

是的,至少在sun / oracle jvm上。虽然不漂亮..

  

如果我写System.exit(0);在try块的末尾,finally块是否仍会执行?

都能跟得上

答案 6 :(得分:0)

  

Java是否提供任何构造   找出一个物体的大小?

不,它没有。

  

用最简单的方法找出答案   方法执行的时间   不使用任何分析工具?

long begTime = System.currentTimeInMillis();
x.method();
long endTime = System.currentTimeInMillis();
System.out.println("method running time: " + (endTime-begTime));
  

什么是已检查的例外和   运行时异常?

必须捕获已检查的异常,否则编译器将标记;运行时异常不需要catch块。

  

如果我在结尾写回信   尝试阻止,将最终阻止   还在执行吗?

  

如果我写System.exit(0);在末尾   尝试块,将终于   阻止仍然执行?

没有。 http://download.oracle.com/javase/tutorial/essential/exceptions/finally.html

答案 7 :(得分:0)

可以相对容易地找到(可序列化)对象的大小。

import javax.swing.*;
import java.io.*;

class HowLongIsAPieceOfString {

    public static int getObjectSize(Object object) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(object);
        return baos.toByteArray().length;
    }

    public static void main(String[] args) throws IOException {
        Object object = "string";
        System.out.println( "String size: \t" + getObjectSize(object) );

        object = new JButton("Click Me!");
        System.out.println( "Button size: \t" + getObjectSize(object) );

        object = new JTree();
        System.out.println( "Tree size: \t" + getObjectSize(object) );

        object = new Object();
        System.out.println( "Object size: \t" + getObjectSize(object) );
    }
}

<强>输出:

String size:    13
Button size:    4347
Tree size:      5628
Exception in thread "main" java.io.NotSerializableException: java.lang.Object
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
        ...