Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassende Weitergabe der wichtigsten PHP-Interviewfragen (2)

Zusammenfassende Weitergabe der wichtigsten PHP-Interviewfragen (2)

小云云
小云云Original
2018-03-22 13:41:293802Durchsuche

Zuvor haben wir Ihnen die wichtigsten PHP-Interviewfragen mitgeteilt (1). Dieser Artikel teilt Ihnen hauptsächlich die Zusammenfassung der wichtigsten PHP-Interviewfragen (2).

1. Theoretische Kenntnisse

1.1 Ist PHP sensitiv?

PHP unterscheidet nicht zwischen Groß- und Kleinschreibung bei Systemfunktionen, benutzerdefinierten Funktionen, Klassennamen usw.

Variablen und Konstanten in PHP sind Groß- und Kleinschreibung beachten

Der Dateiname hängt vom Server-Betriebssystem ab. Er wird in Linux unterschieden, jedoch nicht in Win

1.2, $ _POST , der Unterschied zwischen $HTTP_RAW_POST_DATA und php://input?

$_POST:

soll die Formular-POST-Daten abrufen, der Medientyp ist „application/x-www-form-urlencoded“ .

Das bedeutet, dass der Feldname und der Wert durch „&“-Zeichen getrennt sind, Schlüssel und Wert durch „=“ und andere Sonderzeichen wird mit URL-Code kodiert.

$HTTP_RAW_POST_DATA:

Sie können die ursprünglichen POST-Daten abrufen, diese müssen jedoch in php.ini aktiviert werden und werden nicht unterstützt enctype=" In multipart/form-data übergebene Daten" Methode

php://input:

kann die ursprünglichen POST-Daten abrufen, und ist besser als $ HTTP_RAW_POST_DATA, verbraucht weniger Speicher und unterstützt nicht „multipart/form-data“

Sie können die Funktion file_get_contents() verwenden, um den Inhalt abzurufen

1.3. Kann eine Methode, die nicht statisch definiert ist, in der Form „Objektname::Methodenname“ aufgerufen werden?

generiert einen schwerwiegenden Fehler, die Codeausführung wird jedoch fortgesetzt. Siehe „PHP ruft nicht statische Methoden statisch auf“. In diesem Artikel geht es auch um das Konzept des „Aufrufbereichs“.
Statischer Aufruf bedeutet nicht, dass Folgendes vorhanden ist: Es bedeutet statischen Aufruf, hängt jedoch vom Aufrufbereich ab. Das Objekt, auf das der Zeiger $this zeigt, ist der aufrufende Bereich, wenn diese Methode aufgerufen wird.

Lesen Sie diesen Artikel für Details: http://www.cnblogs.com/whoamme/p/3728052.html

1.4 Bitte Erklären Sie kurz Ihre stolzeste Entwicklungsarbeit

1.5 Welche Methoden verwenden Sie für Websites mit großem Traffic, um das Problem der Seitenbesuchsstatistiken zu lösen

a. Bestätigen Sie, ob der Server den aktuellen Datenverkehr unterstützen kann.

b. Optimieren Sie den Datenbankzugriff. (Referenz 3.5)

c. Verbieten Sie den externen Zugriff auf Links (Hotlinking), wie z. B. das Hotlinking von Bildern.

d. Datei-Downloads kontrollieren.

e. Verwenden Sie verschiedene Hosts, um den Datenverkehr zu verteilen.

f. Verwenden Sie eine Browsing-Statistiksoftware, um die Anzahl der Besuche zu ermitteln und eine gezielte Optimierung durchzuführen.

1.6. Bitte stellen Sie das Sitzungsprinzip vor

Da HTTP zustandslos ist, ändern sich Client und Server nicht, nachdem eine Anfrage abgeschlossen ist. Es gibt keine Beziehung mehr, niemand kennt irgendjemanden.

Aufgrund einiger Anforderungen (z. B. Aufrechterhaltung des Anmeldestatus usw.) müssen der Server und der Client jedoch in Kontakt gehalten werden, und die Sitzungs-ID wird zum Medium für diesen Kontakt.

Wenn ein Benutzer die Website zum ersten Mal besucht, verwendet PHP die Funktion session_start(), um eine Sitzungs-ID für den Benutzer zu erstellen, die die eindeutige Kennung für diesen Benutzer darstellt,

Jeder besuchende Benutzer erhält eine eindeutige Sitzungs-ID. Diese Sitzungs-ID wird im Cookie im Antwortheader gespeichert und dann an den Client gesendet.

Auf diese Weise erhält der Kunde von der Website eine Sitzungs-ID.

Wenn der Benutzer die Website zum zweiten Mal besucht, sendet der Browser zusammen mit der Anfrage das lokal gespeicherte Cookie (das die beim letzten Mal erhaltene Sitzungs-ID enthält) an den Server 🎜>

Nach Erhalt der Anfrage erkennt der Server, ob eine Sitzungs-ID vorhanden ist, und liest die Antwort-Sitzungsdatei Das gleiche wie beim ersten Mal.

1.7. Lösung für das Problem der Sitzungsfreigabe

a Das Client-Cookie wird jeweils auf clientseitige Weise gespeichert Dabei werden Sitzungsinformationen auf den Client geschrieben und dann über den Browser wieder an den Server übermittelt.

b. Die Sitzungssynchronisierung zwischen Servern verwendet die Master-Slave-Serverarchitektur. Wenn sich der Benutzer am Masterserver anmeldet, werden die Sitzungsinformationen über ein Skript oder einen Daemon-Prozess übertragen . Vom Server

c. Wenn das Anwendungssystem Sitzungsinformationen benötigt, liest es diese derzeit direkt vom Sitzungsclusterserver Verwenden Sie Memcache, um den Sitzungsspeicher zu verwalten.

d. Behalten Sie die Sitzung in der Datenbank bei. Die derzeit verwendete Datenbank ist bei Verwendung dieser Lösung im Allgemeinen MySQL.

Siehe „Forschung zu Session-Sharing-Implementierungslösungen“

1.8, Tools zum Testen der PHP-Leistung und Methoden zum Auffinden von Engpässen.

XHProf (siehe hier für die Windows-Installationsmethode) ist ein mehrschichtiges PHP-Leistungsanalysetool. Es meldet die Anzahl der Anfragen und verschiedene Metriken auf Funktionsebene, einschließlich Blockierungszeit, CPU-Zeit und Speichernutzung.

Es verfügt über eine einfache HTML-Benutzeroberfläche. Die browserbasierte Benutzeroberfläche für die Leistungsanalyse ist einfacher anzuzeigen und kann auch Anrufdiagramme zeichnen. Parameterwerte anzeigen.

1.9. Stellen Sie die allgemeinen Prinzipien von SSO (Single Sign-On) vor.

SSO ist ein einheitlicher Authentifizierungs- und Autorisierungsmechanismus. Nachdem Sie die Sicherheitsüberprüfung in einer Anwendung bestanden haben, müssen Sie sich beim Zugriff auf geschützte Ressourcen in anderen Anwendungen nicht mehr erneut zur Überprüfung anmelden.

Lösung: Benutzer müssen sich nur einmal anmelden, um auf alle gegenseitig vertrauenswürdigen Anwendungssysteme zuzugreifen, ohne sich wiederholt anmelden zu müssen.

Ein einheitliches Authentifizierungssystem ist eine der Voraussetzungen für SSO. Die Hauptfunktion des Authentifizierungssystems besteht darin, die Anmeldeinformationen des Benutzers mit der Benutzerinformationsdatenbank zu vergleichen und den Benutzer zu authentifizieren.

