Heim > Artikel > Backend-Entwicklung > Zusammenfassung der PHP-Interviewfragen
Dieser Artikel stellt hauptsächlich eine Zusammenfassung von PHP-Interviewfragen vor, die einen gewissen Referenzwert haben. Jetzt können Freunde in Not darauf verweisen
csrf Was es 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, um eine Anmeldung anzufordern 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 normal Anfragen senden ;
3. Der Benutzer verlässt Website A nicht, bevor er eine TAB-Seite im selben Browser öffnet.
4 Nachdem Website B die Benutzeranfrage erhalten hat, wird sie zurückgegeben anstößiger Code und sendet eine Anfrage zum Zugriff auf die Website A eines Drittanbieters. ;
5. Nach Erhalt dieser anstößigen Codes überträgt der Browser die Cookie-Informationen und sendet eine Anfrage an Website A entsprechend der Anfrage von Website B ohne das 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
Der Unterschied zwischen Sitzung und Cookie:
1. COOKIE existiert auf der Clientseite. SESSION existiert auf der Serverseite.
2. Die Standardspeichergröße von COOKIE beträgt 4 KB. Im Allgemeinen wird die Anzahl der COOKIES 20 nicht überschreiten, abhängig von den spezifischen Anforderungen.
3.SESSION wird standardmäßig als Datei gespeichert. Die Standardüberlebenszeit beträgt 24 Minuten, die anfängliche Speichergröße beträgt 1 MB und kann theoretisch unbegrenzt geändert werden. Kann durch Ändern der php.ini konfiguriert werden.
4.SESSION basiert standardmäßig auf COOKIE. Wenn SESSION geöffnet wird, wird session_id generiert und in COOKIE gespeichert.
5. SESSION COOKIE sind alle Sitzungssteuerungen. Weil unser http zustands- und verbindungslos ist. Daher ist eine Sitzungskontrolle erforderlich, um den Benutzer zu identifizieren.
php super globale Variable:
$GLOBALS $_SERVER $_REQUEST $_POST $_GET
$_FILES $_ENV $ _COOKIE $_SESSION
PHP und MYSQL Transaktionsverarbeitung:
1. Verwenden Sie begin, rollback, commit, um
begin zu implementieren Starten Sie eine Transaktion
Rollback-Transaktions-Rollback
Transaktionsbestätigung festschreiben
2. Verwenden Sie set direkt, um den automatischen Festschreibungsmodus von MySQL zu ändern
4 Hauptmerkmale von Transaktionen (ACID):
Atomizität:
Transaktion ist die logische Arbeitseinheit der Datenbank, und sie hat entweder alles Änderungen werden ausgeführt oder keine werden ausgeführt.
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 einer Transaktion bleiben die durch die Transaktion an der Datenbank vorgenommenen Änderungen in der Datenbank erhalten und werden nicht rückgängig gemacht.
xssSo verhindern Sie: XSS wird auch CSS genannt, der vollständige Name ist CrossSiteScript, Cross-Site-Scripting-Angriff
Verhindern: Skriptinjektion, Escape-Filter-Skript-Tags. Der Unterschied zwischen
Unionund Unionall: Union entfernt Duplikationen, Unionall entfernt keine Duplikationen
RBAC
Rollenbasierte Berechtigungssteuerung: 5 Tabellen Benutzertabelle, Rollentabelle, Funktionstabelle und miteinander verbundene Tabellen: Benutzer und Rollen Tabellen, Rollen- und Funktionstabellen
redisPersistenz: Speicher-Snapshot (RDB) RDB-Persistenz kann in bestimmten Intervallen generiert werden. Point-in-Time-Snapshot des Datensatzes
Protokoll (AOF) AOF zeichnet dauerhaft alle vom Server ausgeführten Schreiboperationsbefehle auf und stellt den Datensatz wieder her, indem diese Befehle beim Serverstart erneut ausgeführt werden.
Untertabelle:Reduzieren Sie die Belastung der Datenbank und verkürzen Sie die Abfragezeit.
Vertikale Tabellenaufteilung: Die vertikale Aufteilung wird durch Felder unterteilt.
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 in der horizontalen Tabelle eindeutig ist?
Sie können einen neuen ID-Dienst erstellen und die Benutzer-ID in der Datenbank oder Redis speichern.
jAbfrageSelektor:
1. Element 2. Attribut 3.id 4. Klasse 5. Global.
Inline-Elemente und In-Block-Elemente
Inline: , , Im Block: , ,
, ,
Konvertierung: display:inline,block,inline-block.
Unterschied:
Block,
①Immer in einer neuen Zeile beginnen und eine ganze Zeile einnehmen; Der Abstand kann gesteuert werden;
③Die Breite ist immer gleich als Browserbreite, unabhängig vom Inhalt;
④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 der Tabelle beträgt 20-30: select count (Geschlecht) aus Tabelle, in der Alter zwischen 20 und 30 nach Geschlecht gruppiert ist
ORM: Der Object Relational Mapping (ORM)-Modus ist eine Technologie zur Beheben Sie die Diskrepanz zwischen objektorientierten und relationalen Datenbanken
LinuxAnsichtsport: Ausgewählte Datei ausmalen: Prozess anzeigen: Netstat-antu // Alle aktuellen TCP-Ports anzeigen·
Netstat-ntulp |grep80 //Alle 80 Port-Nutzung anzeigen·
Netstat-an |.Alle 3306 Port-Nutzung anzeigen·
LinuxAnzeigen, wie viele Befehle ausgeführt werden: Verlauf
Dateioperationsfunktion:open Öffnen Sie die Datei
fstat Datei abrufen
file Die gesamte Datei in ein Array einlesen
fclose Datei schließen
fwrite In die Datei schreiben (sichere Verwendung als Binärdatei)
file_get_contents() liest die gesamte Datei in einen String
Mehrere Möglichkeiten, die Datei zu öffnen:Fopen(), file_get_contents()
Lesen und schreiben, anhängen
phpOrdner löschenUnlink();
Abfangen chinesischer Zeichenfolgen:mb_substr mb_substr($str,$start, $length, $encoding)
$str, die Zeichenfolge, die 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 Dund M: M instanziiert die Basisklasse, D kann die benutzerdefinierte Klasse instanziieren
Tabelleändert die Farbe in alternativen Zeilen: Verwenden Sie JQ, um die geraden und ungeraden Zahlen der Tabelle tr td zu identifizieren, und weisen Sie den entsprechenden ungeraden und unterschiedliche CSS-Stile zu Gerade Zahlen. Durch unterschiedliche Hintergründe können Sie die Farben in abwechselnden Zeilen ändern.
Wenn die Maus vorbeigeht, ruft JQ den trtd-Hintergrundsatz separat auf, sodass sich die Hintergrundfarbe ändert, wenn die Maus vorbeigeht
AjaxSynchronisation und Asynchronität:
Warten Sie synchron auf das Rückgabeergebnis vom Server und führen Sie dann andere Vorgänge aus
Linux
Alle Dateien anzeigen:
lsSetzen Sie ein p auf ein anderes p:
Je größer der Z-Indexwert, desto höher geht erob
Funktion:
ob_start(); //Öffne 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(); //Die Verschachtelungsebene des Ausgabepuffermechanismus zurückgeben. 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 anzeigen
Unser Warenkorb existiert in der Sitzung. Wir müssen nur die Cartt-Karte in der Sitzung auf der Seite cart.jsp sammeln und anzeigen. 1. Bearbeiten Sie die Artikel im Warenkorb 2. Sie können die Anzahl der Artikel im Warenkorb ändern, indem Sie auf das + oder - Zeichenklicken
3. Wenn auf die Schaltfläche „+“ oder „-“ geklickt wird, 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 das Verkaufsvolumen 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 IndexRedis
und Memecache ist: 1. Speichermethode:
Memecache speichert alle Daten im Speicher Stromausfall, es bleibt hängen, da die Daten die Speichergröße nicht überschreiten dürfen. 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 gelegt
Wie es geht: Attributspezifikationen.
Tatsächlich ist SKU die Produktinventareinheit, einschließlich der Produkttabelle, der Produktattributtabelle und der Produkttabelle
tp
Konfiguration Datei: common/config.php
phpDatentyp: Vier Skalartypen:
boolean ( Boolescher Typ)
Integer (Ganzzahltyp)
Float (Gleitkommatyp, auch Double genannt)
String (String)
Zwei zusammengesetzte Typen:
; NULL (NULL)
Singleton-Modus:Das Hauptmerkmal des Singleton-Modus ist „drei private und ein öffentliches“:
Erfordert eine Speicherklasse. Die private statische Mitgliedsvariable der einzigen Instanz
Der Konstruktor muss als privat deklariert werden, um zu verhindern, dass externe Programme ein Objekt neu erstellen und dadurch die Bedeutung des Singletons verlieren
Die Klonfunktion muss als privat deklariert werden, um zu verhindern, dass das Objekt neu ist. Das geklonte muss eine öffentliche statische Methode (normalerweise mit dem Namen getInstance) bereitstellen, um auf diese Instanz zuzugreifen und dadurch einen Verweis auf die eindeutige Instanz zurückzugeben.
Fragen Sie die Anzahl der Männer und Frauen zwischen 20 und 30 ab:
//Wählen Sie die Anzahl (Geschlecht) aus der Tabelle aus, in der das Alter zwischen 20 und 30 nach Geschlecht gruppiert ist
Wählen Sie count(*) aus dem Tabellennamen aus, wobei das Alter zwischen 20 und 30 liegt, gruppieren Sie nach Alter.
Es gibt drei Zugriffsmodifikatoren in PHP, nämlich:
öffentlich (öffentlich, Standard)
geschützt (geschützt)
privat (privat) Zugriffsberechtigungsänderung Umfang der Operatoren:
Wenn ein Mitglied einer Klasse mit einem öffentlichen Zugriffsmodifikator deklariert wird, kann auf das Mitglied durch externen Code zugegriffen und es 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 ermöglicht nur den Zugriff durch Unterklassen dieser Klasse.
mysql intSpeicher:
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. Umfang 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, cat, tac, head, echo
tail-f-Test. log
top Speicher anzeigen
df-lh Datenträger anzeigen
ps-a Alle Prozesse anzeigen
Konstante:
Verwenden Sie $ für Variablen:
Es ist nicht erforderlich, das $-Symbol beim Definieren und Verwenden von Konstanten 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 ist:
Gewöhnliche Methoden erfordern zum Aufrufen ein Objekt, und $this muss gebunden werden. Das heißt, gewöhnliche Methoden müssen ein Objekt haben und das Objekt dann aufrufen lassen
Statische Methoden hingegen nicht Sie gehören zu jedem Objekt und müssen daher nicht gebunden werden.
Statische Mitglieder: Auf sie kann ohne Instanziierung zugegriffen werden Gehören nur zu dieser Klasse.
Klassenmitglieder: Eines ist in der Klasse definiert und das 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) Von Wertübergabe: Alle Änderungen am Wert innerhalb des Funktionsumfangs werden außerhalb der Funktion ignoriert
(2) Übergabe als Referenz: Alle Änderungen am Wert innerhalb des Funktionsumfangs werden diese Änderungen 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.0 schreibt vor, dass der Browser und der Server nur eine kurzfristige Verbindung aufrechterhalten müssen. Bei jeder Anfrage des Browsers muss der Server die TCP-Verbindung sofort trennen die Anfrageverarbeitung,
Der Server verfolgt nicht jeden Client und protokolliert auch keine vergangenen Anfragen.
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-Request-Header-Feld wurde in TTP1.1 hinzugefügt.
Der Unterschied zwischen globalen Variablen und lokalen Variablen:
1. Unterschiedliche Bereiche: Der Bereich globaler Variablen ist das gesamte Programm, während der Bereich lokaler Variablen das gesamte Programm ist aktuelle Funktion Oder Schleife usw.
2. Die Speicherspeichermethoden sind unterschiedlich: Globale Variablen werden im globalen Datenbereich und lokale Variablen im Stapelbereich gespeichert
3. Die Der Lebenszyklus ist unterschiedlich: Der Lebenszyklus globaler Variablen und der Hauptvariablen ist dasselbe wie das Programm. Lokale Variablen befinden sich innerhalb der Funktion oder innerhalb der Schleife und sind nicht mehr vorhanden, wenn die Funktion beendet wird Die Schleife wird beendet
4. Die Verwendung ist unterschiedlich: Globale Variablen werden in jedem Teil des Programms verwendet, nachdem sie deklariert wurden. Teile können 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. HTTP-Anfragen reduzieren
2. DNS reduzieren Suchen
3. Umleitung vermeiden
4. Ajax-Cache verwenden
5. Komponenten verzögert laden
6. Komponenten vorladen
7 . Reduzieren Sie die Anzahl der DOM-Elemente
8. Teilen Sie Komponenten in mehrere Domänen auf
9. Minimieren Sie die Anzahl der Iframes
10. Erhalten Sie keine http 404-Fehler
Zweitens: Für Server
1. Cookies minimieren
2. Domänennamenunabhängigkeit für Webkomponenten verwenden
Was ist Cache Avalanche?
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
niginxSo konfigurieren Sie die Portnummer:
Konfigurieren Zwei dienen in dieser nginx.conf, jede hat eine andere Portnummer.
jqZweite Zeile der Tabelle abrufen Tag:
$(tr:eq(1))
Was sind variable Variablen:
Variable Variablen ermöglichen es uns, den Namen einer Variablen dynamisch zu ändern. Verwenden Sie den Wert einer Variablen als Namen einer anderen Variablen.
Überprüfen Sie, ob der Port belegt ist: >Fortschritt anzeigen
Top pa aux|grep
Ausführungsberechtigungen für alle hinzufügen:
chmod-x
MySQLMaster-Slave-Replikation:
Generieren Sie zwei Threads aus der Bibliothek, einen I/O-Thread und einen SQL-Thread
i Der /o-Thread fordert das Binlog der Hauptbibliothek an und schreibt das erhaltene Binlog-Protokoll in die Relay-Log-Datei (Relay-Log)
Die Hauptbibliothek generiert einen Log-Dump-Thread, um die Slave-Bibliothek i/ bereitzustellen; o Thread übergibt binlog;
SQL-Thread liest das Protokoll in der Relay-Protokolldatei und analysiert es in bestimmte Vorgänge, um konsistente Master-Slave-Vorgänge und konsistente Daten zu erreichen; >
Für die Master-Slave-Replikation erforderliche Befehle:showmaster status; Startsalve;
Stopsalve;
Flushprivileges ;
GRANTREPLICATIONSLAVE,RELOAD,SUPER ON *.*
TOmysql_backup@'%'
IDENTIFIEDBY '123456';
CHANGEMASTER TOmaster_host = '127.0.0.1',
master_user='mysql_backup',
master_password='123456',
log_file='mysql-bin .000001 ',master_log_pos = 3696;
Primärschlüsselkonfliktproblem lösen
Erstellen Sie eine Mastertabelle, und die IDs werden aus der Mastertabelle verteilt .
Master-Master-Replikation:
1. Konten jeweils auf zwei Maschinen autorisieren: Replikations-Slave gewähren, Datei auswählen, auf *.* to'repl'@'10.17.%'identifiziert durch 'xxxx' 2. Konfigurationsdatei/etc/my.cnf, wenn die Hauptbibliothekskonfigurationsdatei verwendet wird Fügen Sie grundsätzlich die folgenden Konfigurationselemente hinzu:
nginxReverse Proxy:
(1 ) rr-Abfrage (Standard) Es wird jedem RS gemäß der Anforderungsreihenfolge zugewiesen. Es ist dasselbe wie der rr-Algorithmus in lvs, nur wenn der RS ausfällt Port 80 wird erkannt. Wenn der RS 402-, 403-, 503- und 504-Fehler meldet, werden diese direkt an den Client zurückgegeben.
(2) Gewicht (Gewicht)
Gewicht hinzufügen (Standard ist rr+Gewicht) Die Gewichtsabfrage ist proportional zum Zugriff mehr zugewiesen Darüber hinaus kann das Gewicht entsprechend der Serverkonfiguration festgelegt werden, wodurch das Problem der ungleichmäßigen Serverleistung und Anforderungszuweisung gelöst werden kann
(3) ip_hash
Lösen Sie das Problem dynamischer Webseiten Sitzungsfreigabe
Jede Zugriffsanforderung wird entsprechend dem Hash-Wert der IP-Adresse zugewiesen. Solange der Hash-Wert der IP gleich ist, wird sie demselben Server zugewiesen (Parameter -p). Dieser Planungsalgorithmus kann das Problem der dynamischen Webseitenfreigabe lösen, führt jedoch manchmal zu einer ungleichmäßigen Verteilung der Anforderungen Modus wird in China verwendet, Hash ist nicht für die Verwendung geeignet
ip_hash kann nicht mit anderen Algorithmen verwendet werden Das heißt, Sie können keine Gewichtung oder Sicherung vornehmen
(4) fair (Dritter). )
Es wird entsprechend der Antwortzeit des Back-End-Servers konfiguriert. Die Prioritätszuweisung mit kurzer Antwortzeit ist intelligenter als die oben genannten. Dieser Algorithmus kann den Lastausgleich entsprechend der Seitengröße und -auslastung intelligent durchführen Zeit. Nginx selbst unterstützt Fair nicht. Sie müssen das Upstrea_fair-Modul von Nginx herunterladen Ordnen Sie Anforderungen entsprechend der aufgerufenen URL zu, sodass dieselbe URL an denselben Server weitergeleitet wird. Der Effekt ist größer, wenn der Back-End-Server ein Cache-Server ist. Fügen Sie Hash-Anweisungen und Server-Anweisungen zum Upstream hinzu kann nicht eingeschrieben werden. hash_method ist der verwendete Hash-Algorithmus.
Nachteile: Wenn eine Maschine ausfällt, kann Consistent_hash dieses Problem lösen.
Es kann die Effizienz des Back-End-Cache-Servers verbessern. Nginx selbst unterstützt URL_Hash nicht muss heruntergeladen werden. Hash-Software
(6) least_conn
Mindestanzahl an Verbindungen, welches Gerät weniger Verbindungen hat, wird welchem Gerät zugewiesen
(7) konsistenter_hash
Konsistenzalgorithmus
3, Lastausgleich:
Lastausgleich-Bereitstellungsmethode:
Routing-Modus (empfohlen)
Bridge-Modus
Service-Direct-Return-Modus
Round-Robin-Balancing:
Jede Anfrage aus dem Netzwerk wird dem internen zugeordnet Server, gehen Sie von 1 zu N und beginnen Sie dann erneut. Dieser Ausgleichsalgorithmus eignet sich für Situationen, in denen alle Server in der Servergruppe über die gleiche Hardware- und Softwarekonfiguration verfügen und die durchschnittlichen Dienstanforderungen relativ ausgeglichen sind.
Gewichtungs-Round-Robin-Balancing:
Entsprechend den unterschiedlichen Verarbeitungskapazitäten 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 basierend auf 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. der ELB-Dienst von AWS) 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.
Wie man eine Sitzung durchführt
Teilen: Zunächst sollten wir klären, warum Wenn eine Freigabe erforderlich ist, vorausgesetzt, dass Ihre Site auf einem Computer gespeichert ist, 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
Umfang der Variablen :
Globale Variablen, lokale Variablen.
Komprimierte Dateien erstellen:
zip, gzip, bzip2, tar Zcvf;
varchar20
Wie viele chinesische Schriftzeichen können 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 nur 16 gespeichert werden (3 Bytes pro chinesisches Zeichen)
Version 5.0 oder höher, varchar( 20) , bezieht sich auf 20 Zeichen, unabhängig davon, ob es sich um Zahlen, Buchstaben oder chinesische UTF8-Zeichen handelt (jedes chinesische Zeichen besteht aus 3 Bytes), 20
können tatsächlich in Ihrer eigenen Datenbank gespeichert werden . Versuchen wir, wie viele chinesische Zeichen in eine Tabelle eingefügt werden können. MySQL 5.0 kann jetzt 20 chinesische Zeichen speichern
Benutzername und Passwort So speichern Sie:
Im Allgemeinen verwenden wir Cookies, um Benutzerinformationen auf dem Client zu speichern, z. B. ein siebentägiges Login-freies System.
Wir legen beim Einloggen zunächst die Cookie-Parameter fest und speichern beim nächsten Sprung zur nächsten Seite,
Wir können zunächst feststellen, ob dort ein Cookie vorhanden ist ist ein Wert, 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!
Firewall-Befehl anzeigen (vor Centos7.0):
Firewall-Status anzeigen : Status des Dienstes iptables
Firewall einschalten: Dienst iptables starten
Firewall ausschalten: Dienst iptables stoppen
Clustered-Index und Nicht-Clustered-Index:
1. Clustered-Index
a) Ein Indexelement entspricht direkt der Speicherseite des tatsächlichen Datensatzes, was gesagt werden kann „direkt“ sein
b) Der Primärschlüssel verwendet ihn standardmäßig
c) Die Sortierung der Indexelemente stimmt vollständig mit der Speichersortierung der Datenzeilen überein. Dies wird ausgenutzt, wenn Wenn Sie die Speicherreihenfolge der Daten ändern möchten, können Sie den Primärschlüssel ändern (den Originalschlüssel rückgängig machen). Wenn ein Primärschlüssel vorhanden ist, suchen Sie ein anderes Feld oder eine Gruppe von Feldern, die auch die Anforderungen des Primärschlüssels erfüllen können, und erstellen Sie den Primärschlüssel neu Schlüssel)
d) Eine Tabelle kann nur einen Clustered-Index haben (Grund: Sobald die Daten gespeichert sind, kann es nur eine Reihenfolge geben) )
2, nicht gruppierter Index
a) Es kann nicht „direkt zugegriffen“ werden und kann auf mehrere Objekte in einer Kette zugreifen. Erst nach dem Nivellieren der Seitentabelle kann die Datenseite
gefunden werden Klicken Sie hier, um sich anzumelden:
1. Beschreibung des Anmeldeprinzips Technischer Implementierungsmechanismus von Single Sign-On: Wenn der Benutzer zum ersten Mal auf das Anwendungssystem 1 zugreift Da er sich noch nicht angemeldet hat, führt das Authentifizierungssystem anhand der vom Benutzer bereitgestellten Anmeldeinformationen eine Identitätsüberprüfung durch - Das Ticket sollte an den Benutzer zurückgegeben werden. Wenn der Benutzer auf andere Anwendungen zugreift, wird das Ticket als Berechtigungsnachweis für seine eigene Authentifizierung verwendet. Nach Erhalt der Anfrage sendet das Anwendungssystem das Ticket zur Überprüfung an das Authentifizierungssystem die Gültigkeit des Tickets. Bei bestandener Verifizierung kann der Benutzer ohne erneute Anmeldung auf das Anwendungssystem 2 und das Anwendungssystem 3 zugreifen.Es ist ersichtlich, dass zur Implementierung von SSO die folgenden Hauptfunktionen erforderlich sind:
a) Alle Anwendungssysteme teilen sich ein Identitätsauthentifizierungssystem; b) Alle Anwendungssysteme kann Ticketinformationen identifizieren und extrahieren; c) Das Anwendungssystem kann angemeldete Benutzer identifizieren und automatisch feststellen, ob sich der aktuelle Benutzer angemeldet hat, wodurch die Single-Sign-On-Funktion abgeschlossen wirdBasierend auf den oben genannten Grundprinzipien habe ich ein Single-Sign-On-Systemprogramm mit der PHP-Sprache entworfen und es in Betrieb genommen, um den Server offiziell zu generieren. Dieses Systemprogramm verwendet die Ticketinformationen mit der eindeutigen Sitzungs-ID des gesamten Systems als Medium, um die gesamten Site-Informationen des aktuellen Online-Benutzers (Anmeldestatusinformationen und andere benutzerweite Site-Informationen, die verarbeitet werden müssen) abzurufen.Anmeldevorgang:
1. Melden Sie sich zum ersten Mal auf einer Website an: a) Der Benutzer betritt Geben Sie den Benutzernamen + das Passwort ein und senden Sie eine Anmeldeanfrage an das Benutzerverifizierungszentrumb) Wenn Sie derzeit auf der Website angemeldet sind, ü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 und schließlich
c) Geben Sie die erhaltenen Benutzerdaten und Tickets an die Unterseite zurück. 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
So definieren Sie Klassenkonstanten:
Const
Was ist eine abstrakte Methode:
Eine Methode ohne Methodenkörper ist Eine abstrakte Methode, verwenden Sie das Schlüsselwort abstract, um den Datentyp von
ajax, Parameter:
1 .json 2.jsonp 3.xml 4.htmlDreistufige Verknüpfung:
Unterklasse ruft übergeordnete Klasse auf ID rekursivPrimärschlüsselkonflikt lösen Konfigurationsdateibefehl
#auto_increment_offset =1#auto_increment_increment=25. Warum Sitzungssteuerung verwenden
Das http-Protokoll ist ein zustandsloses Protokoll, das Benutzer anhand der Sitzungs-ID identifiziert6.Was sind die Protokolle
httpHTTPS ip7 Was ist das HTTP Protokoll
Hypertext Transfer Protocol8. Was sind XML und HTML;
XML ist Extensible Markup Language HTML ist eine Hypertext-Auszeichnungssprache9, was ist JSONP
Eine Möglichkeit, domänenübergreifende Anfragen zu stellen nutzt