PHP-Ingenieure sind mit Wachstumsengpässen konfrontiert
Stellen Sie zunächst klar, dass sich die hier genannten PHP-Ingenieure auf diejenigen beziehen, die PHP hauptsächlich zur Entwicklung von Websystemen verwenden und nicht daran gearbeitet haben andere Sprachen. Ich verfüge über etwa 3 bis 4 Jahre Berufserfahrung und bin grundsätzlich problemlos in der Entwicklung gewöhnlicher Websysteme (Millionen Zugriffe, weniger als 1.000 Datenebenen oder nicht besonders komplexe Geschäftslogik) zu finden. Aber sie werden so zeigen:
◆Verwenden Sie keine anderen Sprachen außer PHP und klicken Sie möglicherweise auf Shell-Skripte.
◆Nicht gut darin, PHP zu beherrschen (habe nicht viele PHP-Handbücher gelesen, außer Bibliotheken).
◆Die Wissensbasis ist relativ schmal (angesichts der Nachfrage kenne ich außer der Verwendung von PHP und MySQL keine anderen Lösungen).
◆PHP-Code ist hauptsächlich prozessorientiert, und ich denke, dass die objektorientierte Implementierung zu kompliziert und schwer zu verstehen ist.
Diesen PHPern mangelt es an Ideen, wenn sie auf Projekte stoßen, die eine hohe Leistung, eine hohe Parallelitätsverarbeitung und große Datenmengen erfordern, oder wenn die Geschäftslogik relativ komplex ist (das System muss Geschäftsprobleme in mehreren Bereichen lösen). Sie sind nicht in der Lage, den Kern des Problems zu analysieren und haben ein schlechtes technisches Urteilsvermögen. Sie können schnell vorübergehende Lösungen für das Problem finden, aber oft brechen das System und sie selbst Schritt für Schritt in den ständigen temporären Lösungen zusammen. Wie können Sie sich also verbessern? Wie kann ich ein schwierigeres System herausfordern?
Wo liegen die höheren Herausforderungen?
Basierend auf meiner eigenen Erfahrung liste ich einige spezifische Herausforderungen auf, um jedem ein Wahrnehmungsverständnis zu vermitteln.
Was sind die Herausforderungen von Hochleistungssystemen?
◆Wie wähle ich einen Webserver aus? Sollte ich den Fast-CGI-Modus verwenden?
◆Soll ich einen Reverse-Proxy-Dienst verwenden? Wählen Sie Vollspeicher-Cache oder Festplatten-Cache?
◆Ist ein Lastausgleich erforderlich? Basiert es auf der Anwendungsschicht oder der Netzwerkschicht? Wie stellt man eine hohe Zuverlässigkeit sicher?
◆Wie ist die Leistung Ihres PHP-Codes und wie ist sie nach der Verwendung von Optimierungstools? Wo liegt der Leistungsengpass? Muss es als Erweiterung von C geschrieben werden?
◆Was sind die Merkmale des Benutzerzugriffs? Ist es eher lesend oder schreibend? Ist eine Lese-Schreib-Trennung erforderlich?
◆Wie werden die Daten gespeichert? Wie hoch sind die Schreib- und Lesegeschwindigkeiten? Wie verändert sich die Zugriffsgeschwindigkeit, wenn die Datenmenge zunimmt?
◆Wie verwende ich den Cache? Wie kann man Scheitern berücksichtigen? Wie kann die Datenkonsistenz sichergestellt werden?
Was sind die Herausforderungen hochkomplexer Systeme?
◆Können Sie das Feld identifizieren, das dem Unternehmen entspricht? Ist es eins oder mehrere?
◆Kann das Geschäft sinnvoll abstrahiert werden, sodass Änderungen der Geschäftsregeln mit geringen Kosten realisiert werden können?
◆Kann die Konsistenz und Sicherheit der Daten gewährleistet werden?
◆Beherrschen Sie objektorientierte Analyse- und Entwurfsmethoden?
Wenn Sie die hier aufgeführten Fragen mit Ja beantworten können, bedeutet dies, dass Sie grundsätzlich technisch in der Lage sind, Architekt zu werden. Wenn Sie die Frage noch nicht beantworten können, müssen Sie sich in den folgenden Richtungen verstärken.
Wie man sich verbessert und Engpässe überwindet
Wie Sie es noch nicht beantworten können, Sie müssen sich in den folgenden Richtungen stärken:
◆ Analysieren Sie, was Sie verwenden. Die Prinzipien der Technologie und der dahinter stehende Betriebsmechanismus können Ihr technisches Urteilsvermögen verbessern und die Richtigkeit Ihrer Wahl technischer Lösungen verbessern.
◆Erlernen Sie während des Studiums wichtige Kenntnisse über Betriebssystemprinzipien und Datenstrukturen und Algorithmen. Wissen Sie, dass Sie früher für Prüfungen gelernt haben, aber jetzt müssen Sie selbst lernen und wissen, warum; Das liegt nicht nur daran, dass Sie möglicherweise PHP-Erweiterungen schreiben müssen, sondern auch daran, dass es in C-Anwendungen eine Umgebung gibt, die sich immer um Leistung, Speicherkontrolle, Variablenlebenszyklus, Datenstrukturen und Algorithmen kümmert; Erfahren Sie, dass objektorientierte Analyse und Design eine effektive Methode zur Lösung komplexer Probleme sind. Lernen Sie Abstraktion, nur so lassen sich komplexe Probleme lösen.
Wie man effektiv lernt, ist ein großes Problem. „Architekturzentrierte, anwendungsfallgesteuerte, iterative Entwicklung“: In Anlehnung an diese Idee können effektive Lernmethoden wie folgt ausgedrückt werden: aufgabengesteuertes, iteratives Lernen, das sich auf Prinzipien, Modelle oder Mechanismen konzentriert. Es ist etwas abstrakt. Lassen Sie uns ein Beispiel geben, um zu veranschaulichen, wie man lernt.
Zweck: Erfahren Sie, wie Sie die Verarbeitungsleistung verbessern können.
Iterierbare Aufgabe: Finden Sie den Standort anhand der IP. Dies ist eine häufige Aufgabe für Webanwendungen und die IP-Datenbank enthält etwa 100.000 Datensatzzeilen.
Erste Iteration: Implementierung der Funktion ohne Berücksichtigung der Leistung (implementiert durch PHP)Da die Region nicht direkt über KEY (IP) durchsucht werden kann, ist die einfache Methode von Es wird nicht funktionieren, es direkt in die Daten oder über ein assoziatives Array einzufügen. Die Idee besteht darin, zuerst die Daten zu sortieren und dann zu suchen: ◆Wie suche ich nach IP? Bei geordneten Daten ist die binäre Suche am schnellsten.
◆Wie sortiere ich? Natürlich können Sie die Bibliotheksfunktion sort verwenden, aber da Sie noch lernen, ist es besser, die schnelle Sortierung selbst zu implementieren.
Lernziele: Sortieralgorithmen, Suchalgorithmen
Die Datenstruktur und das Algorithmusfundament von PHPer sind in der Regel relativ dürftig und ich lerne in diesem Bereich auch nicht Mir fehlen Kenntnisse auf diesem Gebiet. Letztlich hängen die durch die Programmierung gelösten Probleme jedoch von der Datenstruktur und den Algorithmen ab, die mit dieser Datenstruktur arbeiten. Wenn Sie den Datenstrukturalgorithmus immer im Kopf haben, können Sie seine innere Struktur klar verstehen, wenn Sie auf ein Problem stoßen, und die Lösung wird sich auf natürliche Weise ergeben.
Zweite Iteration: Optimierung des Ladens und Sortierens von DatenWenn Sie den ersten Schritt ausführen, ist dieser grundsätzlich nicht verfügbar, da die Daten jedes Mal geladen und sortiert werden müssen, was zu zeitaufwändig ist. Die Lösung besteht darin, die Daten einmal zu laden, zu sortieren und an einem Ort abzulegen, an dem jeder PHP-Prozess darauf zugreifen kann. Es in Memcache abzulegen ist für jeden ein einfaches Problem. Tatsächlich ist es schneller, es in den gemeinsamen Speicher zu legen (unterstützt von EA und anderen Beschleunigern), da Memcache auch mehr Netzwerkoperationen hat. Werden die Daten als Ganzes oder in Blöcken abgelegt? Wie kann man Engpässe analysieren (xdebug)?
Lernziele: Methoden zum Erkennen, Lokalisieren und Optimieren der PHP-Leistung; die Auswirkungen der PHP-Implementierungsstruktur auf die Leistung.
Die dritte Iteration: PHP-Erweiterungen schreiben
Die Leistung kann sich immer noch nicht verbessern, und ich muss in die Welt von C/C++ einsteigen, aber von nun an werden Sie das nicht mehr tun Sei nur ein PHPer Was die Allround-Ingenieure auf der Serverseite betrifft, ist dies natürlich eine große Herausforderung für Studenten, die noch nie C/C++ gemacht haben.
Lernziele: C/C++ lernen, PHP-Erweiterungen schreiben
Wie bestimmt man die Mechanismen und Prinzipien, die erlernt werden müssen? Wie finde ich die Fahrlernaufgaben? Ich habe keine Ahnung, was ich lernen muss. Wie kann ich die beiden oben genannten Fragen beantworten? Finden Sie die wichtigsten Punkte heraus, die aus der Positionierung dieser Technologie gelernt werden müssen, d. h. wie sie dies tut (Mechanismus) und warum sie dies tun kann. Listen Sie die häufigsten Anwendungen dieser Technologie als Lernaufgabe auf und üben Sie sie von einfach bis schwierig.
Wenn ich JavaScript lernen muss, verfüge ich über gewisse Wahrnehmungskenntnisse in HTML und CSS. Das erste, was Sie verstehen müssen, ist, dass JavaScript eine dynamische Sprache im Webbereich ist, die hauptsächlich die dynamische Interaktion von Webseiten löst. Die wichtigsten zu lernenden Punkte sind folgende:
◆Wie JavaScript mit HTML interagiert (Mechanismus)
◆Was sind die dynamischen Eigenschaften von JavaScript und wie unterscheiden sie sich von anderen dynamischen Sprachen? (Sprachmodell)
Wenn Sie vollständig im Selbststudium sind, ist es in der Tat nicht so einfach, die wichtigsten Punkte zu finden, die gelernt werden müssen (Mechanismus, Modell, Prinzip). Wenn Sie eine erfahrene Person finden, die Sie anleitet oder ein Lernteam hinzufügt, wird die Lerngeschwindigkeit tatsächlich erheblich verbessert.