Contents
📥 PDF ダウンロード(外部サイトへのリンク)
本記事で紹介する 2026 年版無料 PDF「Java 面接質問リスト」 は、以下のページから取得できます。
※ 本ダウンロードは外部サイト(Guru99)へ遷移します。利用規約・プライバシーポリシーをご確認の上ご利用ください。
取得した PDF は、質問 / 回答例 / 評価ポイント がテーマ別に整理されているので、日々の学習や模擬面接で活用してください。
1. 基礎から実務まで網羅するコアテーマ
1‑1. カバーすべき主な領域
| テーマ | 代表的質問例 | 学習のポイント |
|---|---|---|
| クラス・継承・ポリモーフィズム | 抽象クラスとインタフェースの違いは? | 抽象クラスは状態保持可能、インタフェースは多重実装が前提。default メソッドで実装可 |
| コレクションフレームワーク | HashMap と ConcurrentHashMap の使い分けは? |
スレッド安全性が必要かどうかで選択。内部ロック分割方式によりスケーラビリティ向上 |
| Stream API & Optional | 中間操作と終端操作の違いは? | 中間操作は遅延評価、終端操作で初めて実行される |
| IO/NIO(非同期 I/O) | 非同期ファイル I/O をどう実装するか? | AsynchronousFileChannel + CompletionHandler でコールバック処理 |
| 例外処理・カスタム例外 | チェック例外とランタイム例外の選択基準は? | 回復可能ならチェック例外、プログラミングエラーはランタイム例外。カスタム例外は意味ある名前と原因保持が必須 |
| ジェネリクス & ワイルドカード | List<? extends Number> の使用シーンは? |
読み取り専用でサブタイプ受容(PECS 原則) |
| ラムダ式・メソッド参照 | ラムダ式と匿名クラスの性能差は? | invokedynamic によりほぼ同等。キャプチャ変数が多いとオーバーヘッド増大 |
1‑2. 学習時のチェックリスト
- 概念 → コード例 → 設計意図 の順で整理
- キーワードは 太字 で強調し、面接官に印象付ける
- 各テーマごとに「質問」「回答要点」をノートにまとめ、STAR 法(Situation‑Task‑Action‑Result)でエピソード化
2. Java 21/22 の最新機能 ― 面接で押さえておくべきポイント
2‑1. レコード・シールドクラス・パターンマッチング
| 機能 | 主な利点 | 面接での質問例 |
|---|---|---|
| レコード | イミュータブルデータキャリアを簡潔に定義 | 「レコードは何が自動生成されますか?」 |
| シールドクラス(Sealed) | 継承階層をコンパイル時に制御 | 「シールドクラスの permits 句の意味は?」 |
| パターンマッチング(switch / instanceof) | 条件分岐が簡潔化、型安全性向上 | 「パターンマッチングで instanceof を書き換える例を示してください」 |
コードサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// レコード record UserDto(String name, int age) {} // シールドクラス public sealed interface Payment permits CreditCard, PayPal {} final class CreditCard implements Payment {} non-sealed class PayPal implements Payment {} // 継承可 // パターンマッチング switch static String describe(Object obj) { return switch (obj) { case String s -> "文字列: " + s; case Integer i && i > 0 -> "正の整数"; case null, default -> "不明"; }; } |
ポイント
- イミュータブル → スレッド安全性が自然に確保
- アクセス制御 → 継承可能範囲を限定し、API の意図を明示
2‑2. Virtual Thread(Project Loom)※ 環境依存の注意点あり
| 項目 | 内容 |
|---|---|
| 概要 | 従来の OS スレッドに比べて軽量な「仮想スレッド」 |
| 実装例 | Executors.newVirtualThreadPerTaskExecutor() でタスク単位に生成 |
| 利用シーン | I/O 待ちが多いマイクロサービス、バッチ処理の同時実行数を増やしたいケース |
| 注意点 | 「数十万スレッド」 と表記するのは、ヒープサイズ・OS の設定に依存します。実際には「多数(数千〜数万)を容易に扱える」と説明すると安全です。 |
|
1 2 3 4 5 6 7 8 9 10 |
ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor(); try (exec) { CompletableFuture<Void> cf = CompletableFuture.runAsync(() -> { try { Files.readAllLines(Path.of("large.txt")); } catch (IOException e) { /* ハンドリング */ } }, exec); cf.join(); // 完了待ち } |
評価ポイント
- ユースケースの説明(例:ブロッキング I/O を仮想スレッドで隠蔽)
- デバッグやプロファイリングが従来と異なる点への認識
2‑3. Foreign Function & Memory API(JEP 424 など、プレビュー版)
| 項目 | 内容 |
|---|---|
| 目的 | JNI の代替として安全かつ高速にネイティブコード・メモリへアクセス |
| パッケージ | java.lang.foreign(Java 22 プレビュー) |
| 主な利点 | バウンダリチェックでメモリ安全性を確保、シンボル解決が簡潔 |
| 実務上の留意点 | プレビュー機能は本番環境での使用前に十分な検証が必要 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import static java.lang.foreign.ValueLayout.*; MemorySegment seg = MemorySegment.allocateNative(JAVA_LONG); seg.set(JAVA_LONG, 0, 12345L); // ネイティブメモリへ書き込み Linker linker = Linker.nativeLinker(); SymbolLookup lookup = SymbolLookup.loaderLookup(); MethodHandle printf = linker.downcallHandle( lookup.find("printf").orElseThrow(), FunctionDescriptor.of(JAVA_INT, ADDRESS)); printf.invokeExact(seg.address()); // C の printf を呼び出し |
ポイント
- メモリ安全性(バウンダリチェック)を強調
- プレビュー版であること、実務導入には JDK の正式リリースが必要である旨を説明
3. デザインパターン・テスト技法・GC チューニング
3‑1. 頻出デザインパターンと評価基準
| パターン | 代表質問 | 回答の核となるポイント |
|---|---|---|
| Singleton | スレッドセーフな実装は? | enum ベースが最も安全。代替案として volatile + double‑checked locking |
| Factory Method | Factory Method と Abstract Factory の違いは? | 前者は単一製品族、後者は複数製品族を生成するインタフェース |
| Observer | デメリットは? | メモリリーク(未解除リスナ)や通知順序が不定になる点 |
評価視点
1. パターン選択の 意図 を説明できるか
2. 実務で実装した 具体例(コード片)を示せるか
3‑2. JUnit 5 と Mockito の実践的活用
- JUnit 5 の拡張ポイント
@Nested:テスト階層化で可読性向上@TestFactory:動的テスト生成(パラメータ化)-
条件付きテスト (
@EnabledOnOs,@DisabledIf) -
Mockito の基本スタブ&検証
|
1 2 3 4 5 6 7 8 9 |
@Test void serviceCallsRepository() { Repository repo = Mockito.mock(Repository.class); Service svc = new Service(repo); svc.process("key"); Mockito.verify(repo).save(Mockito.eq("key")); } |
評価基準
- テストの 粒度(単体 vs 統合)を適切に判断できるか
- モック対象と実装ロジックの境界線を明確に説明できるか
3‑3. ガベージコレクタ(GC)の種類とチューニング例
| GC | 主な特徴 | 推奨シーン |
|---|---|---|
| Serial | 単一スレッド、低遅延が不要なバッチ処理向け | メモリ < 256 MB の小規模アプリ |
| Parallel | 複数スレッドでマーク・コピー、スループット重視 | 大量データ解析 |
| G1 | 区分割ヒープで予測可能な Pause 時間 | ミッションクリティカル Web アプリ |
| ZGC / Shenandoah | 超低遅延(≤ 10 ms)を実現 | 高スループット・リアルタイム処理 |
チューニング例(G1 の場合)
|
1 2 3 |
-XX:MaxGCPauseMillis=20 # 最大 pause 時間 20 ms に抑える -XX:G1HeapRegionSize=4M # ヒープ領域を 4 MB 区分に設定 |
評価ポイント
- スループット vs レイテンシ のトレードオフを論理的に説明できるか
4. 面接官が重視する「回答構成」のコツ
4‑1. 3 軸評価モデル
| 評価軸 | 内容 |
|---|---|
| 理解度 | 基本概念を正確に説明できるか |
| 実装経験 | 実務での具体的エピソードがあるか |
| 問題解決プロセス | 論理的なアプローチ(STAR 法)で語れるか |
4‑2. 回答フレームワーク(結論 → 根拠 → 例)
- 結論をシンプルに述べる(例:
G1 GC は低遅延が必要な Web アプリに適しています。) - 根拠として特徴・数値データや比較表を提示
- 具体例で自分のプロジェクト経験やコードスニペットを添える
Tip:重要キーワードは 太字、必要に応じて コードブロック を挿入すると印象が残りやすいです。
4‑3. STAR 法でエピソード化する例
| 項目 | 内容 |
|---|---|
| Situation (状況) | 大規模バッチ処理で GC の長時間停止が頻発 |
| Task (課題) | Pause 時間を 200 ms 以下に抑える必要あり |
| Action (行動) | -XX:+UseG1GC に切替、MaxGCPauseMillis=100 を設定、不要オブジェクトの早期解放をコードレビューで徹底 |
| Result (結果) | 平均 Pause が 85 ms に改善し、システムスループットが 15 % 向上 |
5. 効果的な学習フローと模擬面接の実践手順
- PDF をテーマ別に分割(例:コレクション・並行処理・新機能)
- 毎日 2–3問を解く → 解答は「結論+根拠+コード」の形でノートに記録
- 週1回ペア面接(同僚・メンター)を実施し、以下の点でフィードバックを得る
- 説明の流れが自然か
- キーワードが適切に強調されているか
- コード例が正確か
学習ツール例
- Anki:質問カードと回答カードを作成し、間隔反復で定着
- GitHub Gist:コードスニペットを保存・バージョン管理
- Zoom/Teams:遠隔模擬面接の録画 → 後から自己レビュー
6. 次のステップ
- 上記リンクから PDF「Java 面接質問リスト」 をダウンロード
- 本記事の「学習フロー」に沿って、テーマ別に毎日少しずつ取り組む
- 模擬面接で実際に声に出して回答し、フィードバックを繰り返す
最終的な目標は、最新の Java 21/22 機能と自分の実務経験を結びつけた「ストーリーテリング」できることです。これが面接合格への最大の差別化要因となります。
本記事は 2026 年時点の情報に基づいて作成しています。JDK のバージョンや機能は今後変更される可能性がありますので、公式ドキュメントで最新情報をご確認ください。