Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Fähigkeiten müssen fortgeschrittene PHP-Entwickler beherrschen?

Welche Fähigkeiten müssen fortgeschrittene PHP-Entwickler beherrschen?

(*-*)浩
(*-*)浩Original
2019-09-11 09:02:373406Durchsuche

Senior PHP Programmer

Wichtige Punkte: Zusätzlich zu grundlegenden LNMP-Programmen können Sie auch ein vertieftes Studium in eine bestimmte Richtung absolvieren oder Feld. (Tiefendimensionsentwicklung)

Welche Fähigkeiten müssen fortgeschrittene PHP-Entwickler beherrschen?

Ziel: Zusätzlich zum Abschluss der grundlegenden PHP-Geschäftsentwicklung können auch tiefgreifendste und komplexe technische Probleme gelöst werden. und kann selbständig mittlere und große Systemdesign- und Entwicklungsarbeiten entwerfen und durchführen; ich kann selbstständig eine bestimmte technische Richtung verfolgen und vertiefen, und ich bin in diesem Bereich relativ professionell. (Zum Beispiel eingehende Recherche in jede Richtung wie MySQL, Nginx, PHP, Redis usw.)

1. Linux: (Empfohlenes Lernen: PHP-Programmierung von Einstieg in die Kompetenz )

Zusätzlich zu den Funktionen der zweiten Stufe können Sie neben regulären Vorgängen und Leistungsüberwachung und -verfolgung unter Linux auch viele erweiterte und komplexe Befehle verwenden, um die Arbeit abzuschließen (Beobachten/ tcpdump/starce /ldd/ar usw.); in Bezug auf Shell-Skripte konnte ich relativ komplexe Shell-Skripte schreiben (mehr als 500 Zeilen), um bei der Erledigung vieler Shell-Aufgaben zu helfen, einschließlich Sicherung, automatisierter Verarbeitung, Überwachung, usw.;

Anwendungen wie awk/sed/perl sind populär geworden. Sie sind in der Lage, Daten in verschiedenen komplexen Formaten frei zu bedienen, zu steuern, zu verarbeiten und zu analysieren. Sie verfügen über ein gewisses Verständnis der internen Mechanismen von Linux , grundlegende Verarbeitung des Kernel-Moduls, Behandlung von Startfehlern usw. und Kenntnisse über einige andere verwandte Dinge, wie z. B. NFS, Festplattenverwaltung usw.;

Auf der Grundlage der zweiten Stufe konnte ich Nginx sehr geschickt bedienen und kann tiefergehende Betriebs- und Wartungsarbeiten an Nginx durchführen, wie z. B. Überwachung, Leistungsoptimierung, komplexe Probleme Verarbeitung usw.; je nach persönlichem Interesse können Sie sich auf eine eingehende Untersuchung des Arbeitsprinzips von Nginx konzentrieren, hauptsächlich durch Lesen des Quellcodes, wie z. B. spezifischer Master/Worker-Arbeitsmechanismus, interne Ereignisverarbeitung von Nginx, Speicherverwaltung, usw.; gleichzeitig können Sie die Entwicklung von Nginx-Erweiterungen erlernen und gleichzeitig einige Ihrer eigenen privaten Erweiterungen anpassen, Sie können ein gewisses Maß an Verständnis für Nginx + Lua erlangen und sehen, ob bessere Modelle kombiniert werden können und angewendet; die Voraussetzung in dieser Phase ist ein tiefgreifendes Verständnis der Nginx-Prinzipien, und Sie können darüber nachdenken, ein tiefgehender Profi in der 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

Zusätzlich zur Installation und Konfiguration; war in der Lage, komplexere MySQL-Probleme zu bewältigen, wie z. B. Die Untersuchung verschiedener Probleme, die Lösung des Master-Slave-Synchronisationsverzögerungsproblems, die computerraumübergreifende Synchronisierungsdatenlösung, die MySQL-Hochverfügbarkeitsarchitektur usw. sind alle beteiligt ; Für die MySQL-Anwendungsebene bin ich mit den Kernschlüsseltechnologien von MySQL vertraut, z. B. dem Transaktionsmechanismus (Isolationsebene), Sperren usw.) und habe ein gewisses Verständnis und eine gewisse Anwendung von Triggern, Partitionen und anderen Technologien >