Nach erfolgreicher Authentifizierung sollte das Authentifizierungssystem ein einheitliches Authentifizierungszeichen generieren (; Ticket) ), an den Benutzer zurückgegeben. Darüber hinaus sollte das Authentifizierungssystem auch das Ticket überprüfen, um seine Gültigkeit festzustellen.

Siehe „Single Sign-On SSO“

Eigenschaften des PHP-Frameworks, das Sie untersucht haben, welche Probleme es hauptsächlich löst, und wie es sich im Vergleich zu anderen Frameworks unterscheidet.

1.11. Sitzungsnutzungsplan, der Cookies deaktiviert

a. Auf der gesamten Website können keine rein statischen Seiten vorhanden sein, da die Sitzungs-ID der rein statischen Seite nicht an die nächste Seite weitergegeben wird.

b Geben Sie die Sitzungs-ID ein, indem Sie das Formular ausblenden im versteckten Teil des Formulars Senden Sie das Textfeld zusammen mit dem Formular (Nachteil: Dies gilt nicht für Nicht-Formular-Situationen, in denen das -Tag direkt springt)

c . Konfigurieren Sie die php.ini-Datei direkt, setzen Sie session.use_trans_sid= 0 in der php.ini-Datei auf 1 (scheint unter Win nicht unterstützt)

d Speichern Sie die Sitzungs-ID eine Datei, eine Datenbank usw. auf einer Seite manuell aufrufen

1.12. Was sind die PHP-Caching-Technologien?

1. Statisches Vollseiten-Caching, d. h. alle Seiten werden als statische HTML-Seiten generiert, auf die Benutzer beim Besuch direkt zugreifen können, ohne den PHP-Server-Analyseprozess zu durchlaufen

2. Teilweises Seiten-Caching, statisches Zwischenspeichern der Teile einer Seite, die sich nicht häufig ändern, während sich häufig ändernde Blöcke nicht zwischengespeichert und schließlich zur Anzeige zusammengesetzt werden

3. Daten-Caching, die über eine ID angeforderten Daten werden in einer PHP-Datei zwischengespeichert. Wenn eine Anfrage über diese ID gestellt wird, wird die PHP-Datei direkt gelesen

4. Abfragecache, ähnlich dem Datencache, Caches gemäß Abfrageanweisungen

5 >

Siehe „Zusammenfassung der 9 wichtigsten Caching-Technologien in PHP“

1.13. Was sind die Merkmale von Daten im JSON-Format?

a. JSON ist ein leichtgewichtiges Datenaustauschformat. Es basiert auf einer Teilmenge von ECMAScript.

b. JSON verwendet ein völlig sprachunabhängiges Textformat, verwendet aber auch Konventionen ähnlich der C-Sprachfamilie (einschließlich C, C++, C#, Java, JavaScript, Perl, Python usw.). .)

c Diese Funktionen machen JSON zu einer idealen Datenaustauschsprache. Für Menschen leicht zu lesen und zu schreiben und für Maschinen leicht zu analysieren und zu generieren (Netzwerkübertragungsrate).

d. Eine Sammlung von „Name/Wert“-Paaren wird als Objekt, Datensatz, Struktur, Wörterbuch, Hash-Tabelle, usw. verstanden 🎜>

e. Eine geordnete Liste von Werten, die in den meisten Sprachen als Array verstanden wird

Siehe „Einführung in JSON“

1.14, der Unterschied zwischen isset(), empty() und is_null

isset(): Nur wenn null und undefiniert, wird false zurückgegeben

empty(): "", 0, "0", NULL, FALSE, array(), undefiniert, alle Gibt true zurück

is_null (): Nur feststellen, ob es null ist, undefinierte Warnung

1.15, Vor- und Nachteile von MVC

Vorteile:

Diffuse Fokussierung, lose Kopplung, logische Wiederverwendung, Standarddefinition

a Entwickler Sie können sich nur auf eine bestimmte Ebene der gesamten Struktur konzentrieren, um die Aufteilung zu erleichtern Arbeit zwischen mehreren Entwicklern

Sie können die ursprüngliche Implementierungsebene problemlos durch eine neue Implementierung ersetzen

Abhängigkeiten zwischen Ebenen reduzieren

Erleichtern Sie die Wiederverwendung von Logik auf jeder Ebene und Standardisierung

Bessere Unterstützung für Unit-Tests

Nachteile:

a. Klare Architektur mit Code Auf Kosten der Komplexität kann die Optimierung kleiner Projekte tatsächlich die Entwicklungseffizienz verringern

b . Reduzierte Systemleistung, zum Beispiel muss der Geschäftszugriff auf die Datenbank jetzt über die mittlere Schicht erfolgen

c Die Kontrollschicht und die Präsentationsschicht liegen manchmal zu nahe beieinander echte Trennung und Wiederverwendung

d Manchmal kommt es zu kaskadierenden Änderungen, wenn der Darstellung eine Funktion hinzugefügt wird, um die Einhaltung der Schichtstruktur sicherzustellen Es kann erforderlich sein, der entsprechenden Steuerungsschicht und Modellschicht entsprechenden Code hinzuzufügen

Verständnis von MVC:

MVC ist die Idee von​ ​Ein Entwicklungsprojekt kann in drei Teile unterteilt werden: Datenteil (Modellmodell), Geschäftslogikteil (Controller-Controller), externe Darstellung von Daten (Ansichtsansicht),

Der Client fordert den Controller des Projekts an. Wenn während der Ausführung Daten benötigt werden, ruft der Controller die Daten aus dem Modell ab und zeigt die erhaltenen Daten dann über die Ansicht an.

1.16. Was ist der Unterschied zwischen einfachen und doppelten Anführungszeichen in PHP? Welches ist schneller?

Einfache Anführungszeichen sind schneller

Daten in einfachen Anführungszeichen werden nicht analysiert (alle Variablen und spezielle Escape-Zeichen), daher ist es schneller

Doppelte Anführungszeichen müssen zuerst herausfinden, ob die Anweisung Variablen enthält. Die Daten innerhalb der doppelten Anführungszeichen werden beispielsweise analysiert in die Zeichenfolge eingesetzt werden. Es wird auch in ein bestimmtes Einzelzeichen geparst.

Übrigens gibt es hier ein Trennzeichen (Heredoc-Syntax) „<<< ",

Seine Funktion besteht darin, den darin enthaltenen Inhalt unverändert auszugeben, einschließlich Zeilenumbruchformat usw. Sonderzeichen müssen nicht maskiert werden. Variablen werden durch ihre ersetzt Werte normalerweise

Kurzbeschreibung von GBK, GBK2312, BIG5, GB18030

GB2312 unterstützt weniger chinesische Schriftzeichen Zeichen als GB2312, einschließlich aller chinesischen, japanischen und koreanischen chinesischen Zeichen

Im Vergleich zu GBK fügt GB18030 einige chinesische Zeichen ethnischer Minderheiten hinzu und die chinesische Zeichenbibliothek ist vielfältiger, was selten verwendet wird von normalen Leuten

Im Allgemeinen verwendet vereinfachtes Chinesisch GBK anstelle von traditionellem Chinesisch BIG5

1.18 Was ist der Unterschied zwischen Schnittstelle und abstrakter Klasse?

Abstract-Klasse:

Abstract-Klasse ist eine Klasse, die nicht instanziiert werden kann und nur als übergeordnete Klasse anderer Klassen verwendet werden kann Klasse Es wird durch das Schlüsselwort abstract deklariert

Abstrakte Klassen ähneln gewöhnlichen Klassen und enthalten beide Mitgliedsvariablen und Mitgliedsmethoden. Der Unterschied zwischen den beiden besteht darin, dass die abstrakte Klasse mindestens eine enthält abstrakte Methode

Abstrakte Methoden haben keinen Methodenkörper, und diese Methode muss von Natur aus durch Unterklassen überschrieben werden

Das Format einer abstrakten Methode ist : abstrakte Funktion abstractMethod()

Unterklassen erben abstrakte Klassen mithilfe von Extends

Schnittstelle:

Die Schnittstelle ist über das Schlüsselwort interface Um zu deklarieren, dass die Mitgliedskonstanten und Methoden in der Schnittstelle öffentlich sind, muss die Methode nicht das Schlüsselwort public schreiben

Die Methode in der Schnittstelle hat auch Kein Methodenkörper, und die Methode in der Schnittstelle wird ebenfalls geboren. Die von Unterklassen zu implementierende

-Schnittstelle kann mehrere Vererbungs-

-Unterklassen implementieren die Schnittstelle unter Verwendung von Implementierungen

1.20 Der Unterschied zwischen der Wertübergabe und der Referenzübergabe in PHP

Wertübergabe: Alle Änderungen an der Wert innerhalb des Funktionsumfangs wird außerhalb der Funktion ignoriert

Übergabe als Referenz: Alle Änderungen am Wert innerhalb des Funktionsumfangs spiegeln diese Änderungen auch außerhalb der Funktion wider

1.21, PHP5-Konstruktor und Destruktor

__construct: Diese Funktion wird als Konstruktor behandelt und beim Erstellen einer Objektinstanz ausgeführt

__destruct: PHP zerstört das Objekt, bevor es zerstört wird. Rufen Sie diese Funktion auf. Sie wird als Destruktor bezeichnet

1.22. Was ist der Garbage-Collection-Mechanismus von PHP?

PHP ist eine verwaltete Sprache. Bei der PHP-Programmierung müssen sich Programmierer nicht manuell um die Zuweisung und Freigabe von Speicherressourcen kümmern, was bedeutet, dass PHP selbst einen Garbage-Collection-Mechanismus (Garbage Collection) implementiert )

