ホームページ  >  記事  >  バックエンド開発  >  PHP 面接の質問に関する概念的な質問の最新の概要

PHP 面接の質問に関する概念的な質問の最新の概要

藏色散人
藏色散人転載
2021-04-07 09:39:345115ブラウズ

#この記事は、PHPインタビューの質問に対する概念的な質問の最新の要約を共有しています。特定の参照値があります。困っている友人はそれを参照できます。

関連する推奨事項: 「PHP 面接の質問と応募に関する質問の最新概要

1. HTTP ステータス メディア ステータス コード

  • 302 の意味: 一時転送は成功し、要求されたコンテンツは新しい場所に転送されました。
  • 401: 許可されていません。
  • 403: アクセスが禁止されています。
  • 500: サーバー内部エラー

2. 値渡しと参照渡し

  • 値渡し: 実際のパラメータが渡される 値は仮パラメータに割り当てられ、仮パラメータへの変更は実際のパラメータの値には影響しません。
  • 参照渡し: 実パラメータのアドレスを仮パラメータに渡します。実パラメータと仮パラメータは同じ記憶領域を指します。行パラメータを変更すると、実パラメータの値に影響します。

#3. デザイン パターン

#作成タイプ: 従業員が原材料として機能 (プロトタイプ、ファクトリー、シングルトン、ジェネレーター、抽象ファクトリー)

構造タイプ: アセンブリをノックアウトすることです (アダプター、ブリッジ、フライウェイト、外観、エージェント、組み合わせ、装飾)

行動タイプ: 観察を妨げるためにモデルを皿に取り付けるように命令されます (メモ、チェーン) (責任、コマンド、イテレータ、メディエータ、ステート、テンプレート メソッド、ビジター、オブザーバー、ストラテジ)

4. コード管理

通常、プロジェクトは次のもので構成されます。チームが開発し、全員が書いたコードをバージョン サーバーに送信し、プロジェクト リーダーがバージョンに応じてコードを管理することで、バージョン管理が容易になり、開発効率が向上し、必要なときに古いバージョンを確実に返却できるようになります。

5. コードはユーザーを悪意を持って攻撃するために実行されます。

どうすれば防ぐことができますか?

回答: htmlspecialchars() 関数を使用して、送信されたコンテンツをフィルターし、文字列内の特殊記号を具体化します。

6. CGI、FastCGI、PHP-FPM の関係図

Web サイトのアーキテクチャ全体において、Web サーバー (Apache など) はディストリビュータにすぎません。内容の。たとえば、クライアントがindex.htmlをリクエストした場合、Webサーバーはファイルシステム内でこのファイルを見つけてブラウザに送信しますが、ここで配布されるのは静的データです。

リクエストがindex.phpの場合、Webサーバーはこのリクエストを受信した後、対応するCGIプログラムを開始します。これがPHPパーサーです。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了し、Web サーバーは結果をブラウザに返します。これは完全な動的 PHP Web アクセス プロセスです。 PHP 面接の質問に関する概念的な質問の最新の概要

PHP 面接の質問に関する概念的な質問の最新の概要

Web サーバー:
    一般的には、Apache、Nginx、IIS、Lighttpd、Tomcat などのサーバーを指します。
  • Web アプリケーション:
  • 一般に、PHP、Java、Asp.net などのアプリケーションを指します。
  • CGI:
  • は、Web サーバーと Web アプリケーションの間でデータを交換するためのプロトコルです。
  • FastCGI:
  • CGI と同じ通信プロトコルですが、CGI よりも効率が最適化されています。同様に、SCGI プロトコルは FastCGI に似ています。
  • PHP-CGI:
  • は、Web サーバーが提供する CGI プロトコルに対する PHP (Web アプリケーション) のインターフェース プログラムです。
  • PHP-FPM:
  • は、PHP (Web アプリケーション) が Web サーバーに提供する FastCGI プロトコルのインターフェイス プログラムであり、比較的インテリジェントなタスク管理も提供します。
7. MVC

MVC は開発モデルであり、主に 3 つの部分に分かれています: モデルである
  • m(model) はデータの操作を担当し、ビューである
  • v(view) はフロント デスクの表示を担当します。
  • c(controller) 、つまりビジネス ロジックを担当するコントローラー

8. PHP のガベージ コレクション メカニズム

PHP では、メモリを自動的に管理し、不要になったオブジェクトを消去します。 PHP は、参照カウントのガベージ コレクション メカニズムを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに参照が接続されると、カウンタは 1 ずつ増加します。参照がリビング スペースから出るか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はオブジェクトが占有しているメモリ空間を解放します。

9. CLI パターンのライフサイクル


##モジュールシャットダウンフェーズ##

10. php-fpm の動作仕組み

FastCGI は、Web サーバー (Nginx、Apache など) と処理プログラム (PHP など) の間の通信プロトコルです。 a アプリケーション層の通信プロトコル。 php-fpm は、PHP FastCGI オペレーティング モードのブロッキング シングル スレッド モデル プロセス マネージャーです。単一のマスターとマルチワーカー構造を持っています。同じワーカー プロセスは一度に 1 つのリクエストのみを処理できます。 PHP はリクエストを処理した後、解析結果を FastCGI プロトコルを通じて Web サーバーに転送し、Web サーバーはそれをユーザーに返します。

#基本実装

PHP-FPM は fast-cgi の実装であり、マスター プロセスやワーカー プロセスなどのプロセス管理機能を提供します。

    Master はソケットを作成および監視し、複数のワーカー プロセスをフォークし、共有メモリを通じてワーカーのステータスを取得し、シグナルを通じてワーカー プロセスを制御します
  • ワーカーはリクエストを自由に受け入れます
  • ##ワーカー—リクエストの処理

#ワーカー プロセスは継続的にリクエストを受け付けます。リクエストが到着すると、FastCGI プロトコルのデータを読み取って解析します。解析が完了すると、PHP スクリプトが実行され、リクエストは実行完了後に閉じられます。各ワーカーがリクエストを処理する手順は次のとおりです。

リクエストの待機: ワーカー プロセスは、リクエストを待機している fcgi_accept_request() でブロックされます。

    リクエストを解析する: fastcgi リクエストが到着すると、それはワーカーによって受信され、リクエスト データが完全に到着するまでリクエスト データの受信と解析が開始されます。
  1. リクエストの初期化: php_request_startup() を実行します。
  2. PHP スクリプトを実行します。
  3. リクエストを閉じます。
  4. ワーカー プロセスの構造には、ワーカーが現在いるステージ fpm_scoreboard_proc_s->request_stage を記録するパラメーターがあります。リクエスト中に、この値は次の値に設定されます。

FPM_REQUEST_ACCEPTING: リクエストフェーズを待機しています。

    FPM_REQUEST_READING_HEADERS: fastcgi リクエスト ヘッダー フェーズを読み取ります。
  • FPM_REQUEST_INFO: リクエスト情報の取得フェーズ。このフェーズでは、リクエストされたメソッド、クエリ文字列、リクエスト URI およびその他の情報が各ワーカー プロセスの fpm_scoreboard_proc_s 構造体に保存されます。この操作はマスター プロセスでも操作されるため、ロックが必要です。この構造。
  • FPM_REQUEST_EXECUTING: PHP スクリプト フェーズを実行します。
  • FPM_REQUEST_END: 使用されません。
  • FPM_REQUEST_FINISHED: リクエストの処理が完了しました。
  • master – プロセス管理

master は fpm_run() を呼び出した後に戻らなくなり、イベント ループに入ります。それ以降、master は常にいくつかのイベントが処理されます。これらのイベントを詳細に分析する前に、まず Fpm の 3 つの異なるプロセス管理方法を紹介します。使用する特定のモードは、conf 設定の pm を通じて (pm=dynamic など) 指定できます。

