この記事では、PHP プログラマーを中級プログラマーと上級プログラマーの 2 つのカテゴリーに分け、これら 2 つのカテゴリーのプログラマーが持つべきスキルについて検討します。
中級 PHP プログラマー
1.Linux
スムーズにできるシェル スクリプトを使用して多くの自動タスクを完了します。awk/sed/perl も適切に動作し、多くのテキスト処理とデータ統計を完了できます。基本的に、特別ではないほとんどの Linux プログラム (さまざまなライブラリ、パッケージ、サードパーティの依存関係を含む) をインストールできます。 、MongoDB/Redis/Sphinx/Luncene/SVN など)、基本的な Linux サービスの理解、Linux パフォーマンス インジケーター データの表示方法、Linux での基本的な問題追跡の知識など
2. Nginx:
最初の段階に基づいて、マルチコア構成、イベント、proxy_pass、sendfile/tcp_* 構成、タイムアウトなどを含む、より複雑な Nginx 構成を理解します。構成とパフォーマンスへの影響; Web サーバーに加えて、nginx はプロキシ サーバー、リバース静的サーバー、その他の構成も実行できることを知る; 基本的な nginx 構成のチューニングを知る; 権限の構成方法を知る、nginx 拡張機能を nginx にコンパイルする方法を知る; 基本的な nginx 操作を知る原則 (マスター/ワーカー メカニズム、epoll)、nginx のパフォーマンスが Apache のパフォーマンスやその他の知識よりも優れている理由を理解する;
3. MySQL/MongoDB:
最初に基本的には、MySQL 開発に関して、通常の SQL 最適化 (group by/order by/rand 最適化など) を含む多くのヒントを習得しました。MySQL を構築できることに加えて、ホットおよびコールドも実行できます。 MySQL データをバックアップし、innodb/myisam 構成オプション (key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size/innodb_flush_log_at_trx_commit など) のパフォーマンスに影響を与える要因も知っており、これらを構成するための適切な値も知っています。オプション; さらに、mysql マスター/スレーブ同期環境のセットアップ方法を知ることや、各 binlog_format の違いを知ることなど、いくつかの特別な構成オプションも知っています。slow_log/explain などを含む MySQL パフォーマンス トラッキングについて知り、また基本的なインデックスの作成と処理について理解している; 基本的な MySQL アーキテクチャ (サーバー ストレージ エンジン) を原則として理解していること、基本的な InnoDB/MyISAM インデックス ストレージ構造と相違点 (クラスター化インデックス、B ツリー) について理解していること、基本的な InnoDB トランザクション処理メカニズムを知っていること; ほとんどの MySQL 例外の解決策を理解します (または、解決策がどこにあるかを知っています)。条件が許せば、NoSQL の代表的なデータベースである MongoDB について学び、MySQL との違いを比較することで、適切なアプリケーション シナリオで安全かつ慎重に MongoDB を使用することができ、PHP と MongoDB の基本的な組み合わせ開発を知ることができます。
4. Redis/Memcached:
ほとんどの中規模システムでは、キャッシュ処理が関係するため、基本的なキャッシュを理解し、Memcached と Redis の類似点を理解する必要があります。 、違いとアプリケーションのシナリオ、Redis/Memcached を個別にインストールできること、Memcached のいくつかの基本的な機能と制限 (最大値など) を理解していること、PHP とその使用法を組み合わせる方法を理解していること、Redis の基本的な動作原理と使用法を理解していること、従来のデータ型を理解し、どのシナリオでどの型を使用する必要があるかを知り、Redis トランザクションを理解するなど。原理部分では、Memcached のメモリ構造 (スラブ機構) を大まかに理解することができ、Redis は一般的なデータ型 (SDS/リンクリスト/SkipList/HashTable) などの基盤となる実装ストレージ構造を理解します。 Redis のトランザクション、RDB、AOF、その他のメカニズムについて詳しく学ぶことができます。Good
5.PHP:
第 1 段階の機能に加えて、インストールに関しても、および構成では、PHP およびさまざまなサードパーティ拡張機能のコンパイルおよびインストール構成を自由にインストールできます。PHP を理解しています。構成オプションのほとんどと fpm の意味 (max_requests/max_children/request_terminate_timeout や、パフォーマンスに影響するその他の構成など) を理解しています。 mod_php/fastcgi の違い; リフレクションなどの構文レベルでの PHP オブジェクト指向/SPL/特殊機能の深い理解を含む、さまざまなより詳細な PHP を含む、PHP のさまざまな基本テクノロジに習熟していること。フレームワークの中で、少なくとも 1 つの従来の PHP MVC フレームワークのコードを読み、基本的な PHP フレームワークの内部実装メカニズムと設計を知っていると考え、PHP 開発では、アプリケーション開発のための従来の設計パターンの使用に習熟しました (要約)ファクトリー/シングルケース/オブザーバー/コマンドチェーン/戦略/アダプターなどのパターン); 開発を完全に自由化し、MVC モデルを深く理解し、迅速にアップグレードできるようにするために、独自の PHP MVC フレームワークを開発することをお勧めします。ビジネス プロジェクトの開発、PHP のさまざまなコード最適化方法に精通していること、および PHP のセキュリティ問題のほとんどを解決することに精通していること、基本的な PHP 実行メカニズムの原則 (Zend のエンジン/拡張の基本的な動作メカニズム) に精通していること、
6. システム設計:
ほとんどの中規模システム向けの Web サイト アーキテクチャ、データベース、および基本的な PHP フレームワークの選択を設計でき、パフォーマンス テスト、トラブルシューティングなど、基本設計を完了でき、次のような Web サイトの開発と保守: ブラウザ -> CDN (Squid) -> Nginx PHP -> キャッシュ -> データベース構造; 毎日数百万から数千万の基本トラフィックをサポート可能 Web サイトの開発と保守作業;
シニア PHP プログラマー
重要なポイント: 基本的な LNMP プログラムに加えて、特定の方向または分野について詳しく学ぶこともできます。 (深さ次元の開発)
目標: 基本的な PHP ビジネス開発を完了できることに加えて、最も詳細で複雑な技術的問題も解決でき、中規模および大規模な開発を独自に設計して完了できるようになります。システムの設計と開発の仕事。Hold は独立して特定の技術的方向に深く取り組み、この分野では比較的専門的です。 (たとえば、MySQL、Nginx、PHP、Redis など、あらゆる方向の詳細な調査)
1. Linux:
に加えて、 Linux での第 2 段階の機能 通常の操作、パフォーマンスの監視と追跡に加えて、シェル スクリプトの観点から、多くの高度で複雑なコマンド (watch/tcpdump/starce/ldd/ar など) を使用して作業を完了することもできます。比較的複雑なシェル スクリプト (500 行以上) をすでに作成できます。バックアップ、自動処理、監視などを含む多くのタスクの完了を支援するシェル。awk/sed/perl などのアプリケーションに習熟し、自由に操作できます。 、さまざまな複雑な形式のデータを制御、処理、テキスト統計および分析する; Linux の内部メカニズムについての知識がある カーネル モジュールのロード、起動エラー処理などの基本的な処理をある程度理解している; NFS などの他の関連事項についてもある程度理解しているディスク管理など;
2. Nginx:
第 2 段階に基づいて、私は Nginx を非常に上手に操作できるようになり、より多くのパフォーマンスを発揮できるようになりました。 -監視、パフォーマンスの最適化、複雑な問題の処理など、Nginx の運用と保守の詳細な作業。個人的な興味については、主にソースを読むことから始めて、Nginx の動作原理の詳細な研究に焦点を当てることを検討できます。特定のマスター/ワーカーの動作メカニズム、Nginx の内部イベント処理、メモリ管理などのコードを同時に学ぶことができ、拡張機能の開発では、独自のプライベート拡張機能の一部をカスタマイズできます。同時に、Nginx Lua をある程度理解して、より良いモデルを作成するために組み合わせて適用できるかどうかを確認できます。この段階での要件は、Nginx の原理を深く理解することです。 Nginx 開発者になる 方向性の深い専門家になります。
3. MySQL/MongoDB:
第 2 段階に基づいて、MySQL アプリケーションに関しては、以前の基本的な SQL 最適化に加えて、いくつかの複雑なタスクも実行できます。大量のデータ バッチのインポートおよびエクスポート、オンラインで大量のデータ バッチのテーブル構造の変更またはインデックス フィールドの追加または削除などの操作、およびその他の高リスク操作;
インストールと構成に加えて、さまざまな問題の調査、マスター/スレーブ同期遅延問題の解決、マシンルーム間の同期データスキーム、MySQL 高可用性アーキテクチャなど、より複雑な MySQL 問題を処理できるようになりました。
は、MySQL アプリケーション レベルに精通しており、MySQL の主要な主要テクノロジに精通しています。たとえば、トランザクション メカニズム (分離レベル、ロックなど)、トリガー、パーティションなどの一定の理解と応用に精通しています。テクノロジー;
MySQL パフォーマンスの場合、ディスク最適化 (SSD への SAS 移行)、サーバー最適化 (メモリ、サーバー自体の構成)、および第 2 段階の他のコア パフォーマンス最適化オプション (innodb_log_buffer_size/back_log/table_open_cache) を含みます。 /thread_cache_size/innodb_lock_wait_timeout など)、接続プール ソフトウェア選択アプリケーション、および show * (show status/show profile) などの操作ステートメントに関する深い知識。ほとんどのパフォーマンス問題のトレースを理解し、完了できる。
#災害復旧と復元、Binlog、ホットおよびコールド バックアップ、マルチ IDC バックアップなどの深い理解など、MySQL バックアップ テクノロジに深く精通している; MySQL の原則に関して、私は次のことを理解しています。 MySQL の動作メカニズムに関するソース コードの一部を読み始めるなど、マスターとスレーブの同期 (レプリケーション) テクノロジのソース コードを学習したり、特定のストレージ エンジン (MyISAM/Innodb/TokuDB) について学習したりするなど、より多くの知識など。ソース コードを学習して理解します。状況が許せば、CSV エンジンを参照して独自の単純なストレージ エンジンを開発し、データを保存し、MySQL についての理解を深めることができます。このプロセス中に、興味がある場合は、次のことができます。 DBA の方向での開発も検討してください。 MongoDB レベルでは、たとえば、書き込みを減らし読み取りを増やす場合に MongoDB のオンライン適用を開始したり、オンライン データ分析や処理操作を実行したりすることを検討できます。特定のシナリオは作業に基づくことができます。しかし重要なのは、さまざまなシナリオでの RMDBS と NoSQL のアプリケーションをより深く理解するために、条件や興味が許せば、MongoDB の動作メカニズムについてさらに学び始めることができます。4. Redis/Memcached:
第 2 段階に基づいて、より詳細なアプリケーションと学習を実現できます。 Memcached は特に複雑ではないため、ソース コード、特にメモリ管理部分を読んで、より深い理解を促進することをお勧めします。Redis 部分では、複雑なデータ構造のアプリケーションをさらに実行できます ( zset はランキング操作を実行します) / トランザクション処理は、フラッシュ セール シナリオなどのアプリケーションのアトミック性を確保するために使用されます); ほとんどの場合、aof などの同期メカニズムのアプリケーションの学習が含まれ、可用性の高い Redis アプリケーション アーキテクチャとクラスターを設計します。 ;Redis のソース コードを深く学習し、第 2 段階で蓄積した知識を適用することをお勧めします。特に、コア イベント管理、メモリ管理、内部コア データ構造などについて読むことができます。 . それを完全に理解すること。興味があれば、Redis の非常にプロフェッショナルなユーザーになることができます。
5.PHP:
基礎的なコアスキルとして、第2段階を踏まえたより深い学習と応用が必要です。基本的なコード アプリケーションに関しては、PHP 開発で遭遇する問題の 95% を解決でき、PHP スキルのほとんどを理解できます。
は、ほとんどの PHP フレームワークを 1 日以内にすぐに使い始め、利点と利点を理解できます。主流の各 PHP フレームワークの欠点は、プロジェクト開発中に迅速かつ便利にテクノロジの選択を行うことができます (/auto_append_file)。これには、拡張機能の複雑な高度な設定と原則 (memcached 拡張機能設定の memcache.hash_strategy、apc.mmap_file_mask/apc.slam_defense など) が含まれます。 /apc.file_update_protection (apc 拡張機能設定の /apc.file_update_protection);
php-fpm の動作メカニズム (php-fpm によって有効になるプロセス数の計算と原理など) を含む、php の動作メカニズムをよく理解します。 php-fpm をさまざまな構成マシンで使用できること)、zend エンジン (vm/gc/stream 処理) について基本的な知識があること、基本的な PHP カーネル ソース コードを持っていること (または関連記事を読むこと)、ほとんどのコアの実装について理解していることPHP の内部メカニズムのデータ構造 (基本型/配列/オブジェクト) を理解し、コア インフラストラクチャ (zval/hashtable/gc) を深く学習している;
基本的な PHP 拡張機能の開発を実行できる、拡張機能開発に関する中級および上級の知識 (minit/rinit など) を理解し、php と apache/nginx (mod_php/fastcgi) の間のさまざまな通信および対話方法の詳細に精通していること。ただし、PHP 拡張機能を開発する場合は除きます。 PHP をより低いレベルから理解するために、Zend 拡張機能の開発を学習することを検討してください。
6. C/C:第 2 段階を基礎として、C/C 言語をより深く理解し、小さな問題を完了できるようになります。 /C システム開発作業;
第 2 段階では、基本的な C/C 構文とデータ構造に加えて、いくつかの特殊なデータ構造 (b-tree/rb) も学習できます。 -tree/skiplist/lsm-tree/ trie-tree など) 特別な作業のニーズを容易にするため;
システム プログラミングの観点からは、マルチプロセスおよびマルチスレッド プログラミングに精通しています。マルチプロセスの状況では、マルチプロセス間の通信方法のほとんどを理解しており、通信方法 (共有メモリ/セマフォ/パイプラインなど) を柔軟に選択できます。
マルチスレッド プログラミングは、次の問題をうまく解決できます。ロックの競合を回避し、マルチスレッド プログラムの開発とデバッグが可能。
ネットワーク プログラミングを同時に行う。マルチプロセス モデル/マルチスレッド モデル/非同期ネットワーク IO モデルの違いと選択について比較的よく理解し、理解する。 、さまざまな非同期ネットワーク IO モデル (select/poll/epoll/iocp など) の原理と相違点に精通しており、一般的な非同期フレームワーク (ACE/ICE /libev/libevent/libuv/Boost.ASIO など) に精通していること時間があれば、国内で開発されたライブラリ (Muduo など) を参照することもできます。
同時に、優れた同時実行性の高いプログラム アーキテクチャ (リーダー) を設計することもできます。 -follow/master-worker など);
C/C バックエンド サーバー開発におけるほとんどの問題 (メモリ管理、ログ出力、高い同時実行性、フロントエンドとバックエンドの通信プロトコル) を理解する、サービス監視)、さまざまなバックエンド サービス (struct/http/thirft/protobuf など) との RPC 通信の問題を知っている;
は、GCC と GDB を使用してコンパイルおよびデバッグ プログラムを開発することに精通していることができます。質問;
一般的なモジュール開発に関しては、いくつかの一般的なツールやライブラリ (非同期ネットワーク フレームワーク、ログ ライブラリ、バグを追跡するために穴を埋める;
7. フロントエンド:HTTP プロトコルを深く理解します (それぞれの詳細なプロトコル、特別なプロトコル コード、およびその背後にある理由 (302 静的ファイル キャッシュ、502 は nginx の背後にある PHP がダウンしていることを意味するなど);
さまざまなフレームワーク アプリケーション統合機能のこれまでのフロントエンドの側面に加えて、フロントエンドの側面を学習することに興味がある場合は、より深く学ぶことができ、自分で開発できる形式になっています。一部のフロントエンド フレームワークjQuery やリッチ テキスト エディターの開発などは、JavaScript スキルを試す比較的簡単なテストです。
8. 他の分野での言語学習:基本的に、私は PHP の基本的な蓄積を持っています。 /C/C 言語。個人の興味や趣味に応じて、現段階でさまざまなプログラミング言語を学習することをお勧めします。スクリプト言語の場合は Python/Ruby を、関数型プログラミング言語の場合は、 Lisp./Haskell/Scala/Erlangなどを試すことができる 静的言語を試すならJava/Golangを試すことができる データ統計分析を行うにはR言語を学ぶことができる 視点を変えてバックエンドをやりたい場合ビジネスでは、Node.js や前述のもの、Nginx と Nginx_Lua の組み合わせなどを試すことができます。
さまざまな言語を学ぶことは、主に自分自身のビジョンと問題解決方法の違いを改善することです。たとえば、プロセス/スレッドに加えて、軽量のコルーチンもあることを理解するでしょう。クロスマシン通信シナリオでは、Erlang のソリューション ソリューションは驚くほどシンプルです。たとえば、C/C を選択したくない場合は、同様に効率的な Erlang/Golang が利用可能です。主な目的は、視野を広げることです。 。
9. 他の専門的な方向での学習:この段階では、基本的な LNMP スキルに加えて、他の分野の知識の学習も検討します。はい、それは個人的な興味と長期的な目標によって異なります。
現在、クラウド コンピューティング (分散ストレージ、分散コンピューティング、仮想マシンなど)、機械学習 (データ マイニング、パターン認識など、統計、パーソナライズされたレコメンデーションに適用) など、選択できる分野は数多くあります。 、当然のことながら、言語処理(中国語の単語分割など)、検索エンジン技術、グラフィックスと画像、音声認識など。これらの高度なものに加えて、高性能システム、モバイル開発 (Android/IOS)、コンピュータ セキュリティ、組み込みシステム、ハードウェアなど、エンジニアリングについてさらに学ぶことができる場所も数多くあります。
10. システム設計:
第 2 段階に基づいて、システム設計では、比較的複雑な中規模および大規模システムの設計で習得した経験とスキルを適用できます。さまざまな複雑なオンライン システムの問題のほとんどと、ブラウザ -> CDN -> ロード バランシング -> アクセス レイヤ -> Nginx PHP -> ビジネス キャッシュ -> データベース -> さまざまな複雑なバックグラウンドなどの完全なタスクを解決します。 RPC インタラクションの終了 (ストレージ バックエンド、ロジック バックエンド、不正行為防止バックエンド、外部サービス) -> より複雑なバックエンド ビジネス; 数千万から数億のトラフィックを伴う Web サイトの通常の開発をサポート可能毎日のメンテナンス作業。
以上がPHPプログラマーにはどのようなスキルが必要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。