Der von PHP verwendete Recycling-Algorithmus ist die Referenzzählmethode. Jede PHP-Variable wird in einem Variablencontainer namens „zval“ gespeichert.

Ein zval-Variablencontainer, der nicht nur den Typ und den Wert der Variablen enthält, sondern auch zwei Bytes zusätzlicher Informationen. Der erste ist „is_ref“, ein Bool-Wert, der verwendet wird, um zu identifizieren, ob diese Variable zum Referenzsatz gehört.

Das zweite zusätzliche Byte ist „refcount“, das verwendet wird, um die Anzahl der Variablen (auch Symbole genannt) darzustellen, die auf diesen zval-Variablencontainer verweisen.

Das Zuweisen einer Variablen zu einer anderen Variable erhöht den Referenzzähler (Refcount)

Wenn eine mit einem Variablencontainer verknüpfte Variable ihren Gültigkeitsbereich verlässt ( Beispiel: Funktionsausführung endet), oder wenn die Funktion unset() für eine Variable aufgerufen wird, wird „refcount“ um 1 reduziert

Der Variablencontainer wird bei 0 zerstört: 00

1.23. Erzählen Sie mir ein paar Designmuster, die Sie kennen?

Singleton-Modus: Stellen Sie sicher, dass eine Klasse nur eine Instanz hat und stellen Sie einen globalen Zugriffspunkt für den Zugriff bereit, z. B. eine Datenbankverbindung im Framework

Einfaches Factory-Muster: Es verfügt über bestimmte Methoden zum Erstellen von Objekten. Sie können Factory-Klassen verwenden, um Objekte zu erstellen, ohne new direkt zu verwenden. Es wird beispielsweise beim Initialisieren einer Datenbank wie MySQL oder MSSQL verwendet

Strategiemodus: Kapseln Sie für eine Reihe von Algorithmen jeden Algorithmus in eine unabhängige Klasse mit einer gemeinsamen Schnittstelle. B. Eingabe Beim Einrichten einer persönlichen Homepage werden unterschiedliche Anzeigen und Vorgänge basierend auf unterschiedlichen Betrachtern bereitgestellt

Registrierungsmodus: Bietet eine geordnete Speicherung und Verwaltung einer Reihe globaler Objekte (Objekte) im Programm. Zum Beispiel Zend_Registry::set

Adaptermodus im ZF-Framework: Passen Sie verschiedene Schnittstellen in eine einheitliche API-Schnittstelle an, z. B. Datenoperationen wie MySQL, MySQLi, PDO usw. können Sie den Adaptermodus Unified Interface

Beobachtermuster verwenden: Ein Objekt macht sich selbst beobachtbar, indem es eine Methode hinzufügt. Wenn sich ein beobachtbares Objekt ändert, sendet es Nachrichten an registrierte Beobachter. Implementieren Sie beispielsweise Message Push

Decorator-Modus: Erweitern Sie die Funktion der Klasse dynamisch, ohne den ursprünglichen Klassencode und die Vererbung zu ändern. Beispielsweise wird jede Controller-Datei des Frameworks vor und bereitgestellt After-Methoden.

Iterator-Modus: Bietet eine Methode für den sequentiellen Zugriff auf jedes Element in einem Aggregatobjekt. In PHP wird die Iterator-Klasse geerbt Prototyp-Modus: Implementiert eine Prototyp-Schnittstelle, die zum Erstellen eines Klons des aktuellen Objekts verwendet wird. Dieser Modus wird verwendet, wenn die Kosten für die direkte Erstellung von Objekten relativ hoch sind. Beispielsweise muss ein Objekt nach einer teuren Datenbankoperation erstellt werden.

2. PHP-Codierung

2.1. Was ist der Unterschied zwischen mysqli_real_connect() und mysqli_connect()?

a. mysqli_real_connect() erfordert ein gültiges Objekt, das von mysqli_init() erstellt wurde.

b mysqli_real_connect() kann mit mysqli_options() verwendet werden. Wird zusammen verwendet, um verschiedene Optionen für die Verbindung festzulegen

c. mysqli_real_connect() hat einen Flag-Parameter

2.2

Sie können hier die Funktion scandir() oder glob() verwenden. Hier gibt es einen Artikel, der die „Vier Methoden“ im Online-Code vorstellt.

2.3. Extrahieren Sie bei einer beliebigen URL die in der URL enthaltene Erweiterung. Zum Beispiel „http://www.pwstrick.com/test.php?somevar“ gibt .php oder php

mit 5 Methoden zurück: pathinfo(), explosion(), The Kombination aus basename(), strpos() und substr(),

verwendet reguläre Ausdrücke (siehe meinen vorherigen Artikel „Reguläre Ausdrücke in JavaScript und PHP“) und parse_url() . Schauen Sie sich den Code online an.

2.4. Wie verhindert PHP die SQL-Injection?

Verwenden Sie vorbereitete Anweisungen und parametrisierte Abfragen. Die vorbereiteten Anweisungen und Parameter werden jeweils zum Parsen an den Datenbankserver gesendet und die Parameter werden als normale Zeichen behandelt.

