ホームページ >バックエンド開発 >PHPの問題 >上級 PHP 開発者はどのようなスキルを持っていますか?

上級 PHP 開発者はどのようなスキルを持っていますか?

(*-*)浩
(*-*)浩オリジナル
2019-09-11 09:02:373495ブラウズ

シニア PHP プログラマー

重要なポイント: 基本的な LNMP プログラムに加えて、特定の方向または特定の分野での詳細な学習も可能です。分野。 (深さ次元の開発)

上級 PHP 開発者はどのようなスキルを持っていますか?

##目標: 基本的な PHP ビジネス開発を完了できることに加えて、最も詳細な問題や問題を解決することもできます。複雑な技術的問題に対処し、中規模および大規模なシステム設計と開発作業を独立して設計して完了することができ、特定の技術的方向性を独立して保持して深く掘り下げることができ、この分野では比較的専門的です。 (たとえば、MySQL、Nginx、PHP、Redis など、あらゆる方向の詳細な調査)

1. Linux: (推奨学習: PHP プログラミング熟練への入り口 )

第 2 段階の機能に加えて、Linux での通常の操作、パフォーマンスの監視と追跡に加えて、多くの高度で複雑なコマンドを使用して作業を完了することもできます (見てください) /tcpdump/starce/ldd/ar など); in シェル スクリプトに関しては、バックアップ、自動処理、モニタリング、 etc.;

は、awk/sed/perl などのアプリケーションで人気になっています 熟練しており、自由に操作、制御、処理、テキスト統計を実行し、さまざまな複雑な形式のデータを分析することができ、内部メカニズムをある程度理解していますLinux、カーネル モジュールのロード、起動時のエラー処理などの基本的な処理、およびその他の関連する知識 (NFS、ディスク管理など) を理解している;

2. Nginx :

第 2 段階に基づいて、私は Nginx を非常に上手に操作できるようになり、監視、パフォーマンスの最適化、複雑な処理など、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 フレームワークの利点を理解できます。プロジェクト開拡張機能 いくつかの複雑で高度な構成と原則 (memcached 拡張構成の memcache.hash_strategy、apc 拡張構成の apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection など);

PHP での作業 十分な理解があるphp-fpm の動作メカニズム (異なる構成のマシン上で php-fpm によって有効になるプロセス数の計算と原理など) を含むメカニズムの基本的な知識があり、zend エンジン (vm/gc/stream) について理解している基本的な PHP カーネル ソース コードを読んで (または関連記事を読んで)、PHP の内部メカニズムのほとんどのコア データ構造 (基本型/配列/オブジェクト) の実装を理解しており、詳細な知識を持っていることコアインフラストラクチャ (zval/hashtable/gc) の理解;

基本的な PHP 拡張機能開発を実行でき、拡張機能開発の中級および高度な知識 (minit/rinit など) を理解し、精通しているphp と apache/nginx (mod_php/fastcgi) 間のさまざまな通信および対話方法の詳細については、PHP 拡張機能の開発に加えて、Zend 拡張機能の開発方法を学習し、PHP をより低いレベルから理解することを検討できます。

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 など);

同時に、C/C の問題のほとんどを最終的に理解した後、優れた同時実行性の高いプログラム アーキテクチャ (リーダー-フォロー/マスター-ワーカーなど) を設計できます。 - サーバー開発 (メモリ管理、ログ出力、高同時実行性、フロントエンドおよびバックエンド通信プロトコル、サービス監視)、および各バックエンド サービスの RPC 通信の問題 (struct/http/thirft/protobuf など) を理解している。 );

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_Lua と Nginx などを組み合わせて試してみるとよいでしょう。さまざまな言語を学ぶことは、主に自分自身のビジョンを改善し、問題解決方法の違いを知ることです。たとえば、クロスマシン通信シナリオなど、プロセス/スレッドに加えて、軽量のコルーチンもあることを理解するでしょう。 , Erlang の解決策は驚くほど簡単です; たとえば、C/C を選択したくない場合は、同様の効率的な Erlang/Golang も利用可能です; など; 主に視野を広げるためです。

9. 他の専門的な方向での学習:

この段階では、基本的な LNMP スキルに加えて、他の分野の知識の学習も検討します。これらはすべて可能です。個人的な興味と長期的な目標の方向性に応じて。現在、選択できる領域は数多くあります。

例: クラウド コンピューティング (分散ストレージ、分散コンピューティング、仮想マシンなど)、機械学習 (統計、パーソナライズされた推奨事項に適用されるデータ マイニング、パターン認識など)、自然言語処理 (中国語)単語分割など)、検索エンジン技術、グラフィックスと画像、音声認識など。これらの高度なものに加えて、高性能システム、モバイル開発 (Android/IOS)、コンピュータ セキュリティ、組み込みシステム、ハードウェアなど、エンジニアリングについてさらに学ぶことができる場所も数多くあります。

10. システム設計:

第 2 段階に基づいて、システム設計では、比較的複雑な中規模および大規模システムの設計で習得した経験とスキルを適用できます。さまざまな複雑なオンライン システムの問題のほとんどと、ブラウザ -> CDN -> ロード バランシング -> アクセス レイヤ -> Nginx PHP -> ビジネス キャッシュ -> データベース -> さまざまな複雑なバックグラウンドなどの完全なタスクを解決します。 RPC インタラクションの終了 (ストレージ バックエンド、ロジック バックエンド、不正行為防止バックエンド、外部サービス) -> より複雑なバックエンド ビジネス; 数千万から数億のトラフィックを伴う Web サイトの通常の開発をサポート可能毎日のメンテナンス作業。

以上が上級 PHP 開発者はどのようなスキルを持っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。