Antworten auf mehrere häufig gestellte MySQL-Interviewfragen

Antworten auf mehrere häufig gestellte MySQL-Interviewfragen

Vorwort:

Bei Vorstellungsgesprächen für verschiedene technische Positionen werden anscheinend häufig Fragen zu MySQL gestellt. Unabhängig davon, ob Sie sich für eine Entwicklungs- oder Betriebsposition bewerben, werden Ihnen immer einige Datenbankfragen gestellt. Freunde schicken mir oft private Nachrichten und fragen, wie ich mit MySQL-Interviewfragen umgehen soll. Tatsächlich ähneln sich viele Fragen im Vorstellungsgespräch, daher ist eine frühzeitige Vorbereitung notwendig. In diesem Artikel werden einige häufige Fragen in Vorstellungsgesprächen kurz behandelt. Lernen wir sie gemeinsam.

1. Was ist eine relationale Datenbank? Sprechen Sie über Ihr Verständnis von MySQL.

Dies ist eine grundlegende Frage, die das Verständnis des Interviewpartners für Datenbanken testet. Im Allgemeinen können Sie Ihr Verständnis kurz und strukturiert darlegen. Zum Beispiel:

Eine relationale Datenbank ist eine Datenbank, die zur Organisation von Daten ein relationales Modell verwendet und Daten in Form von Zeilen und Spalten speichert. Das größte Merkmal relationaler Datenbanken ist, dass sie Transaktionen unterstützen. Zu den gängigen relationalen Datenbanken gehören MySQL, Oracle, SQLServer usw. MySQL ist die beliebteste Open-Source-Datenbank. Aufgrund seiner geringen Größe, hohen Geschwindigkeit, niedrigen Gesamtbetriebskosten und insbesondere seines Open-Source-Charakters haben viele Unternehmen die MySQL-Datenbank übernommen, um Kosten zu senken. Derzeit wird es häufig auf kleinen und mittleren Websites im Internet verwendet, insbesondere im OLTP-Bereich.

2. Was sind die gängigen Speicher-Engines für MySQL und was sind ihre Unterschiede?

Diese Frage wird auch häufig gestellt und ähnelt der Frage „Was ist der Unterschied zwischen InnoDB- und MyISAM-Engines?“

Mehrere gängige Speicher-Engines:

  • InnoDB: Die Standardspeicher-Engine von MySQL, die Transaktionen, MVCC, Fremdschlüssel, Zeilensperren und automatisch inkrementierte Spalten unterstützt.
  • MyISAM: Unterstützt Volltextindizierung, Komprimierung, räumliche Funktionen, Sperren auf Tabellenebene, unterstützt keine Transaktionen und hat eine schnelle Einfügegeschwindigkeit.
  • Speicher: Alle Daten befinden sich im Speicher und die Datenverarbeitungsgeschwindigkeit ist schnell, aber die Sicherheit ist nicht hoch.
  • ARCHIV: Wird häufig für historische Archivtabellen verwendet, nimmt wenig Platz ein und die Daten können nicht aktualisiert oder gelöscht werden.

Einige Unterschiede zwischen den InnoDB- und MyISAM-Engines:

  • InnoDB unterstützt Transaktionen, MyISAM jedoch nicht.
  • InnoDB unterstützt Fremdschlüssel, MyISAM nicht.
  • InnoDB unterstützt keine Volltextindizierung, MyISAM jedoch schon.
  • InnoDB ist ein gruppierter Index und MyISAM ist ein nicht gruppierter Index.
  • InnoDB speichert nicht die spezifische Anzahl der Zeilen in der Tabelle, während MyISAM eine Variable verwendet, um die Anzahl der Zeilen in der gesamten Tabelle zu speichern.
  • Die kleinste Sperrgranularität von InnoDB ist die Zeilensperre, und die kleinste Sperrgranularität von MyISAM ist die Tabellensperre.
  • Die Speicherstruktur ist unterschiedlich. MyISAM-Tabellen werden in drei Typen unterteilt: frm, MYD und MYI, während InnoDB-Tabellen im Allgemeinen in zwei Typen unterteilt werden: frm und ibd.

3. Beschreiben Sie die MySQL-Infrastruktur.