Diese Methode verhindert, dass Angreifer bösartiges SQL einschleusen. Sie haben zwei Möglichkeiten, diese Methode zu implementieren: PDO und MySQLI, den Code finden Sie online. Siehe „So verhindern Sie SQL-Injection in PHP“

2.5, der Unterschied zwischen include, require, include_once und require_once

a und erfordern, dass alle angegebenen Dateien importiert werden. _once bedeutet, dass es nur einmal eingeführt wird, dh das, was zuvor eingeführt wurde, wird nicht erneut eingeführt.

b. Ladefehler werden unterschiedlich behandelt:

include generiert eine Warnung, wenn eine nicht vorhandene Datei eingeführt wird, und das Skript wird weiterhin ausgeführt . enthalten. Um es einfach auszudrücken: Nimm sie mit!

require führt je nach Datei zu einem schwerwiegenden Fehler und die Ausführung des Skripts wird gestoppt. Um es einfach auszudrücken: Ich will sie!

c include ist eine bedingte Einschlussfunktion, während require eine bedingungslose Einschlussfunktion ist.

d. Die Dateien, auf die bei der Ausführung von include() verwiesen werden muss, müssen jedes Mal gelesen und ausgewertet werden, und die Dateien, auf die bei der Ausführung von require() verwiesen werden muss, müssen jedes Mal gelesen und ausgewertet werden Wird nur einmal verarbeitet (eigentlich beim Ausführen). Der Inhalt der Datei, die in Anführungszeichen gesetzt werden muss, ersetzt die require()-Anweisung.

e include hat einen Rückgabewert, require jedoch nicht. Siehe „Der Unterschied zwischen include require include_once require_once in PHP“

2.6 Schreiben Sie einige magische PHP-Methoden

PHP endet alle mit __. (zwei Klassenmethoden, die mit einem Unterstrich beginnen) sind als magische Methoden reserviert. Daher wird empfohlen, beim Definieren von Klassenmethoden nicht __ als Präfix zu verwenden. Überprüfen Sie das PHP-Handbuch.

Drei Möglichkeiten, Parameter an PHP per Shell-Befehl zu übergeben

Verwenden Sie $argc $argv; verwenden Sie die Funktion (); Benutzer zur Eingabe und ruft dann die Eingabeparameter ab. Siehe „Eingehende PHP-Parameter“

2.8. Schreiben Sie eine Funktion zum Berechnen der relativen Pfade zweier Dateien, z. B. $a = "/a/b/c/d/e. php "; $b = "/a/b/12/34/c.php";

Der berechnete relative Pfad von $a relativ zu $b sollte "../ ./12/34/c.php"

Teilen Sie zuerst die beiden Zeichenfolgen mit „/“ in Arrays auf und verwenden Sie dann array_diff_assoc, um zunächst den Unterschied zwischen $a und $ zu überprüfen b-Arrays. Dann berechne die Differenzmenge zwischen $b und $a. Schauen Sie sich den Code online an.

2.9. Verwenden Sie PHP, um den Code und die Webseitenadresse zu schreiben, die die Client-IP und die Server-IP anzeigt

Client-IP: $_SERVER[ "REMOTE_ADDR"]

Server-IP: $_SERVER["SERVER_ADDR"]

Webseitenadresse: $_SERVER["REQUEST_URI"]

Der Ausführungspfad des aktuellen Skripts: $_SERVER["SCRIPT_FILENAME"] oder __FILE__

Der Name des aktuellen Skripts: $_SERVER[ "PHP_SELF" ] oder $_SERVER["SERIPT_NAME"]

Der URL-Link zur vorherigen Seite: $_SERVER["HTTP_REFERER"]

2.10 , Welche Rolle spielt error_reporting(2047)

error_reporting, legen Sie fest, welche Art von PHP-Fehlern gemeldet werden sollen, hier bedeutet es, alle Fehler E_ALL anzuzeigen

2.11 , echo, print(), print_r(), printf(), sprintf(), var_dump() Was ist der Unterschied?

echo: Es ist eine Anweisung, keine Funktion, es gibt keinen Rückgabewert und es können mehrere Variablenwerte ausgegeben werden, keine Klammern erforderlich. Arrays und Objekte können nicht ausgegeben werden, nur einfache Typen (wie int, string) können gedruckt werden

print: Es ist eine Anweisung, keine Funktion. Sie hat einen Rückgabewert von 1. Sie kann nur eine Variable ausgeben und erfordert keine Klammern. Arrays und Objekte können nicht ausgegeben werden, es können nur einfache Typen (z. B. int, string) gedruckt werden.

print_r: Es handelt sich um eine Funktion, die zusammengesetzte Typen wie String, Int, Float, Array, Objekt usw. drucken kann. Bei der Ausgabe des Arrays wird es durch eine Struktur dargestellt ,

Und Sie können print_r($str,true) verwenden, um print_r nicht auszugeben und den Wert nach der print_r-Verarbeitung zurückzugeben

printf: Es ist eine Funktion, die den Text formatiert und dann ausgibt (siehe C-Sprache)

sprintf: Es ist eine Funktion, ähnlich wie printf, aber sie druckt nicht, sondern gibt formatiert zurück text. Andere sind die gleichen wie printf.

var_dump: Funktion, gibt den Inhalt, den Typ der Variablen oder den Inhalt, den Typ und die Länge des Strings aus. Wird oft zum Debuggen verwendet.

2.12, $a = 1; $x =&$a; $b=$a++; 🎜>$b=1, $x=2

2.13 Funktionen zum Serialisieren und Deserialisieren von Arrays in PHP und Konvertieren von utf-8 in gbk

serialize, unserialize, iconv("utf-8", "gbk", $strs)

2.14, die Funktionen von strlen() bzw. mb_strlen Was ist Es?

strlen() kann den Platzhalter chinesischer Zeichenfolgen nicht korrekt verarbeiten. Für gb2312 ist das Ergebnis das Zweifache der Anzahl chinesischer Zeichen und für utf8 ist das Ergebnis das Dreifache Chinesische Zeichen

mb_strlen() löst dieses Problem sehr gut. Sein zweiter Parameter besteht darin, die Zeichenkodierung festzulegen.

2.15 mit PHP Mehrstufige Verzeichnisse

mkdir($path, 0777, true);

2.16, die Funktionen und Unterschiede von mysql_num_rows() und mysql_affected_rows()

Beide geben die Anzahl der Zeilen in der Ergebnismenge zurück. Der Unterschied besteht darin, dass ersteres nur für die Auswahloperation gültig ist, während letzteres für die Anzahl gültig ist Von Aktualisieren, Einfügen und Löschen betroffene Zeilen

2.17 Bitte listen Sie alle String-Suchalgorithmen auf, die Ihnen einfallen, und fügen Sie Kommentare hinzu, um sie kurz zu erläutern

Sequentielle Suche, binäre Suche, Blocksuche, Hash-Tabellensuche

2.18 Schreiben Sie das Ergebnis gemäß dem folgenden Code

$ a = 2;$b = &$a ;unset($a);

echo$b;


Obwohl unset verwendet wird, um die angegebene Variable freizugeben, unterbricht es nur die Wenn die Bindung zwischen dem Variablennamen und dem Variableninhalt festgelegt ist, bedeutet dies nicht, dass der Variableninhalt zerstört wird. Das Ausgabeergebnis ist also „2“.

$a = 2;$b = 3;$c = &$a;$c = 2;

if(($a=5)>0 || ($b=$a)>0) {

$a++;$b++;

}

echo$a.'-'.$b.'- '.$c;


