mike-neckのブログ

Java or Groovy or Swift or Golang

#JJUG ナイトセミナー 「Javaの今をクイズと書籍で知ろう」に行ってきた

こんにちわ、みけです。

表記の通りJJUG ナイト・セミナー「ビギナーからエキスパートまで、Javaの今をクイズと書籍で知ろう」に行ってきました。

その参加速報。


Javaエンジニア養成読本ができるまで

堀北真希さんファンクラブ会員番号11番のきくたろーさんの発表。

だいたい知ってた(失礼)

  • 執筆スケジュールについて
  • 発売日の前日あたりの出来事について
  • のざきひろふみさんとは…

Javaエンジニア養成読本について

ブログという言葉がなかった頃からJavaのことについて記事を書き続けているいがぴょんさんの発表。

内容を簡単にまとめると…

  • 『人月の神話』は読め
  • わかったことはちゃんとブログなりなんなり、googleで検索できるものに書け、SEO対策も忘れるな
  • 車輪の再発明楽しいよね

至極のJavaクイズ 総集編

日経ソフトウエアに連載されていた「至極のJavaクイズ」の総集編

さくらばさん曰く、

とのことでした。

問題は6問くらい出題されました。

僕は1問しか当たりませんでした(´・ω・`)

出題された問題は次のとおり(なお、これらのコードの著作権は寺田さん、宮川さん、桜庭さんにあります)(なお、転載の許可とってないので、後で消すかも)。

1問目

次のコードを実行した時に表示される内容はどれ?

  1. hoge
  2. null
  3. コンパイルエラー
  4. その他
public class Vertigo {

    static class String {
        private final java.lang.String s;

        String(java.lang.String s) {
            this.s = s;
        }
        java.lang.String get() {
            return s;
        }
    }

    public static void main(String... args) {
        String s = new String("hoge");
        System.out.println(s.get());
    }
}

2問目

次のコードを実行した時に表示される内容はどれ?

  1. 1245
  2. 1235
  3. 実行時例外
  4. コンパイルエラー
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class TriTriangle {

    public static void main(String[] args) {
        List<Integer> list = Stream.of(1, 2, 3, 4, 5)
                .collect(Collectors.toList());
        IntStream.rangeClosed(1, 5)
                .filter(i -> i % 3 == 0)
                .forEach(list::remove);
        list.forEach(System.out::print);
    }
}

3問目

次のコードを実行した時に表示される内容はどれ?

  1. 0x2a
  2. null
  3. コンパイルエラー
  4. NoSuchElementException
import java.util.HashMap;
import java.util.Map;

public class AnswerToEverything {

    public static void main(String[] args) {
        Map<Byte, String> map = new HashMap<>();
        for (byte b = 0; b < 100; b++) {
            map.put(b, String.format("0x%02x", b));
        }
        System.out.println(map.get(42));
    }
}

4問目

次のコードを実行した時に表示される内容はどれ?

  1. take five
  2. keep rhythm
  3. 実行時例外
  4. その他(実行が終わらないとか)
public class TakeFive {

    public static void main(String[] args) {
        int i = 0;
        long l = 0l;
        for (; i < Integer.MAX_VALUE; i+= 5) {
            l++;
        }
        if (i == l*5) System.out.println("take five");
        else System.out.println("keep rhythm");
    }
}

5問目

次のコードを実行した時に表示される内容はどれ?

  1. の文字
  2. の文字
  3. 何も表示されない
  4. 数字
import java.util.stream.IntStream;

public class KanaCatalog {

    public static void main(String[] args) {
        IntStream.range('あ', 'ぉ')
                .mapToObj(c -> (char)c)
                .forEach(System.out::write);
    }
}

6問目

次のコードを実行した時に表示される内容はどれ?

  1. 30.000000000
  2. 52.500000000
  3. 52.499999999
  4. その他
public class OddsAndSods {

    public static void main(String[] args) {
        long votes = 30l;
        float odds = 1.75f;
        System.out.println(String.format("%12.9f", votes * odds));
    }
}

7問目

次のコードを実行した時に表示される内容はどれ?

  1. g
  2. a
  3. どちらとも言えない
  4. 実行環境に依存する
import java.util.Random;

public class LastPuzzle {

    public static long ant() {
        return new Random().longs(1_000_000l).sum();
    }

    public static long grasshopper() {
        return new Random().longs(1_000_000l).parallel().sum();
    }

    public static void main(String[] args) {
        long from = System.nanoTime();
        ant();
        long ant = System.nanoTime() - from;

        from = System.nanoTime();
        grasshopper();
        long grasshopper = System.nanoTime() - from;

        System.out.println(grasshopper < ant ? 'g' : 'a');
    }
}

以上の問題を通して、

  • 扱う数値の範囲に気をつける
  • 小数を精密に扱うならBigDecimal(遅いけどな)
  • 一体いつから、Stream#parallel()が常に高速だと勘違いしていた
  • javadoc
  • intとかbyteとかcharとかアレだよね

ということが実感できますね。

回答と修正の仕方はそのうち公開される死霊を待ちましょう。


懇親会は参加しませんでした。

最近、体力がなくて23時には寝ないと今の生活リズムを維持できないのです。(これを書いているのは23時過ぎですが…)

以上。