In Bezug auf die MySQL-Leistung umfasst es Festplattenoptimierung (SAS-Migration auf SSD), Serveroptimierung (Speicher, Konfiguration des Servers selbst) sowie andere Optionen zur Kernleistungsoptimierung in der zweiten Stufe (innodb_log_buffer_size/back_log/table_open_cache /thread_cache_size/ innodb_lock_wait_timeout usw.), Anwendung zur Auswahl der Verbindungspool-Software, verfügt über ein umfassendes Verständnis von Betriebsanweisungen wie show * (Status anzeigen/Profil anzeigen) und kann die meisten davon ausführen Leistungsproblemverfolgung

In -tiefe Vertrautheit mit der MySQL-Backup-Technologie, einschließlich Disaster Recovery und Recovery, tiefes Verständnis von Binlog, Hot- und Cold-Backup, Multi-IDC-Backup usw.; mehr Verständnis für MySQL-Prinzipien, wie z. B. Der Arbeitsmechanismus von MySQL beginnt mit Lesen eines Teils des Quellcodes, z. B. Erlernen des Quellcodes der Master-Slave-Synchronisationstechnologie (Replikation), oder Erlernen und Verstehen des Quellcodes einer bestimmten Speicher-Engine (MyISAM/Innodb/TokuDB) usw. Wenn die Bedingungen dies zulassen, können Sie Sie können sich auf die CSV-Engine beziehen. Entwickeln Sie Ihre eigene einfache Speicher-Engine, um einige Daten zu speichern und Ihr Verständnis von MySQL zu verbessern.

Während dieses Prozesses können Sie bei Interesse auch eine Entwicklung in Richtung DBA in Betracht 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:

Auf der Grundlage der zweiten Stufe kann eine tiefergehende Anwendung und ein tieferes Lernen erreicht werden. 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 mehr Anwendungen komplexer Datenstrukturen durchführen ( zset wird für Ranking-Ranking-Operationen verwendet) /Transaktionsverarbeitung wird verwendet, um die Atomizität in Anwendungen wie Flash-Sale-Szenarien sicherzustellen);

Es wird empfohlen, Anwendungen mit Synchronisierungsmechanismen wie AOF zu erlernen und eine hochverfügbare Redis-Anwendungsarchitektur und -Cluster zu entwerfen. Es wird empfohlen, den Quellcode von Redis eingehend zu studieren und das in der zweiten Phase gesammelte Wissen anzuwenden Lesen Sie mehr über Kernereignisverwaltung, Speicherverwaltung, interne Kerndatenstrukturen usw. Wenn Ihr Interesse es zulässt, können Sie ein sehr professioneller Benutzer von Redis werden.

5. PHP:

Als grundlegende Kernkompetenz müssen wir uns auf der Grundlage der zweiten Stufe vertiefen. 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 während der Projektentwicklung schnell und bequem eine Technologieauswahl treffen.

In Bezug auf die Konfiguration kennen Sie zusätzlich zu den in der zweiten Stufe erlernten Kenntnissen auch einige weitere obskure Konfigurationsoptionen (php auto_prepend_file/auto_append_file). einschließlich Erweiterungen Einige komplexe erweiterte Konfigurationen 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);

Arbeiten Sie an PHP. Viel Spaß Verständnis des Mechanismus, einschließlich des Arbeitsmechanismus von PHP-FPM (z. B. Berechnung und Prinzip der Anzahl der Prozesse, die PHP-FPM auf Maschinen mit unterschiedlichen Konfigurationen ermöglicht), grundlegende Vertrautheit mit der Zend-Engine (VM/GC/ Stream-Verarbeitung) und haben den grundlegenden PHP-Kernel-Quellcode gelesen (oder relevante Artikel gelesen), haben ein Verständnis für die Implementierung der meisten Kerndatenstrukturen (Basistypen/Array/Objekt) der internen Mechanismen von PHP und verfügen über eine tiefes Verständnis der Kerninfrastruktur (zval/hashtable/gc);