Diese Frage testet das Verständnis des Befragten hinsichtlich der MySQL-Architektur und ähnelt der Frage „Ausführungsfluss einer Select-Anweisung“.

Die logische Architektur von MySQL ist hauptsächlich in drei Schichten unterteilt:

  • Die erste Ebene: Client-Verbindungsverarbeitung, Sicherheitsauthentifizierung, Autorisierung usw. Jede Client-Verbindung verfügt über einen Thread auf dem Server und jede von der Verbindung initiierte Abfrage wird im entsprechenden separaten Thread ausgeführt.
  • Die zweite Schicht: Die Kerndienstfunktionsschicht von MySQL, einschließlich Abfrageanalyse, Analyse, Abfragecache, integrierte Funktionen, gespeicherte Prozeduren, Trigger, Ansichten usw. Der Auswahlvorgang prüft zunächst, ob der Abfragecache gefunden wurde. Wenn dies der Fall ist, werden die zwischengespeicherten Daten direkt zurückgegeben. Andernfalls wird die Abfrage analysiert und der entsprechende Analysebaum erstellt.
  • Die dritte Schicht: Speicher-Engine, verantwortlich für die Datenspeicherung und -extraktion. Der MySQL-Server kommuniziert über die API mit der Speicher-Engine und verbirgt so die Unterschiede zwischen den verschiedenen Engines. Zu den gängigen Speicher-Engines gehören: InnoDB, MyISAM.

Der Ausführungsfluss einer Select-Anweisung:

  • Der Client stellt über den Connector eine Verbindung mit dem MySQL-Server her, erhält die Lese- und Schreibberechtigungen des Benutzers und übermittelt dann eine Abfrageanweisung.
  • Zunächst fragt MySQL die übermittelte Anweisung im Abfragecache ab. Wenn sie eintrifft und der Benutzer die Berechtigung zum Bedienen der Tabelle hat, gibt es das Abfrageergebnis als Ergebnis dieser Abfrage direkt im Abfragecache zurück, und die Abfrage endet hier.
  • Wenn der Abfrage-Cache einen Fehler ergibt, geht es an den Analysator, der die Anweisung analysiert und ihre Rechtmäßigkeit überprüft. Wenn die Anweisung nicht der MySQL-Syntaxspezifikation entspricht, meldet der Executor einen Fehler und die Abfrage wird beendet.
  • Wenn die Anweisung zulässig ist, wird sie an den Optimierer weitergeleitet, der den besten Ausführungsplan für die SQL-Anweisung auswählt.
  • Schließlich kommt der Executor. Wenn der Benutzer die Berechtigung hat, die Tabelle zu bedienen, ruft der Executor die von der Speicher-Engine bereitgestellte Schnittstelle auf, um die SQL-Anweisung auszuführen, und gibt dann die Abfrageergebnisse an den Client zurück. Die Abfrage endet hier.

4. Sprechen Sie über mehrere häufig verwendete Feldtypen.

Diese Frage testet das Verständnis des Befragten für MySQL-Feldtypen und kann zu vielen kleinen Fragen führen, beispielsweise zum Unterschied zwischen char und varchar.

Häufig verwendete Feldtypklassifizierung:

Numerischer Typ:

Zeichenfolgentyp:

Datums- und Uhrzeittypen:

Das M in int(M) steht für die maximale Anzeigebreite. Unsere erste Reaktion auf „maximale Anzeigebreite“ ist die maximale Breite des Wertes, den das Feld speichern kann. Wir könnten denken, dass wir, da wir int(1) erstellt haben, die Daten 10 nicht speichern können. Tatsächlich ist das nicht der Fall. int(5) und int(10) haben den gleichen Speicherbereich.

Der CHAR-Typ hat eine feste Länge und MySQL weist basierend auf der definierten Zeichenfolgenlänge immer genügend Speicherplatz zu. Beim Speichern von CHAR-Werten werden diese rechts mit Leerzeichen bis zur angegebenen Länge aufgefüllt und beim Abrufen von CHAR-Werten werden nachstehende Leerzeichen entfernt. Der Typ VARCHAR wird zum Speichern von Zeichenfolgen variabler Länge verwendet. Wenn beim Speichern die Anzahl der Zeichen die definierte Anzahl von Ziffern nicht erreicht, werden am Ende keine Leerzeichen hinzugefügt. Das M in char(M) und varchar(M) stellt die maximale Anzahl der Zeichen dar, die gespeichert werden können. Ein einzelner Buchstabe, eine Zahl, ein chinesisches Schriftzeichen usw. nimmt ein Zeichen ein.

5. Sprechen Sie über die Rolle, Struktur und Verwendungsspezifikationen von Indizes.

Zur Indizierung gibt es so viele Fragen, dass zur klaren Erklärung möglicherweise mehrere Artikel erforderlich sind. Teilen Sie einfach die Antworten auf diese Fragen mit:

Der Zweck der Indizierung besteht darin, die Abfrageeffizienz zu verbessern. Es ist vergleichbar mit dem Verzeichnis in einem Wörterbuch. Bei der Suche nach Wörterbuchinhalten kann man anhand des Verzeichnisses den Speicherort der Daten ermitteln und diese dann direkt abrufen. Ein Index ist ein Tabellenverzeichnis. Bevor Sie nach Inhalten suchen, können Sie zunächst im Verzeichnis nach dem Indexspeicherort suchen, um die Abfragedaten schnell zu finden.

Unter der InnoDB-Engine wird hauptsächlich der B+Tree-Index verwendet. Jeder Index ist eigentlich ein B+-Baum. Der B+-Baum ist ein ausgeglichener Suchbaum (kein Binärbaum), der für Festplatten und andere Speicherhilfsgeräte entwickelt wurde. Im B+-Baum befinden sich alle Daten in den Blattknoten, und jeder Blattknoten hat einen Zeiger auf den nächsten Knoten, wodurch eine geordnete verknüpfte Liste entsteht.

Aus physischer Speicherperspektive können InnoDB-Indizes in Cluster-Indizes und Sekundär-Indizes bzw. Hilfsindizes unterteilt werden. Die Blattknoten des Clusterindex speichern die gesamte Datenzeile. Wenn eine Abfrage den Clusterindex verwendet, müssen Sie nur einen B+-Baum des Clusterindexes scannen, um die erforderlichen Datensätze zu erhalten. Wenn Sie den vollständigen Datensatz über den Sekundärindex finden möchten, müssen Sie zur Tabelle zurückkehren, d. h. den Primärschlüsselwert über den Sekundärindex finden und dann den vollständigen Datensatz im Clusterindex finden.

Der offensichtliche Vorteil von Indizes besteht darin, dass sie Abfragen beschleunigen können. Das Erstellen von Indizes ist jedoch auch mit Kosten verbunden. Erstens muss bei jeder Indexerstellung ein B+-Baum dafür erstellt werden, was zusätzlichen Speicherplatz beansprucht. Zweitens muss der Index auch dynamisch verwaltet werden, wenn Daten in der Tabelle hinzugefügt, gelöscht oder geändert werden, was die Geschwindigkeit der Datenverwaltung verringert. Daher gibt es Grundsätze für die Erstellung und Verwendung von Indizes. Im Allgemeinen werden Indizes nur für Spalten erstellt, die zum Suchen, Sortieren, Gruppieren und Verknüpfen verwendet werden. Für Spalten mit geringer Selektivität sollten möglichst keine Indizes erstellt werden.

6. Sprechen Sie über die Eigenschaften und Isolationsebenen von MySQL-Transaktionen.

Auch Fragen zu MySQL-Transaktionen werden häufig gestellt und einige Prinzipien müssen noch eingehend studiert werden.

ACID hat vier Eigenschaften:

  • A (Atomarität): Alle Vorgänge in einer Transaktion sind entweder erfolgreich oder schlagen fehl.
  • C (Konsistenz): Die Datenbank wechselt immer von einem konsistenten Zustand in einen anderen. Wenn die Einschränkung verletzt wird, ist die Konsistenzbedingung nicht erfüllt.
  • I (Isolation): Die Ausführung einer Transaktion kann nicht durch andere Transaktionen gestört werden. Das heißt, die innerhalb einer Transaktion verwendeten Vorgänge und Daten sind von anderen gleichzeitigen Transaktionen isoliert, und gleichzeitig ausgeführte Transaktionen können sich nicht gegenseitig stören.
  • D (Dauerhaftigkeit): Nachdem eine Transaktion bestätigt wurde, werden die dadurch vorgenommenen Änderungen dauerhaft in der Datenbank gespeichert.

Transaktionsisolationsebene:

  • Nicht festgeschriebenes Lesen: Änderungen in einer Transaktion sind für andere Transaktionen sichtbar, auch wenn sie nicht festgeschrieben sind.
  • Read Committed: Änderungen in einer Transaktion sind für andere Transaktionen erst sichtbar, nachdem sie festgeschrieben wurden.
  • Wiederholbares Lesen: Wenn derselbe Datensatz in einer Transaktion mehrmals abgefragt wird, sind die Ergebnisse immer konsistent (Standardisolationsebene).
  • Serialisierbar: Transaktionen werden seriell ausgeführt, Lesevorgänge und Schreibvorgänge sind gesperrt.

Durch gleichzeitige Transaktionen verursachte Probleme:

  • Dirty Reads: Transaktion A liest Daten, die von Transaktion B nicht festgeschrieben wurden, und dann macht B den Vorgang rückgängig. In diesem Fall sind die von A gelesenen Daten „Dirty Data“.
  • Nicht wiederholbare Lesevorgänge: Transaktion A liest dieselben Daten mehrmals. Während Transaktion A die Daten mehrmals liest, aktualisiert und speichert Transaktion B die Daten. Dies führt zu inkonsistenten Ergebnissen, wenn Transaktion A dieselben Daten mehrmals liest.
  • Phantom Reads: Phantom Reads sind nicht wiederholbaren Reads ähnlich. Dies geschieht, wenn eine Transaktion A einige Datenzeilen liest und dann eine andere gleichzeitige Transaktion B einige Daten einfügt. In nachfolgenden Abfragen findet Transaktion A wie eine Illusion einige zusätzliche Datensätze, die ursprünglich nicht vorhanden waren. Dies wird daher als Phantomlesen bezeichnet.

Oben finden Sie ausführliche Antworten auf mehrere häufig gestellte MySQL-Interviewfragen. Weitere Informationen zu häufig gestellten MySQL-Interviewfragen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Mysql FAQ-Sammlung
  • Einführung in die neuesten 21 MySQL-Hochfrequenz-Interviewfragen im Jahr 2019
  • Fortgeschrittene MySQL-Datenbank-Interviewfragen mit Antworten
  • Teilen Sie einige wichtige Interviewfragen zum MySQL-Index
  • Eine Sammlung von MySQL-Fragen und -Antworten, die häufig in Interviews gestellt werden, um eine solide Grundlage zu schaffen

<<:  Zusammenfassung von 7 Gründen, warum Docker nicht für die Bereitstellung von Datenbanken geeignet ist

>>:  Lernprogramm für HTML-Webseitenlisten-Tags

Artikel empfehlen

js zum Schreiben des Karusselleffekts

In diesem Artikel wird der spezifische Code von j...

Anpassungsmethode des Linux-Peripheriedateisystems

Vorwort Wenn wir von Linux-Systemen sprechen, mei...

Untersuchung der MySQL-Paging-Leistung

Mehrere gängige Paging-Methoden: 1. Rolltreppenme...

Schritt-für-Schritt-Anleitung zum Erstellen einer Kalenderkomponente mit React

Inhaltsverzeichnis Betriebswirtschaftlicher Hinte...

MySQL ändert die Standard-Engine und Zeichensatzdetails

Inhaltsverzeichnis 1. Datenbankmodul 1.1 Datenban...

Leistung des Node+Express-Testservers

Inhaltsverzeichnis 1 Testumgebung 1.1 Server-Hard...

Zusammenfassung der Wissenspunkte des Datenbankindex

Inhaltsverzeichnis Erster Blick-Index Das Konzept...

JavaScript-Funktion Currying

Inhaltsverzeichnis 1 Was ist Funktions-Currying? ...

Vue verwendet das Video-Tag, um die Videowiedergabe zu implementieren

In diesem Artikel wird der spezifische Code von V...

Der Prozess der Installation von MySQL 8.0.26 auf CentOS7

1. Laden Sie zunächst die entsprechende Datenbank...

Docker-Grundlagen

Vorwort: Docker ist eine Open-Source-Anwendungsco...

Tools zur Bildoptimierung für Webseiten und Tipps zur Verwendung

Als grundlegendes Element einer Webseite sind Bil...