Achten Sie darauf, dass das Symbol „||“ hier bereits die Bedingungen erfüllt, sodass $b=$a nicht ausgeführt werden muss. dann ist $ b immer noch 3.

Nach $a++ und $b++ werden beide Variablen um 1 erhöht und werden zu 6 und 4. Und $c verweist bereits auf $a, sodass der Wert ebenfalls 6 wird. Das endgültige Ausgabeergebnis ist „6-4-6“. Siehe „Detaillierte Erläuterung der Verwendung der PHP-Referenz (&)“

2.19. Schreiben Sie eine Funktion, um das Problem zu lösen, dass mehrere Threads gleichzeitig eine Datei lesen und schreiben

Verwenden Sie zuerst fopen, um eine Datei zu öffnen, dann flock, um sie zu sperren, dann verwenden Sie fwrite, um den Inhalt zu schreiben, dann flock, um die Sperre aufzuheben, und schließlich fclose, um das Dokument zu schließen. Schauen Sie sich den Code online an.

2.20. Methode zum Festlegen des Sitzungsablaufs, entsprechende Funktion

a.

b. Verwenden Sie session_set_cookie_params() und session_regenerate_id(true). Ändern Sie den Wert von session_id und löschen Sie das aktuelle Sitzungsarray.

Sehen Sie sich den Code online an.

2.21. PHP-Methode zum Abrufen des Dateiinhalts, entsprechende Funktion

a. file_get_contents zum Abrufen des Inhalts der Datei (kann mit abgerufen werden). get- und post-Methode zum Abrufen), die gesamte Datei wird in einen String eingelesen

b. Verwenden Sie fopen, um die URL zu öffnen und den Inhalt mithilfe der get-Methode abzurufen (mit Hilfe von die Funktion fgets()

c Verwenden Sie die Funktion fsockopen, um die URL zu öffnen (kann mit get und post abgerufen werden) und erhalten Sie mit get die vollständigen Daten, einschließlich Header und Text

d. Verwendung der Curl-Bibliothek Bevor Sie die Curl-Bibliothek verwenden, müssen Sie überprüfen, ob die Curl-Erweiterung aktiviert ist

2.22. Was sind die gängigen PHP-Array-Funktionen?

a. Grundfunktionen von Array-Operationen (array_values, array_keys, array_flip, array_search, array_reverse, in_array, array_key_exists, array_count_values)

b. Array-Segmentierung und -Füllung (array_slice, array_splice, array_chunk)

c. Array und Stack, Warteschlange (array_push, array_pop, array_shift, array_unshift)

d. Array-Sortierung (sort, asort, ksort)

e. Array-Berechnung (array_sum, array_merge, array_diff, array_intersect)

f . Andere Array-Funktionen (array_unique, shuffle)

2.23. Schreiben Sie einen Code zum Hochladen von Dateien

POST-Methode zum Hochladen von Text und Binärdateien. Mithilfe der Authentifizierungs- und Dateioperationsfunktionen von PHP können Sie vollständig steuern, wer zum Hochladen berechtigt ist und wie die Datei nach dem Hochladen verarbeitet wird.

Empfangen Sie Dateien, die über HTTP über $_FILES hochgeladen wurden. Der hochgeladene Inhalt wird in $_FILES['xx']['tmp_name'] gespeichert und dann über move_uploaded_file hochgeladen werden an den neuen Standort verlegt.

Als ich mir einige gepackte Upload-Klassen ansah, sah ich eine Funktion strrchr, die nach dem letzten Vorkommen eines bestimmten Zeichens in einer Zeichenfolge sucht. Verwenden Sie diese Funktion, um das Suffix zu erhalten.

2.24 Schreiben Sie einen regulären Ausdruck, um alle JS/VBS-Skripte auf der Webseite zu filtern (d. h. die Tags und deren Inhalte zu entfernen)

/<[^>].*?>.*?/si. Schauen Sie sich das Regex-Online-Tool an, um vorgefertigte Regex-Anweisungen zu erhalten.

2.25 Verwenden Sie PHP, um die Uhrzeit des Vortages im Format 2006-5-10 22:21:21 auszudrucken

echo date('Y-m-d H:i:s', strtotime('-1 day')); Weitere Datums-/Uhrzeitfunktionen anzeigen.

2.26. Was ist der Unterschied zwischen foo() und @foo()?

foo() führt diese Funktion aus. Alle Interpretationsfehler, Syntaxfehler und Ausführungsfehler werden auf der Seite

@foo angezeigt ( )Beim Ausführen dieser Funktion wird die obige Fehlermeldung ausgeblendet

2.27 Was sind die Unterschiede zwischen sort(), asort(), ksort(), arsort() und rsort()

sortieren: Sortieren Sie das Array. Die Array-Zellen werden vom niedrigsten zum höchsten neu angeordnet, wenn die Funktion endet

rsort: Sortieren das Array umgekehrt sortieren

asort: Array sortieren und Indexbeziehung beibehalten

arsort: Array umgekehrt sortieren und Indexbeziehung beibehalten

ksort: Sortieren Sie das Array nach Schlüsselnamen und behalten Sie die Zuordnung zwischen Schlüsselname und Daten bei. Es wird hauptsächlich zum Zuordnen von Arrays verwendet.

2.28 ? Was sind die Eingabewerte für das folgende Programm?

Eine variable Variable besteht darin, den Wert einer gewöhnlichen Variablen als Variablennamen der Variablenvariablen abzurufen. Der Ausgabewert ist „ok“.

$str = 'cd';

$$str = 'hotdog';

$$str = 'ok';echo$cd;

2.29 Was wird echo count("abc") ausgeben?

Die Funktion count() zählt die Anzahl der Zellen in einem Array oder die Anzahl der Attribute in einem Objekt, normalerweise einem Array()

Wenn SPL für ein Objekt installiert ist, kann count() durch Implementierung der Countable-Schnittstelle aufgerufen werden. Diese Schnittstelle verfügt nur über eine Methode count(), die den Rückgabewert der Funktion count() zurückgibt.

Wenn der Parameter kein Array-Typ oder ein Objekt ist, das die zählbare Schnittstelle implementiert, wird 1 zurückgegeben. Es gibt nur eine Ausnahme. Wenn der Parameter NULL ist, ist das Ergebnis 0 .

2.30 Welche Rolle spielt die GD-Bibliothek?

Die GD-Bibliothek bietet eine Reihe von APIs zur Verarbeitung von Bildern. Sie können die GD-Bibliothek zum Verarbeiten von Bildern oder zum Generieren von Bildern verwenden.

Auf Websites wird die GD-Bibliothek normalerweise zum Generieren von Miniaturansichten oder zum Hinzufügen von Wasserzeichen zu Bildern oder zum Erstellen von Berichten über Website-Daten verwendet.

3. Datenbank

3.1. Durch Überwachung wird festgestellt, dass 90 % der Datenmenge beträgt. von Abfrageanfragen Sie verweisen alle auf denselben Datenteil, und dieser Datenteil macht nur 1 % der gesamten Datenbankkapazität aus.

a. Diese 1 %-Daten unterstützen 90 % der Abfragearbeit. Diese praktischen Daten befinden sich im Datenpuffer und verbessern die Abfrageeffizienz.

b. Die Leistung wird schnell verbessert. Wenn die Effizienz immer noch nicht verbessert werden kann, können Sie eine NoSQL-Zwischenspeicherung für 1 % der Daten in Betracht ziehen.

c. Geteilte Tabelle: Es kann eine gewisse horizontale Skalierbarkeit erreicht werden, wenn der Datenbank eine Clusterlösung fehlt, und die Last kann auch auf mehrere physische Geräte aufgeteilt werden einige Leistungsengpässe.

d. Wenn die Bedingungen es zulassen, kann diese Anwendung auch durch Caching-Lösungen gelöst werden, z. B. durch das Caching von 1 % der Ergebnismenge über Memcached und Redis.

Siehe „ChinaUnix-Fragen und -Antworten-Diskussion“ und „Moralische Fragen-Diskussion“

3.2 Wie teilt MySQL Datenbanken und Tabellen auf?

Siehe „Globales ID-Generierungsschema in MySQL-Subdatenbanken und Tabellen-Subumgebungen“, „Lektionen und Erfahrungen mit Datenbank-Subtabellen zum ersten Mal“, „Einige Tipps zu MySQL-Subdatenbank- und Subtabellen-Tipps》

3.3 Was sind die MySQL-Datenbankspeicher-Engines?

MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV usw.

3.4. Der Unterschied zwischen MyISAM und InnoDB

a. Speicherstruktur: MyISAM wird in drei Dateien auf der Festplatte gespeichert. Alle Tabellen in InnoDB werden in derselben Datendatei gespeichert, im Allgemeinen 2 GB

b. Speicherplatz: MyISAM kann komprimiert werden und verfügt über weniger Speicherplatz. InnoDB benötigt mehr Arbeitsspeicher und Speicherplatz und richtet im Hauptspeicher einen eigenen dedizierten Pufferpool zum Zwischenspeichern von Daten und Indizes ein.

c. Transaktionsunterstützung: MyISAM bietet keine Transaktionsunterstützung. InnoDB bietet Transaktionsunterstützung, Fremdschlüssel und andere erweiterte Datenbankfunktionen.

d. AUTO_INCREMENT: MyISAM kann einen gemeinsamen Index mit anderen Feldern erstellen. InnoDB muss einen Index nur mit diesem Feld enthalten.

e. Unterschiede bei Tabellensperren: MyISAM unterstützt nur Sperren auf Tabellenebene. InnoDB unterstützt Transaktionen und Sperren auf Zeilenebene.

f. Volltextindex: MyISAM unterstützt den Volltextindex vom Typ FULLTEXT. InnoDB unterstützt es nicht.

g. Tabellenprimärschlüssel: MyISAM ermöglicht die Existenz einer Tabelle ohne Index oder Primärschlüssel. Wenn InnoDB keinen Primärschlüssel oder einen nicht leeren eindeutigen Index festlegt, generiert es automatisch einen 6-Byte-Primärschlüssel (für den Benutzer nicht sichtbar). Die Daten sind Teil des Primärindex und der zusätzliche Index speichert den Wert des Primärindexes.

h. Die spezifische Anzahl der Zeilen in der Tabelle: MyISAM speichert die Gesamtanzahl der Zeilen in der Tabelle. InnoDB speichert nicht die Gesamtzahl der Zeilen in der Tabelle. Aber nachdem die Were-Bedingung hinzugefügt wurde, handhaben Myisam und Innodb es auf die gleiche Weise.

i. Fremdschlüssel: MyISAM unterstützt es nicht. InnoDB unterstützt

j CURD-Operation: MyISAM Wenn Sie eine große Anzahl von SELECTs ausführen, ist MyISAM die bessere Wahl. Wenn Ihre Daten häufig INSERT oder UPDATE ausführen, sollten Sie aus Leistungsgründen eine InnoDB-Tabelle verwenden.

Siehe „MyISAM und InnoDB in MySQL Storage Engine“

3.5 Was sind die MySQL-Datentypen?

Siehe „SQL-Datentypen“

3.6. Die MySQL-Datenbank wird als Speicher für das Veröffentlichungssystem verwendet. Die Erhöhung beträgt mehr als 50.000 Artikel pro Tag wird nach drei Jahren Betrieb und Wartung erwartet.

a. Entwerfen Sie eine gute Datenbankstruktur, ermöglichen Sie teilweise Datenredundanz und versuchen Sie, Join-Abfragen zu vermeiden, um die Effizienz zu verbessern.

b. Wählen Sie den entsprechenden Tabellenfelddatentyp und die Speicher-Engine aus und fügen Sie die Indizes entsprechend hinzu.

c. Master-Slave-Lese- und Schreibtrennung der MySQL-Bibliothek.

d. Suchen Sie nach regulären Tabellen, um die Datenmenge in einer einzelnen Tabelle zu reduzieren und die Abfragegeschwindigkeit zu verbessern.

e. Fügen Sie Caching-Mechanismen wie Memcached, APC usw. hinzu.

f. Für Seiten, die sich nicht häufig ändern, generieren Sie statische Seiten.

g. Effizientes SQL schreiben

3.7 Welche Sicherheit sollte bei SQL-Anweisungen berücksichtigt werden?

Um eine Injektion zu verhindern, maskieren Sie Sonderzeichen wie „“ /, achten Sie beim Senden von Daten auf die HTML-Filterung, achten Sie auf Kommentare wie –, #, achten Sie auf Unterabfragen und Einige MySQL-Funktionen schlafen, laden_Datei usw.

3.8. Welche Funktion verwendet MYSQL, um die aktuelle Zeit abzurufen? ) ; date_format(); Weitere integrierte MySQL-Funktionen anzeigen

