Heim  >  Artikel  >  Backend-Entwicklung  >  Welche Fähigkeiten benötigen PHP-Programmierer?

Welche Fähigkeiten benötigen PHP-Programmierer?

青灯夜游
青灯夜游Original
2019-10-11 17:01:173027Durchsuche

Dieser Artikel unterteilt PHP-Programmierer in zwei Kategorien: fortgeschrittene und fortgeschrittene Programmierer und untersucht die Fähigkeiten, die diese beiden Kategorien von Programmierern besitzen sollten.

Welche Fähigkeiten benötigen PHP-Programmierer?

Fortgeschrittener PHP-Programmierer

1.Linux
Kann problemlos Verwenden Sie Shell-Skripte, um viele automatisierte Aufgaben auszuführen. Awk/sed/perl funktioniert ebenfalls gut und kann im Grunde viele nicht-spezielle Linux-Programme (einschließlich verschiedener Bibliotheken, Pakete und Abhängigkeiten von Drittanbietern) installieren usw., wie MongoDB/Redis/Sphinx/Luncene/SVN usw.); verstehen Sie grundlegende Linux-Dienste, wissen Sie, wie man Linux-Leistungsindikatordaten anzeigt, kennen Sie grundlegende Problemverfolgung unter Linux usw.

2. Nginx:

Verstehen Sie basierend auf der ersten Stufe die komplexere Nginx-Konfiguration, einschließlich Multi-Core-Konfiguration, Ereignisse, Proxy_Pass, Sendfile/TCP_*-Konfiguration, Kenntnis der Zeitüberschreitungen usw Sie wissen, dass Nginx zusätzlich zum Webserver auch Proxy-Server, umgekehrte statische Server und andere Konfigurationen durchführen kann. Sie wissen, wie man Berechtigungen konfiguriert und eine Nginx-Erweiterung Prinzip (Master/Worker-Mechanismus, Epoll), wissen, warum die Nginx-Leistung besser ist als die Apache-Leistung usw.;

3. MySQL/MongoDB:

Bühne: Grundsätzlich habe ich in Bezug auf die MySQL-Entwicklung viele Tipps gemeistert, einschließlich der regulären SQL-Optimierung (Gruppierung nach/Reihenfolge nach/Rand-Optimierung usw.); ich kann MySQL auch heiß und kalt sichern Daten, und ich kenne auch die Faktoren, die die Leistung von innodb/myisam-Konfigurationsoptionen beeinflussen (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 kennen wir auch einige spezielle Konfigurationsoptionen, z. B. das Wissen, wie man eine MySQL-Master-Slave-Synchronisationsumgebung einrichtet, und kennen den Unterschied zwischen MySQL-Leistungsverfolgung, einschließlich slow_log/explain usw Grundlegende Indexerstellung und -verarbeitung; Verständnis der grundlegenden MySQL-Architektur (Server + Speicher-Engine) und Kenntnis der grundlegenden InnoDB/MyISAM-Indexspeicherstruktur und -unterschiede (Clustered-Index, B-Tree); ; die Lösungen für die meisten MySQL-Ausnahmen verstehen (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 und Konfiguration können Sie die Kompilierungs- und Installationskonfiguration von PHP und verschiedenen Erweiterungen von Drittanbietern frei installieren; verstehen Sie PHP – 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). 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-/Befehlsketten-/Strategie-/Adaptermuster usw.); es wird empfohlen, ein eigenes PHP-MVC-Framework zu entwickeln, um die Entwicklung vollständig zu liberalisieren, sich ein tiefes Verständnis des MVC-Modells zu verschaffen und sich auch ein schnelles Upgrade zu ermöglichen Geschäftsprojektentwicklung; 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; Entwicklung und Wartung von Websites ähnlich wie: Browser-> Nginx+PHP ->

Leitender PHP-Programmierer

Wichtige Punkte: Zusätzlich zum grundlegenden LNMP-Programm können Sie auch vertiefendes Lernen in einer bestimmten Richtung oder einem bestimmten Bereich absolvieren. (Tiefendimensionsentwicklung)

Ziel: Neben der Fähigkeit, die grundlegende PHP-Geschäftsentwicklung abzuschließen, können Sie auch die tiefgreifendsten und komplexesten technischen Probleme lösen und mittlere und große Projekte unabhängig entwerfen und abschließen Systemdesign und Entwicklungsarbeit; Sie können unabhängig voneinander in eine bestimmte technische Richtung gehen und sind in diesem Bereich relativ professionell. (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). Die Shell unterstützt Sie bei der Erledigung vieler Aufgaben, einschließlich Sicherung, automatisierter Verarbeitung, Überwachung usw., und kann problemlos mit Anwendungen wie awk/sed/perl arbeiten , Steuerung, Verarbeitung, Textstatistiken und Analyse von Daten in verschiedenen komplexen Formaten; Kenntnisse der internen Mechanismen von Linux; gewisse Kenntnisse, grundlegende Verarbeitung des Ladens von Kernelmodulen, Behandlung von Startfehlern usw.; Festplattenverwaltung usw.;

2. Nginx:

