Heim >Backend-Entwicklung >PHP-Tutorial >Analyse einiger Antworten auf „2019 Xiaomi Spring Shanghai PHP Intern Recruitment Interview Questions'
Verwandte Empfehlungen: „Zusammenfassung der PHP-Interviewfragen im Jahr 2019 (Sammlung) “
1 Wie erreicht Nginx den Lastausgleich
Das ist relativ einfach
1. Polling
Dies ist die Standardstrategie, die jede Anfrage der Reihe nach einem anderen Server zuweist. Wenn der Server aufhängt, kann er automatisch beseitigt werden.
upstream fengzp.com { server 192.168.99.100:42000; server 192.168.99.100:42001; }
2. Mindestanzahl an Verbindungen
Anfragen dem Server mit der geringsten Anzahl an Verbindungen zuweisen
upstream fengzp.com { least_conn; server 192.168.99.100:42000; server 192.168.99.100:42001; }
3. Gewichtung
Verwenden Sie die Gewichtung, um das Serverzugriffsverhältnis anzugeben. Die Standardgewichtung ist 1. Die folgende Konfiguration führt dazu, dass die Zugriffsrate von Server2 doppelt so hoch ist wie die von Server1.
upstream fengzp.com { server 192.168.99.100:42000 weight=1; server 192.168.99.100:42001 weight=2; }
4.ip_hash
Jede Anfrage wird entsprechend dem Hash-Wert der Zugriffs-IP verteilt, sodass aufeinanderfolgende Webanfragen vom selben Client an verteilt werden Derselbe Server für die Verarbeitung, wodurch das Sitzungsproblem gelöst werden kann. Wenn der Server hängen bleibt, kann er automatisch beseitigt werden.
upstream fengzp.com { ip_hash; server 192.168.99.100:42000; server 192.168.99.100:42001; }
ip_hash kann in Kombination mit Gewicht verwendet werden.
2 丶Linux häufig verwendete Befehle
Referenzartikel: https://www.php.cn/linux-415502.html
3 Komponenten, die häufig in WeChat-Miniprogrammen verwendet werden
Ansicht 丶Text 丶Schaltfläche 丶Navigator 丶Bildlaufansicht... usw.
4丶So konfigurieren Sie einen virtuellen Host in Nginx
Referenzartikel: https://www.php.cn/php-weizijiaocheng-387454.html
5 Unterschiede zwischen TP5 und Laravel-Framework
Referenzartikel: https://www.php.cn/phpkj/thinkphp/422769.html
6 丶Datenmigration im TP5- und Laravel-Framework
Referenzartikel:
https://www.php.cn/js-tutorial-386843 .html
https://www.php.cn/phpkj/laravel/414216.html
7 丶Erläuterung des RBAC-Modells
Was ist RBAC?
RBAC (Role-Based Access Control): Englischer Name Rose Base Access Controller. In diesem Blog wird das Berechtigungssystemdesign dieses Modells vorgestellt. Die direkte Zuordnung zwischen Benutzern und Berechtigungen wird aufgehoben und Benutzerberechtigungen werden indirekt über die Methode benutzerbezogener Rollen und rollenbezogener Berechtigungen gewährt. Dadurch wird eine Entkopplung erreicht. RBAC wird während seines Entwicklungsprozesses in die folgenden Versionen unterteilt. RBAC0, RBAC1, RBAC2, RBAC3.
8 丶Bestellmodulprozess
9 丶Vorgänge nach erfolgreicher Bestellzahlung
10 丶Einstellungen E-Mail-Aktivierung Ablaufzeit der Verbindung
Schreiben Sie den Zeitstempel + die Ablaufzeit, wenn Sie den Aktivierungscode in die Datenbank schreiben
11 Der Unterschied zwischen Redis und Mongodb
1. Die Leistung
ist relativ hoch und die Leistung sollte für uns kein Engpass sein.
Im Allgemeinen sind Redis und Memcache in Bezug auf TPS ähnlich.
2. Benutzerfreundlichkeit
Redis hat nach Version 2.0 seine eigenen VM-Funktionen hinzugefügt und damit die Einschränkungen des physischen Speichers durchbrochen; Wert (Ähnlich wie Memcache).
mongoDB eignet sich für die Speicherung großer Datenmengen. Es ist für die Speicherverwaltung auf die Betriebssystem-VM angewiesen und verbraucht viel Speicher. Der Dienst sollte nicht mit anderen Diensten kombiniert werden.
4. Verfügbarkeit (Einzelpunktproblem)
Für Einzelpunktproblem:
Redis verlässt sich darauf, dass der Client verteiltes Lesen und Schreiben implementiert; Bei der Replikation von einem Slave muss sich der Slave-Knoten jedes Mal auf den gesamten Snapshot verlassen. Aufgrund von Leistungs- und Effizienzproblemen ist das Problem der automatischen Fragmentierung komplizierter wird nicht unterstützt und das Programm muss einen konsistenten Hash-Mechanismus festlegen.
Eine Alternative besteht darin, den Redis-eigenen Replikationsmechanismus zu verwenden und die aktive Replikation (mehrere Speicherung) zu verwenden oder zur inkrementellen Replikation zu wechseln (die von Ihnen selbst implementiert werden muss). Konsistenzprobleme und Leistungsprobleme werden ausgeglichen.
mongoDB unterstützt Master-Slave, Replicaset (interne Verwendung des Paxos-Wahlalgorithmus, automatische Fehlerwiederherstellung), Auto-Sharding-Mechanismus und schirmt den Failover- und Sharding-Mechanismus vom Client ab.
5. Zuverlässigkeit (Persistenz)
Für Datenpersistenz und Datenwiederherstellung unterstützt Redis (Snapshot, AOF): Verlässt sich auf Snapshots für Persistenz, Aof-Verbesserung und verbessert gleichzeitig die Zuverlässigkeit Dies wirkt sich auch auf die Leistung aus. MongoDB hat seit Version 1.8 die Binlog-Methode übernommen, um die Persistenzzuverlässigkeit zu unterstützen.
6. Datenkonsistenz (Transaktionsunterstützung)
Die Unterstützung von Redis-Transaktionen ist relativ schwach und kann nur sicherstellen, dass jeder Vorgang in der Transaktion kontinuierlich ausgeführt wird Transaktionen.
7. Anwendungsszenarien
Redis: Performantere Operationen und Berechnungen mit kleineren Datenmengen
MongoDB: Löst hauptsächlich das Problem der Zugriffseffizienz großer Datenmengen
12 Der Unterschied zwischen Redis und Memcached
Referenzartikel: https:// www.php.cn/mysql-tutorials-410551.html
13 丶Warteschlange in Redis
Es gibt zwei Möglichkeiten, Redis zu implementieren Warteschlange:
1. Produzenten-Konsumenten-Modell.
Normale Version:
Zum Beispiel schiebt Produzent A in einer Warteschlange Daten hinein und Verbraucher B fügt die Daten hinzu, aber die Warteschlange ist noch leer. Es ist also eins zu eins.
Was First-In-First-Out oder First-In-Last-Out usw. betrifft, können Sie der Funktion lpush folgen (einen Daten von der linken Seite der Warteschlange, also dem Kopf, verschieben). der Warteschlange) rpush (Schiebt Daten von der rechten Seite der Warteschlange, also vom Ende der Warteschlange) lpop (identisch mit der Verwaltung) rpop usw. zur Steuerung.
Blockierende Version:
Aber der obige Befehl kehrt sofort zurück, unabhängig davon, ob Daten vorhanden sind oder nicht. Es gibt eine erweiterte Version von lpop zum Abrufen von Daten, die blockierende Version blpop (Block Left Pop). ,
Verwendung: blpop key1 key2 ... keyn 10
Erhalten Sie die Werte mehrerer Schlüssel gleichzeitig und stellen Sie das Timeout auf 10 Sekunden ein Schlüssel haben Werte, sie werden sofort zurückgegeben. Wenn alle Schlüssel keinen Wert haben, blockieren Sie sie für 10 Sekunden und geben Sie sie zurück
2. Herausgeber-Abonnenten-Modus.
Konzept:
Drei Benutzer A, B und C abonnieren gleichzeitig einen Kanal namens msg, und dann veröffentlicht der Herausgeber Daten auf dem Kanal von msg A: Drei Benutzer B und C erhalten die Daten.
Hinweis:
Offensichtlich müssen drei Benutzer ABC gesperrt werden. Der Empfang abonnierter Daten muss auf der in Redis registrierten Rückruffunktion basieren.
Die veröffentlichten Daten werden nicht in Redis reproduziert, was bedeutet, dass A, B und C sie nach der Veröffentlichung aus verschiedenen Gründen nicht erhalten haben.
14 丶Datentypen in Redis
Redis unterstützt fünf Datentypen: String (String), Hash (Hash), Liste (Liste), Set (Satz) und zset (sortierte Menge: geordnete Menge).
15 丶Ereignisse im TP-Framework
16 丶Abhängigkeitsinjektion des TP-Frameworks
Kein Unterschied zu Laravel
17 MySQL-Lese-/Schreib-Trennoperation
Referenzartikel: https://www.php.cn/mysql-tutorials-360278.html
18 丶Der Unterschied zwischen Datenbank varchar und char
varchar wird ungenutzten Speicherplatz zurückgewinnen
19 丶Der Unterschied zwischen MyIsam und InnoDB
1. Der Standardtabellentyp, der auf dem traditionellen ISAM-Typ basiert, ist die Abkürzung für Indexed Sequential Access Method, die Standardmethode zum Speichern von Datensätzen. Es ist nicht transaktionssicher und unterstützt keine Fremdschlüssel. Wenn Sie eine große Anzahl von Auswahlen ausführen, ist das Einfügen von MyISAM besser geeignet.
2. InnoDB: eine Engine, die Transaktionssicherheit unterstützt. Die Unterstützung von Fremdschlüsseln, Zeilensperren und Transaktionen ist ihre größte Funktion. Bei einer großen Anzahl von Aktualisierungen und Einfügungen wird die Verwendung von InnoDB empfohlen, insbesondere bei mehreren Parallelitäts- und hohen QPS-Situationen.
1. Unterschiede bei Tabellensperren
MyISAM:
myisam unterstützt nur Sperren auf Tabellenebene, wenn Benutzer Myisam-Tabellen betreiben , select-, update-, delete- und insert-Anweisungen sperren die Tabelle automatisch. Wenn die gesperrte Tabelle die Einfüge-Parallelität erfüllt, können neue Daten am Ende der Tabelle eingefügt werden. Sie können die Tabelle auch über den Befehl „lock table“ sperren. Dieser Vorgang kann hauptsächlich Transaktionen simulieren, ist jedoch sehr teuer und wird im Allgemeinen nur in experimentellen Demonstrationen verwendet.
InnoDB:
Innodb unterstützt Transaktionen und Sperren auf Zeilenebene, was das größte Merkmal von innodb ist.
ACID-Eigenschaften von Transaktionen: Atomizität, Konsistenz, Isolation, Dauerhaftigkeit.
Mehrere Probleme, die durch gleichzeitige Transaktionen verursacht werden: verlorene Aktualisierungen, fehlerhafte Lesevorgänge, nicht wiederholbare Lesevorgänge und Phantom-Lesevorgänge.
2. Unterschiede in den Datenbankdateien
MyISAM:
myisam gehört zur Heap-Tabelle
myisam befindet sich auf der Festplatte. Es gibt drei Dateien im Speicher. Jeder Dateiname beginnt mit dem Tabellennamen und die Erweiterung gibt den Dateityp an.
.frm wird zum Speichern von Tabellendefinitionen verwendet
.MYD wird zum Speichern von Daten verwendet
.MYI wird zum Speichern von Tabellenindizes
auch für Myisam-Tabellen verwendet unterstützt drei verschiedene Speicherformate:
Statische Tabelle (Standard, aber bitte beachten Sie, dass am Ende der Daten keine Leerzeichen stehen dürfen, diese werden entfernt), dynamische Tabelle, komprimierte Tabelle.
InnoDB:
innodb ist eine indexorganisierte Tabelle
innodb verfügt über zwei Speichermethoden, Shared Table Space Storage und Multi-Table Space Storage
Die Tabellenstruktur der beiden Speichermethoden ist die gleiche wie bei myisam, beginnend mit dem Tabellennamen und der Erweiterung .frm.
Wenn Sie einen gemeinsam genutzten Tabellenbereich verwenden, werden die Datendateien und Indexdateien aller Tabellen in einem Tabellenbereich gespeichert. Ein Tabellenbereich kann über mehrere Dateien verfügen Der Name der Parameter innodb_data_file_path und innodb_data_home_dir lautet im Allgemeinen ibdata1-n.
Wenn mehrere Tabellenbereiche verwendet werden, verfügt jede Tabelle über eine Tabellenbereichsdatei zum Speichern der Daten und Indizes jeder Tabelle. Der Dateiname beginnt mit dem Tabellennamen und hat die Erweiterung .ibd.
3. Indexunterschiede
1. Über automatisches Wachstum
Die automatische Wachstumsspalte der Myisam-Engine muss ein Index sein , wenn es sich um einen kombinierten Index handelt, muss das automatische Wachstum nicht die erste Spalte sein. Es kann basierend auf den vorherigen Spalten sortiert und erhöht werden.
Das automatische Wachstum der Innodb-Engine muss ein Index sein. Wenn es sich um einen zusammengesetzten Index handelt, muss es auch die erste Spalte des zusammengesetzten Index sein.
2. Über Primärschlüssel
myisam ermöglicht die Existenz von Tabellen ohne Indizes und Primärschlüssel
Myisams Indizes sind alle Adressen gespeicherter Zeilen.
Wenn die Innodb-Engine keinen Primärschlüssel oder einen nicht leeren eindeutigen Index festlegt, generiert sie automatisch einen 6-Byte-Primärschlüssel (für den Benutzer unsichtbar).
Die Innodb-Daten sind Teil des Primärindex, zusätzlicher Der Index enthält den Wert des Hauptindex.
3. Über die count()-Funktion
myisam speichert die Gesamtzahl der Zeilen in der Tabelle. Wenn count(*) aus der Tabelle ausgewählt ist wird direkt herausgenommen
Innodb speichert nicht die Gesamtzahl der Zeilen in der Tabelle. Wenn Sie select count(*) aus der Tabelle verwenden, wird jedoch viel Geld verbraucht Nach dem Hinzufügen der Where-Bedingung behandeln Myisam und Innodb dies auf die gleiche Weise.
4. Volltextindex
myisam unterstützt den Volltextindex vom Typ FULLTEXT
innodb unterstützt keinen Volltextindex vom Typ FULLTEXT (unterstützt seit 5.6), aber innodb kann das Sphinx-Plug-In verwenden, um die Volltextindizierung zu unterstützen, und der Effekt ist besser. (Sphinx ist eine Open-Source-Software, die API-Schnittstellen in mehreren Sprachen bereitstellt und verschiedene MySQL-Abfragen optimieren kann.)
5.Aus Tabelle löschen
Bei Verwendung dieses Befehls erstellt innodb die Tabelle nicht neu, sondern löscht die Daten einzeln, wenn Sie sie löschen möchten it on innodb Es ist am besten, diesen Befehl nicht zu verwenden, wenn Sie Tabellen mit großen Datenmengen speichern. (Es wird empfohlen, die Tabelle abschneiden zu verwenden, der Benutzer muss jedoch über die Berechtigung zum Löschen dieser Tabelle verfügen.)
6. Indexspeicherort
Der Index von myisam wird separat im Tabellennamen + .MYI-Datei gespeichert.
Innodb-Indizes und -Daten werden zusammen im Tabellenbereich gespeichert.
20 丶Es gibt verschiedene Arten von Indizes in MySQL
1. Gewöhnlicher Index
Der einfachste Index ist einfach um die Abfragegeschwindigkeit zu beschleunigen.
2. Der eindeutige Index
ähnelt einem normalen Index, außer dass der Spaltenwert des Index eindeutig sein muss, aber Nullwerte zulässig sind ist null, wenn Kombinationsindex, muss die Kombination der Spaltenwerte eindeutig sein.
3. Der Primärschlüsselindex
ist ein spezieller eindeutiger Index, der normalerweise beim Erstellen verwendet wird eine Tabelle erstellen.
Funktionen:
1) Eine Tabelle hat nur einen Primärschlüsselindex
2) Der Primärschlüssel erfordert eine automatische Inkrementierung
4. Kombinierter Index
Das heißt, ein durch mehrere Felder erstellter Index
5. Volltextindex
Volltext
Myisam-Engine-Unterstützung
6. Fremdschlüssel
Dinge, die beim Einrichten von Fremdschlüsseln zu beachten sind:
1) Die Tabellen-Engines müssen gleich sein
2) Die Feldtypen müssen gleich sein
3) Die Länge muss gleich sein
4) Der Speicherbereich muss gleich sein
5) Das Einschränkungsfeld muss im referenzierten Feld erscheinen
Das obige ist der detaillierte Inhalt vonAnalyse einiger Antworten auf „2019 Xiaomi Spring Shanghai PHP Intern Recruitment Interview Questions'. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!