Engpässe relationaler Datenbanken

Memcached+MySQL

Mit der Zunahme der Besuche treten bei fast den meisten Websites, die die MySQL-Architektur verwenden, Leistungsprobleme in der Datenbank auf. Programmierer haben begonnen, in großem Umfang Caching-Technologie einzusetzen, um die Datenbank zu entlasten und zu optimieren Als unabhängiger verteilter Cache-Server bietet Memcached einen gemeinsamen Hochleistungs-Cache-Dienst, der auf dem Hash-Algorithmus basiert Hashing schien die Nachteile einer großen Anzahl von Cache-Fehlern zu lösen, die durch erneutes Hashing verursacht wurden, das durch das Hinzufügen oder Reduzieren von Cache-Servern verursacht wurde

MySQL-Master-Slave-Lese- und Schreibtrennung

Memcached kann nur den Lesedruck der Datenbank verringern. Die Konzentration des Lesens und Schreibens auf eine Datenbank führt dazu, dass die meisten Websites damit begonnen haben, Master-Slave-Replikationstechnologie zu verwenden, um eine Lese-/Schreibtrennung zu erreichen zur Verbesserung der Lese-/Schreibleistung und der Skalierbarkeit der Lesedatenbank

Untertabelle und Unterdatenbank

Während sich Web2.0 mit hoher Geschwindigkeit weiterentwickelt, treten Engpässe beim Schreibdruck der MySQL-Hauptdatenbank auf und die Datenmenge steigt weiter an. Da MyISAM Tabellensperren verwendet, treten schwerwiegende Sperrprobleme auf Bei hoher Parallelität begannen viele MySQL-Anwendungen mit hoher Parallelität, die InnoDB-Engine anstelle von MyISAM zu verwenden. Gleichzeitig ist es populär geworden, Untertabellen und Unterdatenbanken zu verwenden, um den Schreibdruck und die Erweiterungsprobleme des Datenwachstums zu lindern.

Der Skalierbarkeitsengpass von MySQL

