Programmierer sind in den Augen vieler Menschen ein relativ lukrativer Beruf, und jedes Jahr steigen viele Menschen in diese Branche ein. Einige dieser Leute sind Computerstudenten, andere haben eine Ausbildung, aber egal für welchen Typ, viele Leute haben gearbeitet Ein oder zwei Jahre später entschied ich mich für einen Berufswechsel. Der Grund war einfach: Es gab keine Entwicklung. Es ist nicht so, dass sich diese Branche nicht weiterentwickelt hat, aber ich habe keine Möglichkeit, mich in dieser Branche weiterzuentwickeln, weil ich keinen richtigen Weg habe. Daher führt unsere chinesische PHP-Website heute jeden dazu, den Wachstumspfad von PHP-Programmierern zu klären, der auch als vereinfachte Version der Karriereplanung für PHP-Programmierer angesehen werden kann.
In diesem Artikel wird eine grundlegende Zusammenfassung basierend auf der aktuellen Mainstream-Technologie erstellt. Die gesamte Einstellung basiert auf der Annahme, dass alle Einstellungen sehr spezifisch und klar sind, was dazu führen kann, dass sich die Leute unwohl fühlen dass sie nur eine Familiengeschichte darstellen. (Zukünftige technische Änderungen liegen nicht im Diskussionsbereich)
Die erste Stufe: Grundstufe (grundlegender PHP-Programmierer)
Wichtige Punkte: Beherrschung von LNMP (der Kern sind grundlegende Installations- und Konfigurationsvorgänge)
Ziel: In der Lage sein, die grundlegende LNMP-Systeminstallation sowie einfache Konfiguration und Wartung abzuschließen in der Lage, die grundlegende PHP-Entwicklung einfacher Systeme durchzuführen; Kann die Entwicklung eines bestimmten PHP-Funktionsmoduls in einem mittelgroßen PHP-System unterstützen.
Zeit: Die Zeit, die benötigt wird, um diese Phase abzuschließen, variiert von Person zu Person. Manche wachsen schneller als ein halbes Jahr und andere wachsen langsam in zwei oder drei Jahren.
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:● Kann MySQL selbst erstellen und kenne die grundlegenden MySQL-Konfigurationsoptionen
● Kennen Sie den Unterschied zwischen innodb und myisam, kennen Sie die verschiedenen Konfigurationsoptionen für InnoDB- und MyISAM-Engines; kennen Sie die grundlegenden Unterschiede zwischen den beiden Engines und die Unterschiede zwischen den oben genannten Optionen; ● Kann eine MySQL-Datenbank rein manuell kompilieren und erstellen und die Codierung so konfigurieren, dass sie normal und stabil läuft. Der Hauptzweck besteht darin, eine lauffähige MySQL-Datenbank erstellen zu können.
4.PHP:● Grundlegende Syntax-Array, String, Datenbank, XML, Socket, GD/ImageMgk-Bildverarbeitung usw.; ● Vertraut mit verschiedenen APIs, die mit MySQL-Operationen verknüpft sind (mysql/mysqli/PDO), und wissen, wie man verschiedene Codierungsprobleme löst ● Kennen Sie die häufig verwendeten PHP-Frameworks (ThinkPHP, Zendframework, Yii, Yaf usw.); ● Verstehen Sie den grundlegenden Funktionsmechanismus von MVC und warum dies geschieht, und wissen Sie ein wenig über die Unterschiede zwischen verschiedenen PHP-Frameworks
● Fähigkeit, schnell ein MVC-Framework zu erlernen. 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. Frontend:● Wenn es die Zeit und die Bedingungen zulassen, können Sie HTML/CSS/JS und andere verwandte Kenntnisse richtig erlernen, wissen, welche Webstandards, P+CSS-Web-/WAP-Seitenmodi gelten, und den Unterschied zwischen HTML5 und HTML4 kennen; ● Verstehen Sie einige grundlegende Frontend- und JS-Frameworks (jQuery und dergleichen); ● Verstehen Sie einige grundlegende JavaScript-Programmierkenntnisse. (Dieses Element ist 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 haben ein starkes persönliches Interesse)
6. Systemdesign:In der Lage sein, das grundlegende Design kleiner Systeme, einschließlich des einfachen Datenbankdesigns, abzuschließen und in der Lage zu sein, grundlegende: Browser->Nginx+PHP->Datenbankarchitektur-Design- und Entwicklungsarbeiten durchzuführen und Hunderttausende bis Millionen von Traffic-Websites zu unterstützen jeden Tag Entwicklungs- und Wartungsarbeiten
Zweite Stufe: Verbesserungsstufe (mittlerer PHP-Programmierer)
Fokus: Verbessern Die gezielte Förderung von LNMP-Kenntnissen ermöglicht eine umfassendere und kompetentere Anwendung von LNMP.
Ziel:● Möglichkeit, jederzeit und überall eine LNMP-Umgebung einzurichten und die Routinekonfiguration schnell abzuschließen; ● Kann die meisten in Entwicklungs- und Online-Umgebungen auftretenden Probleme aufspüren und lösen ● Kann die Architektur und Entwicklung mittelgroßer Systeme selbständig übernehmen
● Kann die Entwicklungsarbeit eines mittelgroßen Moduls in einem großen System übernehmen
1.Linux:● Basierend auf der ersten Stufe können Sie Shell-Skripte problemlos verwenden, um viele automatisierte Aufgaben auszuführen ● awk/sed/perl funktioniert auch gut und kann viele Textverarbeitungs- und Datenstatistiken durchführen
● Grundsätzlich in der Lage, die meisten nicht-speziellen Linux-Programme zu installieren (einschließlich verschiedener Bibliotheken, Pakete, Abhängigkeiten von Drittanbietern usw., wie MongoDB/Redis/Sphinx/Luncene/SVN usw.);
● Grundlegende Linux-Dienste verstehen, Linux-Leistungsindikatordaten anzeigen und grundlegende Problemverfolgung unter Linux usw. kennen.
2.Nginx:
● Verstehen Sie auf der ersten Stufe die komplexere Nginx-Konfiguration, einschließlich Multi-Core-Konfiguration, Ereignisse, Proxypass, Sendfile/TCP*-Konfiguration, und kennen Sie die damit verbundenen Konfigurations- und Leistungsauswirkungen wie Timeout; ● Beachten Sie, dass nginx zusätzlich zum Webserver auch Konfigurationen wie Proxyserver und umgekehrten statischen Server vornehmen kann
● Kennen Sie die grundlegende Optimierung der Nginx-Konfiguration, wie Sie Berechtigungen konfigurieren und eine Nginx-Erweiterung kompilieren
● Kennen Sie die grundlegenden Funktionsprinzipien von Nginx (Master/Worker-Mechanismus, Epoll) und warum die Leistung von Nginx besser ist als die Leistung von Apache
3 > ● Beherrschen Sie auf der Grundlage der ersten Stufe viele Tipps zur MySQL-Entwicklung, einschließlich regelmäßiger SQL-Optimierung (Gruppierung nach/Reihenfolge nach/Rand-Optimierung usw.); Sie können nicht nur MySQL erstellen, sondern auch Hot- und Cold-Backups von MySQL-Daten durchführen. Sie kennen 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 Sie kennen auch die entsprechenden Werte zum Konfigurieren dieser Optionen; ● Verstehen Sie auch einige spezielle Konfigurationsoptionen, z. B. den Aufbau einer MySQL-Master-Slave-Synchronisationsumgebung und die Unterschiede zwischen binlog_format; ● Kennen Sie die MySQL-Leistungsverfolgung, einschließlich slow_log/explain usw., und kennen Sie auch die grundlegende Indexerstellung und -verarbeitung● Prinzipien: 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 den grundlegenden InnoDB-Transaktionsverarbeitungsmechanismus (bzw wissen, wo man einen findet).
● Wenn die Bedingungen es zulassen, wird empfohlen, sich mit MongoDB, einer repräsentativen Datenbank von NoSQL, vertraut zu machen und die Unterschiede zu MySQL zu vergleichen. Gleichzeitig können Sie MongoDB in geeigneten Anwendungsszenarien sicher und umsichtig verwenden und die grundlegende kombinierte Entwicklung kennen PHP und MongoDB.4.Redis/Memcached:
● Die meisten mittelgroßen Systeme beinhalten definitiv Caching, daher müssen Sie grundlegende Caching-Kenntnisse haben ● Kennen Sie die Ähnlichkeiten, Unterschiede und Anwendungsszenarien zwischen Memcached und Redis, können Sie Redis/Memcached unabhängig installieren, verstehen Sie einige grundlegende Funktionen und Einschränkungen von Memcahed, wie z. B. den Maximalwert, und wissen Sie, wie man PHP mit ihrer Verwendung kombiniert Grundlegende Arbeitsprinzipien und Verwendung von Redis, Verständnis konventioneller Datentypen, Wissen, welche Typen in welchen Szenarien verwendet werden sollten, Verständnis von Redis-Transaktionen usw. ● Prinzipieller Teil: Sie können ein allgemeines Verständnis der Speicherstruktur von Memcached (Slab-Mechanismus) erlangen und die zugrunde liegende Implementierungsspeicherstruktur gängiger Datentypen (SDS/verknüpfte Liste/SkipList/HashTable) usw. verstehen , Verstehen Sie die Transaktion von Redis, RDB, AOF und andere Mechanismen. Besser5.PHP:
● Zusätzlich zu den Funktionen der ersten Stufe können Sie in Bezug auf Installation und Konfiguration die kompilierten und installierten Konfigurationen von PHP und verschiedenen Erweiterungen von Drittanbietern frei installieren; ● Verstehen Sie die meisten Konfigurationsoptionen und Bedeutungen von php-fpm (z. B. max_requests/max_children/request_terminate_timeout und andere Konfigurationen, die sich auf die Leistung auswirken) und kennen Sie den Unterschied zwischen mod_php/fastcgi
● Beherrscht bereits verschiedene grundlegende PHP-Technologien, darunter verschiedene vertiefende PHP-Kenntnisse, einschließlich umfassender Kenntnisse von PHP-Objektorientierung/SPL/Spezialfunktionen auf Syntaxebene wie Reflektion ● In Bezug auf Frameworks habe ich den Code von mindestens einem herkömmlichen PHP-MVC-Framework gelesen und kenne den internen Implementierungsmechanismus und die Designideen des grundlegenden PHP-Frameworks ● In der PHP-Entwicklung beherrschen Sie die Verwendung herkömmlicher Entwurfsmuster für die Anwendungsentwicklung (abstrakte Fabrik/Einzelfall/Beobachter/Befehlskette/Strategie/Adapter und andere Muster). Zur vollständigen Liberalisierung wird empfohlen, ein eigenes PHP-MVC-Framework zu entwickeln Verschaffen Sie sich ein tiefes Verständnis des MVC-Modells und ermöglichen Sie sich ein schnelles Upgrade in der Geschäftsprojektentwicklung ● Vertraut mit verschiedenen Codeoptimierungsmethoden von PHP und mit der Lösung der meisten PHP-Sicherheitsprobleme ● Vertraut mit den grundlegenden Prinzipien des PHP-Ausführungsmechanismus (Zend-Engine/erweiterter grundlegender Arbeitsmechanismus6.C/C++:
). ● Beginnen Sie, sich mit einer bestimmten C/C++-Sprache zu befassen, können Sie grundlegenden C/C++-Code schreiben und sind mit der grundlegenden C/C++-Syntax (Zeiger, Array-Operationen, Zeichenfolgen, reguläre Standard-APIs) und Datenstrukturen (verknüpfte Listen, Bäume, Hashes, Warteschlange) haben eine gewisse Vertrautheit ● Sie verfügen über ein grundlegendes Verständnis der C-Sprachentwicklung unter Linux, können einfache Makefile-Dateien schreiben und einfache GCC/GDB-Programme zum Kompilieren einfacher Debugging-Aufgaben verwenden ● Sie verfügen über ein allgemeines Verständnis der grundlegenden Netzwerkprogrammierung. (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, grundlegender HTTP-Interaktionsheader).● Wenn die Bedingungen es zulassen, können Sie etwas eleganteres HTML+CSS+JavaScript schreiben oder einfach einige Front-End-Frameworks verwenden (jQuery/YUI/ExtJS/RequireJS/BootStrap usw.);
● Wenn die Bedingungen es zulassen, können Sie die JavaScript-Programmierung eingehend studieren, z. B. den Abschlussmechanismus und die DOM-Verarbeitung. Wenn Sie tiefer gehen, können Sie den jQuery-Quellcode für eine eingehende Untersuchung lesen. (Dieser Artikel ist keine Schlüsselstudie, es sei denn, Sie interessieren sich für das Frontend)
Systemdesign:
● Kann Website-Architektur, Datenbank, grundlegende PHP-Framework-Auswahl, Leistungstests und Fehlerbehebung für die meisten mittelgroßen Systeme entwerfen; ● Fähigkeit, grundlegendes Design, Entwicklung und Wartung von Websites durchzuführen, ähnlich wie: Browser –> ● Kann die Entwicklung und Wartung grundlegender Websites mit Millionen bis mehreren zehn Millionen Traffic pro Tag unterstützen
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. (Tiefendimensionsentwicklung)
Ziel: Neben der Durchführung der grundlegenden PHP-Geschäftsentwicklung können auch tiefgreifendste und komplexe technische Probleme gelöst und mittlere und große unabhängig entworfen und abgeschlossen werden Systemdesigns und Entwicklungsarbeit; ich kann eine bestimmte technische Richtung selbstständig 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:
● 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.);● Was Shell-Skripte angeht, war ich in der Lage, relativ komplexe Shell-Skripte (mehr als 500 Zeilen) zu schreiben, um bei der Erledigung vieler Shell-Aufgaben zu helfen, einschließlich Sicherung, automatisierter Verarbeitung, Überwachung usw.
; ● Ich beherrsche Anwendungen wie awk/sed/perl und kann Textstatistiken steuern und verarbeiten sowie Daten in verschiedenen komplexen Formaten nach Belieben analysieren ● Sie haben ein gewisses Verständnis für die internen Mechanismen von Linux, die grundlegende Handhabung des Ladens von Kernelmodulen, die Behandlung von Startfehlern usw. und verstehen auch einige andere verwandte Dinge, 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 tiefergehende Betriebs- und Wartungsarbeiten an Nginx durchzuführen, wie z. B. Überwachung, Leistungsoptimierung, komplexe Problembearbeitung usw.; 🎜> ● Abhängig von Ihren persönlichen Interessen können Sie erwägen, sich auf eine eingehende Untersuchung des Funktionsprinzips 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 durch das Erlernen der Entwicklung von Nginx-Erweiterungen einige Ihrer eigenen privaten Erweiterungen anpassen, ein gewisses Maß an Verständnis für Nginx + Lua erlangen und sehen, ob Sie diese kombinieren können Wenden Sie es an, um ein besseres Modell zu erstellen ● In dieser Phase ist ein umfassendes Verständnis der Nginx-Prinzipien erforderlich. Sie können darüber nachdenken, ein vertiefter Experte 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. das Importieren und Exportieren großer Datenmengen und das Ändern der Tabellenstruktur großer Online-Datenmengen Zusätzlich zur Installation und Konfiguration kann es auch komplexere MySQL-Probleme bewältigen, z. B. das Verfolgen verschiedener Probleme, das Lösen von Master-Slave-Synchronisationsverzögerungsproblemen und das Hinzufügen und Löschen von Indexfeldern -Lösungen zur Synchronisierung von Computerraumdaten, MySQL-Hochverfügbarkeitsarchitektur usw. ;
● Auf der MySQL-Anwendungsebene sind Sie mit den Kernschlüsseltechnologien von MySQL vertraut, z. B. Transaktionsmechanismen (Isolationsebenen, Sperren usw.) und verfügen über ein gewisses Verständnis und die Anwendung von Triggern, Partitionen und anderen Technologien
● In Bezug auf die MySQL-Leistung umfasst sie Festplattenoptimierung (SAS-Migration auf SSD), Serveroptimierung (Speicher, Serverkonfiguration) und weitere 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.). , Anwendung zur Auswahl der Verbindungspool-Software, verfügt über umfassende Kenntnisse zu Betriebsanweisungen wie „show *“ (Status anzeigen/Profil anzeigen) und kann die Verfolgung der meisten Leistungsprobleme durchführen ● 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. ● Erfahren Sie mehr über die Prinzipien von MySQL, z. B. das Lesen eines Teils des Quellcodes über den Arbeitsmechanismus von MySQL, z. B. das Erlernen des Quellcodes der Master-Slave-Synchronisationstechnologie (Replikation) oder das Erlernen einer bestimmten Speicher-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 Bei Interesse können Sie auch eine Weiterentwicklung in Richtung DBA in Erwägung ziehen.● 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, aber der Kern besteht darin Wenn die Bedingungen oder Interessen dies zulassen, können Sie für Anwendungen in verschiedenen RMDBS- und NoSQL-Szenarien damit beginnen, mehr über den Arbeitsmechanismus von MongoDB zu erfahren.
4.Redis/Memcached:
● Auf der Grundlage der zweiten Stufe kann eine vertiefte Anwendungs- und Lerntiefe erreicht werden. Da Memcached nicht besonders kompliziert ist, wird für ein tieferes Verständnis empfohlen, den Quellcode zu lesen, insbesondere den Teil zur Speicherverwaltung ● Im Redis-Teil können Sie mehr Anwendungen komplexer Datenstrukturen durchführen (zset wird für Ranking-Ranking-Vorgänge verwendet/Transaktionsverarbeitung wird verwendet, um die Atomizität in Flash-Sale-Szenario-Anwendungen sicherzustellen, es erfordert mehr Erlernen von Synchronisierungsmechanismen wie aof Application, Entwerfen Sie eine hochverfügbare Redis-Anwendungsarchitektur und einen Cluster. Es wird empfohlen, den Redis-Quellcode eingehend zu studieren und das in der zweiten Phase gesammelte Wissen anzuwenden. Insbesondere können Sie sich über die Kernereignisverwaltung, die Speicherverwaltung und den internen Kern informieren über Datenstrukturen und so weiter. 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 eine vertiefte Auseinandersetzung und Anwendung. In Bezug auf die grundlegende Codeanwendung kann es 95 % der bei der PHP-Entwicklung auftretenden Probleme lösen und die meisten PHP-Kenntnisse verstehen ● Sie können innerhalb eines Tages schnell mit der Verwendung der meisten PHP-Frameworks beginnen und die Vor- und Nachteile jedes gängigen PHP-Frameworks verstehen, sodass Sie während der Projektentwicklung schnell und bequem eine Technologieauswahl treffen können ● In Bezug auf die Konfiguration werden Sie zusätzlich zu den allgemeinen Kenntnissen in der zweiten Stufe auch einige obskurere Konfigurationsoptionen (php auto_prepend_file/auto_append_file) verstehen, einschließlich einiger komplexer erweiterter Konfigurationen und Prinzipien in der Erweiterung (z. B. memcache.hash_strategy in). die memcached-Erweiterungskonfiguration), apc.mmap_file_mask/apc.slam_defense/apc.file_update_protection in der apc-Erweiterungskonfiguration); ● Sie verfügen ü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 sind mit Zend grundsätzlich vertraut 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 über ein umfassendes Verständnis der Kerninfrastruktur (zval/hashtable/gc) verfügen ;
● 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 verschiedener Kommunikations- und Interaktionsmethoden zwischen PHP und Apache/Nginx vertraut zu 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 auf einem niedrigeren Niveau zu verstehen.
6.C/C++:● Auf der Grundlage der zweiten Stufe können Sie ein tieferes Verständnis der C/C++-Sprache erlangen und die Entwicklung kleiner und mittlerer C/C++-Systeme abschließen; ● Zusätzlich zur grundlegenden C/C++-Syntax und den Datenstrukturen in der zweiten Stufe können Sie zur Erleichterung auch einige spezielle Datenstrukturen (b-tree/rb-tree/skiplist/lsm-tree/trie-tree usw.) erlernen Ihre Bedürfnisse bei Sonderarbeiten
● Im Hinblick auf die Systemprogrammierung müssen Sie mit der Multiprozess- und Multithread-Programmierung vertraut sein; die meisten Kommunikationsmethoden zwischen Multiprozessen in Multiprozesssituationen verstehen und in der Lage sein, Kommunikationsmethoden (gemeinsam genutzter Speicher/Semaphor/Pipeline) flexibel auszuwählen usw.); gut in der Multithread-Programmierung sein; Sperrkonfliktprobleme lösen und gleichzeitig in der Lage sein, Multithread-Programme zu entwickeln und zu debuggen; mit der Netzwerkprogrammierung vertraut sein; die Unterschiede und Auswahlmöglichkeiten von Multiprozessmodellen verstehen; /Multi-Thread-Modelle/asynchrone Netzwerk-IO-Modelle und mit den Unterschieden und Auswahlmöglichkeiten verschiedener asynchroner Netzwerk-IO-Modelle vertraut sein. Prinzipien und Unterschiede (select/poll/epoll/iocp usw.) und mit gängigen asynchronen Frameworks vertraut sein (ACE/ ICE/libev/libevent/libuv/Boost.ASIO usw.) und ihre Verwendungsmöglichkeiten. Wenn Sie Zeit haben, können Sie sich auch einige im Inland entwickelte Bibliotheken ansehen kann eine 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 RPC-Kommunikationsprobleme jedes Back-Ends service (struct/http/thirft/protobuf usw.) ); Sie können GCC und GDB besser verwenden, um Kompilierungs- und Debugging-Programme zu entwickeln, und Sie können Probleme schnell nachverfolgen und lösen, nachdem das Online-Programm entkernt wurde
● Im Hinblick 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.), Sie sollten jedoch vorsichtig sein, ob Sie diese nach der Entwicklung anwenden Vermeiden Sie die Jagd nach Fehlern;Frontend:
● Detailliertes Verständnis des HTTP-Protokolls (einschließlich der speziellen Protokollcodes jedes einzelnen Protokolls und der Gründe dafür, z. B. 302 statische Dateien werden zwischengespeichert, 502 bedeutet, dass PHP hinter Nginx ausgefallen ist usw.);● Zusätzlich zu den bisherigen Integrationsmöglichkeiten verschiedener Framework-Anwendungen im Front-End können Sie, wenn Sie daran interessiert sind, das Front-End näher kennenzulernen, einige Front-End-Frameworks entwickeln wie jQuery selbst, oder einen einfachen Test von JavaScript-Kenntnissen entwickeln
8. Sprachenlernen in anderen Bereichen:
● Grundlegende Kenntnisse in den grundlegenden PHP/C/C++-Sprachen. Es wird empfohlen, dass Sie zum jetzigen Zeitpunkt versuchen, verschiedene Programmiersprachen zu lernen. Abhängig von Ihren persönlichen Interessen und Hobbys können Sie Python/Ruby für Skriptsprachen lernen und funktionale Programmiersprachen. Probieren Sie für statische Sprachen Java/Golang aus. Wenn Sie Back-End-Geschäfte abwickeln möchten Aus einer anderen Perspektive können Sie Node.js und das oben erwähnte Nginx_Lua usw. ausprobieren, die mit Nginx kombiniert werden.
● 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 der maschinenübergreifenden Kommunikation auch leichtgewichtige Coroutinen gibt Szenarios ist die Lösung von Erlang überraschend einfach. Wenn Sie sich beispielsweise nicht für C/C++ entscheiden möchten, stehen auch ähnlich effiziente Erlang/Golang usw. zur Verfügung.
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:
Basierend auf 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 die meisten Probleme verschiedener komplexer Online-Systeme lösen und browserähnliche Aufgaben erledigen können -> ;CDN – >Lastausgleich –> Business-Cache –> -> Komplexeres Backend-Geschäft von Jiangzi
● Kann die normale Entwicklung und Wartung von Websites mit Dutzenden bis Hunderten Millionen Traffic pro Tag unterstützen.
Postscript
Was die höhere Architektur oder die Expertenstufe betrifft, wird in diesem Artikel vorerst nicht darauf eingegangen. Freunde, die interessiert sind, können selbst danach suchen. Abschließend empfehle ich aufrichtig die PHP-chinesische Website, die auf Programmierneulinge zugeschnitten ist PHP Vom Einstieg bis zur fortgeschrittenen Selbststudien-Roadmap wünsche ich Ihnen allen, dass Sie so schnell wie möglich ein PHP-Meister werden.