静的モード (静的): この方法は比較的単純です。起動時に、マスターは pm.max_children 構成に従って、対応する数のワーカー プロセス (ワーカー プロセスの数) をフォークアウトします。固定されています。

    動的モード (動的): このモードはより一般的に使用され、Fpm が開始されると、pm.start_servers 構成に従って特定の数のワーカーが初期化されます。動作中に、アイドル状態のワーカーの数が設定された pm.min_spare_servers の数よりも少ないことをマスターが検出した場合 (リクエストが多すぎてワーカーが処理できないことを示します)、マスターはワーカー プロセスをフォークしますが、総数はワーカーの数は pm.max_children を超えることはできません。マスターがアイドル状態のワーカーの数が pm.max_spare_servers を超えていることを検出した場合 (アイドル状態のワーカーが多すぎることを示します)、リソースの占有が多すぎることを避けるために一部のワーカーを強制終了します。マスターはこれら 4 つの値を使用して数を動的に制御します労働者の。
  • オンデマンド モード (オンデマンド): このモードは従来の CGI に非常に似ています。起動時にワーカー プロセスを割り当てません。リクエストがあると、ワーカー プロセスをフォークするようにマスター プロセスに通知します。リクエストが到着したら、子プロセスをフォークして処理します。ワーカーの総数が pm.max_children を超えていないこと ワーカープロセスは処理完了後すぐに終了せず、アイドル時間が pm.process_idle_timeout を超えた時点で終了します。
  • マスター プロセスは、fpm_event_loop() イベント ループに入ります。このメソッドでは、マスターは、マスターによって登録されたいくつかの IO イベントとタイマー イベントを周期的に処理します。イベントがトリガーされると、特定のハンドラーが実行されます。処理のために呼び戻されました。

11. メモリ割り当てプロセス

メモリを事前に申請し、PHP 内部で管理します。アプリケーションがメモリを申請する場合、ここからメモリが適用されます。メモリ管理に戻ります。この設計により、アプリケーションや小さなメモリの解放によって引き起こされるオペレーティング システムの追加のパフォーマンス消費を回避できます。

12. PHP 配列の実装

PHP 配列の基礎となる実装はハッシュ テーブル (ハッシュテーブルとも呼ばれます) です。ハッシュ テーブルは、キー (Key) 位置データ構造のキーと値の間にマッピング関数があり、マッピング関数によって取得されたハッシュ値は、キーワードを比較することなく、キーに従って対応する値に直接インデックス付けされます。 、ハッシュ値は考慮されません。列の競合、ハッシュ テーブルの検索効率は非常に高く、時間計算量は O (1) です。

13. 依存関係の注入

概念: サービスが依存する他のサービスがサービス自体によって作成されるのではなく、外部から渡される方法を指します。

それを達成するにはどうすればよいですか?回答: 一般に、リフレクションを使用して実装されます。

どのような問題を解決できますか?回答: サービス モジュール間の結合を減らします。コードを記述するときに、外部サービスの特定の実装を考慮する必要はありません。インターフェイスに基づいてサービスを使用するだけで済みます。

14. オブジェクト指向

概念: オブジェクト指向はプログラムの設計手法であり、プログラムの再利用性を向上させ、プログラムの構造をより明確にします。

主な機能: カプセル化、継承、ポリモーフィズム。

5 つの基本原則: 単一責任の原則、オープンとクローズの原則、置換の原則、依存性の原則、インターフェイス分離の原則。


この記事は、LearnKu.com Web サイトに初めて掲載されました。

関連おすすめ: 「2021 PHP 面接質問まとめ (集)

フェーズ 呼び出し関数 Function
モジュール初期化フェーズ php_module_startup() 主に PHP フレームワークを実行します。 zend エンジンの初期化操作
リクエストの初期化フェーズ php_request_startup() fpm の場合、ワーカー プロセスで読み取られ、その後の段階で解析されます。データのリクエスト
スクリプト実行ステージ php_execute_script() PHP 構文を解析し、抽象構文ツリーを生成します
リクエストシャットダウンフェーズ php_request_shutdown() リクエスト終了時に実行
php_module_shutdown() プロセス終了時に実行

以上がPHP 面接の質問に関する概念的な質問の最新の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。