Pythonジュニアバックエンド開発者の面接質問

Milad Bonakdar
著者
Python基礎、Django/Flask、REST API、データベース、テスト、Git、Docker、APIセキュリティを扱う30問で、ジュニアバックエンド面接に備えましょう。
Pythonジュニアバックエンド面接で重点的に準備すること
Pythonジュニアバックエンド開発者の面接では、Pythonの基本動作を説明できること、簡単なHTTPルートを作れること、REST API、SQLデータ、テスト、Git、基本的なAPIセキュリティを理解していることを示す必要があります。このガイドでは、声に出して練習しやすい30の代表的な質問と回答をまとめています。
次の3段階で使うと効果的です。
- まず、回答例を見ずに各質問へ答えてみる。
- 次に、認証やデータベースモデルを含むCRUD APIなど、自分が作った小さなプロジェクトと回答を結びつける。
- 最後に、DjangoとFlaskの使い分け、インデックスが読み取りを速くする一方で書き込みコストを増やす理由、エンドポイントの保護方法など、判断の理由を練習する。
求人票にFastAPIがある場合は、ルーティング、バリデーション、async、依存関係の考え方も準備しましょう。以下の基礎は、それでも多くのPythonジュニアバックエンド面接で問われる内容をカバーしています。
Python の基礎 (10 の質問)
1. Python の list と tuple の違いは何ですか?
回答:
list: 可変 (変更可能)、角括弧[]で定義、タプルより遅い。tuple: 不変 (変更不可)、丸括弧()で定義、リストより高速、辞書のキーとして使用可能。
例:
希少性: 一般的 難易度: 簡単
2. is と == の違いを説明してください
回答:
==: 値の同等性をチェックします (オブジェクトは同じ値を持っていますか?)。is: 参照の同等性をチェックします (変数はメモリ内のまったく同じオブジェクトを指していますか?)。
例:
希少性: 一般的 難易度: 簡単
3. Python のデコレータとは何ですか?どのように機能しますか?
回答: デコレータは Python のデザインパターンで、既存のオブジェクトの構造を変更せずに新しい機能を追加できます。デコレータは通常、デコレートしたい関数の定義の前に呼び出されます。
例:
希少性: 一般的 難易度: 普通
4. *args と **kwargs の違いは何ですか?
回答:
*args: 可変個のキーワードなし引数を関数に渡すことができます。それらをタプルに収集します。**kwargs: 可変個のキーワード引数を関数に渡すことができます。それらを辞書に収集します。
例:
希少性: 一般的 難易度: 簡単
5. リスト内包表記について説明してください
回答: リスト内包表記は、リストを作成するための簡潔な方法を提供します。一般的なアプリケーションは、別のシーケンスまたはイテラブルの各メンバーに適用されたいくつかの操作の結果である新しいリストを作成すること、または特定の条件を満たす要素のサブシーケンスを作成することです。
例:
希少性: 一般的 難易度: 簡単
6. ジェネレータと yield キーワードとは何ですか?
回答: ジェネレータは、イテレータを作成する簡単な方法です。これらは、反復処理できるオブジェクト (イテレータ) を返す関数です (一度に 1 つの値)。 yield キーワードは return のように使用されますが、関数はジェネレータを返します。
例:
利点: メモリ効率が良い (遅延評価)。
希少性: 普通 難易度: 普通
7. Python でのメモリ管理はどのように機能しますか?
回答: Python は、メモリを管理するためにプライベートヒープスペースを使用します。すべての Python オブジェクトとデータ構造は、プライベートヒープに配置されます。プログラマはこのプライベートヒープにアクセスできません。インタープリタがこの Python プライベートヒープを処理します。 Python には組み込みのガベージコレクタもあり、未使用のメモリをすべて再利用し、ヒープスペースで使用できるようにします。
希少性: 普通 難易度: 普通
8. グローバルインタープリタロック (GIL) とは何ですか?
回答: 標準的なCPythonでは、グローバルインタープリタロック (GIL) はPythonオブジェクトのメモリ管理を保護しながら、一度に1つのスレッドだけがPythonバイトコードを実行できるようにするミューテックスです。そのため、CPUバウンドなマルチスレッドPythonコードは複数コアにうまくスケールしないことがあります。一方で、ネットワークやファイルI/Oなどのブロッキング処理ではGILが解放されるため、I/Oバウンドなスレッドは役立つ場合があります。
現在の補足: Python 3.13以降では、GILを無効化できるオプションのfree-threadedビルドもあります。ただし、これは特別なビルド選択であり、多くのジュニア面接で前提にされる標準動作ではありません。
影響: CPUバウンドな処理ではmultiprocessing、ネイティブ拡張、バックグラウンドワーカーを検討します。I/OバウンドなWeb処理では、スレッドやasyncパターンが引き続き有効です。
希少性: 普通 難易度: 難しい
9. ディープコピーとシャローコピーの違いを説明してください
回答:
- シャローコピー: 元の要素の参照を格納する新しいオブジェクトを作成します。したがって、シャローコピーはネストされたオブジェクトのコピーを作成せず、代わりにネストされたオブジェクトの参照のみをコピーします。
- ディープコピー: 新しいオブジェクトを作成し、元の要素に存在するネストされたオブジェクトのコピーを再帰的に追加します。
例:
希少性: 普通 難易度: 普通
10. Python の組み込みデータ型は何ですか?
回答:
- 数値: int、float、complex
- シーケンス: list、tuple、range
- テキスト: str
- マッピング: dict
- セット: set、frozenset
- ブール: bool
- バイナリ: bytes、bytearray、memoryview
希少性: 一般的 難易度: 簡単
Web フレームワーク (Django/Flask) (10 の質問)
11. Django と Flask を比較してください
回答:
- Django: 「バッテリー込み」のフレームワーク。ORM、認証、管理パネルなどが含まれています。大規模で複雑なアプリケーションに適しています。MVT (Model-View-Template) パターンに従います。
- Flask: マイクロフレームワーク。最小限で柔軟性があります。必要なツール (ORM、認証など) を選択します。小規模なアプリ、マイクロサービス、またはきめ細かい制御が必要な場合に適しています。
希少性: 一般的 難易度: 簡単
12. MVC パターン (および Django の MVT) とは何ですか?
回答:
- MVC (Model-View-Controller): アプリケーションを 3 つの主要な論理コンポーネント (モデル (データ)、ビュー (ユーザーインターフェイス)、およびコントローラー (入力の処理)) に分離するアーキテクチャパターン。
- MVT (Model-View-Template): Django のバリエーション。
- モデル: データ構造 (データベース)。
- ビュー: ビジネスロジック (MVC のコントローラーに類似)。
- テンプレート: プレゼンテーション層 (MVC のビューに類似)。
希少性: 一般的 難易度: 普通
13. Django ORM について説明してください
回答: Django ORM (Object-Relational Mapping) を使用すると、SQL の代わりに Python コードを使用して、SQLite、PostgreSQL、MySQL などのデータベースと対話できます。データモデルを Python クラスとして定義すると、Django がデータベーステーブルの作成とクエリを処理します。
例:
希少性: 一般的 難易度: 普通
14. Django のマイグレーションとは何ですか?
回答: マイグレーションは、モデルに対する変更 (フィールドの追加、モデルの削除など) をデータベーススキーマに伝播する Django の方法です。これらはほとんど自動的に設計されていますが、マイグレーションを作成するタイミング、実行するタイミング、および発生する可能性のある一般的な問題を理解する必要があります。
コマンド:
makemigrations: モデルの変更に基づいて新しいマイグレーションを作成します。migrate: マイグレーションをデータベースに適用します。
希少性: 一般的 難易度: 簡単
15. Flask はルーティングをどのように処理しますか?
回答: Flask は、@app.route() デコレータを使用して、関数を URL にバインドします。
例:
希少性: 一般的 難易度: 簡単
16. Flask ブループリントとは何ですか?
回答: ブループリントは、Flask アプリケーションをモジュールに編成する方法です。これらを使用すると、関連するルート、テンプレート、および静的ファイルをグループ化できます。これは、Flask アプリケーションをスケーリングするために不可欠です。
希少性: 普通 難易度: 普通
17. Django のミドルウェアの概念について説明してください
回答: ミドルウェアは、Django のリクエスト/レスポンス処理へのフックのフレームワークです。これは、Django の入力または出力をグローバルに変更するための軽量で低レベルの「プラグイン」システムです。各ミドルウェアコンポーネントは、特定の機能を実行する役割を担っています。
例: AuthenticationMiddleware、SessionMiddleware、CsrfViewMiddleware。
希少性: 普通 難易度: 普通
18. Flask でセッションをどのように処理しますか?
回答: Flask は、署名付き Cookie を使用してセッションの内容を保存します。ユーザーは Cookie の内容を見ることができますが、署名に使用される秘密鍵を知らない限り、変更することはできません。
例:
希少性: 普通 難易度: 普通
19. Django の settings.py の目的は何ですか?
回答: settings.py は、Django プロジェクトのメイン構成ファイルです。データベース設定、インストールされているアプリ、ミドルウェア、テンプレート設定、静的ファイルパス、セキュリティキーなど、プロジェクトのすべての構成が含まれています。
希少性: 一般的 難易度: 簡単
20. Django で CSRF 攻撃をどのように防止しますか?
回答: Django には、クロスサイトリクエストフォージェリ (CSRF) に対する組み込みの保護機能があります。各ユーザーセッションに対して生成される CSRF トークンを使用します。このトークンは、すべての POST リクエストに含める必要があります (通常は隠しフォームフィールドとして)。サーバーは、リクエストを処理する前にトークンを検証します。
希少性: 普通 難易度: 普通
データベースと一般的なバックエンド (10 の質問)
21. SQL と NoSQL
回答:
- SQL (リレーショナル): 構造化データ、事前定義されたスキーマ、テーブル、行、列。複雑なクエリとトランザクション (ACID) に適しています。例: PostgreSQL、MySQL。
- NoSQL (非リレーショナル): 非構造化または半構造化データ、動的スキーマ、ドキュメント、キーと値のペア。スケーラビリティ、迅速なプロトタイピング、および大規模なデータセットに適しています。例: MongoDB、Redis。
希少性: 一般的 難易度: 簡単
22. API とは何ですか?
回答: API は、Application Programming Interface の略です。これは、異なるソフトウェアアプリケーションが互いに通信できるようにする一連のルールとプロトコルです。バックエンド開発では、通常、RESTful API または GraphQL API を構築して、フロントエンド (Web、モバイル) がバックエンドのデータとロジックと対話できるようにします。
希少性: 一般的 難易度: 簡単
23. RESTful API の原則について説明してください
回答:
- クライアント/サーバー: 関心の分離。
- ステートレス: リクエスト間でサーバーにクライアントコンテキストが保存されません。
- キャッシュ可能: レスポンスは、キャッシュ可能かどうかを定義する必要があります。
- 統一インターフェイス: 通信の標準化された方法 (HTTP メソッド: GET、POST、PUT、DELETE)。
- 階層化システム: クライアントは通常、エンドサーバーに直接接続されているか、途中の仲介者に接続されているかを判断できません。
希少性: 一般的 難易度: 普通
24. HTTP ステータスコードとは何ですか?例を挙げてください。
回答: HTTPステータスコードは、リクエストが成功したか、失敗したか、リダイレクトされたか、追加の対応が必要かをクライアントに伝える標準的なレスポンスコードです。
- 2xx 成功: 200 OK、201 Created。
- 3xx リダイレクト: 301 Moved Permanently、304 Not Modified。
- 4xx クライアントエラー: 400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found。
- 5xx サーバーエラー: 500 Internal Server Error、502 Bad Gateway。
希少性: 一般的 難易度: 簡単
25. データベースインデックス作成とは何ですか?
回答: インデックス作成は、データベース内のデータをすばやく検索してアクセスするために使用されるデータ構造技術です。インデックスは、いくつかのデータベース列を使用して作成されます。インデックスデータ構造を維持するための追加の書き込みとストレージスペースを犠牲にして、データベーステーブルでのデータ検索操作の速度を向上させます。
希少性: 普通 難易度: 普通
26. データベースの ACID プロパティの概念について説明してください
回答:
- 原子性: トランザクション内のすべての操作が成功するか、すべての操作がロールバックされます。
- 一貫性: トランザクションが正常にコミットされると、データベースの状態が適切に変更されます。
- 独立性: トランザクションが互いに独立して透過的に動作できるようにします。
- 耐久性: システム障害が発生した場合でも、コミットされたトランザクションの結果または効果が確実に保持されるようにします。
希少性: 普通 難易度: 普通
27. Docker とは何ですか?また、その理由は何ですか?
回答: Docker は、コンテナでアプリケーションを開発、出荷、および実行するためのプラットフォームです。コンテナは、アプリケーションの実行に必要なすべて (コード、ランタイム、システムツール、ライブラリ) を含む、軽量で移植可能で自己完結型のユニットです。 これは、「私のマシンでは動作する」という問題を解決し、異なる環境 (開発、ステージング、本番) 間で一貫性を確保します。
希少性: 一般的 難易度: 普通
28. ユニットテストとは何ですか?
回答: ユニットテストは、ソフトウェアの個々のユニットまたはコンポーネントがテストされるソフトウェアテスト方法です。目的は、ソフトウェアコードの各ユニットが期待どおりに機能することを検証することです。Python では、unittest フレームワークまたは pytest が一般的に使用されます。
希少性: 一般的 難易度: 簡単
29. Git とは何ですか?また、その重要性は何ですか?
回答: Git は、分散型バージョン管理システムです。ソフトウェア開発中にソースコードの変更を追跡します。これにより、複数の開発者が同じプロジェクトで同時に作業し、コードの異なるバージョン (ブランチ) を管理し、必要に応じて以前の状態に戻すことができます。
希少性: 一般的 難易度: 簡単
30. バックエンド API を保護するにはどうすればよいですか?
回答:
- 認証: セッション、JWT、OAuthなどでユーザーが誰かを確認します。
- 認可: ログイン時だけでなく、保護された各リソースでユーザーがアクセスできる内容を確認します。
- HTTPS: 転送中のデータを暗号化します。
- 入力検証: 処理前に型、長さ、形式、必須項目を検証します。
- 安全なデータベースアクセス: 文字列連結のSQLではなく、パラメータ化クエリやORMを使います。
- レート制限: ブルートフォース、スクレイピング、過剰なトラフィックを減らします。
- CORS: 必要に応じてブラウザのオリジンを制限しますが、CORSを認証の代わりにしません。
- エラー処理とログ: 安全なエラーメッセージを返し、デバッグに必要な文脈をログに残します。
希少性: 普通 難易度: 普通


