Heim >Backend-Entwicklung >PHP-Tutorial >Die umfassendste Sammlung von PHP-Interviewfragen in der Geschichte, die es wert ist, gesammelt zu werden (um Ihr Interview effizienter zu machen)

Die umfassendste Sammlung von PHP-Interviewfragen in der Geschichte, die es wert ist, gesammelt zu werden (um Ihr Interview effizienter zu machen)

慕斯
慕斯nach vorne
2021-06-04 11:42:526756Durchsuche

Dieser Artikel wird Ihnen die umfassendsten grundlegenden PHP-Interviewfragen aller Zeiten vorstellen und Ihnen dabei helfen, die Grundlage zu festigen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Die umfassendste Sammlung von PHP-Interviewfragen in der Geschichte, die es wert ist, gesammelt zu werden (um Ihr Interview effizienter zu machen)

1. Grundlegender Teil von PHP

1. Einer der Hauptvorteile der PHP-Sprache ist plattformübergreifend.

Die optimale Kombination der PHP-Laufumgebung ist Apache+MySQL+PHP. Diese Laufumgebung kann auf verschiedenen Betriebssystemen (wie Windows, Linux usw.) konfiguriert werden und ist nicht durch das Betriebssystem eingeschränkt, daher wird sie als Cross bezeichnet -Plattform

2. WEB Wie viele Möglichkeiten gibt es, Daten während der Entwicklung einzureichen? Was ist der Unterschied? Welche Methode verwendet Baidu?

Get- und Post-Methoden
Unterschiede:
(1) URL-Sichtbarkeit: URL-Parameter der Get-Methode sind sichtbar, Post-Methode ist unsichtbar

(2) Cachefähigkeit: Get-Methode kann zwischengespeichert werden, Post-Methode nicht zwischenspeicherbar.

(3) Übertragungsdatengröße: Die allgemeine Übertragungsdatengröße von get überschreitet nicht 2k-4k (je nach Browser ist die Grenze unterschiedlich, aber der Unterschied ist nicht groß); die Größe der Post-Request-Übertragungsdaten ist Wird gemäß der Konfigurationsdatei php.ini festgelegt. Es kann auch unendlich groß sein.

(4) Datenübertragung: Die Get-Methode wird verwendet, um Parameter durch das Spleißen der URL-Adressleiste zu übertragen, und die Post-Methode wird verwendet, um die Daten durch den Körper zu übertragen.

Empfehlungen:
1. Die Get-Methode ist weniger sicher als die Post-Methode. Sie enthält vertrauliche Informationen und es wird empfohlen, die Post-Datenübermittlungsmethode zu verwenden.
2. Es wird empfohlen, die Get-Methode für die Datenabfrage zu verwenden ; Es wird empfohlen, die Post-Methode zum Hinzufügen, Ändern oder Löschen von Daten zu verwenden. Die von Baidu verwendete Get-Methode ist aus der URL ersichtlich. von PHP

Framework:

Es gibt viele Frameworks, wie CI, Yii, Laravel usw. Warten Sie, was wir gelernt haben, ist thinkphp

Template-Engine: Es gibt viele, es steht im Lehrbuch, was wir haben Gelerntes ist schlau
System: Es gibt viele, zum Beispiel: Kangsheng-Produkte (uchome, supesite, discuzX usw.), Empire System, DEDE (Dreamweaver), Ecshop usw. Was wir gelernt haben, ist DEDECMS, Ecshop
4. Welche Web-Frontend-Technologien beherrschen Sie?

Kompetent in p+CSS-Webseitenlayout, JavaScript, jQuery-Framework, Photoshop-Bildverarbeitung

5 Was sind die Vorteile von AJAX?

ajax ist eine asynchrone Übertragungstechnologie, die über Javascript oder das JQuery-Framework implementiert werden kann, um eine teilweise Aktualisierung zu erreichen, wodurch der Druck auf den Server verringert und die Benutzererfahrung verbessert wird.

6. Sicherheit ist für ein Programm von entscheidender Bedeutung. Bitte sagen Sie mir, auf welche Sicherheitsmechanismen bei der Entwicklung geachtet werden sollte.

(1) Verwenden Sie einen Bestätigungscode, um eine Überflutung des Registrierungsautomaten zu verhindern.

(2) Verwenden Sie Vorverarbeitung, Bindungsparameter, Parameterfilterung und Escape, um SQL-Injection zu verhindern.

(3) Verwenden Sie Token, um Remote-Übermittlungen zu verhindern, und verwenden Sie Token, um den Anmeldestatus zu überprüfen.

7. Wie kann bei der Entwicklung des Programms die Betriebseffizienz des Programms verbessert werden?

(1) Optimieren Sie SQL-Anweisungen. Versuchen Sie, in Abfrageanweisungen kein Select * zu verwenden. Verwenden Sie zur Überprüfung, welches Feld weniger Unterabfragen verwendet und durch Tabellenverbindungen ersetzt werden kann.

(2) Erstellen Sie einen Index in der Datentabelle.

(3) Generieren Sie einen Cache für Daten, die häufig im Programm verwendet werden (z. B. die Verwendung von Redis zum Zwischenspeichern von Daten, z. B. die Verwendung von ob zum Statisieren dynamischer Seiten usw.).

(4) Führen Sie eine Master-Slave-Replikation von MySQL durch und trennen Sie Lesen und Schreiben. (Verbesserung der MySQL-Ausführungseffizienz und der Abfragegeschwindigkeit)

(5) Verwenden Sie Nginx für den Lastausgleich. (Zugriffsdruck gleichmäßig auf polymorphe Server verteilen)

8. Kann PHP mit anderen Datenbanken verwendet werden?

PHP ist die beste Kombination mit der MYSQL-Datenbank. Natürlich kann PHP auch mit anderen Datenbanken wie PostgreSql, SqlServer, Oracle, SqlLite usw. verwendet werden.

9. Heutzutage wird die dreischichtige Struktur von MVC häufig in der Programmierung übernommen. Was sind die Vorteile?

Die drei Schichten von MVC beziehen sich auf: Geschäftsmodell, Ansicht und Controller. Die Controller-Schicht ruft das Modell auf, um die Daten zu verarbeiten, und ordnet die Daten dann zur Anzeige der Ansichtsschicht zu.

Die Vorteile sind: ① Es kann Code-Wiederverwendbarkeit erreicht und Code-Redundanz vermieden werden; ② M und V realisieren Code-Trennung, sodass dasselbe Programm unterschiedliche Ausdrücke verwenden kann

10.

JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat. Das JSON-Datenformat ist fest und kann für die Datenübertragung in mehreren Sprachen verwendet werden. Die Funktion in PHP, die das JSON-Format verarbeitet, ist json_decode(string $json [, bool $assoc]), die einen JSON-Format-String akzeptiert und ihn in eine PHP-Variable konvertiert. Der Parameter json ist der zu dekodierende JSON-String-Format-String. assoc gibt ein Array anstelle eines Objekts zurück, wenn dieser Parameter TRUE ist.

Json_encode: Konvertieren Sie PHP-Variablen in das JSON-Format.

11. Was ist der Unterschied zwischen Print, echo und print_r?

(1) Sowohl echo als auch print können eine Ausgabe durchführen. Der Unterschied besteht darin, dass echo keine Funktion ist und keinen Rückgabewert hat, während print eine Funktion mit einem Rückgabewert ist. Daher ist es relativ gesehen schneller, wenn es nur ausgibt echo, während print_r normalerweise zum Drucken variablenbezogener Informationen verwendet wird, die normalerweise beim Debuggen verwendet werden.
(2) print dient zum Drucken einer Zeichenfolge.
(3) print_r dient zum Drucken eines zusammengesetzten Typs wie eines Array-Objekts.

12 Was ist der Unterschied zwischen SESSION und COOKIE?

(1) Speicherort: Sitzung wird auf dem Server gespeichert, Cookie wird im Browser gespeichert
(2) Sicherheit: Sitzungssicherheit ist höher als Cookie
(3) Sitzung ist ein „Sitzungsdienst“, und der Dienst benötigt Cookies müssen nicht aktiviert werden, Sie können sie direkt verwenden

13. Was sind die allgemeinen Funktionen zur Verarbeitung von Arrays in PHP? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)

(1) array() erstellt ein Array

(2) in_array() bestimmt, ob sich das Element im Array befindet

(3) count () gibt die Array-Anzahl der Elemente zurück

(4) array_merge() Mehrere Arrays zu einem Array zusammenführen

(5) array_diff() Vergleichen Sie die Differenz von zwei oder mehr Arrays

(6) array_intersect() Erhalten Sie zwei oder zwei Der Schnittpunkt von mehr als einem Array

(7) array_keys() Holen Sie sich die Schlüsselliste des Arrays

(8) array_values() Holen Sie sich die Werteliste des Arrays

(9) array_unique() Löschen Sie doppelte Werte im Array

(10) array_push() fügt ein oder mehrere Elemente am Ende des Arrays ein (push)

(11) array_pop() öffnet das letzte Element des Arrays und gibt es zurück array (push)

(12 ) array_walk() verwendet Benutzeranpassung. Die Funktion führt eine Rückrufverarbeitung für jedes Element im Array durch.

14 Was sind die allgemeinen Funktionen zur Verarbeitung von Zeichenfolgen in PHP? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)

