Dieser Artikel unterteilt PHP-Programmierer in zwei Kategorien: fortgeschrittene und fortgeschrittene Programmierer und untersucht die Fähigkeiten, die diese beiden Kategorien von Programmierern haben sollten.
Fortgeschrittener PHP-Programmierer
1.Linux:
Shell-Skripte reibungslos verwenden können, um viele automatisierte Aufgaben auszuführen; awk/sed/perl funktioniert ebenfalls gut und kann viele Textverarbeitungs- und Datenstatistiken durchführen; grundsätzlich kann es die meisten nicht-speziellen Linux-Programme installieren (einschließlich verschiedener Bibliotheken, Pakete, Abhängigkeiten von Drittanbietern usw., wie z. B. MongoDB/Redis). /Sphinx/Luncene/SVN und dergleichen); verstehen Sie grundlegende Linux-Dienste, wissen Sie, wie man Linux-Leistungsindikatordaten anzeigt, kennen Sie die grundlegende Problemverfolgung unter Linux usw.
2
Verstehen Sie auf der Grundlage der ersten Stufe die komplexere Nginx-Konfiguration, einschließlich Multi-Core-Konfiguration, Ereignisse, Proxy_Pass, Sendfile/TCP_*-Konfiguration, kennen Sie Timeout und andere verwandte Konfigurationen und Auswirkungen auf die Leistung; Kann zusätzlich zum Webserver auch die Konfiguration von Proxy-Servern, umgekehrten statischen Servern usw. übernehmen; kennt die Konfiguration von Berechtigungen, kennt die grundlegenden Nginx-Funktionsprinzipien (Master). /worker-Mechanismus, epoll), Wissen darüber, warum die Nginx-Leistung besser ist als die Apache-Leistung;3. Basierend auf der ersten Stufe, I Sie beherrschen viele kleine Kenntnisse in der MySQL-Entwicklung, einschließlich der allgemeinen SQL-Optimierung (Gruppierung nach/Reihenfolge nach/Rand-Optimierung usw.). Sie können auch MySQL-Daten im heißen und kalten Zustand sichern Ich kenne auch die Konfigurationsoptionen, die sich auf die Leistung von innodb/myisam auswirken (z. B. key_buffer/query_cache /sort_buffer/innodb_buffer_pool_size /innodb_flush_log_at_trx_commit usw.) und kenne auch die entsprechenden Werte zum Konfigurieren dieser Optionen. Darüber hinaus kenne ich auch einige spezielle Konfigurationen B. das Wissen, wie man eine MySQL-Master-Slave-Synchronisationsumgebung einrichtet, das Wissen über die Unterschiede zwischen verschiedenen binlog_formaten; das Wissen über die Leistungsverfolgung von MySQL, einschließlich slow_log/explain usw., Sie können auch die grundlegende Indexerstellungsverarbeitung und andere Kenntnisse kennen ; Verstehen Sie die grundlegende MySQL-Architektur (Server + Speicher-Engine), kennen Sie die grundlegende InnoDB/MyISAM-Indexspeicherstruktur und die Unterschiede (Clustered-Index, B-Tree); kennen Sie die grundlegenden InnoDB-Transaktionsverarbeitungsmechanismen; MySQL-Ausnahmen (oder wissen, wo die Lösungen zu finden sind). Wenn die Bedingungen es zulassen, empfiehlt es sich, sich mit der MongoDB-Datenbank, einem Vertreter von NoSQL, vertraut zu machen und die Unterschiede zu MySQL zu vergleichen. Kollegen können MongoDB in geeigneten Anwendungsszenarien sicher und umsichtig verwenden und kennen die grundlegende kombinierte Entwicklung von PHP und MongoDB.
4. Redis/Memcached:In den meisten mittelgroßen Systemen ist die Cache-Verarbeitung definitiv beteiligt, daher müssen Sie den grundlegenden Cache kennen; Gemeinsamkeiten, Unterschiede und Anwendungsszenarien, Sie können Redis/Memcached unabhängig installieren, einige grundlegende Funktionen und Einschränkungen von Memcached verstehen, wie z. B. den maximalen Wert, und wissen, wie man PHP mit ihrer Verwendung kombiniert , verstehen Sie herkömmliche Datentypen und wissen Sie, welche Typen in welchen Szenarien verwendet werden sollten, verstehen Sie Redis-Transaktionen usw. Im Hauptteil erhalten Sie ein allgemeines Verständnis der Speicherstruktur von Memcached (Redis versteht die zugrunde liegende Implementierungsspeicherstruktur gängiger Datentypen (SDS/verknüpfte Liste/SkipList/HashTable) usw.) Sie können mehr über Redis-Transaktionen, RDB, AOF und andere Mechanismen erfahren. Gut
5. PHP:Zusätzlich zu den Funktionen der ersten Stufe in Bezug auf die Installation und Konfiguration können Sie PHP frei installieren und die Kompilierungs- und Installationskonfiguration verschiedener Erweiterungen von Drittanbietern verstehen. Die meisten Konfigurationsoptionen und Bedeutungen von fpm (z. B. max_requests/max_children/request_terminate_timeout und andere Konfigurationen, die sich auf die Leistung auswirken) sind bekannt Der Unterschied zwischen mod_php und fastcgi besteht darin, verschiedene grundlegende PHP-Technologien zu beherrschen, einschließlich eines umfassenden Verständnisses der objektorientierten PHP-/SPL-/Spezialfunktionen auf der Syntaxebene von Frameworks habe ich den Code von mindestens einem herkömmlichen PHP-MVC-Framework gelesen und kenne den internen Implementierungsmechanismus und das Design des grundlegenden PHP-Frameworks. Durch die PHP-Entwicklung sind Sie mit der Verwendung herkömmlicher Designmuster für die Anwendungsentwicklung vertraut (Zusammenfassung). Fabrik/Einzelfall/Beobachter/Befehlskette/Strategie/Adapter und andere Muster). Projektentwicklung; mit verschiedenen Codeoptimierungsmethoden von PHP vertraut sein und mit den grundlegenden PHP-Ausführungsmechanismen vertraut sein (Zend Basic-Arbeitsmechanismus der Engine/Erweiterung); 🎜>6. Systemdesign:
Kann Website-Architektur, Datenbank und grundlegende PHP-Framework-Auswahl für die meisten mittelgroßen Systeme entwerfen; und Wartung von Websites ähnlich wie: Browser-> 🎜>Senior PHP-ProgrammiererWichtige Punkte: Zusätzlich zu den grundlegenden LNMP-Programmen können Sie auch ein vertieftes Studium in einer bestimmten Richtung oder einem bestimmten Bereich absolvieren. (Entwicklung im Detail)
Ziel: Sie sind nicht nur in der Lage, die grundlegende PHP-Geschäftsentwicklung abzuschließen, sondern können auch die tiefgreifendsten und komplexesten technischen Probleme lösen und selbstständig mittlere und große Systemdesign- und Entwicklungsarbeiten entwerfen und abschließen Tauchen Sie tief in eine bestimmte technische Richtung ein und arbeiten Sie darin. Diese ist professioneller. (Zum Beispiel eingehende Recherche in jede Richtung wie MySQL, Nginx, PHP, Redis usw.)
1 Linux:
Zusätzlich zu Funktionen der zweiten Stufe unter Linux Zusätzlich zu den regulären Vorgängen und der Leistungsüberwachung und -verfolgung können Sie auch viele erweiterte und komplexe Befehle verwenden, um die Arbeit abzuschließen (watch/tcpdump/starce/ldd/ar usw.); Sie können bereits relativ komplexe Shell-Skripte schreiben (mehr als 500 Zeilen). Es handelt sich um eine Shell, die bei der Erledigung vieler Aufgaben hilft, einschließlich Sicherung, automatisierter Verarbeitung, Überwachung usw. Sie beherrscht bereits Anwendungen wie awk/sed/perl und kann Textstatistiken frei bedienen, steuern und verarbeiten und Daten in verschiedenen komplexen Formaten analysieren; ein gewisses Verständnis für die grundlegende Verarbeitung des Ladens von Kernelmodulen, die Behandlung von Startfehlern usw.; , wie NFS, Festplattenverwaltung usw.;
2. Nginx:
Auf der Grundlage der zweiten Stufe konnte ich Nginx sehr kompetent bedienen und kann tiefergehende Betriebs- und Wartungsarbeiten an Nginx durchführen, wie z. B. Überwachung, Leistungsoptimierung, Verarbeitung komplexer Probleme usw. Aus persönlichem Interesse können Sie sich hauptsächlich auf die eingehende Untersuchung des Funktionsprinzips von Nginx konzentrieren Beginnend mit dem Lesen des Quellcodes, z. B. des spezifischen Master-/Worker-Arbeitsmechanismus, der internen Ereignisverarbeitung von Nginx, der Speicherverwaltung usw., können Sie gleichzeitig Nginx erlernen. Für die erweiterte Entwicklung können Sie einige Ihrer eigenen privaten Erweiterungen anpassen Gleichzeitig können Sie ein gewisses Maß an Verständnis für Nginx + Lua haben, um zu sehen, ob ein besseres Modell kombiniert und angewendet werden kann. In dieser Phase ist ein umfassendes Verständnis der Prinzipien von Nginx erforderlich Erwägen Sie, ein Experte in Nginx-Richtung zu werden.
3. MySQL/MongoDB:
Basierend auf der zweiten Stufe können in Bezug auf MySQL-Anwendungen zusätzlich zur vorherigen grundlegenden SQL-Optimierung auch einige abgeschlossen werden Komplexe Vorgänge wie das Importieren und Exportieren großer Datenmengen, das Ändern von Tabellenstrukturen oder das Hinzufügen oder Löschen von Indexfeldern für große Online-Datenmengen und andere risikoreiche Vorgänge konnten mehr bewältigt werden Ich bin mit komplexen MySQL-Problemen wie der Lösung verschiedener Probleme bei der Master-Slave-Synchronisierung, raumübergreifenden Synchronisierungsdatenlösungen, MySQL-Hochverfügbarkeitsarchitektur usw. vertraut mit den Kernschlüsseltechnologien von MySQL, wie z. B. Transaktionsmechanismen (Isolationsebenen, Sperren usw.), über ein gewisses Verständnis und eine gewisse Anwendung von Technologien wie Triggern und Partitionen verfügen; die MySQL-Leistung umfasst Festplattenoptimierung (SAS-Migration zu SSD) und Serveroptimierung (Speicher, Serverkonfiguration) und andere Kernoptionen zur Leistungsoptimierung zusätzlich zur zweiten Stufe (innodb_log_buffer_size/ back_log/table_open_cache /thread_cache_size/innodb_lock_wait_timeout usw.), Verbindungspool-Softwareauswahlanwendung, verfügen über ein tiefgreifendes Verständnis von Betriebsanweisungen wie z show * (Status anzeigen/Profil anzeigen) und kann die meisten Leistungsprobleme nachverfolgen; umfassende Vertrautheit mit der MySQL-Backup-Technologie, einschließlich Notfallwiederherstellung und -wiederherstellung, umfassendes Verständnis von Binlog, Hot- und Cold-Backup, Multi-IDC-Backup, usw.; Sie haben ein besseres Verständnis der MySQL-Prinzipien, z. B. das Lesen einiger Quellcodes für den Arbeitsmechanismus von MySQL, z. B. Master-Slave-Synchronisationstechnologie (Replikation) Quellcode-Lernen oder Quellcode-Lernen und Verstehen eines bestimmten Speichers Engine (MyISAM/Innodb/TokuDB) usw. Wenn die Bedingungen es zulassen, können Sie auf die CSV-Engine zurückgreifen, um Ihre eigene einfache Speicher-Engine zu entwickeln, um einige Daten zu speichern und Ihr Verständnis von MySQL zu verbessern kann auch eine Weiterentwicklung in Richtung DBA in Erwägung ziehen. Auf der MongoDB-Ebene können Sie beispielsweise erwägen, MongoDB online anzuwenden, wenn Sie weniger schreiben und mehr lesen, oder einige Online-Datenanalyse- und -verarbeitungsvorgänge durchzuführen. Die spezifischen Szenarien können auf der Arbeit basieren, aber der Kern besteht darin Wenn die Bedingungen oder Interessen dies zulassen, können Sie bei Anwendungen in anderen Szenarien als NoSQL mehr über den Arbeitsmechanismus von MongoDB erfahren.
4. Redis/Memcached:
Basierend auf der zweiten Stufe können Sie sich bewerben und tiefer lernen. Da Memcached nicht besonders komplex ist, wird empfohlen, den Quellcode, insbesondere den Speicherverwaltungsteil, zu lesen, um ein tieferes Verständnis im Redis-Teil zu ermöglichen. Sie können komplexere Datenstrukturanwendungen durchführen (zset wird für Ranking-Ranking-Operationen verwendet). /Transaktionsverarbeitung, um sicherzustellen, dass Atomicity in Flash-Sale-Szenarioanwendungen verwendet wird. Dabei geht es hauptsächlich um das Erlernen von Anwendungen von Synchronisierungsmechanismen wie AOF und das Entwerfen einer hochverfügbaren Redis-Anwendungsarchitektur und eines Clusters. Es wird empfohlen, den Quellcode von Redis zu studieren Vertiefen und in die zweite Stufe einbringen Das gesammelte Wissen kann angewendet werden. Insbesondere können Sie sich über Kernereignisverwaltung, Speicherverwaltung, interne Kerndatenstruktur usw. informieren, um es vollständig zu verstehen. Wenn Ihr Interesse es zulässt, können Sie ein sehr professioneller Benutzer von Redis werden.
5. PHP:
Als grundlegende Kernkompetenzen benötigen wir auf der zweiten Stufe ein vertieftes Studium und eine vertiefte Anwendung. In Bezug auf die grundlegende Codeanwendung können Sie 95 % der bei der PHP-Entwicklung auftretenden Probleme lösen und die meisten PHP-Techniken innerhalb eines Tages schnell nutzen und die Vorteile jedes gängigen PHP-Frameworks verstehen. Es kann schnell und bequem eine Technologieauswahl in der Projektentwicklung treffen. Zusätzlich zu den Kenntnissen der regulären zweiten Stufe werden Sie auch einige obskurere Konfigurationsoptionen (php auto_prepend_file/auto_append_file) verstehen, einschließlich einiger komplexer erweiterter Konfigurationen Erweiterungen und Prinzipien (z. B. memcache.hash_strategy in der Memcached-Erweiterungskonfiguration, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection in der APC-Erweiterungskonfiguration usw.); Sie haben ein gutes Verständnis des Arbeitsmechanismus von PHP, einschließlich PHP -fpm-Arbeitsmechanismus (z. B. PHP-FPM ermöglicht die Berechnung und das Prinzip der Prozessnummer unter verschiedenen Konfigurationsmaschinen), verfügt über grundlegende Vertrautheit mit der Zend-Engine (vm/gc/stream-Verarbeitung), hat den grundlegenden PHP-Kernel-Quellcode gelesen (oder verwandte Informationen gelesen). Artikel) und hat ein Verständnis für den internen Mechanismus von PHP. Sie haben ein Verständnis für die Implementierung der meisten Kerndatenstrukturen (Basistypen/Array/Objekt) und haben ein tiefgreifendes Verständnis der Kerninfrastruktur (zval/hashtable/gc ); in der Lage sein, grundlegende PHP-Erweiterungsentwicklungen durchzuführen und einige mittlere und fortgeschrittene Kenntnisse der Erweiterungsentwicklung (Minit/Rinit usw.) zu verstehen; mit den Details verschiedener Kommunikations- und Interaktionsmethoden zwischen PHP und Apache/Nginx vertraut sein (mod_php /fastcgi); zusätzlich zur Entwicklung von PHP-Erweiterungen können Sie erwägen, die Entwicklung von Zend-Erweiterungen zu erlernen, um PHP von einer niedrigeren Ebene aus zu verstehen.
6. C/C++:
Basierend auf der zweiten Stufe können Sie ein tieferes Verständnis der C/C++-Sprache erlangen und in der Lage sein, kleine und mittlere Sprachen zu vervollständigen -große C/C++-Systementwicklungsarbeit; zusätzlich zur grundlegenden C/C++-Syntax und Datenstrukturen in der zweiten Stufe können Sie auch einige spezielle Datenstrukturen erlernen (b-tree/rb-tree/skiplist/lsm-tree/trie -Baum usw.) Aus praktischen Gründen ist es in Bezug auf die Systemprogrammierung erforderlich, mit der Multiprozess- und Multithread-Programmierung vertraut zu sein und die meisten Kommunikationsmethoden zwischen Multiprozessen zu verstehen Um Kommunikationsmethoden (gemeinsam genutzter Speicher/Semaphor/Pipeline usw.) flexibel zu wählen, kann er Sperrkonfliktprobleme gut lösen und gleichzeitig Multithread-Programme entwickeln und debuggen. versteht die Unterschiede und Auswahlmöglichkeiten von Multiprozessmodellen/Multithread-Modellen/asynchronen Netzwerk-IO-Modellen und ist mit verschiedenen Prinzipien und Unterschieden asynchroner Netzwerk-IO-Modelle (select/poll/epoll/iocp usw.) vertraut mit gängigen asynchronen Frameworks (ACE/ICE /libev/libev/libuv/Boost.ASIO usw.) und deren Verwendung. Wenn Sie Zeit haben, können Sie sich auch einige im Inland entwickelte Bibliotheken ansehen (z. B. muduo). Gleichzeitig ist er in der Lage, eine gute Programmarchitektur mit hoher Parallelität zu entwerfen (Leader-Follow/Master-Worker usw.); er versteht die meisten Probleme bei der Entwicklung von C/C++-Back-End-Servern (Speicherverwaltung, Protokolldruck, hohe Parallelität, Front). -End- und Back-End-Kommunikationsprotokolle, Dienstüberwachung), kennen die RPC-Kommunikationsprobleme jedes Back-End-Dienstes (struct/http/thirft/protobuf usw.); können GCC und GDB besser verwenden, um Kompilierung zu entwickeln und Debugging-Programme und Online-Programme Nachdem der Kern gelöscht wurde, kann das Problem im Hinblick auf die allgemeine Modulentwicklung schnell verfolgt und gelöst werden. Sie können einige allgemeine Tools oder Bibliotheken (z. B. asynchrone Netzwerk-Frameworks, Protokollbibliotheken, Speicherpools) sammeln oder entwickeln , Thread-Pools usw.), aber Sie müssen vorsichtig sein, ob Sie sie nach der Entwicklung anwenden.
7 🎜> Detailliertes Verständnis des HTTP-Protokolls (einschließlich jedes detaillierten Protokolls, des speziellen Protokollcodes und der Gründe dafür, z. B. 302 statische Dateien im Cache, 502 bedeutet, dass PHP hinter Nginx ausgefallen ist usw.); Integrationsmöglichkeiten verschiedener Framework-Anwendungen im Front-End. Wenn Sie daran interessiert sind, das Front-End zu erlernen, können Sie tiefer gehen, indem Sie selbst etwas Ähnliches wie das jQuery-Front-End entwickeln oder einen Rich-Text-Editor entwickeln ist ein relativ trivialer Test für JavaScript-Kenntnisse Es wird empfohlen, dass Sie zum jetzigen Zeitpunkt versuchen, verschiedene Programmiersprachen zu lernen, je nach Ihren persönlichen Interessen und Hobbys. Für Skriptsprachen können Sie Python/Ruby lernen und für funktionale Programmiersprachen können Sie Lisp/Haskell/ ausprobieren. Scala. /Erlang und dergleichen können Sie für die statistische Datenanalyse ausprobieren. Wenn Sie Ihre Perspektive ändern und Back-End-Geschäfte tätigen möchten, können Sie Node ausprobieren. js und das oben erwähnte Nginx_Lua in Kombination mit Nginx warten. Das Erlernen verschiedener Sprachen dient hauptsächlich dazu, die eigene Sichtweise und die Unterschiede in den Problemlösungsmethoden zu verbessern. Sie werden beispielsweise verstehen, dass es in maschinenübergreifenden Kommunikationsszenarien auch leichtgewichtige Coroutinen gibt Die Lösung von Erlang ist überraschend einfach. Wenn Sie sich beispielsweise nicht für C/C++ entscheiden möchten, gibt es auch ähnlich effiziente Erlang/Golang usw.;
9. Studium in anderen Berufsrichtungen:
In dieser Phase werden Sie zusätzlich zu den grundlegenden LNMP-Kenntnissen auch das Erlernen von Kenntnissen in anderen Bereichen in Betracht ziehen. Dies ist alles möglich, abhängig von persönlichen Interessen und langfristigen Zielen. Derzeit stehen viele Bereiche zur Auswahl, z. B. Cloud Computing (verteilter Speicher, verteiltes Computing, virtuelle Maschinen usw.), maschinelles Lernen (Data Mining, Mustererkennung usw., angewendet auf Statistiken, personalisierte Empfehlungen) und natürlich Sprachverarbeitung (chinesische Wortsegmentierung usw.), Suchmaschinentechnologie, Grafiken und Bilder, Spracherkennung usw. Zusätzlich zu diesen Fortgeschrittenen gibt es auch viele Orte, an denen Sie mehr über Technik erfahren können, z. B. über Hochleistungssysteme, mobile Entwicklung (Android/IOS), Computersicherheit, eingebettete Systeme, Hardware usw.
10. Systemdesign:
Basierend auf der zweiten Stufe kann das Systemdesign die erworbenen Erfahrungen und Fähigkeiten anwenden, um relativ komplexe mittlere und große Systeme zu entwerfen Die meisten Probleme verschiedener komplexer Online-Systeme wie Browser-> -End-RPC-Interaktionen (Speicher-Backend, Logik-Backend, Anti-Cheating-Backend, externe Dienste) -> Komplexeres Back-End-Geschäft, das den normalen Betrieb von Websites mit Dutzenden bis Hunderten von Millionen unterstützen kann Verkehr jeden Tag Entwicklungs- und Wartungsarbeiten.