こんにちわ、みけです。
表記の通りJJUG ナイト・セミナー「ビギナーからエキスパートまで、Javaの今をクイズと書籍で知ろう」に行ってきました。
その参加速報。
Javaエンジニア養成読本ができるまで
堀北真希さんファンクラブ会員番号11番のきくたろーさんの発表。
だいたい知ってた(失礼)
- 執筆スケジュールについて
- 発売日の前日あたりの出来事について
- のざきひろふみさんとは…
Javaエンジニア養成読本について
ブログという言葉がなかった頃からJavaのことについて記事を書き続けているいがぴょんさんの発表。
内容を簡単にまとめると…
至極のJavaクイズ 総集編
日経ソフトウエアに連載されていた「至極のJavaクイズ」の総集編
さくらばさん曰く、
とのことでした。
問題は6問くらい出題されました。
僕は1問しか当たりませんでした(´・ω・`)
出題された問題は次のとおり(なお、これらのコードの著作権は寺田さん、宮川さん、桜庭さんにあります)(なお、転載の許可とってないので、後で消すかも)。
1問目
次のコードを実行した時に表示される内容はどれ?
hoge
null
- コンパイルエラー
- その他
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問目
次のコードを実行した時に表示される内容はどれ?
1245
1235
- 実行時例外
- コンパイルエラー
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問目
次のコードを実行した時に表示される内容はどれ?
0x2a
null
- コンパイルエラー
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問目
次のコードを実行した時に表示される内容はどれ?
take five
keep rhythm
- 実行時例外
- その他(実行が終わらないとか)
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問目
次のコードを実行した時に表示される内容はどれ?
あ
〜ぉ
の文字あ
〜お
の文字- 何も表示されない
- 数字
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問目
次のコードを実行した時に表示される内容はどれ?
30.000000000
52.500000000
52.499999999
- その他
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問目
次のコードを実行した時に表示される内容はどれ?
g
a
- どちらとも言えない
- 実行環境に依存する
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時過ぎですが…)
以上。