Heim >Backend-Entwicklung >PHP-Tutorial >Einfache Version der Lernroute und Lernvorschläge für PHP-Programmierer
Damit Sie PHP besser lernen können, möchte ich dieses Mal hauptsächlich über den PHP-Lernweg sprechen, die technischen Anforderungen für PHP-Programmierer in jeder Phase klären und Lern- und Wachstumsziele entsprechend Ihrer eigenen Situation festlegen.
Lernrouten und Vorschläge für PHP-Anfänger
Wir benötigen einen schrittweisen Lernprozess. Hier werden wir zunächst den Prozess des PHP-Lernens zusammenfassen, der dem vieler anderer ähnelt PHP-Enthusiasten stimmen überein:
(1) Vertraut mit HTML/CSS/JS und grundlegenden Elementen von Webseiten. Kann während der Fertigstellungsphase selbst einfache Webseiten erstellen und ist damit relativ vertraut Elementattribute
(2) Verstehen Sie die Konzepte und Betriebsmechanismen dynamischer Sprachen und machen Sie sich mit der grundlegenden PHP-Syntax vertraut
(3) Erfahren Sie, wie Sie PHP mit HTML kombinieren, um einfache dynamische Seiten zu vervollständigen
(4) Kontaktieren Sie MySQL und beginnen Sie mit dem Entwerfen der Datenbank
(5) Konsolidieren Sie die PHP-Syntax weiter, machen Sie sich mit den meisten gängigen PHP-Funktionen vertraut, verstehen Sie objektorientierte Programmierung und MySQL-Optimierung. und einige Vorlagen und Frameworks
(6) Vervollständigen Sie endlich eine voll funktionsfähige dynamische Website
Neulinge sollten nicht denken, dass das Erlernen von PHP sehr einfach ist, nachdem sie die Zusammenfassung oben gesehen haben. Das Programmieren erfordert ernsthaftes Nachdenken und kontinuierliches Üben . Im Folgenden finden Sie eine detaillierte Erläuterung der PHP-Lernroute. Erstens besteht jede Website aus Webseiten. Mit anderen Worten: Wenn Sie eine Website vervollständigen möchten, müssen Sie zunächst lernen, wie man Webseiten erstellt. Die Beherrschung der Technologie zur Erstellung statischer Webseiten ist eine Voraussetzung. Deshalb müssen wir HTML lernen, um den Grundstein für die zukünftige Erstellung von Websites zu legen. Das Erlernen von HTML sollte beim Lernen erfolgen. Erst wenn Sie verstanden haben, welches Element welche Wirkung hat, können Sie sich nicht daran erinnern, dass es Ihnen gelingt Nachdem Sie eine statische Seite fertiggestellt haben, ist es an der Zeit, mit dem Verständnis dynamischer Sprachen zu beginnen. Der Code wird nicht direkt ausgegeben, sondern muss verarbeitet werden Ein HTML-Parser. Und PHP muss auch den PHP-Parser durchlaufen, genau wie das Erlernen von HTML. Wenn Sie möchten, dass ein Parser funktioniert, müssen Sie seine dedizierte Syntaxstruktur verwenden
Sie sollten sich glücklich schätzen, PHP zu lernen, denn Wenn Sie lernen, andere Sprachen zu verwenden, werden Sie feststellen, dass PHP immer noch relativ einfach ist. Zu diesem Zeitpunkt müssen Sie die Konzepte von HTML und PHP verstehen. Jetzt können Sie PHP eins plus eins berechnen lassen und es dann zur Zahl addieren in der Browserausgabe. Fühlen Sie sich nicht naiv. Auch wenn es sich hierbei um einen kleinen Code handelt, ist er doch ein großer Schritt vorwärts auf Ihrer Programmierreise. Aber jetzt sind Sie noch ein Neuling
Der nächste Schritt besteht darin, die Datenbank zu erlernen, die man als den goldenen Partner von PHP bezeichnen kann , müssen Sie versuchen, PHP zu verwenden, um eine Verbindung zur Datenbank herzustellen, und dann PHP verwenden, um Daten erfolgreich einzufügen, zu löschen und zu aktualisieren
Zu diesem Zeitpunkt befinden Sie sich möglicherweise in diesem Zustand: Kennen Sie HTML? Ja, ich kann mehrere Webseiten mit Tabellenlayouts zusammenstellen! Kennen Sie PHP? Ja, ich werde die Operation von eins plus eins in die Funktion schreiben und sie dann aufrufen! Kennen Sie MySQL? Ja, ich kann Daten in die Datenbank einfügen und löschen!
Was sollen wir also als nächstes tun? Versuchen Sie, ein kleines Gästebuch zu erstellen. Dies ist auch eine Hürde, vor der Anfänger stehen. Nach einer Weile haben Sie endlich gelernt, die Formulardaten in die Datenbank einzufügen und sie dann anzuzeigen. Man sollte sagen, dass der Prototyp eines Programms geboren ist. Sie können sich jedoch das Bearbeitungsforum oder das Entwicklungs-CMS von jemandem ansehen. Wann kann ich eines schreiben? Machen Sie sich keine Sorgen, festigen Sie Ihr Wissen und machen Sie sich mit den Grundlagen der PHP- und MySQL-Entwicklung vertraut. Dann fragen Sie sich vielleicht, ob es wirklich von Ihnen geschrieben wurde. Zu diesem Zeitpunkt können Sie das von Ihnen geschriebene Gästebuch verbessern. Das Gästebuch sollte über Registrierungs- und Paging-Funktionen verfügen, die Benutzeroberfläche kann nach Möglichkeit auch erweitert werden.
Zählt dies als Lernen? NEIN, NEIN, NEIN, es ist noch früh, Sie haben OOP noch nicht berührt, oder? Was ist mit Vorlagen und Frameworks? Muss noch weiter lernen! Das PHP-Framework bietet ein Grundgerüst für die Erstellung von Webanwendungen und vereinfacht so den Prozess des Schreibens von Webanwendungen in PHP. Dies kann Entwicklungszeit sparen und dabei helfen, stabilere Anwendungen zu erstellen. Das PHP-Framework ist also ein Tool, mit dem Sie Zeit sparen und Ihren Code verbessern können. Wenn Sie sich zum ersten Mal für ein PHP-Framework entscheiden, empfiehlt es sich, mehrere Frameworks auszuprobieren. Jedes Framework hat seine eigenen Stärken und Schwächen. Beispielsweise ist das Zend-Framework aufgrund seiner vielfältigen Funktionen und einer breiten Unterstützung seit langem beliebt System. Und c++akePHP ist ein PHP-Framework später als Zend, und das entsprechende Unterstützungssystem ist relativ klein, aber bequemer und einfacher zu verwenden
Nachdem Sie objektorientiert und Frameworks verstanden haben, sollten Sie sich mit uns in Verbindung setzen Alles in allem werden Sie nie feststellen, dass Sie alles gelernt haben, und das Lernen hat kein Ende! Wenn Sie etwas lernen, gehen Sie niemals davon aus, dass Sie es schnell erreichen können. Egal wie viele Fähigkeiten Sie haben, es wird umsonst sein, wenn es Ihnen an harter Arbeit mangelt. Eines kann garantiert werden: Wenn Sie PHP lernen, werden Sie auf jeden Fall schnell andere Sprachen lernen, und umgekehrt, wenn Sie schon einmal andere Sprachen gelernt haben, werden Sie PHP auf jeden Fall schnell lernen 🎜>
Es ist auf jeden Fall von Vorteil, mehr von den erfolgreichen Codes anderer Leute zu lernen. Daher ist es der beste Weg, Fortschritte zu machen, wenn man sich die klassischen Codes ansieht, die im Laufe der Zeit verfeinert wurden. Darüber hinaus sollte betont werden, dass Sie beim Erlernen einer Technologie möglicherweise auf Schwierigkeiten stoßen und verwirrt werden. Möglicherweise haben Sie die Hälfte von PHP gelernt und beginnen erneut über C # nachzudenken, oder jemand sagt, dass Java zu diesem Zeitpunkt sehr gut ist Winken Sie nicht, bleiben Sie beharrlich und lernen Sie gründlich.
Lassen Sie uns den Lernprozess in Phasen besprechen:
Die erste Phase: Grundphase (grundlegender PHP-Programmierer)
Fokus: Beherrschung von LNMP (der Kern sind grundlegende Operationen von (Installation und Konfiguration)
Ziele: In der Lage sein, die grundlegende LNMP-Systeminstallation durchzuführen, einfache Konfiguration und Wartung durchzuführen; in der Lage sein, die Entwicklung eines bestimmten PHP-Funktionsmoduls zu unterstützen; ein mittelgroßes PHP-System.
Zeit: Die für den Abschluss dieser Phase erforderliche Zeit variiert von Person zu Person. Einige 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 schreiben Warten.
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 in der Lage, nginx+php_fpm reibungslos funktionieren zu lassen.
3.MySQL
Kann MySQL selbst erstellen, kennt die grundlegenden MySQL-Konfigurationsoptionen; kennt den Unterschied zwischen innodb und myisam, kennt die unterschiedlichen Konfigurationsoptionen für die beiden Engines von InnoDB und MyISAM; Kennen Sie den grundlegenden Unterschied zwischen den beiden Engines und den Unterschied in der Auswahl; die Fähigkeit, eine MySQL-Datenbank rein manuell zu kompilieren und zu erstellen und die Kodierung so zu konfigurieren, dass sie normal und stabil läuft, 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). ), wissen, wie man verschiedene Codierungsprobleme löst; kennen die häufig verwendeten PHP-Frameworks (ThinkPHP, Zendframework, Yii, Yaf usw.); verstehen den grundlegenden MVC-Funktionsmechanismus und wissen, warum er funktioniert, und wissen ein wenig über die Unterschiede zwischen verschiedenen PHP-Frameworks: Sie können schnell ein MVC-Framework 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 erlaubt, können Sie HTML/CSS/JS und andere verwandte Kenntnisse erlernen, wissen, welche Webstandards, div+css Web/Wap-Seitenmodus, HTML5 kennen Der Unterschied zu HTML4: Verstehen Sie einige grundlegende Frontend- und JS-Frameworks (jQuery und dergleichen); verstehen Sie einige grundlegende JavaScript-Programmierkenntnisse. Wenn Sie Zeit haben, ist es in Ordnung, ein wenig darüber zu lernen , wird jedoch nicht als Schwerpunkt empfohlen, es sei denn, es besteht ein starkes persönliches Interesse.
6. Systemdesign
Sie müssen in der Lage sein, das grundlegende Design eines kleinen Systems, einschließlich des einfachen Datenbankdesigns, zu vervollständigen und die Grundlagen zu vervollständigen: Browser-> ; Datenbankarchitektur-Entwicklungsarbeit; in der Lage, die Entwicklung und Wartung von Websites mit Hunderttausenden bis Millionen Traffic pro Tag zu unterstützen
Zweite Phase: Verbesserungsphase (mittlere PHP-Programmierer)
Fokus : Verbesserung der LNMP-Kenntnisse, um LNMP umfassender und kompetenter anwenden zu können.
Ziele: 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 Entwicklungsarbeiten an mittelgroßen Systemen; in der Lage sein, die Entwicklungsarbeiten an einem mittelgroßen Modul in einem großen System durchzuführen.
1. Linux
Basierend auf der ersten Stufe können Sie Shell-Skripte problemlos verwenden, um viele automatisierte Arbeiten auszuführen. Auch awk/sed/perl funktioniert gut und kann viele Texte vervollständigen Verarbeitungs- und Datenstatistiken; grundsätzlich in der Lage, die meisten nicht-speziellen Linux-Programme zu installieren (einschließlich verschiedener Bibliotheken, Pakete, Abhängigkeiten von Drittanbietern usw., wie z. B. MongoDB/Redis/Sphinx/Luncene/SVN usw.); , wissen, wie man Linux-Leistungsindikatordaten anzeigt, kennen die grundlegende Problemverfolgung unter Linux usw.
2. Nginx
Verstehen Sie anhand der ersten Stufe die komplexere Nginx-Konfiguration, einschließlich Multi-Core-Konfiguration, Ereignisse, Proxy_Pass, Sendfile/TCP_*-Konfiguration, Kennen Sie das Timeout und andere verwandte Konfigurationen und Auswirkungen auf die Leistung; wissen Sie, dass Nginx zusätzlich zum Webserver auch Proxy-Server, umgekehrte statische Server und andere Konfigurationen durchführen kann; kennen Sie die grundlegende Nginx-Konfigurationsoptimierung; kennen Sie die grundlegende Nginx-Funktionalität Prinzip (Master-/Worker-Mechanismus, Epoll), wissen, warum die Nginx-Leistung besser ist als die Apache-Leistung und andere Kenntnisse.
3. MySQL/MongoDB
Beherrschen Sie auf der Grundlage der ersten Stufe in Bezug auf die MySQL-Entwicklung viele Tipps, einschließlich der regelmäßigen SQL-Optimierung (Gruppierung nach/Reihenfolge nach/Rand-Optimierung usw.); Sie können außerdem in der Lage sein, MySQL zu erstellen 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 kenne ich 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. und kennen Sie auch die grundlegende Indexerstellungsverarbeitung und andere Kenntnisse; verstehen Sie die grundlegende MySQL-Architektur (Server + Speicher-Engine) und kennen Sie die grundlegenden InnoDB/MyISAM-Indexspeicherstrukturen und -unterschiede (Clustered Index, B-Tree); den grundlegenden InnoDB-Transaktionsverarbeitungsmechanismus kennen; 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 MongoDB, einer repräsentativen Datenbank 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
Cache-Verarbeitung ist auf jeden Fall in den meisten mittelgroßen Systemen erforderlich, daher müssen Sie die Ähnlichkeiten, Unterschiede und Anwendungsszenarien von Memcached und Redis kennen und in der Lage sein, Redis/Memcached unabhängig zu installieren, einige grundlegende Funktionen und Einschränkungen von Memcahed zu verstehen, wie z. B. den Maximalwert, und zu wissen, wie man PHP mit ihrer Verwendung kombiniert, die grundlegenden Arbeitsprinzipien und die Verwendung von Redis zu verstehen und reguläre Datentypen zu verstehen und wissen, welche Typen in welchen Redis-Transaktionen usw. verwendet werden. 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.) Sie können mehr über Redis-Transaktionen, RDB, AOF und andere gute Mechanismen erfahren.
5. 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 der Konfigurationsoptionen von php-fpm und Meaning (Konfigurationen, die sich auf die Leistung auswirken, wie z. B. max_requests/max_children/request_terminate_timeout), kennen den Unterschied zwischen mod_php/fastcgi und beherrschen verschiedene grundlegende Technologien in PHP, einschließlich verschiedener tiefergehender PHP. einschließlich objektorientierter PHP-Kenntnisse Sie verfügen über ein tiefes Verständnis der Besonderheiten auf der /SPL/-Syntaxebene wie z. B. Reflection, haben den Code von mindestens einem herkömmlichen PHP-MVC-Framework in Bezug auf Frameworks gelesen und kennen die interne Implementierung Mechanismus und Designideen des grundlegenden PHP-Frameworks; Kenntnisse in der Verwendung herkömmlicher Designmuster für die Anwendungsentwicklung (abstrakte Fabrik/Einzelfall/Beobachter/Befehlskette/Strategie/Adapter usw.); Entwickeln Sie Ihr eigenes PHP-MVC-Framework, um die Entwicklung vollständig zu liberalisieren und sich ein umfassendes Verständnis des MVC-Musters zu verschaffen. Es ermöglicht Ihnen auch, sich schnell mit verschiedenen Codeoptimierungsmethoden von PHP vertraut zu machen und mit der Lösung der meisten PHP-Sicherheitsmaßnahmen vertraut zu sein Probleme; mit den grundlegenden Prinzipien des PHP-Ausführungsmechanismus vertraut sein (Zend-Engine/erweiterter grundlegender Arbeitsmechanismus). 6. C/C++ Array-Operationen, Zeichenketten, reguläre Standard-API) und Datenstrukturen (verknüpfte Listen, Bäume, Hashes, Warteschlangen); Sie verfügen über ein grundlegendes Verständnis der C-Sprachentwicklungskonzepte unter Linux, können einfache Makefile-Dateien schreiben und einfache verwenden GCC/GDB-Programmkompilierung und einfache Debugging-Arbeiten; allgemeine Kenntnisse der grundlegenden Netzwerkprogrammierung. (Dieser Punkt soll den Grundstein für eine höhere Ebene legen).
7. Frontend
Machen Sie sich ausgehend von der ersten Stufe mit dem grundlegenden HTTP-Protokoll vertraut (Protokollcode 200/300/400/500, grundlegender HTTP-Interaktionsheader). , können Sie, nachdem Sie ein wenig elegantes HTML+CSS+JavaScript geschrieben haben oder einfach einige Front-End-Frameworks (jQuery/YUI/ExtJS/RequireJS/BootStrap usw.) verwenden können, in -Eingehendes Studium der JavaScript-Programmierung, z. B. Schließungsmechanismus, DOM-Verarbeitung; Wenn Sie tiefer gehen möchten, 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).
8. Systemdesign
In der Lage sein, die Website-Architektur, die Datenbank und die grundlegende PHP-Framework-Auswahl für die meisten mittelgroßen Systeme zu entwerfen; Komplette Aufgaben wie: Browser-> Dutzende Millionen Datenverkehr pro Tag;
Dritte Stufe: Fortgeschrittene Stufe (leitender PHP-Programmierer)
Wichtige Punkte: Zusätzlich zu den grundlegenden LNMP-Programmen können Sie auch tiefgehendes Lernen in einem bestimmte Richtung oder Feld. (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 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 NFS, Festplattenverwaltung usw.;
2. Auf der Grundlage der zweiten Stufe war ich in der Lage, Nginx sehr kompetent zu bedienen Führen Sie eingehendere Betriebs- und Wartungsarbeiten an Nginx durch, z. B. Überwachung, Leistungsoptimierung, Lösung komplexer Probleme usw.. Abhängig von Ihren persönlichen Interessen können Sie sich auf eine eingehende Untersuchung des Funktionsprinzips von Nginx in weiteren Aspekten konzentrieren. Beginnen Sie hauptsächlich mit dem Lesen des Quellcodes, z. B. des spezifischen Master-/Worker-Arbeitsmechanismus, der internen Nginx-Ereignisverarbeitung, der Speicherverwaltung usw., und können Sie gleichzeitig die Entwicklung von Nginx-Erweiterungen erlernen und einige Ihrer eigenen anpassen Private Erweiterungen; gleichzeitig können Sie ein gewisses Maß an Verständnis für Nginx + Lua haben und sehen, ob ein besseres Modell kombiniert und angewendet werden kann. In dieser Phase besteht die Anforderung darin, die Prinzipien von Nginx zu verstehen , können Sie darüber nachdenken, ein vertiefter 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 komplexe Vorgänge wie große Stapel ausgeführt werden Hochriskante Vorgänge wie das Importieren und Exportieren, das Ändern von Tabellenstrukturen oder das Hinzufügen und Löschen von Indexfeldern für große Online-Datenmengen konnten auch komplexere MySQL-Probleme wie die Ablaufverfolgung bewältigen Verschiedene Probleme und die Lösung von Master-Slave-Synchronisationsverzögerungsproblemen, raumübergreifende Synchronisationsdatenlösungen, MySQL-Hochverfügbarkeitsarchitektur usw. sind an der MySQL-Anwendungsebene beteiligt. Ich bin mit den Kernschlüsseltechnologien von MySQL vertraut , wie Transaktionsmechanismen (Isolationsstufen, Sperren usw.), und Kenntnisse über Trigger, Partitionen und andere Technologien. Muss die MySQL-Leistung verstehen und anwenden, einschließlich Festplattenoptimierung (SAS-Migration zu SSD), Serveroptimierung (Speicher, Konfiguration des Servers selbst), andere Kernleistungsoptimierungsoptionen 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, umfassendes Verständnis von Betriebsanweisungen wie show * (show status /show-Profil) und in der Lage, die meisten Leistungsprobleme zu verfolgen; umfassende Kenntnisse der MySQL-Backup-Technologie, einschließlich Disaster Recovery und Recovery, und Binlog. Tiefes Verständnis von Hot- und Cold-Backups, Multi-IDC-Backups usw.; Begriffe der MySQL-Prinzipien haben ein besseres Verständnis, z. B. das Lesen eines Teils des Quellcodes des Arbeitsmechanismus von MySQL, z. B. das Erlernen des Quellcodes der Master-Slave-Synchronisationstechnologie (Replikation) oder das Erlernen bestimmter Dinge Verstehen Sie den Quellcode von Speicher-Engines (MyISAM/Innodb/TokuDB) usw. 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 in diesem Prozess 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, 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 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 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 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 in der zweiten Stufe erlernten Kenntnissen kennen Sie auch einige weitere obskure Konfigurationsoptionen (php auto_prepend_file/auto_append_file), 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); 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 Vertrautheit mit 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); 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 (mod_php/fastcgi) vertraut zu sein 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 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 auch einige spezielle Datenstrukturen (b-tree/rb-tree/skiplist/lsm-tree/trie-tree usw.) erlernen, um Ihre Arbeit zu erleichtern Anforderungen an spezielle Arbeiten; In Bezug auf die Systemprogrammierung sind Sie mit der Multiprozess- und Multithread-Programmierung vertraut, verstehen die meisten Kommunikationsmethoden zwischen Multiprozessen und können Kommunikationsmethoden (gemeinsam genutzt) flexibel wählen Speicher/Semaphor/Pipeline usw.); Multithread-Programmierung kann das Problem gut lösen, Konfliktprobleme sperren und gleichzeitig Multithread-Programme entwickeln und debuggen, mit der Netzwerkprogrammierung vertraut sein und die Unterschiede verstehen Auswahl von Multiprozessmodellen/Multithread-Modellen/asynchronen Netzwerk-E/A-Modellen und Kenntnis der Prinzipien und Auswahl verschiedener asynchroner Netzwerk-E/A-Modelle (select/poll/epoll/iocp usw.) und Kenntnis der allgemeinen asynchrone Frameworks (ACE/ICE/libev /libuv/Boost.ASIO usw.) und deren Verwendung. Wenn Sie Zeit haben, können Sie sich gleichzeitig auch einige im Inland entwickelte Bibliotheken ansehen , in der Lage sein, eine gute Programmarchitektur mit hoher Parallelität zu entwerfen (Leader-Follow/Master-Worker usw.); die meisten Probleme bei der Entwicklung von C/C++-Back-End-Servern verstehen (Speicherverwaltung, Protokolldruck, hohe Parallelität, Front). -End- und Back-End-Kommunikationsprotokoll, Dienstüberwachung), kennen die RPC-Kommunikationsprobleme verschiedener Back-End-Dienste (struct/http/thirft/protobuf usw.); Sie sind besser mit der Verwendung von GCC und GDB zur Entwicklung von Kompilierung und Debugging vertraut Programme können nach dem Verlust des Online-Programmkerns schnell verfolgt und verfolgt werden. Im Hinblick auf die allgemeine Modulentwicklung können Sie einige allgemeine Tools oder Bibliotheken (z. B. asynchrone Netzwerk-Frameworks, Protokollbibliotheken, Speicherpools usw.) ansammeln oder entwickeln. Thread-Pools usw.), aber Sie müssen vorsichtig sein, ob Sie sie 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 des speziellen Protokollcodes jedes detaillierten Protokolls und der Gründe dafür, z. B. 302 statische Dateien werden zwischengespeichert, 502 bedeutet, dass PHP hinter Nginx ausgefallen ist usw.); wenn Sie daran interessiert sind, das Front-End zu erlernen, können Sie zusätzlich zu den vorherigen Integrationsmöglichkeiten verschiedener Framework-Anwendungen tiefer gehen Form der Entwicklung einiger Front-End-Frameworks wie jQuery oder der Entwicklung eines Rich-Text-Editors, was relativ trivial ist. Testen Sie Ihre JavaScript-Kenntnisse.
8. Sprachenlernen in anderen Bereichen
Grundlegende Kenntnisse in der Grundsprache PHP/C/C++ Es wird empfohlen, je nach aktuellem Stand zu versuchen, verschiedene Programmiersprachen zu lernen über persönliche Interessen und Hobbys, Skripterstellung. Für funktionale Programmiersprachen können Sie Lisp/Haskell/Scala/Erlang ausprobieren. Für Daten Mithilfe der statistischen Analyse können Sie etwas über die R-Sprache lernen. Wenn Sie die Perspektive des Back-End-Geschäfts ändern möchten, können Sie Node.js und das oben genannte Nginx_Lua in Kombination mit Nginx 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. Studieren Sie in andere berufliche Richtungen
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 kann das Systemdesign die erworbenen Erfahrungen und Fähigkeiten anwenden, um relativ komplexe mittlere und große Systeme zu entwerfen, die die meisten Online-Probleme lösen können Probleme wie Browser-> Lastausgleich-> Nginx+PHP-> , Anti-Cheating-Backend, externe Dienste) -> Komplexeres Backend-Geschäft von Jiangzi, das die normale Entwicklung und Wartung von Dutzenden bis Hunderten Millionen Traffic-Websites pro Tag unterstützen kann.
Abschließend geben wir Ihnen 10 Tipps zur PHP-Leistungsoptimierung, die Ihnen dabei helfen, besser mit PHP zu entwickeln:
1. Foreach ist effizienter, versuchen Sie, foreach statt while und for-Schleife zu verwenden
2. Deklarieren Sie keine Variablen innerhalb einer Schleife, insbesondere keine Variablen wie Objekte
3. In mehreren verschachtelten Schleifen sollte nach Möglichkeit die längste Schleife in der inneren Ebene platziert werden, die kürzeste Schleife wird in platziert die äußere Schicht, wodurch die Häufigkeit, mit der die CPU die Schleifenschicht überquert, reduziert und die Programmleistung optimiert wird
4. Verwenden Sie einfache Anführungszeichen anstelle von doppelten Anführungszeichen, um Zeichenfolgen in Anführungszeichen zu setzen, um eine Optimierung der PHP-Leistung zu erreichen
5 . , verwenden Sie i+=1 anstelle von i=i+1. Es entspricht den Gewohnheiten von c/c++ und ist hocheffizient
6. Optimieren Sie die Select SQL-Anweisung und führen Sie so wenige Einfüge- und Aktualisierungsvorgänge wie möglich aus, um den Zweck der PHP-Leistungsoptimierung zu erreichen
7. Versuchen Sie, so wenig Dateioperationen wie möglich auszuführen, obwohl die Dateioperationseffizienz von PHP nicht niedrig ist Interne PHP-Zeichen Verwenden Sie bei String-Operationsfunktionen keine regulären Ausdrücke
10. Feof, fgets, fopen und wenn file_get_contents anstelle von Datei- oder Serienmethoden verwendet werden kann, versuchen Sie, file_get_contents zu verwenden, da dies der Fall ist viel effizienter. Bitte achten Sie jedoch beim Öffnen einer URL-Datei auf das PHP-Versionsproblem von file_get_contents