Auf der Grundlage der zweiten Stufe konnte ich Nginx sehr kompetent bedienen und kann mehr leisten -Eingehende Betriebs- und Wartungsarbeiten an Nginx, wie z. B. Überwachung, Leistungsoptimierung, Verarbeitung komplexer Probleme usw.; aus persönlichem Interesse können Sie sich auf eine eingehende Untersuchung des Funktionsprinzips von Nginx konzentrieren, hauptsächlich beginnend mit dem Lesen der Quelle Code, wie z. B. der spezifische Master-/Worker-Arbeitsmechanismus, die interne Ereignisverarbeitung von Nginx, die Speicherverwaltung usw., können Sie gleichzeitig mit Nginx für die erweiterte Entwicklung anpassen Sie können 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, und Sie können darüber nachdenken, es zu vertiefen Profi in Nginx-Richtung.

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 maschinenraumübergreifende Synchronisationsdatenlösung, die MySQL-Hochverfügbarkeitsarchitektur usw. sind alle beteiligt ;

Ich bin mit der MySQL-Anwendungsebene und den Kernschlüsseltechnologien von MySQL vertraut, zum Beispiel mit Transaktionsmechanismen (Isolationsebenen, Sperren usw.), einem gewissen Verständnis und der Anwendung von Triggern, Partitionen und anderen Technologien ;

Für MySQL-Leistung, einschließlich Festplattenoptimierung (SAS-Migration auf SSD), Serveroptimierung (Speicher, Konfiguration des Servers selbst), zusätzlich zu anderen Kernleistungsoptimierungsoptionen 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 und detailliertes Verständnis von Betriebsanweisungen wie show * (show status/show profile). Verstehen und Abschließen der meisten Leistungsprobleme;

Umfassende Vertrautheit mit der MySQL-Backup-Technologie, einschließlich Disaster Recovery und Recovery, umfassendes Verständnis von Binlog, Hot- und Cold-Backup, Multi-IDC-Backup usw.

In Bezug auf MySQL-Prinzipien habe ich mehr Kenntnisse, wie etwa das Lesen einiger Quellcodes über den Arbeitsmechanismus von MySQL, etwa das Erlernen des Quellcodes der Master-Slave-Synchronisationstechnologie (Replikation), oder das Erlernen einer bestimmten Speicher-Engine (MyISAM/Innodb/TokuDB) usw. Lernen und Verstehen des Quellcodes. Wenn die Bedingungen dies 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 während dieses Prozesses zu verbessern. Wenn Sie interessiert sind, können Sie auch über die Entwicklung nachdenken die Richtung von DBA.

Auf der MongoDB-Ebene können Sie beispielsweise erwägen, mit der Online-Anwendung von MongoDB zu beginnen, 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. Der Kern besteht jedoch darin, die Anwendungen von RMDBS und NoSQL in verschiedenen Szenarien besser zu verstehen. Wenn die Bedingungen oder Interessen dies zulassen, können Sie 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;

Die meisten Lernanwendungen, die Synchronisationsmechanismen wie aof beinhalten, entwerfen eine hochverfügbare Redis-Anwendungsarchitektur und Cluster;

Es wird empfohlen, den Quellcode von Redis eingehend zu studieren und das in der zweiten Stufe gesammelte Wissen anzuwenden. Insbesondere können Sie sich über die Kernereignisverwaltung, die Speicherverwaltung und die interne Kerndatenstruktur informieren usw., 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 Grundlage der zweiten Stufe ein vertieftes Studium und eine vertiefte Anwendung. In Bezug auf die grundlegende Codeanwendung kann es 95 % der bei der PHP-Entwicklung auftretenden Probleme lösen und die meisten PHP-Fähigkeiten verstehen.

Sie können innerhalb eines Tages schnell mit der Verwendung der meisten PHP-Frameworks beginnen und die Vorteile verstehen und Nachteile jedes Mainstream-PHP-Frameworks können während der Projektentwicklung schnell und bequem eine Technologieauswahl treffen

In Bezug auf die Konfiguration werden Sie neben dem allgemeinen Wissen in der zweiten Phase auch einige unklarere Konfigurationsoptionen verstehen ( php auto_prepend_file /auto_append_file), einschließlich einiger komplexer erweiterter Konfigurationen und Prinzipien in der Erweiterung (z. B. memcache.hash_strategy in der memcached-Erweiterungskonfiguration, apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection in der apc-Erweiterungskonfiguration);

Verfügen Sie über ein gutes Verständnis des Arbeitsmechanismus von PHP, einschließlich des Arbeitsmechanismus von PHP-FPM (z. B. die Berechnung und das Prinzip der Anzahl der Prozesse, die PHP-FPM unter verschiedenen Konfigurationsmaschinen ermöglicht), und verfügen Sie über grundlegende Kenntnisse die Zend-Engine (vm/gc/stream-Verarbeitung), lesen Sie über grundlegenden PHP-Kernel-Quellcode (oder lesen Sie relevante Artikel) und verstehen Sie die Implementierung der meisten Kerndatenstrukturen (grundlegende Typen/Arrays/Objekte) von PHP Mechanismen und gründliches Studium der Kerninfrastruktur (zval/hashtable/gc). , usw.) und seien Sie mit den Details der verschiedenen Kommunikations- und Interaktionsmethoden zwischen PHP und Apache/Nginx (mod_php/fastcgi) vertraut. Bei der 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 den Datenstrukturen in der zweiten Stufe können Sie auch einige spezielle Datenstrukturen (b-tree/rb-tree/skiplist) erlernen /lsm-tree/ trie-tree usw.), um den Anforderungen spezieller Arbeiten gerecht zu werden.

