Verwandte Empfehlungen: „Zusammenfassung der PHP-Interviewfragen im Jahr 2019 (Sammlung)
1. Grundlegender PHP-Teil
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 daher nicht durch das Betriebssystem eingeschränkt es heißt plattformübergreifend2. Wie viele Methoden gibt es für die Datenübermittlung in der WEB-Entwicklung? Was ist der Unterschied? Welche Methode verwendet Baidu? Get- und Post-Methoden Unterschiede: (1) URL-Sichtbarkeit: Die URL-Parameter der Get-Methode sind sichtbar, Post ist unsichtbar(2) Cachefähigkeit: Die Get-Methode kann zwischengespeichert werden, die Post-Methode jedoch nicht. (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 Anforderungsübertragungsdaten werden gemäß php.ini konfiguriert. Die Dateieinstellung kann auch unendlich groß sein. (4) Datenübertragung: Die Get-Methode wird verwendet, um die 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. Es wird empfohlen, die Post-Datenübermittlungsmethode zu verwenden . Für das Hinzufügen, Ändern oder Löschen von Daten wird die Verwendung der von Baidu verwendeten Get-Methode empfohlen 🎜>3. Beherrschen Sie, welche Frameworks und Vorlagen von PHP-Engines, -Systemen usw. verwendet werden.
Frameworks: Es gibt viele Frameworks wie CI, Yii, Laravel usw. Was wir gelernt haben, ist thinkphp
Template-Engines: Es gibt auch viele, wenn man sie in Lehrbücher einbezieht, lernen wir. Was wir gelernt haben, ist das Smarty
System: Es gibt viele, wie zum Beispiel die Produkte von Kangsheng (uchome, supesite, discuzX, usw.), Empire-System, DEDE (Dreamweaver), Ecshop usw. Was wir gelernt haben, ist DEDECMS, Ecshop
4. Sagen Sie mir, welche Web-Front-End-Technologien Sie beherrschen?
Kompetent in DIV+CSS-Webseitenlayout, JavaScript, jQuery-Framework, Photoshop-Bildverarbeitung
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 teilen Sie uns mit, 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 verwendet.
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: ①Wiederverwendbarkeit von Code kann erreicht werden, um Coderedundanz zu vermeiden; ②M und V realisieren Codetrennung, 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 zu dekodierende Zeichenfolge. 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 sind die Unterschiede 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, sodass es relativ gesehen schneller ist Wenn Sie nur Echo ausgeben, wird Print_r normalerweise zum Drucken von Informationen zu Variablen verwendet, 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 Es handelt sich um einen „Sitzungsdienst“. Sie müssen den Dienst aktivieren, wenn Sie ihn verwenden
13. Häufig verwendete 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 befindet array
(3) count() gibt die Anzahl der Elemente im Array zurück
(4) array_merge() führt mehrere Arrays zu einem Array zusammen
(5) array_diff( ) vergleicht zwei oder die Differenz zwischen zwei oder mehr Arrays
(6) array_intersect() Ruft die Schnittmenge von zwei oder mehr Arrays ab
(7) array_keys() Ruft die Schlüsselliste des Arrays ab
(8) array_values() Holen Sie sich die Werteliste des Arrays
(9) array_unique() Entfernen Sie doppelte Werte im Array
(10) array_push() Ein oder mehrere Elemente in das Array einfügen. Das Ende des Arrays (Push)
(11) array_pop() öffnet das letzte Element des Arrays und gibt es zurück (Push)
(12) array_walk() verwendet eine benutzerdefinierte Funktion zum Array. Die Callback-Verarbeitung wird für jedes Element in
durchgeführt. 14. Was sind die allgemeinen Funktionen für PHP zum Verarbeiten von Zeichenfolgen? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)
(1) trim() entfernt Leerzeichen und andere Zeichen auf beiden Seiten der Zeichenfolge; strlen( ) Ermittelt die Länge der Zeichenfolge
(3) mb_strlen() Ermittelt die Länge der Zeichenfolge (Zeichenkodierung kann angegeben werden, berechnet die Länge für chinesische Zeichenfolgen)
(4) substr() gibt den String-Teil zurück;
(5) str_replace() Teilstring-Ersetzung
(6) str_repeat() wiederholt einen String
(7) is_string() erkennt ob die Variable eine Zeichenfolge ist;
(8) str_shuffle() mischt zufällig eine Zeichenfolge
(9) sprintf() gibt eine Zeichenfolge zurück, die auf der Grundlage einer formatierten Zeichenfolge generiert wird (wird normalerweise zum Erhalten von Ergebnissen verwendet). Der Datentabellenname nach der Tabelle)
(10) strstr() findet das erste Vorkommen der Zeichenfolge
(11) addslashes verwendet Backslashes, um die Zeichenfolge in Anführungszeichen zu setzen
15 . Gemeinsame Funktionen zur Verarbeitungszeit 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() ruft Datums-/Uhrzeitinformationen ab.
(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() Analysiert jede String-Datums-/Uhrzeitbeschreibung in einen Unix-Zeitstempel
(7) strftime() Formatiert lokale Zeit/Datum gemäß regionalen Einstellungen
16. Häufig verwendete Funktionen für PHP zur Verarbeitung von Datenbanken? (Konzentrieren Sie sich auf die „Parameter“ und den „Rückgabewert“ der Funktion)
Bitte lesen Sie das PHP-Handbuch sorgfältig durch.
Was sind die häufigsten Funktionen von PHP zum Betreiben von Dateien genutzt? (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 () ist auch Lesen Sie die Datei
(3) Schreiben Sie die Datei fwrite(); Hinweis: file_put_contents() kann auch die Datei schreiben
(4) Schließen Sie das Dateihandle fclose()
(5) Verschieben/umbenennen Sie die Datei rename()
(6) Kopieren Sie die Datei copy()
(7) Erstellen Sie die Datei vim oder touch
(8) Löschen Sie die Datei unlink()
(9) Rufen Sie die Zeit ab, zu der zuletzt auf die Datei zugegriffen wurde fileatime()
(10) Rufen Sie die Zeit ab, zu der die Datei zuletzt geändert wurde filemtime()
(11) Rufen Sie die Dateigröße ab filesize()
(12) Rufen Sie den Dateityp ab filetype()
(13) Rufen Sie den Dateidetailsstatus ab( )
(14) Bestimmen Sie, ob es sich um ein Verzeichnis is_dir()
18 handelt. Häufig verwendete Funktionen in PHP zum Betreiben von Verzeichnissen (Ordnern)? (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 das Verzeichnis im Pfad zurück Teil dirname()
(7) Holen Sie sich das aktuelle Arbeitsverzeichnis getcwd()
(8) Listen Sie die Dateien und Verzeichnisse im angegebenen Pfad auf scandir()
2. DatenbankteilWas sind die gängigen relationalen Datenbankverwaltungssystemprodukte?
Antwort: Oracle, SQL Server, MySQL, Sybase, DB2, Access usw.
Aus welchen Teilen besteht 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.
Datenmanipulation: Auswählen, Einfügen, Aktualisieren, Löschen,
Datenkontrolle : gewähren, widerrufen
Datenabfrage: auswählen
Welche Integritätsbeschränkungen sind enthalten?
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 den Tabellen sicherzustellen und Datenverlust oder bedeutungslose Datenverteilung zu verhindern Datenbanken.
(4) Benutzerdefinierte Integrität: Verschiedene relationale Datenbanksysteme erfordern je nach 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.
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) Persistenz. 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.
Was ist ein Schloss?
Die Datenbank ist eine gemeinsame Ressource, die von mehreren Benutzern genutzt 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.
Was ist eine Ansicht? Was ist ein Cursor?
Eine Ansicht ist eine virtuelle Tabelle, die dieselben Funktionen wie eine physische Tabelle hat. 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 wirken sich nicht auf die zugrunde liegenden Tabellen aus. 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 Änderungen an der aktuellen Zeile des Ergebnissatzes vornehmen. Cursor werden im Allgemeinen nicht verwendet, aber wenn Daten einzeln verarbeitet werden müssen, sind Cursor sehr wichtig.
Was ist eine gespeicherte Prozedur? Wie soll ich anrufen?
Eine 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.
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. Durch das Erstellen eines Index können Sie eine einzelne Spalte oder mehrere Spalten angeben.
Der Nachteil ist, dass es die Dateneingabe verlangsamt und auch die Größe der Datenbank erhöht.
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 Datensätze erfordert Es gibt eine eindeutige Identität, d. h. die Einzigartigkeit der Entität.
Dritte Normalform: 3NF ist eine Einschränkung der Feldredundanz, d Feld ist nicht redundant. .
Was ist eine Basistabelle? 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 von einer oder mehreren Basistabellen abgeleitet ist. Die Ansicht selbst wird nicht unabhängig in der Datenbank gespeichert, sondern ist eine virtuelle Tabelle
Beschreiben Sie die Vorteile von Ansichten?
(1) Ansichten können Benutzeroperationen vereinfachen
(2) Ansichten ermöglichen es Benutzern, dieselben Daten aus mehreren Blickwinkeln anzuzeigen
(3) Ansichten bieten eine gewisse Datenbank der logischen Unabhängigkeit;
(4) Ansichten können Sicherheitsschutz für vertrauliche Daten bieten.
Was bedeutet NULL?
Der Wert NULL steht für UNKNOWN (unbekannt): Er steht nicht für „“ (leere Zeichenfolge).
Jeder Vergleich mit einem NULL-Wert führt zu einem NULL-Wert.
Sie können keinen Wert mit einem NULL-Wert vergleichen und logischerweise erwarten, eine Antwort zu erhalten.
Verwenden Sie IS NULL für die NULL-Beurteilung
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 einer anderen Tabelle. Der Fremdschlüssel kann wiederholt werden und ein Nullwert sein.
Index – das Feld hat keinen doppelten Wert, aber kann einen Nullwert haben
Funktion:
Primärschlüssel – wird verwendet, um die Datenintegrität sicherzustellen
Fremdschlüssel – wird verwendet, um Verbindungen mit anderen Tabellen herzustellen
Index – wird verwendet, um die Geschwindigkeit der Abfragesortierung zu erhöhen
Nummer:
Primärschlüssel – es kann nur einen Primärschlüssel geben
Fremdschlüssel – eine Tabelle kann mehrere Fremdschlüssel haben
Indizes – eine Tabelle kann mehrere eindeutige Indizes haben
Womit können Sie sicherstellen, dass Felder in einer Tabelle nur bestimmte Bereiche akzeptieren? Wert in ?
Prüfgrenze, die in der Datenbanktabelle definiert ist, wird verwendet, um den in dieser Spalte eingegebenen Wert zu begrenzen.
Sagen Sie mir, welche Methoden es gibt, um SQL-Anweisungen zu optimieren? (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 geschrieben werden der Where-Klausel .HAVING zuletzt.
(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) Optimieren Sie Abfragen, das sollten Sie versuchen Um vollständige Tabellenscans zu vermeiden, sollten Sie zunächst in Betracht ziehen, Indizes für die Spalten zu erstellen, die an „Where“ und „Ordnung nach“ beteiligt sind.
(6) Vermeiden Sie es, Nullwerturteile über Felder 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 es zu vermeiden Verwenden der Where-Klausel Das Ausführen von Ausdrucksoperationen für Felder in Klauseln führt dazu, dass die Engine die Verwendung von Indizes aufgibt und einen vollständigen Tabellenscan durchführt.
Was ist der Unterschied zwischen „korrelierter Unterabfrage“ und „nicht korrelierter Unterabfrage“ in? eine 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.
Nicht korrelierte Unterabfragen sind also effizienter als korrelierte Unterabfragen.
Was ist der Unterschied zwischen char und varchar?
char ist ein Typ mit fester Länge und varchar ist ein Typ mit variabler Länge.
Unterschied:
In einer Datenspalte vom Typ char(M) belegt jeder Wert M Bytes. Wenn eine Länge kleiner als M ist, verwendet MySQL Leerzeichen rechts davon . (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).
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 bei sinnvollem Design für Anwendungen mit vielen Einfüge- und Aktualisierungsvorgängen geeignet ist (der größte Unterschied liegt in der Ebene). der Sperre); geeignet für große Datenmengen, massive Parallelität.
Welche Datentabellentypen gibt es?
MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV usw.
MyISAM: Ausgereift, stabil, einfach zu verwalten, 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 für das Veröffentlichungssystem verwendet. Mehr als 50.000 Einträge werden pro Tag hinzugefügt. Der Betrieb und die Wartung werden voraussichtlich drei Jahre dauern.
(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 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) Für Seiten, die sich nicht häufig ändern, generieren Sie statische Seiten (z. B. OB-Cache).
(7) Schreiben Sie effizientes SQL. Beispielsweise wird SELECT * FROM TABEL in SELECT field_1, field_2, field_3 FROM TABLE geändert.
Mit welcher Methode lösen Sie bei Websites mit hohem Datenverkehr das Problem der Statistik von Seitenbesuchen?
(1) Bestätigen Sie, ob der Server den aktuellen Datenverkehr unterstützen kann.
(2) Datenbankzugriff optimieren.
(3) Der externe Zugriff auf Links (Hotlinking), wie z. B. Bild-Hotlinking, ist untersagt.
(4) Herunterladen der Kontrolldatei.
(5) Führen Sie einen Lastausgleich durch und verwenden Sie verschiedene Hosts, um den Datenverkehr zu entlasten.
(6) Nutzen Sie Browsing-Statistiksoftware, um die Anzahl der Besuche zu verstehen und gezielte Optimierungen durchzuführen.
3. Objektorientierter Teil
1. Was ist objektorientiert? (Antworten Sie mit Verständnis)
Objektorientiert ist eine Idee on Prozessorientiert bedeutet, dass objektorientiert Funktionen über Objekte implementiert, Funktionen in Objekte kapselt und die Objekte bestimmte Details implementieren lässt.
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: privates Mitglied, auf das 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 Zugriffsbeschrä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 Programmausführung dynamisch zugewiesen wird Die Größe des zuzuordnenden Heap-Speichers kann anhand der Ausführungsbedingungen des Programms bestimmt werden.
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
oder ähnliche schließende Tags 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 leere Teile vom Parser nicht automatisch gelöscht, aber HTML filtert Leerzeichen heraus.
Tags sind unterschiedlich:
(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 allgegenwärtig sein. XML wird das am weitesten verbreitete Werkzeug zur Datenverarbeitung und Datenübertragung werden.
5. Was sind die Merkmale von Objektorientierung?
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 zu verhindern, dass die gegenseitige Abhängigkeit von Programmen Probleme verursacht. Die Auswirkungen zukünftiger Änderungen.
Vererbung:
Beim Definieren und Implementieren einer Klasse können Sie dies auf der Grundlage einer vorhandenen Klasse tun. Der Inhalt wird als eigener Inhalt betrachtet Es können neue Inhalte hinzugefügt oder die ursprüngliche Methode geändert werden, um sie für spezielle Anforderungen besser geeignet zu machen. 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 im Programm bestimmt werden Zur Laufzeit wird bestimmt, dass eine Referenzvariable auf ein Instanzobjekt welcher Klasse zeigt. Der von der Referenzvariable ausgegebene Methodenaufruf ist eine Methode, die in welcher Klasse implementiert ist. Dies muss während der Ausführung des Programms ermittelt werden.
Abstraktion:
Abstraktion besteht darin, die Ähnlichkeiten und Gemeinsamkeiten einiger Dinge herauszufinden und diese Dinge dann in eine Klasse einzuteilen. In dieser Klasse werden nur die Ähnlichkeiten und Gemeinsamkeiten dieser Dinge berücksichtigt Ignorieren Sie die Aspekte, die für das aktuelle Thema und Ziel irrelevant sind, und konzentrieren Sie sich auf 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.
Unterschiede:
(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 der abstrakten Klasse, die die Datenkapselung realisieren können, aber die Schnittstelle verfügt nicht über 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() verwendet, um die Konstruktormethode zu deklarieren, 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 mit Beispielen
Überladen bedeutet, die Methoden der übergeordneten Klasse zu überschreiben, d. h. die Methoden in der Unterklasse zu verwenden, um die geerbten Methoden zu ersetzen aus der übergeordneten Klasse, auch Methodenumschreiben genannt.
Der Schlüssel zum Überschreiben der übergeordneten Klassenmethode besteht darin, dieselbe Methode in der übergeordneten Klasse 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 automatisch aufgerufen, wenn eine Klasse instanziiert wird.
__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 bzw. self und parent? In welchen Situationen wird es verwendet?
$dieses aktuelle Objekt
selbst aktuelle Klasse
übergeordnete ü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 in Klassen 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.
Konstanten mit dem Schlüsselwort const definieren.
Zum Beispiel: const PI = 3.1415326;
Ob innerhalb einer Klasse oder außerhalb einer Klasse, der Zugriff auf Konstanten und Variablen sind unterschiedlich. Konstanten müssen keine Objekte instanziieren. Das Format von
für den Zugriff auf Konstanten ist der Klassenname plus das Bereichsoperatorsymbol (Doppelpunkt).
Das heißt: Klassenname :: Klassenkonstantenname;
12. Wie verwende ich den Bereichsoperator::? In welchen Situationen wird es verwendet?
(1) Klassenkonstanten aufrufen
(2) Statische Methoden aufrufen (mit Statik modifizierte Klassenmethoden)
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 findet den Pfad der Klassendatei basierend auf dem Namen der instanziierten Klasse. Wenn festgestellt wird, dass die Klassendatei im Pfad der Klassendatei vorhanden ist,
Führen Sie „Include“ oder „Require“ aus, um diese Klasse zu laden. 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 den Debugging-Modus und den Ausführungsmodus Verwandte Konstanten (optional)
(3) Laden Sie 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 ohne besonders klare Vorschriften. Die MVC-Schichtung in ThinkPHP spiegelt sich grob wider in:
Modell (M): Die Definition des Modells wird durch die Model-Klasse vervollständigt.
Controller (C): Anwendungscontroller (Kerncontroller-App-Klasse) und Aktionscontroller übernehmen beide die Rolle des Controllers. Der Aktionscontroller übernimmt die Geschäftsprozesssteuerung, während der Anwendungscontroller für die Planungssteuerung verantwortlich ist.
Ansicht (V): Sie besteht aus einer Ansichtsklasse und einer 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 arbeiten 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.
Kurz gesagt: Das MVC-Modell von ThinkPHP bietet 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 entsprechend ihrem eigenen Verständnis ausdrücken)
(1) Wählen Sie die richtige Speicher-Engine
MyISAM ist für einige Anforderungen geeignet. Ideal für Abfrage- schwere Anwendungen, aber nicht sehr gut für große 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
Es sei denn, Sie haben einen ganz bestimmten Grund, 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. Zusätzlich zum Systemkern gibt es viele Tag-Erweiterungsbits, und jede Tag-Position kann ihre eigene Funktion ausführen selbständiges Verhalten. 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 eigene Konfigurationsdatei des Frameworks. 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 von Benutzereingabedaten beim Schreiben von Code nicht. Der Injektor kann einen Datenbankabfragecode in das Formular eingeben und senden, und das Programm fügt die übermittelten Informationen zusammen, um eine vollständige SQL zu generieren -Anweisung wird der Server 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 die SQL-Injection? (Verstehen)
(1) Versuchen Sie, Arrays für Abfragebedingungen zu verwenden.
(2) Wenn Sie Zeichenfolgenabfragebedingungen verwenden müssen, verwenden Sie den Vorverarbeitungsmechanismus 🎜>
(3) Bindungsparameter verwenden (4) Aktivieren Sie die Datenfeldtypüberprüfung, und Sie können die Konvertierung numerischer Datentypen erzwingen (die Feldtypüberprüfung ist seit Version 3.1 obligatorisch)(5) Verwenden Sie automatische Überprüfungs- und automatische Vervollständigungsmechanismen, um die anwendungsspezifische Filterung anzupassen. (6) Verwenden Sie Feldtypprüfung, automatische Überprüfung und automatische Vervollständigungsmechanismen, um die Eingabe schädlicher Daten zu verhindern. 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:// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define(‘APP_DEBUG’, true);
{KaTeX parse error: Expected 'EOF', got '}' at position 25: …ver.script_name}̲ // 输出_SERVER[‘SCRIPT_NAME’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 22: …session.user_id}̲ // 输出_SESSION[‘user_id’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 21: ….get.pageNumber}̲ // 输出_GET[‘pageNumber’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 18: …ink.cookie.name}̲ // 输出_COOKIE[‘name’]变量
5. Smart Template Engine
1. Was ist der Unterschied zwischen Kompilierung und Caching? Der Kompilierungsprozess von Smarty besteht darin, die Vorlage zu übernehmen und die darin enthaltenen Tags durch den entsprechenden PHP-Code zu ersetzen. Tatsächlich handelt es sich um den Prozess der Mischung von PHP und HTMLSmartys Caching-Anforderungen: Bei manueller Aktivierung führt der Smarty-Cache die kompilierte Datei aus und generiert gleichzeitig eine statische HTML-Seite. Wenn Sie erneut darauf zugreifen, greifen Sie auf die HTML-Datei zu, sodass die Effizienz höher ist .
2. Was ist Smarty? Was sind die Vorteile von Smarty?
Smarty ist eine in PHP geschriebene PHP-Template-Engine Der logische Inhalt des Programms hat keinen Einfluss auf das Seitendesign des Künstlers, und wenn der Künstler die Seite erneut ändert, hat dies keinen Einfluss auf die Programmlogik des Programms. Dies ist besonders wichtig bei Projekten zur Zusammenarbeit mit mehreren Personen. (Es ist auch einfach, Programme mit mehreren Stilen 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 konvertieren, was der Benutzer letztendlich sieht HTML-Dateien werden in einer statischen HTML-Seite zwischengespeichert
(4) Plug-in-Technologie: Smarty kann Plug-ins anpassen.
Orte, an denen Smarty nicht geeignet ist
(1) Inhalte, die in Echtzeit aktualisiert werden müssen. Beispielsweise müssen die Daten wie bei der Lagerbestandsanzeige häufig aktualisiert werden
(2)小项目。小项目因为项目简单而美工与程序员兼于一人的项目
3、在模板中使用{$smarty}保留变量
{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.get.page}̲ //类似在php脚本中访问_GET[page] {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.cookies.}̲ {smarty.post.} {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.session.}̲ {smarty.server.}
在模板中访问php中的变量
5、变量调解器
2018PHP经典面试题大全汇总(更新)-PHP面试题
6、php查询mysql数据库时,查询中文结果时出现的乱码。怎么解决?
(1)文件meta(设置浏览器解析的时候)
(2)连接数据库时编码设定
(3)PHP文件中使用header函数确定编码
7、缓存机制
如果开启了缓存,smarty同时生成一份静态的html页面,如果在设定的时间没有过期,再次访问的时候,你访问的就是是html文件了,减少了读取数据库,所以就效率来说,要高一些。
8、smarty的赋值和载入模板
$Smarty->assign(name,value) $Smarty->display(‘index.html’)
9、marty模板技术的用途是什么?
为了php与html分开,美工和程序员各司其职,互不干扰。
10、smarty配置主要有哪几项?
(1)引入smarty.class.php;
(2) 实例化smarty对象;
(3)重新修改默认的模板路径;
(4)重新修改默认的编译后文件的路径;
(5)重新修改默认的配置文件的路径;
(6)重新修改默认的cache的路径。
(7) 可以设置是否开启cache。
(8)可以设置左侧和右侧定界符。
11、smarty在使用过程中需要注意哪些细节?
Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,
也就是说smarty技术将用户UI与php代码分离开。
这样程序员和美工各司其职,互不干扰。
12、smarty运用过程中要注意以下几个问题:
(1)正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;
(2)php页面中使用assign赋值 和display显示页面;
(3)smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
六、二次开发系统(DEDE、ecshop)
1、对二次开发的理解
二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。
2、MVC
Model(模型)数据处理。
View(视图) 模板显示。
Controller(控制器) 控制流程。
MVC的概念是什么?各层主要做什么工作?
MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。
使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
在网站开发中,
模型层一般负责对数据库表信息进行增删改查,
视图层负责显示页面内容,
控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,
执行完毕后由控制器层决定将结果assign到哪个view层。
3、二次开发程序安装后访问时候出现一些警告以及错误
根据错误,来修改服务器配置参数以及百度
4、功能,模板的更换,功能的添加修改
其实也就是面向对象的应用 用,以及模板的更换类似smarty的使用
5、用过哪些二次开发的东西?
Dedecms phpcms ecshop,基本这些的东西如果基础好了 学习起来都是没问题的。
6、像php做一次开发好,还是二次开发好?
一般中小企业都用cms系统二次开发,都是为了效率。当然如果想一次开发也行,会用框架而且时间充足的话就可以了,大企业都是团队来开发的,杜绝版权问题。
7、二次开发过程中很多类与类之间进行之间的方法访问,是通过什么方式传递的?
不是类继承而是对象组合,把实例化好的对象通过global传递进去
8、dedecms如果更换目录,后台某项就进不去了如何解决?
后台核心设置中修改成现在的 项目目录名称
9、dedecms中自定义模型的理解?
在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点。
相当于我们自动添加了表结构,适应现在当前需求的变化
10、dede中概念,设计和使用模板,必须要理解下面几个概念
(1)板块(封面)模板:
指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。
(2)列表模板:
指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。
(3) 档案模板:
表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。
(4) 其它模板:
一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。
11、dede中几种标签的使用?
列表 内容 等标签 只能在其本范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。
全局标签能在所有页面中使用
12、熟悉常用类库
(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前台入口文件(common.inc.php)
七、微信公众平台开发
1、微信运行机制
公众号与php之间用什么语言通信:Xml
Weixin.php中是如何接收公众号数据的:
$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];//接收数据 XML数据
2、消息类型
微信目前提供了7种基本消息类型,分别为:
(1)文本消息(text);
(2)图片消息(image);
(3)语音(voice)
(4)视频(video)
(5)地理位置(location);
(6)链接消息(link);
(7)事件推送(event)
类型。掌握不同的消息类型发送时的数据传递格式
3、将整个文件读入一个字符串的函数是
File_get_contents
4、常用函数
把xml数据解析成对象的函数是
simplexml_load_string( )
将字符串转换为数组的函数是___ explode_________,将数组转化为字符串的函数是____implode________.
编码 URL 字符串的字符串是____urlencode________.
5、Sprintf函数的作用
这个都是可以查手册的。
6、微信公众号出现无法提供服务的原因?
(1)网络原因 ,数据接口原因
(2)代码错误,怎么推测原因
修改的哪里检查一下,如果代码没错
可以输出数据 看一下。用php操作文件
$myfile = fopen(“newfile.txt”, “w”); txt="aaaaaaaaaa";fwrite( txt ="aaaaaaaaaa";fwrite(txt="aaaaaaaaaa";fwrite(myfile, txt);fclose( txt);fclose(txt);fclose(myfile);
7、自定义菜单的事件推送
单击
单击跳转链接
扫码推事件
扫码推且弹出
弹出系统拍照发图的事件
弹出微信相册发图器的事件
弹出地理位置选择器的事件
8、token的作用
安全机制验证,用于微信服务器与PHP服务器之间的安全验证
9、Appid与secrect的作用
请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码
laravle面试题
PHP7 和 PHP5 的区别,具体多了哪些新特性?
性能提升了两倍
结合比较运算符 (<=>)
标量类型声明
返回类型声明
try…catch 增加多条件判断,更多 Error 错误可以进行异常处理
匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义
…… 了解更多查看文章底部链接 PHP7 新特性
为什么 PHP7 比 PHP5 性能提升了?
变量存储字节减小,减少内存占用,提升变量操作速度
改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
laravel 模块
服务提供者是什么?
服务提供者是所有 Laravel 应用程序引导启动的中心, Laravel 的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。
IoC 容器是什么?
IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。
Einfach ausgedrückt besteht seine Funktion darin, mithilfe der Abhängigkeitsinjektion komplexe Anwendungen in kooperierende Objekte zu zerlegen, wodurch die Komplexität der Problemlösung verringert und eine geringe Kopplung und eine hohe Erweiterung des Anwendungscodes erreicht werden.
Der Service-Container in Laravel ist ein Tool zur Verwaltung von Klassenabhängigkeiten und zur Durchführung der Abhängigkeitsinjektion.
Was sind Fassaden?
Facades (ein Entwurfsmuster, normalerweise als Erscheinungsmuster übersetzt) bietet eine „statische“ (statische) Schnittstelle für den Zugriff auf im IoC-Container registrierte Klassen. Bietet eine einfache, leicht zu merkende Syntax, ohne dass man sich lange Klassennamen merken muss, die manuell eingefügt oder konfiguriert werden müssen. Darüber hinaus wird das Testen durch die einzigartige Verwendung der dynamischen Methoden von PHP sehr einfach.
Was ist ein Vertrag?
Vertrag ist die Schnittstelle für Laravel, um die vom Framework bereitgestellten Kerndienste zu definieren. Es gibt keinen wesentlichen Unterschied zwischen Contract und Facades. Ihre Funktion besteht darin, die Schnittstelle weniger gekoppelt und einfacher zu machen.
Was ist das Prinzip der Abhängigkeitsinjektion?
Ich werde das nicht erklären. Dies ist die Voraussetzung für das Verständnis von IoC-Containern.
Was ist Composer und wie funktioniert es?
Composer ist ein Abhängigkeitsmanagement-Tool für PHP. Das Arbeitsprinzip besteht darin, das entwickelte Erweiterungspaket aus dem Composer-Repository packagist.org in unsere Anwendung herunterzuladen und Abhängigkeiten und Versionskontrolle zu deklarieren.
Caching
Was ist der Unterschied zwischen Redis und Memecached?
Redis unterstützt umfangreichere Datenspeichertypen: String, Hash, List, Set und Sorted Set. Memcached unterstützt nur einfache Schlüssel-Wert-Strukturen.
Memcached-Schlüsselwertspeicher hat eine höhere Speicherauslastung als Redis, das eine Hash-Struktur für den Schlüsselwertspeicher verwendet.
Redis bietet Transaktionsfunktionen, um die Atomizität einer Reihe von Befehlen sicherzustellen
Redis unterstützt Datenpersistenz und kann Daten im Speicher auf der Festplatte halten
Redis verwendet nur einen einzigen Kern, Während Memcached mehrere Kerne verwenden kann, bietet Redis im Durchschnitt eine höhere Leistung als Memcached, wenn auf jedem Kern kleine Daten gespeichert werden.
Wie erreicht Redis Persistenz?
RDB-Persistenz speichert den Status von Redis im Speicher auf der Festplatte, was einer Sicherung des Datenbankstatus entspricht.
AOF-Persistenz (Append-Only-File), AOF-Persistenz zeichnet die Datenbank auf, indem der Schreibstatus der Ausführung der Redis-Serversperre gespeichert wird. Äquivalent zu den von der Sicherungsdatenbank empfangenen Befehlen werden alle in AOF geschriebenen Befehle im Redis-Protokollformat gespeichert.
Datenbank
Was ist ein Index und welche Rolle spielt er? Was sind die gängigen Indextypen? MySQL-Indizierungsprinzipien?
Indizes sind eine besondere Art von Datei. Sie enthalten Referenzzeiger auf alle Datensätze in der Datentabelle, was dem Inhaltsverzeichnis eines Buches entspricht. Seine Funktion besteht darin, die Effizienz des Datenabrufs zu beschleunigen. Zu den gängigen Indextypen gehören Primärschlüssel, eindeutiger Index, zusammengesetzter Index und Volltextindex.
Prinzipien der Indexerstellung
Prinzip des Präfixes ganz links
Wählen Sie stark differenzierte Spalten als Indizes
Erweitern Sie den Index so weit wie möglich, erstellen Sie keine neuer Index
Wie gehe ich mit hoher Parallelität um?
Caching verwenden
Optimieren Sie die Datenbank und verbessern Sie die Effizienz der Datenbanknutzung
Lastausgleich
Ich werde nicht viel über das Entwurfsmuster von PHP sprechen, aber Das SOLID-Designprinzip lautet: Jeder PHPer muss es beherrschen.
Das obige ist der detaillierte Inhalt vonVollständige Sammlung von PHP-Interviewfragen (sammelnswert). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!