2

私は現在、Javaエキスパートプロファイルのインタビューの質問を書いています。ここにあります:


このコードを検討する:

リスト1

package com.example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Searching {
    public static void main(String[] args) {
        int input = Integer.valueOf(args[0]);
        String[] strings = {"1", "2", "4", "8", "16", "32", "64", "128"};
        List<Integer> integers = new ArrayList<Integer>();
        for (String s : strings) {
            integers.add(Integer.valueOf(s));
        }
        System.out.println("index of "+input+" is:"+Collections.binarySearch(integers, input, cmp));
    }

    static Comparator<Integer> cmp = new Comparator<Integer>() {
        public int compare(Integer i, Integer j) {
            return i < j ? -1 : (i == j ? 0 : 1);
        }
    };
}

次に、このコードはこのcmd行でコンパイルされます

リスト2

javac com/example/Searching.java

このコマンドラインで実行します

リスト3

java com/example/Searching 128

質問A:

リスト3のプロデュースを実行すると:

index of 128 is:-8

この出力について説明できますか?

質問B:

これを考慮して

 java com/example/Searching 32

出力は

index of 32 is:5

この出力について説明できますか?

質問C:

JRE 1.6、シェル、およびテキストエディタがあると仮定します。この出力を生成するために、リスト1および/またはリスト2および/またはリスト3に何を変更しますか?

index of 128 is:7

備考:変更が少なければ少ないほど良いです。


私の質問は:

  • それらの質問に対するあなたの答えは何ですか?
  • それを改善する方法は?
4

3 に答える 3

4

インタビューの質問として、私は問題をより単純にします。インタビューでは、ヒントを割り当てずにこの種の問題を解決するのははるかに難しい場合があることがわかりました。彼らが答えることができないいくつかの質問の後、面接対象者はあきらめることができますが、それは必ずしも生産的ではありません。


この出力について説明できますか?

コードにバグがあり、i == jAとBに異なる影響を与えます。あるケースでは、ソートは値が128未満であると想定し、2番目のケースでは、これがキャッシュされているため、32に一致します。

-XX:+ AggressiveOpts`または別のオプションのようなものを試して整数キャッシュサイズを増やすと、それぞれの場合に一致します。

リスト1に何を変更しますか

i == j ? 0 : -1に変更i > j ? -1 : 0

もちろん、Integer.compare()を使用すると問題が発生します;)

それを改善する方法

プログラムの目的に応じて、私は使用します

int count = 0;
for(int n = Integer.parseInt(args[0]); n != 0; n >>>= 1)
  count++;
System.out.println(count);
于 2013-02-02T11:11:10.240 に答える
4

Cへの回答:

public class Searching {
    public static void main(String[] args) {
        int input = Integer.parseInt(args[0]);
        int[] values = {1, 2, 4, 8, 16, 32, 64, 128};
        System.out.println("index of " + input + " is:" + Arrays.binarySearch(values, input));
    }
}

専門家はそのコードをそれほどひどいままにしないからです。

面接の質問を改善する方法は?

面接でパズルを解かないでください。

または、このページをご覧ください。

于 2013-02-02T11:42:55.077 に答える
0

この質問で私の期待を説明するだけです:

質問A

  • ==Java言語の基本的な知識を示します(との違いequals
  • 他の誰かによって書かれた醜い(そしてコメントされていない)コードを理解する能力

質問B

  • JVMと整数キャッシュに関するより「深い」知識を示します(私の意見では、最も重要ではありません)
  • 自信を示す:この奇妙な行動が質問Aの答えが正しくないことを示しているように見えても。

質問C

  • 制約を注意深く理解し、吸収する能力を示します。この場合、使用可能なJDKがないため、listing1またはlisting2を変更することはできません。

さらに、質問Bに答えるための手がかりを与えます。

(つまり、コマンドラインにSystemプロパティを追加することは、この質問への回答として私が期待していることです:) java.lang.Integer.IntegerCache.high

于 2013-02-02T14:11:43.457 に答える