Seien Sie mit der Multiprozess- und Multithread-Programmierung vertraut zwischen mehreren Prozessen in Situationen mit mehreren Prozessen und in der Lage, die Kommunikationsmethode (gemeinsam genutzter Speicher/Semaphor/Pipeline usw.) flexibel zu wählen;

Multithread-Programmierung kann das Problem von Sperrkonflikten gut lösen kann Multithread-Programme entwickeln und debuggen;

Netzwerkprogrammierung gleichzeitig relativ vertraut sein, die Unterschiede und Auswahlmöglichkeiten von Multiprozessmodellen/Multithread-Modellen/asynchronen Netzwerk-IO-Modellen verstehen, mit ihnen vertraut sein die Prinzipien und Unterschiede verschiedener asynchroner Netzwerk-IO-Modelle (select/poll/epoll/iocp usw.) kennen und mit gängigen asynchronen Frameworks (ACE/ICE /libev/libevent/libuv/Boost.ASIO usw.) und deren Verwendung vertraut sein Wenn Sie Zeit 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.);

Verstehen Sie 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 RPC-Kommunikationsprobleme mit verschiedenen Backend-Diensten (struct/http/thirft/protobuf usw.);

kann mit der Verwendung von GCC und GDB zum Entwickeln von Kompilierungs- und Debugging-Programmen besser vertraut sein und kann diese schnell nachverfolgen Lösen Sie Probleme, nachdem der Online-Programmkern verloren gegangen ist.

In Bezug auf die allgemeine Modulentwicklung können Sie einige allgemeine Tools oder Bibliotheken sammeln oder entwickeln (z. B. asynchrone Netzwerk-Frameworks, Protokollbibliotheken, Speicherpools, Thread-Pools usw.) usw.), aber Sie müssen vorsichtig sein, ob Sie sie nach der Entwicklung anwenden.

Frontend:

Protokoll (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 ausgefallen ist usw.); Zusätzlich zum vorherigen Front- Endanwendungsintegrationsfunktionen verschiedener Frameworks. Wenn Sie daran interessiert sind, das Front-End zu erlernen, können Sie tiefer gehen. Die Form besteht darin, dass Sie es selbst entwickeln können. Einige Front-End-Frameworks wie jQuery oder die Entwicklung eines Rich-Textes Editor sind relativ triviale Tests für JavaScript-Kenntnisse.

Grundsätzlich verfügen Sie über grundlegende Kenntnisse in der PHP/C/C++-Sprache Es wird empfohlen, dass Sie zum jetzigen Zeitpunkt versuchen, verschiedene Programmiersprachen zu lernen, je nach Ihren persönlichen Interessen und Hobbys. Für funktionale Programmiersprachen können Sie Lisp/Haskell ausprobieren /Scala/Erlang und dergleichen können Sie Java /Golang ausprobieren. Wenn Sie Ihre Perspektive ändern und Back-End-Geschäfte tätigen möchten, können Sie Node ausprobieren .js und die zuvor genannten Nginx kombiniert mit Nginx_Lua usw.

Das Erlernen verschiedener Sprachen dient hauptsächlich dazu, Ihre eigene Vision und die Unterschiede in den Problemlösungsmethoden zu verbessern. Sie werden beispielsweise verstehen, dass es beispielsweise auch leichte Coroutinen gibt. In maschinenübergreifenden Kommunikationsszenarien ist die Lösung von Erlang überraschend einfach. Wenn Sie sich beispielsweise nicht für C/C++ entscheiden möchten, stehen ähnlich effiziente Erlang/Golang usw. zur Verfügung .

9. Lernen in anderen beruflichen Richtungen:

In dieser Phase wird zusätzlich zu den grundlegenden LNMP-Fähigkeiten das Erlernen von Wissen in anderen Bereichen berücksichtigt Ja, es hängt von persönlichen Interessen und langfristigen Zielen ab.

Derzeit stehen viele Bereiche zur Auswahl, wie z. B. Cloud Computing (verteilter Speicher, verteiltes Computing, virtuelle Maschinen usw.), maschinelles Lernen (Data Mining, Mustererkennung usw., angewendet auf Statistiken, personalisierte Empfehlungen). ), natürlich Sprachverarbeitung (chinesische Wortsegmentierung usw.), Suchmaschinentechnologie, Grafiken und Bilder, Spracherkennung usw. Zusätzlich zu diesen fortgeschrittenen Bereichen gibt es auch viele Bereiche, in denen Sie mehr über Ingenieurwesen lernen können, wie z. B. 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 benötigen PHP-Programmierer?. 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