Die Entwicklung von MySQL-Anwendungen in einer Umgebung mit großem Datenvolumen und hoher Parallelität wird immer komplexer und komplexer. Technisch anspruchsvoll. Die Beherrschung der Regeln von Untertabellen und Unterdatenbanken erfordert Erfahrung. Bei Unterdatenbanken mit Unterdatenbanken und Tabellen treten ab einem bestimmten Zeitpunkt Erweiterungsprobleme auf. Es gibt auch eine Änderung der Anforderungen, die möglicherweise eine neue Teilbibliotheksmethode erforderlich macht. MySQL-Datenbanken speichern häufig auch einige große Textfelder, was zu sehr großen Datenbanktabellen führt, was die Datenbankwiederherstellung sehr langsam macht und eine schnelle Wiederherstellung der Datenbank erschwert. Unter Big Data ist der E/A-Druck hoch und die Tabellenstruktur lässt sich nur schwer ändern. Dies sind die Probleme, mit denen Entwickler derzeit konfrontiert sind, wenn sie MySQL verwenden.

3.10. Was ist eine relationale Datenbank?

Relationale Datenbank ist eine Datenbank, die das relationale Modell unterstützt. Einfach ausgedrückt bezieht sich das relationale Modell auf das zweidimensionale Tabellenmodell.

Relationale Datenbanken speichern Daten in Form von Zeilen und Spalten, um sie für Benutzer leichter verständlich zu machen. Diese Reihe von Zeilen und Spalten wird als Tabelle bezeichnet, und eine Gruppe von Tabellen bildet eine Datenbank.

4. Linux-Grundlagen

Einige Methoden zur Überprüfung der aktuellen Systemlastinformationen unter Linux

Siehe „Anzeigen von Systemressourcen und -lasten sowie Leistungsüberwachung unter Linux“

4.2, grundlegende Tastenkombinationen für vim

Siehe zu „Verlauf“ Die umfassendste Vim-Tastenkombination – vom Einstieg bis zum Fortgeschrittenen》

4.3 Bitte erläutern Sie die Verwendung der folgenden 10 Shell-Befehle top, ps, mv, find, df , cat, chmod, chgrp, grep, wc

top Überprüfen Sie die von Systemprozessen belegten Ressourcen. ps zeigt detaillierte Prozessinformationen an.

mv dient dazu, eine Datei oder ein Verzeichnis umzubenennen oder eine Datei von einem Verzeichnis in ein anderes zu verschieben.

find Eine Datei oder ein Verzeichnis suchen.

df Überprüfen Sie die Speicherplatznutzung des Dateisystems.

cat zeigt den Dateiinhalt an, erstellt eine neue Datei und führt den Dateiinhalt zusammen.

chmod ändert die Zugriffsberechtigungen von Dateien oder Verzeichnissen.

chgrp ändert die Gruppe, zu der eine Datei oder ein Verzeichnis gehört.

grep ist ein leistungsstarkes Textsuchwerkzeug.

wc zählt die Dateninformationen der angegebenen Datei, wie z. B. die Anzahl der Zeilen und die Anzahl der Bytes

4.4 core-Datei und wofür wird sie verwendet?

core ist der Kernel des Unix-Systems. Wenn der Speicher Ihres Programms die Grenzen überschreitet, beendet das Betriebssystem Ihren Prozess und speichert den aktuellen Speicherstatus zur weiteren Analyse in der Kerndatei.

Programmierer können das Problem über die Kerndatei herausfinden. Es zeichnet eine detaillierte Statusbeschreibung auf, wenn das Programm hängt.

5. Netzwerkgrundlagen

5.1 Notieren Sie den Zweck und den Standardport der folgenden Dienste: ftp, ssh, http, telnet, https

Das FTP-Dateiübertragungsprotokoll ist eine gängige Dateikopiermethode. Der Standardwert ist 20 für die Datenverbindung und 21 für den Steuerverbindungsport.

SSH stellt eine Verbindung zum Server her, um Vorgänge auszuführen. Die Standardportnummer ist 22.

HTTP Hypertext Transfer Protocol bietet eine Methode zum Veröffentlichen und Empfangen von HTML-Seiten. Die Portnummer ist 80

Das Telnet-Protokoll ist ein Mitglied der TCP/IP-Protokollfamilie. Es ist das Standardprotokoll und die Hauptmethode für Internet-Remote-Anmeldedienste. Der Standardport ist 23.

HTTPS basiert auf dem sicherheitsorientierten HTTP-Kanal und ist einfach eine sichere Version von HTTP.

5.2. Schreiben Sie alle möglichen HTTP-Rückgabestatuswerte auf Denken Sie über ihre Verwendung nach und erklären Sie sie (z. B.: Gibt 404 zurück, was angibt, dass die Seite nicht gefunden wurde)

200 OK Die Anfrage ist erfolgreich (gefolgt von Antwortdokumenten auf GET- und POST-Anfragen)

301 Permanent verschoben Die angeforderte Seite wurde auf die neue URL verschoben

302 Gefunden Die angeforderte Seite wurde vorübergehend auf die neue URL verschoben

304 Nicht geändert, der Server teilt dem Client mit, dass das ursprünglich zwischengespeicherte Dokument weiterhin verwendet werden kann

401 Nicht autorisiert Die angeforderte Seite erfordert einen Benutzernamen und ein Passwort

403 Forbidden Der Zugriff auf die angeforderte Seite ist verboten

500 Interner Serverfehler, die Anfrage wurde nicht abgeschlossen. Der Server ist auf eine unvorhersehbare Situation gestoßen

502 Bad Gateway, die Anfrage wurde nicht abgeschlossen. Der Server hat eine ungültige Antwort vom Upstream-Server erhalten

503 Dienst nicht verfügbar Die Anfrage wurde nicht abgeschlossen. Der Server ist vorübergehend überlastet oder abgestürzt

Weitere Statuscodes finden Sie unter „HTTP-Statusmeldungen“

5.3. Was ist der Unterschied? zwischen POST und GET?

a. GET dient zum Abrufen von Daten vom Server und POST dient zum Senden von Daten an den Server.

b Das HTTP-Protokoll wird über die URL-Parameter zum Empfang übergeben, während es sich bei POST um Entitätsdaten handelt, die über das Formular

c übermittelt werden. Die von GET übertragene Datenmenge ist gering und kann nicht größer sein als 2 KB. Die von POST übertragene Datenmenge ist groß und unterliegt im Allgemeinen standardmäßig keiner Einschränkung. Aber theoretisch beträgt die maximale Menge in IIS4 80 KB und in IIS5 100 KB

d Die GET-Sicherheit ist sehr niedrig und die POST-Sicherheit hoch

5.4. Bitte schreiben Sie den HTTP-Header und erfüllen Sie die folgenden Anforderungen:

1) Dies ist eine Post-Anfrage

2 ) Ziel: http://www.example.com:8080/test

3) POST-Variable: Benutzername: test pwd: test2 intro: Hallo Welt!

4) Enthält die folgenden COOKIE-Informationen: cur_query: you&me

POST http://www.example.com:8080/test HTTP/1.1

Cookie:cur_query=you&me

username=test&pwd:=test2&intro=Hallo Welt!


Weitere Attribute anzeigen „Detaillierte Erläuterung des HTTP-Headers“

6. Server-Grundlagen

6.1. Vergleich der Vor- und Nachteile von Apache und Nginx

a. Vorteile von Nginx gegenüber Apache:

Leicht, beansprucht weniger Speicher und Ressourcen als Apache. Hochmodulares Design, das Schreiben von Modulen ist relativ einfach

