Javaバックエンド開発者の面接質問: Spring Boot・JPA・API

Milad Bonakdar
著者
Spring Boot、REST API、マイクロサービス、JPA/Hibernate、セキュリティ、テスト、設計判断を実務寄りの質問で確認できます。
はじめに
Javaバックエンド面接で見られるのは、フレームワーク名を暗記しているかではなく、信頼できるAPIを設計・実装・運用できるかです。Spring Boot、REST設計、永続化、トランザクション、テスト、セキュリティ、可観測性、マイクロサービスの設計判断を聞かれることが多いです。
このガイドでは、概念だけでなく実務につながる答え方を準備します。何をする仕組みか、いつ使うか、何が失敗しやすいか、どうテスト・デバッグするかまで話せるようにしましょう。2026年時点では、Java 17+の前提、Java 21/25の話題、Spring Boot 3/4、OAuth2/JWTによるAPIセキュリティも押さえておくと安心です。
このガイドの使い方
- まずSpring BootとJavaの基礎を確認し、その後に中級・難しめの質問を声に出して練習します。
- それぞれの答えに、自分の職務経歴書やポートフォリオから具体例を1つ加えます。
- トレードオフがある質問では、標準で選ぶ方法と、別案に切り替える判断材料を説明します。
- 履歴書にマイクロサービス、JPA、Kafka、Docker、クラウド運用を書くなら、障害対応やデバッグの具体例を準備します。
Spring Boot のコアコンセプト
1. Spring Boot とは何か、また従来の Spring Framework とどのように異なりますか?
回答:
- Spring Framework: エンタープライズ Java 開発のための包括的なフレームワーク。セットアップには、手動での設定(XML または Java ベース)が大幅に必要です。
- Spring Boot: 新しい Spring アプリケーションのセットアップと開発を簡素化する Spring Framework の拡張機能です。
- 自動構成: クラスパスの依存関係に基づいて Bean を自動的に構成します。
- 組み込みサーバー: Tomcat、Jetty、または Undertow が含まれているため、WAR ファイルをデプロイする必要はありません。
- スターター: ビルド構成を簡素化するための厳選された依存関係。
- 独断的なデフォルト: 「設定よりも規約」のアプローチ。
希少性: 一般的 難易度: 簡単
2. @SpringBootApplication アノテーションについて説明してください。
回答: これは、他の 3 つのアノテーションを組み合わせた便利なアノテーションです。
@Configuration: クラスを Bean 定義のソースとしてマークします。@EnableAutoConfiguration: Spring Boot に、クラスパス設定、他の Bean、およびさまざまなプロパティ設定に基づいて Bean の追加を開始するように指示します。@ComponentScan: Spring に、現在のパッケージおよびサブパッケージ内の他のコンポーネント、構成、およびサービスを検索するように指示します。
希少性: 一般的 難易度: 簡単
3. 依存性注入(DI)と制御の反転(IoC)とは何ですか?
回答:
- IoC: オブジェクトの作成と管理の制御が、プログラマーからコンテナ(Spring IoC コンテナ)に移譲される原則。
- DI: IoC を実装するために使用されるデザインパターン。オブジェクトが依存関係を作成する代わりに、それらは(コンストラクタ、セッター、またはフィールドを介して)オブジェクトに「注入」されます。
- 利点: 疎結合、より簡単なテスト(依存関係のモック)、およびより優れた保守性。
希少性: 非常に一般的 難易度: 中
4. Spring Boot スターターとは何ですか?例を挙げてください。
回答: スターターは、アプリケーションに含めることができる便利な依存関係記述子のセットです。これらには、一貫性のあるサポートされた管理された推移的な依存関係のセットを使用して、プロジェクトを迅速に起動および実行するために必要なすべての依存関係が含まれています。
- 例:
spring-boot-starter-web: Web アプリケーションを構築するため(Tomcat および Spring MVC を含む)。spring-boot-starter-data-jpa: Spring Data JPA を Hibernate と共に使用するため。spring-boot-starter-test: テストのため(JUnit、Mockito を含む)。spring-boot-starter-security: Spring Security のため。
希少性: 一般的 難易度: 簡単
5. Spring Actuator とは何ですか?
回答: Spring Boot Actuator は、アプリケーションの監視と管理に役立つ、本番環境に対応した機能を提供します。
- エンドポイント:
/health(アプリのステータス)、/metrics(メモリ、CPU 使用率)、/info(アプリの情報)、/env(環境プロパティ)などのエンドポイントを公開します。 - 使用法: 本番環境でマイクロサービスのヘルスチェックを行うための運用チームにとって非常に重要です。
希少性: 一般的 難易度: 中
マイクロサービスとアーキテクチャ
6. モノリシックアーキテクチャと比較して、マイクロサービスの利点は何ですか?
回答:
- スケーラビリティ: 個々のサービスは、需要に基づいて個別にスケーリングできます。
- テクノロジーにとらわれない: さまざまなサービスは、タスクに最適なさまざまなテクノロジー(Java、Go、Python)を使用できます。
- 障害分離: 1 つのサービスの障害が必ずしもシステム全体を停止させるわけではありません。
- 独立したデプロイメント: チームはサービスを個別にデプロイできるため、リリースサイクル(CI/CD)が高速化されます。
希少性: 一般的 難易度: 中
7. API ゲートウェイとは何ですか?なぜそれを使用するのですか?
回答: API ゲートウェイは、システムへの単一のエントリポイントとして機能するサーバーです。クライアントからのすべての API 呼び出しを受け取り、適切なマイクロサービスにルーティングします。
- 機能: リクエストルーティング、コンポジション、およびプロトコル変換。
- クロス切断的な関心事: 認証、SSL 終端、レート制限、キャッシング、ロギング。
- 例: Spring Cloud Gateway、Netflix Zuul、Kong。
希少性: 非常に一般的 難易度: 中
8. サービスディスカバリ(Eureka)について説明してください。
回答: マイクロサービス環境では、サービスインスタンスは動的な IP アドレスを持っています。サービスディスカバリは、サービスが互いを見つけるためのメカニズムです。
- Eureka サーバー: サービスレジストリとして機能します。
- Eureka クライアント: マイクロサービスは、起動時に Eureka サーバーに自身を登録し、ハートビートを送信します。
- ディスカバリ: サービス A がサービス B を呼び出す必要がある場合、Eureka にサービス B のアドレスを要求します。
希少性: 一般的 難易度: 中
9. サーキットブレーカーパターンとは何ですか?
回答: サーキットブレーカーパターンは、アプリケーションが失敗する可能性が高い操作(ダウンしているサービスを呼び出すなど)を繰り返し実行しようとするのを防ぎます。
- 状態:
- クローズ: リクエストは正常に流れます。
- オープン: リクエストはすぐにブロックされ(フェイルファスト)、障害が発生したサービスが回復できるようになります。
- ハーフオープン: サービスが回復したかどうかをテストするために、限られた数のリクエストが許可されます。
- ツール: Resilience4j(推奨)、Hystrix(非推奨)。
希少性: 非常に一般的 難易度: 難しい
データベースと JPA
10. JPA と Hibernate とは何ですか?
回答:
- JPA(Java Persistence API): Java オブジェクトとリレーショナルデータベース間のデータへのアクセス、永続化、および管理のための仕様。単なるインターフェースです。
- Hibernate: JPA 仕様の最も一般的な実装。ORM(オブジェクトリレーショナルマッピング)ツールです。
希少性: 一般的 難易度: 簡単
11. Hibernate の N+1 Select 問題について説明してください。
回答: N+1 問題は、データアクセスフレームワークが、プライマリ SQL クエリの実行時に取得できたはずの同じデータを取得するために、N 個の追加の SQL ステートメントを実行するときに発生します。
- シナリオ:
Authorのリストを取得します(1 つのクエリ)。author.getBooks()を反復処理してアクセスします(N 個のクエリ、各著者に対して 1 つ)。 - 解決策: JPQL で Join Fetch を使用するか(
SELECT a FROM Author a JOIN FETCH a.books)、エンティティグラフを使用して、関連するエンティティを単一のクエリで事前にロードします。
希少性: 非常に一般的 難易度: 中
12. @Entity、@Table、および @Column の違いは何ですか?
回答:
@Entity: クラスがエンティティであり、データベーステーブルにマッピングされることを指定します。@Table: オプション。マッピングに使用するデータベーステーブルの名前を指定します。省略した場合、クラス名が使用されます。@Column: オプション。フィールドまたはプロパティがマッピングされる列の詳細を指定します。省略した場合、フィールド名が使用されます。
希少性: 一般的 難易度: 簡単
セキュリティとテスト
13. Spring Boot アプリケーションをどのように保護しますか?
回答: まず Spring Security を基盤にし、アプリケーションの種類に合ったセキュリティモデルを説明します。良い回答では、認証、認可、トークン検証、運用上の保護を分けて話します。
- 認証: OAuth2/OIDC、セッションログイン、サービス間認証などで、誰がAPIを呼んでいるかを確認します。
- 認可: ロール、スコープ、
@PreAuthorizeなどのメソッドセキュリティ、SecurityFilterChainのルールで実行可能な操作を制限します。 - JWT/OAuth2リソースサーバー: ステートレスAPIでは、トークン内容をそのまま信じず、Bearerトークンの発行者、有効期限、署名、スコープを検証します。
- APIの堅牢化: HTTPS、意図したCORS設定、ブラウザセッションでのCSRF対策、安全なエラーレスポンス、レート制限、機密操作の監査ログを考えます。
希少性: 一般的 難易度: 中
14. Mockito の @Mock と @InjectMocks の違いは何ですか?
回答:
@Mock: クラス/インターフェースのモックオブジェクトを作成します。これには実際の動作はありません。when(...).thenReturn(...)を使用して動作を定義します。@InjectMocks: クラスのインスタンスを作成し、@Mock(または@Spy)アノテーションで作成されたモックをこのインスタンスに注入します。テスト対象のクラスに使用されます。
希少性: 一般的 難易度: 中
15. Spring Boot でトランザクションをどのように処理しますか?
回答:
@Transactional アノテーションを使用します。
- メカニズム: Spring はクラス/メソッドの周りにプロキシを作成します。メソッドの実行前にトランザクションを開始し、メソッドが戻った後にコミットします。
RuntimeExceptionがスローされた場合、トランザクションをロールバックします。 - 伝播: トランザクションが既存のトランザクションにどのように関連するかを構成できます(例:
REQUIRED、REQUIRES_NEW)。
希少性: 一般的 難易度: 中
高度なトピック
16. Spring Cloud Config とは何ですか?
回答: Spring Cloud Config は、分散システムでの外部化された構成に対するサーバー側およびクライアント側のサポートを提供します。
- Config サーバー: すべての環境にわたってアプリケーションの外部プロパティを管理するための一元的な場所。Git、SVN、または Vault でバックアップできます。
- 利点: アプリケーションを再デプロイせずに構成を変更できます(
@RefreshScopeを使用)。
希少性: まれ 難易度: 中
17. Spring Bean の Singleton スコープと Prototype スコープの違いについて説明してください。
回答:
- Singleton(デフォルト): Spring IoC コンテナごとに Bean のインスタンスが 1 つだけ作成されます。キャッシュされ、再利用されます。
- Prototype: Bean が要求されるたびに新しいインスタンスが作成されます。
- その他: Request、Session(Web 対応スコープ)。
希少性: 一般的 難易度: 簡単
18. Java の Checked 例外と Unchecked 例外の違いは何ですか?
回答:
- Checked 例外:
Exceptionから継承します(ただしRuntimeExceptionではありません)。コンパイラは、それらを処理する(try-catch)か、それらを宣言する(throws)ことを強制します。例:IOException、SQLException。回復可能な状態を表します。 - Unchecked 例外:
RuntimeExceptionから継承します。コンパイラは、それらを処理することを強制しません。例:NullPointerException、IllegalArgumentException。プログラミングエラーを表します。Spring の@Transactionalは、デフォルトでは unchecked 例外でのみロールバックします。
希少性: 一般的 難易度: 簡単
19. Java のガベージコレクションはどのように機能しますか?
回答: ガベージコレクション(GC)は、到達不能になったオブジェクトによって占有されているメモリを自動的に再利用するプロセスです。
- 世代別仮説: ほとんどのオブジェクトは短命です。
- ヒープ構造: ヤング世代(Eden、Survivor スペース)とオールド世代。
- マイナー GC: ヤング世代をクリーンアップします。高速。
- メジャー/フル GC: オールド世代をクリーンアップします。低速で、「Stop-the-world」の一時停止を引き起こす可能性があります。
- アルゴリズム: G1GC(最新の Java のデフォルト)、ZGC、Shenandoah(低レイテンシ)。
希少性: 一般的 難易度: 難しい
20. Java ストリームとは何ですか?
回答: Java 8 で導入されたストリームは、オブジェクトのコレクションを処理するための関数型アプローチを提供します。
- 機能: 宣言型、パイプライン処理、内部イテレーション。
- 操作:
- 中間:
filter、map、sorted(遅延)。 - ターミナル:
collect、forEach、reduce(処理をトリガーします)。
- 中間:
- 並列ストリーム: 複数のスレッドを使用してデータを並行して処理できます(
.parallelStream())。
希少性: 一般的 難易度: 中


