#この記事は、PHPインタビューの質問に対する概念的な質問の最新の要約を共有しています。特定の参照値があります。困っている友人はそれを参照できます。
関連する推奨事項: 「PHP 面接の質問と応募に関する質問の最新概要 」
1. HTTP ステータス メディア ステータス コード
- 302 の意味: 一時転送は成功し、要求されたコンテンツは新しい場所に転送されました。
- 401: 許可されていません。
- 403: アクセスが禁止されています。
- 500: サーバー内部エラー
2. 値渡しと参照渡し
- 値渡し: 実際のパラメータが渡される 値は仮パラメータに割り当てられ、仮パラメータへの変更は実際のパラメータの値には影響しません。
- 参照渡し: 実パラメータのアドレスを仮パラメータに渡します。実パラメータと仮パラメータは同じ記憶領域を指します。行パラメータを変更すると、実パラメータの値に影響します。
#作成タイプ: 従業員が原材料として機能 (プロトタイプ、ファクトリー、シングルトン、ジェネレーター、抽象ファクトリー)
構造タイプ: アセンブリをノックアウトすることです (アダプター、ブリッジ、フライウェイト、外観、エージェント、組み合わせ、装飾)
行動タイプ: 観察を妨げるためにモデルを皿に取り付けるように命令されます (メモ、チェーン) (責任、コマンド、イテレータ、メディエータ、ステート、テンプレート メソッド、ビジター、オブザーバー、ストラテジ)
通常、プロジェクトは次のもので構成されます。チームが開発し、全員が書いたコードをバージョン サーバーに送信し、プロジェクト リーダーがバージョンに応じてコードを管理することで、バージョン管理が容易になり、開発効率が向上し、必要なときに古いバージョンを確実に返却できるようになります。
どうすれば防ぐことができますか?
回答: htmlspecialchars() 関数を使用して、送信されたコンテンツをフィルターし、文字列内の特殊記号を具体化します。
6. CGI、FastCGI、PHP-FPM の関係図
リクエストがindex.phpの場合、Webサーバーはこのリクエストを受信した後、対応するCGIプログラムを開始します。これがPHPパーサーです。次に、PHP パーサーは php.ini ファイルを解析し、実行環境を初期化し、リクエストを処理し、処理結果を CGI で指定された形式で返し、プロセスを終了し、Web サーバーは結果をブラウザに返します。これは完全な動的 PHP Web アクセス プロセスです。
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
モデルである
- m(model) はデータの操作を担当し、ビューである
- v(view) はフロント デスクの表示を担当します。
- c(controller) 、つまりビジネス ロジックを担当するコントローラー
8. PHP のガベージ コレクション メカニズム
PHP では、メモリを自動的に管理し、不要になったオブジェクトを消去します。 PHP は、参照カウントのガベージ コレクション メカニズムを使用します。各オブジェクトには参照カウンタが含まれており、オブジェクトに参照が接続されると、カウンタは 1 ずつ増加します。参照がリビング スペースから出るか、NULL に設定されると、カウンターは 1 ずつ減らされます。オブジェクトの参照カウンタがゼロになると、PHP はオブジェクトが占有しているメモリ空間を解放します。
9. CLI パターンのライフサイクル
フェーズ |
呼び出し関数 |
Function |
モジュール初期化フェーズ |
php_module_startup() |
主に PHP フレームワークを実行します。 zend エンジンの初期化操作 |
リクエストの初期化フェーズ |
php_request_startup() |
fpm の場合、ワーカー プロセスで読み取られ、その後の段階で解析されます。データのリクエスト |
スクリプト実行ステージ |
php_execute_script() |
PHP 構文を解析し、抽象構文ツリーを生成します |
リクエストシャットダウンフェーズ |
php_request_shutdown() |
リクエスト終了時に実行 |
##モジュールシャットダウンフェーズ
php_module_shutdown() |
プロセス終了時に実行 |
| ##
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 リクエストが到着すると、それはワーカーによって受信され、リクエスト データが完全に到着するまでリクエスト データの受信と解析が開始されます。 - リクエストの初期化: php_request_startup() を実行します。
- PHP スクリプトを実行します。
- リクエストを閉じます。
-
- ワーカー プロセスの構造には、ワーカーが現在いるステージ 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. メモリ割り当てプロセス
12. PHP 配列の実装
13. 依存関係の注入
概念: サービスが依存する他のサービスがサービス自体によって作成されるのではなく、外部から渡される方法を指します。
それを達成するにはどうすればよいですか?回答: 一般に、リフレクションを使用して実装されます。
どのような問題を解決できますか?回答: サービス モジュール間の結合を減らします。コードを記述するときに、外部サービスの特定の実装を考慮する必要はありません。インターフェイスに基づいてサービスを使用するだけで済みます。
14. オブジェクト指向
概念: オブジェクト指向はプログラムの設計手法であり、プログラムの再利用性を向上させ、プログラムの構造をより明確にします。
主な機能: カプセル化、継承、ポリモーフィズム。
5 つの基本原則: 単一責任の原則、オープンとクローズの原則、置換の原則、依存性の原則、インターフェイス分離の原則。
この記事は、LearnKu.com Web サイトに初めて掲載されました。
関連おすすめ: 「2021 PHP 面接質問まとめ (集)」
以上がPHP 面接の質問に関する概念的な質問の最新の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。