ジュニアAndroid開発者の面接質問と回答

Milad Bonakdar
著者
Kotlin、ライフサイクル、Jetpack Compose、Room、ネットワーク、コルーチンを中心にジュニアAndroid面接を準備しましょう。
はじめに
ジュニアAndroid開発者の面接では、Kotlinの基礎、Androidのライフサイクル、Composeの状態管理、ローカル保存、ネットワーク通信、コルーチンを実務目線で説明できるかが見られます。よい回答は、UI状態を適切な場所に置く、メインスレッドを止めない、データを安全に保存する、エラーを明確に扱う、といった小さく信頼できるアプリ作りに結びついています。
このガイドで短い回答を練習し、履歴書やポートフォリオの小さなプロジェクトに結びつけてください。ToDoアプリ、天気アプリ、API連携画面などを例にすると、暗記ではなく具体的な経験として話しやすくなります。
Kotlinの基礎 (6つの質問)
1. Kotlinにおける val と var の違いは何ですか?
回答:
val: 不変(読み取り専用)変数を宣言します。一度割り当てられると、その値を変更することはできません。var: 可変変数を宣言します。初期化後に値を変更できます。- ベストプラクティス: 安全のため、デフォルトで
valを使用してください。値を再割り当てする必要がある場合にのみvarを使用してください。
希少度: 非常に一般的 難易度: 簡単
2. KotlinにおけるNullable型とSafe Call演算子について説明してください。
回答: Kotlinの型システムは、nullポインタ例外を防ぐために、Nullable型とNon-Nullable型を区別します。
- Nullable型: 型の後に
?を追加します:String? - Safe Call (
?.): オブジェクトがnullでない場合にのみメソッドを呼び出します - Elvis演算子 (
?:): nullの場合にデフォルト値を提供します - Not-null Assertion (
!!): nullの場合に例外をスローします(控えめに使用してください)
希少度: 非常に一般的 難易度: 簡単
3. Kotlinにおける class と data class の違いは何ですか?
回答:
- 通常のクラス: 標準的なクラス定義
- データクラス: データを保持するための便利なメソッドを自動的に生成します
equals()とhashCode()toString()copy()関数- 分解のための
componentN()関数
希少度: 非常に一般的 難易度: 簡単
4. Kotlinにおけるラムダ式と高階関数とは何ですか?
回答:
- ラムダ: 値として渡すことができる匿名関数
- 高階関数: 関数をパラメータとして受け取るか、関数を返す関数
希少度: 非常に一般的 難易度: 普通
5. Kotlinにおける拡張関数について説明してください。
回答: 拡張関数を使用すると、ソースコードを変更せずに既存のクラスに新しい関数を追加できます。
希少度: 一般的 難易度: 簡単
6. Kotlinにおける == と === の違いは何ですか?
回答:
==: 構造的等価性(equals()を使用して値を比較します)===: 参照的等価性(メモリ参照を比較します)
希少度: 一般的 難易度: 簡単
Androidコンポーネント (5つの質問)
7. Activityとは何ですか?そのライフサイクルについて説明してください。
回答: Activityは、ユーザーインターフェースを持つ単一の画面を表します。明確に定義されたライフサイクルがあります。
onCreate(): Activityが作成されます。UIを初期化し、コンテンツビューを設定します。onStart(): Activityが表示されます。onResume(): Activityがフォアグラウンドにあり、インタラクティブです。onPause(): Activityがフォーカスを失います(別のアクティビティがフォアグラウンドに来ます)。onStop(): Activityが表示されなくなります。onDestroy(): Activityが破棄されます。
希少度: 非常に一般的 難易度: 簡単
8. ActivityとFragmentの違いは何ですか?
回答:
- Activity: フルスクリーンを表します。ユーザーインタラクションのエントリポイントです。独自のライフサイクルがあります。
- Fragment: Activity内のUIの再利用可能な部分です。1つのActivityに複数のFragmentが存在できます。ホストActivityに関連付けられた独自のライフサイクルがあります。
- Fragmentの利点:
- Activity間での再利用性
- モジュール化されたUIコンポーネント
- タブレットのサポート(マルチペインレイアウト)
- Navigationコンポーネントの統合
希少度: 非常に一般的 難易度: 簡単
9. Intentとは何ですか?その種類は何ですか?
回答: Intentは、別のアプリアクセスコンポーネントからのアクションを要求するために使用されるメッセージングオブジェクトです。
- 明示的Intent: 開始する正確なコンポーネントを指定します(クラス名で指定)
- 暗黙的Intent: 一般的なアクションを宣言し、システムが適切なコンポーネントを見つけます
希少度: 非常に一般的 難易度: 簡単
10. AndroidにおけるServiceとは何ですか?
回答: Serviceは、ユーザーインターフェースなしでバックグラウンドで長時間実行される操作を実行するコンポーネントです。
- 種類:
- フォアグラウンドService: 目に見える操作を実行します(音楽プレーヤー)。通知を表示します。
- バックグラウンドService: ユーザーが直接気づかない操作を実行します。
- バインドService: コンポーネントがバインドして対話できるようにします。
希少度: 一般的 難易度: 普通
11. BroadcastReceiverとは何ですか?
回答: BroadcastReceiverは、システム全体のブロードキャストアナウンスに応答するコンポーネントです。
- ユースケース: バッテリー残量が少ない、ネットワーク接続の変更、SMS受信、起動完了
- 登録:
- 静的: AndroidManifest.xml内(新しいAndroidバージョンでは制限されています)
- 動的: コード内(推奨)
希少度: 一般的 難易度: 簡単
UI開発 (4つの質問)
12. LinearLayout、RelativeLayout、ConstraintLayoutの違いは何ですか?
回答:
- LinearLayout: 子を単一の行または列に配置します。シンプルですが、ネストされたレイアウトになる可能性があります。
- RelativeLayout: 子を互いまたは親に対して相対的に配置します。より柔軟ですが、複雑です。
- ConstraintLayout: 最新の柔軟なレイアウト。フラットなビュー階層。複雑なUIに推奨されます。
希少度: 非常に一般的 難易度: 簡単
13. RecyclerViewとは何ですか?どのように機能しますか?
回答: RecyclerViewは、ビューをリサイクルして大きなリストを効率的に表示するためのウィジェットです。
- コンポーネント:
- Adapter: データをビューにバインドします
- ViewHolder: ビューへの参照を保持します(
findViewById呼び出しを回避します) - LayoutManager: アイテムを配置します(Linear、Grid、Staggered)
希少度: 非常に一般的 難易度: 普通
14. Jetpack Composeとは何ですか?
回答: Jetpack Composeは、Androidの最新の宣言型UIツールキットです。
- 宣言型: UIをどのように構築するかではなく、どのように見えるかを記述します
- 利点: コードが少なく、直感的で、強力で、開発が加速されます
- Composable関数: Compose UIの構成要素
希少度: 非常に一般的 難易度: 簡単
15. match_parent と wrap_content の違いは何ですか?
回答: これらは、ビューの寸法を定義するレイアウトパラメータです。
match_parent: ビューは親のサイズに合わせて展開しますwrap_content: ビューはコンテンツに合わせてサイズを調整します- 固定サイズ: 特定のdp値(例:
100dp)
希少度: 非常に一般的 難易度: 簡単
データとネットワーク (5つの質問)
16. Androidでネットワークリクエストを行うにはどうすればよいですか?
回答:
ネットワークにはRetrofitやOkHttpなどのライブラリを使用します。HttpURLConnectionを直接使用することは避けてください。
希少度: 非常に一般的 難易度: 普通
17. Roomとは何ですか?どのように使用しますか?
回答: Roomは、SQLiteの抽象化レイヤーであり、データベースへのアクセスを容易にします。
- コンポーネント:
- Entity: テーブルを表します
- DAO (Data Access Object): データベース操作を定義します
- Database: データベースホルダー
希少度: 非常に一般的 難易度: 普通
18. SharedPreferencesとは何ですか?
回答: SharedPreferencesは、少量のプリミティブデータをキーと値のペアとして保存します。
- ユースケース: ユーザー設定、プリファレンス、単純なフラグ
- 用途: 大量のデータ、複雑なオブジェクト(代わりにRoomを使用してください)
希少度: 非常に一般的 難易度: 簡単
19. SharedPreferencesの apply() と commit() の違いは何ですか?
回答: どちらもSharedPreferencesへの変更を保存しますが、動作が異なります。
apply(): 非同期。すぐに戻ります。変更はバックグラウンドでディスクに書き込まれます。戻り値はありません。commit(): 同期。変更が書き込まれるまでブロックします。boolean(成功/失敗)を返します。- ベストプラクティス: 戻り値が必要な場合を除き、
apply()を使用してください。
希少度: 一般的 難易度: 簡単
20. Kotlinにおけるコルーチンとは何ですか?
回答: コルーチンは、非同期コードを順番に記述する方法を提供し、読みやすく保守しやすくします。
- 利点: 軽量、構造化された並行性、例外処理
- キーコンセプト:
suspend: 一時停止および再開できる関数launch: コルーチンを開始します(fire and forget)async: コルーチンを開始し、結果を返します- Dispatchers: コルーチンが実行されるスレッドを制御します
希少度: 非常に一般的 難易度: 普通