Sie müssen in der Lage sein, grundlegende PHP-Erweiterungsentwicklungen durchzuführen, einige mittlere und fortgeschrittene Kenntnisse der Erweiterungsentwicklung (minit/rinit usw.) zu verstehen, und mit den Details der verschiedenen Kommunikations- und Interaktionsmethoden zwischen PHP und Apache/Nginx (mod_php/fastcgi) vertraut sein; zusätzlich zur Entwicklung von PHP-Erweiterungen können Sie in Betracht ziehen, Zend-Erweiterungen zu entwickeln und 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; Ich bin mit der Netzwerkprogrammierung vertraut und verstehe die Unterschiede zwischen Multiprozessmodell/Multithread-Modell/asynchronem Netzwerk-IO-Modell und -Auswahl. Ich bin mit den Prinzipien und Unterschieden verschiedener asynchroner Netzwerk-IO-Modelle (select/poll/epoll/iocp usw.) vertraut. ) und mit gängigen asynchronen Frameworks (ACE/ICE /libev/libevent/libuv/Boost.ASIO usw.) und deren Verwendung vertraut. Wenn Sie Freizeit haben, können Sie sich auch einige im Inland entwickelte Bibliotheken ansehen (z. B muduo);

Gleichzeitig können Sie eine gute Programmarchitektur mit hoher Parallelität entwerfen (Leader-Follow/Master-Worker usw.); Speicherverwaltung, Protokolldruck, hohe Parallelität, Front-End- und Back-End-Kommunikationsprotokolle, Dienstüberwachung) und kennen die RPC-Kommunikationsprobleme jedes Back-End-Dienstes (struct/http/thirft/protobuf usw.); >

Um GCC und GDB vertrauter zu verwenden, um Kompilierungs- und Debugging-Programme zu entwickeln und Probleme nach dem Kernel des Online-Programms schnell zu verfolgen und zu lösen, können Sie einige allgemeine Tools oder Bibliotheken sammeln oder entwickeln (z. B. asynchrones Netzwerk-Framework, Protokollbibliothek, Speicherpool, Thread-Pool usw.), Sie sollten jedoch vorsichtig sein, ob Sie es nach der Entwicklung anwenden, um sich vor der Jagd nach Fehlern zu schützen 7. Front-End:

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 werden zwischengespeichert, 502 bedeutet, dass PHP hinter Nginx steht ist ausgefallen usw.);

Wenn Sie zusätzlich zur vorherigen Integration verschiedener Framework-Anwendungen in die Front-End-Fähigkeit interessiert sind, können Sie tiefer in das Formular einsteigen der Entwicklung einiger Front-End-Frameworks wie jQuery oder der Entwicklung eines Rich-Text-Editors, was ein relativ trivialer Test für das Erlernen von Sprachen in anderen Bereichen ist:

Grundlegende Kenntnisse in der Grundsprache PHP/C/C++. Es wird empfohlen, in der aktuellen Phase zu versuchen, je nach persönlichen Interessen und Hobbys Skripte zu lernen. Für Klassensprachen können Sie Python/ lernen. Ruby, für funktionale Programmiersprachen können Sie Lisp/Haskell/Scala/Erlang ausprobieren, für statische Sprachen können Sie Java/Golang ausprobieren und für die statistische Datenanalyse können Sie etwas über die Sprache R lernen.

Wenn Sie Back-End-Geschäfte aus einer anderen Perspektive betreiben möchten, können Sie Node.js und das oben genannte Nginx_Lua in Kombination mit Nginx usw. ausprobieren. Beim Erlernen verschiedener Sprachen geht es vor allem darum, die eigene Vision 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. Lernen in anderen beruflichen Richtungen:

Zu diesem Zeitpunkt werden Sie auch das Erlernen von Kenntnissen in anderen Bereichen in Betracht ziehen. je nach persönlichen Interessen und langfristiger Zielrichtung. Derzeit gibt es viele Bereiche zur Auswahl.

Zum Beispiel Cloud Computing (verteilter Speicher, verteiltes Computing, virtuelle Maschinen usw.), maschinelles Lernen (Data Mining, Mustererkennung usw., angewendet auf Statistiken, personalisierte Empfehlungen), Verarbeitung natürlicher Sprache (Chinesisch). 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.

Das obige ist der detaillierte Inhalt vonWelche Fähigkeiten müssen fortgeschrittene PHP-Entwickler beherrschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn