Es ist warm und es ist die jährliche IT-Rekrutierungssaison. Wie das Sprichwort sagt, gibt es drei Gold- und vier Silbermedaillen. Jedes Unternehmen sucht rekrutiert, und jeder, der einen Job sucht oder wechselt, sucht auch nach einem. Wenn Sie in ein gutes Unternehmen eintreten, sind Ihre Fähigkeiten das Wichtigste, aber Ihre Bewerbungsfähigkeiten dürfen nicht außer Acht gelassen werden. Auf der chinesischen Website von PHP sind umfassende PHP-Interviewfragen als Referenz zusammengefasst! (Rekrutierungssaison 2017: Wie sind PHP-Gehälter und -Leistungen?)
Grundlegende PHP-Interviewfragen
Doppelte Anführungszeichen interpretieren Variablen, einfache Anführungszeichen interpretieren keine Variablen
Fügen Sie einfache Anführungszeichen in doppelte Anführungszeichen ein. Wenn eine Variable vorhanden ist, muss die Variablenerklärung
Dem Variablennamen in doppelten Anführungszeichen muss ein Sonderzeichen folgen, bei dem es sich nicht um eine Zahl, einen Buchstaben oder einen Unterstrich handelt, oder die Variable muss in {} eingeschlossen werden, andernfalls wird der Teil nach dem Variablennamen als Ganzes behandelt, was zu Syntaxfehlern führt.
Einfache Anführungszeichen interpretieren keine Escape-Zeichen , aber interpretieren Sie ' und \
, um einfache Anführungszeichen so weit wie möglich zu verwenden. Einfache Anführungszeichen sind effizienter als doppelte Anführungszeichen (da doppelte Anführungszeichen zuerst durchlaufen werden müssen, um festzustellen). ob sie vor der Operation Variablen enthalten, während einfache Anführungszeichen nicht erforderlich sind)
$_GET ----->Übertragungsmethode abrufen
$_POST ----->Übertragungsmethode posten
$_REQUEST ----->Kann Get- und Post-Werte auf zwei Arten empfangen
$GLOBALS -----> Alle Variablen werden im
$_FILES ----->Dateien hochladen mit
$_SERVER ----->System platziert Umgebungsvariablen
$_SESSION -----> Sitzungssteuerung wird verwendet
$ _COOKIE ----->Sitzung Wird bei der Steuerung von
HTTP definiert verschiedene Methoden zur Interaktion mit dem Server. Die grundlegendsten sind POST, GET, PUT und DELETE. Der vollständige Name der unverzichtbaren URL lautet: Ressourcendeskriptor Netzwerk und Post, Get, Put und Delegate sind die Ressourcen, die hinzugefügt, gelöscht, geändert oder überprüft werden können!
get fügt die Parameterdatenwarteschlange der URL hinzu, auf die das Aktionsattribut des verweist Der Wert entspricht eins zu eins jedem Feld im Formular, was aus der URL ersichtlich ist. Der Beitrag verwendet den HTTPPOST-Mechanismus, um zu verhindern, dass jedes Feld und sein Inhalt im Formular zusammen an die angegebene URL-Adresse übertragen werden durch das Aktionsattribut im HTML-Kopf, und der Benutzer kann es nicht sehen
Für die get-Methode verwendet die Serverseite Request.QueryString, um den Wert abzurufen Variable. Für die Post-Methode verwendet die Serverseite Request.Form, um die übermittelten Daten abzurufen
Die per Get übertragene Datenmenge ist gering und die per Post übertragene Datenmenge Im Allgemeinen ist die maximale Menge in IIS4 80 KB und in IIS5 1000 KB. Die Sicherheit ist hoch
Die GET-Anfrage sendet eine Datenanforderung an die Datenbank, um Informationen zu erhalten. Diese Anfrage wird genau wie die Auswahloperation der Datenbank nur zum Abfragen von Daten verwendet Das Ändern oder Hinzufügen von Daten hat keinen Einfluss auf den Inhalt der Ressource, d. h. die Anforderung hat keine Nebenwirkungen. Egal wie oft Sie den Vorgang durchführen, das Ergebnis ist das gleiche.
Im Gegensatz zu GET sendet die PUT-Anfrage Daten an den Server, um die Informationen zu ändern. Diese Anfrage ähnelt dem Aktualisierungsvorgang der Datenbank und wird zum Ändern des Dateninhalts verwendet. aber Der Datentyp wird nicht erhöht, was bedeutet, dass die Ergebnisse unabhängig von der Anzahl der durchgeführten PUT-Vorgänge nicht unterschiedlich sind.
Die POST-Anfrage ähnelt der PUT-Anfrage. Beide senden Daten an den Server. Diese Anfrage ändert jedoch die Art der Daten und anderer Ressourcen, genau wie der Einfügevorgang der Datenbank wird neue Inhalte erstellen. Fast alle aktuellen Übermittlungsvorgänge werden mit POST angefordert.
DELETE-Anfrage wird, wie der Name schon sagt, zum Löschen einer bestimmten Ressource verwendet. Diese Anfrage ähnelt dem Löschvorgang der Datenbank.
Hypertext-Präprozessor----Hypertext-Präprozessor
Originalname der persönlichen Homepage
Zielzweck: Ermöglichen Sie Webentwicklern das schnelle Schreiben dynamisch generierter Webseiten. PHP bettet das Programm zur Ausführung in das HTML-Dokument ein, was viel effizienter ist als CGI, das die HTML-Bearbeitung vollständig generiert
HTML: Hypertext Markup Language
Gründer: Rasmus Lerdorf, geboren 1968, University of Waterloo, Kanada
Ledov schrieb das Wartungsprogramm zunächst in Prel-Sprache, um seine persönliche Webseite zu pflegen, und schrieb es dann in C um, was schließlich zu PHP/Fi führte
Zeitleiste:
1995.06.08 Öffentliche Veröffentlichung von PHP/FI
1995 php2.0, Unterstützung für MySQL hinzugefügt
1997 php3.0
2000 php4.0
2008 php5.0
Seitdem PHP6.0 löst die Unicode-Codierung nicht vollständig, es gibt im Grunde keine Anwendung in der Produktionslinie. Es handelt sich im Grunde nur um ein Konzeptprodukt. Viele Funktionen wurden in PHP5.3.3 und PHP5.3.4 implementiert
Coda (Mac)
PHPStrom
NodePad++
PHP mischt auf einzigartige Weise C, Java, Prel und PHPs eigene Syntax
Es kann dynamische Webseiten schneller ausführen Im Vergleich zu anderen Programmiersprachen bettet PHP Programme zur Ausführung in HTML-Dokumente ein >Unterstützt fast alle gängigen Datenbanken und Betriebssysteme
Freiheit
Datenbank-Cache
7. HTTP-Statuscode
* echo、print是php语句,var_dump和print_r是函数 * echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用 * print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试 * var_dump() 判断一个变量的类型和长度,并输出变量的数值
Gemeinsame HTTP-Statuscodes:
200 – Anfrage erfolgreich301 – Die Ressource (Webseite usw.) wird dauerhaft an eine andere URL maskiert
2** – Erfolg, der Vorgang wurde erfolgreich empfangen und verarbeitet
Magische Anführungszeichen sind Daten, die automatisch in das PHP-Skript eingegeben werden Escape, es ist am besten, nicht beim Codieren zu maskieren, sondern nach Bedarf während der Laufzeit zu maskieren
10. Verwenden Sie diese Tools für die Versionskontrolle $_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR')
cvs, svn, vss, gitip2long进行转换
11. Methoden zur Optimierung der Datenbankgethostbyname('www.baidu.com')
建立索引
优化查询语句
Smarty:Smarty算是一种很老的PHP模板引擎了,它曾是我使用这门语言模板的最初选择。虽然它的更新已经不算频繁了,并且缺少新一代模板引擎所具有的部分特性,但是它仍然值得一看。
确认服务器硬件是否能够支持当前的流量
数据库读写分离,优化数据表
程序功能规则,禁止外部的盗链
控制大文件的下载
使用不同主机分流主要流量
require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含
由模型、视图、控制器完成的应用程序,由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图
变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量
php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的引用(换言之,成为了其别名或者指向)了原始变量。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销
isset 判断变量是否定义或者是否为空
变量存在返回ture,否则返回false 变量定义不赋值返回false unset一个变量,返回false 变量赋值为null,返回false
empty:判断变量的值是否为空,能转换为false的都是空,为空返回true,反之返回false。
"",0,"0",NULL,FALSE都认为为空,返回true 没有任何属性的对象都认为是空
is_null:检测传入的值(值、变量、表达式)是否为null
定义了,但是赋值为Null 定义了,但是没有赋值 unset一个变量
Firefox的firebug
Chrome的开发工具
Emmet
JSON格式校验工具
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。
索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。
XSS ist ein Cross-Site-Scripting-Angriff. Zunächst wird die Cross-Site-Scripting-Schwachstelle genutzt, um ein vom Angreifer erstelltes Skript in einem privilegierten Modus auszuführen, und dann wird das unsichere Activex-Steuerelement verwendet, um böswillige Verhaltensweisen auszuführen .
Verwenden Sie die Funktion htmlspecialchars(), um den übermittelten Inhalt zu filtern und die Sonderzeichen in der Zeichenfolge zu materialisieren.
Ursache der SQL-Injection: Während des Programmentwicklungsprozesses haben Sie nicht auf das standardmäßige Schreiben von SQL-Anweisungen und das Filtern von Sonderzeichen geachtet, was dazu führte, dass der Client einige SQL-Anweisungen über globale Variablen POST übermitteln konnte und GET für die normale Ausführung.
Einstellungen „magic_quotes_gpc“ und „magic_quotes_runtime“ in der Konfigurationsdatei aktivieren
Beim Ausführen von SQL-Anweisungen verwenden addslashes konvertiert SQL-Anweisungen
Versuchen Sie beim Schreiben von SQL-Anweisungen, doppelte und einfache Anführungszeichen nicht wegzulassen.
Filtern Sie einige Schlüsselwörter in der SQL-Anweisung heraus: aktualisieren, einfügen, löschen, auswählen, *.
Verbessern Sie Ihre Benennungsfähigkeiten für Datenbanktabellen und -felder und benennen Sie einige wichtige Felder entsprechend den Merkmalen des Programms, sodass sie schwer zu erraten sind.
Setzen Sie „register_globals“ in der PHP-Konfigurationsdatei auf „off“ und deaktivieren Sie die globale Variablenregistrierung.
Fehlermeldungen steuern und keine Fehlermeldungen ausgeben Browser. Fehlerinformationen in die Protokolldatei schreiben.
Befehlsinjektion
Evaluierungsinjektion
Client-Skript-Einfügung
Cross Site Scripting (XSS)
SQL-Injection
Cross Site Request
Forgeries, CSRF)
Sitzungshijacking
Sitzungsfixierung
HTTP-Antwortaufteilung
Sicherheitslücke beim Datei-Upload (Datei-Upload-Angriff)
Verzeichnisdurchquerung (Verzeichnisdurchquerung)
Remote-Inklusion-Angriff (Remote-Inklusion)
Dynamische Variable
Auswertung)
URL-Angriff (URL-Angriff)
Formularübermittlung gefälschtes Formular
Einreichungen
HTTP-Request-Spoofing-Angriff (gefälschte HTTP-Anfragen)
Duokou erfüllt Benutzeranfragen, indem er auf verschiedene Dateien zugreift. Ein Webprogramm mit nur einem Eintrag leitet alle Anfragen an eine Skriptdatei weiter.
Ein einziger Zugang erleichtert die Kontrolle von Berechtigungen und erleichtert Sicherheitsüberprüfungen bei http-Anfragen.
Nachteile: Die URL sieht nicht so schön aus, vor allem nicht suchmaschinenfreundlich.
Schneller Zugriff auf spezifische Informationen in der Datentabelle und Verbesserung der Abrufgeschwindigkeit
Erstellen Sie einen eindeutigen Index, um die Einzigartigkeit jeder Datenzeile sicherzustellen die Datenbanktabelle sex.
Beschleunigen Sie Tabellen und Verknüpfungen zwischen Tabellen
Wenn Sie Gruppierungs- und Sortierklauseln für den Datenabruf verwenden, können Sie die Gruppierungs- und Sortierzeit erheblich verkürzen
Negative Auswirkung:
Das Erstellen und Verwalten von Indizes nimmt Zeit in Anspruch, und diese Zeit nimmt zu, wenn die Datenmenge zunimmt; nicht nur Tabellen müssen Daten belegen Speicherplatz: Jeder Index muss auch physischen Speicherplatz belegen. Wenn die Tabelle hinzugefügt, gelöscht oder geändert wird, muss der Index dynamisch verwaltet werden, was die Datenwartungsgeschwindigkeit verringert.
Erstellen Sie einen Index für die am häufigsten verwendeten Felder, um den Umfang der Abfrage einzugrenzen.
Indizes für häufig verwendete Felder erstellen, die sortiert werden müssen
Es ist nicht angebracht, einen Index für Spalten zu erstellen, die selten an Abfragen beteiligt sind, oder für Spalten mit vielen doppelten Werten.
Für einige spezielle Datentypen ist die Erstellung von Indizes nicht geeignet, z. B. Textfelder (Text) usw.
Das wichtigste Merkmal, das es von anderen Datenbanken unterscheidet, ist seine Plug-in-Tabellenspeicher-Engine. Denken Sie daran: Die Speicher-Engine basiert auf Tabellen, nicht auf Datenbanken.
Der Unterschied zwischen InnoDB und MyISAM:
InnoDB-Speicher-Engine: Hauptsächlich für OLTP-Anwendungen (Online Transaction Processing, Online-Transaktionsverarbeitung) ist es die erste ACID mit vollständiger Unterstützung Transaktionsspeicher-Engine (die erste Speicher-Engine von BDB, die Transaktionen unterstützt, hat die Entwicklung eingestellt).
Eigenschaften:
Reihensperrdesign, Unterstützung von Fremdschlüsseln
Unterstützt konsistente, nicht sperrende Lesevorgänge ähnlich dem Oracle-Stil (dh: Lesevorgänge generieren standardmäßig keine Sperren);
InnoDB wird es in a einfügen logischer Tabellenbereich und wird von InnoDB selbst verwaltet. Ab der MySQL 4.1-Version kann jede InnoDB-Speicher-Engine-Tabelle in einer unabhängigen ibd-Datei gespeichert werden.
InnoDB verwendet MVCC (Multi-Version Concurrency Control: Lesen blockiert das Schreiben und Schreiben). blockiert das Lesen nicht), um eine hohe Parallelität zu erreichen, und implementiert die 4 Isolationsstufen des SQL-Standards (die Standardeinstellung ist REPEATABLE-Stufe).
InnoDB bietet außerdem hohe Leistung und hohe Verfügbarkeit Funktionen wie Puffer einfügen, doppeltes Schreiben, adaptiver Hash-Index und Vorauslesen;
InnoDB verwendet eine Cluster-Methode, um Daten in der Reihenfolge zu speichern Primärschlüssel (wenn der Primärschlüssel beim Erstellen der Tabelle nicht explizit angegeben wird, generiert InnoDB für jede Zeile eine 6-Byte-ROWID und verwendet diese als Primärschlüssel). Die InnoDB-Tabelle verfügt über drei versteckte Felder: Zusätzlich zu der oben erwähnten 6-Byte-DB_ROW_ID gibt es auch eine 6-Byte-DB_TX_ID (Transaktions-ID) und eine 7-Byte-DB_ROLL_PTR (die auf die Adresse des entsprechenden Rollback-Segments zeigt). Dies kann über den Innodb-Monitor gesehen werden;
Funktionen: Unterstützt keine Transaktionen, unterstützt jedoch Tabellen und Volltextindizes. Die Betriebsgeschwindigkeit ist hoch;
Die MyISAM-Speicher-Engine-Tabelle besteht aus MYD und MYI, MYD wird zum Speichern von Datendateien und MYI zum Speichern von Indexdateien verwendet. Die MySQL-Datenbank speichert nur ihre Indexdateien und das Zwischenspeichern der Datendateien wird dem Betriebssystem selbst überlassen.
Ab der MySQL-Version 5.0 unterstützt MyISAM standardmäßig 256T Einzeltabellendaten >
Was ist zunächst ein Cross-Join:
Äußerer Join
Die Ergebnismenge enthält nicht nur Zeilen, die die Join-Bedingungen erfüllen, sondern auch alle Datenzeilen in der linken Tabelle, der rechten Tabelle oder in beiden Tabellen drei Typen Die Situationen werden nacheinander als linker äußerer Join, rechter äußerer Join und vollständiger äußerer Join bezeichnet. Linker äußerer Join, auch linker Join genannt, die linke Tabelle ist die Haupttabelle, alle Datensätze in der linken Tabelle werden in der Ergebnismenge angezeigt, und die Datensätze, die in der rechten Tabelle nicht übereinstimmen, müssen trotzdem angezeigt werden angezeigt werden, rechts werden die entsprechenden Feldwerte mit NULL gefüllt. Rechter äußerer Join, auch rechter Join genannt. Die rechte Tabelle ist die Haupttabelle und alle Datensätze in der rechten Tabelle werden im Ergebnissatz angezeigt. Left-Joins und Right-Joins sind austauschbar und MySQL unterstützt derzeit keine vollständigen Outer-Joins. 28. Schreiben Sie die Namen von mehr als drei MySQL-Datenbankspeicher-Engines (Tipp: Groß- und Kleinschreibung beachten) MyISAM, InnoDB, BDB (BerkeleyDB), Merge, Memory (Heap), Beispiel, Federated,
Archive, CSV, Blackhole, MaxDB und mehr als ein Dutzend Engines
29. Was ist objektorientiert? Was sind die Hauptmerkmale? Was sind die wichtigsten Prinzipien?
30. Was ist statisches Routing und was sind seine Merkmale?
Dynamisches Routing wird dynamisch erstellt, indem Routing-Protokolle den Inhalt von Routing-Tabellen in Echtzeit aktualisieren, indem sie ihre eigenen Routing-Informationen austauschen. Dynamisches Routing kann die Topologie des Netzwerks automatisch lernen und die Routing-Tabelle aktualisieren. Der Nachteil besteht darin, dass das Routing von Broadcast-Aktualisierungsinformationen viel Netzwerkbandbreite beansprucht.
Memcahce verwendet den LRU-Algorithmus, um abgelaufene Daten schrittweise zu löschen.
Beliebte Ajax-Frameworks sind jQuery, Prototype, Dojo und MooTools.
Das Arbeitsprinzip von Ajax besteht darin, dass der angegebene Speicherort einer Seite den gesamten Ausgabeinhalt einer anderen Seite laden kann. Auf diese Weise kann eine statische Seite auch die zurückgegebenen Dateninformationen aus der Datenbank abrufen. Daher ermöglicht die Ajax-Technologie, dass eine statische Webseite mit dem Server kommuniziert, ohne die gesamte Seite zu aktualisieren, wodurch die Wartezeit des Benutzers verkürzt wird, wodurch der Netzwerkverkehr reduziert und die Freundlichkeit des Kundenerlebnisses verbessert wird.
Bei der Verwendung von Ajax handelt es sich um die Datenübertragung, d sind die beiden am häufigsten verwendeten und JSON ist einfacher als XML.
Eine Transaktion ist eine vom Benutzer definierte Folge von Datenbankoperationen, die entweder alle oder keine ausgeführt werden Unter „Transaktions-Rollback“ versteht man das Rückgängigmachen der durch die Transaktion abgeschlossenen Aktualisierungsvorgänge an der Datenbank.
Wenn Sie zwei verschiedene Tabellen in der Datenbank gleichzeitig ändern möchten und es sich nicht um eine Transaktion handelt, kann es beim Ändern der ersten Tabelle zu einer Ausnahme während des Änderungsprozesses der zweiten Tabelle kommen Zu diesem Zeitpunkt kann nicht geändert werden. Nur die zweite Tabelle befindet sich noch in ihrem unveränderten Zustand, während die erste Tabelle geändert wurde. Wenn Sie sie als Transaktion festlegen und die erste Tabelle geändert wird und die zweite Tabelle abnormal geändert wird und nicht geändert werden kann, kehren die erste Tabelle und die zweite Tabelle in den unveränderten Zustand zurück. Dies wird als Transaktions-Rollback bezeichnet.
Die oben genannten 33 Fragen listen einige der Fragen im Vorstellungsgespräch von einfach bis schwierig auf. Für Studenten, die den Job wechseln möchten, kann das Durchgehen dieser Fragen ihre Leistung im Vorstellungsgespräch verbessern Die Erfolgsquote ist hoch, daher wünsche ich mir, dass jeder, der einen Job sucht, einen Job findet, mit dem er zufrieden ist!