Heim > Artikel > Backend-Entwicklung > Technischer Wachstumsplan für PHP-Programmierer (für diejenigen, die verwirrt sind)
Entsprechend dem Verständnis des Entwicklungsverlaufs vieler PHP/LNMP-Programmierer, kombiniert mit persönlicher Erfahrung, habe ich die Verwirrung vieler Programmierer über die Zukunft, insbesondere die Blindheit und Panik in Bezug auf technisches Lernen, abstrahiert und das PHP kurz geklärt Die technischen Anforderungen werden von Programmierern in jeder Phase genutzt, um vielen PHP-Programmen dabei zu helfen, Lern- und Wachstumsziele festzulegen.
Dieser Artikel gibt eine grundlegende Zusammenfassung basierend auf der aktuellen Mainstream-Technologie. Die gesamte Einstellung basiert auf der Annahme, dass der PHP-Programmierer nicht über eine sehr solide Grundlage verfügt und alle Einstellungen sehr spezifisch und klar sind, was den Leuten das Gefühl geben kann unbequem. Bitte verstehen Sie nur die Meinung einer Familie. (Zukünftige technologische Veränderungen liegen außerhalb des Diskussionsbereichs)
Die erste Stufe: Grundstufe (grundlegender PHP-Programmierer)
Wichtige Punkte: Beherrschen Sie LNMP (der Kern sind grundlegende Installations- und Konfigurationsvorgänge)
Ziel: In der Lage sein, die grundlegende LNMP-Systeminstallation, einfache Konfiguration und Wartung durchzuführen; in der Lage sein, die grundlegende PHP-Entwicklung einfacher Systeme durchzuführen; in der Lage sein, die Entwicklung eines bestimmten PHP-Funktionsmoduls in einem mittelgroßen PHP-System zu unterstützen;
Zeit: Die Zeit, die benötigt wird, um diese Phase abzuschließen, variiert von Person zu Person. Einige wachsen schneller und es dauert nur ein halbes Jahr, während andere in zwei oder drei Jahren langsamer wachsen.
1.Linux:
Grundlegende Befehle, Vorgänge, Start, grundlegende Dienstkonfiguration (einschließlich RPM-Installationsdateien, verschiedene Dienstkonfigurationen usw.); kann einfache Shell-Skripte und awk/sed-Skriptbefehle usw. schreiben.
2.Nginx:
In der Lage sein, Nginx PHP zu installieren und zu konfigurieren, die grundlegenden Nginx-Kernkonfigurationsoptionen zu kennen und grundlegende Konfigurationen wie server/fastcgi_pass/access_log zu kennen. Das Ziel besteht darin, dass Nginx PHP_FPM reibungslos funktioniert.
3.MySQL:
Seien Sie in der Lage, MySQL selbst zu erstellen und die grundlegenden MySQL-Konfigurationsoptionen zu kennen; kennen Sie die unterschiedlichen Konfigurationsoptionen für die beiden Engines InnoDB und MyISAM; kennen Sie die grundlegenden Unterschiede zwischen den beiden Engines Unterschiede zwischen den oben genannten Optionen: Sie können eine MySQL-Datenbank rein manuell kompilieren und erstellen und die Codierung so konfigurieren, dass sie normal und stabil läuft.
4.PHP:
Grundlegende Syntax-Array-, String-, Datenbank-, XML-, Socket-, GD/ImageMgk-Bildverarbeitung usw.; vertraut mit verschiedenen APIs (mysql/mysqli/PDO), die mit MySQL-Operationen verknüpft sind, und weiß, wie man verschiedene Codierungsprobleme löst; Regelmäßig verwendete PHP-Frameworks (ThinkPHP, Zendframework, Yii, Yaf usw.); verstehen Sie den grundlegenden MVC-Funktionsmechanismus und wissen Sie ein wenig über die Unterschiede zwischen verschiedenen PHP-Frameworks; Sie müssen in der Lage sein, die Dateiverzeichnisorganisation im Entwicklungsprojekt zu verstehen, über eine grundsätzlich gute Codestruktur und einen guten Codestil zu verfügen und in der Lage zu sein, die Entwicklung kleiner Systeme und die Entwicklung eines bestimmten Moduls in einem mittelgroßen System abzuschließen.
5. Vorderseite:
Wenn es die Zeit erlaubt, können Sie HTML/CSS/JS und andere verwandte Kenntnisse richtig erlernen, wissen, welche Webstandards, Web-/WAP-Seitenmodi von Div-CSS, den Unterschied zwischen HTML5 und HTML4 kennen und einige grundlegende Frontends verstehen JS Framework (jQuery und dergleichen); einige grundlegende JavaScript-Programmierkenntnisse sind nicht erforderlich. Wenn Sie Zeit haben, ist es in Ordnung, ein wenig zu lernen, es wird jedoch nicht als Schwerpunkt empfohlen, es sei denn, Sie verfügen über starke Kenntnisse persönliches Interesse)
6. Systemdesign:
Seien Sie in der Lage, das grundlegende Design kleiner Systeme, einschließlich des einfachen Datenbankdesigns, abzuschließen und die grundlegende Design- und Entwicklungsarbeit von Browsern abzuschließen –> Millionen Traffic täglich; Website-Entwicklungs- und Wartungsarbeiten;
Die zweite Stufe: Verbesserungsstufe (mittlerer PHP-Programmierer)
Fokus: LNMP-Kenntnisse verbessern und LNMP umfassender und kompetenter anwenden können.
Ziel: Sie können jederzeit und überall eine LNMP-Umgebung einrichten und Routinekonfigurationen schnell durchführen. Sie können die meisten auftretenden Entwicklungs- und Online-Umgebungsprobleme aufspüren und lösen mittelgroße Systeme; in der Lage sein, in großen Systemen zu arbeiten; die Entwicklungsarbeit eines mittelgroßen Moduls übernehmen;
1. Linux:Basierend auf der ersten Stufe können Sie Shell-Skripte problemlos verwenden, um viele automatisierte Arbeiten auszuführen. Außerdem können Sie viele Textverarbeitungs- und Datenstatistiken ausführen Sie sind nicht spezielle Linux-Programme (einschließlich verschiedener Bibliotheken, Pakete, Abhängigkeiten von Drittanbietern usw., wie z. B. MongoDB/Redis/Sphinx/Luncene/SVN usw.) und wissen, wie man Linux-Leistungsindikatoren anzeigt Daten, kennen die 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, kennen Sie das Timeout und andere damit verbundene Konfigurationen und Auswirkungen auf die Leistung; Rolle des Webservers zusätzlich zum Webserver, Reverse-Static-Server und anderen Konfigurationen; kennen Sie die Konfiguration von Berechtigungen, kennen Sie das grundlegende Nginx-Funktionsprinzip (Master/Worker-Mechanismus). , epoll), wissen, warum die Nginx-Leistung höher ist als die gute Apache-Leistung;
3. MySQL/MongoDB:
Auf der Grundlage der ersten Stufe können Sie in Bezug auf die MySQL-Entwicklung viele Tipps beherrschen, einschließlich der herkömmlichen SQL-Optimierung (Gruppierung nach/Reihenfolge nach/Rand-Optimierung usw.); Außerdem kenne ich 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 ich kenne auch die entsprechenden Werte Ich kenne auch einige spezielle Konfigurationsoptionen, z. B. das Einrichten einer synchronen MySQL-Master-Slave-Umgebung, kenne den Unterschied zwischen den einzelnen binlog_formaten, einschließlich slow_log/explain usw kennen auch die grundlegende Indexerstellung und -verarbeitung; verstehen die grundlegenden Prinzipien der MySQL-Architektur (Server-Speicher-Engine) und kennen die grundlegenden InnoDB/MyISAM-Indexspeicherstrukturen und -unterschiede (Clustered-Index, B-Tree); Verarbeitungsmechanismus; verstehen Sie die Lösungen für die meisten MySQL-Ausnahmen (oder wissen Sie, wo Sie die Lösungen finden). Wenn die Bedingungen es zulassen, wird empfohlen, sich mit der MongoDB-Datenbank vertraut zu machen, die ein Vertreter von NoSQL ist, 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:
Cache-Verarbeitung wird definitiv in den meisten mittelgroßen Systemen beteiligt sein, daher müssen Sie das grundlegende Caching verstehen; Sie müssen die Ähnlichkeiten, Unterschiede und Anwendungsszenarien von Memcached und Redis kennen, in der Lage sein, Redis/Memcached unabhängig zu installieren und einige grundlegende Funktionen zu verstehen und Einschränkungen von Memcahed. Um den größtmöglichen Nutzen zu erzielen, müssen Sie beispielsweise wissen, wie man PHP mit der Verwendung von Redis kombiniert, die herkömmlichen Datentypen versteht und weiß, welche Typen in welchen Szenarien verwendet werden. Verstehen Sie Redis-Transaktionen usw. Im Hauptteil erhalten Sie ein grobes Verständnis der Speicherstruktur von Memcached (Redis versteht die zugrunde liegende Implementierungsspeicherstruktur gängiger Datentypen (SDS/verknüpfte Liste/SkipList/HashTable) usw. Übrigens: Sie können mehr über Redis-Transaktionen, RDB, AOF und andere Mechanismen erfahren
5. PHP:Zusätzlich zu den Funktionen der ersten Stufe können Sie in Bezug auf Installation und Konfiguration die kompilierte Installationskonfiguration von PHP und verschiedenen Erweiterungen von Drittanbietern frei installieren. Verstehen Sie die meisten Konfigurationsoptionen und Bedeutungen von PHP-FPM (z. B die Auswirkungen von max_requests/max_children/request_terminate_timeout usw., kennen den Unterschied zwischen mod_php/fastcgi und beherrschen verschiedene grundlegende PHP-Technologien, einschließlich verschiedener tiefergehender PHP-Methoden, einschließlich eines umfassenden Verständnisses der objektorientierten PHP-Methode /SPL/Sonderfunktionen auf Syntaxebene wie Reflektion usw. In Bezug auf das Framework habe ich den Code von mindestens einem oder mehreren herkömmlichen PHP-MVC-Frameworks gelesen und kenne den internen Implementierungsmechanismus und die Designideen des grundlegenden PHP Framework; ich konnte herkömmliche Entwurfsmuster für die Anwendungsentwicklung (Abstrakte Fabrik) in der PHP-Entwicklung (Einzelfall/Beobachter/Befehlskette/Strategie/Adapter) verwenden. Es wird empfohlen, ein eigenes PHP-MVC-Framework zu entwickeln Um die Entwicklung vollständig zu liberalisieren, sollten Sie sich mit dem MVC-Modus vertraut machen und sich mit den verschiedenen PHP-Codeoptimierungsmethoden vertraut machen. Sie sind mit den grundlegenden PHP-Ausführungsmechanismen vertraut (Zend-Engine/erweiterter grundlegender Arbeitsmechanismus);
6. C/C:
Beginnen Sie mit dem Einstieg in eine bestimmte C/C-Sprache, lernen Sie grundlegenden C/C-Code und machen Sie sich mit der grundlegenden C/C-Syntax (Zeiger, Array-Operationen, Strings, reguläre Standard-API) und Datenstrukturen (verknüpfte) vertraut Listen, Bäume, Sie verfügen über eine gewisse Vertrautheit mit Hashes und Warteschlangen. Sie verfügen über ein grundlegendes Verständnis der Konzepte der C-Sprachentwicklung unter Linux, können einfache Makefile-Dateien schreiben und können einfache GCC/GDB-Programme zum Kompilieren einfacher Debugging-Funktionen verwenden Arbeit; über grundlegende Netzwerkprogrammierung verfügen; über ein allgemeines Verständnis verfügen. (Dieser Artikel soll den Grundstein für ein höheres Level legen)
7. Frontend:
Machen Sie sich auf der Grundlage der ersten Stufe mit dem grundlegenden HTTP-Protokoll vertraut (Protokollcode 200/300/400/500, grundlegende interaktive HTTP-Header). Wenn die Bedingungen dies zulassen, können Sie etwas eleganteres HTML-CSS-JavaScript ausführlicher schreiben , oder Sie können einige Front-End-Frameworks (jQuery/YUI/ExtJS/RequireJS/BootStrap usw.) grob und einfach verwenden. Wenn die Bedingungen dies zulassen, können Sie die JavaScript-Programmierung ausführlich erlernen, z. B. den Abschlussmechanismus und DOM Wenn Sie tiefer gehen möchten, können Sie den jQuery-Quellcode lesen, um tiefergehende Kenntnisse zu erhalten. (Dieser Artikel ist keine Schlüsselstudie, es sei denn, Sie interessieren sich für das Frontend)
8. Systemdesign:
Kann Website-Architektur, Datenbank und grundlegende PHP-Framework-Auswahl für die meisten mittelgroßen Systeme entwerfen und Aufgaben durchführen, z. B.: Browser -> Nginx PHP – > Grundlegendes Design, Entwicklung und Wartung von Websites mit Datenbankstruktur, die die Entwicklung und Wartung grundlegender Websites mit Millionen bis mehreren Millionen Datenverkehr unterstützen können;
Die dritte Stufe: Fortgeschrittene Stufe (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. (Entwicklung im Detail)
Ziel: Sie können nicht nur die grundlegende PHP-Geschäftsentwicklung abschließen, sondern auch tiefgreifendste und komplexe technische Probleme lösen und mittlere und große Systemdesign- und Entwicklungsarbeiten selbstständig entwerfen und durchführen -tiefe Arbeit in einer bestimmten technischen Richtung, und diese ist professioneller. (Zum Beispiel eingehende Recherche in jede Richtung wie MySQL, Nginx, PHP, Redis usw.)
1. Linux:
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 (watch/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.; awk/sed/perl und kann Textstatistiken in verschiedenen komplexen Formaten analysieren und verfügt über ein gewisses Verständnis für das Laden von Kernelmodulen, die Behandlung von Startfehlern usw.; einige andere verwandte Dinge verstehen, wie z. B. NFS, Festplattenverwaltung usw.;
2. Nginx:Auf der Grundlage der zweiten Stufe war ich in der Lage, Nginx sehr kompetent zu bedienen und kann je nach Bedarf tiefergehende Betriebs- und Wartungsarbeiten an Nginx durchführen, wie z. B. Überwachung, Leistungsoptimierung, Bearbeitung komplexer Probleme usw.; persönliche Interessen, weitere Aspekte Sie können erwägen, sich auf eine eingehende Untersuchung des Arbeitsprinzips von Nginx zu konzentrieren, hauptsächlich beginnend mit dem Lesen des Quellcodes, wie z. B. dem spezifischen Master/Worker-Arbeitsmechanismus, der internen Ereignisverarbeitung von Nginx, der Speicherverwaltung usw.; Gleichzeitig können Sie die Entwicklung von Nginx-Erweiterungen erlernen, die angepasst werden können. Gleichzeitig können Sie ein gewisses Maß an Verständnis für Nginx Lua haben, um zu sehen, ob sie kombiniert und angewendet werden können, um eine zu erstellen Besseres Modell; die Voraussetzung in dieser Phase ist ein tiefgreifendes Verständnis der Nginx-Prinzipien, und Sie können darüber nachdenken, ein tiefgreifender Profi in der Nginx-Richtung zu werden.
3. MySQL/MongoDB:
Auf der Grundlage der zweiten Stufe können in Bezug auf MySQL-Anwendungen zusätzlich zur vorherigen grundlegenden SQL-Optimierung auch einige komplexe Vorgänge ausgeführt werden, z. B. der Import und Export großer Datenmengen sowie die Änderung von Tabellenstruktur oder das Hinzufügen und Löschen großer Online-Datenmengen sowie andere risikoreiche Vorgänge können komplexere MySQL-Probleme bewältigen, z. B. das Verfolgen verschiedener Probleme und das Lösen von Master-Slave-Vorgängen Synchronisierungsverzögerungsprobleme, maschinenraumübergreifende Datensynchronisierungslösungen, MySQL-Hochverfügbarkeitsarchitektur usw. Dazu gehört das Verständnis auf MySQL-Anwendungsebene. Sie sind mit den Kernschlüsseltechnologien von MySQL vertraut, z. B. Transaktionsmechanismen (Isolationsebenen, Sperren). usw.) und verfügen über ein gewisses Verständnis und eine gewisse Anwendung von Triggern, Partitionen und anderen Technologien im Hinblick auf die MySQL-Leistung, einschließlich Festplattenoptimierung (SAS-Migration zu SSD), Serveroptimierung (Speicher, Serverkonfiguration) und anderen Optionen zur Kernleistungsoptimierung Zusätzlich zur zweiten Stufe (innodb_log_buffer_size/back_log/table_open_cache/thread_cache_size/innodb_lock_wait_timeout usw.) kann die Anwendung zur Auswahl von Verbindungspools * (Status anzeigen/Profil anzeigen) die meisten Leistungsprobleme ausführlich nachverfolgen MySQL-Backup-Technologie, einschließlich Notfallwiederherstellung und -wiederherstellung, umfassendes Verständnis von Binlog, Hot- und Cold-Backup, Multi-IDC-Backup usw. In Bezug auf MySQL-Prinzipien habe ich mehr Kenntnisse, z. B. habe ich begonnen, einige Quellcodes darüber zu lesen den Arbeitsmechanismus von MySQL, z. B. das Erlernen des Quellcodes der Master-Slave-Synchronisationstechnologie (Replikation) oder des Quellcodes einer bestimmten Speicher-Engine (MyISAM/Innodb/TokuDB) usw. Lernen und verstehen Sie, wenn die Bedingungen dies zulassen Sie können 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. Wenn Sie interessiert sind, können Sie während dieses Prozesses auch die Entwicklung zum 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 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-Szenario-Anwendungen 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 Sie das gesammelte Wissen und bringen Sie es in die zweite Stufe. 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 Grundlage 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 während der Projektentwicklung schnell und bequem eine Technologieauswahl 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 der Funktionsweise von PHP-FPM Mechanismus (z. B. PHP-FPM ermöglicht die Berechnung und das Prinzip der Prozessanzahl unter verschiedenen Konfigurationsmaschinen), verfügt über grundlegende Kenntnisse der Zend-Engine (VM/GC/Stream-Verarbeitung), hat den grundlegenden PHP-Kernel-Quellcode gelesen (oder verwandte Artikel gelesen), 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 verfügen über ein tiefgreifendes Verständnis der Kerninfrastruktur (zval/hashtable/gc); Sie sind in der Lage, grundlegende PHP-Erweiterungsentwicklungen durchzuführen und verfügen über mittlere und fortgeschrittene Kenntnisse der Erweiterungsentwicklung (Minit/Rinit usw.). Sie sind mit den Details der verschiedenen Kommunikations- und Interaktionsmethoden zwischen PHP und Apache/Nginx (mod_php/fastcgi) vertraut ); 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:
Auf der Grundlage der zweiten Stufe können Sie zusätzlich zur grundlegenden C/C-Syntax und Datenstruktur ein tieferes Verständnis der C/C-Sprache erwerben und die Entwicklung kleiner und mittlerer C/C-Systeme abschließen In der zweiten Stufe können Sie auch einige spezielle Datenstrukturen (B-Tree/RB-Tree/Skiplist/LSM-Tree/Trie-Tree usw.) erlernen, um Ihre speziellen Anforderungen an die Systemprogrammierung zu erfüllen sind mit der Multiprozess- und Multithread-Programmierung vertraut; verstehen die Kommunikationsmethoden zwischen den meisten Multiprozessen und können Kommunikationsmethoden (gemeinsam genutzter Speicher/Semaphor/Pipeline usw.) flexibel wählen Lösen Sie gut Sperrkonfliktprobleme und können Sie Multithread-Programme entwickeln und debuggen. Gleichzeitig sind Sie mit der Netzwerkprogrammierung vertraut, verstehen die Unterschiede und Auswahlmöglichkeiten von Multiprozessmodellen/Multithread-Modellen/asynchronen Netzwerk-IO-Modellen sind mit den Prinzipien und Unterschieden verschiedener asynchroner Netzwerk-IO-Modelle (select/poll/epoll/iocp usw.) vertraut und sind mit gängigen asynchronen Frameworks (ACE/ICE/libev/libevent/libuv/Boost.ASIO usw.) vertraut. ) und deren Verwendung können Sie sich auch einige im Inland entwickelte Bibliotheken (z. B. Muduo) ansehen und gleichzeitig 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) und kennen Sie die jeweiligen RPC-Kommunikationsprobleme Back-End-Dienste (struct/http/thirft/protobuf usw.); in der Lage sein, 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; Bei der Modulentwicklung können Sie einige allgemeine Tools oder Bibliotheken ansammeln oder entwickeln (z. B. asynchrone Netzwerk-Frameworks, Protokollbibliotheken, Speicherpools, Thread-Pools usw.). Sie sollten jedoch vorsichtig sein, ob Sie sie nach der Entwicklung anwenden, um sich vor der Fehlersuche zu schützen ;
7. Frontend:
Vertiefendes Verständnis des HTTP-Protokolls (einschließlich des speziellen Protokollcodes jedes einzelnen Protokolls und der Gründe dafür, z. B. 302 statische Dateien werden zwischengespeichert, 502 bedeutet, dass PHP hinter Nginx hängt usw.); Frühere Front-End-Funktionen für verschiedene Framework-Anwendungsintegrationen. Wenn Sie daran interessiert sind, den Front-End-Aspekt kennenzulernen, können Sie tiefer gehen, indem Sie einige Front-End-Frameworks wie jQuery selbst entwickeln oder einen Rich-Text-Editor entwickeln , was ein relativ trivialer Test der JavaScript-Kenntnisse ist;
8. Sprachenlernen in anderen Bereichen:Grundlegende Kenntnisse in der grundlegenden PHP/C/C-Sprache. Es wird empfohlen, dass Sie je nach Ihren persönlichen Interessen und Hobbys versuchen, verschiedene Programmiersprachen zu lernen. Für Sprachen können Sie Lisp/Haskell/Scala/Erlang ausprobieren. Für die statistische Datenanalyse können Sie etwas über die Sprache R lernen Um das Geschäft aus einer anderen Perspektive zu betrachten, können Sie Node.js in Kombination mit Nginx usw. ausprobieren. 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 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ürliche 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:
Auf der Grundlage der zweiten Stufe des Systemdesigns können Sie Ihre erworbenen Erfahrungen und Fähigkeiten anwenden, um relativ komplexe mittlere und große Systeme zu entwerfen, die meisten Probleme verschiedener komplexer Online-Systeme zu lösen und Aufgaben wie Browser zu erledigen -> CDN -> Access Layer -> Business Cache -> ) -> Mehr Backend Jiangzis komplexes Geschäft ist in der Lage, die normale Entwicklung und Wartung von Websites mit Dutzenden bis Hunderten Millionen Traffic pro Tag zu unterstützen.
Die vierte Phase: Architekturphase (Architekt)
ps: Ich werde die Diskussion vorerst nicht beginnen. Ich werde beim nächsten Mal einen speziellen Artikel schreiben, um den Inhalt dieses Teils zu beschreiben und zu ergänzen
Die fünfte Stufe: Expertenstufe (Experte im Regiebereich)ps: Es ist eine große Sache, ich werde darüber nicht diskutieren ^_^
Die sechste Stufe: Wissenschaftlerstufe
ps: Ich werde dieses Thema nicht diskutieren ^_^
Das Obige stellt den technischen Wachstumsplan für PHP-Programmierer vor (für Sie, der verwirrt ist), einschließlich der relevanten Inhalte. Ich hoffe, dass er für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.