ホームページ >バックエンド開発 >PHPチュートリアル >PHPプログラマーの問題解決能力について_PHPチュートリアル
この話題は昔から言われていますが、面接で評価される能力の中で、学習能力よりも問題解決能力が第一位であり、優先順位が高いと個人的には思っています。問題を解決する能力は、プログラマーの思考能力、適応力、探索能力などを示すだけでなく、経験も示すことができます。問題解決能力が低いと面接に合格することはできません。
これは例です。php test.php などの PHP スクリプトを実行すると、文字列が返されることが期待されます。しかし、実行後に情報が出力されません。プログラムのどこが間違っているかをどうやって知ることができるのでしょうか?ここで問題解決能力は8段階に分けられ、レベルが高いほど能力が高くなります。
Lv0 PHP エラーメッセージを表示
プログラムが期待した結果を達成しない場合は、コードにエラーがあることを証明するために、最初のステップとして PHP エラー メッセージを確認します。エラー メッセージを無視した場合、この人物はプロのプログラマーの職に適していないことを示します。場合によっては、php.ini 設定でエラー表示がオフになっており、エラー メッセージを開くには php.ini を変更する必要があります。この場合、エラー メッセージはログ ファイルにエクスポートされます。この場合は、直接 tailf を実行できます。 php_error.log でエラー メッセージを確認します。
エラー メッセージが表示されたら、プログラム コード問題を直接見つけるか、Google/Baidu で検索して問題を解決してください。
注: エラー表示をオンにする方法は
php.iniのdisplay_errors/display_startup_errorsをOnに設定します
php.ini error_reporting が E_ALL
に設定されていますPHPコードでerror_reporting(E_ALL)を設定する
Lv1 php または php-cli と php-fpm には複数のバージョンがあり、異なる設定をロードします
php には複数のバージョンがあります。どの PHP がどの php を経由しているかを把握するか、絶対パスを追加して php バージョンを指定します。この PHPer がこのレベルのテストの 50% に合格したことを示します。
別の状況として、php-cli と php-fpm で得られる実行結果が異なる場合があります。たとえば、Web ブラウザーでの実行は正しいが、cli での実行は間違っています。現時点では、2 つの環境で読み込まれた php.ini が異なることが原因である可能性があります。 cli で、php -i |grep php.ini を使用して、ロードされている php.ini を取得します。 fpm では、phpinfo() 関数を通じて php.ini の絶対パスを取得できます。
Lv2 var_dump/die 変数値情報を出力するシングルステップデバッグ
これはプログラムのデバッグによく使用される方法であり、問題を解決するための最も単純で、最も大雑把で、最も効果的な方法でもあります。より高度な方法としては、PHP の Trace クラス/log クラスを使用する方法があり、phpstorm+xdebug を使用して IDE ツールでデバッグできます。
トレースツールは、スクリプトの消費時間を分析し、PHP プログラムのパフォーマンスを最適化することもできます。
3 つのテストすべてに合格したことは、このプログラマーがプロの PHP プログラマーが持つべき問題解決能力を備えていることを示しています。 PHP プログラマーがこのレベルに合格している限り、ほとんどの状況に対処でき、中小規模の Web サイトでもプレッシャーを感じることはありません。
Lv3 は strace ツールを使用してプログラムの実行を追跡します
strace は、システム コールの実行を表示するために使用できます。strace php test.php、または strace -p プロセス ID を使用します。 strace は、現象から本質を洞察し、プログラムの実行プロセスを把握するのに役立ちます。この方法は、大規模な Web サイトや大企業で最も一般的に使用されます。 strace をマスターしていない場合、ここで言えることは申し訳ありませんが、strace を知らない PHPer は受け入れられません。
strace は実際には プログラマー の基礎を試すテストです。オペレーティング システムの操作方法を知らず、基礎となる層をまったく理解していない場合は、間違いなく strace を使用することはできません。もちろん、strace では PHP コードの無限ループを解決できません。たとえば、php-fpm プロセスの CPU が 100% であることが判明した場合、strace はそれを解決できない可能性があります。 strace は、通常 IO 操作であるシステム コールを参照するため、CPU が 100% になることはありません。
Lv4 tcpdump ツールを使用してネットワーク通信プロセスを分析します
tcpdumpはネットワークカードのデータ通信過程をキャプチャすることができ、データの内容までキャプチャすることができます。 tcpdump を使用すると、TCP SYN 3 ウェイ ハンドシェイクが開始されるとき、FIN パケットが送信されるとき、RST パケットが送信されるときなど、ネットワーク通信プロセスがどのようなものであるかを確認できます。これは基本的なスキルです。tcpdump を理解していない場合は、ネットワークの問題を解決する能力がないことを意味します。
関数呼び出しの消費時間と成功率に関する Lv5 の統計
xhporf/xdebug を使用して PHP リクエストの呼び出しプロセスをエクスポートし、各関数呼び出しのプロセスと消費時間を分析します。 PHPプログラムのパフォーマンスのボトルネックを分析し、最適化できるポイントを見つけることができます。
mysqlクエリ、curl、その他のAPI呼び出しなどのネットワークサービスの別の呼び出し。開始と終了のマイクロタイムを記録することで、falseが返されたかどうかを取得できます。成功と消費時間はどのくらいですか。データを要約し、呼び出しの成功率、失敗率、平均遅延を整理できれば、このプログラマーがインターフェイスの品質に敏感であり、大規模な Web サイト プロジェクトの経験があることが証明されます。
Lv6 GDB使用
gdb は、C/C++ プログラムをデバッグするための強力なツールです。gdb を使いこなすには、特定の C/C++ スキルを持つプログラマー のみが必要です。上記の strace は PHP プログラムの CPU100% を追跡できませんが、gdb はそれを追跡できます。さらに、gdb は php プログラムのコアダンプの問題も解決できます。
gdb -p プロセス ID を使用し、php-src の .gdbinit zbacktrace やその他のツールを使用すると、PHP プログラムの実行を簡単に追跡できます。上記のCPU100%同様、PHPプログラムでよく発生する無限ループですが、gdbで何度も確認すると、おおよその無限ループの箇所が分かります。 gdb の問題を解決できる能力を持つ PHP プログラマーはほとんどいません。 gdb を使用して PHP の問題を解決できれば、この PHPer は面接に 100% 合格し、より高い技術評価を得ることができます。 Lv7 PHP カーネルと拡張機能のソース コードを表示する
PHP カーネルと拡張機能の
ソース コードに精通していれば、PHP プログラムの最も複雑なメモリ エラーを解決できるでしょう。このような PHP プログラマーは稀です。 gdb ツールを使用し、PHP ソース コードに精通していれば、オペコード情報、execute_data メモリ、グローバル変数のステータスなどを表示できます。