Anti-Parallelität, Nginx verarbeitet Anfragen asynchron und nicht blockierend, mehrere Verbindungen (10.000 Ebenen) können einem Prozess entsprechen, während Apache blockiert Es handelt sich um ein synchrones Multiprozessmodell. Bei hoher Parallelität kann Nginx eine um mehr als das Dreifache höhere Leistung aufrechterhalten >b. Vorteile von Apache gegenüber Nginx:

Apache's Rewrite ist leistungsfähiger als Nginx's Rewrite. Es gibt im Grunde alles, was man sich vorstellen kann. Es ist relativ stabil und weist relativ mehr Fehler auf

c. Grund:

Profitieren Sie von Nginx mit dem neuesten Epoll- (Linux 2.6-Kernel) und Kqueue- (Freebsd) Netzwerk-E/A-Modell, während Apache das traditionelle verwendet Wählen Sie Modell.

Derzeit verwenden Squid und Memcached, die unter Linux einem hohen gleichzeitigen Zugriff standhalten können, beide das Epoll-Netzwerk-E/A-Modell.

Um das Lesen und Schreiben einer großen Anzahl von Verbindungen zu bewältigen, ist das von Apache verwendete ausgewählte Netzwerk-E/A-Modell sehr ineffizient.

Siehe „Vergleich der Vor- und Nachteile von Apache und Nginx“

Der Unterschied zwischen CGI und FastCGI

CGI: Es wurde im Jahr 2000 oder früher häufiger verwendet. In der Vergangenheit verarbeiteten Webserver im Allgemeinen nur statische Anfragen. Basierend auf dem Inhalt dieser Anfrage gab der Webserver einen neuen Prozess aus, der extern ausgeführt wurde C-Programme (Oder Perl-Skripte ...), dieser Prozess gibt die verarbeiteten Daten an den Webserver zurück. Schließlich sendet der Webserver den Inhalt an den Benutzer und der gerade gegabelte Prozess wird ebenfalls beendet. Wenn der Benutzer das nächste Mal eine Änderung des dynamischen Skripts anfordert, leitet der Webserver erneut einen neuen Prozess ab und der Prozess wird immer wieder fortgesetzt.

In das Web integriertes Modul: Später erschien eine fortschrittlichere Methode, bei der der Webserver über einen integrierten Perl-Interpreter oder PHP-Interpreter verfügen kann. Mit anderen Worten, diese Interpreter werden in Module umgewandelt, und der Webserver startet diese Interpreter, wenn er gestartet wird. Wenn neue dynamische Anfragen eingehen, analysiert der Webserver diese Perl- oder PHP-Skripte selbst, sodass kein erneuter Fork eines Prozesses erforderlich ist und die Effizienz verbessert wird.

fastcgi: Wenn der Webserver eine Anfrage empfängt, wird ein Prozess nicht erneut gegabelt (da dieser Prozess beim Starten des Webservers gestartet und nicht beendet wird), web Der Server Übergibt den Inhalt direkt an diesen Prozess (Interprozesskommunikation, aber Fastcgi verwendet eine andere Methode, TCP-Kommunikation). Dieser Prozess verarbeitet die Anfrage nach dem Empfang, gibt das Ergebnis an den Webserver zurück und wartet schließlich auf die nächste Anfrage , nicht raus.

Siehe „Was ist der Unterschied zwischen Fastcgi und CGI“

6.3, der Unterschied zwischen Memcached und Redis

a. In Redis werden nicht alle Daten immer im Speicher gespeichert. Dies ist der größte Unterschied im Vergleich zu Memcached.

b. Redis hat in vielerlei Hinsicht die Eigenschaften einer Datenbank oder ist ein Datenbanksystem, während Memcached nur ein einfacher K/V-Cache ist.

c. Bei Daten von mehr als 100.000 ist die Leistung von Memcached höher als die von Redis.

d. Wenn Sie über die Effizienz der Speichernutzung sprechen möchten: Wenn Sie einfachen Schlüsselwertspeicher verwenden, hat Memcached eine höhere Speicherauslastung und wenn Redis eine Hash-Struktur für Schlüsselwerte verwendet Aufgrund der kombinierten Komprimierung ist die Speicherauslastung höher als bei Memcached. Dies hängt natürlich von Ihrem Anwendungsszenario und den Dateneigenschaften ab.

e. Wenn Sie Anforderungen an Datenpersistenz und Datensynchronisierung haben, wird empfohlen, Redis zu wählen, da Memcached nicht über diese beiden Funktionen verfügt. Auch wenn Sie nur hoffen, dass zwischengespeicherte Daten nach einem Upgrade oder Neustart des Systems nicht verloren gehen, ist es ratsam, sich für Redis zu entscheiden.

f. Redis und Memcache unterscheiden sich kaum in der Schreibleistung, während Memcache in der Leseleistung stärker ist, insbesondere in der Batch-Leseleistung.

Siehe „Der Unterschied zwischen Redis und Memcached“

6.4. Was sind die Vor- und Nachteile von PHP?

Vorteile:

a. Einfache Syntax, schneller Einstieg und es gibt viele sehr praktische Entwicklungstools, wie z. B. Zend Studio. EclipsePHP Studio usw.

b. Plattformübergreifend und kostenlos. Sie können LAMP (Linux Apache MYSQL, PHP) schnell erstellen und viele gängige Datenbanksysteme wie MYSQL, Oracle unterstützen. PostgreSQL usw.

c. Unterstützt aktuelle Mainstream-Technologien wie WebService, XML, AJAX usw.

d. PHP verfügt bereits über ein sehr ausgereiftes objektorientiertes System und kann unterstützen Objektorientierte Entwicklung (PHP5)

e. Es gibt viele gute bestehende Frameworks, Open-Source-Foren und Blogs usw.

f . Fortsetzung Die Updates und Wartung sowie die Unterstützung der Community und die gemeinsamen Bemühungen vieler Technologiebegeisterter haben dazu geführt, dass PHP auch auf vielen bekannten Websites als Entwicklungssprache verwendet wird

Nachteile:

a Die Multithreading-Unterstützung ist nicht sehr gut und es können nur einige einfache simulierte Threads ausgeführt werden

b. Die Syntax ist nicht streng genug, wenn Java in der Vergangenheit sehr vertraut war. Wenn beispielsweise keine Variable definiert wurde, können Sie direkt

c. Der vielleicht schmerzhafteste Teil für erfahrene PHP-Programmierer ist der Interpretations- und Betriebsmechanismus von PHP. Dieser Betriebsmechanismus ermöglicht die Wiederverwendung aller zugehörigen Ressourcen, nachdem jede PHP-Seite interpretiert und ausgeführt wurde. Mit anderen Worten: PHP hat keine Möglichkeit, ein Objekt auf Sprachebene im Speicher resident zu machen. In PHP sind alle Variablen auf Seitenebene. Unabhängig davon, ob es sich um globale Variablen oder statische Mitglieder der Klasse handelt, werden sie nach der Ausführung der Seite gelöscht. Nehmen Sie als Beispiel JSP. In JSP hat der Bereich von Java Bean vier gültige Werte: Seite, Anwendung, Sitzung und Anforderung, die jeweils den vier Lebensdauern von Seite, Programm, Sitzung und Anforderung entsprechen. Aber in PHP gibt es nur eine Lebensdauer von Page.

Verwandte Empfehlungen:

Teilen der wichtigsten PHP-Interviewfragen (1)

Das obige ist der detaillierte Inhalt vonZusammenfassende Weitergabe der wichtigsten PHP-Interviewfragen (2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn