Heim > Artikel > Backend-Entwicklung > Grundlegende PHP-Interviewfragen
In diesem Artikel erfahren Sie einige grundlegende Interviewfragen zu PHP. Interessierte Freunde können einen Blick darauf werfen
csrfWas ist:
CSRF-Cross-Site-Request-Forgery,
1. Benutzer C öffnet den Browser, besucht die vertrauenswürdige Website A und gibt den Benutzernamen und das Passwort ein Aufforderung zur Anmeldung bei Website A;
2. Nachdem die Benutzerinformationen überprüft wurden, generiert Website A Cookie-Informationen und gibt sie an den Browser zurück. Zu diesem Zeitpunkt meldet sich der Benutzer erfolgreich bei Website A an und kann sie senden Anfragen an Website A normalerweise;
3 Bevor der Benutzer Website A verlässt, öffnet er eine TAB-Seite im selben Browser, um Website B zu besuchen , es gibt einen anstößigen Code zurück und stellt eine Anfrage zum Zugriff auf die Website A von Drittanbietern.
5 Nach dem Empfang dieser anstößigen Codes überträgt der Browser die Cookie-Informationen entsprechend der Anfrage von Website B Fragen Sie nach dem Wissen des Benutzers. Website A weiß nicht, dass die Anfrage tatsächlich von B initiiert wurde
, daher verarbeitet sie die Anfrage mit den Berechtigungen von C basierend auf den Cookie-Informationen von Benutzer C, wodurch der Schadcode von Website B ausgeführt wird
PHP
und MYSQL Transaktionsverarbeitung: 1. Verwenden Sie begin, rollback, commit, um
begin Start zu implementieren eine Transaktion
Rollback Transaktions-Rollback
Commit Transaktionsbestätigung
2. Verwenden Sie set direkt, um den automatischen Commit-Modus von MySQL zu ändern
Die 4
Hauptmerkmale von Transaktionen (ACID): Atomizität:
Eine Transaktion ist eine logische Arbeitseinheit der Datenbank, und alle Änderungen an der Datenbank werden ausgeführt ausgeführt werden. Oder nicht alle ausführen.
Konsistenz:
Vor und nach einer Transaktion erfüllt der Zustand der Datenbank alle Integritätsbeschränkungen.
Isolierung:
Gleichzeitig ausgeführte Transaktionen sind isoliert und eine hat keinen Einfluss auf die andere. Wenn zwei Transaktionen gleichzeitig ausgeführt werden und dieselbe Funktion ausführen, stellt die Isolierung der Transaktionen sicher, dass jede Transaktion im System denkt, dass nur diese Transaktion das System verwendet. Diese Eigenschaft wird manchmal als Serialisierung bezeichnet. Um Verwechslungen zwischen Transaktionsvorgängen zu vermeiden, müssen Anforderungen serialisiert oder deserialisiert werden, sodass jeweils nur eine Anforderung für dieselben Daten vorliegt.
Durch Festlegen der Isolationsstufe der Datenbank können unterschiedliche Isolationseffekte erzielt werden.
Dauerhaftigkeit:
Nach Abschluss der Transaktion bleiben die durch die Transaktion an der Datenbank vorgenommenen Änderungen in der Datenbank erhalten und werden nicht zurückgesetzt.
xssSo verhindern Sie:
XSS ist auch namens CSS, vollständiger Name CrossSiteScript, Cross-Site-Scripting-Angriff
zur Verhinderung von: Skriptinjektion, Escape-Filterung von Skript-Tags.
Der Unterschied zwischen Union und Unionall
: Union entfernt Duplikate, Unionall nicht .
RBAC Rollenbasierte Berechtigungskontrolle:5 Tabellen Benutzertabelle, Rollentabelle, Funktionstabelle und mehr Es gibt miteinander verknüpfte Tabellen: Benutzer- und Rollentabelle, Rollen- und Funktionstabelle
redisPersistenz:
Speicher-Snapshot (RDB) RDB-Persistenz kann Point-in-Time-Snapshots des Datensatzes innerhalb eines bestimmten Zeitintervalls generieren Protokoll (AOF) AOF-Persistenz zeichnet alle von der ausgeführten Schreibvorgänge auf Serverbefehle und stellen Sie den Datensatz wieder her, indem Sie diese Befehle beim Starten des Servers erneut ausführen.
Untertabelle:
Reduzieren Sie die Belastung der Datenbank und verkürzen Sie die Abfragezeit. Vertikale Tabellenaufteilung: Die vertikale Aufteilung erfolgt nach Feldern.
Horizontale Tabellenaufteilung: Teilen Sie die Datenzeilen basierend auf den Werten einer oder mehrerer Datenspalten in zwei unabhängige Tabellen ein.
Wie kann sichergestellt werden, dass die eingefügte ID
beim horizontalen Tabellen-Sharding eindeutig ist?
Sie können einen neuen ID-Dienst erstellen und die Benutzer-ID in der Datenbank oder Redis speichern.
j
querySelektor:1. Element 2. Attribut 3.id 4. Klasse 5. Global .
Inline- und Blockelemente
Innerhalb von Zeilen: , ,
, ,
Innerhalb von Blöcken:
,
,< ; h1>
Konvertierung: display:inline,block,inline-block.
Unterschied:
block,
①Beginnen Sie immer in einer neuen Zeile und belegen Sie eine ganze Zeile.
②Höhe, Zeilenhöhe sowie Ränder und Abstand können alle gesteuert werden , es hat nichts mit Inhalt zu tun
④ Es kann Inline-Elemente und andere Blockelemente aufnehmen.
Zeile,
① und andere Elemente befinden sich alle in einer Zeile
② Höhe, Zeilenhöhe sowie Rand- und Füllteile können geändert werden; ③Die Breite bezieht sich nur auf den Inhalt
④Inline-Elemente können nur Text oder andere Inline-Elemente aufnehmen.
Gruppenabfrage
: orderby
Die Anzahl der Männer und Frauen in Die Tabelle ist 20–30
:
Wählen Sie die Anzahl (Geschlecht) aus der Tabelle aus, in der das Alter zwischen 20 und 30 nach Geschlecht gruppiert ist
ORM:
Der Object Relational Mapping (ORM)-Modus ist eine Technologie zur Lösung der Diskrepanz zwischen objektorientierten und relationalen Datenbanken
LinuxPort anzeigen: Pinsel ausgewählte Datei: Prozess anzeigen:netstat-ntlp //Alle aktuellen TCP-Ports anzeigen· netstat- ntulp |. grep80 Portnutzung·
LinuxAnzeige, wie viele Befehle ausgeführt werden: Verlauf
Dateioperationsfunktion: open Öffnen Sie die Datei
fstat Holen Sie sich die Datei
file Lesen Sie die gesamte Datei in ein Array
fclose Schließe die Datei fwrite In eine Datei schreiben (sicher für Binärdateien)
file_get_contents() liest die gesamte Datei in einen String
Mehrere Möglichkeiten, eine Datei zu öffnen:
Fopen(), file_get_contents()
Lesen und schreiben, anhängen
php
Befehl „Ordner löschen“Verknüpfung aufheben();
Chinesischer String-Abfang: mb_substr
mb_substr($str,$start, $length, $encoding)
$str, der String, der abgeschnitten werden muss
$start, der Startpunkt der Kürzung, Der Startpunkt ist 0
$length, die Anzahl der abzufangenden Wörter $encoding, Webseitenkodierung, z. B. utf-8 , GB2312, GBK
Der Unterschied zwischen
D und M:
M instanziiert die Basisklasse, und D kann die benutzerdefinierte Klasse
Tabelle
Alternative Zeilenfarbänderung: Verwenden Sie JQ, um die geraden und ungeraden Zahlen der Tabelle tr td zu identifizieren und die entsprechenden ungeraden und geraden Zahlen anzugeben. Verschiedene CSS-Stile und unterschiedliche Hintergründe können Interlaced-Farbwechseleffekte erzielen. Wenn die Maus vorbeigeht, ruft JQ den trtd-Hintergrundsatz separat auf, sodass sich die Hintergrundfarbe ändert, wenn die Maus vorbeigeht.ajaxSynchron und asynchron:
Synchron auf das Rückgabeergebnis vom Server warten und dann andere Vorgänge ausführenNachdem Sie die Anforderung asynchron gesendet haben, führen Sie andere Vorgänge direkt aus, ohne auf das Rückgabeergebnis vom Server zu warten.
Die Standardeinstellung ist: asynchron
LinuxAlle Dateien anzeigen: ls
Setze ein p auf ein anderes p:
Je größer der Z-Index-Wert ist, desto höher ist er (); // Öffnen Sie einen Ausgabepuffer. Alle Ausgabeinformationen werden nicht mehr direkt an den Browser gesendet, sondern im Ausgabepuffer gespeichert.
Ob_clean(); //Löschen Sie den Inhalt des internen Puffers, ohne den Puffer zu schließen (keine Ausgabe).
OB_END_CLEAN (); // Inhalt des internen Puffers löschen und Puffer schließen (keine Ausgabe). Ob_get_clean(); //Den Inhalt des internen Puffers zurückgeben und den Puffer schließen. Entspricht der Ausführung von ob_get_contents() und ob_end_clean()ob_flush(); // Den Inhalt des internen Puffers an den Browser senden, den Inhalt des Puffers löschen und den Puffer nicht schließen. Ob_end_flush(); //Sende den Inhalt des internen Puffers an den Browser, lösche den Inhalt des Puffers und schließe den Puffer.
Ob_get_flush(); // Den Inhalt des internen Puffers zurückgeben, den Puffer schließen und dann den Inhalt des Puffers freigeben. Entspricht ob_end_flush() und gibt den Pufferinhalt zurück. Flush(); // Den von ob_flush freigegebenen Inhalt und den Inhalt, der nicht im PHP-Puffer ist, an den Browser ausgeben und ihn ausgeben. Ob_get_contents(); //Den Inhalt des Puffers ohne Ausgabe zurückgeben.OB_GET_LENGTH (); // Die Länge des internen Puffers wird zurückgegeben. Wenn der Puffer nicht aktiviert ist, gibt die Funktion false zurück.
Ob_get_level(); //Gibt die Verschachtelungsebene des Ausgabepuffermechanismus zurück.
ob_get_status(); //Status der Ausgabepuffer abrufen 🎜>
So geht's einen Einkaufswagen erstellen? Verfahren. .1. Fügen Sie das Produkt in den Warenkorb
1. Fügen Sie zuerst einen Link auf der Seite hinzu
1. Holen Sie sich zuerst die Produkt-ID
2. Fragen Sie das Produkt anhand der ID aus der Datenbank ab.
3. Fügen Sie das Produkt zum Warenkorb hinzu
a. Holen Sie sich den Warenkorb aus der Sitzung, wenn nicht, erstellen Sie einen neuen
Stellen Sie fest, ob das Produkt ist im Warenkorb Existiert? Wenn nicht, ist die Menge 1. Wenn sie vorhanden ist, wird die Menge um 1 erhöht
c. Problem: Unser Einkauf verwendet eine HashMap-Sammlung, der Schlüssel ist eindeutig, die einzige Möglichkeit, den Schlüssel sicherzustellen, ist über den HashCode und die Equals-Methode
Also verwenden wir Beim Umschreiben müssen wir die Methoden hashCode und equal der Klasse Product neu schreiben. Beim Umschreiben müssen wir nur die ID-Werte vergleichen.
2. Warenkorb-Artikel anzeigenUnser Warenkorb existiert in der Sitzung. Wir müssen nur die Cartt-Karte in der Sitzung auf der Seite cart.jsp sammeln und anzeigen.
1. Bedienen Sie die Artikel im Warenkorb
2. Durch Klicken auf das + oder - Zeichen können Sie die Menge der Artikel im Warenkorb ändern
3 . Wenn Sie auf das + oder - Zeichen klicken, rufen wir eine Funktion in Javascript auf. changeCount(); Über diese Funktion senden wir eine Anfrage an den Server, rufen die Daten im Warenkorb von der Sitzung auf der Serverseite ab und ändern die angegebene Anzahl von Artikeln im Warenkorb basierend auf den übermittelten Daten, bevor wir zu zurückkehren die Warenkorbseite zur Anzeige.
Wie erhalte ich den Umsatz des letzten Monats? Drei Monate? Wie wäre es mit einem Jahr?
Ein bestimmtes Feld in der Datenbank abfragen
Wie rufe ich 300.000 Daten innerhalb von 3 Sekunden ab? Welcher Index soll erstellt werden?
Gewöhnlicher IndexIndextyp:
Gewöhnlicher Index, eindeutiger Index, Primärschlüsselindex, kombinierter Index
Der Unterschied zwischen Redis und Memecache ist:
1. Speichermethode: Memecache speichert alle Daten im Speicher und bleibt nach einem Stromausfall hängen. Die Daten dürfen die Speichergröße nicht überschreiten. Ein Teil von Redis wird auf der Festplatte gespeichert, was die Datenpersistenz gewährleistet. 2. Datenunterstützungstyp: Redis bietet viel mehr Datenunterstützung als Memecache. 3. Das zugrunde liegende Modell ist anders: Die neue Version von Redis baut direkt seinen eigenen VM-Mechanismus auf, denn wenn das allgemeine System Systemfunktionen aufruft, verschwendet es eine gewisse Zeit dafür umziehen und anfordern. 4. Verschiedene Betriebsumgebungen: Redis unterstützt derzeit offiziell nur LINUX, sodass keine Unterstützung für andere Systeme erforderlich ist, sodass Sie Ihre Energie besser auf die Optimierung dieser Systemumgebung verwenden können Später schrieb ein Team von Microsoft einen Patch dafür. Aber es wird nicht auf den Kofferraum gelegtSKU So geht's:
Attributspezifikationen. Tatsächlich ist SKU die Produktinventareinheit, einschließlich der Produkttabelle, der Produktattributtabelle und der Produkttabelletp Konfiguration Datei: common/config.php
php Datentyp:
Vier Skalare Typ: boolean (Boolean) Integer (Ganzzahl) float (Gleitkommatyp, auch Double genannt) string (Zeichenfolge). ) Zwei zusammengesetzte Typen: Array (Array) Objekt (Objekt) Schließlich gibt es zwei spezielle Typen:Ressource (Ressourcen)
NULL (NULL)
Einzelmodus:
Die Hauptmerkmale des Einzelbeispielmodus Es handelt sich um „drei private und eine öffentliche“:
Sie benötigen eine private statische Mitgliedsvariable, um die einzige Instanz der Klasse zu speichern
Der Konstruktor muss als privat deklariert werden, um zu verhindern, dass externe Programme eine neue erstellen Objekt und Verlust des Singletons. Die Bedeutung von
Die Klonfunktion muss als privat deklariert werden, um zu verhindern, dass das Objekt geklont wird.
Für den Zugriff darauf muss eine öffentliche statische Methode (normalerweise mit dem Namen getInstance) bereitgestellt werden Instanz und gibt somit einen Verweis auf die eindeutige Instanz zurück.
Anzahl der Männer und Frauen zwischen 20 und 30 abfragen
: //Anzahl (Geschlecht) auswählen aus Tabelle, in der Alter zwischen 20 und 30 nach Geschlecht gruppiert ist
Wählen Sie die Anzahl(*) aus dem Tabellennamen aus, in der Alter zwischen 20 und 30 nach Alter gruppiert ist
Es gibt drei Zugriffsmodifikatoren in PHP
, nämlich: public (öffentlich, Standard)
protected (geschützt) )
privat (privat)
Bereich des Zugriffsmodifikators:Wenn ein Mitglied einer Klasse als öffentlicher Zugriffsmodifikator deklariert wird, kann auf dieses Mitglied zugegriffen werden und durch externen Code manipuliert werden.
privat (privat)
Als privat definierte Mitglieder sind für alle Mitglieder innerhalb der Klasse sichtbar und unterliegen keinen Zugriffsbeschränkungen. Der Zutritt außerhalb der Klasse ist nicht gestattet.
protected (protected)
protected ist etwas komplizierter Es wird als geschütztes Mitglied deklariert und erlaubt nur den Zugriff durch Unterklassen dieser Klasse.
mysql int
Speicher: Die Bigint-Speichergröße beträgt 8 Byte. Die int-Speichergröße beträgt 4 Byte. Die Smallint-Speichergröße beträgt 2 Byte. tinyint Ganzzahlige Daten von 0 bis 255. Die Speichergröße beträgt 1 Byte. Geltungsbereich des Cookies: Domain selbst. Alle Domänennamen unter Domäne. Hiermit wird eine Berechtigung für das Cookie festgelegt. Wenn die Domäne auf „leer“ gesetzt ist, wird als Domäne standardmäßig der aktuelle Domänenname verwendet und Subdomänen unter diesem Domänennamen können Cookies empfangen. Wenn der Domänenparameter jedoch seinen Subdomänennamen festlegt, können nicht alle Domänennamen empfangen werden, einschließlich dieses Subdomänennamens. LinuxBefehl zum Anzeigen des Inhalts der Protokolldatei tail, Katze, Tac, Kopf, Echo tail-f test.log Draufsicht Speicher df-lh Festplatte anzeigen ps-a alle anzeigen Prozess Konstante: Variablenverwendung $: Beim Definieren und Verwenden von Konstanten Es gibt Es ist nicht erforderlich, das $-Zeichen zu verwenden. Der Wert einer Konstante muss ein fester Wert sein und darf keine Variable, kein Klassenattribut, das Ergebnis einer mathematischen Operation oder eines Funktionsaufrufs sein. Konstanten können auch in Schnittstellen definiert werden. Abstrakte Klassen können nicht instanziiert werden. Abstrakte Klassen können statische Methoden haben. In abstrakten Klassen kann es keine abstrakten Methoden geben. Gewöhnliche Methoden, in der Klasse gespeichert, nur eine Kopie Statische Methoden, auch in der Klasse gespeichert, nur eine Kopie Der Unterschied liegt darin: Gewöhnliche Methoden benötigen Objekte zum Aufrufen und müssen $this binden. Das heißt, gewöhnliche Methoden müssen Objekte haben und diese dann aufrufen lassen Und statisch Methoden gehören nicht zu Which-Objekt, daher ist es nicht erforderlich, $this zu binden. Das heißt, Sie können ohne Objekt aufrufen: Auf sie kann ohne Instanziierung zugegriffen werden. Die statischen Mitgliedsvariablen der Klasse gehören nur zu den Klassenmitgliedern dieser Klasse : Eine ist in der Klasse definiert und die andere ist im Konstruktor definiert. Der Unterschied zwischen Methoden und Funktionen: Funktionen existieren alleine, während Methoden von Klassen abhängen und nur über Objekte aufgerufen werden können. Ob Funktionen in Klassendateien definiert werden können: Nein Wertübertragung und Wertreferenz: (1) Übergabe als Wert: Alle Änderungen am Wert innerhalb des Funktionsbereichs werden außerhalb der Funktion ignoriert (2) Übergabe als Referenz: Jede Änderung am Wert innerhalb des Der Funktionsumfang wird außerhalb der Funktion ignoriert. Diese Änderungen können sich auch außerhalb der Funktion widerspiegeln (3) Vor- und Nachteile: A: Bei der Wertübergabe muss PHP den Wert kopieren. Insbesondere bei großen Strings und Objekten kann dies ein kostspieliger Vorgang sein. B. Bei der Referenzübergabe ist kein Kopieren des Werts erforderlich, was sich sehr positiv auf die Leistungsverbesserung auswirkt. Verhindern Sie die wiederholte Übermittlung von Bestellungen: 1. Verwenden Sie JS, um die Schaltfläche zu deaktivieren, nachdem Sie einmal darauf geklickt haben. Durch die Verwendung dieser Methode können mehrere Klicks verhindert werden. 2. Legen Sie den Sitzungswert fest. Löschen Sie ihn, nachdem Sie ihn einmal übermittelt haben. Wenn kein Sitzungswert vorhanden ist, lassen Sie die Übermittlung nicht zu. Es gibt 3 Cookies das gleiche String-Funktionen: strlen();strpos();echo();implode() ;trim(); usw.,, String-Umkehrfunktion: strrev, mb_string; Der Unterschied zwischen http1.0 und http1.1: HTTP1.1 unterstützt dauerhafte Verbindungen. Über eine TCP-Verbindung können mehrere HTTP-Anfragen und -Antworten übertragen werden, wodurch der Verbrauch und die Verzögerung beim Herstellen und Schließen von Verbindungen reduziert werden. HTTP1.1 ermöglicht es dem Client auch, die nächste Anfrage zu stellen, ohne auf die Rückgabe des Ergebnisses der vorherigen Anfrage zu warten, aber der Server muss die Antwortergebnisse in der Reihenfolge zurücksenden, in der die Client-Anfrage empfangen wird , Um sicherzustellen, dass der Client den Antwortinhalt jeder Anfrage unterscheiden kann, wird dadurch auch die für den gesamten Download-Prozess erforderliche Zeit erheblich reduziert HTTP1.0 unterstützt das Host-Request-Header-Feld nicht . H Das Host-Anfrage-Header-Feld wurde in TTP1.1 hinzugefügt. Der Unterschied zwischen globalen Variablen und lokalen Variablen: 1. Verschiedene Geltungsbereiche: Der Geltungsbereich globaler Variablen ist Das gesamte Programm, während der Bereich lokaler Variablen die aktuelle Funktion oder Schleife usw. ist. 2. Die Speicherspeichermethoden sind unterschiedlich: Globale Variablen werden im globalen Datenbereich gespeichert, lokale Variablen werden im globalen Datenbereich gespeichert der Stapelbereich 3 .Unterschiedliche Lebensdauern: Die Lebensdauer globaler Variablen ist die gleiche wie die des Hauptprogramms. Sie werden zerstört, wenn das Programm innerhalb der Funktion oder innerhalb der Schleife zerstört wird vorhanden sein, wenn die Funktion oder die Schleife beendet wird 4. Sie werden auf unterschiedliche Weise verwendet: Globale Variablen können nach ihrer Deklaration in allen Teilen des Programms verwendet werden, lokale Variablen können jedoch nur lokal verwendet werden. Innerhalb der Funktion werden lokale Variablen zuerst vor globalen Variablen verwendet . Zu beachten ist, dass lokalen Variablen nicht der Wert einer globalen Variablen mit demselben Namen zugewiesen werden kann. Frontend-Optimierung: Erstens: Inhaltsorientierte Optimierung 1. Reduzieren HTTP-Anfrage 2. Reduzieren Sie DNS-Suchvorgänge 3. Vermeiden Sie Weiterleitungen 4. Verwenden Sie Ajax-Caching 5. Verzögertes Laden von Komponenten 6. Komponenten vorladen 7. Anzahl der DOM-Elemente reduzieren 8. Komponenten in mehrere Domänen aufteilen 9. Anzahl der Iframes minimieren 10. Erhalten Sie keine http 404-Fehler Zweitens: Serverorientiert 1. Reduzieren Sie Cookies 2. Verwenden Sie domänennamenunabhängige Cookies für Webkomponenten Was ist eine Cache-Lawine? Wenn der Cache-Server neu gestartet wird oder eine große Anzahl von Caches in einem bestimmten Zeitraum ausfällt, wird auch das Back-End-System (z. B. die Datenbank) stark unter Druck gesetzt scheitert. Wie kann man es vermeiden? 1: Steuern Sie nach Ablauf des Caches die Anzahl der Threads, die die Datenbank lesen und in den Cache schreiben, indem Sie Sperren oder Warteschlangen verwenden. Beispielsweise darf nur ein Thread Daten abfragen und Cache für einen bestimmten Schlüssel schreiben, während andere Threads warten. 2: Legen Sie unterschiedliche Ablaufzeiten für verschiedene Schlüssel fest, um die Cache-Ungültigmachungszeit so gleichmäßig wie möglich zu gestalten. 3: Erstellen Sie einen Cache der zweiten Ebene. A1 ist der Original-Cache und A2 ist der Kopier-Cache. Wenn A1 ausfällt, können Sie auf A2 zugreifen ist auf Langzeit eingestellt (dieser Punkt ist ergänzend) tpRouting-Modus: 1. Normalmodus 2. Rewrite-Modus 3. Kompatibilitätsmodus niginx So konfigurieren Sie die Portnummer: Konfigurieren Sie in dieser nginx.conf zwei Server mit unterschiedlichen Portnummern. jqZweite Zeile der Tabelle abrufen tag: $(tr: Gleichung (1)) Was ist eine variable Variable: Variable Variablen ermöglichen es uns, eine Variable dynamisch zu ändern Name. Verwenden Sie den Wert einer Variablen als Namen einer anderen Variablen. Überprüfen Sie, ob der Port belegt ist: Berechtigungen ändern, Besitzer ändern, Benutzergruppe ändern netstat –apn chmod chown chgrp Prozess anzeigen Top pa aux|grep Ausführungsberechtigungen für alle hinzufügen: chmod-x MysqlMaster-Slave-Kopie: Generieren Sie zwei Threads aus der Bibliothek, einen I/O-Thread und einen SQL-Thread Der I/O-Thread fordert das Binlog der Hauptbibliothek an und schreibt das erhaltene Binlog hinein Relay-Protokolldatei (Relay-Protokoll); Die Hauptbibliothek generiert einen Protokoll-Dump-Thread, der zum Übertragen von Binlog an den E/A-Thread der Slave-Bibliothek verwendet wird Relay Das Protokoll in der Protokolldatei wird in bestimmte Vorgänge analysiert, um konsistente Master-Slave-Vorgänge und konsistente Enddaten zu erreichen. Showmaster-Status; Startsalve; Stopsalve; Flushprivileges; GRANT REPLICATIONSSLAVE, RELOAD, SUPER ON *.* TOmysql_backup@'%' IDENTIFIEDBY '123456'; 🎜> Lösen Sie das Problem des Primärschlüsselkonflikts Master-Master-Replikation: nginx Reverse Proxy: (2) Gewicht Gewicht hinzufügen (Standard ist rr+Gewicht) auf Basis von rr. Je größer der Wert, desto mehr Gewicht wird zugewiesen kann entsprechend der Serverkonfiguration eingestellt werden, wodurch das Problem der ungleichmäßigen Serverleistung und Anforderungszuweisung gelöst werden kann Es kann die Effizienz des Back-End-Cache-Servers verbessern. Nginx selbst unterstützt url_hash nicht. Sie müssen die Hash-Software herunterladen (6) least_conn Mindestanzahl an Verbindungen , welche Verbindung weniger Verbindungen hat, wird zugewiesen. Gerät (7) konsistenter_hash Konsistenzalgorithmus 3, Lastausgleich: Lastausgleichs-Bereitstellungsmethode: Routing-Modus (empfohlen) Bridge-Modus Service Direct Return-Modus Round-Robin-Balancing: Jede Anfrage aus dem Netzwerk wird der Reihe nach den internen Servern zugewiesen, von 1 bis N und dann geht es wieder los. Dieser Ausgleichsalgorithmus eignet sich für Situationen, in denen alle Server in der Servergruppe die gleiche Hardware- und Softwarekonfiguration haben und die durchschnittlichen Dienstanforderungen relativ ausgeglichen sind. Gewichtungs-Round-Robin-Balancing: Entsprechend den unterschiedlichen Verarbeitungsfähigkeiten des Servers werden jedem Server unterschiedliche Gewichtungen zugewiesen, damit er Dienste mit den entsprechenden akzeptieren kann Anzahl der Gewichte fragen. Beispiel: Die Gewichtung von Server A soll 1 betragen, die Gewichtung von B beträgt 3 und die Gewichtung von C beträgt 6. Dann erhalten die Server A, B und C 10 %, 30 % und 60 % des Dienstes Anfragen bzw. Dieser Ausgleichsalgorithmus sorgt dafür, dass Hochleistungsserver stärker ausgelastet werden und verhindert, dass Server mit geringer Leistung überlastet werden. Zufälliger Ausgleich: Anfragen aus dem Netzwerk nach dem Zufallsprinzip an mehrere interne Server verteilen. Zufälliger Gewichtsausgleich: Dieser Ausgleichsalgorithmus ähnelt dem gewichteten Round-Robin-Algorithmus, es handelt sich jedoch um einen zufälligen Auswahlprozess bei der Verarbeitung der Anforderungsfreigabe 4, der Unterschied zwischen Lastausgleich und Reverse-Proxy Reverse-Proxy ist eine Methode, um einen Lastausgleich zu erreichen. Lassen Sie uns zunächst über Reverse Proxy sprechen. Wenn der Benutzer eine Anfrage stellt, sendet er die Anfrage zuerst an den Proxyserver, und dann fordert der Proxyserver gemäß dem Algorithmus den realen Server an und gibt sie schließlich an den Benutzer zurück. Dieser Ansatz verbessert erstens die Sicherheit. Zweitens teilt er Benutzeranfragen über mehrere echte Server, um einen Lastausgleich zu erreichen. Lassen Sie uns über den Lastausgleich sprechen. Das Aufkommen des Lastausgleichs besteht darin, den Druck auf einen einzelnen Server durch horizontale Erweiterung so weit wie möglich zu reduzieren. Zu den gängigen Lastausgleichslösungen auf WEB-Ebene gehören Hardware F5, Nginx-Proxy, LVS, Lastausgleichsdienste verschiedener Cloud-Anbieter (z. B. AWS ELB-Dienst) usw. Hinter dem Lastausgleich steht in der Regel der Server, der den Dienst tatsächlich bereitstellt. Beispielsweise kann der Datenverkehr über den ELB-Dienst gleichmäßig verteilt werden, wodurch der Druck auf den eigenständigen Server verringert wird. Aufgrund der Hinzufügung der Lastausgleichsschicht muss bei der einfachen Verwendung einer bestimmten Lösung immer noch ein einziger Problempunkt berücksichtigt werden. Der für den Lastausgleich zuständige Server hielt dem Druck nicht stand, fiel aus und der Dienst war nicht verfügbar. Daher versuchen Nginx und LVS, mehrere Proxys zu konfigurieren, um Failover und Fehleralarme zu ermöglichen, um Probleme mit Proxy-Layer-Servern rechtzeitig zu beheben. ELB ist ein von Amazon bereitgestellter Dienst, dessen Implementierung Hunderte oder sogar Tausende von Maschinen umfasst. Stellen Sie sich ihn also einfach als Proxy-Cluster vor. Teilen: Zunächst sollten wir klären, warum Wenn eine Freigabe erforderlich ist, vorausgesetzt, Ihre Site ist auf einem Computer gespeichert, besteht dieses Problem nicht, da sich die Sitzungsdaten auf diesem Computer befinden. Was aber, wenn Sie den Lastausgleich verwenden, um Anforderungen auf verschiedene Computer zu verteilen? Zu diesem Zeitpunkt gibt es kein Problem mit der Sitzungs-ID im Client. Unter der Annahme, dass die beiden Anforderungen des Benutzers an zwei verschiedene Computer gehen und seine Sitzungsdaten möglicherweise auf einem der Computer vorhanden sind, kommt es zu einer Situation, in der die Sitzung unterbrochen wird Daten können nicht abgerufen werden. Daher wird die Sitzungsfreigabe zu einem Problem 1. Sitzungsfreigabe basierend auf NFS 2. Sitzungsfreigabe basierend auf Datenbank 3. Sitzungsfreigabe basierend auf Cookie 4. Sitzungsfreigabe basierend auf Cache (Memcache) 5. Sitzungskopie Globale Variablen, lokale Variablen. zip, gzip, bzip2, tar Zcvf; varchar20 gespeichert werden? Zuerst müssen Sie die MySQL-Version ermitteln Unter Version 4.0 bezieht sich varchar(20) auf 20 Bytes. Wenn chinesische UTF8-Zeichen gespeichert werden, können jeweils nur 16 gespeichert werden Chinesische Zeichen 3 Bytes) Version 5.0 oder höher, varchar(20) bezieht sich auf 20 Zeichen, egal ob es sich um Zahlen, Buchstaben oder chinesische UTF8-Zeichen handelt (jedes chinesische Zeichen ist 3 Bytes), 20 können gespeichert werden Tatsächlich ist es am besten, eine Tabelle in Ihrer eigenen Datenbank zu erstellen, um zu testen, wie viele chinesische Zeichen gespeichert werden können. Da MySQL 5.0 verfügbar ist, kann varchar(20) 20 chinesische Zeichen speichern So speichern Sie den Benutzernamen und das Passwort beim Anmelden: Im Allgemeinen verwenden wir Cookies, um Benutzerinformationen auf dem Client zu speichern, beispielsweise um eine siebentägige Anmeldung zu implementieren -freies System usw. . Wir legen beim Einloggen zunächst die Cookie-Parameter fest und speichern beim nächsten Mal, wenn wir zur nächsten Seite springen, Wir können zunächst feststellen, ob ein Cookie vorhanden ist Wenn ein Wert vorhanden ist, wird direkt zur nächsten Seite gesprungen. Wenn kein Wert vorhanden ist, werden Sie aufgefordert, sich anzumelden. Nach der Implementierung der Cookie-Speicherung können sich Benutzer erfolgreich anmelden, ohne ein Passwort einzugeben! Befehl zum Anzeigen der Firewall: Firewall-Status anzeigen: Service-IPtables-Status Firewall einschalten: Dienst iptables starten Firewall ausschalten: Dienst iptables stoppen Clustered Index und nicht gruppierter Index: 1. Gruppierter Index a) Ein Indexelement entspricht direkt der Speicherseite des tatsächlichen Datensatzes, die als „direkt“ bezeichnet werden kann " b) Der Primärschlüssel fehlt. Speichern Sie ihn c) Die Sortierung der Indexelemente ist genau die gleiche wie die Speichersortierung der Datenzeilen. Nutzen Sie dies, wenn Sie möchten Um die Speicherreihenfolge der Daten zu ändern, können Sie den Primärschlüssel ändern (den ursprünglichen Primärschlüssel löschen und ein anderes Feld oder eine Gruppe von Feldern finden, die die Anforderungen des Primärschlüssels erfüllen können, den Primärschlüssel neu erstellen). > 2, nicht gruppierter Index Single Sign-On: Anmeldevorgang: b) Derzeit auf der Website angemeldet, überprüft das Benutzerverifizierungszentrum über eine Webservice-Anfrage die Legitimität des Benutzernamens und des Passworts. Wenn die Überprüfung bestanden wird, wird ein Ticket generiert, um den Benutzer der aktuellen Sitzung zu identifizieren, und die Site-ID der aktuell angemeldeten Unterseite wird im Benutzercenter aufgezeichnet. c) Geben Sie die erhaltenen Informationen zurück Benutzerdaten und Eintrittskarte zum Unterseitenstand. Wenn die Überprüfung fehlschlägt, wird der entsprechende Fehlerstatuscode zurückgegeben. d) Gemäß dem von der Webservice-Anfrage im vorherigen Schritt zurückgegebenen Ergebnis meldet die aktuelle Unterseite den Benutzer an: Wenn der Statuscode Erfolg anzeigt, speichert die aktuelle Seite das Ticket über das Cookie davon Die Site zeichnet den Anmeldestatus des Benutzers auf. Wenn der Statuscode einen Fehler anzeigt, erhält der Benutzer eine entsprechende Meldung zum Anmeldefehler. 2. Im angemeldeten Zustand geht der Benutzer zu einem anderen Unterabschnitt: a) Überprüfen Sie den Anmeldestatus des Benutzers über das Cookie oder die Sitzung der Website: Wenn die Überprüfung bestanden wird, Geben Sie das normale Site-Verarbeitungsprogramm ein. Andernfalls überprüft das Benutzercenter den Anmeldestatus des Benutzers (sendet ein Ticket an das Benutzerüberprüfungscenter. Wenn die Überprüfung erfolgreich ist, wird die lokale Anmeldeverarbeitung für die zurückgegebenen Benutzerinformationen durchgeführt.) Der Benutzer ist nicht angemeldet. Abmeldevorgang: a) Die aktuelle Abmeldung löscht den Anmeldestatus des Benutzers für die Site und die eindeutige Zufalls-ID des lokal gespeicherten Benutzers für die gesamte Site b) Löschen Sie über die Webservice-Schnittstelle die eindeutige Zufalls-ID, die auf der gesamten Site aufgezeichnet wurde. Die Webservice-Schnittstelle kehrt zurück, meldet den Javascript-Code anderer angemeldeter Unterseiten ab und diese Site gibt diesen Code aus. c) js-Code greift auf das W3C-Standard-Abmeldeskript der entsprechenden Site zu Const Eine Methode ohne Methodenkörper ist Eine abstrakte Methode, das Schlüsselwort abstract wird verwendet, um den Datentyp von , Parameter: 1 .json 2.jsonp 3.xml 4.html Dreistufige Verknüpfung: Unterklasse ruft übergeordnete Klasse auf ID rekursiv Primärschlüsselkonflikt lösen 5. Warum Sitzungssteuerung verwenden Das http-Protokoll ist ein zustandsloses Protokoll, das Benutzer anhand der Sitzungs-ID identifiziert 6. Was sind die Protokolle httpHTTPS ip 7 Was ist das HTTP Protokoll Hypertext Transfer Protocol 8. Was sind XML und HTML; XML ist Extensible Markup Language 9 , was ist JSONP Eine Möglichkeit, domänenübergreifende Anfragen zu stellen nutzt 10.yii Framework-Widgets Kleine Widgets werden grundsätzlich in Ansichten verwendet, und die Methode yiibaseWidget::widget() kann in der Ansicht aufgerufen werden, um Widgets zu verwenden. 11.tp Framework-Konfigurationsdatei common/config.php 12.tp Einzelbuchstabe-Methoden des Frameworks C Den Konfigurationswert abrufen 13 . Rückruffunktion array_map, array_walk, array_reduce Unterklasse ruft statische Methode der übergeordneten Klasse auf parent::$a phpFehlerstufe: fatalerror fatal error: 0000 0000 0000 001 open 1 warning warning error: 0000 0000 0000 010 open 2 NOTICE warning: 0000 0000 0 001 000 open 8 while do while Unterschied: while bedeutet, zuerst zu beurteilen und dann auszuführen dowhile bedeutet, zuerst auszuführen und dann beurteilen; Häufig verwendete magische Methoden: __dect(); __isset(); __isset(); > Konstruktionsmethode Wird automatisch aufgerufen, wenn das Programm instanziiert wird __construct(): Zerstörungsmethode, wird automatisch aufgerufen, wenn das Programm endet __destrcut(): (Verwenden Sie die Ergebnisse der inneren Abfrage als Vergleichsbedingungen der äußeren Abfrage) #Keine Bestellung nach erforderlich, um die neuesten Produkte abzufragen selectgoods_id,goods_name fromgoods wheregoods_id = (select max(goods_id)fromgoods); Der Unterschied zwischen Sitzung und Cookie 1. Die Sitzung befindet sich auf dem Server Seite, Cookie Auf dem Client (Browser) 2. Die Sitzung wird standardmäßig in einer Datei auf dem Server gespeichert (nicht im Speicher) Was ist der Unterschied zwischen Schnittstelle und abstrakter Klasse: 1 Weder abstrakte Klassen noch Schnittstellen können direkt instanziiert werden. Wenn sie instanziiert werden sollen, müssen abstrakte Klassenvariablen auf Unterklassenobjekte verweisen, die alle abstrakten Methoden implementieren, und Schnittstellenvariablen müssen auf Klassenobjekte verweisen, die alle Schnittstellen implementieren Methoden. 2 Abstrakte Klassen müssen von Unterklassen geerbt werden und Schnittstellen müssen von Klassen implementiert werden. 3 Abstrakte Klassen können nur für Methodendeklarationen und Methodenimplementierungen verwendet werden 4 In der Schnittstelle definierte Variablen können nur öffentliche statische Konstanten sein, und Variablen in abstrakten Klassen sind gewöhnliche Variablen. 5 Alle abstrakten Methoden in einer abstrakten Klasse müssen von der Unterklasse implementiert werden Unterklasse kann nur eine abstrakte Klasse sein. Wenn eine Klasse eine Schnittstelle implementiert und nicht alle Schnittstellenmethoden implementieren kann, kann die Klasse ebenfalls nur eine abstrakte Klasse sein. 6 Abstrakte Methoden können nur deklariert, nicht implementiert werden, und abstrakte Klassen sind das Ergebnis einer Rekonstruktion 7, Es kann keine abstrakte Methode in einer abstrakten Klasse geben 8, Wenn es eine Zusammenfassung gibt Methode in einer Klasse, dann diese Klasse Es kann nur eine abstrakte Klasse sein 9 Abstrakte Methoden müssen implementiert werden, daher können sie nicht statisch oder privat sein. 10 Schnittstellen können Schnittstellen erben und können mehrere Schnittstellen erben, Klassen können jedoch nur von einem einzigen Stamm erben. for-Schleife oder foreach-Schleife, welche ist schneller? Wenn foreach das Array durchläuft, zeigt der Zeiger automatisch auf das nächste Element. Es ist keine bedingte Beurteilung und keine automatische Inkrementierung von Variablen erforderlich, sodass die Leistung definitiv höher ist für. Löschen Sie alle Daten von Männern in der Tabelle zwischen 20 und 30 Jahren: Löschen Sie den Namen der Formulartabelle, wobei Geschlecht =0 und Alter dazwischen 20 und 30; Was sind die Unterschiede und Vorteile von Statik und Pseudostatik? Statische Webseiten enden im Allgemeinen mit .html oder htm und die Adresse entspricht einer Datei, die tatsächlich in einem Verzeichnis auf dem Website-Server vorhanden ist. Vorteile: 1. Wenn ein Besucher auf eine Webseite zugreift, wird die Datenbank nicht gelesen und es wird direkt auf die dem Website-Bereich entsprechenden Dateien zugegriffen. (Dateien direkt lesen) 2. Rein statische Webseiten sind suchmaschinenfreundlich und lassen sich am einfachsten von Suchmaschinen einbinden. (Einfach einzubinden) 3. Da der Server beim Zugriff auf eine Webseite nicht allzu viel Verarbeitung leisten muss, ist der Druck auf den Server minimal, sodass hohe Besuchszahlen leichter bewältigt werden können. (Einsparung von Serverdruck) 4. Bei einigen datenbankbezogenen Angriffen wie SQL-Injection-Angriffen ist es bei statischen Webseiten oft schwierig, mit der Adresse zu beginnen. (Hohe Sicherheit) Pseudostatisch ist eigentlich dynamisch, und der Datenverarbeitungsprozess ist der gleiche wie dynamisch. Vorteile: In Bezug auf die Form der URL kann die pseudostatische Adresse genau mit der statischen Adresse identisch sein. Für normale Besucher ist es nicht einfach zu unterscheiden, ob es sich um eine echte statische Adresse handelt oder um eine pseudostatischer (einfach einzubinden) Synchroner Alipay-Rückruf und asynchroner Rückruf: Wenn eine Zahlungsanforderung an gesendet wird Wenn Sie den Zahlungskanal verwenden, wird der Zahlungskanal schnell ein Ergebnis zurückgeben. Dieses Ergebnis sagt Ihnen jedoch nur, dass der Anruf erfolgreich war, nicht, dass die Ableitung erfolgreich war. Dies wird als synchroner Anruf bezeichnet . Viele Anfänger gehen davon aus, dass die Zahlung erfolgreich war, und werden dadurch ausgetrickst. Das Ergebnis ist, dass die Erfolgsquote der Zahlung extrem hoch ist, begleitet von einer Reihe ungeklärter Forderungsausfälle. Tester müssen besonders auf die Manipulation von Testdaten achten : Betrag, Synchronisierung Rückgabeergebnisse, Bestellnummer usw. In den synchronen Anforderungsparametern wird diese Adresse vom Zahlungskanal aufgerufen, nachdem der Abzug erfolgreich war. Im Allgemeinen prüft die Synchronisationsschnittstelle nur, ob die Parameter korrekt sind, ob die Signatur korrekt ist usw. Die asynchrone Schnittstelle teilt Ihnen das Abzugsergebnis mit. Im Allgemeinen haben asynchrone Schnittstellen eine Verzögerung von weniger als 5 Sekunden. Wenn der Anruf nicht erfolgreich ist, wird er erneut versucht. Manchmal ist es hier erfolgreich, aber die Seite des Zahlungskanals erhält keine Rendite, sodass sie sich weiter anpassen wird. Es ist normal, dass an einem Tag getätigte Zahlungen asynchron bis zum nächsten Tag abgerufen werden. Darauf müssen Entwickler auch besonders achten und dürfen es nicht als wiederholte Zahlung behandeln. Tester sollten auch auf wiederholte Rückrufe testen, die nur einmal gültig sein sollten. Dies ist nicht die größte Gefahr. Auf der Seite des Zahlungskanals werden Sie in der Regel nur benachrichtigt, wenn die Zahlung erfolgreich ist. Wenn die Zahlung fehlschlägt, werden wir Sie nicht darüber informieren. Warum kann ich andererseits nicht immer asynchrone Ergebnisse erhalten? Dann müssen Sie es sich ansehen. Synchrone Ergebnisse sind unzuverlässig und asynchrone Aufrufe sind unzuverlässig. Wie kann man also das Zahlungsergebnis ermitteln? Der letzte Trick besteht darin, die Bestellung und die Rückwärtsprüfung zu überprüfen. Im Allgemeinen stellt die Zahlungskanalseite eine Rückwärtsscheckschnittstelle bereit, um die zu bezahlenden Bestellungen regelmäßig in der Datenbank abzurufen, und ruft die Rückwärtsscheckschnittstelle auf der Zahlungskanalseite auf die Bestellungen mit erfolgreichen Abzügen auf der Zahlungskanalseite verlieren. Repost https://blog.csdn.net/weialemon/article/details/77898502 Verwandte Empfehlungen: Zusammenstellung und Weitergabe von PHP-Interviewfragen
Das obige ist der detaillierte Inhalt vonGrundlegende PHP-Interviewfragen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!