(1) trim() entfernt Leerzeichen und andere Zeichen auf beiden Seiten der Zeichenfolge;

(2) strlen() ermittelt die Länge von die Zeichenfolge

(3) mb_strlen() Ruft die Zeichenfolgenlänge ab (Zeichenkodierung kann angegeben werden, und die Länge wird für chinesische Zeichenfolgen berechnet)

(4) substr() gibt einen Teil der Zeichenfolge zurück

(5) str_replace() Substring-Ersetzung

(6) str_repeat () Wiederholen Sie einen String

(7) is_string() Überprüfen Sie, ob die Variable ein String ist

(8) str_shuffle () Mischen Sie einen String zufällig

(9) sprintf () return Eine Zeichenfolge, die basierend auf einer formatierten Zeichenfolge generiert wird (wird normalerweise verwendet, um den Datentabellennamen nach der Aufteilung zu erhalten)

(10) strstr() findet das erste Vorkommen der Zeichenfolge

(11) addslashes verwendet Backslashes, um die Zeichenfolge in Anführungszeichen zu setzen

15. Gemeinsame Funktionen zur Zeitverarbeitung in PHP? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)

(1) date() formatiert eine lokale Uhrzeit/ein lokales Datum.

(2) getdate() Datums-/Uhrzeitinformationen abrufen.

(3) date_default_timezone_set() legt die Standardzeitzone fest.

(4) date_default_timezone_get() gibt die Standardzeitzone zurück.

(5) mktime() gibt den Unix-Zeitstempel eines Datums zurück.

(6) strtotime() Analysieren Sie die Datums- und Zeitbeschreibung einer beliebigen Zeichenfolge in einen Unix-Zeitstempel.

(7) strftime() Formatieren Sie die lokale Uhrzeit/das lokale Datum entsprechend den regionalen Einstellungen.

16 Datenbanken verarbeiten? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion.)

Bitte lesen Sie das PHP-Handbuch sorgfältig durch. Dieser Punkt ist sehr wichtig. 17. Welche Funktionen werden in PHP häufig verwendet? Dateien? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)

(1) Öffnen Sie die Datei fopen()

(2) Lesen Sie die Datei fgets(); Hinweis: file_get_contents() liest auch die Datei

(3) Schreiben Sie in die Datei fwrite(); Hinweis: file_put_contents() kann auch in die Datei schreiben

(4) Schließen Sie das Dateihandle fclose()

(5) Verschieben/umbenennen Sie die Datei rename()

(6) Datei kopieren ()

(7) Datei mit vim oder touch erstellen

(8) Datei löschen unlink()

(9) Uhrzeit des letzten Zugriffs auf die Datei ermitteln fileatime()

(10) Holen Sie sich die Zeit, zu der die Datei zuletzt geändert wurde. filemtime ()

(11) Holen Sie sich die Dateigröße filesize()

(12) Holen Sie sich den Dateityp filetype()

(13) Holen Sie sich die Dateidetails state()

(14) Bestimmen Sie, ob es sich um ein Verzeichnis is_dir()

18 handelt. Gemeinsame Funktionen zum Betreiben von Verzeichnissen (Ordnern) in PHP? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)

(1) Öffnen Sie das Verzeichnis opendir()

(2) Lesen Sie das Verzeichnis readdir()

(3) Löschen Sie das Verzeichnis rmdir()

(4 ) Schließen Sie das Verzeichnishandle closeir()

(5) Erstellen Sie das Verzeichnis mkdir()

(6) Geben Sie den Verzeichnisteil des Pfads dirname() zurück

(7) Holen Sie sich das aktuelle Arbeitsverzeichnis getcwd( )

(8) Liste Geben Sie Dateien und Verzeichnisse im Pfad an scandir()

2. Datenbankteil

Was sind die gängigen Produkte für relationale Datenbankverwaltungssysteme?
  1. Antwort: Oracle, SQL Server, MySQL, Sybase, DB2, Access usw.
    1. Welche Teile umfasst die SQL-Sprache? Was sind die Aktionsschlüsselwörter für jeden Abschnitt?

    Antwort: Die SQL-Sprache besteht aus vier Teilen: Datendefinition (DDL), Datenmanipulation (DML), Datenkontrolle (DCL) und Datenabfrage (DQL).
    Datendefinition: Tabelle erstellen, Tabelle ändern, Tabelle löschen, Index erstellen/löschen usw.
    Datenbearbeitung: Auswählen, einfügen, aktualisieren, löschen,
    Datenkontrolle: gewähren, widerrufen
    Datenabfrage: auswählen

    1. Integritätsbeschränkungen Welche einschließen?

    Datenintegrität bezieht sich auf die Genauigkeit und Zuverlässigkeit von Daten.

    Beinhaltet:

    (1) Entitätsintegrität: legt fest, dass jede Zeile der Tabelle eine eindeutige Entität in der Tabelle ist.

    (2) Domänenintegrität: Dies bedeutet, dass die Spalten in der Tabelle bestimmte Datentypbeschränkungen erfüllen müssen, darunter Wertebereich, Genauigkeit und andere Vorschriften.

    (3) Referenzielle Integrität: bedeutet, dass die Daten des Primärschlüssels und des Fremdschlüssels der beiden Tabellen konsistent sein sollten, um die Konsistenz der Daten zwischen Tabellen sicherzustellen und Datenverlust oder bedeutungslose Daten in der Datenbankdiffusion zu verhindern.

    (4) Benutzerdefinierte Integrität: Verschiedene relationale Datenbanksysteme erfordern aufgrund ihrer Anwendungsumgebung häufig einige besondere Einschränkungen. Benutzerdefinierte Integrität ist eine Einschränkung für eine bestimmte relationale Datenbank, die die semantischen Anforderungen widerspiegelt, die eine bestimmte Anwendung erfüllen muss.

    1. Was ist eine Transaktion? und seine Eigenschaften?

    Transaktion: Es handelt sich um eine Reihe von Datenbankoperationen und die grundlegende logische Einheit von Datenbankanwendungen.

    Eigenschaften:

    (1) Atomarität: Das heißt, Unteilbarkeit, entweder werden alle Transaktionen ausgeführt oder keine.

    (2) Konsistenz oder Stringability. Die Ausführung einer Transaktion wandelt die Datenbank von einem korrekten Zustand in einen anderen korrekten Zustand um

    (3) Isolation. Bevor die Transaktion ordnungsgemäß festgeschrieben wird, dürfen durch die Transaktion vorgenommene Änderungen an den Daten keiner anderen Transaktion zur Verfügung gestellt werden.

    (4) Haltbarkeit. Nachdem eine Transaktion korrekt übermittelt wurde, werden ihre Ergebnisse dauerhaft in der Datenbank gespeichert. Auch wenn nach der Übermittlung der Transaktion weitere Fehler auftreten, werden die Verarbeitungsergebnisse der Transaktion gespeichert.

    Einfaches Verständnis: Alle Vorgänge in einer Transaktion sind entweder erfolgreich oder fehlschlagen.

    1. Was ist ein Schloss?

    Die Datenbank ist eine gemeinsame Ressource, die von mehreren Benutzern verwendet wird. Wenn mehrere Benutzer gleichzeitig auf Daten zugreifen, greifen mehrere Transaktionen gleichzeitig auf dieselben Daten in der Datenbank zu. Wenn gleichzeitige Vorgänge nicht kontrolliert werden, können falsche Daten gelesen und gespeichert werden, wodurch die Konsistenz der Datenbank zerstört wird.

    Sperren ist eine sehr wichtige Technologie, um die Parallelitätskontrolle von Datenbanken zu erreichen. Bevor eine Transaktion ein Datenobjekt bearbeitet, sendet sie zunächst eine Anfrage an das System, um es zu sperren. Nach der Sperrung hat die Transaktion eine gewisse Kontrolle über das Datenobjekt. Bevor die Transaktion die Sperre aufhebt, können andere Transaktionen das Datenobjekt nicht aktualisieren.
    Grundlegende Sperrtypen: Zu den Sperren gehören Sperren auf Zeilenebene und Sperren auf Tabellenebene.

    1. Was ist eine Ansicht? Was ist ein Cursor?

    Eine Ansicht ist eine virtuelle Tabelle mit den gleichen Funktionen wie eine physische Tabelle. Ansichten können hinzugefügt, geändert, überprüft und bearbeitet werden. Eine Ansicht ist normalerweise eine Teilmenge von Zeilen oder Spalten einer oder mehrerer Tabellen. Änderungen an der Ansicht haben keine Auswirkungen auf die zugrunde liegenden Tabellen. Dadurch ist es für uns einfacher, Daten abzurufen als bei Abfragen mit mehreren Tabellen.

    Cursor: Er verarbeitet die Abfrageergebnismenge effektiv als Einheit. Der Cursor kann auf einer bestimmten Zeile in der Zelle positioniert werden, um eine oder mehrere Zeilen aus der aktuellen Zeile im Ergebnissatz abzurufen. Sie können die aktuelle Zeile des Ergebnissatzes ändern. Cursor werden im Allgemeinen nicht verwendet, aber wenn Daten einzeln verarbeitet werden müssen, sind Cursor sehr wichtig.

    1. Was ist eine gespeicherte Prozedur? Wie soll ich anrufen?

    Die gespeicherte Prozedur ist eine vorkompilierte SQL-Anweisung. Der Vorteil besteht darin, dass sie einen modularen Aufbau ermöglicht, was bedeutet, dass sie nur einmal erstellt werden muss und später im Programm mehrmals aufgerufen werden kann. Wenn eine bestimmte Operation mehrere SQL-Ausführungen erfordert, ist die Verwendung gespeicherter Prozeduren schneller als die Ausführung einfacher SQL-Anweisungen. Gespeicherte Prozeduren können über ein Befehlsobjekt aufgerufen werden.

    1. Welche Rolle spielt der Index? Und welche Vor- und Nachteile hat es?

    Ein Index ist eine spezielle Abfragetabelle, die die Datenbanksuchmaschine verwenden kann, um den Datenabruf zu beschleunigen. Es ist dem Inhaltsverzeichnis eines Buches im wirklichen Leben sehr ähnlich. Sie können die gewünschten Daten finden, ohne das gesamte Buch abzufragen. Indizes können eindeutig sein. Wenn Sie einen Index erstellen, können Sie eine einzelne Spalte oder mehrere Spalten angeben.

    Der Nachteil besteht darin, dass dadurch die Geschwindigkeit der Dateneingabe verlangsamt und auch die Größe der Datenbank erhöht wird.

    1. Wie kann man die drei Paradigmen auf populäre Weise verstehen?

    Erste Normalform: 1NF ist eine Atomizitätsbeschränkung für Attribute, die erfordert, dass Attribute atomar sind und nicht zerlegt werden können;

    Zweite Normalform: 2NF ist eine Eindeutigkeitsbeschränkung für Datensätze, die erfordert, dass Datensätze eindeutige Bezeichner haben ist die Eindeutigkeit von Entitäten;

    Dritte Normalform: 3NF ist eine Einschränkung der Feldredundanz, das heißt, kein Feld kann von anderen Feldern abgeleitet werden und erfordert, dass Felder nicht redundant sind. .

    1. Was ist ein Basistisch? Was ist eine Ansicht?

    Die Basistabelle ist eine Tabelle, die unabhängig existiert. In SQL entspricht eine Beziehung einer Tabelle.

    Eine Ansicht ist eine Tabelle, die aus einer oder mehreren Basistabellen abgeleitet ist. Die Ansicht selbst wird nicht unabhängig in der Datenbank gespeichert, sondern ist eine virtuelle Tabelle.

    1. Wie lassen sich die Vorteile von Ansichten beschreiben?

    (1) Ansichten können Benutzeroperationen vereinfachen

    (2) Ansichten ermöglichen es Benutzern, dieselben Daten aus mehreren Blickwinkeln zu betrachten;

    (3) Ansichten bieten ein gewisses Maß an logischer Unabhängigkeit für die Datenbank

    ( 4 ) Ansichten können Sicherheitsschutz für vertrauliche Daten bieten.

    1. Was bedeutet NULL?

    Der Wert NULL steht für UNKNOWN (unbekannt): Er stellt nicht „“ (leere Zeichenfolge) dar.

    Jeder Vergleich mit einem NULL-Wert führt zu einem NULL-Wert.

    Sie können keinen Wert mit einem NULL-Wert vergleichen und logischerweise eine Antwort erwarten.

    Verwenden Sie IS NULL für die NULL-Beurteilung

    1. Was sind die Unterschiede zwischen Primärschlüsseln, Fremdschlüsseln und Indizes?

    Der Unterschied zwischen Primärschlüssel, Fremdschlüssel und Index
    Definition:
    Primärschlüssel – identifiziert einen Datensatz eindeutig, kann nicht dupliziert werden und darf nicht leer sein
    Fremdschlüssel – der Fremdschlüssel einer Tabelle ist der Primärschlüssel Schlüssel einer anderen Tabelle, Fremdschlüssel können vorhanden sein. Bei Duplikaten kann es ein Nullwert sein
    Index – dieses Feld hat keine doppelten Werte, kann aber einen Nullwert haben
    Funktion:
    Primärschlüssel – wird zur Gewährleistung der Datenintegrität verwendet
    Ausländisch Schlüssel – wird verwendet, um Beziehungen zu anderen Tabellen herzustellen.
    Index – soll die Geschwindigkeit der Abfragesortierung verbessern.
    Nummer:
    Primärschlüssel – es kann nur einen Primärschlüssel geben.
    Fremdschlüssel – eine Tabelle kann mehrere Fremdschlüssel haben.
    Index – eine Tabelle kann mehrere eindeutige Indizes haben

    1. Was können Sie verwenden, um sicherzustellen, dass die Felder in der Tabelle nur Werte in einem bestimmten Bereich akzeptieren?

    Überprüfungsbeschränkung, die in der Datenbanktabelle definiert ist, wird zur Begrenzung verwendet der in der Spalte eingegebene Wert.

    1. Erzählen Sie mir von einigen Methoden zur Optimierung von SQL-Anweisungen? (Wählen Sie einige aus)

    (1) In der Where-Klausel: Die Verbindung zwischen Where-Tabellen muss vor anderen Where-Bedingungen geschrieben werden, und diejenigen Bedingungen, die die maximale Anzahl von Datensätzen herausfiltern können, müssen am Ende der geschrieben werden Where-Klausel.Endlich HABEN.

    (2) Ersetzen Sie IN durch EXISTS und NOT IN durch NOT EXISTS.

    (3) Vermeiden Sie die Verwendung von Berechnungen für Indexspalten

    (4) Vermeiden Sie die Verwendung von IS NULL und IS NOT NULL für Indexspalten

    (5) Um Abfragen zu optimieren, sollten vollständige Tabellenscans so weit wie möglich vermieden werden Erstellen Sie Indizes für die Spalten, die an „wo“ beteiligt sind, und sortieren Sie nach.

    (6) Vermeiden Sie es, Nullwerturteile zu Feldern in der Where-Klausel zu fällen, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt.

    (7) Versuchen Sie zu vermeiden, Ausdrücke zu Feldern in der Where-Klausel zu machen Dies führt dazu, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt

    1. Was ist der Unterschied zwischen „korrelierter Unterabfrage“ und „nicht korrelierter Unterabfrage“ in der SQL-Anweisung?

    (1) Eine nicht korrelierte Unterabfrage ist eine von der äußeren Abfrage unabhängige Unterabfrage. Die Unterabfrage wird insgesamt einmal ausgeführt und der Wert wird nach der Ausführung an die äußere Abfrage übergeben.

    (2) Die Ausführung der relevanten Unterabfrage hängt von den Daten der externen Abfrage ab. Wenn die externe Abfrage eine Zeile ausführt, wird die Unterabfrage einmal ausgeführt.

    Eine nicht korrelierte Unterabfrage ist also effizienter als eine korrelierte Unterabfrage

    1. Was ist der Unterschied zwischen char und varchar?

    Char ist ein Typ mit fester Länge, während varchar ein Typ mit variabler Länge ist.

    Unterschied:

    In der Datenspalte vom Typ char(M) belegt jeder Wert M Bytes. Wenn eine Länge kleiner als M ist, verwendet MySQL Leerzeichen, um ihn auf der rechten Seite zu ergänzen. (Die aufgefüllten Leerzeichen werden während des Suchvorgangs entfernt).

    In der Datenspalte vom Typ varchar(M) belegt jeder Wert gerade genug Bytes plus ein Byte, um seine Länge aufzuzeichnen (d. h. die Gesamtlänge beträgt L+1 Bytes).

    1. MySQL-Speicher-Engine, der Unterschied zwischen Myisam und Innodb.

    MyISAM ist eine nicht-transaktionale Speicher-Engine; geeignet für Anwendungen mit häufigen Tabellensperren; kein Deadlock; Geeignet für kleine Datenmengen und geringe Parallelität. Innodb ist eine Speicher-Engine, die für Anwendungen mit vielen Einfüge- und Aktualisierungsvorgängen geeignet ist lock); geeignet für Big Data und große Parallelität.

      Welche Datentabellentypen gibt es?
    1. MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV usw.

    MyISAM: Ausgereift, stabil, einfach zu verwalten und schnell zu lesen. Einige Funktionen (Transaktionen usw.) unterstützen keine Sperren auf Tabellenebene.

    InnoDB: Unterstützt Transaktionen, Fremdschlüssel und andere Funktionen sowie das Sperren von Datenzeilen. Es nimmt viel Platz ein und unterstützt keine Volltextindizierung usw.

      MySQL-Datenbank wird als Speicher des Veröffentlichungssystems verwendet. Der Zuwachs beträgt mehr als 50.000 Elemente pro Tag. Der Betrieb und die Wartung werden voraussichtlich drei Jahre dauern.
    1. (1) Entwerfen Sie eine gut gestaltete Datenbankstruktur, ermöglichen Sie teilweise Datenredundanz und versuchen Sie, Join-Abfragen zu vermeiden, um die Effizienz zu verbessern.

    (2) Wählen Sie den entsprechenden Tabellenfelddatentyp und die Speicher-Engine aus und fügen Sie die Indizes entsprechend hinzu.

    (3) Führen Sie eine Lese-/Schreibtrennung bei der MySQL-Master-Slave-Replikation durch.

    (4) Teilen Sie die Datentabelle in Tabellen auf, um die Datenmenge in einer einzelnen Tabelle zu reduzieren und die Abfragegeschwindigkeit zu verbessern.

    (5) Fügen Sie einen Caching-Mechanismus hinzu, z. B. Redis, Memcached usw.

    (6) Generieren Sie statische Seiten für Seiten, die sich nicht häufig ändern (z. B. Ob-Caching).

    (7) Schreiben Sie effizientes SQL. Beispielsweise wird SELECT * FROM TABEL in SELECT field_1, field_2, field_3 FROM TABLE geändert.

    1. Welche Methode verwenden Sie für eine Website mit hohem Datenverkehr, um das Problem der Statistik von Seitenbesuchen zu lösen?

    (1) Bestätigen Sie, ob der Server den aktuellen Datenverkehr unterstützen kann.

    (2) Datenbankzugriff optimieren.

    (3) Verbieten Sie den externen Zugriff auf Links (Hotlinking), wie z. B. das Hotlinking von Bildern.

    (4) Herunterladen der Kontrolldatei.

    (5) Führen Sie einen Lastausgleich durch und verwenden Sie verschiedene Hosts zum Auslagern.

    (6) Nutzen Sie Browsing-Statistiksoftware, um die Anzahl der Besuche zu verstehen und gezielte Optimierungen durchzuführen.

    3. Objektorientierter Teil

    1. Was ist objektorientiert? ist die Integration von Funktionen usw. Durch Objekte implementiert, Funktionen in Objekte kapseln und die Objekte bestimmte Details implementieren lassen.

    Objektorientiert weist drei Hauptmerkmale auf: Kapselung, Vererbung und Polymorphismus.

    Die aktuellen reinen OO-Sprachen sind hauptsächlich Java und C#. PHP und C++ unterstützen auch OO.

    2. Beschreiben Sie kurz die Zugriffsrechte privater, geschützter und öffentlicher Modifikatoren.

    private: private Mitglieder, auf die nur innerhalb der Klasse zugegriffen werden kann.

    protected: geschützte Mitglieder, zugänglich innerhalb der Klasse und geerbter Klassen.

    öffentlich: Öffentliche Mitglieder, vollständig öffentlich, keine Zugangsbeschränkungen.

    3. Was ist der Unterschied zwischen Heap und Stack?

    Der Stapel ist ein Speicherplatz, der während der Kompilierung zugewiesen wird. Daher muss die Größe des Stapels in Ihrem Code klar definiert werden.

    Der Heap ist ein Speicherplatz, der während der Ausführung des Programms dynamisch zugewiesen wird Der Ausführungsstatus des Programms. Die Größe des zuzuordnenden Heap-Speichers.

    4. Der Hauptunterschied zwischen XML und HTML

    Unterschiedliche grammatikalische Anforderungen:

    (1) Groß- und Kleinschreibung wird in HTML nicht beachtet, strikte Unterscheidung in XML.

    (2) In HTML ist es manchmal nicht streng, wenn der Kontext deutlich zeigt, wo der Absatz- oder Listenschlüssel endet, dann können Sie das

    oder ein ähnliches schließendes Tag weglassen. In XML handelt es sich um eine strikte Baumstruktur und das schließende Tag darf nicht weggelassen werden.

    (3) In XML müssen Elemente, die ein einzelnes Tag ohne passendes schließendes Tag haben, mit einem /-Zeichen enden. Auf diese Weise weiß der Parser, dass er nicht nach dem schließenden Tag suchen soll.

    (4) In XML müssen Attributwerte in Anführungszeichen gesetzt werden. In HTML sind Anführungszeichen optional.

    (5) In HTML können Sie Attributnamen ohne Werte haben. In XML müssen alle Attribute entsprechende Werte haben.

    (6) In XML-Dokumenten werden Leerzeichenteile vom Parser nicht automatisch gelöscht, aber HTML filtert Leerzeichen heraus.

    Unterschiede bei Tags:

    (1) HTML verwendet inhärente Tags; XML hat keine inhärenten Tags.

    (2) HTML-Tags sind vordefiniert; XML-Tags sind kostenlos, anpassbar und erweiterbar.

    Verschiedene Funktionen:

    (1) HTML wird zum Anzeigen von Daten verwendet; XML wird zum Beschreiben von Daten und Speichern von Daten verwendet, sodass es als Persistenzmedium verwendet werden kann! HTML kombiniert Daten und Anzeige und zeigt die Daten auf der Seite an; XML trennt Daten und Anzeige. XML dient der Beschreibung von Daten, wobei der Inhalt der Daten im Vordergrund steht. HTML wurde zur Darstellung von Daten entwickelt, wobei der Schwerpunkt auf dem Erscheinungsbild der Daten liegt.

    (2) XML ist kein Ersatz für HTML, XML und HTML sind zwei Sprachen mit unterschiedlichen Verwendungszwecken. XML soll HTML nicht ersetzen; vielmehr kann XML als Ergänzung zu HTML betrachtet werden. Die Ziele von XML und HTML sind unterschiedlich. Das Designziel von HTML besteht darin, Daten anzuzeigen und sich auf das Erscheinungsbild der Daten zu konzentrieren, während das Designziel von XML darin besteht, die Daten zu beschreiben und sich auf den Inhalt der Daten zu konzentrieren.

    (3) Die beste Beschreibung von XML könnte sein: XML ist ein plattformübergreifendes, software- und hardwareunabhängiges Werkzeug zur Verarbeitung und Übertragung von Informationen.

    (4) XML wird in Zukunft überall sein. XML wird das am weitesten verbreitete Werkzeug zur Datenverarbeitung und Datenübertragung werden.

    5. Was sind die Merkmale von objektorientiert?

    Umfasst hauptsächlich Kapselung, Vererbung und Polymorphismus. Wenn es 4 Aspekte sind, fügen Sie hinzu: Abstraktion.

    Kapselung:

    Kapselung ist die Grundlage dafür, dass Softwarekomponenten eine hervorragende Modularität aufweisen. Das Ziel der Kapselung besteht darin, eine hohe Kohäsion und geringe Kopplung von Softwarekomponenten zu erreichen und die Auswirkungen von Änderungen zu verhindern, die durch gegenseitige Programmabhängigkeit verursacht werden. Vererbung :

    Wenn Sie eine Klasse definieren und implementieren, können Sie dies auf der Grundlage einer vorhandenen Klasse tun. Sie können den von dieser vorhandenen Klasse definierten Inhalt als Ihren eigenen Inhalt verwenden und neue Inhalte hinzufügen oder die ursprüngliche Methode ändern um es für besondere Bedürfnisse geeigneter zu machen. Dies ist Vererbung. Vererbung ist ein Mechanismus für Unterklassen zum automatischen Austausch von Daten und Methoden der übergeordneten Klasse. Dabei handelt es sich um eine Beziehung zwischen Klassen, die die Wiederverwendbarkeit und Skalierbarkeit von Software verbessert.

    Polymorphismus:
    Polymorphismus bedeutet, dass der spezifische Typ, auf den die im Programm definierte Referenzvariable zeigt, und der über die Referenzvariable ausgegebene Methodenaufruf nicht während der Programmierung, sondern während der Ausführung des Programms bestimmt werden, d. eine Referenz Auf welches Klasseninstanzobjekt die Variable verweist und welche Klasse den von der Referenzvariablen ausgegebenen Methodenaufruf implementiert, muss während der Ausführung des Programms ermittelt werden.

    Abstraktion:
    Bei der Abstraktion geht es darum, die Ähnlichkeiten und Gemeinsamkeiten einiger Dinge herauszufinden und diese dann in eine Klasse einzuteilen. Diese Klasse berücksichtigt nur die Ähnlichkeiten und Gemeinsamkeiten dieser Dinge und ignoriert das aktuelle Thema und Ziel Aspekte, die irrelevant sind, konzentrieren sich auf diejenigen Aspekte, die für das aktuelle Ziel relevant sind. Wenn Sie beispielsweise eine Ameise und einen Elefanten sehen und sich vorstellen können, wie ähnlich sie sind, handelt es sich um Abstraktion.

    6. Was sind die Konzepte und Unterschiede zwischen abstrakten Klassen und Schnittstellen?

    Abstrakte Klasse: Es handelt sich um eine spezielle Klasse, die nicht instanziiert werden kann und nur als übergeordnete Klasse anderer Klassen verwendet werden kann. Wird mit dem Schlüsselwort abstract deklariert.

    Schnittstelle: Es handelt sich um eine spezielle abstrakte Klasse und eine spezielle Klasse, die über die Schnittstelle deklariert wird.

    Unterschied:

    (1) Die Operationen abstrakter Klassen werden durch das Vererbungsschlüsselwort „extens“ implementiert, während die Verwendung von Schnittstellen durch das Schlüsselwort „implements“ implementiert wird.

    (2) Es gibt Datenelemente in abstrakten Klassen, die eine Datenkapselung realisieren können, aber Schnittstellen haben keine Datenelemente.

    (3) Abstrakte Klassen können Konstruktoren haben, aber Schnittstellen haben keine Konstruktoren.

    (4) Methoden abstrakter Klassen können mit den Schlüsselwörtern private, protected und public geändert werden (abstrakte Methoden können nicht privat sein), während Methoden in Schnittstellen nur mit dem Schlüsselwort public geändert werden können.

    (5) Eine Klasse kann nur von einer abstrakten Klasse erben und eine Klasse kann mehrere Schnittstellen gleichzeitig implementieren.

    (6) Eine abstrakte Klasse kann Implementierungscode für Mitgliedsmethoden haben, aber eine Schnittstelle kann keinen Implementierungscode für Mitgliedsmethoden haben.

    7. Was ist ein Konstruktor, was ist ein Destruktor und welche Funktion hat er?

    Der Konstruktor (Methode) ist die erste Methode, die das Objekt automatisch aufruft, nachdem das Objekt erstellt wurde. Sie existiert in jeder deklarierten Klasse und ist eine spezielle Member-Methode. Seine Funktion besteht darin, einige Initialisierungsaufgaben auszuführen. In PHP wird __construct() zum Deklarieren der Konstruktormethode verwendet, und es kann nur eine deklariert werden.

    Der Destruktor (Methode) ist genau das Gegenteil des Konstruktors. Er ist die letzte Methode, die vom Objekt automatisch aufgerufen wird, bevor es zerstört wird. Dabei handelt es sich um einen neu in PHP5 hinzugefügten Inhalt, der dazu dient, bestimmte Vorgänge auszuführen, bevor ein Objekt zerstört wird, wie etwa das Schließen von Dateien und das Freigeben von Speicher.

    8. So überladen Sie die Methoden der übergeordneten Klasse anhand von Beispielen

    Überladen bedeutet, die Methoden der übergeordneten Klasse zu überschreiben, dh die Methoden in der Unterklasse zu verwenden, um die von der übergeordneten Klasse geerbten Methoden zu ersetzen wird auch als Methodenüberschreibung bezeichnet.

    Der Schlüssel zum Überschreiben der Methode der übergeordneten Klasse besteht darin, in der übergeordneten Klasse dieselbe Methode in der Unterklasse zu erstellen, einschließlich Methodenname, Parameter und Rückgabewerttyp. In PHP müssen nur die Namen der Methoden identisch sein.

    9. Was sind die am häufigsten verwendeten magischen Methoden? Beispielsweise legt

    PHP fest, dass Methoden, die mit zwei Unterstrichen (__) beginnen, als magische Methoden reserviert sind. Es wird daher empfohlen, dass Ihr Funktionsname nicht mit __ beginnt, es sei denn, er soll eine vorhandene magische Methode überladen.

    __construct() wird beim Instanziieren einer Klasse automatisch aufgerufen.

    __destruct() wird automatisch aufgerufen, wenn das Klassenobjekt verwendet wird.

    __set() wird aufgerufen, wenn einer undefinierten Eigenschaft ein Wert zugewiesen wird.

    __get() wird aufgerufen, wenn undefinierte Eigenschaften aufgerufen werden.

    __isset() wird aufgerufen, wenn die Funktion isset() oder empty() verwendet wird.

    __unset() wird aufgerufen, wenn unset() verwendet wird.

    __sleep() wird beim Serialisieren mit serialize aufgerufen.

    __wakeup() wird beim Deserialisieren mit unserialize aufgerufen.

    __call() wird aufgerufen, wenn eine Methode aufgerufen wird, die nicht existiert.

    __callStatic() ruft eine statische Methode auf, die nicht existiert.

    __toString() wird beim Konvertieren eines Objekts in einen String aufgerufen. Wie Echo.

    __invoke() Wird aufgerufen, wenn versucht wird, ein Objekt als Methode aufzurufen.

    __set_state() Wird aufgerufen, wenn die Funktion var_export() verwendet wird. Akzeptiert einen Array-Parameter.

    __clone() wird aufgerufen, wenn clone zum Kopieren eines Objekts verwendet wird.

    10. Was bedeuten die drei Schlüsselwörter $this und self und parent? In welchen Situationen wird es verwendet?

    $dieses aktuelle Objekt

    selbst aktuelle Klasse

    übergeordnete Klasse der aktuellen Klasse

    $this wird in der aktuellen Klasse verwendet, verwenden Sie ->, um Eigenschaften und Methoden aufzurufen.

    self wird auch in der aktuellen Klasse verwendet, muss aber mit :: aufgerufen werden.

    parent wird im Unterricht verwendet.

    11. Wie man Konstanten in einer Klasse definiert, wie man Konstanten in einer Klasse aufruft und wie man Konstanten außerhalb einer Klasse aufruft.

    Die Konstanten in der Klasse sind auch Mitgliedskonstanten. Eine Konstante ist eine Größe, die sich nicht ändert und ein konstanter Wert ist.

    Definieren Sie Konstanten mit dem Schlüsselwort const.

    Zum Beispiel: const PI = 3.1415326;

    Ob innerhalb einer Klasse oder außerhalb einer Klasse, der Zugriff auf Konstanten unterscheidet sich vom Zugriff auf Variablen. Konstanten müssen keine Objekte instanziieren ,

    Zugriffskonstanten Das Format ist der Klassenname plus das aufzurufende Bereichsoperationssymbol (Doppelpunkt).

    Das heißt: Klassenname :: Klassenkonstantenname;

    12. Scope-Operator::Wie benutzt man? In welchen Situationen wird es verwendet?

    (1) Aufrufen von Klassenkonstanten

    (2) Aufrufen statischer Methoden (mit statischen Methoden modifiziert)

    13 Was ist das Funktionsprinzip der __autoload()-Methode?

    Die Grundvoraussetzung für die Verwendung dieser magischen Funktion ist, dass der Dateiname der Klassendatei mit dem Namen der Klasse übereinstimmen muss.

    Wenn das Programm zum Instanziieren einer bestimmten Klasse ausgeführt wird und die Klassendatei nicht vor der Instanziierung eingeführt wird, wird die Funktion __autoload() automatisch ausgeführt.

    Diese Funktion durchsucht den Pfad der Klassendatei basierend auf dem Namen der instanziierten Klasse. Wenn festgestellt wird, dass die Klassendatei im Pfad der Klassendatei vorhanden ist, führt

    include oder require aus, um die Klasse zu laden , und das Programm wird dann weiter ausgeführt. Wenn die Datei in diesem Pfad nicht vorhanden ist, wird eine Fehlermeldung angezeigt.

    Durch die Verwendung der magischen Funktion zum automatischen Laden entfällt die Notwendigkeit, viele Include- oder Require-Funktionen zu schreiben.

    4. THINKPHP-Teil

    1. Gängige PHP-Frameworks

    Antwort: thinkPHP, laravel, yii, ci usw.

    2. Wie ist die Einzeleintragsdatei in TP zu verstehen?

    ThinkPHP verwendet einen Einzeleingangsmodus für die Projektbereitstellung und den Zugriff. Unabhängig davon, welche Funktion ausgeführt wird, verfügt ein Projekt über einen einheitlichen (aber nicht unbedingt den einzigen) Eingang. Es sollte gesagt werden, dass alle Projekte mit der Eintragsdatei beginnen und die Eintragsdateien aller Projekte ähnlich sind.

    Die Eintragsdatei enthält hauptsächlich:

    (1) Definieren Sie den Framework-Pfad, den Projektpfad und den Projektnamen (optional)
    (2) Definieren Sie zugehörige Konstanten für den Debug-Modus und den Betriebsmodus (optional)
    (3) Laden Sie Enter die Framework-Eintragsdatei (erforderlich)

    3. Was ist die MVC-Schichtung in ThinkPHP? (Verstehen)

    MVC ist eine Methode zur Trennung der logischen Schicht und der Präsentationsschicht einer Anwendung. ThinkPHP basiert ebenfalls auf dem MVC-Entwurfsmuster. MVC ist nur ein abstraktes Konzept und hat keine besonders klaren Vorschriften. Die MVC-Schichtung in ThinkPHP spiegelt sich grob wider in:

    Model (M): Die Definition des Modells wird durch die Model-Klasse vervollständigt.

    Controller (C): Der Anwendungscontroller (App-Klasse des Kerncontrollers) und der Aktionscontroller übernehmen beide die Rolle des Controllers. Der Aktionscontroller vervollständigt die Geschäftsprozesssteuerung, während der Anwendungscontroller für die Planungssteuerung verantwortlich ist.

    Ansicht (V): Besteht aus Ansichtsklasse und Vorlagendatei. Die Vorlage ist zu 100 % getrennt und kann unabhängig voneinander in der Vorschau angezeigt und erstellt werden.

    Aber tatsächlich ist ThinkPHP nicht auf M oder V angewiesen, was bedeutet, dass es ohne Modelle oder Ansichten funktionieren kann. Es ist nicht einmal auf C angewiesen. Dies liegt daran, dass ThinkPHP zusätzlich zu Action auch über einen Master-Controller verfügt, den App-Controller, der für die Gesamtplanung der Anwendung verantwortlich ist. Fehlt C, muss View V vorhanden sein, andernfalls handelt es sich nicht mehr um eine vollständige Anwendung.
    Alles in allem bietet das MVC-Modell von ThinkPHP lediglich ein Mittel zur agilen Entwicklung, anstatt sich an MVC selbst zu halten.

    4. Wie optimiert man SQL? (Die Schüler können die folgende Erklärung verstehen und dann die allgemeine Bedeutung basierend auf ihrem eigenen Verständnis ausdrücken)

    (1) Wählen Sie die richtige Speicher-Engine

    MyISAM eignet sich für einige Anwendungen, die eine große Anzahl von Abfragen erfordern, andere jedoch nicht ideal für viele Schreibvorgänge. Selbst wenn Sie nur ein Feld aktualisieren müssen, wird die gesamte Tabelle gesperrt und andere Prozesse, auch der Lesevorgang, können nicht ausgeführt werden, bis der Lesevorgang abgeschlossen ist. Darüber hinaus ist MyISAM bei Berechnungen wie SELECT COUNT(*) extrem schnell.
    Der Trend von InnoDB wird eine sehr komplexe Speicher-Engine sein, und für einige kleine Anwendungen wird sie langsamer sein als MyISAM. Es unterstützt jedoch die „Zeilensperre“ und ist daher besser, wenn viele Schreibvorgänge ausgeführt werden. Darüber hinaus werden auch fortgeschrittenere Anwendungen wie Transaktionen unterstützt.

    (2) Optimieren Sie den Datentyp des Feldes
    Denken Sie an einen Grundsatz: Je kleiner die Spalte, desto schneller. Wenn eine Tabelle nur wenige Spalten hat (z. B. eine Wörterbuchtabelle, eine Konfigurationstabelle), gibt es keinen Grund, INT als Primärschlüssel zu verwenden. Es ist wirtschaftlicher, MEDIUMINT, SMALLINT oder einen kleineren TINYINT zu verwenden. Wenn Sie die Zeit nicht im Auge behalten müssen, ist es viel besser, DATE als DATETIME zu verwenden. Natürlich müssen Sie auch genügend Raum für Erweiterungen lassen.

    (3) Fügen Sie dem Suchfeld einen Index hinzu
    Der Index bedeutet nicht unbedingt den Primärschlüssel oder das einzige Feld. Wenn es in Ihrer Tabelle ein Feld gibt, das Sie immer für die Suche verwenden, ist es am besten, es zu indizieren, es sei denn, das Feld, das Sie durchsuchen möchten, ist ein großes Textfeld, dann sollten Sie einen Volltextindex erstellen.

    (4) Vermeiden Sie die Verwendung von Select Je mehr Daten aus der Datenbank gelesen werden, desto langsamer wird die Abfrage. Wenn Ihr Datenbankserver und Ihr WEB-Server außerdem zwei unabhängige Server sind, erhöht dies auch die Last der Netzwerkübertragung. Auch wenn Sie alle Felder in der Datentabelle abfragen möchten, sollten Sie versuchen, keine Platzhalter zu verwenden. Eine sinnvolle Verwendung der integrierten Feldausschlussdefinitionen kann zu mehr Komfort führen.

    (5) Verwenden Sie ENUM anstelle von VARCHAR
    Der ENUM-Typ ist sehr schnell und kompakt. Tatsächlich enthält es einen TINYINT, erscheint jedoch als Zeichenfolge. Auf diese Weise ist es ideal, dieses Feld zum Erstellen einiger Auswahllisten zu verwenden. Wenn beispielsweise die Werte von Feldern wie Geschlecht, ethnische Zugehörigkeit, Abteilung und Status begrenzt und fest sind, sollten Sie ENUM anstelle von VARCHAR verwenden.

    (6) Verwenden Sie wann immer möglich NOT NULL
    Sofern Sie keinen ganz bestimmten Grund haben, NULL-Werte zu verwenden, sollten Sie Ihre Felder immer auf NOT NULL belassen. NULL benötigt tatsächlich zusätzlichen Speicherplatz und Ihr Programm wird komplexer, wenn Sie Vergleiche durchführen. Dies bedeutet natürlich nicht, dass Sie nicht NULL verwenden können. Die Realität ist sehr kompliziert und es wird immer noch Situationen geben, in denen Sie NULL-Werte verwenden müssen.

    (7) Tabellen mit fester Länge sind schneller
    Wenn alle Felder in der Tabelle „feste Länge“ haben, wird die gesamte Tabelle als „statisch“ oder „feste Länge“ betrachtet. Beispielsweise enthält die Tabelle keine Felder der folgenden Typen: VARCHAR, TEXT, BLOB. Solange Sie eines dieser Felder einschließen, ist die Tabelle keine „statische Tabelle fester Länge“ mehr und die MySQL-Engine verarbeitet sie auf andere Weise.

    Tabellen mit fester Länge verbessern die Leistung, da MySQL schneller sucht. Da diese festen Längen die Berechnung des Offsets der nächsten Daten erleichtern, erfolgt das Lesen natürlich schneller. Und wenn das Feld keine feste Länge hat, muss das Programm jedes Mal, wenn Sie das nächste finden möchten, den Primärschlüssel finden.
    Außerdem lassen sich Tabellen mit fester Länge einfacher zwischenspeichern und neu erstellen. Der einzige Nebeneffekt besteht jedoch darin, dass Felder mit fester Länge etwas Platz verschwenden, da Felder mit fester Länge unabhängig davon, ob Sie sie verwenden oder nicht, so viel Platz beanspruchen.

    5. Wie ist das Verhalten in der ThinkPHP 3.0-Architektur zu verstehen (Kern + Verhalten + Treiber)?

    (1) Kern: Es ist der Kerncode des Frameworks, eine unverzichtbare Sache. TP selbst ist ein Framework, das auf der MVC-Idee basiert.

    (2) Verhalten: Verhalten spielt eine entscheidende Rolle in der Architektur der neuen Version von ThinkPHP. Im Kern des Systems sind viele Tag-Erweiterungsbits gesetzt, und jede Tag-Position kann der Reihe nach ihr eigenes unabhängiges Verhalten ausführen. Auf diese Weise wurden Verhaltenserweiterungen geboren, und viele Systemfunktionen werden auch durch integrierte Verhaltenserweiterungen vervollständigt. Alle Verhaltenserweiterungen sind austauschbar und additiv und bilden somit die Grundlage für den Aufbau des zugrunde liegenden Frameworks.

    (3) Treiber: Datenbanktreiber, Cache-Treiber, Tag-Bibliothekstreiber und Template-Engine-Treiber sowie externe Klassenerweiterungen.

    6. Was ist die herkömmliche Konfiguration?

    Die sogenannte konventionelle Konfiguration ist die Konfigurationsdatei, die dem Framework beiliegt. Diese Datei befindet sich in Convention.php im Kern-Framework-Verzeichnis und der Konfigurationsinhalt lautet wie folgt. Da es sich bei dieser Datei um eine Konfigurationsdatei handelt, die mit dem Framework geliefert wird, dient sie uns im eigentlichen Entwicklungsprozess hauptsächlich als Referenzbeispiel. Wir ändern den Konfigurationsinhalt dieser Datei selten und konfigurieren die Felder häufiger entsprechend den Anforderungen gemäß der Konvention Definitionen und Anmerkungen zum Anpassen von Konfigurationsinhalten in Modulen oder Common.

    7. Was ist SQL-Injection? (Verstehen)

    Der SQL-Injection-Angriff ist eine der häufigsten Methoden, mit denen Hacker Datenbanken angreifen.

    Einige Programmierer beurteilen die Rechtmäßigkeit der Benutzereingabedaten beim Schreiben von Code nicht. Der Injektor kann einen Datenbankabfragecode in das Formular eingeben und ihn senden. Das Programm fügt die übermittelten Informationen zusammen, um eine vollständige SQL-Anweisung und den Server zu generieren wird dazu verleitet, den bösartigen SQL-Befehl auszuführen. Der Injektor ruft erfolgreich einige sensible Daten ab, die auf den vom Programm zurückgegebenen Ergebnissen basieren, und steuert sogar den gesamten Server. Dies ist eine SQL-Injection.

    8. Wie verhindert ThinkPHP SQL-Injection? (Verstehen)

    (1) Versuchen Sie, Arrays für Abfragebedingungen zu verwenden.

    (2) Wenn Sie Zeichenfolgenabfragebedingungen verwenden müssen, verwenden Sie den Vorverarbeitungsmechanismus.

    (3) Verwenden Sie die Bindungsdefinition Parameter

    (4) Aktivieren Sie die Datenfeldtypüberprüfung, und Sie können die Konvertierung numerischer Datentypen erzwingen (Feldtypüberprüfung ist seit Version 3.1 obligatorisch)

    (5) Verwenden Sie automatische Überprüfungs- und automatische Vervollständigungsmechanismen, um Anwendungs- spezifische Überprüfung Benutzerdefinierte Filterung;

    (6) Verwenden Sie Feldtypprüfung, automatische Überprüfung und automatische Vervollständigungsmechanismen, um böswillige Dateneingaben zu vermeiden.

    9. Wie aktiviere ich den Debugging-Modus? Welche Vorteile bietet der Debug-Modus?

    Das Aktivieren des Debugging-Modus ist sehr einfach. Sie müssen nur eine Zeile Konstantendefinitionscode zur Eintragsdatei hinzufügen:

    // Beim Einschalten des Debugging-Modus wird empfohlen, Kommentare zur Bereitstellungsphase während der Entwicklungsphase zu aktivieren oder auf false zu setzen.
    define('APP_DEBUG', true);
    Die Vorteile des Debugging-Modus sind: Aktivieren Sie die Protokollierung, beliebig Fehlerinformationen und Debugging-Informationen werden detailliert aufgezeichnet, um das Debuggen zu erleichtern. Die Änderung der Vorlage kann sofort wirksam werden, um die SQL-Analyse zu erleichtern. Änderungen an den Feldern der Datentabelle werden nicht beeinträchtigt Caching; Überprüfen Sie die Dateigröße genau (auch auf Windows-Plattformen), um Linux-Bereitstellungen im Voraus zu erkennen. Es kann bequem in verschiedenen Phasen des Entwicklungsprozesses verwendet werden, einschließlich Entwicklung, Test, Demonstration und anderen erforderlichen Anwendungsmodi mit unabhängigen Projektkonfigurationsdateien konfiguriert werden.

    10. Welche Konfigurationsmodi werden in TP unterstützt? Priorität?

    Konventionelle Konfiguration->Anwendungskonfiguration->Moduskonfiguration->Debug-Konfiguration->Statuskonfiguration->Modulkonfiguration->Erweiterte Konfiguration->Dynamische Konfiguration

    Das Obige ist die Ladesequenz des Konfigurationsdatei. Da die nachfolgende Konfiguration die vorherige Konfiguration mit demselben Namen überschreibt (wenn sie nicht wirksam wird), ist die Prioritätsreihenfolge von rechts nach links.

    11. Was sind die URL-Muster in TP? Welches ist die Standardeinstellung?

    ThinkPHP unterstützt vier URL-Modi, die durch Festlegen des URL_MODEL-Parameters definiert werden können, einschließlich Normalmodus, PATHINFO, REWRITE und Kompatibilitätsmodus.
    Der Standardmodus ist: PATHINFO-Modus, setzen Sie URL_MODEL auf 1

    12. Was sind die Systemvariablen in TP? Wie erhalte ich Systemvariablen?

    (1) Systemvariablen: ​ ​ ​​ ​​                                     S                   ​​ ​​ E ​​ ​​ R ​​ ​​ V ​​ ​​ E ​​ ​​ R ​​ ​​ , , ​​ ​​ ​​ _SERVER, ​ ERVER , _ENV, $_POST, $_GET, ​ ​ ​​ ​​                                     R                   ​​ ​​ E ​​ ​​ Q ​​ ​​ U ​​ ​​ E ​​ ​​ S ​​ ​​ T ​​ ​​ , , ​​ ​​ ​​ ​ _REQUEST, ​ ​ R EQUES T, _SESSION und $_COOKIE Variablen

    (2) Systemvariablen abrufen:

    {KaTeX parse error: Expected 'EOF', got '}' at position 25: …ver.script_name} ̲ // Ausgabe der Variablen _SERVER['SCRIPT_NAME']

    {KaTeX-Parse-Fehler: Erwartet 'EOF', got '}' an Position 22: …session.user_id}̲ // Ausgabe _SESSION['user_id'] Variable

    {KaTeX-Parse-Fehler: Erwartet 'EOF', got '}' an Position 21: ….get.pageNumber}̲ // Ausgabe der Variablen _GET['pageNumber']

    {KaTeX parse error: Expected 'EOF', got '}' at position 18: …ink.cookie.name}̲ // Ausgabe der _COOKIE['name']-Variable

    13 und Was ist der Unterschied zwischen M-Funktionen?

    Die M-Methode instanziiert das Modell, ohne dass der Benutzer eine Modellklasse für jede Datentabelle definiert. Die D-Methode kann die Modellklasse automatisch erkennen. Wenn sie nicht vorhanden ist , wird automatisch die M-Methode aufgerufen, um die Model-Basisklasse zu instanziieren. Gleichzeitig werden instanziierte Modelle nicht wiederholt instanziiert (Einzelfallmodus).

    5. Smarty Template Engine

    1. Was ist der Unterschied zwischen Kompilierung und Caching?

    Der Kompilierungsprozess von Smarty besteht darin, die darin enthaltenen Tags durch den entsprechenden PHP-Code zu ersetzen. Tatsächlich handelt es sich um den Prozess, bei dem PHP und HTML gemischt werden Der Cache von Smarty muss manuell aktiviert werden. Nachdem die gute Datei ausgeführt wurde, wird gleichzeitig eine statische HTML-Seite generiert. Wenn Sie erneut darauf zugreifen, greifen Sie aus Effizienzgründen auf die HTML-Datei zu. es ist höher.

    2. Was ist Smarty?

    Smarty ist eine in PHP geschriebene PHP-Vorlagen-Engine, die es Programmierern ermöglicht, den logischen Inhalt des Programms zu ändern. Es hat keinen Einfluss auf das Seitendesign des Künstlers. Wenn der Künstler die Seite erneut ändert, hat dies keine Auswirkungen auf die Programmlogik des Programms. Dies ist besonders wichtig bei Projekten zur Zusammenarbeit mit mehreren Personen. (Es ist auch einfach, Multi-Style-Programme zu entwickeln)

    Vorteile von Smarty

    (1) Schnell: im Vergleich zu anderen Template-Engines.

    (2) Kompilierter Typ: Ein in Smarty geschriebenes Programm muss zur Laufzeit in eine PHP-Datei ohne Template-Technologie kompiliert werden.

    (3) Caching-Technologie: Sie kann die HTML-Datei, die der Benutzer schließlich sieht, in einer statischen HTML-Seite zwischenspeichern

    (4) Plug-in-Technologie: smarty kann Plug-ins anpassen.

    Nicht für die Verwendung von smarty geeignet

    (1) Inhalte, die in Echtzeit aktualisiert werden müssen. Beispielsweise müssen die Daten wie bei der Bestandsanzeige häufig aktualisiert werden

    (2) Kleine Projekte. Ein kleines Projekt, das aufgrund seiner Einfachheit sowohl einen Künstler als auch einen Programmierer erfordert.

    3 Verwenden Sie {$smarty}, um Variablen in der Vorlage beizubehalten. an Position 16: smarty.get.page}̲ //Ähnlich dem Zugriff auf _GET[page] in einem PHP-Skript {

    KaTeX parse error: Expected 'EOF', got '}' an Position 16: smarty.cookies. }̲ {smarty.post.} {
    KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.session.}̲ {smarty.server.}
    in Vorlage Zugriffsvariablen in PHP

    1. 5. Variablenvermittler
    2. Zusammenfassung der klassischen PHP-Interviewfragen

    6. Wenn PHP die MySQL-Datenbank abfragt, werden beim Abfragen der chinesischen Ergebnisse verstümmelte Zeichen angezeigt . Wie kann man es lösen?

    (1) Datei-Meta (beim Einrichten des Browser-Parsings)

    (2) Kodierungseinstellung beim Herstellen einer Verbindung zur Datenbank (3) Verwenden Sie die Header-Funktion in der PHP-Datei, um die Kodierung zu bestimmen

    7 Mechanismus

    Wenn das Caching aktiviert ist, generiert smarty gleichzeitig eine statische HTML-Seite. Wenn diese nicht innerhalb der eingestellten Zeit abläuft, greifen Sie beim erneuten Zugriff auf die HTML-Datei zu, was den Lesebedarf verringert Die Datenbank ist daher in Bezug auf die Effizienz höher.

    8. Smartys Zuweisungs- und Ladevorlage

    $Smarty->assign(name,value)

    $Smarty->display('index.html')

    9 Die Verwendung der Marty-Vorlagentechnologie ist es?


    Um PHP und HTML zu trennen, können Künstler und Programmierer ihre eigenen Aufgaben erfüllen, ohne sich gegenseitig zu stören.

    10. Was sind die wichtigsten Smarty-Konfigurationen?

    (1) Führen Sie smarty.class.php ein.

    (2) Instanziieren Sie das Smarty-Objekt. (3) Ändern Sie den Standardpfad für die kompilierte Datei.

    (5) Ändern Sie den Standardpfad der Konfigurationsdatei erneut.

    (6) Ändern Sie den Standard-Cache-Pfad erneut.

    (7) Sie können festlegen, ob der Cache aktiviert werden soll.

    (8) Sie können linke und rechte Trennzeichen festlegen.

    11. Auf welche Details müssen Sie bei der Nutzung von smarty achten?

    Smarty ist eine Template-Engine, die auf dem MVC-Konzept basiert. Sie unterteilt ein Seitenprogramm zur Implementierung in zwei Teile: die Ansichtsebene und die Steuerungsebene.

    Mit anderen Worten: Die Smarty-Technologie trennt die Benutzeroberfläche vom PHP-Code.

    Auf diese Weise können Programmierer und Künstler ihre jeweiligen Aufgaben erfüllen, ohne sich gegenseitig zu behindern.

    12. Achten Sie bei der Nutzung von smarty auf folgende Punkte:

    (1) Konfigurieren Sie smarty richtig. Hauptsächlich zum Instanziieren des Smarty-Objekts und zum Konfigurieren des Pfads der Smarty-Vorlagendatei.

    (2) Verwenden Sie Zuweisung und Anzeige, um die Seite auf der PHP-Seite anzuzeigen Die Smarty-Vorlagendatei muss in Trennzeichen enthalten sein.

    6. Sekundäres Entwicklungssystem (DEDE, ecshop)

    1. Verständnis der Sekundärentwicklung

    Sekundärentwicklung besteht einfach darin, vorhandene Software anzupassen und zu ändern, Funktionen zu erweitern und dann die gewünschten Funktionen zu erreichen. Der Kernel des ursprünglichen Systems wird dadurch nicht geändert.

    2, MVC

    Modelldatenverarbeitung.
    Vorlagenanzeige anzeigen.
    Controller steuert den Prozess.
    Was ist das Konzept von MVC? Was sind die Hauptaufgaben jedes Levels?
    MVC (Model-View-Controller) ist ein Software-Designmuster oder eine Programmieridee.
    M bezieht sich auf die Modellmodellebene, V ist die Ansichtsebene (Anzeigeebene oder Benutzeroberfläche) und C ist die Controllerebene.
    Der Zweck der Verwendung von mvc besteht darin, M und V zu trennen, sodass ein Programm problemlos verschiedene Benutzeroberflächen verwenden kann.
    Bei der Website-Entwicklung ist
    Die Modellebene für das Hinzufügen, Löschen, Ändern und Überprüfen von Datenbanktabelleninformationen verantwortlich.
    Die Ansichtsebene ist für die Anzeige von Seiteninhalten verantwortlich.
    Die Controller-Ebene spielt eine regulierende Rolle Die Controller-Schicht entscheidet, welches Modell aufgerufen werden soll, welche Methode der Klasse.
    Nach der Ausführung entscheidet die Controller-Schicht, welcher Ansichtsschicht das Ergebnis zugewiesen wird.

    3. Beim Zugriff auf das sekundäre Entwicklungsprogramm nach der Installation sind einige Warnungen und Fehler aufgetreten. Ändern Sie entsprechend den Fehlern die Serverkonfigurationsparameter und Baidu. 4. Funktionen, Vorlagenersetzung, Funktionsergänzungen und -änderungen Tatsächlich wird es für objektorientierte Anwendungen verwendet und der Vorlagenaustausch ähnelt der Verwendung von smarty

    5 Welche sekundären Entwicklungstools haben Sie verwendet?

    Dedecms phpcms ecshop, wenn Sie eine gute Grundlage in diesen grundlegenden Dingen haben, wird es kein Problem sein, es zu lernen.

    6. Ist es besser, eine Primärentwicklung oder eine Sekundärentwicklung wie PHP durchzuführen?

    Im Allgemeinen verwenden kleine und mittlere Unternehmen aus Effizienzgründen das CMS-System für die Sekundärentwicklung. Wenn Sie alles auf einmal entwickeln möchten, ist das natürlich in Ordnung, solange Sie wissen, wie man das Framework verwendet, und genügend Zeit haben. Große Unternehmen entwickeln in Teams, um Urheberrechtsprobleme zu vermeiden.

    7. Wie werden im sekundären Entwicklungsprozess Methodenzugriffe zwischen vielen Klassen übertragen?

    Es handelt sich nicht um eine Klassenvererbung, sondern um eine Objektkombination, und die instanziierten Objekte werden über global übergeben.

    8 Wenn dedecms das Verzeichnis ändert, kann ein bestimmtes Element im Hintergrund nicht eingegeben werden.

    Ändern Sie die Hintergrund-Kerneinstellungen auf den aktuellen Projektverzeichnisnamen

    9. Verstehen Sie das benutzerdefinierte Modell in dedecms?

    Im Dreamweaver-System gibt es das Konzept des Inhaltsmodells, mit dem Websites mit unterschiedlichen Inhaltsformen erstellt werden können. Das System umfasst die folgenden Modelle: gewöhnliche Artikel, Fotoalben, Software, Produkte und geheime Informationen . , Sonderthemen. Durch die mit dem System gelieferten Modelle können wir damit verschiedene Arten von Websites erstellen. Sie können beispielsweise einen Atlas verwenden, um eine Bilder-Site zu erstellen, und ein Softwaremodell verwenden, um eine Software-Download-Site zu erstellen. Natürlich werden die oben genannten Modelle, die mit dem System geliefert werden, als Systemmodelle bezeichnet. Benutzer können einige Modelle selbst definieren, z. B. Bücher, Musikalben usw. Nur durch die Anpassung dieser Modelle können sie Websites mit mehr Inhaltsformen erstellen.

    Dies ist gleichbedeutend damit, dass wir automatisch eine Tabellenstruktur hinzufügen, um uns an Änderungen der aktuellen Anforderungen anzupassen

    10. Für die Konzepte in dede müssen Sie beim Entwerfen und Verwenden von Vorlagen die folgenden Konzepte verstehen

    (1) Abschnitt (Abdeckung ) Vorlage:

    Bezieht sich auf die Vorlage, die von der Website-Homepage oder dem wichtigeren Spalten-Cover-Kanal verwendet wird, im Allgemeinen mit „index_identification ID.htm“ benannt. Darüber hinaus kann optional auch eine einzelne Seite oder ein vom Benutzer definiertes benutzerdefiniertes Tag eine Abschnittsvorlage unterstützen Wenn dies unterstützt wird, verwendet das System die Abschnittsvorlagen-Tag-Engine zum Parsen, bevor der Inhalt ausgegeben oder eine bestimmte Datei generiert wird.

    (2) Listenvorlage:

    Bezieht sich auf die Vorlage für die Liste aller Artikel in einer bestimmten Spalte der Website, im Allgemeinen benannt mit „list_identification ID.htm“.

    (3) Dateivorlage: Stellt die Vorlage der Dokumentanzeigeseite dar, z. B. die Artikelvorlage, die im Allgemeinen mit „article_identification ID.htm“ benannt wird.

    (4) Andere Vorlagen:
    Das allgemeine System umfasst im Allgemeinen Vorlagen: Homepage-Vorlage, Suchvorlage, RSS, JS-Kompilierungsfunktionsvorlage usw. Darüber hinaus können Benutzer auch eine Vorlage anpassen, um eine beliebige Datei zu erstellen.


    11. Wie viele Tags werden in dede verwendet?


    Listen-, Inhalts- und andere Tags können nur innerhalb ihres Gültigkeitsbereichs verwendet werden, Listen-Tags können nur in Listen verwendet werden und Inhalts-Tags können nur in Inhalts-Tags verwendet werden.

    Globale Tags können auf allen Seiten verwendet werden


    12. Vertraut mit häufig verwendeten Klassenbibliotheken

    (zum Beispiel: dedesql.class.php); vertraut mit Systemfunktionsbibliotheken (common.func.php); vertraut mit benutzerdefinierten Funktionsbibliotheken (erweitern .func.php); Vertraut mit der Front-End-Eintragsdatei (common.inc.php)


    7. Entwicklung der öffentlichen WeChat-Plattform

    1. WeChat-Betriebsmechanismus

    Welche Sprache wird verwendet? um zwischen dem offiziellen Konto und PHP zu kommunizieren:

    WeChat bietet derzeit 7 grundlegende Nachrichtentypen:
    (1) Textnachricht (Text);
    (2) Bildnachricht (Bild);
    (3) Sprache (Stimme)
    (4) Video (Video)
    ( 5) Standort;
    (6) Link-Nachricht (Link);
    (7) Ereignis-Push (Ereignis)
    Typ. Beherrschen Sie das Datenübertragungsformat beim Senden verschiedener Nachrichtentypen ist

    simplexml_load_string( )

    Die Funktion, die einen String in ein Array umwandelt, ist ___ explosion________, und die Funktion, die ein Array in einen String umwandelt, ist ____implode________. Der String, der den URL-String codiert, ist ____urlencode________.

    5 Funktion

    Sie können hierzu im Handbuch nachsehen.

    6. Warum kann das offizielle WeChat-Konto keine Dienste bereitstellen?

    (1) Netzwerkgrund, Grund für Datenschnittstelle
    (2) Codefehler, wie man den Grund errät
    Überprüfen Sie, wo Sie ihn geändert haben, ob der Code korrekt ist
    Sie können die Daten ausgeben und einen Blick darauf werfen. Verwenden Sie PHP, um Dateien zu verwalten
    $myfile = fopen(“newfile.txt”, “w”);
                               T                    X                    T                    =                    "                    A                    A                    A                    A                    A                    A                    A                    A                    A                    A                    "                    ;                    F                    w                    R                    ich                    T                    e                    (                         txt = „aaaaaaaaaa“; fwrite(              txt="aaa aaaa aaa";fwrite( meine Datei,                            T                    X                    T                    )                    ;                    F                    C                    l                    O                    S                    e                    (                         txt); fclose(              txt);fclose(myfile);

    7

    Klicken
    Klicken Sie auf Sprunglink
    Scannen Sie den QR-Code, um das Ereignis zu pushen
    Scannen Sie den QR-Code, um es zu pushen und anzuzeigen
    Rufen Sie das Foto des Systems auf und posten Sie das Event
    Rufen Sie das WeChat-Fotoalbum-Post-Event auf
    Rufen Sie das Standortauswahl-Event auf

    8 . Die Rolle des Tokens

    Überprüfung des Sicherheitsmechanismus, der für die Sicherheitsüberprüfung zwischen WeChat-Server und PHP-Server verwendet wird

    9 Die Rolle von Appid und Secret

    Bei der Anforderung der API-Schnittstelle (z. B. Menübedienung) benötigen Sie um die appid- und secrect-Werte zu übergeben. Wird verwendet, um den Autorisierungscode der Anwendung zu erhalten. Empfohlenes Lernprogramm: „

    PHP-Video-Tutorial“

Das obige ist der detaillierte Inhalt vonDie umfassendste Sammlung von PHP-Interviewfragen in der Geschichte, die es wert ist, gesammelt zu werden (um Ihr Interview effizienter zu machen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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