Heim >Backend-Entwicklung >PHP-Tutorial >Analyse einiger Antworten auf „2019 Xiaomi Spring Shanghai PHP Intern Recruitment Interview Questions'

Analyse einiger Antworten auf „2019 Xiaomi Spring Shanghai PHP Intern Recruitment Interview Questions'

藏色散人
藏色散人nach vorne
2019-12-07 13:33:096930Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen